diff --git a/README.md b/README.md index b0b28ff..6540ad4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Outback -A game for Minetest 0.4.16. The game is under heavy development and is still missing many features. +A game for Minetest 0.5-dev. The game is under heavy development and is still missing many features. ![Screenshot](https://raw.githubusercontent.com/vlapsley/outback/master/screenshot.png) diff --git a/game_api.txt b/game_api.txt new file mode 100755 index 0000000..96c2c31 --- /dev/null +++ b/game_api.txt @@ -0,0 +1,1003 @@ +Minetest Game API +================= +GitHub Repo: https://github.com/minetest/minetest_game + +Introduction +------------ + +The Minetest Game game offers multiple new possibilities in addition to the Minetest engine's built-in API, +allowing you to add new plants to farming mod, buckets for new liquids, new stairs and custom panes. +For information on the Minetest API, visit https://github.com/minetest/minetest/blob/master/doc/lua_api.txt +Please note: + + * [XYZ] refers to a section the Minetest API + * [#ABC] refers to a section in this document + * [pos] refers to a position table `{x = -5, y = 0, z = 200}` + +Bucket API +---------- + +The bucket API allows registering new types of buckets for non-default liquids. + + bucket.register_liquid( + "default:lava_source", -- name of the source node + "default:lava_flowing", -- name of the flowing node + "bucket:bucket_lava", -- name of the new bucket item (or nil if liquid is not takeable) + "bucket_lava.png", -- texture of the new bucket item (ignored if itemname == nil) + "Lava Bucket", -- text description of the bucket item + {lava_bucket = 1}, -- groups of the bucket item, OPTIONAL + false -- force-renew, OPTIONAL. Force the liquid source to renew if it has + -- a source neighbour, even if defined as 'liquid_renewable = false'. + -- Needed to avoid creating holes in sloping rivers. + ) + +The filled bucket item is returned to the player that uses an empty bucket pointing to the given liquid source. +When punching with an empty bucket pointing to an entity or a non-liquid node, the on_punch of the entity or node will be triggered. + +Beds API +-------- + + beds.register_bed( + "beds:bed", -- Bed name + def -- See [#Bed definition] + ) + + * `beds.can_dig(bed_pos)` Returns a boolean whether the bed at `bed_pos` may be dug + * `beds.read_spawns() ` Returns a table containing players respawn positions + * `beds.kick_players()` Forces all players to leave bed + * `beds.skip_night()` Sets world time to morning and saves respawn position of all players currently sleeping + +### Bed definition + + { + description = "Simple Bed", + inventory_image = "beds_bed.png", + wield_image = "beds_bed.png", + tiles = { + bottom = {'Tile definition'}, -- the tiles of the bottom part of the bed. + top = {Tile definition} -- the tiles of the bottom part of the bed. + }, + nodebox = { + bottom = 'regular nodebox', -- bottom part of bed (see [Node boxes]) + top = 'regular nodebox', -- top part of bed (see [Node boxes]) + }, + selectionbox = 'regular nodebox', -- for both nodeboxes (see [Node boxes]) + recipe = { -- Craft recipe + {"group:wool", "group:wool", "group:wool"}, + {"group:wood", "group:wood", "group:wood"} + } + } + +Bones API +--------- + +An ordered list of listnames (default: "main", "craft") of the player inventory, +that will be placed into bones or dropped on player death can be looked up or changed +in `bones.player_inventory_lists`. + +e.g. `table.insert(bones.player_inventory_lists, "backpack")` + +Creative API +------------ + +Use `creative.register_tab(name, title, items)` to add a tab with filtered items. +For example, + + creative.register_tab("tools", "Tools", minetest.registered_tools) + +is used to show all tools. Name is used in the sfinv page name, title is the +human readable title. + +`is_enabled_for` is used to check whether a player is in creative mode: + + creative.is_enabled_for(name) + +Override this to allow per-player game modes. + +The contents of `creative.formspec_add` is appended to every creative inventory +page. Mods can use it to add additional formspec elements onto the default +creative inventory formspec to be drawn after each update. + +Chests API +---------- + +The chests API allows the creation of chests, which have their own inventories for holding items. + +`default.chest.get_chest_formspec(pos)` + + * Returns a formspec for a specific chest. + * `pos` Location of the chest node, e.g `{x = 1, y = 1, z = 1}` + +`default.chest.chest_lid_obstructed(pos)` + + * Returns a boolean depending on whether or not a chest has its top obstructed by a solid node. + * `pos` Location of the chest node, e.g `{x = 1, y = 1, z = 1}` + +`default.chest.chest_lid_close(pn)` + + * Closes the chest that a player is currently looking in. + * `pn` The name of the player whose chest is going to be closed + +`default.chest.open_chests` + + * A table indexed by player name to keep track of who opened what chest. + * Key: The name of the player. + * Value: A table containing information about the chest the player is looking at. + e.g `{ pos = {1, 1, 1}, sound = null, swap = "chest" }` + +`default.chest.register_chest(name, def)` + + * Registers new chest + * `name` Name for chest + * `def` See [#Chest Definition] + +### Chest Definition + + description = "Chest", + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_front.png", + "default_chest_inside.png" + }, -- Textures which are applied to the chest model. + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, + protected = false, -- If true, only placer can modify chest. + +Doors API +--------- + +The doors mod allows modders to register custom doors and trapdoors. + +`doors.register_door(name, def)` + + * Registers new door + * `name` Name for door + * `def` See [#Door definition] + +`doors.register_trapdoor(name, def)` + + * Registers new trapdoor + * `name` Name for trapdoor + * `def` See [#Trapdoor definition] + +`doors.register_fencegate(name, def)` + + * Registers new fence gate + * `name` Name for fence gate + * `def` See [#Fence gate definition] + +`doors.get(pos)` + + * `pos` A position as a table, e.g `{x = 1, y = 1, z = 1}` + * Returns an ObjectRef to a door, or nil if the position does not contain a door + + ### Methods + + :open(player) -- Open the door object, returns if door was opened + :close(player) -- Close the door object, returns if door was closed + :toggle(player) -- Toggle the door state, returns if state was toggled + :state() -- returns the door state, true = open, false = closed + + the "player" parameter can be omitted in all methods. If passed then + the usual permission checks will be performed to make sure the player + has the permissions needed to open this door. If omitted then no + permission checks are performed. + +### Door definition + + description = "Door description", + inventory_image = "mod_door_inv.png", + groups = {choppy = 2}, + tiles = {"mod_door.png"}, -- UV map. + recipe = craftrecipe, + sounds = default.node_sound_wood_defaults(), -- optional + sound_open = sound play for open door, -- optional + sound_close = sound play for close door, -- optional + protected = false, -- If true, only placer can open the door (locked for others) + +### Trapdoor definition + + description = "Trapdoor description", + inventory_image = "mod_trapdoor_inv.png", + groups = {choppy = 2}, + tile_front = "doors_trapdoor.png", -- the texture for the front and back of the trapdoor + tile_side = "doors_trapdoor_side.png", -- the tiles of the four side parts of the trapdoor + sounds = default.node_sound_wood_defaults(), -- optional + sound_open = sound play for open door, -- optional + sound_close = sound play for close door, -- optional + protected = false, -- If true, only placer can open the door (locked for others) + +### Fence gate definition + + description = "Wooden Fence Gate", + texture = "default_wood.png", -- `backface_culling` will automatically be + -- set to `true` if not specified. + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), -- optional + +Dungeon Loot API +---------------- + +The mod that places chests with loot in dungeons provides an API to register additional loot. + +`dungeon_loot.register(def)` + + * Registers one or more loot items + * `def` Can be a single [#Loot definition] or a list of them + +`dungeon_loot.registered_loot` + + * Table of all registered loot, not to be modified manually + +### Loot definition + + name = "item:name", + chance = 0.5, + -- ^ chance value from 0.0 to 1.0 that the item will appear in the chest when chosen + -- due to an extra step in the selection process, 0.5 does not(!) mean that + -- on average every second chest will have this item + count = {1, 4}, + -- ^ table with minimum and maximum amounts of this item + -- optional, defaults to always single item + y = {-32768, -512}, + -- ^ table with minimum and maximum heights this item can be found at + -- optional, defaults to no height restrictions + types = {"desert"}, + -- ^ table with types of dungeons this item can be found in + -- supported types: "normal" (the cobble/mossycobble one), "sandstone", "desert" + -- optional, defaults to no type restrictions + +Fence API +--------- + +Allows creation of new fences with "fencelike" drawtype. + +`default.register_fence(name, item definition)` + + Registers a new fence. Custom fields texture and material are required, as + are name and description. The rest is optional. You can pass most normal + nodedef fields here except drawtype. The fence group will always be added + for this node. + +### fence definition + + name = "default:fence_wood", + description = "Wooden Fence", + texture = "default_wood.png", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + +Walls API +--------- + +The walls API allows easy addition of stone auto-connecting wall nodes. + +walls.register(name, desc, texture, mat, sounds) +^ name = "walls:stone_wall". Node name. +^ desc = "A Stone wall" +^ texture = "default_stone.png" +^ mat = "default:stone". Used to auto-generate crafting recipe. +^ sounds = sounds: see [#Default sounds] + +Farming API +----------- + +The farming API allows you to easily register plants and hoes. + +`farming.register_hoe(name, hoe definition)` + * Register a new hoe, see [#hoe definition] + +`farming.register_plant(name, Plant definition)` + * Register a new growing plant, see [#Plant definition] + +`farming.registered_plants[name] = definition` + * Table of registered plants, indexed by plant name + +### Hoe Definition + + + { + description = "", -- Description for tooltip + inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image + max_uses = 30, -- Uses until destroyed + material = "", -- Material for recipes + recipe = { -- Craft recipe, if material isn't used + {"air", "air", "air"}, + {"", "group:stick"}, + {"", "group:stick"}, + } + } + +### Plant definition + + { + description = "", -- Description of seed item + inventory_image = "unknown_item.png", -- Image to be used as seed's wield- and inventory image + steps = 8, -- How many steps the plant has to grow, until it can be harvested + -- ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber) + minlight = 13, -- Minimum light to grow + maxlight = default.LIGHT_MAX -- Maximum light to grow + } + +Fire API +-------- + +New node def property: + +`on_burn(pos)` + + * Called when fire attempts to remove a burning node. + * `pos` Position of the burning node. + + `on_ignite(pos, igniter)` + + * Called when Flint and steel (or a mod defined ignitor) is used on a node. + Defining it may prevent the default action (spawning flames) from triggering. + * `pos` Position of the ignited node. + * `igniter` Player that used the tool, when available. + + +Give Initial Stuff API +---------------------- + +`give_initial_stuff.give(player)` + +^ Give initial stuff to "player" + +`give_initial_stuff.add(stack)` + +^ Add item to the initial stuff +^ Stack can be an ItemStack or a item name eg: "default:dirt 99" +^ Can be called after the game has loaded + +`give_initial_stuff.clear()` + +^ Removes all items from the initial stuff +^ Can be called after the game has loaded + +`give_initial_stuff.get_list()` + +^ returns list of item stacks + +`give_initial_stuff.set_list(list)` + +^ List of initial items with numeric indices. + +`give_initial_stuff.add_from_csv(str)` + +^ str is a comma separated list of initial stuff +^ Adds items to the list of items to be given + + +Players API +----------- + +The player API can register player models and update the player's appearence + +* `player_api.register_model(name, def)` + * Register a new model to be used by players + * name: model filename such as "character.x", "foo.b3d", etc. + * def: See [#Model definition] + * saved to player_api.registered_models + +* `player_api.registered_player_models[name]` + * Get a model's definition + * see [#Model definition] + +* `player_api.set_model(player, model_name)` + * Change a player's model + * `player`: PlayerRef + * `model_name`: model registered with player_api.register_model() + +* `player_api.set_animation(player, anim_name [, speed])` + * Applies an animation to a player + * anim_name: name of the animation. + * speed: frames per second. If nil, default from the model is used + +* `player_api.set_textures(player, textures)` + * Sets player textures + * `player`: PlayerRef + * `textures`: array of textures, If `textures` is nil the default + textures from the model def are used + +* `player_api.get_animation(player)` + * Returns a table containing fields `model`, `textures` and `animation`. + * Any of the fields of the returned table may be nil. + * player: PlayerRef + +### Model Definition + + { + animation_speed = 30, -- Default animation speed, in FPS. + textures = {"character.png", }, -- Default array of textures. + visual_size = {x = 1, y = 1}, -- Used to scale the model. + animations = { + -- = {x = , y = }, + foo = {x = 0, y = 19}, + bar = {x = 20, y = 39}, + -- ... + }, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, -- In nodes from feet position + stepheight = 0.6, -- In nodes + eye_height = 1.47, -- In nodes above feet position + } + + +TNT API +------- + +`tnt.register_tnt(definition)` + +^ Register a new type of tnt. + + * `name` The name of the node. If no prefix is given `tnt` is used. + * `description` A description for your TNT. + * `radius` The radius within which the TNT can destroy nodes. The default is 3. + * `damage_radius` The radius within which the TNT can damage players and mobs. By default it is twice the `radius`. + * `sound` The sound played when explosion occurs. By default it is `tnt_explode`. + * `disable_drops` Disable drops. By default it is set to false. + * `ignore_protection` Don't check `minetest.is_protected` before removing a node. + * `ignore_on_blast` Don't call `on_blast` even if a node has one. + * `tiles` Textures for node + * `side` Side tiles. By default the name of the tnt with a suffix of `_side.png`. + * `top` Top tile. By default the name of the tnt with a suffix of `_top.png`. + * `bottom` Bottom tile. By default the name of the tnt with a suffix of `_bottom.png`. + * `burning` Top tile when lit. By default the name of the tnt with a suffix of `_top_burning_animated.png". + +`tnt.boom(position[, definition])` + +^ Create an explosion. + +* `position` The center of explosion. +* `definition` The TNT definion as passed to `tnt.register` with the following addition: + * `explode_center` false by default which removes TNT node on blast, when true will explode center node. + +`tnt.burn(position, [nodename])` + +^ Ignite node at position, triggering its `on_ignite` callback (see fire mod). +If no such callback exists, fallback to turn tnt group nodes to their +"_burning" variant. + nodename isn't required unless already known. + +To make dropping items from node inventories easier, you can use the +following helper function from 'default': + +default.get_inventory_drops(pos, inventory, drops) + +^ Return drops from node inventory "inventory" in drops. + +* `pos` - the node position +* `inventory` - the name of the inventory (string) +* `drops` - an initialized list + +The function returns no values. The drops are returned in the `drops` +parameter, and drops is not reinitialized so you can call it several +times in a row to add more inventory items to it. + + +`on_blast` callbacks: + +Both nodedefs and entitydefs can provide an `on_blast()` callback + +`nodedef.on_blast(pos, intensity)` +^ Allow drop and node removal overriding +* `pos` - node position +* `intensity` - TNT explosion measure. larger or equal to 1.0 +^ Should return a list of drops (e.g. {"default:stone"}) +^ Should perform node removal itself. If callback exists in the nodedef +^ then the TNT code will not destroy this node. + +`entitydef.on_blast(luaobj, damage)` +^ Allow TNT effects on entities to be overridden +* `luaobj` - LuaEntityRef of the entity +* `damage` - suggested HP damage value +^ Should return a list of (bool do_damage, bool do_knockback, table drops) +* `do_damage` - if true then TNT mod wil damage the entity +* `do_knockback` - if true then TNT mod will knock the entity away +* `drops` - a list of drops, e.g. {"wool:red"} + + +Screwdriver API +--------------- + +The screwdriver API allows you to control a node's behaviour when a screwdriver is used on it. +To use it, add the `on_screwdriver` function to the node definition. + +`on_rotate(pos, node, user, mode, new_param2)` + + * `pos` Position of the node that the screwdriver is being used on + * `node` that node + * `user` The player who used the screwdriver + * `mode` screwdriver.ROTATE_FACE or screwdriver.ROTATE_AXIS + * `new_param2` the new value of param2 that would have been set if on_rotate wasn't there + * return value: false to disallow rotation, nil to keep default behaviour, true to allow + it but to indicate that changed have already been made (so the screwdriver will wear out) + * use `on_rotate = false` to always disallow rotation + * use `on_rotate = screwdriver.rotate_simple` to allow only face rotation + + +Sethome API +----------- + +The sethome API adds three global functions to allow mods to read a players home position, +set a players home position and teleport a player to home position. + +`sethome.get(name)` + + * `name` Player who's home position you wish to get + * return value: false if no player home coords exist, position table if true + +`sethome.set(name, pos)` + + * `name` Player who's home position you wish to set + * `pos` Position table containing coords of home position + * return value: false if unable to set and save new home position, otherwise true + +`sethome.go(name)` + + * `name` Player you wish to teleport to their home position + * return value: false if player cannot be sent home, otherwise true + + +Sfinv API +--------- + +It is recommended that you read this link for a good introduction to the +sfinv API by its author: https://rubenwardy.com/minetest_modding_book/en/chapters/sfinv.html + +### sfinv Methods + +**Pages** + +* sfinv.set_page(player, pagename) - changes the page +* sfinv.get_homepage_name(player) - get the page name of the first page to show to a player +* sfinv.register_page(name, def) - register a page, see section below +* sfinv.override_page(name, def) - overrides fields of an page registered with register_page. + * Note: Page must already be defined, (opt)depend on the mod defining it. +* sfinv.set_player_inventory_formspec(player) - (re)builds page formspec + and calls set_inventory_formspec(). +* sfinv.get_formspec(player, context) - builds current page's formspec + +**Contexts** + +* sfinv.get_or_create_context(player) - gets the player's context +* sfinv.set_context(player, context) + +**Theming** + +* sfinv.make_formspec(player, context, content, show_inv, size) - adds a theme to a formspec + * show_inv, defaults to false. Whether to show the player's main inventory + * size, defaults to `size[8,8.6]` if not specified +* sfinv.get_nav_fs(player, context, nav, current_idx) - creates tabheader or "" + +### sfinv Members + +* pages - table of pages[pagename] = def +* pages_unordered - array table of pages in order of addition (used to build navigation tabs). +* contexts - contexts[playername] = player_context +* enabled - set to false to disable. Good for inventory rehaul mods like unified inventory + +### Context + +A table with these keys: + +* page - current page name +* nav - a list of page names +* nav_titles - a list of page titles +* nav_idx - current nav index (in nav and nav_titles) +* any thing you want to store + * sfinv will clear the stored data on log out / log in + +### sfinv.register_page + +sfinv.register_page(name, def) + +def is a table containing: + +* `title` - human readable page name (required) +* `get(self, player, context)` - returns a formspec string. See formspec variables. (required) +* `is_in_nav(self, player, context)` - return true to show in the navigation (the tab header, by default) +* `on_player_receive_fields(self, player, context, fields)` - on formspec submit. +* `on_enter(self, player, context)` - called when the player changes pages, usually using the tabs. +* `on_leave(self, player, context)` - when leaving this page to go to another, called before other's on_enter + +### get formspec + +Use sfinv.make_formspec to apply a layout: + + return sfinv.make_formspec(player, context, [[ + list[current_player;craft;1.75,0.5;3,3;] + list[current_player;craftpreview;5.75,1.5;1,1;] + image[4.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270] + listring[current_player;main] + listring[current_player;craft] + image[0,4.25;1,1;gui_hb_bg.png] + image[1,4.25;1,1;gui_hb_bg.png] + image[2,4.25;1,1;gui_hb_bg.png] + image[3,4.25;1,1;gui_hb_bg.png] + image[4,4.25;1,1;gui_hb_bg.png] + image[5,4.25;1,1;gui_hb_bg.png] + image[6,4.25;1,1;gui_hb_bg.png] + image[7,4.25;1,1;gui_hb_bg.png] + ]], true) + +See above (methods section) for more options. + +### Customising themes + +Simply override this function to change the navigation: + + function sfinv.get_nav_fs(player, context, nav, current_idx) + return "navformspec" + end + +And override this function to change the layout: + + function sfinv.make_formspec(player, context, content, show_inv, size) + local tmp = { + size or "size[8,8.6]", + theme_main, + sfinv.get_nav_fs(player, context, context.nav_titles, context.nav_idx), + content + } + if show_inv then + tmp[4] = theme_inv + end + return table.concat(tmp, "") + end + +Stairs API +---------- + +The stairs API lets you register stairs and slabs and ensures that they are registered the same way as those +delivered with Minetest Game, to keep them compatible with other mods. + +`stairs.register_stair(subname, recipeitem, groups, images, description, sounds)` + + * Registers a stair. + * `subname`: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_subname" + * `recipeitem`: Item used in the craft recipe, e.g. "default:cobble", may be `nil` + * `groups`: see [Known damage and digging time defining groups] + * `images`: see [Tile definition] + * `description`: used for the description field in the stair's definition + * `sounds`: see [#Default sounds] + +`stairs.register_slab(subname, recipeitem, groups, images, description, sounds)` + + * Registers a slabs + * `subname`: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_subname" + * `recipeitem`: Item used in the craft recipe, e.g. "default:cobble" + * `groups`: see [Known damage and digging time defining groups] + * `images`: see [Tile definition] + * `description`: used for the description field in the stair's definition + * `sounds`: see [#Default sounds] + +`stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds)` + + * A wrapper for stairs.register_stair and stairs.register_slab + * Uses almost the same arguments as stairs.register_stair + * `desc_stair`: Description for stair node + * `desc_slab`: Description for slab node + +Xpanes API +---------- + +Creates panes that automatically connect to each other + +`xpanes.register_pane(subname, def)` + + * `subname`: used for nodename. Result: "xpanes:subname" and "xpanes:subname_{2..15}" + * `def`: See [#Pane definition] + +### Pane definition + + { + textures = {"texture for sides", (unused), "texture for top and bottom"}, -- More tiles aren't supported + groups = {group = rating}, -- Uses the known node groups, see [Known damage and digging time defining groups] + sounds = SoundSpec, -- See [#Default sounds] + recipe = {{"","","","","","","","",""}}, -- Recipe field only + use_texture_alpha = true, -- Optional boolean (default: `false`) for colored glass panes + } + +Raillike definitions +-------------------- + +The following nodes use the group `connect_to_raillike` and will only connect to +raillike nodes within this group and the same group value. +Use `minetest.raillike_group()` to get the group value. + +| Node type | Raillike group name +|-----------------------|--------------------- +| default:rail | "rail" +| tnt:gunpowder | "gunpowder" +| tnt:gunpowder_burning | "gunpowder" + +Example: +If you want to add a new rail type and want it to connect with default:rail, +add `connect_to_raillike=minetest.raillike_group("rail")` into the `groups` table +of your node. + + +Default sounds +-------------- + +Sounds inside the default table can be used within the sounds field of node definitions. + + * `default.node_sound_defaults()` + * `default.node_sound_stone_defaults()` + * `default.node_sound_dirt_defaults()` + * `default.node_sound_sand_defaults()` + * `default.node_sound_wood_defaults()` + * `default.node_sound_leaves_defaults()` + * `default.node_sound_glass_defaults()` + * `default.node_sound_metal_defaults()` + +Default constants +----------------- + +`default.LIGHT_MAX` The maximum light level (see [Node definition] light_source) + + +GUI and formspecs +----------------- + +`default.get_hotbar_bg(x, y)` + + * Get the hotbar background as string, containing the formspec elements + * x: Horizontal position in the formspec + * y: Vertical position in the formspec + +`default.gui_bg` + + * Deprecated, remove from mods. + +`default.gui_bg_img` + + * Deprecated, remove from mods. + +`default.gui_slots` + + * Deprecated, remove from mods. + +`default.gui_survival_form` + + * Entire formspec for the survival inventory + +`default.get_furnace_active_formspec(fuel_percent, item_percent)` + + * Get the active furnace formspec using the defined GUI elements + * fuel_percent: Percent of how much the fuel is used + * item_percent: Percent of how much the item is cooked + +`default.get_furnace_inactive_formspec()` + + * Get the inactive furnace formspec using the defined GUI elements + + +Leafdecay +--------- + +To enable leaf decay for leaves when a tree is cut down by a player, +register the tree with the default.register_leafdecay(leafdecaydef) +function. + +If `param2` of any registered node is ~= 0, the node will always be +preserved. Thus, if the player places a node of that kind, you will +want to set `param2 = 1` or so. + +The function `default.after_place_leaves` can be set as +`after_place_node of a node` to set param2 to 1 if the player places +the node (should not be used for nodes that use param2 otherwise +(e.g. facedir)). + +If the node is in the `leafdecay_drop` group then it will always be +dropped as an item. + +`default.register_leafdecay(leafdecaydef)` + +`leafdecaydef` is a table, with following members: + { + trunks = {"default:tree"}, -- nodes considered trunks + leaves = {"default:leaves", "default:apple"}, + -- nodes considered for removal + radius = 3, -- radius to consider for searching + } + +Note: all the listed nodes in `trunks` have their `on_after_destruct` +callback overridden. All the nodes listed in `leaves` have their +`on_timer` callback overridden. + + +Dyes +---- + +To make recipes that will work with any dye ever made by anybody, define +them based on groups. You can select any group of groups, based on your need for +amount of colors. + +### Color groups + +Base color groups: + + * `basecolor_white` + * `basecolor_grey` + * `basecolor_black` + * `basecolor_red` + * `basecolor_yellow` + * `basecolor_green` + * `basecolor_cyan` + * `basecolor_blue` + * `basecolor_magenta` + +Extended color groups ( * means also base color ) + + * `excolor_white` * + * `excolor_lightgrey` + * `excolor_grey` * + * `excolor_darkgrey` + * `excolor_black` * + * `excolor_red` * + * `excolor_orange` + * `excolor_yellow` * + * `excolor_lime` + * `excolor_green` * + * `excolor_aqua` + * `excolor_cyan` * + * `excolor_sky_blue` + * `excolor_blue` * + * `excolor_violet` + * `excolor_magenta` * + * `excolor_red_violet` + +The whole unifieddyes palette as groups: + + * `unicolor_` + +For the following, no white/grey/black is allowed: + + * `unicolor_medium_` + * `unicolor_dark_` + * `unicolor_light_` + * `unicolor__s50` + * `unicolor_medium__s50` + * `unicolor_dark__s50` + +Example of one shapeless recipe using a color group: + + minetest.register_craft({ + type = "shapeless", + output = ':item_yellow', + recipe = {':item_no_color', 'group:basecolor_yellow'}, + }) + +### Color lists + + * `dye.basecolors` are an array containing the names of available base colors + + * `dye.excolors` are an array containing the names of the available extended colors + +Trees +----- + + * `default.grow_tree(pos, is_apple_tree)` + * Grows a mgv6 tree or apple tree at pos + + * `default.grow_jungle_tree(pos)` + * Grows a mgv6 jungletree at pos + + * `default.grow_pine_tree(pos)` + * Grows a mgv6 pinetree at pos + + * `default.grow_new_apple_tree(pos)` + * Grows a new design apple tree at pos + + * `default.grow_new_jungle_tree(pos)` + * Grows a new design jungle tree at pos + + * `default.grow_new_pine_tree(pos)` + * Grows a new design pine tree at pos + + * `default.grow_new_snowy_pine_tree(pos)` + * Grows a new design snowy pine tree at pos + + * `default.grow_new_acacia_tree(pos)` + * Grows a new design acacia tree at pos + + * `default.grow_new_aspen_tree(pos)` + * Grows a new design aspen tree at pos + + * `default.grow_bush(pos)` + * Grows a bush at pos + + * `default.grow_acacia_bush(pos)` + * Grows an acaia bush at pos + + * `default.grow_pine_bush(pos)` + * Grows a pine bush at pos + +Carts +----- + + carts.register_rail( + "mycarts:myrail", -- Rail name + nodedef, -- standard nodedef + railparams -- rail parameter struct (optional) + ) + + railparams = { + on_step(obj, dtime), -- Event handler called when + -- cart is on rail + acceleration, -- integer acceleration factor (negative + -- values to brake) + } + + The event handler is called after all default calculations + are made, so the custom on_step handler can override things + like speed, acceleration, player attachment. The handler will + likely be called many times per second, so the function needs + to make sure that the event is handled properly. + +Key API +------- + +The key API allows mods to add key functionality to nodes that have +ownership or specific permissions. Using the API will make it so +that a node owner can use skeleton keys on their nodes to create keys +for that node in that location, and give that key to other players, +allowing them some sort of access that they otherwise would not have +due to node protection. + +To make your new nodes work with the key API, you need to register +two callback functions in each nodedef: + + +`on_key_use(pos, player)` + * Is called when a player right-clicks (uses) a normal key on your + * node. + * `pos` - position of the node + * `player` - PlayerRef + * return value: none, ignored + +The `on_key_use` callback should validate that the player is wielding +a key item with the right key meta secret. If needed the code should +deny access to the node functionality. + +If formspecs are used, the formspec callbacks should duplicate these +checks in the metadata callback functions. + + +`on_skeleton_key_use(pos, player, newsecret)` + + * Is called when a player right-clicks (uses) a skeleton key on your + * node. + * `pos` - position of the node + * `player` - PlayerRef + * `newsecret` - a secret value(string) + * return values: + * `secret` - `nil` or the secret value that unlocks the door + * `name` - a string description of the node ("a locked chest") + * `owner` - name of the node owner + +The `on_skeleton_key_use` function should validate that the player has +the right permissions to make a new key for the item. The newsecret +value is useful if the node has no secret value. The function should +store this secret value somewhere so that in the future it may compare +key secrets and match them to allow access. If a node already has a +secret value, the function should return that secret value instead +of the newsecret value. The secret value stored for the node should +not be overwritten, as this would invalidate existing keys. + +Aside from the secret value, the function should retun a descriptive +name for the node and the owner name. The return values are all +encoded in the key that will be given to the player in replacement +for the wielded skeleton key. + +if `nil` is returned, it is assumed that the wielder did not have +permissions to create a key for this node, and no key is created. diff --git a/minetest.conf b/minetest.conf old mode 100644 new mode 100755 index 9816e44..e69de29 --- a/minetest.conf +++ b/minetest.conf @@ -1,17 +0,0 @@ -## Mapgen - -### Advanced - -# Noise parameters for biome API temperature, humidity and biome blend. -# type: noise_params -mg_biome_np_heat = 50, 50, (1024, 1024, 1024), 5349, 3, 0.5, 2.0 - -# type: noise_params -mg_biome_np_heat_blend = 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0 - -# type: noise_params -mg_biome_np_humidity = 50, 50, (1024, 1024, 1024), 842, 3, 0.5, 2.0 - -# type: noise_params -mg_biome_np_humidity_blend = 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0 - diff --git a/mods/CORE/biome_lib/API.txt b/mods/CORE/biome_lib/API.txt deleted file mode 100644 index 73e310f..0000000 --- a/mods/CORE/biome_lib/API.txt +++ /dev/null @@ -1,579 +0,0 @@ -This document describes the Plantlife mod API. - -Last revision: 2015-02-16 - - -========= -Functions -========= - -There are three main functions defined by the main "biome_lib" mod: - -spawn_on_surfaces() -register_generate_plant() -grow_plants() - -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. - -===== -spawn_on_surfaces(biome) -spawn_on_surfaces(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 -expanded. There are two ways to call this function: You can either pass it -several individual string and number parameters to use the legacy interface, -or you can pass a single biome definition as a table, with all of your options -spelled out nicely. This is the preferred method. - -When used with the legacy interface, you must specify the parameters exactly -in order, with the first five being mandatory (even if some are set to nil), -and the last one being optional: - -sdelay: The value passed to the ABM's interval parameter, in seconds. -splant: The node name of the item to spawn (e.g. - "flowers:flower_rose"). A plant will of course only be - spawned if the node about to be replaced is air. -sradius: Don't spawn within this many nodes of the avoid items - mentioned below. If set to nil, this check is skipped. -schance: The value passed to the ABM's chance parameter, normally in - the 10-100 range (1-in-X chance of operating on a given node) -ssurface: String with the name of the node on which to spawn the plant - in question, such as "default:sand" or - "default:dirt_with_grass". It is not recommended to put air, - stone, or plain dirt here if you can use some other node, as - doing so will cause the engine to process potentially large - numbers of such nodes when deciding when to execute the ABM - and where it should operate. -savoid: Table with a list of groups and/or node names to avoid when - spawning the plant, such as {"group:flowers", "default:tree"}. - -When passed a table as the argument, and thus using the modern calling method, -you must pass a number of arguments in the form of an ordinary keyed-value -table. Below is a list of everything supported by this function: - -biome = { - spawn_plants = something, -- [*] String or table; see below. - spawn_delay = number, -- same as sdelay, above. - spawn_chance = number, -- same as schance, above. - spawn_surfaces = {table}, -- List of node names on which the plants - -- should be spawned. As with the single-node "ssurface" - -- option in the legacy API, you should not put stone, air, - -- etc. here. - - ---- From here down are a number of optional parameters. You will - ---- most likely want to use at least some of these to limit how and - ---- where your objects are spawned. - - avoid_nodes = {table}, -- same meaning as savoid, above - avoid_radius = num, -- same as sradius - seed_diff = num, -- The Perlin seed difference value passed to the - -- minetest.get_perlin() function. Used along with - -- the global Perlin controls below to create the - -- "biome" in which the plants will spawn. Defaults - -- to 0 if not provided. - light_min = num, -- Minimum amount of light necessary to make a plant - -- spawn. Defaults to 0. - light_max = num, -- Maximum amount of light needed to spawn. Defaults - -- to the engine's MAX_LIGHT value of 14. - neighbors = {table}, -- List of neighboring nodes that need to be - -- immediately next to the node the plant is about to - -- spawn on. Can also be a string with a single node - -- name. It is both passed to the ABM as the - -- "neighbors" parameter, and is used to manually - -- check the adjacent nodes. It only takes one of - -- these for the spawn routine to mark the target as - -- spawnable. Defaults to nil (ignored). - ncount = num, -- There must be at least this many of the above - -- neighbors in the eight spaces immediately - -- surrounding the node the plant is about to spawn on - -- for it to happen. If not provided, this check is - -- disabled. - facedir = num, -- The value passed to the param2 variable when adding - -- the node to the map. Defaults to 0. Be sure that - -- the value you use here (and the range thereof) is - -- appropriate for the type of node you're spawning. - random_facedir = {table}, -- If set, the table should contain two values. - -- If they're both provided, the spawned plant will be - -- given a random facedir value in the range specified - -- by these two numbers. Overrides the facedir - -- parameter above, if it exists. Use {0,3} if you - -- want the full range for wallmounted nodes, or {2,5} - -- for most everything else, or any other pair of - -- numbers appropriate for the node you want to spawn. - 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. - 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 - -- provided, this check is disabled. - near_nodes_size = num, -- How large of an area to check for the above - -- node. Specifically, this checks a flat, horizontal - -- area centered on the node to be spawned on. - -- Defaults to 0, but is ignored if the above - -- near_nodes value is not set. - near_nodes_vertical = num, -- Used with the size value above, this extends - -- the vertical range of the near nodes search. - -- Basically, this turns the flat region described - -- above into a cuboid region. The area to be checked - -- will extend this high and this low above/below the - -- target node, centered thereon. Defaults to 1 (only - -- check the layer above, the layer at, and the layer - -- below the target node), but is ignored if - -- near_nodes is not set. - near_nodes_count = num, -- How many of the above nodes must be within that - -- radius. Defaults to 1 but is ignored if near_nodes - -- isn't set. Bear in mind that the total area to be - -- checked is equal to: - -- (near_nodes_size^2)*near_nodes_vertical*2 - -- For example, if size is 10 and vertical is 4, then - -- the area is (10^2)*8 = 800 nodes in size, so you'll - -- want to make sure you specify a value appropriate - -- for the size of the area being tested. - air_size = num, -- How large of an area to check for air above and - -- around the target. If omitted, only the space - -- above the target is checked. This does not check - -- for air at the sides or below the target. - air_count = num, -- How many of the surrounding nodes need to be air - -- for the above check to return true. If omitted, - -- only the space above the target is checked. - plantlife_limit = num, -- The value compared against the generic "plants - -- can grow here" Perlin noise layer. Smaller numbers - -- result in more abundant plants. Range of -1 to +1, - -- with values in the range of about 0 to 0.5 being - -- most useful. Defaults to 0.1. - temp_min = num, -- Minimum temperature needed for the desired object - -- to spawn. This is a 2d Perlin value, which has an - -- inverted range of +1 to -1. Larger values - -- represent *colder* temperatures, so this value is - -- actually the upper end of the desired Perlin range. - -- See the temperature map section at the bottom of - -- this document for details on how these values work. - -- Defaults to +1 (unlimited coldness). - temp_max = num, -- Maximum temperature/lower end of the Perlin range. - -- Defaults to -1 (unlimited heat). - humidity_min = num, -- Minimum humidity for the plant to spawn in. Like - -- the temperature map, this is a Perlin value where - -- lower numbers mean more humidity in the area. - -- Defaults to +1 (0% humidity). - humidity_max = num, -- Maximum humidity for the plant to spawn at. - -- Defaults to -1 (100% humidity). - verticals_list = {table}, -- List of nodes that should be considered to be - -- natural walls. - alt_wallnode = "string", -- If specified, this node will be substituted in - -- place of the plant(s) defined by spawn_plants - -- above, if the spawn target has one or more adjacent - -- walls. In such a case, the two above facedir - -- parameters will be ignored. - spawn_on_side = bool, -- Set this to true to immediately spawn the node on - -- one side of the target node rather than the top. - -- The code will search for an airspace to the side of - -- the target, then spawn the plant at the first one - -- found. The above facedir and random_facedir - -- parameters are ignored in this case. If the above - -- parameters for selecting generic wall nodes are - -- provided, this option is ignored. Important note: - -- the facedir values assigned by this option only - -- make sense with wallmounted nodes (nodes which - -- don't use facedir won't be affected). - choose_random_wall = bool, -- if set to true, and searching for walls is - -- being done, just pick any random wall if there is - -- one, rather than returning the first one. - spawn_on_bottom = bool, -- If set to true, spawn the object below the - -- target node instead of above it. The above - -- spawn_on_side variable takes precedence over this - -- one if both happen to be true. When using this - -- option with the random facedir function above, the - -- values given to the facedir parameter are for - -- regular nodes, not wallmounted. - spawn_replace_node = bool, -- If set to true, the target node itself is - -- replaced by the spawned object. Overrides the - -- spawn_on_bottom and spawn_on_side settings. -} - -[*] spawn_plants must be either a table or a string. If it's a table, the -values therein are treated as a list of nodenames to pick from randomly on -each application of the ABM code. The more nodes you can pack into this -parameter to avoid making too many calls to this function, the lower the CPU -load will likely be. - -You can also specify a string containing the name of a function to execute. -In this case, the function will be passed a single position parameter -indicating where the function should place the desired object, and the checks -for spawning on top vs. sides vs. bottom vs. replacing the target node will be -skipped. - -By default, if a biome node, size, and count are not defined, the biome -checking is disabled. Same holds true for the nneighbors bit above that. - - -===== -biome_lib:register_generate_plant(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 -information, and a string, function, or table describing what to do if the -engine finds a suitable surface node (see below). - -The biome table contains quite a number of options, though there are fewer -here than are available in the ABM-based spawner, as some stuff doesn't make -sense at map-generation time. - -biome = { - surface = something, -- What node(s). May be a string such as - -- "default:dirt_with_grass" or a table with - -- multiple such entries. - - ---- Everything else is optional, but you'll definitely want to use - ---- some of these other fields to limit where and under what - ---- conditions the objects are spawned. - - below_nodes = {table}, -- List of nodes that must be below the target - -- node. Useful in snow biomes to keep objects from - -- spawning in snow that's on the wrong surface for - -- that object. - avoid_nodes = {table}, -- List of nodes to avoid when spawning. Groups are - -- not supported here. - avoid_radius = num, -- How much distance to leave between the object to be - -- added and the objects to be avoided. If this or - -- the avoid_nodes value is nil/omitted, this check is - -- skipped. Avoid using excessively large radii. - rarity = num, -- How rare should this object be in its biome? Larger - -- values make objects more rare, via: - -- math.random(1,100) > this - max_count = num, -- The absolute maximum number of your object that - -- should be allowed to spawn in a 5x5x5 mapblock area - -- (80x80x80 nodes). Defaults to 5, but be sure you - -- set this to some reasonable value depending on your - -- object and its size if 5 is insufficient. - seed_diff = num, -- Perlin seed-diff value. Defaults to 0, which - -- causes the function to inherit the global value of - -- 329. - neighbors = {table}, -- What ground nodes must be right next to and at the - -- same elevation as the node to be spawned on. - ncount = num, -- At least this many of the above nodes must be next - -- to the node to spawn on. Any value greater than 8 - -- will probably cause the code to never spawn - -- anything. Defaults to 0. - 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). - 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 - -- in that list. - near_nodes_vertical = num, -- How high/low of an area to search from the - -- target node. - near_nodes_count = num, -- at least this many of those nodes must be in - -- the area. - plantlife_limit = num, -- The value compared against the generic "plants - -- can grow here" Perlin noise layer. Smaller numbers - -- result in more abundant plants. Range of -1 to +1, - -- with values in the range of about 0 to 0.5 being - -- most useful. Defaults to 0.1. - temp_min = num, -- Coldest allowable temperature for a plant to spawn - -- (that is, the largest Perlin value). - temp_max = num, -- warmest allowable temperature to spawn a plant - -- (lowest Perlin value). - verticals_list = {table}, -- Same as with the spawn_on_surfaces function. - check_air = bool, -- Flag to tell the mapgen code to check for air above - -- the spawn target. Defaults to true if not - -- explicitly set to false. Set this to false VERY - -- SPARINGLY, as it will slow the map generator down. - delete_above = bool, -- Flag to tell the mapgen code to delete the two - -- nodes directly above the spawn target just before - -- adding the plant or tree. Useful when generating - -- in snow biomes. Defaults to false. - delete_above_surround = bool, -- Flag to tell the mapgen code to also - -- delete the five nodes surrounding the above space, - -- and the five nodes above those, resulting in a two- - -- node-deep cross-shaped empty region above/around - -- the spawn target. Useful when adding trees to snow - -- biomes. Defaults to false. - spawn_replace_node = bool, -- same as with the ABM spawner. - random_facedir = {table}, -- same as with the ABM spawner. -} - -Regarding nodes_or_function_or_treedef, this must either be a string naming -a node to spawn, a table with a list of nodes to choose from, a table with an -L-Systems tree definition, or a function. - -If you specified a string, the code will attempt to determine whether that -string specifies a valid node name. If it does, that node will be placed on -top of the target position directly (unless one of the other mapgen options -directs the code to do otherwise). - -If you specified a table and there is no "axiom" field, the code assumes that -it is a list of nodes. Simply name one node per entry in the list, e.g. -{"default:junglegrass", "default:dry_shrub"} and so on, for as many nodes as -you want to list. A random node from the list will be chosen each time the -code goes to place a node. - -If you specified a table, and there *is* an "axiom" field, the code assumes -that this table contains an L-Systems tree definition, which will be passed -directly to the engine's spawn_tree() function along with the position on -which to spawn the tree. - -You can also supply a function to be directly executed, which is given the -current node position (the usual "pos" table format) as its sole argument. It -will be called in the form: - - somefunction(pos) - - -===== -biome_lib:grow_plants(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: - -options = { - grow_plant = "string", -- Name of the node to be grown into something - -- else. This value is passed to the ABM as the - -- "nodenames" parameter, so it is the plants - -- themselves that are the ABM trigger, rather than - -- the ground they spawned on. A plant will only grow - -- if the node above it is air. Can also be a table, - -- but note that all nodes referenced therein will be - -- grown into the same object. - grow_delay = num, -- Passed as the ABM "interval" parameter, as with - -- spawning. - grow_chance = num, -- Passed as the ABM "chance" parameter. - grow_result = "string", -- Name of the node into which the grow_plant - -- node(s) should transform when the ABM executes. - - ---- Everything from here down is optional. - - dry_early_node = "string", -- This value is ignored except for jungle - -- grass (a corner case needed by that mod), where it - -- indicates which node the grass must be on in order - -- for it to turn from the short size to - -- "default:dry_shrub" instead of the medium size. - grow_nodes = {table}, -- One of these nodes must be under the plant in - -- order for it to grow at all. Normally this should - -- be the same as the list of surfaces passed to the - -- spawning ABM as the "nodenames" parameter. This is - -- so that the plant can be manually placed on - -- something like a flower pot or something without it - -- necessarily growing and perhaps dieing. Defaults - -- to "default:dirt_with_grass". - facedir = num, -- Same as with spawning a plant. - need_wall = bool, -- Set this to true if you the plant needs to grow - -- against a wall. Defaults to false. - verticals_list = {table}, -- same as with spawning a plant. - choose_random_wall = bool, -- same as with spawning a plant. - grow_vertically = bool, -- Set this to true if the plant needs to grow - -- vertically, as in climbing poison ivy. Defaults to - -- false. - height_limit = num, -- Set this to limit how tall the desired node can - -- grow. The mod will search straight down from the - -- position being spawned at to find a ground node, - -- set via the field below. Defaults to 5 nodes. - ground_nodes = {table}, -- What nodes should be treated as "the ground" - -- below a vertically-growing plant. Usually this - -- should be the same as the grow_nodes table, but - -- might also include, for example, water or some - -- other surrounding material. Defaults to - -- "default:dirt_with_grass". - grow_function = something, -- [*] see below. - seed_diff = num, -- [*] see below. -} - -[*] grow_function can take one of three possible settings: it can be nil (or - not provided), a string, or a table. - -If it is not provided or it's set to nil, all of the regular growing code is -executed normally, the value of seed_diff, if any, is ignored, and the node to -be placed is assumed to be specified in the grow_result variable. - -If this value is set to a simple string, this is treated as the name of the -function to use to grow the plant. In this case, all of the usual growing -code is executeed, but then instead of a plant being simply added to the -world, grow_result is ignored and the named function is executed and passed a -few parmeters in the following general form: - - somefunction(pos, perlin1, perlin2) - -These values represent the current position (the usual table), the Perlin -noise value for that spot in the generic "plants can grow here" map for the -seed_diff value above, the Perlin value for that same spot from the -temperature map, and the detected neighboring wall face, if there was one (or -nil if not). If seed_diff is not provided, it defaults to 0. - -If this variable is instead set to a table, it is treated an an L-Systems tree -definition. All of the growing code is executed in the usual manner, then the -tree described by that definition is spawned at the current position instead, -and grow_result is ignored. - - -===== -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 -search around the given position for a neighboring wall, returning the first -one it finds as a facedir value, or nil if there are no adjacent walls. - -If randomflag is set to true, the function will just return the facedir of any -random wall it finds adjacent to the target position. Defaults to false if -not specified. - -===== -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 -question is already loaded, or false if not. - - -===== -dbg(string) - -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. - -===== -biome_lib:generate_tree(pos, treemodel) -biome_lib:grow_tree(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 -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 -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 -tree is spawned within the abm-based growing code, for example when growing a -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 - - -====================== -Fertile Ground Mapping -====================== - -The mod uses Perlin noise to create "biomes" of the various plants, via the -minetest.get_perlin() function. At present, there are three layers of -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 - -For more information on how Perlin noise is generated, you will need to search -the web, as these default values were from that which is used by minetest_game -to spawn jungle grass at mapgen time, and I'm still learning how Perlin noise -works. ;-) - - -=================== -Temperature Mapping -=================== - -The second Perlin layer is a temperature map, with values taken from -SPlizard's Snow Biomes mod so that the two will be compatible, since that mod -appears to be the standard now. Those values are: - - temperature_seeddiff = 112 - temperature_octaves = 3 - temperature_persistence = 0.5 - temperature_scale = 150 - -The way Perlin values are used by this mod, in keeping with the snow mod's -apparent methods, larger values returned by the Perlin function represent -*colder* temperatures. In this mod, the following table gives a rough -approximation of how temperature maps to these values, normalized to -0.53 = 0 °C and +1.0 = -25 °C. - -Perlin Approx. Temperature --1.0 81 °C ( 178 °F) --0.75 68 °C ( 155 °F) --0.56 58 °C ( 136 °F) --0.5 55 °C ( 131 °F) --0.25 41 °C ( 107 °F) --0.18 38 °C ( 100 °F) - 0 28 °C ( 83 °F) - 0.13 21 °C ( 70 °F) - 0.25 15 °C ( 59 °F) - 0.5 2 °C ( 35 °F) - 0.53 0 °C ( 32 °F) - 0.75 -12 °C ( 11 °F) - 0.86 -18 °C ( 0 °F) - 1.0 -25 °C (- 13 °F) - -Included in this table are even 0.25 steps in Perlin values along with some -common temperatures on both the Centigrade and Fahrenheit scales. Note that -unless you're trying to model the Moon or perhaps Mercury in your mods/maps, -you probably won't need to bother with Perlin values of less than -0.56 or so. - - -================ -Humidity Mapping -================ - -Last but not least is a moisture/humidity map. Like the temperature map -above, Perlin values can be tested to determine the approximate humidity of -the *air* in the area. This humidity map is basically the perlin layer used -for deserts. - -A value of +1.0 is very moist (basically a thick fog, if it could be seen), a -value of roughly +0.25 represents the edge of a desert as usually seen in the -game, and a value of -1.0 is as dry as a bone. - -This does not check for nearby water, just general air humidity, and that -being the case, nearby ground does not affect the reported humidity of a -region (because this isn't yet possible to calculate yet). Use the near_nodes -and avoid_nodes parameters and their related options to check for water and -such. - -The Perlin values use for this layer are: - - humidity_seeddiff = 9130 - humidity_octaves = 3 - humidity_persistence = 0.5 - humidity_scale = 250 - -And this particular one is mapped slightly differently from the others: - - noise3 = perlin3:get2d({x=p_top.x+150, y=p_top.z+50}) - -(Note the +150 and +50 offsets) - diff --git a/mods/CORE/biome_lib/depends.txt b/mods/CORE/biome_lib/depends.txt deleted file mode 100644 index 9207dab..0000000 --- a/mods/CORE/biome_lib/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -intllib? diff --git a/mods/CORE/biome_lib/init.lua b/mods/CORE/biome_lib/init.lua deleted file mode 100644 index cb23eb7..0000000 --- a/mods/CORE/biome_lib/init.lua +++ /dev/null @@ -1,741 +0,0 @@ --- Plantlife library mod by Vanessa Ezekowitz --- --- License: WTFPL --- --- 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 = {} - -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 - --- Boilerplate to support localized strings if intllib mod is installed. -local S -if minetest.get_modpath("intllib") then - S = intllib.Getter() -else - S = function(s) return s end -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) - 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 - -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 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 = snodes[i] - local p_top = { x = pos.x, y = pos.y + 1, z = pos.z } - local noise1 = perlin_fertile_area:get2d({x=pos.x, y=pos.z}) - local noise2 = biome_lib.perlin_temperature:get2d({x=pos.x, y=pos.z}) - local noise3 = biome_lib.perlin_humidity:get2d({x=pos.x+150, y=pos.z+50}) - 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 surface_ok - and (not checkair or minetest.get_node(p_top).name == "air") - and pos.y >= biome.min_elevation - and pos.y <= biome.max_elevation - and noise1 > biome.plantlife_limit - and noise2 <= biome.temp_min - and noise2 >= biome.temp_max - and noise3 <= biome.humidity_min - and noise3 >= biome.humidity_max - and (not biome.ncount or #(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) - and (not biome.near_nodes or #(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) - and math.random(1,100) > biome.rarity - and (not biome.below_nodes or string.find(dump(biome.below_nodes), minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name) ) - 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 - 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.remove_node(p_top) - minetest.remove_node({x=p_top.x, y=p_top.y+1, z=p_top.z}) - end - - if biome.delete_above_surround then - minetest.remove_node({x=p_top.x-1, y=p_top.y, z=p_top.z}) - minetest.remove_node({x=p_top.x+1, y=p_top.y, z=p_top.z}) - minetest.remove_node({x=p_top.x, y=p_top.y, z=p_top.z-1}) - minetest.remove_node({x=p_top.x, y=p_top.y, z=p_top.z+1}) - - minetest.remove_node({x=p_top.x-1, y=p_top.y+1, z=p_top.z}) - minetest.remove_node({x=p_top.x+1, y=p_top.y+1, z=p_top.z}) - minetest.remove_node({x=p_top.x, y=p_top.y+1, z=p_top.z-1}) - minetest.remove_node({x=p_top.x, y=p_top.y+1, z=p_top.z+1}) - end - - if biome.spawn_replace_node then - minetest.remove_node(pos) - 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.set_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.set_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 -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 - - 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 -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 - - 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 -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 } -end) - -minetest.register_on_generated(function(minp, maxp, blockseed) - biome_lib.blocklist_no_aircheck[#biome_lib.blocklist_no_aircheck + 1] = { minp, maxp } -end) - --- "Play" them back, populating them with new stuff in the process - -minetest.register_globalstep(function(dtime) - if dtime < 0.2 and -- don't attempt to populate if lag is already too high - (#biome_lib.blocklist_aircheck > 0 or #biome_lib.blocklist_no_aircheck > 0) then - 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 -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 - print("[biome_lib] Stand by, playing out the rest of the aircheck mapblock log") - print("(there are "..#biome_lib.blocklist_aircheck.." entries)...") - while true do - biome_lib:generate_block_with_air_checking(0.1) - if #biome_lib.blocklist_aircheck == 0 then return end - end - end -end) - -minetest.register_on_shutdown(function() - if #biome_lib.blocklist_no_aircheck > 0 then - 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 true do - biome_lib:generate_block_no_aircheck(0.1) - if #biome_lib.blocklist_no_aircheck == 0 then return end - end - 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) - - minetest.register_abm({ - nodenames = biome.spawn_surfaces, - interval = biome.interval, - chance = biome.spawn_chance, - neighbors = biome.neighbors, - 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 noise1 = perlin_fertile_area:get2d({x=p_top.x, y=p_top.z}) - local noise2 = biome_lib.perlin_temperature:get2d({x=p_top.x, y=p_top.z}) - local noise3 = biome_lib.perlin_humidity:get2d({x=p_top.x+150, y=p_top.z+50}) - if noise1 > biome.plantlife_limit - and noise2 <= biome.temp_min - and noise2 >= biome.temp_max - and noise3 <= biome.humidity_min - and noise3 >= biome.humidity_max - and biome_lib:is_node_loaded(p_top) then - local n_light = minetest.get_node_light(p_top, nil) - 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)) - and n_light >= biome.light_min - and n_light <= biome.light_max - and (not(biome.neighbors and biome.ncount) or #(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 ) - and (not(biome.near_nodes and biome.near_nodes_count and biome.near_nodes_size) or #(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) - and (not(biome.air_count and biome.air_size) or #(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) - and pos.y >= biome.min_elevation - and pos.y <= biome.max_elevation - then - 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.set_node(p_top, { name = biome.alt_wallnode, param2 = walldir }) - end - else - local currentsurface = minetest.get_node(pos).name - if currentsurface ~= "default:water_source" - or (currentsurface == "default:water_source" and #(minetest.find_nodes_in_area({x=pos.x, y=pos.y-biome.depth_max-1, z=pos.z}, {x=pos.x, y=pos.y, z=pos.z}, {"default:dirt", "default:dirt_with_grass", "default:sand"})) > 0 ) - then - 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.set_node(p_top, { name = plant_to_spawn, param2 = fdir }) - end - elseif biome.spawn_replace_node then - minetest.set_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.set_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.set_node({x=pos.x, y=pos.y-1, z=pos.z}, { name = plant_to_spawn, param2 = fdir} ) - end - end - end - end - end - end - end - }) -end - --- The growing ABM - -function biome_lib:grow_plants(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.seed_diff = options.seed_diff or 0 - - if options.grow_delay*time_scale >= 1 then - options.interval = options.grow_delay*time_scale - else - options.interval = 1 - end - - minetest.register_abm({ - nodenames = { options.grow_plant }, - interval = options.interval, - chance = options.grow_chance, - 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 p_bot = {x=pos.x, y=pos.y-1, z=pos.z} - local n_top = minetest.get_node(p_top) - local n_bot = minetest.get_node(p_bot) - 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) - end - if (n_top.name == "air" or n_top.name == "default:snow") - and (not options.need_wall or (options.need_wall and walldir)) then - -- corner case for changing short junglegrass - -- to dry shrub in desert - if n_bot.name == options.dry_early_node and options.grow_plant == "junglegrass:short" then - minetest.set_node(pos, { name = "default:dry_shrub" }) - - elseif options.grow_vertically and walldir then - if biome_lib:search_downward(pos, options.height_limit, options.ground_nodes) then - minetest.set_node(p_top, { name = options.grow_plant, param2 = walldir}) - end - - elseif not options.grow_result and not options.grow_function then - minetest.remove_node(pos) - - else - biome_lib:replace_object(pos, options.grow_result, options.grow_function, options.facedir, options.seed_diff) - 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.remove_node(pos) - 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 noise1 = perlin_fertile_area:get2d({x=pos.x, y=pos.z}) - local noise2 = biome_lib.perlin_temperature:get2d({x=pos.x, y=pos.z}) - grow_function(pos,noise1,noise2,walldir) - return - elseif growtype == "string" then - local perlin_fertile_area = minetest.get_perlin(seeddiff, perlin_octaves, perlin_persistence, perlin_scale) - local noise1 = perlin_fertile_area:get2d({x=pos.x, y=pos.z}) - local noise2 = biome_lib.perlin_temperature:get2d({x=pos.x, y=pos.z}) - assert(loadstring(grow_function.."(...)"))(pos,noise1,noise2,walldir) - return - elseif growtype == "nil" then - minetest.set_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 - --- 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) - local verts = dump(verticals) - if randomflag then - local walltab = {} - - if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then walltab[#walltab + 1] = 3 end - if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then walltab[#walltab + 1] = 2 end - if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then walltab[#walltab + 1] = 5 end - if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then walltab[#walltab + 1] = 4 end - - if #walltab > 0 then return walltab[math.random(1, #walltab)] end - - else - if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then return 3 end - if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then return 2 end - if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then return 5 end - if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then return 4 end - end - return nil -end - --- Function to search downward from the given position, looking for the first --- 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) - 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} - end - end - return false -end - -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 - 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 = 3} - end - if minetest.get_node({ x=pos.x, y=pos.y, z=pos.z-1 }).name == "air" then - return {newpos = { x=pos.x, y=pos.y, z=pos.z-1 }, facedir = 4} - end - if minetest.get_node({ x=pos.x, y=pos.y, z=pos.z+1 }).name == "air" then - return {newpos = { x=pos.x, y=pos.y, z=pos.z+1 }, facedir = 5} - end - return nil -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 - --- 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 - -print("[Biome Lib] Loaded") - -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.") -end) - diff --git a/mods/CORE/init/depends.txt b/mods/CORE/init/depends.txt deleted file mode 100644 index e845c18..0000000 --- a/mods/CORE/init/depends.txt +++ /dev/null @@ -1 +0,0 @@ -inventory diff --git a/mods/CORE/init/init.lua b/mods/CORE/init/init.lua deleted file mode 100644 index b68a80c..0000000 --- a/mods/CORE/init/init.lua +++ /dev/null @@ -1,31 +0,0 @@ ---[[ - Init ---]] - -init = {} - --- GUI related stuff -init.gui_bg = "bgcolor[#080808BB;true]" -init.gui_bg_img = "background[5,5;1,1;gui_formbg.png;true]" -init.gui_slots = "listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - -function init.get_hotbar_bg(x,y) - local out = "" - for i=0,7,1 do - out = out .."image["..x+i..","..y..";1,1;gui_hb_bg.png]" - end - return out -end - -init.gui_survival_form = "size[8,8.5]".. - init.gui_bg.. - init.gui_bg_img.. - init.gui_slots.. - "list[current_player;main;0,4.25;8,1;]".. - "list[current_player;main;0,5.5;8,3;8]".. - "list[current_player;craft;1.75,0.5;3,3;]".. - "list[current_player;craftpreview;5.75,1.5;1,1;]".. - "image[4.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. - "listring[current_player;main]".. - "listring[current_player;craft]".. - init.get_hotbar_bg(0,4.25) diff --git a/mods/CORE/init/mod.conf b/mods/CORE/init/mod.conf deleted file mode 100644 index 94790ec..0000000 --- a/mods/CORE/init/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = init diff --git a/mods/CORE/plantlife_i18n/locale/de.po b/mods/CORE/plantlife_i18n/locale/de.po deleted file mode 100755 index ff761e4..0000000 --- a/mods/CORE/plantlife_i18n/locale/de.po +++ /dev/null @@ -1,488 +0,0 @@ -# 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-08-03 11:09+0200\n" -"PO-Revision-Date: 2017-08-03 11:32+0200\n" -"Last-Translator: Xanthin\n" -"Language-Team: \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.12\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: ../bushes/init.lua -msgid "Young Tree 2 (bottom)" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Branches @1" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Leaves @1" -msgstr "" - -#: ../bushes_classic/cooking.lua -msgid "Sugar" -msgstr "Zucker" - -#: ../bushes_classic/init.lua -msgid "Basket with Strawberry pies" -msgstr "Korb mit Erdbeertorten" - -#: ../bushes_classic/init.lua -msgid "Cooked Strawberry pie" -msgstr "Erdbeertorte" - -#: ../bushes_classic/init.lua -msgid "Raw Strawberry pie" -msgstr "Rohe Erdbeertorte" - -#: ../bushes_classic/init.lua -msgid "Slice of Strawberry pie" -msgstr "Erdbeertortenstueck" - -#: ../bushes_classic/init.lua -msgid "Strawberry" -msgstr "Erdbeere" - -#: ../bushes_classic/init.lua -msgid "Strawberry Bush" -msgstr "Erdbeerbusch" - -#: ../bushes_classic/init.lua -msgid "Basket with Blackberry pies" -msgstr "Korb mit Brombeertorten" - -#: ../bushes_classic/init.lua -msgid "Blackberry" -msgstr "Brombeere" - -#: ../bushes_classic/init.lua -msgid "Blackberry Bush" -msgstr "Brombeerbusch" - -#: ../bushes_classic/init.lua -msgid "Cooked Blackberry pie" -msgstr "Brombeertorte" - -#: ../bushes_classic/init.lua -msgid "Raw Blackberry pie" -msgstr "Rohe Brombeertorte" - -#: ../bushes_classic/init.lua -msgid "Slice of Blackberry pie" -msgstr "Brombeertortenstueck" - -#: ../bushes_classic/init.lua -msgid "Basket with Blueberry pies" -msgstr "Korb mit Blaubeertorten" - -#: ../bushes_classic/init.lua -msgid "Blueberry" -msgstr "Blaubeere" - -#: ../bushes_classic/init.lua -msgid "Blueberry Bush" -msgstr "Blaubeerbusch" - -#: ../bushes_classic/init.lua -msgid "Cooked Blueberry pie" -msgstr "Blaubeertorte" - -#: ../bushes_classic/init.lua -msgid "Raw Blueberry pie" -msgstr "Rohe Blaubeertorte" - -#: ../bushes_classic/init.lua -msgid "Slice of Blueberry pie" -msgstr "Blaubeertortenstueck" - -#: ../bushes_classic/init.lua -msgid "Basket with Raspberry pies" -msgstr "Korb mit Himbeertorten" - -#: ../bushes_classic/init.lua -msgid "Cooked Raspberry pie" -msgstr "Himbeertorte" - -#: ../bushes_classic/init.lua -msgid "Raspberry" -msgstr "Himbeere" - -#: ../bushes_classic/init.lua -msgid "Raspberry Bush" -msgstr "Himbeerbusch" - -#: ../bushes_classic/init.lua -msgid "Raw Raspberry pie" -msgstr "Rohe Himbeertorte" - -#: ../bushes_classic/init.lua -msgid "Slice of Raspberry pie" -msgstr "Himbeertortenstueck" - -#: ../bushes_classic/init.lua -msgid "Basket with Gooseberry pies" -msgstr "Korb mit Stachelbeertorten" - -#: ../bushes_classic/init.lua -msgid "Cooked Gooseberry pie" -msgstr "Stachelbeertorte" - -#: ../bushes_classic/init.lua -msgid "Gooseberry" -msgstr "Stachelbeere" - -#: ../bushes_classic/init.lua -msgid "Gooseberry Bush" -msgstr "Stachelbeerbusch" - -#: ../bushes_classic/init.lua -msgid "Raw Gooseberry pie" -msgstr "Rohe Stachelbeertorte" - -#: ../bushes_classic/init.lua -msgid "Slice of Gooseberry pie" -msgstr "Stachelbeertortenstueck" - -#: ../bushes_classic/init.lua -msgid "Basket with Mixed Berry pies" -msgstr "Korb mit Beerenmixtorten" - -#: ../bushes_classic/init.lua -msgid "Cooked Mixed Berry pie" -msgstr "Beerenmixtorte" - -#: ../bushes_classic/init.lua -#, fuzzy -msgid "Currently fruitless Bush" -msgstr "zur Zeit fruechteloser" - -#: ../bushes_classic/init.lua -msgid "Mixed Berry" -msgstr "Beerenmix" - -#: ../bushes_classic/init.lua -msgid "Raw Mixed Berry pie" -msgstr "Rohe Beerenmixtorte" - -#: ../bushes_classic/init.lua -msgid "Slice of Mixed Berry pie" -msgstr "Beerenmixtortenstueck" - -#: ../bushes_classic/init.lua -msgid "[Bushes] Loaded." -msgstr "[Bushes] Geladen." - -#: ../bushes_classic/nodes.lua -msgid "Basket" -msgstr "Korb" - -#: ../cavestuff/nodes.lua -msgid "Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Desert Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Stalactite" -msgstr "" - -#: ../dryplants/init.lua -msgid "Sickle" -msgstr "" - -#: ../dryplants/init.lua -msgid "Cut Grass" -msgstr "" - -#: ../dryplants/init.lua -msgid "Hay" -msgstr "" - -#: ../dryplants/init.lua -msgid "Short Grass" -msgstr "" - -#: ../dryplants/juncus.lua -msgid "Juncus" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 1" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3 & Spikes" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fern Tuber" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fern Tuber" -msgstr "" - -#: ../ferns/fern.lua -msgid "Lady-fern (Athyrium)" -msgstr "" - -#: ../ferns/gianttreefern.lua ../ferns/treefern.lua -msgid "Tree Fern Crown (Dicksonia)" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leaves" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leave End" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Fern Trunk" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Sapling" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Young Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Fern Trunk (Dicksonia)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Tree Fern Sapling (Dicksonia)" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "Waterlily" -msgstr "Seerose" - -#: ../flowers_plus/init.lua -msgid "Seaweed" -msgstr "Seetang" - -#: ../flowers_plus/init.lua -msgid "Sunflower" -msgstr "Sonnenblume" - -#: ../flowers_plus/init.lua -msgid "[Flowers] Loaded." -msgstr "[Flowers] Geladen." - -#: ../molehills/init.lua -msgid "Mole Hill" -msgstr "" - -#: ../molehills/init.lua -msgid "Loaded..." -msgstr "" - -#: ../nature_classic/blossom.lua -msgid "Apple blossoms" -msgstr "" - -#: ../nature_classic/init.lua -msgid "[Nature Classic] loaded!" -msgstr "" - -#: ../poisonivy/init.lua -msgid "Poison ivy (seedling)" -msgstr "Giftefeu (Saemling)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (sproutling)" -msgstr "Giftefeu (Sproessling)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (climbing plant)" -msgstr "Giftefeu (Kletterpflanze)" - -#: ../poisonivy/init.lua -msgid "[Poison Ivy] Loaded." -msgstr "[Poison Ivy] Geladen." - -#: ../trunks/nodes.lua -msgid "Twig" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss with Fungus" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Block" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Slab" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 1" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 2" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Root" -msgstr "" - -#: ../vines/crafts.lua ../vines/vines.lua -msgid "Vines" -msgstr "" - -#: ../vines/functions.lua -msgid "Matured" -msgstr "" - -#: ../vines/init.lua -msgid "[Vines] Loaded!" -msgstr "" - -#: ../vines/nodes.lua -msgid "Rope" -msgstr "" - -#: ../vines/shear.lua -msgid "Shears" -msgstr "" - -#: ../vines/vines.lua -msgid "Roots" -msgstr "" - -#: ../vines/vines.lua -msgid "Jungle Vines" -msgstr "" - -#: ../vines/vines.lua -msgid "Willow Vines" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 1" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 2" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 3" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 4" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Bamboo Tree" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree 2 (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (top)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (bottom)" -msgstr "" diff --git a/mods/CORE/plantlife_i18n/locale/es.po b/mods/CORE/plantlife_i18n/locale/es.po deleted file mode 100755 index 7ff371d..0000000 --- a/mods/CORE/plantlife_i18n/locale/es.po +++ /dev/null @@ -1,488 +0,0 @@ -# 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-08-03 11:34+0200\n" -"PO-Revision-Date: 2017-08-03 11:41+0200\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 1.8.12\n" -"Last-Translator: Carlos Barraza \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: es\n" - -#: ../bushes/init.lua -msgid "Young Tree 2 (bottom)" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Branches @1" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Leaves @1" -msgstr "" - -#: ../bushes_classic/cooking.lua -msgid "Sugar" -msgstr "Azúcar" - -#: ../bushes_classic/init.lua -msgid "Basket with Strawberry pies" -msgstr "Cesta con Pasteles de Frutilla" - -#: ../bushes_classic/init.lua -msgid "Cooked Strawberry pie" -msgstr "Pastel de Frutilla Cocido" - -#: ../bushes_classic/init.lua -msgid "Raw Strawberry pie" -msgstr "Pastel de Frutilla Crudo" - -#: ../bushes_classic/init.lua -msgid "Slice of Strawberry pie" -msgstr "Rebanada de Pastel de Frutilla" - -#: ../bushes_classic/init.lua -msgid "Strawberry" -msgstr "Frutilla" - -#: ../bushes_classic/init.lua -msgid "Strawberry Bush" -msgstr "Arbusto de Frutilla" - -#: ../bushes_classic/init.lua -msgid "Basket with Blackberry pies" -msgstr "Cesta con Pasteles de Mora" - -#: ../bushes_classic/init.lua -msgid "Blackberry" -msgstr "Mora" - -#: ../bushes_classic/init.lua -msgid "Blackberry Bush" -msgstr "Arbusto de Mora" - -#: ../bushes_classic/init.lua -msgid "Cooked Blackberry pie" -msgstr "Pastel de Mora Cocido" - -#: ../bushes_classic/init.lua -msgid "Raw Blackberry pie" -msgstr "Pastel de Mora Crudo" - -#: ../bushes_classic/init.lua -msgid "Slice of Blackberry pie" -msgstr "Rebanada de Pastel de Mora" - -#: ../bushes_classic/init.lua -msgid "Basket with Blueberry pies" -msgstr "Cesta con Pasteles de Arándano" - -#: ../bushes_classic/init.lua -msgid "Blueberry" -msgstr "Arándano" - -#: ../bushes_classic/init.lua -msgid "Blueberry Bush" -msgstr "Arbusto de Arándano" - -#: ../bushes_classic/init.lua -msgid "Cooked Blueberry pie" -msgstr "Pastel de Arándano Cocido" - -#: ../bushes_classic/init.lua -msgid "Raw Blueberry pie" -msgstr "Pastel de Arándano Crudo" - -#: ../bushes_classic/init.lua -msgid "Slice of Blueberry pie" -msgstr "Rebanada de Pastel de Arándano" - -#: ../bushes_classic/init.lua -msgid "Basket with Raspberry pies" -msgstr "Cesta con Pasteles de Frambuesa" - -#: ../bushes_classic/init.lua -msgid "Cooked Raspberry pie" -msgstr "Pastel de Frambuesa Cocido" - -#: ../bushes_classic/init.lua -msgid "Raspberry" -msgstr "Frambuesa" - -#: ../bushes_classic/init.lua -msgid "Raspberry Bush" -msgstr "Arbusto de Frambuesa" - -#: ../bushes_classic/init.lua -msgid "Raw Raspberry pie" -msgstr "Pastel de Frambuesa Crudo" - -#: ../bushes_classic/init.lua -msgid "Slice of Raspberry pie" -msgstr "Rebanada de Pastel de Frambuesa" - -#: ../bushes_classic/init.lua -msgid "Basket with Gooseberry pies" -msgstr "Cesta con Pasteles de Grosella" - -#: ../bushes_classic/init.lua -msgid "Cooked Gooseberry pie" -msgstr "Pastel de Grosella Cocido" - -#: ../bushes_classic/init.lua -msgid "Gooseberry" -msgstr "Grosella" - -#: ../bushes_classic/init.lua -msgid "Gooseberry Bush" -msgstr "Arbusto de Grosella" - -#: ../bushes_classic/init.lua -msgid "Raw Gooseberry pie" -msgstr "Pastel de Grosella Crudo" - -#: ../bushes_classic/init.lua -msgid "Slice of Gooseberry pie" -msgstr "Rebanada de Pastel de Grosella" - -#: ../bushes_classic/init.lua -msgid "Basket with Mixed Berry pies" -msgstr "Cesta con Pasteles de Mezcla de Baya" - -#: ../bushes_classic/init.lua -msgid "Cooked Mixed Berry pie" -msgstr "Pastel de Mezcla de Bayas Cocido" - -#: ../bushes_classic/init.lua -#, fuzzy -msgid "Currently fruitless Bush" -msgstr "Arbusto actualmente infructuoso" - -#: ../bushes_classic/init.lua -msgid "Mixed Berry" -msgstr "Mezcla de Baya" - -#: ../bushes_classic/init.lua -msgid "Raw Mixed Berry pie" -msgstr "Pastel de Mezcla de Bayas Cruda" - -#: ../bushes_classic/init.lua -msgid "Slice of Mixed Berry pie" -msgstr "Rebanada de Pastel de Mezcla de Bayas" - -#: ../bushes_classic/init.lua -msgid "[Bushes] Loaded." -msgstr "[Bushes] Cargado." - -#: ../bushes_classic/nodes.lua -msgid "Basket" -msgstr "Cesta" - -#: ../cavestuff/nodes.lua -msgid "Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Desert Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Stalactite" -msgstr "" - -#: ../dryplants/init.lua -msgid "Sickle" -msgstr "" - -#: ../dryplants/init.lua -msgid "Cut Grass" -msgstr "" - -#: ../dryplants/init.lua -msgid "Hay" -msgstr "" - -#: ../dryplants/init.lua -msgid "Short Grass" -msgstr "" - -#: ../dryplants/juncus.lua -msgid "Juncus" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 1" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3 & Spikes" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fern Tuber" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fern Tuber" -msgstr "" - -#: ../ferns/fern.lua -msgid "Lady-fern (Athyrium)" -msgstr "" - -#: ../ferns/gianttreefern.lua ../ferns/treefern.lua -msgid "Tree Fern Crown (Dicksonia)" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leaves" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leave End" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Fern Trunk" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Sapling" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Young Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Fern Trunk (Dicksonia)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Tree Fern Sapling (Dicksonia)" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "Waterlily" -msgstr "Lirio de agua" - -#: ../flowers_plus/init.lua -msgid "Seaweed" -msgstr "Algas marinas" - -#: ../flowers_plus/init.lua -msgid "Sunflower" -msgstr "Girasol" - -#: ../flowers_plus/init.lua -msgid "[Flowers] Loaded." -msgstr "[Flowers] Cargado." - -#: ../molehills/init.lua -msgid "Mole Hill" -msgstr "" - -#: ../molehills/init.lua -msgid "Loaded..." -msgstr "" - -#: ../nature_classic/blossom.lua -msgid "Apple blossoms" -msgstr "" - -#: ../nature_classic/init.lua -msgid "[Nature Classic] loaded!" -msgstr "" - -#: ../poisonivy/init.lua -msgid "Poison ivy (seedling)" -msgstr "Hiedra venenosa (retoño)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (sproutling)" -msgstr "Hiedra venenosa (brotes)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (climbing plant)" -msgstr "Hiedra venenosa (planta trepadora)" - -#: ../poisonivy/init.lua -msgid "[Poison Ivy] Loaded." -msgstr "[Poison Ivy] Cargado." - -#: ../trunks/nodes.lua -msgid "Twig" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss with Fungus" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Block" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Slab" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 1" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 2" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Root" -msgstr "" - -#: ../vines/crafts.lua ../vines/vines.lua -msgid "Vines" -msgstr "" - -#: ../vines/functions.lua -msgid "Matured" -msgstr "" - -#: ../vines/init.lua -msgid "[Vines] Loaded!" -msgstr "" - -#: ../vines/nodes.lua -msgid "Rope" -msgstr "" - -#: ../vines/shear.lua -msgid "Shears" -msgstr "" - -#: ../vines/vines.lua -msgid "Roots" -msgstr "" - -#: ../vines/vines.lua -msgid "Jungle Vines" -msgstr "" - -#: ../vines/vines.lua -msgid "Willow Vines" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 1" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 2" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 3" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 4" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Bamboo Tree" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree 2 (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (top)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (bottom)" -msgstr "" diff --git a/mods/CORE/plantlife_i18n/locale/fr.po b/mods/CORE/plantlife_i18n/locale/fr.po deleted file mode 100755 index d5734b3..0000000 --- a/mods/CORE/plantlife_i18n/locale/fr.po +++ /dev/null @@ -1,487 +0,0 @@ -# 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-08-03 11:09+0200\n" -"PO-Revision-Date: 2017-08-03 11:18+0200\n" -"Last-Translator: fat115 \n" -"Language-Team: \n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.12\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: ../bushes/init.lua -msgid "Young Tree 2 (bottom)" -msgstr "Arbuste 2 (bas)" - -#: ../bushes/init.lua -msgid "Bush Branches @1" -msgstr "Branches de buisson @1" - -#: ../bushes/init.lua -msgid "Bush Leaves @1" -msgstr "Feuilles de buisson @1" - -#: ../bushes_classic/cooking.lua -msgid "Sugar" -msgstr "Sucre" - -#: ../bushes_classic/init.lua -msgid "Basket with Strawberry pies" -msgstr "Panier de tartes aux fraises" - -#: ../bushes_classic/init.lua -msgid "Cooked Strawberry pie" -msgstr "Tarte aux fraises (cuite)" - -#: ../bushes_classic/init.lua -msgid "Raw Strawberry pie" -msgstr "Tarte aux fraises (crue)" - -#: ../bushes_classic/init.lua -msgid "Slice of Strawberry pie" -msgstr "Part de tarte aux fraises" - -#: ../bushes_classic/init.lua -msgid "Strawberry" -msgstr "Fraises" - -#: ../bushes_classic/init.lua -msgid "Strawberry Bush" -msgstr "Buisson de fraises" - -#: ../bushes_classic/init.lua -msgid "Basket with Blackberry pies" -msgstr "Panier de tartes aux fraises" - -#: ../bushes_classic/init.lua -msgid "Blackberry" -msgstr "Mûres" - -#: ../bushes_classic/init.lua -msgid "Blackberry Bush" -msgstr "Buisson de mûres" - -#: ../bushes_classic/init.lua -msgid "Cooked Blackberry pie" -msgstr "Tarte aux mûres (cuite)" - -#: ../bushes_classic/init.lua -msgid "Raw Blackberry pie" -msgstr "Tarte aux mûres (crue)" - -#: ../bushes_classic/init.lua -msgid "Slice of Blackberry pie" -msgstr "Part de tarte aux mûres" - -#: ../bushes_classic/init.lua -msgid "Basket with Blueberry pies" -msgstr "Panier de tartes aux mûres" - -#: ../bushes_classic/init.lua -msgid "Blueberry" -msgstr "Myrtilles" - -#: ../bushes_classic/init.lua -msgid "Blueberry Bush" -msgstr "Buisson de myrtilles" - -#: ../bushes_classic/init.lua -msgid "Cooked Blueberry pie" -msgstr "Tarte aux myrtilles (cuite)" - -#: ../bushes_classic/init.lua -msgid "Raw Blueberry pie" -msgstr "Tarte aux myrtilles (crue)" - -#: ../bushes_classic/init.lua -msgid "Slice of Blueberry pie" -msgstr "Part de tarte aux myrtilles" - -#: ../bushes_classic/init.lua -msgid "Basket with Raspberry pies" -msgstr "Panier de tartes aux framboises" - -#: ../bushes_classic/init.lua -msgid "Cooked Raspberry pie" -msgstr "Tarte aux framboises (cuite)" - -#: ../bushes_classic/init.lua -msgid "Raspberry" -msgstr "Framboises" - -#: ../bushes_classic/init.lua -msgid "Raspberry Bush" -msgstr "Buisson de framboises" - -#: ../bushes_classic/init.lua -msgid "Raw Raspberry pie" -msgstr "Tarte aux framboises (crue)" - -#: ../bushes_classic/init.lua -msgid "Slice of Raspberry pie" -msgstr "Part de tarts aux framboises" - -#: ../bushes_classic/init.lua -msgid "Basket with Gooseberry pies" -msgstr "Panier de tartes aux groseilles" - -#: ../bushes_classic/init.lua -msgid "Cooked Gooseberry pie" -msgstr "Tarte aux groseilles (cuite)" - -#: ../bushes_classic/init.lua -msgid "Gooseberry" -msgstr "Groseilles" - -#: ../bushes_classic/init.lua -msgid "Gooseberry Bush" -msgstr "Buisson de groseilles" - -#: ../bushes_classic/init.lua -msgid "Raw Gooseberry pie" -msgstr "Tarte aux groseilles (crue)" - -#: ../bushes_classic/init.lua -msgid "Slice of Gooseberry pie" -msgstr "Part de tarte aux groseilles" - -#: ../bushes_classic/init.lua -msgid "Basket with Mixed Berry pies" -msgstr "Panier de tartes aux fruits rouges" - -#: ../bushes_classic/init.lua -msgid "Cooked Mixed Berry pie" -msgstr "Tarte aux fruits rouges (cuite)" - -#: ../bushes_classic/init.lua -msgid "Currently fruitless Bush" -msgstr "Buisson sans fruits pour l'instant" - -#: ../bushes_classic/init.lua -msgid "Mixed Berry" -msgstr "Fruits rouges" - -#: ../bushes_classic/init.lua -msgid "Raw Mixed Berry pie" -msgstr "Tarte aux fruits rouges (crue)" - -#: ../bushes_classic/init.lua -msgid "Slice of Mixed Berry pie" -msgstr "Part de tarte aux fruits rouges" - -#: ../bushes_classic/init.lua -msgid "[Bushes] Loaded." -msgstr "[Bushes] chargé." - -#: ../bushes_classic/nodes.lua -msgid "Basket" -msgstr "Panier" - -#: ../cavestuff/nodes.lua -msgid "Pebble" -msgstr "Caillou" - -#: ../cavestuff/nodes.lua -msgid "Desert Pebble" -msgstr "Caillou du désert" - -#: ../cavestuff/nodes.lua -msgid "Stalactite" -msgstr "Stalactite" - -#: ../dryplants/init.lua -msgid "Sickle" -msgstr "Faucille" - -#: ../dryplants/init.lua -msgid "Cut Grass" -msgstr "Herbe coupée" - -#: ../dryplants/init.lua -msgid "Hay" -msgstr "Foin" - -#: ../dryplants/init.lua -msgid "Short Grass" -msgstr "Herbes courtes" - -#: ../dryplants/juncus.lua -msgid "Juncus" -msgstr "Joncs" - -#: ../dryplants/reed.lua -msgid "Wet Reed" -msgstr "Bloc de roseau humide" - -#: ../dryplants/reed.lua -msgid "Wet Reed Slab" -msgstr "Dalle en roseau humide" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof" -msgstr "Toit en roseau humide" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner" -msgstr "Angle de toit en roseau humide" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner 2" -msgstr "Angle de toit en roseau humide 2" - -#: ../dryplants/reed.lua -msgid "Reed" -msgstr "Roseau" - -#: ../dryplants/reed.lua -msgid "Reed Slab" -msgstr "Dalle en roseau" - -#: ../dryplants/reed.lua -msgid "Reed Roof" -msgstr "Toit en roseau" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner" -msgstr "Angle de toit en roseau" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner 2" -msgstr "Angle de toit en roseau 2" - -#: ../dryplants/reedmace.lua -msgid "Reedmace" -msgstr "Roseau" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 1" -msgstr "Roseau, 1 de hauteur" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 2" -msgstr "Roseau, 2 de hauteur" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3" -msgstr "Roseau, 3 de hauteur" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3 & Spikes" -msgstr "Roseau, 3 de hauteur avec panicules" - -#: ../ferns/crafting.lua -msgid "Fiddlehead" -msgstr "Crosse de fougère" - -#: ../ferns/crafting.lua -msgid "Roasted Fiddlehead" -msgstr "Crosse de fougère rôtie" - -#: ../ferns/crafting.lua -msgid "Fern Tuber" -msgstr "Tubercule de fougère" - -#: ../ferns/crafting.lua -msgid "Roasted Fern Tuber" -msgstr "Tubercule de fougère rôti" - -#: ../ferns/fern.lua -msgid "Lady-fern (Athyrium)" -msgstr "Fougère (Athyrium)" - -#: ../ferns/gianttreefern.lua ../ferns/treefern.lua -msgid "Tree Fern Crown (Dicksonia)" -msgstr "Fougère en couronne (Dicksonia)" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leaves" -msgstr "Feuilles de fougère géante" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leave End" -msgstr "Feuilles de fougère géante (extrémité)" - -#: ../ferns/gianttreefern.lua -msgid "Giant Fern Trunk" -msgstr "Tronc de fougère géante" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Sapling" -msgstr "Pousse de fougère géante" - -#: ../ferns/horsetail.lua -msgid "Young Horsetail (Equisetum)" -msgstr "Pousse de prêle (Equisetum)" - -#: ../ferns/horsetail.lua -msgid "Horsetail (Equisetum)" -msgstr "Prêle (Equisetum)" - -#: ../ferns/treefern.lua -msgid "Fern Trunk (Dicksonia)" -msgstr "Tronc de fougère en couronne (Dicksonia)" - -#: ../ferns/treefern.lua -msgid "Tree Fern Sapling (Dicksonia)" -msgstr "Pousse de fougère en couronne (Dicksonia)" - -#: ../flowers_plus/init.lua -msgid "Waterlily" -msgstr "Nénuphar" - -#: ../flowers_plus/init.lua -msgid "Seaweed" -msgstr "Algues" - -#: ../flowers_plus/init.lua -msgid "Sunflower" -msgstr "Tournesol" - -#: ../flowers_plus/init.lua -msgid "[Flowers] Loaded." -msgstr "[Flowers] chargé." - -#: ../molehills/init.lua -msgid "Mole Hill" -msgstr "Taupinière" - -#: ../molehills/init.lua -msgid "Loaded..." -msgstr "chargé." - -#: ../nature_classic/blossom.lua -msgid "Apple blossoms" -msgstr "Fleurs de pommier" - -#: ../nature_classic/init.lua -msgid "[Nature Classic] loaded!" -msgstr "[Nature Classic] chargé.!" - -#: ../poisonivy/init.lua -msgid "Poison ivy (seedling)" -msgstr "Sumac vénéneux (semis)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (sproutling)" -msgstr "Sumac vénéneux (pousse)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (climbing plant)" -msgstr "Sumac vénéneux (grimpant)" - -#: ../poisonivy/init.lua -msgid "[Poison Ivy] Loaded." -msgstr "[Poison Ivy] chargé." - -#: ../trunks/nodes.lua -msgid "Twig" -msgstr "Brindille" - -#: ../trunks/nodes.lua -msgid "Moss" -msgstr "Mousse" - -#: ../trunks/nodes.lua -msgid "Moss with Fungus" -msgstr "Mousse et champignons" - -#: ../trunks/nodes.lua -msgid "Twigs Block" -msgstr "Bloc de brindilles" - -#: ../trunks/nodes.lua -msgid "Twigs Slab" -msgstr "Dalle en brindilles" - -#: ../trunks/nodes.lua -msgid "Twigs Roof" -msgstr "Toit de brindilles" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 1" -msgstr "Angle de toit de brindilles 1" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 2" -msgstr "Angle de toit de brindilles 2" - -#: ../trunks/nodes.lua -msgid "Root" -msgstr "(racine)" - -#: ../vines/crafts.lua ../vines/vines.lua -msgid "Vines" -msgstr "Plantes grimpantes" - -#: ../vines/functions.lua -msgid "Matured" -msgstr "Extrémité de" - -#: ../vines/init.lua -msgid "[Vines] Loaded!" -msgstr "[Vines] chargé." - -#: ../vines/nodes.lua -msgid "Rope" -msgstr "Corde" - -#: ../vines/shear.lua -msgid "Shears" -msgstr "Cisailles" - -#: ../vines/vines.lua -msgid "Roots" -msgstr "Racines" - -#: ../vines/vines.lua -msgid "Jungle Vines" -msgstr "Lianes" - -#: ../vines/vines.lua -msgid "Willow Vines" -msgstr "Lianes de saule" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 1" -msgstr "Humus forestier 1" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 2" -msgstr "Humus forestier 2" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 3" -msgstr "Humus forestier 3" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 4" -msgstr "Humus forestier 4" - -#: ../youngtrees/init.lua -msgid "Young Bamboo Tree" -msgstr "Bambou jeune" - -#: ../youngtrees/init.lua -msgid "Young Tree 2 (middle)" -msgstr "Arbuste 2 (milieu)" - -#: ../youngtrees/init.lua -msgid "Young Tree (top)" -msgstr "Arbuste (haut)" - -#: ../youngtrees/init.lua -msgid "Young Tree (middle)" -msgstr "Arbuste (milieu)" - -#: ../youngtrees/init.lua -msgid "Young Tree (bottom)" -msgstr "Arbuste (bas)" diff --git a/mods/CORE/plantlife_i18n/locale/pt.po b/mods/CORE/plantlife_i18n/locale/pt.po deleted file mode 100755 index 3ef8e22..0000000 --- a/mods/CORE/plantlife_i18n/locale/pt.po +++ /dev/null @@ -1,487 +0,0 @@ -# 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-08-03 14:07+0200\n" -"PO-Revision-Date: 2017-08-03 14:08+0200\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 1.8.12\n" -"Last-Translator: fat115 \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: pt\n" - -#: ../bushes/init.lua -msgid "Young Tree 2 (bottom)" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Branches @1" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Leaves @1" -msgstr "" - -#: ../bushes_classic/cooking.lua -msgid "Sugar" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Strawberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Strawberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Strawberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Strawberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Strawberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Strawberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Blackberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Blackberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Blackberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Blackberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Blackberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Blackberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Blueberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Blueberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Blueberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Blueberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Blueberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Blueberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Raspberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Raspberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raspberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raspberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Raspberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Raspberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Gooseberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Gooseberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Gooseberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Gooseberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Gooseberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Gooseberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Mixed Berry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Mixed Berry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Currently fruitless Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Mixed Berry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Mixed Berry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Mixed Berry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "[Bushes] Loaded." -msgstr "" - -#: ../bushes_classic/nodes.lua -msgid "Basket" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Desert Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Stalactite" -msgstr "" - -#: ../dryplants/init.lua -msgid "Sickle" -msgstr "" - -#: ../dryplants/init.lua -msgid "Cut Grass" -msgstr "" - -#: ../dryplants/init.lua -msgid "Hay" -msgstr "" - -#: ../dryplants/init.lua -msgid "Short Grass" -msgstr "" - -#: ../dryplants/juncus.lua -msgid "Juncus" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 1" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3 & Spikes" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fern Tuber" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fern Tuber" -msgstr "" - -#: ../ferns/fern.lua -msgid "Lady-fern (Athyrium)" -msgstr "" - -#: ../ferns/gianttreefern.lua ../ferns/treefern.lua -msgid "Tree Fern Crown (Dicksonia)" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leaves" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leave End" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Fern Trunk" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Sapling" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Young Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Fern Trunk (Dicksonia)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Tree Fern Sapling (Dicksonia)" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "Waterlily" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "Seaweed" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "Sunflower" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "[Flowers] Loaded." -msgstr "" - -#: ../molehills/init.lua -msgid "Mole Hill" -msgstr "" - -#: ../molehills/init.lua -msgid "Loaded..." -msgstr "" - -#: ../nature_classic/blossom.lua -msgid "Apple blossoms" -msgstr "" - -#: ../nature_classic/init.lua -msgid "[Nature Classic] loaded!" -msgstr "" - -#: ../poisonivy/init.lua -msgid "Poison ivy (seedling)" -msgstr "Hera venenosa (plantilha)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (sproutling)" -msgstr "Hera venenosa (brotando)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (climbing plant)" -msgstr "Hera venenosa (planta trepadeira)" - -#: ../poisonivy/init.lua -msgid "[Poison Ivy] Loaded." -msgstr "[Poison Ivy] Carregado" - -#: ../trunks/nodes.lua -msgid "Twig" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss with Fungus" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Block" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Slab" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 1" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 2" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Root" -msgstr "" - -#: ../vines/crafts.lua ../vines/vines.lua -msgid "Vines" -msgstr "" - -#: ../vines/functions.lua -msgid "Matured" -msgstr "" - -#: ../vines/init.lua -msgid "[Vines] Loaded!" -msgstr "" - -#: ../vines/nodes.lua -msgid "Rope" -msgstr "" - -#: ../vines/shear.lua -msgid "Shears" -msgstr "" - -#: ../vines/vines.lua -msgid "Roots" -msgstr "" - -#: ../vines/vines.lua -msgid "Jungle Vines" -msgstr "" - -#: ../vines/vines.lua -msgid "Willow Vines" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 1" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 2" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 3" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 4" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Bamboo Tree" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree 2 (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (top)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (bottom)" -msgstr "" diff --git a/mods/CORE/plantlife_i18n/locale/template.pot b/mods/CORE/plantlife_i18n/locale/template.pot deleted file mode 100755 index ef7027c..0000000 --- a/mods/CORE/plantlife_i18n/locale/template.pot +++ /dev/null @@ -1,486 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-03 11:09+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../bushes/init.lua -msgid "Young Tree 2 (bottom)" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Branches @1" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Leaves @1" -msgstr "" - -#: ../bushes_classic/cooking.lua -msgid "Sugar" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Strawberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Strawberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Strawberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Strawberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Strawberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Strawberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Blackberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Blackberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Blackberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Blackberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Blackberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Blackberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Blueberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Blueberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Blueberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Blueberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Blueberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Blueberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Raspberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Raspberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raspberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raspberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Raspberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Raspberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Gooseberry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Gooseberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Gooseberry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Gooseberry Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Gooseberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Gooseberry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Basket with Mixed Berry pies" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Cooked Mixed Berry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Currently fruitless Bush" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Mixed Berry" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Raw Mixed Berry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "Slice of Mixed Berry pie" -msgstr "" - -#: ../bushes_classic/init.lua -msgid "[Bushes] Loaded." -msgstr "" - -#: ../bushes_classic/nodes.lua -msgid "Basket" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Desert Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Stalactite" -msgstr "" - -#: ../dryplants/init.lua -msgid "Sickle" -msgstr "" - -#: ../dryplants/init.lua -msgid "Cut Grass" -msgstr "" - -#: ../dryplants/init.lua -msgid "Hay" -msgstr "" - -#: ../dryplants/init.lua -msgid "Short Grass" -msgstr "" - -#: ../dryplants/juncus.lua -msgid "Juncus" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 1" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3 & Spikes" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fern Tuber" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fern Tuber" -msgstr "" - -#: ../ferns/fern.lua -msgid "Lady-fern (Athyrium)" -msgstr "" - -#: ../ferns/gianttreefern.lua ../ferns/treefern.lua -msgid "Tree Fern Crown (Dicksonia)" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leaves" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leave End" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Fern Trunk" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Sapling" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Young Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Fern Trunk (Dicksonia)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Tree Fern Sapling (Dicksonia)" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "Waterlily" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "Seaweed" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "Sunflower" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "[Flowers] Loaded." -msgstr "" - -#: ../molehills/init.lua -msgid "Mole Hill" -msgstr "" - -#: ../molehills/init.lua -msgid "Loaded..." -msgstr "" - -#: ../nature_classic/blossom.lua -msgid "Apple blossoms" -msgstr "" - -#: ../nature_classic/init.lua -msgid "[Nature Classic] loaded!" -msgstr "" - -#: ../poisonivy/init.lua -msgid "Poison ivy (seedling)" -msgstr "" - -#: ../poisonivy/init.lua -msgid "Poison ivy (sproutling)" -msgstr "" - -#: ../poisonivy/init.lua -msgid "Poison ivy (climbing plant)" -msgstr "" - -#: ../poisonivy/init.lua -msgid "[Poison Ivy] Loaded." -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twig" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss with Fungus" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Block" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Slab" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 1" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 2" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Root" -msgstr "" - -#: ../vines/crafts.lua ../vines/vines.lua -msgid "Vines" -msgstr "" - -#: ../vines/functions.lua -msgid "Matured" -msgstr "" - -#: ../vines/init.lua -msgid "[Vines] Loaded!" -msgstr "" - -#: ../vines/nodes.lua -msgid "Rope" -msgstr "" - -#: ../vines/shear.lua -msgid "Shears" -msgstr "" - -#: ../vines/vines.lua -msgid "Roots" -msgstr "" - -#: ../vines/vines.lua -msgid "Jungle Vines" -msgstr "" - -#: ../vines/vines.lua -msgid "Willow Vines" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 1" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 2" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 3" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 4" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Bamboo Tree" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree 2 (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (top)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (bottom)" -msgstr "" diff --git a/mods/CORE/plantlife_i18n/locale/tr.po b/mods/CORE/plantlife_i18n/locale/tr.po deleted file mode 100755 index db4a919..0000000 --- a/mods/CORE/plantlife_i18n/locale/tr.po +++ /dev/null @@ -1,489 +0,0 @@ -# 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-08-03 11:43+0200\n" -"PO-Revision-Date: 2017-08-03 11:51+0200\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 1.8.12\n" -"Last-Translator: mahmutelmas06@hotmail.com\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: tr\n" - -#: ../bushes/init.lua -msgid "Young Tree 2 (bottom)" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Branches @1" -msgstr "" - -#: ../bushes/init.lua -msgid "Bush Leaves @1" -msgstr "" - -#: ../bushes_classic/cooking.lua -msgid "Sugar" -msgstr "Şeker" - -#: ../bushes_classic/init.lua -msgid "Basket with Strawberry pies" -msgstr "Çilekli pasta sepeti" - -#: ../bushes_classic/init.lua -msgid "Cooked Strawberry pie" -msgstr "Pişmiş çilekli pasta " - -#: ../bushes_classic/init.lua -msgid "Raw Strawberry pie" -msgstr "Çilekli çiğ pasta" - -#: ../bushes_classic/init.lua -msgid "Slice of Strawberry pie" -msgstr "Çilekli pasta dilimi" - -#: ../bushes_classic/init.lua -msgid "Strawberry" -msgstr "Çilek" - -#: ../bushes_classic/init.lua -msgid "Strawberry Bush" -msgstr "Çilek fidanı" - -#: ../bushes_classic/init.lua -msgid "Basket with Blackberry pies" -msgstr "Böğürtlenli pasta sepeti" - -#: ../bushes_classic/init.lua -msgid "Blackberry" -msgstr "Böğürtlen" - -#: ../bushes_classic/init.lua -msgid "Blackberry Bush" -msgstr "Böğürtlen fidanı" - -#: ../bushes_classic/init.lua -msgid "Cooked Blackberry pie" -msgstr "Pişmiş böğürtlenli pasta" - -#: ../bushes_classic/init.lua -msgid "Raw Blackberry pie" -msgstr "Böğürtlenli çiğ pasta" - -#: ../bushes_classic/init.lua -msgid "Slice of Blackberry pie" -msgstr "Böğürtlenli pasta dilimi" - -#: ../bushes_classic/init.lua -msgid "Basket with Blueberry pies" -msgstr "Yaban mersini pastalı sepet" - -#: ../bushes_classic/init.lua -msgid "Blueberry" -msgstr "Yaban mersini" - -#: ../bushes_classic/init.lua -msgid "Blueberry Bush" -msgstr "Yaban mersini fidanı" - -#: ../bushes_classic/init.lua -msgid "Cooked Blueberry pie" -msgstr "Pişmiş yaban mersinli pasta" - -#: ../bushes_classic/init.lua -msgid "Raw Blueberry pie" -msgstr "Yaban mersinli çiğ pasta" - -#: ../bushes_classic/init.lua -msgid "Slice of Blueberry pie" -msgstr "Yaban mersinli pasta dilimi" - -#: ../bushes_classic/init.lua -msgid "Basket with Raspberry pies" -msgstr "Ahududulu pasta sepeti" - -#: ../bushes_classic/init.lua -msgid "Cooked Raspberry pie" -msgstr "Pişmiş ahududulu pasta" - -#: ../bushes_classic/init.lua -msgid "Raspberry" -msgstr "Ahududu" - -#: ../bushes_classic/init.lua -msgid "Raspberry Bush" -msgstr "Ahududu fidanı" - -#: ../bushes_classic/init.lua -msgid "Raw Raspberry pie" -msgstr "Ahududulu çiğ pasta" - -#: ../bushes_classic/init.lua -msgid "Slice of Raspberry pie" -msgstr "Ahududulu pasta dilimi" - -#: ../bushes_classic/init.lua -msgid "Basket with Gooseberry pies" -msgstr "Bektaşi üzümlü pasta sepeti" - -#: ../bushes_classic/init.lua -msgid "Cooked Gooseberry pie" -msgstr "Pişmiş bektaşi üzümlü pasta" - -#: ../bushes_classic/init.lua -msgid "Gooseberry" -msgstr "Bektaşi üzümü" - -#: ../bushes_classic/init.lua -msgid "Gooseberry Bush" -msgstr "Bektaşi üzümü fidanı" - -#: ../bushes_classic/init.lua -msgid "Raw Gooseberry pie" -msgstr "Bektaşi üzümlü çiğ pasta" - -#: ../bushes_classic/init.lua -msgid "Slice of Gooseberry pie" -msgstr "Bektaşi üzümlü pasta dilimi" - -#: ../bushes_classic/init.lua -msgid "Basket with Mixed Berry pies" -msgstr "Dutlu pasta sepeti" - -#: ../bushes_classic/init.lua -msgid "Cooked Mixed Berry pie" -msgstr "Pişmiş dutlu pasta" - -#: ../bushes_classic/init.lua -#, fuzzy -msgid "Currently fruitless Bush" -msgstr "Fidanı şu anda meyvesiz" - -#: ../bushes_classic/init.lua -msgid "Mixed Berry" -msgstr "Dut" - -#: ../bushes_classic/init.lua -msgid "Raw Mixed Berry pie" -msgstr "Dutlu çiğ pasta" - -#: ../bushes_classic/init.lua -msgid "Slice of Mixed Berry pie" -msgstr "Dutlu pasta dilimi" - -#: ../bushes_classic/init.lua -msgid "[Bushes] Loaded." -msgstr "[Bushes] yüklendi." - -#: ../bushes_classic/nodes.lua -msgid "Basket" -msgstr "Sepet" - -#: ../cavestuff/nodes.lua -msgid "Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Desert Pebble" -msgstr "" - -#: ../cavestuff/nodes.lua -msgid "Stalactite" -msgstr "" - -#: ../dryplants/init.lua -msgid "Sickle" -msgstr "" - -#: ../dryplants/init.lua -msgid "Cut Grass" -msgstr "" - -#: ../dryplants/init.lua -msgid "Hay" -msgstr "" - -#: ../dryplants/init.lua -msgid "Short Grass" -msgstr "" - -#: ../dryplants/juncus.lua -msgid "Juncus" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Wet Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Slab" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner" -msgstr "" - -#: ../dryplants/reed.lua -msgid "Reed Roof Corner 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 1" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 2" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3" -msgstr "" - -#: ../dryplants/reedmace.lua -msgid "Reedmace, height: 3 & Spikes" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fiddlehead" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Fern Tuber" -msgstr "" - -#: ../ferns/crafting.lua -msgid "Roasted Fern Tuber" -msgstr "" - -#: ../ferns/fern.lua -msgid "Lady-fern (Athyrium)" -msgstr "" - -#: ../ferns/gianttreefern.lua ../ferns/treefern.lua -msgid "Tree Fern Crown (Dicksonia)" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leaves" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Leave End" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Fern Trunk" -msgstr "" - -#: ../ferns/gianttreefern.lua -msgid "Giant Tree Fern Sapling" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Young Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/horsetail.lua -msgid "Horsetail (Equisetum)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Fern Trunk (Dicksonia)" -msgstr "" - -#: ../ferns/treefern.lua -msgid "Tree Fern Sapling (Dicksonia)" -msgstr "" - -#: ../flowers_plus/init.lua -msgid "Waterlily" -msgstr "Nilüfer" - -#: ../flowers_plus/init.lua -msgid "Seaweed" -msgstr "Deniz yosunu" - -#: ../flowers_plus/init.lua -#, fuzzy -msgid "Sunflower" -msgstr "Ayçiçeği" - -#: ../flowers_plus/init.lua -msgid "[Flowers] Loaded." -msgstr "[Flowers] yüklendi." - -#: ../molehills/init.lua -msgid "Mole Hill" -msgstr "" - -#: ../molehills/init.lua -msgid "Loaded..." -msgstr "" - -#: ../nature_classic/blossom.lua -msgid "Apple blossoms" -msgstr "" - -#: ../nature_classic/init.lua -msgid "[Nature Classic] loaded!" -msgstr "" - -#: ../poisonivy/init.lua -msgid "Poison ivy (seedling)" -msgstr "Sarmaşık (Fidan)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (sproutling)" -msgstr "Sarmaşık (Filiz)" - -#: ../poisonivy/init.lua -msgid "Poison ivy (climbing plant)" -msgstr "Sarmaşık (Dolanan)" - -#: ../poisonivy/init.lua -msgid "[Poison Ivy] Loaded." -msgstr "[Poison Ivy] yüklendi." - -#: ../trunks/nodes.lua -msgid "Twig" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Moss with Fungus" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Block" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Slab" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 1" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Twigs Roof Corner 2" -msgstr "" - -#: ../trunks/nodes.lua -msgid "Root" -msgstr "" - -#: ../vines/crafts.lua ../vines/vines.lua -msgid "Vines" -msgstr "" - -#: ../vines/functions.lua -msgid "Matured" -msgstr "" - -#: ../vines/init.lua -msgid "[Vines] Loaded!" -msgstr "" - -#: ../vines/nodes.lua -msgid "Rope" -msgstr "" - -#: ../vines/shear.lua -msgid "Shears" -msgstr "" - -#: ../vines/vines.lua -msgid "Roots" -msgstr "" - -#: ../vines/vines.lua -msgid "Jungle Vines" -msgstr "" - -#: ../vines/vines.lua -msgid "Willow Vines" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 1" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 2" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 3" -msgstr "" - -#: ../woodsoils/nodes.lua -msgid "Forest Soil 4" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Bamboo Tree" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree 2 (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (top)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (middle)" -msgstr "" - -#: ../youngtrees/init.lua -msgid "Young Tree (bottom)" -msgstr "" diff --git a/mods/CORE/plants_api/init.lua b/mods/CORE/plants_api/init.lua deleted file mode 100644 index 59a2107..0000000 --- a/mods/CORE/plants_api/init.lua +++ /dev/null @@ -1,56 +0,0 @@ ---[[ - Plants API ---]] - - -plants_api = {} - -plants_api.registered_plants = {} - --- Localize math routines for performance -local math_floor = math.floor -local math_random = math.random - -function plants_api.register_plant(params) - local n = #plants_api.registered_plants + 1 - params.priority = math_floor(params.priority) + 1 / n - plants_api.registered_plants[n] = params -end - -function plants_api.choose_generate_plant(conditions, pos, data, area, ivm) - local rand = math_random() -- Random number to choose the plant - - for _, plant in ipairs(plants_api.registered_plants) do -- for each registered plant - local cover = plant.cover - if plant.check(conditions, pos) then -- Place this plant, or do not place anything (see Cover parameter) - if rand < cover then - if rand < plant.density then - local grow = plant.grow - local nodes = plant.nodes - - if grow then -- if a grow function is defined, then run it - grow(nodes, pos, data, area, ivm, conditions) - else - if type(nodes) == "number" then -- 'nodes' is just a number - data[ivm] = nodes - else -- 'nodes' is an array - local node = nodes[math_random(#nodes)] - local n = nodes.n or 1 - local ystride = area.ystride - - for h = 1, n do - data[ivm] = node - ivm = ivm + ystride - end - end - end - end - break - else - rand = (rand - cover) / (1 - cover) - end - end - end - -end - diff --git a/mods/CORE/plants_api/mod.conf b/mods/CORE/plants_api/mod.conf deleted file mode 100644 index d17bb6e..0000000 --- a/mods/CORE/plants_api/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = plants_api diff --git a/mods/ENTITIES/boats/README.txt b/mods/ENTITIES/boats/README.txt deleted file mode 100644 index 59631d9..0000000 --- a/mods/ENTITIES/boats/README.txt +++ /dev/null @@ -1,15 +0,0 @@ -Minetest Game mod: boats -======================== -See license.txt for license information. - -Authors of source code ----------------------- -Originally by PilzAdam (MIT) -Various Minetest developers and contributors (MIT) - -Authors of media (textures and model) -------------------------------------- -Textures: Zeg9 (CC BY-SA 3.0) -Model: thetoon and Zeg9 (CC BY-SA 3.0), - modified by PavelS(SokolovPavel) (CC BY-SA 3.0), - modified by sofar (CC BY-SA 3.0) diff --git a/mods/ENTITIES/boats/init.lua b/mods/ENTITIES/boats/init.lua deleted file mode 100644 index 38025d1..0000000 --- a/mods/ENTITIES/boats/init.lua +++ /dev/null @@ -1,271 +0,0 @@ --- --- Helper functions --- - -local function is_water(pos) - local nn = minetest.get_node(pos).name - return minetest.get_item_group(nn, "water") ~= 0 -end - - -local function get_sign(i) - if i == 0 then - return 0 - else - return i / math.abs(i) - end -end - - -local function get_velocity(v, yaw, y) - local x = -math.sin(yaw) * v - local z = math.cos(yaw) * v - return {x = x, y = y, z = z} -end - - -local function get_v(v) - return math.sqrt(v.x ^ 2 + v.z ^ 2) -end - --- --- Boat entity --- - -local boat = { - physical = true, - -- Warning: Do not change the position of the collisionbox top surface, - -- lowering it causes the boat to fall through the world if underwater - collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, - visual = "mesh", - mesh = "boats_boat.obj", - textures = {"default_wood.png"}, - - driver = nil, - v = 0, - last_v = 0, - removed = false -} - - -function boat.on_rightclick(self, clicker) - if not clicker or not clicker:is_player() then - return - end - local name = clicker:get_player_name() - if self.driver and clicker == self.driver then - self.driver = nil - clicker:set_detach() - player_api.player_attached[name] = false - player_api.set_animation(clicker, "stand" , 30) - local pos = clicker:getpos() - pos = {x = pos.x, y = pos.y + 0.2, z = pos.z} - minetest.after(0.1, function() - clicker:setpos(pos) - end) - elseif not self.driver then - local attach = clicker:get_attach() - if attach and attach:get_luaentity() then - local luaentity = attach:get_luaentity() - if luaentity.driver then - luaentity.driver = nil - end - clicker:set_detach() - end - self.driver = clicker - clicker:set_attach(self.object, "", - {x = 0.5, y = 1, z = -3}, {x = 0, y = 0, z = 0}) - player_api.player_attached[name] = true - minetest.after(0.2, function() - player_api.set_animation(clicker, "sit" , 30) - end) - clicker:set_look_horizontal(self.object:getyaw()) - end -end - - -function boat.on_activate(self, staticdata, dtime_s) - self.object:set_armor_groups({immortal = 1}) - if staticdata then - self.v = tonumber(staticdata) - end - self.last_v = self.v -end - - -function boat.get_staticdata(self) - return tostring(self.v) -end - - -function boat.on_punch(self, puncher) - if not puncher or not puncher:is_player() or self.removed then - return - end - if self.driver and puncher == self.driver then - self.driver = nil - puncher:set_detach() - player_api.player_attached[puncher:get_player_name()] = false - end - if not self.driver then - self.removed = true - local inv = puncher:get_inventory() - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(puncher:get_player_name())) - or not inv:contains_item("main", "boats:boat") then - local leftover = inv:add_item("main", "boats:boat") - -- if no room in inventory add a replacement boat to the world - if not leftover:is_empty() then - minetest.add_item(self.object:getpos(), leftover) - end - end - -- delay remove to ensure player is detached - minetest.after(0.1, function() - self.object:remove() - end) - end -end - - -function boat.on_step(self, dtime) - self.v = get_v(self.object:getvelocity()) * get_sign(self.v) - if self.driver then - local ctrl = self.driver:get_player_control() - local yaw = self.object:getyaw() - if ctrl.up then - self.v = self.v + 0.1 - elseif ctrl.down then - self.v = self.v - 0.1 - end - if ctrl.left then - if self.v < 0 then - self.object:setyaw(yaw - (1 + dtime) * 0.03) - else - self.object:setyaw(yaw + (1 + dtime) * 0.03) - end - elseif ctrl.right then - if self.v < 0 then - self.object:setyaw(yaw + (1 + dtime) * 0.03) - else - self.object:setyaw(yaw - (1 + dtime) * 0.03) - end - end - end - local velo = self.object:getvelocity() - if self.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then - self.object:setpos(self.object:getpos()) - return - end - local s = get_sign(self.v) - self.v = self.v - 0.02 * s - if s ~= get_sign(self.v) then - self.object:setvelocity({x = 0, y = 0, z = 0}) - self.v = 0 - return - end - if math.abs(self.v) > 5 then - self.v = 5 * get_sign(self.v) - end - - local p = self.object:getpos() - p.y = p.y - 0.5 - local new_velo - local new_acce = {x = 0, y = 0, z = 0} - if not is_water(p) then - local nodedef = minetest.registered_nodes[minetest.get_node(p).name] - if (not nodedef) or nodedef.walkable then - self.v = 0 - new_acce = {x = 0, y = 1, z = 0} - else - new_acce = {x = 0, y = -9.8, z = 0} - end - new_velo = get_velocity(self.v, self.object:getyaw(), - self.object:getvelocity().y) - self.object:setpos(self.object:getpos()) - else - p.y = p.y + 1 - if is_water(p) then - local y = self.object:getvelocity().y - if y >= 5 then - y = 5 - elseif y < 0 then - new_acce = {x = 0, y = 20, z = 0} - else - new_acce = {x = 0, y = 5, z = 0} - end - new_velo = get_velocity(self.v, self.object:getyaw(), y) - self.object:setpos(self.object:getpos()) - else - new_acce = {x = 0, y = 0, z = 0} - if math.abs(self.object:getvelocity().y) < 1 then - local pos = self.object:getpos() - pos.y = math.floor(pos.y) + 0.5 - self.object:setpos(pos) - new_velo = get_velocity(self.v, self.object:getyaw(), 0) - else - new_velo = get_velocity(self.v, self.object:getyaw(), - self.object:getvelocity().y) - self.object:setpos(self.object:getpos()) - end - end - end - self.object:setvelocity(new_velo) - self.object:setacceleration(new_acce) -end - - -minetest.register_entity("boats:boat", boat) - - -minetest.register_craftitem("boats:boat", { - description = "Boat", - inventory_image = "boats_inventory.png", - wield_image = "boats_wield.png", - wield_scale = {x = 2, y = 2, z = 1}, - liquids_pointable = true, - groups = {flammable = 2}, - - on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local udef = minetest.registered_nodes[node.name] - if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return udef.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - - if pointed_thing.type ~= "node" then - return itemstack - end - if not is_water(pointed_thing.under) then - return itemstack - end - pointed_thing.under.y = pointed_thing.under.y + 0.5 - boat = minetest.add_entity(pointed_thing.under, "boats:boat") - if boat then - boat:setyaw(placer:get_look_horizontal()) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then - itemstack:take_item() - end - end - return itemstack - end, -}) - - -minetest.register_craft({ - output = "boats:boat", - recipe = { - {"", "", "" }, - {"group:wood", "", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - }, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "boats:boat", - burntime = 20, -}) diff --git a/mods/ENTITIES/carts/cart_entity.lua b/mods/ENTITIES/carts/cart_entity.lua deleted file mode 100644 index a19da64..0000000 --- a/mods/ENTITIES/carts/cart_entity.lua +++ /dev/null @@ -1,403 +0,0 @@ -local cart_entity = { - physical = false, -- otherwise going uphill breaks - collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, - visual = "mesh", - mesh = "carts_cart.b3d", - visual_size = {x=1, y=1}, - textures = {"carts_cart.png"}, - - driver = nil, - punched = false, -- used to re-send velocity and position - velocity = {x=0, y=0, z=0}, -- only used on punch - old_dir = {x=1, y=0, z=0}, -- random value to start the cart on punch - old_pos = nil, - old_switch = 0, - railtype = nil, - attached_items = {} -} - -function cart_entity:on_rightclick(clicker) - if not clicker or not clicker:is_player() then - return - 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) - end -end - -function cart_entity:on_activate(staticdata, dtime_s) - self.object:set_armor_groups({immortal=1}) - if string.sub(staticdata, 1, string.len("return")) ~= "return" then - return - end - local data = minetest.deserialize(staticdata) - if not data or type(data) ~= "table" then - return - end - self.railtype = data.railtype - if data.old_dir then - self.old_dir = data.old_dir - end - if data.old_vel then - self.old_vel = data.old_vel - end -end - -function cart_entity:get_staticdata() - return minetest.serialize({ - railtype = self.railtype, - old_dir = self.old_dir, - old_vel = self.old_vel - }) -end - -function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) - local pos = self.object:getpos() - if not self.railtype then - local node = minetest.get_node(pos).name - self.railtype = minetest.get_item_group(node, "connect_to_raillike") - end - -- Punched by non-player - if not puncher or not puncher:is_player() then - local cart_dir = carts:get_rail_direction(pos, self.old_dir, nil, nil, self.railtype) - if vector.equals(cart_dir, {x=0, y=0, z=0}) then - return - end - self.velocity = vector.multiply(cart_dir, 2) - self.punched = true - return - end - -- Player digs cart by sneak-punch - if puncher:get_player_control().sneak then - if self.sound_handle then - minetest.sound_stop(self.sound_handle) - end - -- Detach driver and items - if self.driver then - if self.old_pos then - self.object:setpos(self.old_pos) - end - local player = minetest.get_player_by_name(self.driver) - carts:manage_attachment(player, nil) - end - for _,obj_ in ipairs(self.attached_items) do - if obj_ then - obj_:set_detach() - end - end - -- Pick up cart - local inv = puncher:get_inventory() - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(puncher:get_player_name())) - or not inv:contains_item("main", "carts:cart") then - local leftover = inv:add_item("main", "carts:cart") - -- If no room in inventory add a replacement cart to the world - if not leftover:is_empty() then - minetest.add_item(self.object:getpos(), leftover) - end - end - self.object:remove() - return - end - -- Player punches cart to alter velocity - local vel = self.object:getvelocity() - if puncher:get_player_name() == self.driver then - if math.abs(vel.x + vel.z) > carts.punch_speed_max then - return - end - end - - local punch_dir = carts:velocity_to_dir(puncher:get_look_dir()) - punch_dir.y = 0 - local cart_dir = carts:get_rail_direction(pos, punch_dir, nil, nil, self.railtype) - if vector.equals(cart_dir, {x=0, y=0, z=0}) then - return - end - - local punch_interval = 1 - if tool_capabilities and tool_capabilities.full_punch_interval then - punch_interval = tool_capabilities.full_punch_interval - end - time_from_last_punch = math.min(time_from_last_punch or punch_interval, punch_interval) - local f = 2 * (time_from_last_punch / punch_interval) - - self.velocity = vector.multiply(cart_dir, f) - self.old_dir = cart_dir - self.punched = true -end - -local function rail_on_step_event(handler, obj, dtime) - if handler then - handler(obj, dtime) - end -end - --- sound refresh interval = 1.0sec -local function rail_sound(self, dtime) - if not self.sound_ttl then - self.sound_ttl = 1.0 - return - elseif self.sound_ttl > 0 then - self.sound_ttl = self.sound_ttl - dtime - return - end - self.sound_ttl = 1.0 - if self.sound_handle then - local handle = self.sound_handle - self.sound_handle = nil - minetest.after(0.2, minetest.sound_stop, handle) - end - local vel = self.object:getvelocity() - local speed = vector.length(vel) - if speed > 0 then - self.sound_handle = minetest.sound_play( - "carts_cart_moving", { - object = self.object, - gain = (speed / carts.speed_max) / 2, - loop = true, - }) - end -end - -local function get_railparams(pos) - local node = minetest.get_node(pos) - return carts.railparams[node.name] or {} -end - -local function rail_on_step(self, dtime) - local vel = self.object:getvelocity() - if self.punched then - vel = vector.add(vel, self.velocity) - self.object:setvelocity(vel) - self.old_dir.y = 0 - elseif vector.equals(vel, {x=0, y=0, z=0}) then - return - end - - local pos = self.object:getpos() - local update = {} - - -- stop cart if velocity vector flips - if self.old_vel and self.old_vel.y == 0 and - (self.old_vel.x * vel.x < 0 or self.old_vel.z * vel.z < 0) then - self.old_vel = {x = 0, y = 0, z = 0} - self.old_pos = pos - self.object:setvelocity(vector.new()) - self.object:setacceleration(vector.new()) - rail_on_step_event(get_railparams(pos).on_step, self, dtime) - return - end - self.old_vel = vector.new(vel) - - if self.old_pos and not self.punched then - local flo_pos = vector.round(pos) - local flo_old = vector.round(self.old_pos) - if vector.equals(flo_pos, flo_old) then - -- Do not check one node multiple times - return - end - end - - local ctrl, player - - -- Get player controls - if self.driver then - player = minetest.get_player_by_name(self.driver) - if player then - ctrl = player:get_player_control() - end - end - - if self.old_pos then - -- Detection for "skipping" nodes - local found_path = carts:pathfinder( - pos, self.old_pos, self.old_dir, ctrl, self.old_switch, self.railtype - ) - - if not found_path then - -- No rail found: reset back to the expected position - pos = vector.new(self.old_pos) - update.pos = true - end - end - - local cart_dir = carts:velocity_to_dir(vel) - local railparams - - -- dir: New moving direction of the cart - -- switch_keys: Currently pressed L/R key, used to ignore the key on the next rail node - local dir, switch_keys = carts:get_rail_direction( - pos, cart_dir, ctrl, self.old_switch, self.railtype - ) - - local new_acc = {x=0, y=0, z=0} - if vector.equals(dir, {x=0, y=0, z=0}) then - vel = {x = 0, y = 0, z = 0} - pos = vector.round(pos) - update.pos = true - update.vel = true - else - -- Direction change detected - if not vector.equals(dir, self.old_dir) then - vel = vector.multiply(dir, math.abs(vel.x + vel.z)) - update.vel = true - if dir.y ~= self.old_dir.y then - pos = vector.round(pos) - update.pos = true - end - end - -- Center on the rail - if dir.z ~= 0 and math.floor(pos.x + 0.5) ~= pos.x then - pos.x = math.floor(pos.x + 0.5) - update.pos = true - end - if dir.x ~= 0 and math.floor(pos.z + 0.5) ~= pos.z then - pos.z = math.floor(pos.z + 0.5) - update.pos = true - end - - -- Slow down or speed up.. - local acc = dir.y * -4.0 - - -- Get rail for corrected position - railparams = get_railparams(pos) - - -- no need to check for railparams == nil since we always make it exist. - local speed_mod = railparams.acceleration - if speed_mod and speed_mod ~= 0 then - -- Try to make it similar to the original carts mod - acc = acc + speed_mod - else - -- Handbrake or coast - if ctrl and ctrl.down then - acc = acc - 3 - else - acc = acc - 0.4 - end - end - - new_acc = vector.multiply(dir, acc) - end - - -- Limits - local max_vel = carts.speed_max - for _, v in pairs({"x","y","z"}) do - if math.abs(vel[v]) > max_vel then - vel[v] = carts:get_sign(vel[v]) * max_vel - new_acc[v] = 0 - update.vel = true - end - end - - self.object:setacceleration(new_acc) - self.old_pos = vector.new(pos) - if not vector.equals(dir, {x=0, y=0, z=0}) then - self.old_dir = vector.new(dir) - end - self.old_switch = switch_keys - - if self.punched then - -- Collect dropped items - for _, obj_ in pairs(minetest.get_objects_inside_radius(pos, 1)) do - if not obj_:is_player() and - obj_:get_luaentity() and - not obj_:get_luaentity().physical_state and - obj_:get_luaentity().name == "__builtin:item" then - - obj_:set_attach(self.object, "", {x=0, y=0, z=0}, {x=0, y=0, z=0}) - self.attached_items[#self.attached_items + 1] = obj_ - end - end - self.punched = false - update.vel = true - end - - railparams = railparams or get_railparams(pos) - - if not (update.vel or update.pos) then - rail_on_step_event(railparams.on_step, self, dtime) - return - end - - local yaw = 0 - if self.old_dir.x < 0 then - yaw = 0.5 - elseif self.old_dir.x > 0 then - yaw = 1.5 - elseif self.old_dir.z < 0 then - yaw = 1 - end - self.object:setyaw(yaw * math.pi) - - local anim = {x=0, y=0} - if dir.y == -1 then - anim = {x=1, y=1} - elseif dir.y == 1 then - anim = {x=2, y=2} - end - self.object:set_animation(anim, 1, 0) - - self.object:setvelocity(vel) - if update.pos then - self.object:setpos(pos) - end - - -- call event handler - rail_on_step_event(railparams.on_step, self, dtime) -end - -function cart_entity:on_step(dtime) - rail_on_step(self, dtime) - rail_sound(self, dtime) -end - -minetest.register_entity("carts:cart", cart_entity) - -minetest.register_craftitem("carts:cart", { - description = "Cart (Sneak+Click to pick up)", - inventory_image = minetest.inventorycube("carts_cart_top.png", "carts_cart_side.png", "carts_cart_side.png"), - wield_image = "carts_cart_side.png", - on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local udef = minetest.registered_nodes[node.name] - if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return udef.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - - if not pointed_thing.type == "node" then - return - end - if carts:is_rail(pointed_thing.under) then - minetest.add_entity(pointed_thing.under, "carts:cart") - elseif carts:is_rail(pointed_thing.above) then - minetest.add_entity(pointed_thing.above, "carts:cart") - else - return - end - - minetest.sound_play({name = "default_place_node_metal", gain = 0.5}, - {pos = pointed_thing.above}) - - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then - itemstack:take_item() - end - return itemstack - end, -}) - -minetest.register_craft({ - output = "carts:cart", - recipe = { - {"default:steel_ingot", "", "default:steel_ingot"}, - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - }, -}) diff --git a/mods/ENTITIES/carts/functions.lua b/mods/ENTITIES/carts/functions.lua deleted file mode 100644 index 4ec68fb..0000000 --- a/mods/ENTITIES/carts/functions.lua +++ /dev/null @@ -1,221 +0,0 @@ -function carts:get_sign(z) - if z == 0 then - return 0 - else - return z / math.abs(z) - end -end - -function carts:manage_attachment(player, obj) - if not player then - return - end - local status = obj ~= nil - local player_name = player:get_player_name() - if player_api.player_attached[player_name] == status then - return - end - player_api.player_attached[player_name] = status - - 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}) - else - player:set_detach() - player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) - end -end - -function carts:velocity_to_dir(v) - if math.abs(v.x) > math.abs(v.z) then - return {x=carts:get_sign(v.x), y=carts:get_sign(v.y), z=0} - else - return {x=0, y=carts:get_sign(v.y), z=carts:get_sign(v.z)} - end -end - -function carts:is_rail(pos, railtype) - local node = minetest.get_node(pos).name - if node == "ignore" then - local vm = minetest.get_voxel_manip() - local emin, emax = vm:read_from_map(pos, pos) - local area = VoxelArea:new{ - MinEdge = emin, - MaxEdge = emax, - } - local data = vm:get_data() - local vi = area:indexp(pos) - node = minetest.get_name_from_content_id(data[vi]) - end - if minetest.get_item_group(node, "rail") == 0 then - return false - end - if not railtype then - return true - end - return minetest.get_item_group(node, "connect_to_raillike") == railtype -end - -function carts:check_front_up_down(pos, dir_, check_up, railtype) - local dir = vector.new(dir_) - local cur - - -- Front - dir.y = 0 - cur = vector.add(pos, dir) - if carts:is_rail(cur, railtype) then - return dir - end - -- Up - if check_up then - dir.y = 1 - cur = vector.add(pos, dir) - if carts:is_rail(cur, railtype) then - return dir - end - end - -- Down - dir.y = -1 - cur = vector.add(pos, dir) - if carts:is_rail(cur, railtype) then - return dir - end - return nil -end - -function carts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) - local pos = vector.round(pos_) - local cur - local left_check, right_check = true, true - - -- Check left and right - local left = {x=0, y=0, z=0} - local right = {x=0, y=0, z=0} - if dir.z ~= 0 and dir.x == 0 then - left.x = -dir.z - right.x = dir.z - elseif dir.x ~= 0 and dir.z == 0 then - left.z = dir.x - right.z = -dir.x - end - - if ctrl then - if old_switch == 1 then - left_check = false - elseif old_switch == 2 then - right_check = false - end - if ctrl.left and left_check then - cur = carts:check_front_up_down(pos, left, false, railtype) - if cur then - return cur, 1 - end - left_check = false - end - if ctrl.right and right_check then - cur = carts:check_front_up_down(pos, right, false, railtype) - if cur then - return cur, 2 - end - right_check = true - end - end - - -- Normal - cur = carts:check_front_up_down(pos, dir, true, railtype) - if cur then - return cur - end - - -- Left, if not already checked - if left_check then - cur = carts:check_front_up_down(pos, left, false, railtype) - if cur then - return cur - end - end - - -- Right, if not already checked - if right_check then - cur = carts:check_front_up_down(pos, right, false, railtype) - if cur then - return cur - end - end - - -- Backwards - if not old_switch then - cur = carts:check_front_up_down(pos, { - x = -dir.x, - y = dir.y, - z = -dir.z - }, true, railtype) - if cur then - return cur - end - end - - return {x=0, y=0, z=0} -end - -function carts:pathfinder(pos_, old_pos, old_dir, ctrl, pf_switch, railtype) - local pos = vector.round(pos_) - local pf_pos = vector.round(old_pos) - local pf_dir = vector.new(old_dir) - - for i = 1, 3 do - if vector.equals(pf_pos, pos) then - -- Success! Cart moved on correctly - return true - end - - pf_dir, pf_switch = carts:get_rail_direction(pf_pos, pf_dir, ctrl, pf_switch, railtype) - if vector.equals(pf_dir, {x=0, y=0, z=0}) then - -- No way forwards - return false - end - - pf_pos = vector.add(pf_pos, pf_dir) - end - -- Cart not found - return false -end - -function carts:register_rail(name, def_overwrite, railparams) - local def = { - drawtype = "raillike", - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - sounds = default.node_sound_metal_defaults() - } - for k, v in pairs(def_overwrite) do - def[k] = v - end - if not def.inventory_image then - def.wield_image = def.tiles[1] - def.inventory_image = def.tiles[1] - end - - if railparams then - carts.railparams[name] = table.copy(railparams) - end - - minetest.register_node(name, def) -end - -function carts:get_rail_groups(additional_groups) - -- Get the default rail groups and add more when a table is given - local groups = {dig_immediate = 2, attached_node = 1, rail = 1, connect_to_raillike = 1} - if type(additional_groups) == "table" then - for k, v in pairs(additional_groups) do - groups[k] = v - end - end - return groups -end diff --git a/mods/ENTITIES/carts/init.lua b/mods/ENTITIES/carts/init.lua deleted file mode 100644 index b2ba5f3..0000000 --- a/mods/ENTITIES/carts/init.lua +++ /dev/null @@ -1,14 +0,0 @@ - -carts = {} -carts.modpath = minetest.get_modpath("carts") -carts.railparams = {} - --- Maximal speed of the cart in m/s (min = -1) -carts.speed_max = 7 --- Set to -1 to disable punching the cart from inside (min = -1) -carts.punch_speed_max = 5 - - -dofile(carts.modpath.."/functions.lua") -dofile(carts.modpath.."/rails.lua") -dofile(carts.modpath.."/cart_entity.lua") diff --git a/mods/ENTITIES/carts/rails.lua b/mods/ENTITIES/carts/rails.lua deleted file mode 100644 index f94968c..0000000 --- a/mods/ENTITIES/carts/rails.lua +++ /dev/null @@ -1,57 +0,0 @@ -carts:register_rail("carts:rail", { - description = "Rail", - tiles = { - "carts_rail_straight.png", "carts_rail_curved.png", - "carts_rail_t_junction.png", "carts_rail_crossing.png" - }, - inventory_image = "carts_rail_straight.png", - wield_image = "carts_rail_straight.png", - groups = carts:get_rail_groups(), -}, {}) - -minetest.register_craft({ - output = "carts:rail 18", - recipe = { - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, - {"default:steel_ingot", "", "default:steel_ingot"}, - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, - } -}) - - -carts:register_rail("carts:powerrail", { - description = "Powered rail", - tiles = { - "carts_rail_straight_pwr.png", "carts_rail_curved_pwr.png", - "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png" - }, - groups = carts:get_rail_groups(), -}, {acceleration = 5}) - -minetest.register_craft({ - output = "carts:powerrail 18", - recipe = { - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, - {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"}, - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, - } -}) - - -carts:register_rail("carts:brakerail", { - description = "Brake rail", - tiles = { - "carts_rail_straight_brk.png", "carts_rail_curved_brk.png", - "carts_rail_t_junction_brk.png", "carts_rail_crossing_brk.png" - }, - groups = carts:get_rail_groups(), -}, {acceleration = -3}) - -minetest.register_craft({ - output = "carts:brakerail 18", - recipe = { - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, - {"default:steel_ingot", "default:coal_lump", "default:steel_ingot"}, - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, - } -}) diff --git a/mods/ENTITIES/item_entity/init.lua b/mods/ENTITIES/item_entity/init.lua deleted file mode 100644 index 184e6fd..0000000 --- a/mods/ENTITIES/item_entity/init.lua +++ /dev/null @@ -1,76 +0,0 @@ ---[[ - Item Entity ---]] - -local builtin_item = minetest.registered_entities["__builtin:item"] - -local item = { - set_item = function(self, itemstring) - builtin_item.set_item(self, itemstring) - - local stack = ItemStack(itemstring) - local itemdef = minetest.registered_items[stack:get_name()] - if itemdef and itemdef.groups.flammable ~= 0 then - self.flammable = itemdef.groups.flammable - end - end, - - burn_up = function(self) - -- disappear in a smoke puff - self.object:remove() - local p = self.object:getpos() - minetest.sound_play("item_entity_item_smoke", { - pos = p, - max_hear_distance = 8, - }) - minetest.add_particlespawner({ - amount = 3, - time = 0.1, - minpos = {x = p.x - 0.1, y = p.y + 0.1, z = p.z - 0.1 }, - maxpos = {x = p.x + 0.1, y = p.y + 0.2, z = p.z + 0.1 }, - minvel = {x = 0, y = 2.5, z = 0}, - maxvel = {x = 0, y = 2.5, z = 0}, - minacc = {x = -0.15, y = -0.02, z = -0.15}, - maxacc = {x = 0.15, y = -0.01, z = 0.15}, - minexptime = 4, - maxexptime = 6, - minsize = 5, - maxsize = 5, - collisiondetection = true, - texture = "item_entity_item_smoke.png" - }) - end, - - on_step = function(self, dtime) - builtin_item.on_step(self, dtime) - - if self.flammable then - -- flammable, check for igniters - self.ignite_timer = (self.ignite_timer or 0) + dtime - if self.ignite_timer > 10 then - self.ignite_timer = 0 - - local node = minetest.get_node_or_nil(self.object:getpos()) - if not node then - return - end - - -- Immediately burn up flammable items in lava - if minetest.get_item_group(node.name, "lava") > 0 then - self:burn_up() - else - -- otherwise there'll be a chance based on its igniter value - local burn_chance = self.flammable - * minetest.get_item_group(node.name, "igniter") - if burn_chance > 0 and math.random(0, burn_chance) ~= 0 then - self:burn_up() - end - end - end - end - end, -} - --- set defined item as new __builtin:item, with the old one as fallback table -setmetatable(item, builtin_item) -minetest.register_entity(":__builtin:item", item) diff --git a/mods/ENTITIES/item_entity/mod.conf b/mods/ENTITIES/item_entity/mod.conf deleted file mode 100644 index d946983..0000000 --- a/mods/ENTITIES/item_entity/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = item_entity diff --git a/mods/ENTITIES/mobs/api.lua b/mods/ENTITIES/mobs/api.lua deleted file mode 100644 index 12c5b9d..0000000 --- a/mods/ENTITIES/mobs/api.lua +++ /dev/null @@ -1,3515 +0,0 @@ - --- Mobs Api (12th August 2017) - -mobs = {} -mobs.mod = "redo" -mobs.version = "20170812" - - --- Intllib -local MP = minetest.get_modpath(minetest.get_current_modname()) -local S, NS = dofile(MP .. "/intllib.lua") -mobs.intllib = S - - --- CMI support check -local use_cmi = minetest.global_exists("cmi") - --- Invisibility mod check -mobs.invis = {} -if rawget(_G, "invisibility") then - mobs.invis = invisibility -end - - --- localize math functions -local pi = math.pi -local square = math.sqrt -local sin = math.sin -local cos = math.cos -local abs = math.abs -local min = math.min -local max = math.max -local atann = math.atan -local random = math.random -local floor = math.floor -local atan = function(x) - if not x or x ~= x then - --error("atan bassed NaN") - return 0 - else - return atann(x) - end -end - - --- Load settings -local damage_enabled = minetest.setting_getbool("enable_damage") -local peaceful_only = minetest.setting_getbool("only_peaceful_mobs") -local disable_blood = minetest.setting_getbool("mobs_disable_blood") -local creative = minetest.setting_getbool("creative_mode") -local spawn_protected = minetest.setting_getbool("mobs_spawn_protected") ~= false -local remove_far = minetest.setting_getbool("remove_far_mobs") -local difficulty = tonumber(minetest.setting_get("mob_difficulty")) or 1.0 -local show_health = minetest.setting_getbool("mob_show_health") ~= false -local max_per_block = tonumber(minetest.setting_get("max_objects_per_block") or 99) - --- Peaceful mode message so players will know there are no monsters -if peaceful_only then - minetest.register_on_joinplayer(function(player) - minetest.chat_send_player(player:get_player_name(), - S("** Peaceful Mode Active - No Monsters Will Spawn")) - end) -end - --- calculate aoc range for mob count -local aosrb = tonumber(minetest.setting_get("active_object_send_range_blocks")) -local abr = tonumber(minetest.setting_get("active_block_range")) -local aoc_range = max(aosrb, abr) * 16 - --- pathfinding settings -local enable_pathfinding = true -local stuck_timeout = 3 -- how long before mob gets stuck in place and starts searching -local stuck_path_timeout = 10 -- how long will mob follow path before giving up - --- default nodes -local node_fire = "fire:basic_flame" -local node_permanent_flame = "fire:permanent_flame" -local node_ice = "default:ice" -local node_snowblock = "default:snowblock" -local node_snow = "default:snow" -mobs.fallback_node = minetest.registered_aliases["mapgen_dirt"] or "default:dirt" - --- play sound -local mob_sound = function(self, sound) - - if sound then - minetest.sound_play(sound, { - object = self.object, - gain = 1.0, - max_hear_distance = self.sounds.distance - }) - end -end - - --- attack player/mob -local do_attack = function(self, player) - - if self.state == "attack" then - return - end - - self.attack = player - self.state = "attack" - - if random(0, 100) < 90 then - mob_sound(self, self.sounds.war_cry) - end -end - - --- move mob in facing direction -local set_velocity = function(self, v) - - local yaw = (self.object:getyaw() or 0) + self.rotate - - self.object:setvelocity({ - x = sin(yaw) * -v, - y = self.object:getvelocity().y, - z = cos(yaw) * v - }) -end - - --- get overall speed of mob -local get_velocity = function(self) - - local v = self.object:getvelocity() - - return (v.x * v.x + v.z * v.z) ^ 0.5 -end - - --- set yaw -local set_yaw = function(self, yaw) - - if not yaw or yaw ~= yaw then - yaw = 0 - end - - self:setyaw(yaw) - - return yaw -end - - --- set defined animation -local set_animation = function(self, anim) - - if not self.animation - or not anim then return end - - self.animation.current = self.animation.current or "" - - if anim == self.animation.current - or not self.animation[anim .. "_start"] - or not self.animation[anim .. "_end"] then - return - end - - self.animation.current = anim - - self.object:set_animation({ - x = self.animation[anim .. "_start"], - y = self.animation[anim .. "_end"]}, - self.animation[anim .. "_speed"] or self.animation.speed_normal or 15, - 0, self.animation[anim .. "_loop"] ~= false) -end - - --- above function exported for mount.lua -function mobs:set_animation(self, anim) - set_animation(self, anim) -end - - --- this is a faster way to calculate distance -local get_distance = function(a, b) - - local x, y, z = a.x - b.x, a.y - b.y, a.z - b.z - - return square(x * x + y * y + z * z) -end - - --- check line of sight (BrunoMine) -local line_of_sight = function(self, pos1, pos2, stepsize) - - stepsize = stepsize or 1 - - local s, pos = minetest.line_of_sight(pos1, pos2, stepsize) - - -- normal walking and flying mobs can see you through air - if s == true then - return true - end - - -- New pos1 to be analyzed - local npos1 = {x = pos1.x, y = pos1.y, z = pos1.z} - - local r, pos = minetest.line_of_sight(npos1, pos2, stepsize) - - -- Checks the return - if r == true then return true end - - -- Nodename found - local nn = minetest.get_node(pos).name - - -- Target Distance (td) to travel - local td = get_distance(pos1, pos2) - - -- Actual Distance (ad) traveled - local ad = 0 - - -- It continues to advance in the line of sight in search of a real - -- obstruction which counts as 'normal' nodebox. - while minetest.registered_nodes[nn] - and (minetest.registered_nodes[nn].walkable == false - or minetest.registered_nodes[nn].drawtype == "nodebox") do - - -- Check if you can still move forward - if td < ad + stepsize then - return true -- Reached the target - end - - -- Moves the analyzed pos - local d = get_distance(pos1, pos2) - - npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x - npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y - npos1.z = ((pos2.z - pos1.z) / d * stepsize) + pos1.z - - -- NaN checks - if d == 0 - or npos1.x ~= npos1.x - or npos1.y ~= npos1.y - or npos1.z ~= npos1.z then - return false - end - - ad = ad + stepsize - - -- scan again - r, pos = minetest.line_of_sight(npos1, pos2, stepsize) - - if r == true then return true end - - -- New Nodename found - nn = minetest.get_node(pos).name - - end - - return false -end - - --- are we flying in what we are suppose to? (taikedz) -local flight_check = function(self, pos_w) - - local nod = self.standing_in - local def = minetest.registered_nodes[nod] - - if not def then return false end -- nil check - - if type(self.fly_in) == "string" - and (nod == self.fly_in or def.liquid_alternative_flowing ~= "") then - - return true - - elseif type(self.fly_in) == "table" then - - for _,fly_in in pairs(self.fly_in) do - - if nod == fly_in or def.liquid_alternative_flowing ~= "" then - - return true - end - end - end - - return false -end - - --- particle effects -local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow) - - radius = radius or 2 - min_size = min_size or 0.5 - max_size = max_size or 1 - gravity = gravity or -10 - glow = glow or 0 - - minetest.add_particlespawner({ - amount = amount, - time = 0.25, - minpos = pos, - maxpos = pos, - minvel = {x = -radius, y = -radius, z = -radius}, - maxvel = {x = radius, y = radius, z = radius}, - minacc = {x = 0, y = gravity, z = 0}, - maxacc = {x = 0, y = gravity, z = 0}, - minexptime = 0.1, - maxexptime = 1, - minsize = min_size, - maxsize = max_size, - texture = texture, - glow = glow, - }) -end - - --- update nametag colour -local update_tag = function(self) - - local col = "#00FF00" - local qua = self.hp_max / 4 - - if self.health <= floor(qua * 3) then - col = "#FFFF00" - end - - if self.health <= floor(qua * 2) then - col = "#FF6600" - end - - if self.health <= floor(qua) then - col = "#FF0000" - end - - self.object:set_properties({ - nametag = self.nametag, - nametag_color = col - }) - -end - - --- drop items -local item_drop = function(self, cooked) - - -- no drops for child mobs - if self.child then return end - - local obj, item, num - local pos = self.object:getpos() - - self.drops = self.drops or {} -- nil check - - for n = 1, #self.drops do - - if random(1, self.drops[n].chance) == 1 then - - num = random(self.drops[n].min, self.drops[n].max) - item = self.drops[n].name - - -- cook items when true - if cooked then - - local output = minetest.get_craft_result({ - method = "cooking", width = 1, items = {item}}) - - if output and output.item and not output.item:is_empty() then - item = output.item:get_name() - end - end - - -- add item if it exists - obj = minetest.add_item(pos, ItemStack(item .. " " .. num)) - - if obj and obj:get_luaentity() then - - obj:setvelocity({ - x = random(-10, 10) / 9, - y = 6, - z = random(-10, 10) / 9, - }) - elseif obj then - obj:remove() -- item does not exist - end - end - end - - self.drops = {} -end - - --- check if mob is dead or only hurt -local check_for_death = function(self, cause, cmi_cause) - - -- has health actually changed? - if self.health == self.old_health and self.health > 0 then - return - end - - self.old_health = self.health - - -- still got some health? play hurt sound - if self.health > 0 then - - mob_sound(self, self.sounds.damage) - - -- make sure health isn't higher than max - if self.health > self.hp_max then - self.health = self.hp_max - end - - -- backup nametag so we can show health stats - if not self.nametag2 then - self.nametag2 = self.nametag or "" - end - - if show_health then - - self.htimer = 2 - self.nametag = "♥ " .. self.health .. " / " .. self.hp_max - - update_tag(self) - end - - return false - end - - if cause == "lava" then - item_drop(self, true) - else - item_drop(self, nil) - end - - mob_sound(self, self.sounds.death) - - local pos = self.object:getpos() - - -- execute custom death function - if self.on_die then - - self.on_die(self, pos) - - if use_cmi then - cmi.notify_die(self.object, cmi_cause) - end - - self.object:remove() - - return true - end - - -- default death function and die animation (if defined) - if self.animation - and self.animation.die_start - and self.animation.die_end then - - local frames = self.animation.die_end - self.animation.die_start - local speed = self.animation.die_speed or 15 - local length = max(frames / speed, 0) - - self.attack = nil - self.v_start = false - self.timer = 0 - self.blinktimer = 0 - self.passive = true - self.state = "die" - set_velocity(self, 0) - set_animation(self, "die") - - minetest.after(length, function(self) - - if use_cmi then - cmi.notify_die(self.object, cmi_cause) - end - - self.object:remove() - end, self) - else - - if use_cmi then - cmi.notify_die(self.object, cmi_cause) - end - - self.object:remove() - end - - effect(pos, 20, "tnt_smoke.png") - - return true -end - - --- check if within physical map limits (-30911 to 30927) -local within_limits = function(pos, radius) - - if (pos.x - radius) > -30913 - and (pos.x + radius) < 30928 - and (pos.y - radius) > -30913 - and (pos.y + radius) < 30928 - and (pos.z - radius) > -30913 - and (pos.z + radius) < 30928 then - return true -- within limits - end - - return false -- beyond limits -end - - --- is mob facing a cliff -local is_at_cliff = function(self) - - if self.fear_height == 0 then -- 0 for no falling protection! - return false - end - - local yaw = self.object:getyaw() - local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) - local pos = self.object:getpos() - local ypos = pos.y + self.collisionbox[2] -- just above floor - - if minetest.line_of_sight( - {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, - {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z} - , 1) then - - return true - end - - return false -end - - --- get node but use fallback for nil or unknown -local node_ok = function(pos, fallback) - - fallback = fallback or mobs.fallback_node - - local node = minetest.get_node_or_nil(pos) - - if node and minetest.registered_nodes[node.name] then - return node - end - - return minetest.registered_nodes[fallback] -- {name = fallback} -end - - --- environmental damage (water, lava, fire, light etc.) -local do_env_damage = function(self) - - -- feed/tame text timer (so mob 'full' messages dont spam chat) - if self.htimer > 0 then - self.htimer = self.htimer - 1 - end - - -- reset nametag after showing health stats - if self.htimer < 1 and self.nametag2 then - - self.nametag = self.nametag2 - self.nametag2 = nil - - update_tag(self) - end - - local pos = self.object:getpos() - - self.time_of_day = minetest.get_timeofday() - - -- remove mob if beyond map limits - if not within_limits(pos, 0) then - self.object:remove() - return - end - - -- daylight above ground - if self.light_damage ~= 0 - and pos.y > 0 - and self.time_of_day > 0.2 - and self.time_of_day < 0.8 - and (minetest.get_node_light(pos) or 0) > 12 then - - self.health = self.health - self.light_damage - - effect(pos, 5, "tnt_smoke.png") - - if check_for_death(self, "light", {type = "light"}) then return end - end - - local y_level = self.collisionbox[2] - - if self.child then - y_level = self.collisionbox[2] * 0.5 - end - - -- what is mob standing in? - pos.y = pos.y + y_level + 0.25 -- foot level - self.standing_in = node_ok(pos, "air").name --- print ("standing in " .. self.standing_in) - - -- don't fall when on ignore, just stand still - if self.standing_in == "ignore" then - self.object:setvelocity({x = 0, y = 0, z = 0}) - end - - local nodef = minetest.registered_nodes[self.standing_in] - - pos.y = pos.y + 1 -- for particle effect position - - -- water - if self.water_damage - and nodef.groups.water then - - if self.water_damage ~= 0 then - - self.health = self.health - self.water_damage - - effect(pos, 5, "bubble.png", nil, nil, 1, nil) - - if check_for_death(self, "water", {type = "environment", - pos = pos, node = self.standing_in}) then return end - end - - -- lava or fire - elseif self.lava_damage - and (nodef.groups.lava - or self.standing_in == node_fire - or self.standing_in == node_permanent_flame) then - - if self.lava_damage ~= 0 then - - self.health = self.health - self.lava_damage - - effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) - - if check_for_death(self, "lava", {type = "environment", - pos = pos, node = self.standing_in}) then return end - end - - -- damage_per_second node check - elseif nodef.damage_per_second ~= 0 then - - self.health = self.health - nodef.damage_per_second - - effect(pos, 5, "tnt_smoke.png") - - if check_for_death(self, "dps", {type = "environment", - pos = pos, node = self.standing_in}) then return end - end - - --- suffocation inside solid node - if self.suffocation ~= 0 - and nodef.walkable == true - and nodef.groups.disable_suffocation ~= 1 - and nodef.drawtype == "normal" then - - self.health = self.health - self.suffocation - - if check_for_death(self, "suffocation", {type = "environment", - pos = pos, node = self.standing_in}) then return end - end - - check_for_death(self, "", {type = "unknown"}) -end - - --- jump if facing a solid node (not fences or gates) -local do_jump = function(self) - - if not self.jump - or self.jump_height == 0 - or self.fly - or self.child then - return false - end - -self.facing_fence = false - - -- something stopping us while moving? - if self.state ~= "stand" - and get_velocity(self) > 0.5 - and self.object:getvelocity().y ~= 0 then - return false - end - - local pos = self.object:getpos() - local yaw = self.object:getyaw() - - -- what is mob standing on? - pos.y = pos.y + self.collisionbox[2] - 0.2 - - local nod = node_ok(pos) - ---print ("standing on:", nod.name, pos.y) - - if minetest.registered_nodes[nod.name].walkable == false then - return false - end - - -- where is front - local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) - - -- what is in front of mob? - local nod = node_ok({ - x = pos.x + dir_x, - y = pos.y + 0.5, - z = pos.z + dir_z - }) - - -- thin blocks that do not need to be jumped - if nod.name == node_snow then - return false - end - ---print ("in front:", nod.name, pos.y + 0.5) - - if self.walk_chance == 0 - or minetest.registered_items[nod.name].walkable then - - if not nod.name:find("fence") - and not nod.name:find("gate") then - - local v = self.object:getvelocity() - - v.y = self.jump_height - - set_animation(self, "jump") -- only when defined - - self.object:setvelocity(v) - - mob_sound(self, self.sounds.jump) - else - self.facing_fence = true - end - - return true - end - - return false -end - - --- blast damage to entities nearby (modified from TNT mod) -local entity_physics = function(pos, radius) - - radius = radius * 2 - - local objs = minetest.get_objects_inside_radius(pos, radius) - local obj_pos, dist - - for n = 1, #objs do - - obj_pos = objs[n]:getpos() - - dist = get_distance(pos, obj_pos) - if dist < 1 then dist = 1 end - - local damage = floor((4 / dist) * radius) - local ent = objs[n]:get_luaentity() - - -- punches work on entities AND players - objs[n]:punch(objs[n], 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, pos) - end -end - - --- should mob follow what I'm holding ? -local follow_holding = function(self, clicker) - - if mobs.invis[clicker:get_player_name()] then - return false - end - - local item = clicker:get_wielded_item() - local t = type(self.follow) - - -- single item - if t == "string" - and item:get_name() == self.follow then - return true - - -- multiple items - elseif t == "table" then - - for no = 1, #self.follow do - - if self.follow[no] == item:get_name() then - return true - end - end - end - - return false -end - - --- find two animals of same type and breed if nearby and horny -local breed = function(self) - - -- child takes 240 seconds before growing into adult - if self.child == true then - - self.hornytimer = self.hornytimer + 1 - - if self.hornytimer > 240 then - - self.child = false - self.hornytimer = 0 - - self.object:set_properties({ - textures = self.base_texture, - mesh = self.base_mesh, - visual_size = self.base_size, - collisionbox = self.base_colbox, - }) - - -- jump when fully grown so not to fall into ground - self.object:setvelocity({ - x = 0, - y = self.jump_height, - z = 0 - }) - end - - return - end - - -- horny animal can mate for 40 seconds, - -- afterwards horny animal cannot mate again for 200 seconds - if self.horny == true - and self.hornytimer < 240 then - - self.hornytimer = self.hornytimer + 1 - - if self.hornytimer >= 240 then - self.hornytimer = 0 - self.horny = false - end - end - - -- find another same animal who is also horny and mate if close enough - if self.horny == true - and self.hornytimer <= 40 then - - local pos = self.object:getpos() - - effect({x = pos.x, y = pos.y + 1, z = pos.z}, 8, "heart.png", 3, 4, 1, 0.1) - - local objs = minetest.get_objects_inside_radius(pos, 3) - local num = 0 - local ent = nil - - for n = 1, #objs do - - ent = objs[n]:get_luaentity() - - -- check for same animal with different colour - local canmate = false - - if ent then - - if ent.name == self.name then - canmate = true - else - local entname = string.split(ent.name,":") - local selfname = string.split(self.name,":") - - if entname[1] == selfname[1] then - entname = string.split(entname[2],"_") - selfname = string.split(selfname[2],"_") - - if entname[1] == selfname[1] then - canmate = true - end - end - end - end - - if ent - and canmate == true - and ent.horny == true - and ent.hornytimer <= 40 then - num = num + 1 - end - - -- found your mate? then have a baby - if num > 1 then - - self.hornytimer = 41 - ent.hornytimer = 41 - - -- spawn baby - minetest.after(5, function() - - local mob = minetest.add_entity(pos, self.name) - local ent2 = mob:get_luaentity() - local textures = self.base_texture - - if self.child_texture then - textures = self.child_texture[1] - end - - mob:set_properties({ - textures = textures, - visual_size = { - x = self.base_size.x * .5, - y = self.base_size.y * .5, - }, - collisionbox = { - self.base_colbox[1] * .5, - self.base_colbox[2] * .5, - self.base_colbox[3] * .5, - self.base_colbox[4] * .5, - self.base_colbox[5] * .5, - self.base_colbox[6] * .5, - }, - }) - ent2.child = true - ent2.tamed = true - ent2.owner = self.owner - end) - - num = 0 - - break - end - end - end -end - - --- find and replace what mob is looking for (grass, wheat etc.) -local replace = function(self, pos) - - if not self.replace_rate - or not self.replace_what - or self.child == true - or self.object:getvelocity().y ~= 0 - or random(1, self.replace_rate) > 1 then - return - end - - local what, with, y_offset - - if type(self.replace_what[1]) == "table" then - - local num = random(#self.replace_what) - - what = self.replace_what[num][1] or "" - with = self.replace_what[num][2] or "" - y_offset = self.replace_what[num][3] or 0 - else - what = self.replace_what - with = self.replace_with or "" - y_offset = self.replace_offset or 0 - end - - pos.y = pos.y + y_offset - - if #minetest.find_nodes_in_area(pos, pos, what) > 0 then - --- print ("replace node = ".. minetest.get_node(pos).name, pos.y) - - local oldnode = {name = what} - local newnode = {name = with} - local on_replace_return - - if self.on_replace then - on_replace_return = self.on_replace(self, pos, oldnode, newnode) - end - - if on_replace_return ~= false then - - minetest.set_node(pos, {name = with}) - - -- when cow/sheep eats grass, replace wool and milk - if self.gotten == true then - self.gotten = false - self.object:set_properties(self) - end - end - end -end - - --- check if daytime and also if mob is docile during daylight hours -local day_docile = function(self) - - if self.docile_by_day == false then - - return false - - elseif self.docile_by_day == true - and self.time_of_day > 0.2 - and self.time_of_day < 0.8 then - - return true - end -end - - --- path finding and smart mob routine by rnd -local smart_mobs = function(self, s, p, dist, dtime) - - local s1 = self.path.lastpos - - -- is it becoming stuck? - if abs(s1.x - s.x) + abs(s1.z - s.z) < 1.5 then - self.path.stuck_timer = self.path.stuck_timer + dtime - else - self.path.stuck_timer = 0 - end - - self.path.lastpos = {x = s.x, y = s.y, z = s.z} - - -- im stuck, search for path - if (self.path.stuck_timer > stuck_timeout and not self.path.following) - or (self.path.stuck_timer > stuck_path_timeout and self.path.following) then - - self.path.stuck_timer = 0 - - -- lets try find a path, first take care of positions - -- since pathfinder is very sensitive - local sheight = self.collisionbox[5] - self.collisionbox[2] - - -- round position to center of node to avoid stuck in walls - -- also adjust height for player models! - s.x = floor(s.x + 0.5) --- s.y = floor(s.y + 0.5) - sheight - s.z = floor(s.z + 0.5) - - local ssight, sground = minetest.line_of_sight(s, { - x = s.x, y = s.y - 4, z = s.z}, 1) - - -- determine node above ground - if not ssight then - s.y = sground.y + 1 - end - - local p1 = self.attack:getpos() - - p1.x = floor(p1.x + 0.5) - p1.y = floor(p1.y + 0.5) - p1.z = floor(p1.z + 0.5) - - local dropheight = 10 - if self.fear_height ~= 0 then dropheight = self.fear_height end - --- self.path.way = minetest.find_path(s, p1, 16, 2, 6, "Dijkstra") -- "A*_noprefetch" - self.path.way = minetest.find_path(s, p1, 16, self.stepheight, dropheight, "Dijkstra") - - -- attempt to unstick mob that is "daydreaming" - self.object:setpos({ - x = s.x + 0.1 * (random() * 2 - 1), - y = s.y + 1, - z = s.z + 0.1 * (random() * 2 - 1) - }) - - self.state = "" - do_attack(self, self.attack) - - -- no path found, try something else - if not self.path.way then - - self.path.following = false - - -- lets make way by digging/building if not accessible - if self.pathfinding == 2 then - - -- is player higher than mob? - if s.y < p1.y then - - -- build upwards - if not minetest.is_protected(s, "") then - - 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}) - end - end - - local sheight = math.ceil(self.collisionbox[5]) + 1 - - -- assume mob is 2 blocks high so it digs above its head - s.y = s.y + sheight - - -- 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 - - s.y = s.y - sheight - self.object:setpos({x = s.x, y = s.y + 2, z = s.z}) - - else -- dig 2 blocks to make door toward player direction - - local yaw1 = self.object:getyaw() + pi / 2 - local p1 = { - x = s.x + cos(yaw1), - y = s.y, - z = s.z + sin(yaw1) - } - - if not minetest.is_protected(p1, "") then - - local node1 = node_ok(p1, "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.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 - end - end - - -- will try again in 2 second - self.path.stuck_timer = stuck_timeout - 2 - - -- frustration! cant find the damn path :( - mob_sound(self, self.sounds.random) - else - -- yay i found path - mob_sound(self, self.sounds.attack) - - set_velocity(self, self.walk_velocity) - - -- follow path now that it has it - self.path.following = true - end - end -end - - --- specific attacks -local specific_attack = function(list, what) - - -- no list so attack default (player, animals etc.) - if list == nil then - return true - end - - -- found entity on list to attack? - for no = 1, #list do - - if list[no] == what then - return true - end - end - - return false -end - - --- monster find someone to attack -local monster_attack = function(self) - - if self.type ~= "monster" - or not damage_enabled - or creative - or self.state == "attack" - or day_docile(self) then - return - end - - local s = self.object:getpos() - local p, sp, dist - local player, obj, min_player - local type, name = "", "" - local min_dist = self.view_range + 1 - local objs = minetest.get_objects_inside_radius(s, self.view_range) - - for n = 1, #objs do - - if objs[n]:is_player() then - - if mobs.invis[ objs[n]:get_player_name() ] then - - type = "" - else - player = objs[n] - type = "player" - name = "player" - end - else - obj = objs[n]:get_luaentity() - - if obj then - player = obj.object - type = obj.type - name = obj.name or "" - end - end - - -- find specific mob to attack, failing that attack player/npc/animal - if specific_attack(self.specific_attack, name) - and (type == "player" or type == "npc" - or (type == "animal" and self.attack_animals == true)) then - - s = self.object:getpos() - p = player:getpos() - sp = s - - -- aim higher to make looking up hills more realistic - p.y = p.y + 1 - sp.y = sp.y + 1 - - dist = get_distance(p, s) - - if dist < self.view_range then - -- field of view check goes here - - -- choose closest player to attack - if line_of_sight(self, sp, p, 2) == true - and dist < min_dist then - min_dist = dist - min_player = player - end - end - end - end - - -- attack player - if min_player then - do_attack(self, min_player) - end -end - - --- npc, find closest monster to attack -local npc_attack = function(self) - - if self.type ~= "npc" - or not self.attacks_monsters - or self.state == "attack" then - return - end - - local p, sp, obj, min_player - local s = self.object:getpos() - local min_dist = self.view_range + 1 - local objs = minetest.get_objects_inside_radius(s, self.view_range) - - for n = 1, #objs do - - obj = objs[n]:get_luaentity() - - if obj and obj.type == "monster" then - - p = obj.object:getpos() - - dist = get_distance(p, s) - - if dist < min_dist then - min_dist = dist - min_player = obj.object - end - end - end - - if min_player then - do_attack(self, min_player) - end -end - - --- follow player if owner or holding item, if fish outta water then flop -local follow_flop = function(self) - - -- find player to follow - if (self.follow ~= "" - or self.order == "follow") - and not self.following - and self.state ~= "attack" - and self.state ~= "runaway" then - - local s = self.object:getpos() - local players = minetest.get_connected_players() - - for n = 1, #players do - - if get_distance(players[n]:getpos(), s) < self.view_range - and not mobs.invis[ players[n]:get_player_name() ] then - - self.following = players[n] - - break - end - end - end - - if self.type == "npc" - and self.order == "follow" - and self.state ~= "attack" - and self.owner ~= "" then - - -- npc stop following player if not owner - if self.following - and self.owner - and self.owner ~= self.following:get_player_name() then - self.following = nil - end - else - -- stop following player if not holding specific item - if self.following - and self.following:is_player() - and follow_holding(self, self.following) == false then - self.following = nil - end - - end - - -- follow that thing - if self.following then - - local s = self.object:getpos() - local p - - if self.following:is_player() then - - p = self.following:getpos() - - elseif self.following.object then - - p = self.following.object:getpos() - end - - if p then - - local dist = get_distance(p, s) - - -- dont follow if out of range - if dist > self.view_range then - self.following = nil - else - local vec = { - x = p.x - s.x, - z = p.z - s.z - } - - local yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then yaw = yaw + pi end - - yaw = set_yaw(self.object, yaw) - - -- anyone but standing npc's can move along - if dist > self.reach - and self.order ~= "stand" then - - set_velocity(self, self.walk_velocity) - - if self.walk_chance ~= 0 then - set_animation(self, "walk") - end - else - set_velocity(self, 0) - set_animation(self, "stand") - end - - return - end - end - end - - -- swimmers flop when out of their element, and swim again when back in - if self.fly then - local s = self.object:getpos() - if not flight_check(self, s) then - - self.state = "flop" - self.object:setvelocity({x = 0, y = -5, z = 0}) - - set_animation(self, "stand") - - return - elseif self.state == "flop" then - self.state = "stand" - end - end -end - - --- dogshoot attack switch and counter function -local dogswitch = function(self, dtime) - - -- switch mode not activated - if not self.dogshoot_switch - or not dtime then - return 0 - end - - self.dogshoot_count = self.dogshoot_count + dtime - - if (self.dogshoot_switch == 1 - and self.dogshoot_count > self.dogshoot_count_max) - or (self.dogshoot_switch == 2 - and self.dogshoot_count > self.dogshoot_count2_max) then - - self.dogshoot_count = 0 - - if self.dogshoot_switch == 1 then - self.dogshoot_switch = 2 - else - self.dogshoot_switch = 1 - end - end - - return self.dogshoot_switch -end - - --- execute current state (stand, walk, run, attacks) -local do_states = function(self, dtime) - - local yaw = self.object:get_yaw() or 0 - - if self.state == "stand" then - - if random(1, 4) == 1 then - - local lp = nil - local s = self.object:getpos() - local objs = minetest.get_objects_inside_radius(s, 3) - - for n = 1, #objs do - - if objs[n]:is_player() then - lp = objs[n]:getpos() - break - end - end - - -- look at any players nearby, otherwise turn randomly - if lp then - - local vec = { - x = lp.x - s.x, - z = lp.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if lp.x > s.x then yaw = yaw + pi end - else --- yaw = (random(0, 360) - 180) / 180 * pi - - yaw = yaw + random(-0.5, 0.5) - end - - yaw = set_yaw(self.object, yaw) - end - - set_velocity(self, 0) - set_animation(self, "stand") - - -- npc's ordered to stand stay standing - if self.type ~= "npc" - or self.order ~= "stand" then - - if self.walk_chance ~= 0 - and self.facing_fence ~= true - and random(1, 100) <= self.walk_chance - and is_at_cliff(self) == false then - - set_velocity(self, self.walk_velocity) - self.state = "walk" - set_animation(self, "walk") - - -- fly up/down randomly for flying mobs - if self.fly and random(1, 100) <= self.walk_chance then - - local v = self.object:getvelocity() - local ud = random(-1, 2) / 9 - - self.object:setvelocity({x = v.x, y = ud, z = v.z}) - end - end - end - - elseif self.state == "walk" then - - local s = self.object:getpos() - local lp = nil - - -- is there something I need to avoid? - if self.water_damage > 0 - and self.lava_damage > 0 then - - lp = minetest.find_node_near(s, 1, {"group:water", "group:lava"}) - - elseif self.water_damage > 0 then - - lp = minetest.find_node_near(s, 1, {"group:water"}) - - elseif self.lava_damage > 0 then - - lp = minetest.find_node_near(s, 1, {"group:lava"}) - end - - if lp then - - -- if mob in water or lava then look for land - if (self.lava_damage - and minetest.registered_nodes[self.standing_in].groups.lava) - or (self.water_damage - and minetest.registered_nodes[self.standing_in].groups.water) then - - lp = minetest.find_node_near(s, 5, {"group:soil", "group:stone", - "group:sand", node_ice, node_snowblock}) - - -- did we find land? - if lp then - - local vec = { - x = lp.x - s.x, - z = lp.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if lp.x > s.x then yaw = yaw + pi end - - -- look towards land and jump/move in that direction - yaw = set_yaw(self.object, yaw) - do_jump(self) - set_velocity(self, self.walk_velocity) - else --- yaw = (random(0, 360) - 180) / 180 * pi - - yaw = yaw + random(-0.5, 0.5) - end - - else - - local vec = { - x = lp.x - s.x, - z = lp.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if lp.x > s.x then yaw = yaw + pi end - end - - yaw = set_yaw(self.object, yaw) - - -- otherwise randomly turn - elseif random(1, 100) <= 30 then - - --yaw = random() * 2 * pi --- yaw = (random(0, 360) - 180) / 180 * pi - - yaw = yaw + random(-0.5, 0.5) - - yaw = set_yaw(self.object, yaw) - end - - -- stand for great fall in front - local temp_is_cliff = is_at_cliff(self) - - if self.facing_fence == true - or temp_is_cliff - or random(1, 100) <= 30 then - - set_velocity(self, 0) - self.state = "stand" - set_animation(self, "stand") - else - set_velocity(self, self.walk_velocity) - - if flight_check(self) - and self.animation - and self.animation.fly_start - and self.animation.fly_end then - set_animation(self, "fly") - else - set_animation(self, "walk") - end - end - - -- runaway when punched - elseif self.state == "runaway" then - - self.runaway_timer = self.runaway_timer + 1 - - -- stop after 5 seconds or when at cliff - if self.runaway_timer > 5 - or is_at_cliff(self) then - self.runaway_timer = 0 - set_velocity(self, 0) - self.state = "stand" - set_animation(self, "stand") - else - set_velocity(self, self.run_velocity) - set_animation(self, "walk") - end - - -- attack routines (explode, dogfight, shoot, dogshoot) - elseif self.state == "attack" then - - -- calculate distance from mob and enemy - local s = self.object:getpos() - local p = self.attack:getpos() or s - local dist = get_distance(p, s) - - -- stop attacking if player or out of range - if dist > self.view_range - or not self.attack - or not self.attack:getpos() - or self.attack:get_hp() <= 0 - or (self.attack:is_player() and mobs.invis[ self.attack:get_player_name() ]) then - - --print(" ** stop attacking **", dist, self.view_range) - self.state = "stand" - set_velocity(self, 0) - set_animation(self, "stand") - self.attack = nil - self.v_start = false - self.timer = 0 - self.blinktimer = 0 - - return - end - - if self.attack_type == "explode" then - - local vec = { - x = p.x - s.x, - z = p.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then yaw = yaw + pi end - - yaw = set_yaw(self.object, yaw) - - if dist > self.reach then - - if not self.v_start then - - self.v_start = true - set_velocity(self, self.run_velocity) - self.timer = 0 - self.blinktimer = 0 - else - self.timer = 0 - self.blinktimer = 0 - - set_velocity(self, self.run_velocity) - end - - if self.animation and self.animation.run_start then - set_animation(self, "run") - else - set_animation(self, "walk") - end - else - set_velocity(self, 0) - set_animation(self, "punch") - - self.timer = self.timer + dtime - self.blinktimer = (self.blinktimer or 0) + dtime - - if self.blinktimer > 0.2 then - - self.blinktimer = 0 - - if self.blinkstatus then - self.object:settexturemod("") - else - self.object:settexturemod("^[brighten") - end - - self.blinkstatus = not self.blinkstatus - end - - if self.timer > 3 then - - local pos = self.object:getpos() - local radius = self.explosion_radius or 1 - local damage_radius = radius - - -- dont damage anything if area protected or next to water - if minetest.find_node_near(pos, 1, {"group:water"}) - or minetest.is_protected(pos, "") then - - damage_radius = 0 - end - - self.object:remove() - - if minetest.get_modpath("tnt") and tnt and tnt.boom - and not minetest.is_protected(pos, "") then - - tnt.boom(pos, { - radius = radius, - damage_radius = damage_radius, - sound = self.sounds.explode, - }) - else - - minetest.sound_play(self.sounds.explode, { - pos = pos, - gain = 1.0, - max_hear_distance = self.sounds.distance or 32 - }) - - entity_physics(pos, damage_radius) - effect(pos, 32, "tnt_smoke.png", radius * 3, radius * 5, radius, 1, 0) - end - - return - end - end - - elseif self.attack_type == "dogfight" - or (self.attack_type == "dogshoot" and dogswitch(self, dtime) == 2) - or (self.attack_type == "dogshoot" and dist <= self.reach and dogswitch(self) == 0) then - - if self.fly - and dist > self.reach then - - local p1 = s - local me_y = floor(p1.y) - local p2 = p - local p_y = floor(p2.y + 1) - local v = self.object:getvelocity() - - if flight_check(self, s) then - - if me_y < p_y then - - self.object:setvelocity({ - x = v.x, - y = 1 * self.walk_velocity, - z = v.z - }) - - elseif me_y > p_y then - - self.object:setvelocity({ - x = v.x, - y = -1 * self.walk_velocity, - z = v.z - }) - end - else - if me_y < p_y then - - self.object:setvelocity({ - x = v.x, - y = 0.01, - z = v.z - }) - - elseif me_y > p_y then - - self.object:setvelocity({ - x = v.x, - y = -0.01, - z = v.z - }) - end - end - - end - - -- rnd: new movement direction - if self.path.following - and self.path.way - and self.attack_type ~= "dogshoot" then - - -- no paths longer than 50 - if #self.path.way > 50 - or dist < self.reach then - self.path.following = false - return - end - - local p1 = self.path.way[1] - - if not p1 then - self.path.following = false - return - end - - if abs(p1.x-s.x) + abs(p1.z - s.z) < 0.6 then - -- reached waypoint, remove it from queue - table.remove(self.path.way, 1) - end - - -- set new temporary target - p = {x = p1.x, y = p1.y, z = p1.z} - end - - local vec = { - x = p.x - s.x, - z = p.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then yaw = yaw + pi end - - yaw = set_yaw(self.object, yaw) - - -- move towards enemy if beyond mob reach - if dist > self.reach then - - -- path finding by rnd - if self.pathfinding -- only if mob has pathfinding enabled - and enable_pathfinding then - - smart_mobs(self, s, p, dist, dtime) - end - - if is_at_cliff(self) then - - set_velocity(self, 0) - set_animation(self, "stand") - else - - if self.path.stuck then - set_velocity(self, self.walk_velocity) - else - set_velocity(self, self.run_velocity) - end - - if self.animation and self.animation.run_start then - set_animation(self, "run") - else - set_animation(self, "walk") - end - end - - else -- rnd: if inside reach range - - self.path.stuck = false - self.path.stuck_timer = 0 - self.path.following = false -- not stuck anymore - - set_velocity(self, 0) - - if not self.custom_attack then - - if self.timer > 1 then - - self.timer = 0 - - if self.double_melee_attack - and random(1, 2) == 1 then - set_animation(self, "punch2") - else - set_animation(self, "punch") - end - - local p2 = p - local s2 = s - - p2.y = p2.y + .5 - s2.y = s2.y + .5 - - if line_of_sight(self, p2, s2) == true then - - -- play attack sound - mob_sound(self, self.sounds.attack) - - -- punch player (or what player is attached to) - local attached = self.attack:get_attach() - if attached then - self.attack = attached - end - self.attack:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = self.damage} - }, nil) - end - end - else -- call custom attack every second - if self.custom_attack - and self.timer > 1 then - - self.timer = 0 - - self.custom_attack(self, p) - end - end - end - - elseif self.attack_type == "shoot" - or (self.attack_type == "dogshoot" and dogswitch(self, dtime) == 1) - or (self.attack_type == "dogshoot" and dist > self.reach and dogswitch(self) == 0) then - - p.y = p.y - .5 - s.y = s.y + .5 - - local dist = get_distance(p, s) - local vec = { - x = p.x - s.x, - y = p.y - s.y, - z = p.z - s.z - } - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then yaw = yaw + pi end - - yaw = set_yaw(self.object, yaw) - - set_velocity(self, 0) - - if self.shoot_interval - and self.timer > self.shoot_interval - and random(1, 100) <= 60 then - - self.timer = 0 - set_animation(self, "shoot") - - -- play shoot attack sound - mob_sound(self, self.sounds.shoot_attack) - - local p = self.object:getpos() - - p.y = p.y + (self.collisionbox[2] + self.collisionbox[5]) / 2 - - local obj = minetest.add_entity(p, self.arrow) - local ent = obj:get_luaentity() - - if ent then - local amount = (vec.x * vec.x + vec.y * vec.y + vec.z * vec.z) ^ 0.5 - local v = ent.velocity or 1 -- or set to default - ent.switch = 1 - ent.owner_id = tostring(self.object) -- add unique owner id to arrow - - -- offset makes shoot aim accurate - vec.y = vec.y + self.shoot_offset - vec.x = vec.x * (v / amount) - vec.y = vec.y * (v / amount) - vec.z = vec.z * (v / amount) - - obj:setvelocity(vec) - else - obj:remove() -- arrow entity does not exist - end - end - end - end -end - - --- falling and fall damage -local falling = function(self, pos) - - if self.fly then - return - end - - -- floating in water (or falling) - local v = self.object:getvelocity() - - if v.y > 0 then - - -- apply gravity when moving up - self.object:setacceleration({ - x = 0, - y = -10, - z = 0 - }) - - elseif v.y <= 0 and v.y > self.fall_speed then - - -- fall downwards at set speed - self.object:setacceleration({ - x = 0, - y = self.fall_speed, - z = 0 - }) - else - -- stop accelerating once max fall speed hit - self.object:setacceleration({x = 0, y = 0, z = 0}) - end - - -- in water then float up --- if minetest.registered_nodes[node_ok(pos).name].groups.liquid then - if minetest.registered_nodes[node_ok(pos).name].groups.water then - - if self.floats == 1 then - - self.object:setacceleration({ - x = 0, - y = -self.fall_speed / (max(1, v.y) ^ 2), - z = 0 - }) - end - else - - -- fall damage onto solid ground - if self.fall_damage == 1 - and self.object:getvelocity().y == 0 then - - local d = (self.old_y or 0) - self.object:getpos().y - - if d > 5 then - - self.health = self.health - floor(d - 5) - - effect(pos, 5, "tnt_smoke.png", 1, 2, 2, nil) - - if check_for_death(self, "fall", {type = "fall"}) then - return - end - end - - self.old_y = self.object:getpos().y - end - end -end - - --- deal damage and effects when mob punched -local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) - - -- mob health check - if self.health <= 0 then - return - end - - -- error checking when mod profiling is enabled - if not tool_capabilities then - minetest.log("warning", "[mobs] Mod profiling enabled, damage not enabled") - return - end - - -- is mob protected? - if self.protected and hitter:is_player() - and minetest.is_protected(self.object:getpos(), hitter:get_player_name()) then - minetest.chat_send_player(hitter:get_player_name(), S("Mob has been protected!")) - return - end - - - -- weapon wear - local weapon = hitter:get_wielded_item() - local punch_interval = 1.4 - - -- calculate mob damage - local damage = 0 - local armor = self.object:get_armor_groups() or {} - local tmp - - -- quick error check incase it ends up 0 (serialize.h check test) - if tflp == 0 then - tflp = 0.2 - end - - if use_cmi then - damage = cmi.calculate_damage(self.object, hitter, tflp, tool_capabilities, dir) - else - - for group,_ in pairs( (tool_capabilities.damage_groups or {}) ) do - - tmp = tflp / (tool_capabilities.full_punch_interval or 1.4) - - if tmp < 0 then - tmp = 0.0 - elseif tmp > 1 then - tmp = 1.0 - end - - damage = damage + (tool_capabilities.damage_groups[group] or 0) - * tmp * ((armor[group] or 0) / 100.0) - end - end - - -- check for tool immunity or special damage - for n = 1, #self.immune_to do - - if self.immune_to[n][1] == weapon:get_name() then - - damage = self.immune_to[n][2] or 0 - break - end - end - - -- healing - if damage <= -1 then - self.health = self.health - floor(damage) - return - end - --- print ("Mob Damage is", damage) - - if use_cmi then - - local cancel = cmi.notify_punch(self.object, hitter, tflp, tool_capabilities, dir, damage) - - if cancel then return end - end - - -- add weapon wear - if tool_capabilities then - punch_interval = tool_capabilities.full_punch_interval or 1.4 - end - - if weapon:get_definition() - and weapon:get_definition().tool_capabilities then - - weapon:add_wear(floor((punch_interval / 75) * 9000)) - hitter:set_wielded_item(weapon) - end - - -- only play hit sound and show blood effects if damage is 1 or over - if damage >= 1 then - - -- weapon sounds - if weapon:get_definition().sounds ~= nil then - - local s = random(0, #weapon:get_definition().sounds) - - minetest.sound_play(weapon:get_definition().sounds[s], { - object = hitter, - max_hear_distance = 8 - }) - else - minetest.sound_play("default_punch", { - object = hitter, - max_hear_distance = 5 - }) - end - - -- blood_particles - if self.blood_amount > 0 - and not disable_blood then - - local pos = self.object:getpos() - - pos.y = pos.y + (-self.collisionbox[2] + self.collisionbox[5]) * .5 - - effect(pos, self.blood_amount, self.blood_texture, nil, nil, 1, nil) - end - - -- do damage - self.health = self.health - floor(damage) - - -- exit here if dead, special item check - if weapon:get_name() == "mobs:pick_lava" then - if check_for_death(self, "lava", {type = "punch", - puncher = hitter}) then - return - end - else - if check_for_death(self, "hit", {type = "punch", - puncher = hitter}) then - return - end - end - - --[[ add healthy afterglow when hit (can cause hit lag with larger textures) - core.after(0.1, function() - self.object:settexturemod("^[colorize:#c9900070") - - core.after(0.3, function() - self.object:settexturemod("") - end) - end) ]] - - -- knock back effect (only on full punch) - if self.knock_back > 0 - and tflp >= punch_interval then - - local v = self.object:getvelocity() - local r = 1.4 - min(punch_interval, 1.4) - local kb = r * 5 - local up = 2 - - -- if already in air then dont go up anymore when hit - if v.y > 0 - or self.fly then - up = 0 - end - - -- direction error check - dir = dir or {x = 0, y = 0, z = 0} - - self.object:setvelocity({ - x = dir.x * kb, - y = up, - z = dir.z * kb - }) - - self.pause_timer = r - end - end -- END if damage - - -- if skittish then run away - if self.runaway == true then - - local lp = hitter:getpos() - local s = self.object:getpos() - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - - local yaw = (atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate - - if lp.x > s.x then - yaw = yaw + pi - end - - yaw = set_yaw(self.object, yaw) - self.state = "runaway" - self.runaway_timer = 0 - self.following = nil - end - - local name = hitter:get_player_name() or "" - - -- attack puncher and call other mobs for help - if self.passive == false - and self.state ~= "flop" - and self.child == false - and hitter:get_player_name() ~= self.owner - and not mobs.invis[ name ] then - - -- attack whoever punched mob - self.state = "" - do_attack(self, hitter) - - -- alert others to the attack - local objs = minetest.get_objects_inside_radius(hitter:getpos(), self.view_range) - local obj = nil - - for n = 1, #objs do - - obj = objs[n]:get_luaentity() - - if obj then - - -- only alert members of same mob - if obj.group_attack == true - and obj.state ~= "attack" - and obj.owner ~= name - and obj.name == self.name then - do_attack(obj, hitter) - end - - -- have owned mobs attack player threat - if obj.owner == name and obj.owner_loyal then - do_attack(obj, self.object) - end - end - end - end -end - - --- get entity staticdata -local mob_staticdata = function(self) - - -- remove mob when out of range unless tamed - if remove_far - and self.remove_ok - and not self.tamed - and self.lifetimer < 20000 then - - --print ("REMOVED " .. self.name) - - self.object:remove() - - return ""-- nil - end - - self.remove_ok = true - self.attack = nil - self.following = nil - self.state = "stand" - - -- used to rotate older mobs - if self.drawtype - and self.drawtype == "side" then - self.rotate = math.rad(90) - end - - if use_cmi then - self.serialized_cmi_components = cmi.serialize_components(self._cmi_components) - end - - local tmp = {} - - for _,stat in pairs(self) do - - local t = type(stat) - - if t ~= "function" - and t ~= "nil" - and t ~= "userdata" - and _ ~= "_cmi_components" then - tmp[_] = self[_] - end - end - - --print('===== '..self.name..'\n'.. dump(tmp)..'\n=====\n') - return minetest.serialize(tmp) -end - - --- activate mob and reload settings -local mob_activate = function(self, staticdata, def, dtime) - - -- remove monsters in peaceful mode, or when no data - if (self.type == "monster" and peaceful_only) then - - self.object:remove() - - return - end - - -- load entity variables - local tmp = minetest.deserialize(staticdata) - - if tmp then - for _,stat in pairs(tmp) do - self[_] = stat - end - end - - -- select random texture, set model and size - if not self.base_texture then - - -- compatiblity with old simple mobs textures - if type(def.textures[1]) == "string" then - def.textures = {def.textures} - end - - self.base_texture = def.textures[random(1, #def.textures)] - self.base_mesh = def.mesh - self.base_size = self.visual_size - self.base_colbox = self.collisionbox - end - - -- set texture, model and size - local textures = self.base_texture - local mesh = self.base_mesh - local vis_size = self.base_size - local colbox = self.base_colbox - - -- specific texture if gotten - if self.gotten == true - and def.gotten_texture then - textures = def.gotten_texture - end - - -- specific mesh if gotten - if self.gotten == true - and def.gotten_mesh then - mesh = def.gotten_mesh - end - - -- set child objects to half size - if self.child == true then - - vis_size = { - x = self.base_size.x * .5, - y = self.base_size.y * .5, - } - - if def.child_texture then - textures = def.child_texture[1] - end - - colbox = { - self.base_colbox[1] * .5, - self.base_colbox[2] * .5, - self.base_colbox[3] * .5, - self.base_colbox[4] * .5, - self.base_colbox[5] * .5, - self.base_colbox[6] * .5 - } - end - - if self.health == 0 then - self.health = random (self.hp_min, self.hp_max) - end - - -- rnd: pathfinding init - self.path = {} - self.path.way = {} -- path to follow, table of positions - self.path.lastpos = {x = 0, y = 0, z = 0} - self.path.stuck = false - self.path.following = false -- currently following path? - self.path.stuck_timer = 0 -- if stuck for too long search for path - -- end init - - self.object:set_armor_groups({immortal = 1, fleshy = self.armor}) - self.old_y = self.object:getpos().y - self.old_health = self.health - self.sounds.distance = self.sounds.distance or 10 - self.textures = textures - self.mesh = mesh - self.collisionbox = colbox - self.visual_size = vis_size - self.standing_in = "" - - -- set anything changed above - self.object:set_properties(self) - set_yaw(self.object, (random(0, 360) - 180) / 180 * pi) - update_tag(self) - set_animation(self, "stand") - - if use_cmi then - self._cmi_components = cmi.activate_components(self.serialized_cmi_components) - cmi.notify_activate(self.object, dtime) - end -end - - --- main mob function -local mob_step = function(self, dtime) - - if use_cmi then - cmi.notify_step(self.object, dtime) - end - - local pos = self.object:getpos() - local yaw = 0 - - -- when lifetimer expires remove mob (except npc and tamed) - if self.type ~= "npc" - and not self.tamed - and self.state ~= "attack" - and remove_far ~= true - and self.lifetimer < 20000 then - - self.lifetimer = self.lifetimer - dtime - - if self.lifetimer <= 0 then - - -- only despawn away from player - local objs = minetest.get_objects_inside_radius(pos, 15) - - for n = 1, #objs do - - if objs[n]:is_player() then - - self.lifetimer = 20 - - return - end - end - --- minetest.log("action", --- S("lifetimer expired, removed @1", self.name)) - - effect(pos, 15, "tnt_smoke.png", 2, 4, 2, 0) - - self.object:remove() - - return - end - end - - falling(self, pos) - - -- knockback timer - if self.pause_timer > 0 then - - self.pause_timer = self.pause_timer - dtime - - if self.pause_timer < 1 then - self.pause_timer = 0 - end - - return - end - - -- run custom function (defined in mob lua file) - if self.do_custom then - - -- when false skip going any further - if self.do_custom(self, dtime) == false then - return - end - end - - -- attack timer - self.timer = self.timer + dtime - - if self.state ~= "attack" then - - if self.timer < 1 then - return - end - - self.timer = 0 - end - - -- never go over 100 - if self.timer > 100 then - self.timer = 1 - end - - -- node replace check (cow eats grass etc.) - replace(self, pos) - - -- mob plays random sound at times - if random(1, 100) == 1 then - mob_sound(self, self.sounds.random) - end - - -- environmental damage timer (every 1 second) - self.env_damage_timer = self.env_damage_timer + dtime - - if (self.state == "attack" and self.env_damage_timer > 1) - or self.state ~= "attack" then - - self.env_damage_timer = 0 - - do_env_damage(self) - end - - monster_attack(self) - - npc_attack(self) - - breed(self) - - follow_flop(self) - - do_states(self, dtime) - - do_jump(self) - -end - - --- default function when mobs are blown up with TNT -local do_tnt = function(obj, damage) - - --print ("----- Damage", damage) - - obj.object:punch(obj.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, nil) - - return false, true, {} -end - - -mobs.spawning_mobs = {} - --- register mob entity -function mobs:register_mob(name, def) - - mobs.spawning_mobs[name] = true - -minetest.register_entity(name, { - - stepheight = def.stepheight or 1.1, -- was 0.6 - name = name, - type = def.type, - attack_type = def.attack_type, - fly = def.fly, - fly_in = def.fly_in or "air", - owner = def.owner or "", - order = def.order or "", - on_die = def.on_die, - do_custom = def.do_custom, - jump_height = def.jump_height or 4, -- was 6 - drawtype = def.drawtype, -- DEPRECATED, use rotate instead - rotate = math.rad(def.rotate or 0), -- 0=front, 90=side, 180=back, 270=side2 - lifetimer = def.lifetimer or 180, -- 3 minutes - hp_min = max(1, (def.hp_min or 5) * difficulty), - hp_max = max(1, (def.hp_max or 10) * difficulty), - physical = true, - collisionbox = def.collisionbox, - visual = def.visual, - visual_size = def.visual_size or {x = 1, y = 1}, - mesh = def.mesh, - makes_footstep_sound = def.makes_footstep_sound or false, - view_range = def.view_range or 5, - walk_velocity = def.walk_velocity or 1, - run_velocity = def.run_velocity or 2, - damage = max(0, (def.damage or 0) * difficulty), - light_damage = def.light_damage or 0, - water_damage = def.water_damage or 0, - lava_damage = def.lava_damage or 0, - suffocation = def.suffocation or 2, - fall_damage = def.fall_damage or 1, - fall_speed = def.fall_speed or -10, -- must be lower than -2 (default: -10) - drops = def.drops or {}, - armor = def.armor or 100, - on_rightclick = def.on_rightclick, - arrow = def.arrow, - shoot_interval = def.shoot_interval, - sounds = def.sounds or {}, - animation = def.animation, - follow = def.follow, - jump = def.jump ~= false, - walk_chance = def.walk_chance or 50, - attacks_monsters = def.attacks_monsters or false, - group_attack = def.group_attack or false, - passive = def.passive or false, - recovery_time = def.recovery_time or 0.5, - knock_back = def.knock_back or 3, - blood_amount = def.blood_amount or 5, - blood_texture = def.blood_texture or "mobs_blood.png", - shoot_offset = def.shoot_offset or 0, - floats = def.floats or 1, -- floats in water by default - replace_rate = def.replace_rate, - replace_what = def.replace_what, - replace_with = def.replace_with, - replace_offset = def.replace_offset or 0, - on_replace = def.on_replace, - timer = 0, - env_damage_timer = 0, -- only used when state = "attack" - tamed = false, - pause_timer = 0, - horny = false, - hornytimer = 0, - child = false, - gotten = false, - health = 0, - reach = def.reach or 3, - htimer = 0, - texture_list = def.textures, - child_texture = def.child_texture, - docile_by_day = def.docile_by_day or false, - time_of_day = 0.5, - fear_height = def.fear_height or 0, - runaway = def.runaway, - runaway_timer = 0, - pathfinding = def.pathfinding, - immune_to = def.immune_to or {}, - explosion_radius = def.explosion_radius, - custom_attack = def.custom_attack, - double_melee_attack = def.double_melee_attack, - dogshoot_switch = def.dogshoot_switch, - dogshoot_count = 0, - dogshoot_count_max = def.dogshoot_count_max or 5, - dogshoot_count2_max = def.dogshoot_count2_max or (def.dogshoot_count_max or 5), - attack_animals = def.attack_animals or false, - specific_attack = def.specific_attack, - owner_loyal = def.owner_loyal, - facing_fence = false, - _cmi_is_mob = true, - - on_blast = def.on_blast or do_tnt, - - on_step = mob_step, - - on_punch = mob_punch, - - on_activate = function(self, staticdata, dtime) - return mob_activate(self, staticdata, def, dtime) - end, - - get_staticdata = function(self) - return mob_staticdata(self) - end, - -}) - -end -- END mobs:register_mob function - - --- count how many mobs of one type are inside an area -local count_mobs = function(pos, type) - - local num_type = 0 - local num_total = 0 - local objs = minetest.get_objects_inside_radius(pos, aoc_range) - - for n = 1, #objs do - - if not objs[n]:is_player() then - - local obj = objs[n]:get_luaentity() - - -- count mob type and add to total also - if obj and obj.name and obj.name == type then - - num_type = num_type + 1 - num_total = num_total + 1 - - -- add to total mobs - elseif obj and obj.name and obj.health ~= nil then - - num_total = num_total + 1 - end - end - end - - return num_type, num_total -end - - --- global functions - -function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, - interval, chance, aoc, min_height, max_height, day_toggle, on_spawn) - - -- chance/spawn number override in minetest.conf for registered mob - local numbers = minetest.setting_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 - end - - minetest.log("action", - string.format("[mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc)) - - end - - minetest.register_abm({ - - label = name .. " spawning", - nodenames = nodes, - neighbors = neighbors, - interval = interval, - chance = chance, - catch_up = false, - - action = function(pos, node, active_object_count, active_object_count_wider) - - -- is mob actually registered? - if not mobs.spawning_mobs[name] then ---print ("--- mob doesn't exist", name) - return - end - - -- do not spawn if too many of same mob in area - if active_object_count_wider >= max_per_block - or count_mobs(pos, name) >= aoc then ---print ("--- too many entities", name, aoc, active_object_count_wider) - return - end - - -- if toggle set to nil then ignore day/night check - if day_toggle ~= nil then - - local tod = (minetest.get_timeofday() or 0) * 24000 - - if tod > 4500 and tod < 19500 then - -- daylight, but mob wants night - if day_toggle == false then ---print ("--- mob needs night", name) - return - end - else - -- night time but mob wants day - if day_toggle == true then ---print ("--- mob needs day", name) - return - end - end - end - - -- spawn above node - pos.y = pos.y + 1 - - -- only spawn away from player - local objs = minetest.get_objects_inside_radius(pos, 10) - - for n = 1, #objs do - - if objs[n]:is_player() then ---print ("--- player too close", name) - return - end - end - - -- mobs cannot spawn in protected areas when enabled - if not spawn_protected - and minetest.is_protected(pos, "") then ---print ("--- inside protected area", name) - return - end - - -- are we spawning within height limits? - if pos.y > max_height - or pos.y < min_height then ---print ("--- height limits not met", name, pos.y) - return - end - - -- are light levels ok? - local light = minetest.get_node_light(pos) - if not light - or light > max_light - or light < min_light then ---print ("--- light limits not met", name, light) - return - end - - -- are we spawning inside solid nodes? - if minetest.registered_nodes[node_ok(pos).name].walkable == true then ---print ("--- feet in block", name, node_ok(pos).name) - return - end - - pos.y = pos.y + 1 - - if minetest.registered_nodes[node_ok(pos).name].walkable == true then ---print ("--- head in block", name, node_ok(pos).name) - return - end - - -- spawn mob half block higher than ground - pos.y = pos.y - 0.5 - - local mob = minetest.add_entity(pos, name) - - if mob and mob:get_luaentity() then --- print ("[mobs] Spawned " .. name .. " at " --- .. minetest.pos_to_string(pos) .. " on " --- .. node.name .. " near " .. neighbors[1]) - if on_spawn and not on_spawn(mob, pos) then - return - end - else - minetest.log("warning", string.format("[mobs] %s failed to spawn at %s", - name, minetest.pos_to_string(pos))) - end - - end - }) -end - - --- compatibility with older mob registration -function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle) - - mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30, - chance, active_object_count, -31000, max_height, day_toggle) -end - - --- MarkBu's spawn function -function mobs:spawn(def) - - local name = def.name - local nodes = def.nodes or {"group:soil", "group:stone"} - local neighbors = def.neighbors or {"air"} - local min_light = def.min_light or 0 - local max_light = def.max_light or 15 - local interval = def.interval or 30 - local chance = def.chance or 5000 - local active_object_count = def.active_object_count or 1 - local min_height = def.min_height or -31000 - local max_height = def.max_height or 31000 - local day_toggle = def.day_toggle - local on_spawn = def.on_spawn - - mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval, - chance, active_object_count, min_height, max_height, day_toggle, on_spawn) -end - - --- register arrow for shoot attack -function mobs:register_arrow(name, def) - - if not name or not def then return end -- errorcheck - - minetest.register_entity(name, { - - physical = false, - visual = def.visual, - visual_size = def.visual_size, - textures = def.textures, - velocity = def.velocity, - hit_player = def.hit_player, - hit_node = def.hit_node, - hit_mob = def.hit_mob, - drop = def.drop or false, -- drops arrow as registered item when true - collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows - timer = 0, - switch = 0, - owner_id = def.owner_id, - rotate = def.rotate, - automatic_face_movement_dir = def.rotate - and (def.rotate - (pi / 180)) or false, - - on_activate = def.on_activate or nil, - - on_step = def.on_step or function(self, dtime) - - self.timer = self.timer + 1 - - local pos = self.object:getpos() - - if self.switch == 0 - or self.timer > 150 - or not within_limits(pos, 0) then - - self.object:remove() ; -- print ("removed arrow") - - return - end - - -- does arrow have a tail (fireball) - if def.tail - and def.tail == 1 - and def.tail_texture then - - minetest.add_particle({ - pos = pos, - velocity = {x = 0, y = 0, z = 0}, - acceleration = {x = 0, y = 0, z = 0}, - expirationtime = def.expire or 0.25, - collisiondetection = false, - texture = def.tail_texture, - size = def.tail_size or 5, - glow = def.glow or 0, - }) - end - - if self.hit_node then - - local node = node_ok(pos).name - - if minetest.registered_nodes[node].walkable then - - self.hit_node(self, pos, node) - - if self.drop == true then - - pos.y = pos.y + 1 - - self.lastpos = (self.lastpos or pos) - - minetest.add_item(self.lastpos, self.object:get_luaentity().name) - end - - self.object:remove() ; -- print ("hit node") - - return - end - end - - if self.hit_player or self.hit_mob then - - for _,player in pairs(minetest.get_objects_inside_radius(pos, 1.0)) do - - if self.hit_player - and player:is_player() then - - self.hit_player(self, player) - self.object:remove() ; -- print ("hit player") - return - end - - local entity = player:get_luaentity() - - if entity - and self.hit_mob - and entity._cmi_is_mob == true - and tostring(player) ~= self.owner_id - and entity.name ~= self.object:get_luaentity().name then - - self.hit_mob(self, player) - - self.object:remove() ; --print ("hit mob") - - return - end - end - end - - self.lastpos = pos - end - }) -end - - --- compatibility function -function mobs:explosion(pos, radius) - local self = {sounds = {}} - self.sounds.explode = "tnt_explode" - mobs:boom(self, pos, radius) -end - - --- make explosion with protection and tnt mod check -function mobs:boom(self, pos, radius) - - if minetest.get_modpath("tnt") and tnt and tnt.boom - and not minetest.is_protected(pos, "") then - - tnt.boom(pos, { - radius = radius, - damage_radius = radius, - sound = self.sounds.explode, - explode_center = true, - }) - else - minetest.sound_play(self.sounds.explode, { - pos = pos, - gain = 1.0, - max_hear_distance = self.sounds.distance or 32 - }) - - entity_physics(pos, radius) - effect(pos, 32, "tnt_smoke.png", radius * 3, radius * 5, radius, 1, 0) - end -end - - --- Register spawn eggs - --- Note: This also introduces the “spawn_egg” group: --- * spawn_egg=1: Spawn egg (generic mob, no metadata) --- * spawn_egg=2: Spawn egg (captured/tamed mob, metadata) -function mobs:register_egg(mob, desc, background, addegg, no_creative) - - local grp = {spawn_egg = 1} - - -- do NOT add this egg to creative inventory (e.g. dungeon master) - if creative and no_creative == true then - grp.not_in_creative_inventory = 1 - end - - local invimg = background - - if addegg == 1 then - invimg = "mobs_chicken_egg.png^(" .. invimg .. - "^[mask:mobs_chicken_egg_overlay.png)" - end - - -- register new spawn egg containing mob information - minetest.register_craftitem(mob .. "_set", { - - description = S("@1 (Tamed)", desc), - inventory_image = invimg, - groups = {spawn_egg = 2, not_in_creative_inventory = 1}, - stack_max = 1, - - on_place = function(itemstack, placer, pointed_thing) - - local pos = pointed_thing.above - - -- am I clicking on something with existing on_rightclick function? - local under = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[under.name] - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, under, placer, itemstack) - end - - if pos - and within_limits(pos, 0) - and not minetest.is_protected(pos, placer:get_player_name()) then - - pos.y = pos.y + 1 - - local data = itemstack:get_metadata() - local mob = minetest.add_entity(pos, mob, data) - local ent = mob:get_luaentity() - - if not ent then - mob:remove() - return - end - - if ent.type ~= "monster" then - -- set owner and tame if not monster - ent.owner = placer:get_player_name() - ent.tamed = true - end - - -- since mob is unique we remove egg once spawned - itemstack:take_item() - end - - return itemstack - end, - }) - - - -- register old stackable mob egg - minetest.register_craftitem(mob, { - - description = desc, - inventory_image = invimg, - groups = grp, - - on_place = function(itemstack, placer, pointed_thing) - - local pos = pointed_thing.above - - -- am I clicking on something with existing on_rightclick function? - local under = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[under.name] - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, under, placer, itemstack) - end - - if pos - and within_limits(pos, 0) - and not minetest.is_protected(pos, placer:get_player_name()) then - - pos.y = pos.y + 1 - - local mob = minetest.add_entity(pos, mob) - local ent = mob:get_luaentity() - - if not ent then - mob:remove() - return - end - - if ent.type ~= "monster" - and not placer:get_player_control().sneak then - -- set owner and tame if not monster - ent.owner = placer:get_player_name() - ent.tamed = true - end - - -- if not in creative then take item - if not creative then - itemstack:take_item() - end - end - - return itemstack - end, - }) - -end - - --- capture critter (thanks to blert2112 for idea) -function mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso, force_take, replacewith) - - if self.child - or not clicker:is_player() - or not clicker:get_inventory() then - return false - end - - -- get name of clicked mob - local mobname = self.name - - -- if not nil change what will be added to inventory - if replacewith then - mobname = replacewith - end - - local name = clicker:get_player_name() - local tool = clicker:get_wielded_item() - - -- are we using hand, net or lasso to pick up mob? - if tool:get_name() ~= "" - and tool:get_name() ~= "mobs:net" - and tool:get_name() ~= "mobs:lasso" then - return false - end - - -- is mob tamed? - if self.tamed == false - and force_take == false then - - minetest.chat_send_player(name, S("Not tamed!")) - - return true -- false - end - - -- cannot pick up if not owner - if self.owner ~= name - and force_take == false then - - minetest.chat_send_player(name, S("@1 is owner!", self.owner)) - - return true -- false - end - - if clicker:get_inventory():room_for_item("main", mobname) then - - -- was mob clicked with hand, net, or lasso? - local chance = 0 - - if tool:get_name() == "" then - chance = chance_hand - - elseif tool:get_name() == "mobs:net" then - - chance = chance_net - - tool:add_wear(4000) -- 17 uses - - clicker:set_wielded_item(tool) - - elseif tool:get_name() == "mobs:lasso" then - - chance = chance_lasso - - tool:add_wear(650) -- 100 uses - - clicker:set_wielded_item(tool) - - end - - -- calculate chance.. add to inventory if successful? - if chance > 0 and random(1, 100) <= chance then - - -- default mob egg - local new_stack = ItemStack(mobname) - - -- add special mob egg with all mob information - -- unless 'replacewith' contains new item to use - if not replacewith then - - new_stack = ItemStack(mobname .. "_set") - - local tmp = {} - - for _,stat in pairs(self) do - local t = type(stat) - if t ~= "function" - and t ~= "nil" - and t ~= "userdata" then - tmp[_] = self[_] - end - end - - local data_str = minetest.serialize(tmp) - - new_stack:set_metadata(data_str) - end - - local inv = clicker:get_inventory() - - if inv:room_for_item("main", new_stack) then - inv:add_item("main", new_stack) - else - minetest.add_item(clicker:getpos(), new_stack) - end - - self.object:remove() - - mob_sound(self, "default_place_node_hard") - - - else - minetest.chat_send_player(name, S("Missed!")) - - mob_sound(self, "mobs_swing") - end - end - - return true -end - - --- protect tamed mob with rune item -function mobs:protect(self, clicker) - - local name = clicker:get_player_name() - local tool = clicker:get_wielded_item() - - if tool:get_name() ~= "mobs:protector" then - return false - end - - if self.tamed == false then - minetest.chat_send_player(name, S("Not tamed!")) - return true -- false - end - - if self.protected == true then - minetest.chat_send_player(name, S("Already protected!")) - return true -- false - end - - if not creative then - tool:take_item() -- take 1 protection rune - clicker:set_wielded_item(tool) - end - - self.protected = true --- minetest.chat_send_player(name, S("Protected!")) - - local pos = self.object:getpos() - pos.y = pos.y + self.collisionbox[2] + 0.5 - - effect(self.object:getpos(), 25, "mobs_protect_particle.png", 0.5, 4, 2, 15) - - mob_sound(self, "mobs_spell") - - return true -end - - -local mob_obj = {} -local mob_sta = {} - --- feeding, taming and breeding (thanks blert2112) -function mobs:feed_tame(self, clicker, feed_count, breed, tame) - - if not self.follow then - return false - end - - -- can eat/tame with item in hand - if follow_holding(self, clicker) then - - -- if not in creative then take item - if not creative then - - local item = clicker:get_wielded_item() - - item:take_item() - - clicker:set_wielded_item(item) - end - - -- increase health - self.health = self.health + 4 - - if self.health >= self.hp_max then - - self.health = self.hp_max - - if self.htimer < 1 then - - minetest.chat_send_player(clicker:get_player_name(), - S("@1 at full health (@2)", - self.name:split(":")[2], tostring(self.health))) - - self.htimer = 5 - end - end - - self.object:set_hp(self.health) - - update_tag(self) - - -- make children grow quicker - if self.child == true then - - self.hornytimer = self.hornytimer + 20 - - return true - end - - -- feed and tame - self.food = (self.food or 0) + 1 - if self.food >= feed_count then - - self.food = 0 - - if breed and self.hornytimer == 0 then - self.horny = true - end - - self.gotten = false - - if tame then - - if self.tamed == false then - minetest.chat_send_player(clicker:get_player_name(), - S("@1 has been tamed!", - self.name:split(":")[2])) - end - - self.tamed = true - - if not self.owner or self.owner == "" then - self.owner = clicker:get_player_name() - end - end - - -- make sound when fed so many times - mob_sound(self, self.sounds.random) - end - - return true - end - - local item = clicker:get_wielded_item() - - -- if mob has been tamed you can name it with a nametag - if item:get_name() == "mobs:nametag" - and clicker:get_player_name() == self.owner then - - local name = clicker:get_player_name() - - -- store mob and nametag stack in external variables - mob_obj[name] = self - mob_sta[name] = item - - local tag = self.nametag or "" - - minetest.show_formspec(name, "mobs_nametag", "size[8,4]" - .. init.gui_bg - .. init.gui_bg_img - .. "field[0.5,1;7.5,0;name;" .. minetest.formspec_escape(S("Enter name:")) .. ";" .. tag .. "]" - .. "button_exit[2.5,3.5;3,1;mob_rename;" .. minetest.formspec_escape(S("Rename")) .. "]") - - end - - return false - -end - - --- inspired by blockmen's nametag mod -minetest.register_on_player_receive_fields(function(player, formname, fields) - - -- right-clicked with nametag and name entered? - if formname == "mobs_nametag" - and fields.name - and fields.name ~= "" then - - local name = player:get_player_name() - - if not mob_obj[name] - or not mob_obj[name].object then - return - end - - -- limit name entered to 64 characters long - if string.len(fields.name) > 64 then - fields.name = string.sub(fields.name, 1, 64) - end - - -- update nametag - mob_obj[name].nametag = fields.name - - update_tag(mob_obj[name]) - - -- if not in creative then take item - if not creative then - - mob_sta[name]:take_item() - - player:set_wielded_item(mob_sta[name]) - end - - -- reset external variables - mob_obj[name] = nil - mob_sta[name] = nil - - end -end) - - --- compatibility function for old entities to new modpack entities -function mobs:alias_mob(old_name, new_name) - - -- spawn egg - minetest.register_alias(old_name, new_name) - - -- entity - minetest.register_entity(":" .. old_name, { - - physical = false, - - on_step = function(self) - - local pos = self.object:getpos() - - minetest.add_entity(pos, new_name) - - self.object:remove() - end - }) -end diff --git a/mods/ENTITIES/mobs/api.txt b/mods/ENTITIES/mobs/api.txt deleted file mode 100644 index 90a5966..0000000 --- a/mods/ENTITIES/mobs/api.txt +++ /dev/null @@ -1,462 +0,0 @@ - -MOB API (13th July 2017) - -The mob api is a function that can be called on by other mods to add new animals or monsters into minetest. - - minetest.conf settings* - - 'enable_damage' if true monsters will attack players (default is true) - 'only_peaceful_mobs' if true only animals will spawn in game (default is false) - 'mobs_disable_blood' if false blood effects appear when mob is hit (default is false) - 'mobs_spawn_protected' if set to false then mobs will not spawn in protected areas (default is true) - 'remove_far_mobs' if true then mobs that are outside players visual range will be removed (default is false) - 'mobname' can change specific mob chance rate (0 to disable) and spawn number e.g. mobs_animal:cow = 1000,5 - 'mob_difficulty' sets difficulty level (health and hit damage multiplied by this number), defaults to 1.0. - 'mob_show_health' if false then punching mob will not show health status (true by default) - -mobs:register_mob(name, definition) - -This functions registers a new mob as a Minetest entity. - - 'name' is the name of the mob (e.g. "mobs:dirt_monster") - definition is a table with the following fields - 'type' the type of the mob ("monster", "animal" or "npc") where monsters attack players and npc's, animals and npc's tend to wander around and can attack when hit 1st. - 'passive' will mob defend itself, set to false to attack - 'docile_by_day' when true, mob will not attack during daylight hours unless provoked - 'attacks_monsters' usually for npc's to attack monsters in area - 'group_attack' true to defend same kind of mobs from attack in area - 'owner_loyal' when true owned mobs will attack any monsters you punch - 'attack_animals' true for monster to attack animals as well as player and npc's - 'specific_attack' has a table of entity names that monsters can attack {"player", "mobs_animal:chicken"} - 'hp_min' minimum health - 'hp_max' maximum health (mob health is randomly selected between both) - 'physical' same is in minetest.register_entity() - 'collisionbox' same is in minetest.register_entity() - 'visual' same is in minetest.register_entity() - 'visual_size' same is in minetest.register_entity() - 'textures' same is in minetest.register_entity() - although you can add multiple lines for random textures {{"texture1.png"},{"texture2.png"}}, - 'gotten_texture' alt. texture for when self.gotten value is set to true (used for shearing sheep) - 'child_texture' texture of mod for when self.child is set to true - 'mesh' same is in minetest.register_entity() - 'gotten_mesh' alternative mesh for when self.gotten is true (used for sheep) - 'makes_footstep_sound' same is in minetest.register_entity() - 'follow' item when held will cause mob to follow player, can be single string "default:apple" or table {"default:apple", "default:diamond"}. These are also items that are used to feed and tame mob. - 'view_range' the range in which the mob will follow or attack player - 'walk_chance' chance of mob walking around (0 to 100), set to 0 for jumping mob only - 'walk_velocity' the velocity when the monster is walking around - 'run_velocity' the velocity when the monster is attacking a player - 'runaway' when true mob will turn and run away when punched - 'stepheight' minimum node height mob can walk onto without jumping (default: 0.6) - 'jump' can mob jump, true or false - 'jump_height' height mob can jump, default is 6 (0 to disable jump) - 'fly' can mob fly, true or false (used for swimming mobs also) - 'fly_in' node name that mob flys inside, e.g "air", "default:water_source" for fish - 'damage' the damage mobs inflict per melee attack. - 'recovery_time' how much time from when mob is hit to recovery (default: 0.5 seconds) - 'knock_back' strength of knock-back when mob hit (default: 3) - 'immune_to' table holding special tool/item names and damage the incur e.g. - {"default:sword_wood", 0}, {"default:gold_lump", -10} immune to sword, gold lump heals - 'blood_amount' number of droplets that appear when hit - 'blood_texture' texture of blood droplets (default: "mobs_blood.png") - 'drops' is list of tables with the following fields: - 'name' itemname e.g. default:stone - 'chance' the inverted chance (same as in abm) to get the item - 'min' the minimum number of items - 'max' the maximum number of items - 'armor' this integer holds armor strength with 100 being normal, with lower numbers hardening the armor and higher numbers making it weaker (weird I know but compatible with simple mobs) - 'drawtype' "front" or "side" (DEPRECATED, replaced with below) - 'rotate' set mob rotation, 0=front, 90=side, 180=back, 270=other side - 'water_damage' the damage per second if the mob is in water - 'lava_damage' the damage per second if the mob is in lava - 'light_damage' the damage per second if the mob is in light - 'suffocation' health value mob loses when inside a solid node - 'fall_damage' will mob be hurt when falling from height - 'fall_speed' maximum falling velocity of mob (default is -10 and must be below -2) - 'fear_height' when mob walks near a drop then anything over this value makes it stop and turn back (default is 0 to disable) - 'on_die' a function that is called when the mob is killed the parameters are (self, pos) - 'floats' 1 to float in water, 0 to sink - 'on_rightclick' its same as in minetest.register_entity() - 'pathfinding' set to 1 for mobs to use pathfinder feature to locate player, set to 2 so they can build/break also (only works with dogfight attack) - 'attack_type' the attack type of a monster - 'dogfight' follows player in range and attacks when in reach - 'shoot' shoots defined arrows when player is within range - 'explode' follows player in range and will flash and explode when in reach - 'dogshoot' shoots arrows when in range and one on one attack when in reach - 'dogshoot_switch' allows switching between shoot and dogfight modes inside dogshoot using timer (1 = shoot, 2 = dogfight) - 'dogshoot_count_max' number of seconds before switching to dogfight mode. - 'dogshoot_count2_max' number of seconds before switching back to shoot mode. - 'custom_attack' when set this function is called instead of the normal mob melee attack, parameters are (self, to_attack) - 'double_melee_attack' if false then api will choose randomly between 'punch' and 'punch2' attack animations - 'on_blast' is called when an explosion happens near mob when using TNT functions, parameters are (object, damage) and returns (do_damage, do_knockback, drops) - 'explosion_radius' radius of explosion attack (defaults to 1) - 'arrow' if the attack_type is "shoot" or "dogshoot" then the entity name of a pre-defined arrow is required, see below for arrow definition. - 'shoot_interval' the minimum shoot interval - 'shoot_offset' +/- value to position arrow/fireball when fired - 'reach' how far a reach this mob has, default is 3 - 'sounds' this is a table with sounds of the mob - 'random' random sounds during gameplay - 'war_cry' sound when starting to attack player - 'attack' sound when attacking player - 'shoot_attack' sound when attacking player by shooting arrow/entity - 'damage' sound when being hit - 'death' sound when killed - 'jump' sound when jumping - 'explode' sound when exploding - 'distance' maximum distance sounds are heard from (default is 10) - -Mobs can look for specific nodes as they walk and replace them to mimic eating. - - 'replace_what' group if items to replace e.g. {"farming:wheat_8", "farming:carrot_8"} - 'replace_with' replace with what e.g. "air" or in chickens case "mobs:egg" - 'replace_rate' how random should the replace rate be (typically 10) - 'replace_offset' +/- value to check specific node to replace - 'on_replace(self, pos, oldnode, newnode)' gets called when mob is about to replace a node - self: ObjectRef of mob - pos: Position of node to replace - oldnode: Current node - newnode: What the node will become after replacing - - If false is returned, the mob will not replace the node. - - By default, replacing sets self.gotten to true and resets the object properties. - -The 'replace_what' has been updated to use tables for what, with and y_offset e.g. - - replace_what = { {"group:grass", "air", 0}, {"default:dirt_with_grass", "default:dirt", -1} } - -Mob animation comes in three parts, start_frame, end_frame and frame_speed which -can be added to the mob definition under pre-defined mob animation names like: - - 'animation' a table with the animation ranges and speed of the model - 'stand_start', 'stand_end', 'stand_speed' when mob stands still - 'walk_start', 'walk_end', 'walk_speed' when mob walks - 'run_start', 'run_end', 'run_speed' when mob runs - 'fly_start', 'fly_end', 'fly_speed' when mob flies - 'punch_start', 'punch_end', 'punch_speed' when mob attacks - 'punch2_start', 'punch2_end', 'punch2_speed' when mob attacks (alternative) - 'die_start', 'die_end', 'die_speed' when mob dies - '*_loop' bool value to determine if any set animation loops e.g (die_loop = false) - defaults to true if not set -also 'speed_normal' for compatibility with older mobs for animation speed (deprecated) - - -The mob api also has some preset variables and functions that it will remember for each mob - - 'self.health' contains current health of mob (cannot exceed self.hp_max) - 'self.texture_list' contains list of all mob textures - 'self.child_texture' contains mob child texture when growing up - 'self.base_texture' contains current skin texture which was randomly selected from textures list - 'self.gotten' this is used for obtaining milk from cow and wool from sheep - 'self.horny' when animal fed enough it is set to true and animal can breed with same animal - 'self.hornytimer' background timer that controls breeding functions and mob childhood timings - 'self.child' used for when breeding animals have child, will use child_texture and be half size - 'self.owner' string used to set owner of npc mobs, typically used for dogs - 'self.order' set to "follow" or "stand" so that npc will follow owner or stand it's ground - 'self.nametag' contains the name of the mob which it can show above - 'on_die' a function that is called when mob is killed - 'do_custom' a custom function that is called every tick while mob is active and which has access to all of the self.* variables e.g. (self.health for health or self.standing_in for node status), return with 'false' to skip remainder of mob API. - - -mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle) - -mobs:spawn_specfic(name, nodes, neighbors, min_light, max_light, interval, chance, active_object_count, min_height, max_height, day_toggle, on_spawn) - -These functions register a spawn algorithm for the mob. Without this function the call the mobs won't spawn. - - 'name' is the name of the animal/monster - 'nodes' is a list of nodenames on that the animal/monster can spawn on top of - 'neighbors' is a list of nodenames on that the animal/monster will spawn beside (default is {"air"} for mobs:register_spawn) - 'max_light' is the maximum of light - 'min_light' is the minimum of light - 'interval' is same as in register_abm() (default is 30 for mobs:register_spawn) - 'chance' is same as in register_abm() - 'active_object_count' mob is only spawned if active_object_count_wider of ABM is <= this - 'min_height' is the minimum height the mob can spawn - 'max_height' is the maximum height the mob can spawn - 'day_toggle' true for day spawning, false for night or nil for anytime - 'on_spawn' is a custom function which runs after mob has spawned and gives self and pos values. - -... also a simpler way to handle mob spawns has been added with the mobs:spawn(def) command which uses above names to make settings clearer: - - mobs:spawn({name = "mobs_monster:tree_monster", - nodes = {"group:leaves"}, - max_light = 7, - }) - - -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 mob will spawn e.g. - -mobs_animal:sheep_chance 11000 or mobs_monster:sand_monster_chance 100 - -For each mob that spawns with this function is a field in mobs.spawning_mobs. It tells if the mob should spawn or not. Default is true. So other mods can only use the API of this mod by disabling the spawning of the default mobs in this mod. - - -mobs:register_arrow(name, definition) - -This function registers a arrow for mobs with the attack type shoot. - - 'name' is the name of the arrow - -definition' is a table with the following values: - 'visual' same is in minetest.register_entity() - 'visual_size' same is in minetest.register_entity() - 'textures' same is in minetest.register_entity() - '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; this function should hurt the player - the parameters are (self, player) - 'hit_mob' a function that is called when the arrow hits a mob; this function should hurt the mob - the parameters are (self, player) - 'hit_node' a function that is called when the arrow hits a node - the parameters are (self, pos, node) - 'tail' when set to 1 adds a trail or tail to mob arrows - 'tail_texture' texture string used for above effect - 'tail_size' has size for above texture (defaults to between 5 and 10) - 'expire' contains float value for how long tail appears for (defaults to 0.25) - 'glow' has value for how brightly tail glows 1 to 10 (default is 0, no glow) - 'rotate' integer value in degrees to rotate arrow - 'on_step' is a custom function when arrow is active, nil for default. - - -mobs:register_egg(name, description, background, addegg, no_creative) - -This function registers a spawn egg which can be used by admin to properly spawn in a mob. - - 'name' this is the name of your new mob to spawn e.g. "mob:sheep" - 'description' the name of the new egg you are creating e.g. "Spawn Sheep" - 'background' the texture displayed for the egg in inventory - 'addegg' would you like an egg image in front of your texture (1=yes, 0=no) - 'no_creative' when set to true this stops spawn egg appearing in creative mode for destructive mobs like Dungeon Masters - - -mobs:explosion(pos, radius) -- DEPRECATED!!! use mobs:boom() instead - -mobs:boom(self, pos, radius) -This function generates an explosion which removes nodes in a specific radius and damages any entity caught inside the blast radius. Protection will limit node destruction but not entity damage. - - 'self' mob entity - 'pos' centre position of explosion - 'radius' radius of explosion (typically set to 3) - - -mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso, force_take, replacewith) - -This function is generally called inside the on_rightclick section of the mob api code, it provides a chance of capturing the mob by hand, using the net or magic lasso items, and can also have the player take the mob by force if tamed and replace with another item entirely. - - 'self' mob information - 'clicker' player information - 'chance_hand' chance of capturing mob by hand (1 to 100) 0 to disable - 'chance_net' chance of capturing mob using net (1 to 100) 0 to disable - 'chance_lasso' chance of capturing mob using magic lasso (1 to 100) 0 to disable - 'force_take' take mob by force, even if tamed (true or false) - 'replacewith' once captured replace mob with this item instead (overrides new mob eggs with saved information) - - -mobs:feed_tame(self, clicker, feed_count, breed, tame) - -This function allows the mob to be fed the item inside self.follow be it apple, wheat or whatever a set number of times and be tamed or bred as a result. Will return true when mob is fed with item it likes. - - 'self' mob information - 'clicker' player information - 'feed_count' number of times mob must be fed to tame or breed - 'breed' true or false stating if mob can be bred and a child created afterwards - 'tame' true or false stating if mob can be tamed so player can pick them up - - -mobs:protect(self, clicker) - -This function can be used to right-click any tamed mob with mobs:protector item, this will protect the mob from harm inside of a protected area from other players. Will return true when mob right-clicked with mobs:protector item. - - 'self' mob information - 'clicker' player information - - -Mobs can now be ridden by players and the following shows the functions and usage: - - -mobs:attach(self, player) - -This function attaches a player to the mob so it can be ridden. - - 'self' mob information - 'player' player information - - -mobs:detach(player, offset) - -This function will detach the player currently riding a mob to an offset position. - - 'player' player information - 'offset' position table containing offset values - - -mobs:drive(self, move_animation, stand_animation, can_fly, dtime) - -This function allows an attached player to move the mob around and animate it at same time. - - 'self' mob information - 'move_animation' string containing movement animation e.g. "walk" - 'stand_animation' string containing standing animation e.g. "stand" - 'can_fly' if true then jump and sneak controls will allow mob to fly up and down - 'dtime' tick time used inside drive function - - -mobs:fly(self, dtime, speed, can_shoot, arrow_entity, move_animation, stand_animation) - -This function allows an attached player to fly the mob around using directional controls. - - 'self' mob information - 'dtime' tick time used inside fly function - 'speed' speed of flight - 'can_shoot' true if mob can fire arrow (sneak and left mouse button fires) - 'arrow_entity' name of arrow entity used for firing - 'move_animation' string containing name of pre-defined animation e.g. "walk" or "fly" etc. - 'stand_animation' string containing name of pre-defined animation e.g. "stand" or "blink" etc. - - Note: animation names above are from the pre-defined animation lists inside mob registry without extensions. - - -mobs:set_animation(self, name) - -This function sets the current animation for mob, defaulting to "stand" if not found. - - 'self' mob information - 'name' name of animation - - -Certain variables need to be set before using the above functions: - - 'self.v2' toggle switch used to define below values for the first time - 'self.max_speed_forward' max speed mob can move forward - 'self.max_speed_reverse' max speed mob can move backwards - 'self.accel' acceleration speed - 'self.terrain_type' integer containing terrain mob can walk on (1 = water, 2 or 3 = land) - 'self.driver_attach_at' position offset for attaching player to mob - 'self.driver_eye_offset' position offset for attached player view - 'self.driver_scale' sets driver scale for mobs larger than {x=1, y=1} - - -Here is an example mob to show how the above functions work: - - --- rideable horse -mobs:register_mob("mob_horse:horse", { - type = "animal", - visual = "mesh", - visual_size = {x = 1.20, y = 1.20}, - mesh = "mobs_horse.x", - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.25, 0.4}, - animation = { - speed_normal = 15, - speed_run = 30, - stand_start = 25, - stand_end = 75, - walk_start = 75, - walk_end = 100, - run_start = 75, - run_end = 100, - }, - textures = { - {"mobs_horse.png"}, - {"mobs_horsepeg.png"}, - {"mobs_horseara.png"} - }, - fear_height = 3, - runaway = true, - fly = false, - walk_chance = 60, - view_range = 5, - follow = {"farming:wheat"}, - passive = true, - hp_min = 12, - hp_max = 16, - armor = 200, - lava_damage = 5, - fall_damage = 5, - water_damage = 1, - makes_footstep_sound = true, - drops = { - {name = "mobs:meat_raw", chance = 1, min = 2, max = 3} - }, - - do_custom = function(self, dtime) - - -- set needed values if not already present - if not self.v2 then - self.v2 = 0 - self.max_speed_forward = 6 - self.max_speed_reverse = 2 - self.accel = 6 - self.terrain_type = 3 - self.driver_attach_at = {x = 0, y = 20, z = -2} - self.driver_eye_offset = {x = 0, y = 3, z = 0} - self.driver_scale = {x = 1, y = 1} - end - - -- if driver present allow control of horse - if self.driver then - - mobs.drive(self, "walk", "stand", false, dtime) - - return false -- skip rest of mob functions - end - - return true - end, - - on_die = function(self, pos) - - -- drop saddle when horse is killed while riding - -- also detach from horse properly - if self.driver then - minetest.add_item(pos, "mobs:saddle") - mobs.detach(self.driver, {x = 1, y = 0, z = 1}) - end - - end, - - on_rightclick = function(self, clicker) - - -- make sure player is clicking - if not clicker or not clicker:is_player() then - return - end - - -- feed, tame or heal horse - if mobs:feed_tame(self, clicker, 10, true, true) then - return - end - - -- make sure tamed horse is being clicked by owner only - if self.tamed and self.owner == clicker:get_player_name() then - - local inv = clicker:get_inventory() - - -- detatch player already riding horse - if self.driver and clicker == self.driver then - - 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.getpos(), "mobs:saddle") - end - - -- attach player to horse - elseif not self.driver - and clicker:get_wielded_item():get_name() == "mobs:saddle" then - - self.object:set_properties({stepheight = 1.1}) - mobs.attach(self, clicker) - - -- take saddle from inventory - inv:remove_item("main", "mobs:saddle") - end - end - - -- used to capture horse with magic lasso - mobs:capture_mob(self, clicker, 0, 0, 80, false, nil) - end -}) diff --git a/mods/ENTITIES/mobs/crafts.lua b/mods/ENTITIES/mobs/crafts.lua deleted file mode 100644 index 7257388..0000000 --- a/mods/ENTITIES/mobs/crafts.lua +++ /dev/null @@ -1,123 +0,0 @@ - -local S = mobs.intllib - --- name tag -minetest.register_craftitem("mobs:nametag", { - description = S("Name Tag"), - inventory_image = "mobs_nametag.png", -}) - -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"}, - }) -end - --- leather -minetest.register_craftitem("mobs:leather", { - description = S("Leather"), - inventory_image = "mobs_leather.png", -}) - --- raw meat -minetest.register_craftitem("mobs:meat_raw", { - description = S("Raw Meat"), - inventory_image = "mobs_meat_raw.png", - on_use = minetest.item_eat(3), -}) - --- cooked meat -minetest.register_craftitem("mobs:meat", { - description = S("Meat"), - inventory_image = "mobs_meat.png", - on_use = minetest.item_eat(8), -}) - -minetest.register_craft({ - type = "cooking", - output = "mobs:meat", - recipe = "mobs:meat_raw", - cooktime = 5, -}) - --- lasso -minetest.register_tool("mobs:lasso", { - description = S("Lasso (right-click animal to put in inventory)"), - inventory_image = "mobs_magic_lasso.png", -}) - -if minetest.get_modpath("farming") then - minetest.register_craft({ - output = "mobs:lasso", - recipe = { - {"farming:string", "", "farming:string"}, - {"", "default:diamond", ""}, - {"farming:string", "", "farming:string"}, - } - }) -end - -minetest.register_alias("mobs:magic_lasso", "mobs:lasso") - --- net -minetest.register_tool("mobs:net", { - description = S("Net (right-click animal to put in inventory)"), - inventory_image = "mobs_net.png", -}) - -if minetest.get_modpath("farming") then - minetest.register_craft({ - output = "mobs:net", - recipe = { - {"group:stick", "", "group:stick"}, - {"group:stick", "", "group:stick"}, - {"farming:string", "group:stick", "farming:string"}, - } - }) -end - --- shears (right click to shear animal) -minetest.register_tool("mobs:shears", { - description = S("Steel Shears (right-click to shear)"), - inventory_image = "mobs_shears.png", -}) - -minetest.register_craft({ - output = 'mobs:shears', - recipe = { - {'', 'default:steel_ingot', ''}, - {'', 'group:stick', 'default:steel_ingot'}, - } -}) - --- protection rune -minetest.register_craftitem("mobs:protector", { - description = S("Mob Protection Rune"), - inventory_image = "mobs_protector.png", -}) - -minetest.register_craft({ - output = "mobs:protector", - recipe = { - {"default:stone", "default:stone", "default:stone"}, - {"default:stone", "default:goldblock", "default:stone"}, - {"default:stone", "default:stone", "default:stone"}, - } -}) - --- saddle -minetest.register_craftitem("mobs:saddle", { - description = S("Saddle"), - inventory_image = "mobs_saddle.png" -}) - -minetest.register_craft({ - output = "mobs:saddle", - recipe = { - {"mobs:leather", "mobs:leather", "mobs:leather"}, - {"mobs:leather", "default:steel_ingot", "mobs:leather"}, - {"mobs:leather", "default:steel_ingot", "mobs:leather"}, - } -}) diff --git a/mods/ENTITIES/mobs/depends.txt b/mods/ENTITIES/mobs/depends.txt deleted file mode 100644 index 191863e..0000000 --- a/mods/ENTITIES/mobs/depends.txt +++ /dev/null @@ -1,9 +0,0 @@ -init -default -tnt? -dye? -farming? -invisibility? -intllib? -lucky_block? -cmi? diff --git a/mods/ENTITIES/mobs/description.txt b/mods/ENTITIES/mobs/description.txt deleted file mode 100644 index 919852a..0000000 --- a/mods/ENTITIES/mobs/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds a mob api for mods to add animals or monsters etc. \ No newline at end of file diff --git a/mods/ENTITIES/mobs/init.lua b/mods/ENTITIES/mobs/init.lua deleted file mode 100644 index f63fb16..0000000 --- a/mods/ENTITIES/mobs/init.lua +++ /dev/null @@ -1,19 +0,0 @@ - -local path = minetest.get_modpath("mobs") - --- Mob API -dofile(path .. "/api.lua") - --- Rideable Mobs -dofile(path .. "/mount.lua") - --- Mob Items -dofile(path .. "/crafts.lua") - --- Mob Spawner -dofile(path .. "/spawner.lua") - --- Lucky Blocks -dofile(path .. "/lucky_block.lua") - -minetest.log("action", "[MOD] Mobs Redo loaded") diff --git a/mods/ENTITIES/mobs/intllib.lua b/mods/ENTITIES/mobs/intllib.lua deleted file mode 100644 index 6669d72..0000000 --- a/mods/ENTITIES/mobs/intllib.lua +++ /dev/null @@ -1,45 +0,0 @@ - --- Fallback functions for when `intllib` is not installed. --- Code released under Unlicense . - --- Get the latest version of this file at: --- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua - -local function format(str, ...) - local args = { ... } - local function repl(escape, open, num, close) - if escape == "" then - local replacement = tostring(args[tonumber(num)]) - if open == "" then - replacement = replacement..close - end - return replacement - else - return "@"..open..num..close - end - end - return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) -end - -local gettext, ngettext -if minetest.get_modpath("intllib") then - if intllib.make_gettext_pair then - -- New method using gettext. - gettext, ngettext = intllib.make_gettext_pair() - else - -- Old method using text files. - gettext = intllib.Getter() - end -end - --- Fill in missing functions. - -gettext = gettext or function(msgid, ...) - return format(msgid, ...) -end - -ngettext = ngettext or function(msgid, msgid_plural, n, ...) - return format(n==1 and msgid or msgid_plural, ...) -end - -return gettext, ngettext diff --git a/mods/ENTITIES/mobs/license.txt b/mods/ENTITIES/mobs/license.txt deleted file mode 100644 index fec6f6a..0000000 --- a/mods/ENTITIES/mobs/license.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 TenPlus1 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/mods/ENTITIES/mobs/locale/de_DE.po b/mods/ENTITIES/mobs/locale/de_DE.po deleted file mode 100644 index d627dfd..0000000 --- a/mods/ENTITIES/mobs/locale/de_DE.po +++ /dev/null @@ -1,127 +0,0 @@ -# Mobs Redo translation. -# Copyright (C) 2017 TenPlus1 -# This file is distributed under the same license as the mobs package. -# Wuzzy , 2017 -# -msgid "" -msgstr "" -"Project-Id-Version: mobs\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-02 16:48+0200\n" -"PO-Revision-Date: 2017-07-02 14:27+0200\n" -"Last-Translator: Wuzzy \n" -"Language-Team: \n" -"Language: de_DE\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: api.lua -msgid "Mob has been protected!" -msgstr "Kreatur wurde geschützt!" - -#: api.lua -msgid "@1 (Tamed)" -msgstr "@1 (Gezähmt)" - -#: api.lua -msgid "Not tamed!" -msgstr "Nicht gezähmt!" - -#: api.lua -msgid "@1 is owner!" -msgstr "@1 ist der Besitzer!" - -#: api.lua -msgid "Missed!" -msgstr "Daneben!" - -#: api.lua -msgid "Already protected!" -msgstr "Bereits geschützt!" - -#: api.lua -msgid "Protected!" -msgstr "Geschützt!" - -#: api.lua -msgid "@1 at full health (@2)" -msgstr "@1 bei voller Gesundheit (@2)" - -#: api.lua -msgid "@1 has been tamed!" -msgstr "@1 wurde gezähmt!" - -#: api.lua -msgid "Enter name:" -msgstr "Namen eingeben:" - -#: api.lua -msgid "Rename" -msgstr "Umbenennen" - -#: crafts.lua -msgid "Name Tag" -msgstr "Namensschild" - -#: crafts.lua -msgid "Leather" -msgstr "Leder" - -#: crafts.lua -msgid "Raw Meat" -msgstr "Rohes Fleisch" - -#: crafts.lua -msgid "Meat" -msgstr "Fleisch" - -#: crafts.lua -msgid "Lasso (right-click animal to put in inventory)" -msgstr "Lasso (Rechtsklick auf Tier, um es zu nehmen)" - -#: crafts.lua -msgid "Net (right-click animal to put in inventory)" -msgstr "Netz (Rechtsklick auf Tier, um es zu nehmen)" - -#: crafts.lua -msgid "Steel Shears (right-click to shear)" -msgstr "Stahlschere (Rechtsklick zum Scheren)" - -#: crafts.lua -msgid "Mob Protection Rune" -msgstr "Kreaturschutzrune" - -#: crafts.lua -msgid "Saddle" -msgstr "Sattel" - -#: spawner.lua -msgid "Mob Spawner" -msgstr "Kreaturenspawner" - -#: spawner.lua -msgid "Mob MinLight MaxLight Amount PlayerDist" -msgstr "Kreatur MinLicht MaxLicht Menge SpielerEntfng" - -#: spawner.lua -msgid "Spawner Not Active (enter settings)" -msgstr "Nicht aktiv (Einstellungen eingeben)" - -#: spawner.lua -msgid "Spawner Active (@1)" -msgstr "Spawner aktiv (@1)" - -#: spawner.lua -msgid "Mob Spawner settings failed!" -msgstr "Kreaturenspawner-Einstellungen gescheitert!" - -#: spawner.lua -msgid "" -"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] " -"distance[1-20] y_offset[-10 to 10]”" -msgstr "" -"Syntax: „name min_licht[0-14] max_licht[0-14] max_mobs_im_gebiet[0 zum " -"Deaktivieren] distanz[1-20] y_versatz[-10 bis 10]“" \ No newline at end of file diff --git a/mods/ENTITIES/mobs/locale/es.po b/mods/ENTITIES/mobs/locale/es.po deleted file mode 100644 index 878dd29..0000000 --- a/mods/ENTITIES/mobs/locale/es.po +++ /dev/null @@ -1,124 +0,0 @@ -# Mobs Redo translation. -# Copyright (C) 2017 TenPlus1 -# This file is distributed under the same license as the mobs package. -# Wuzzy , 2017 -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-16 16:48+0200\n" -"PO-Revision-Date: 2017-07-16 16:48+0200\n" -"Last-Translator: Aleks \n" -"Language-Team: \n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: api.lua -msgid "Mob has been protected!" -msgstr "El mob ha sido protegido!" - -#: api.lua -msgid "@1 (Tamed)" -msgstr "@1 (Domesticado)" - -#: api.lua -msgid "Not tamed!" -msgstr "No domesticado!" - -#: api.lua -msgid "@1 is owner!" -msgstr "@1 es el dueño!" - -#: api.lua -msgid "Missed!" -msgstr "Perdido!" - -#: api.lua -msgid "Already protected!" -msgstr "Ya está protegido!" - -#: api.lua -msgid "Protected!" -msgstr "Protegido!" - -#: api.lua -msgid "@1 at full health (@2)" -msgstr "@1 con salud llena (@2)" - -#: api.lua -msgid "@1 has been tamed!" -msgstr "@1 ha sido domesticado!" - -#: api.lua -msgid "Enter name:" -msgstr "Ingrese nombre:" - -#: api.lua -msgid "Rename" -msgstr "Renombrar" - -#: crafts.lua -msgid "Name Tag" -msgstr "Nombrar etiqueta" - -#: crafts.lua -msgid "Leather" -msgstr "Cuero" - -#: crafts.lua -msgid "Raw Meat" -msgstr "Carne cruda" - -#: crafts.lua -msgid "Meat" -msgstr "Carne" - -#: crafts.lua -msgid "Lasso (right-click animal to put in inventory)" -msgstr "Lazo (click derecho en animal para colocar en inventario)" - -#: crafts.lua -msgid "Net (right-click animal to put in inventory)" -msgstr "Red (click derecho en animal para colocar en inventario)" - -#: crafts.lua -msgid "Steel Shears (right-click to shear)" -msgstr "Tijera de acero (click derecho para esquilar)" - -#: crafts.lua -msgid "Mob Protection Rune" -msgstr "Runa de protección de Mob" - -#: crafts.lua -msgid "Saddle" -msgstr "Montura" - -#: spawner.lua -msgid "Mob Spawner" -msgstr "Generador de Mob" - -#: spawner.lua -msgid "Mob MinLight MaxLight Amount PlayerDist" -msgstr "Mob LuzMin LuzMax Cantidad DistJugador" - -#: spawner.lua -msgid "Spawner Not Active (enter settings)" -msgstr "Generador no activo (ingrese config)" - -#: spawner.lua -msgid "Spawner Active (@1)" -msgstr "Generador activo (@1)" - -#: spawner.lua -msgid "Mob Spawner settings failed!" -msgstr "Configuracion de generador de Mob falló!" - -#: spawner.lua -msgid "" -"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] " -"distance[1-20] y_offset[-10 to 10]”" -msgstr "Sintaxis: “nombre luz_min[0-14] luz_max[0-14] max_mobs_en_area[0 para deshabilitar] " -"distancia[1-20] compensacion[-10 a 10]”" \ No newline at end of file diff --git a/mods/ENTITIES/mobs/locale/fr.po b/mods/ENTITIES/mobs/locale/fr.po deleted file mode 100644 index 14717c9..0000000 --- a/mods/ENTITIES/mobs/locale/fr.po +++ /dev/null @@ -1,125 +0,0 @@ -# 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-29 09:13+0200\n" -"PO-Revision-Date: 2017-07-29 09:20+0200\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 1.8.12\n" -"Last-Translator: fat115 \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: fr\n" - -#: api.lua -msgid "Mob has been protected!" -msgstr "L'animal a été protégé !" - -#: api.lua -msgid "@1 (Tamed)" -msgstr "@1 (apprivoisé)" - -#: api.lua -msgid "Not tamed!" -msgstr "Non-apprivoisé !" - -#: api.lua -msgid "@1 is owner!" -msgstr "Appartient à @1 !" - -#: api.lua -msgid "Missed!" -msgstr "Raté !" - -#: api.lua -msgid "Already protected!" -msgstr "Déjà protégé !" - -#: api.lua -msgid "Protected!" -msgstr "Protégé !" - -#: api.lua -msgid "@1 at full health (@2)" -msgstr "@1 est en pleine forme (@2) " - -#: api.lua -msgid "@1 has been tamed!" -msgstr "@1 a été apprivoisé ! " - -#: api.lua -msgid "Enter name:" -msgstr "Saisissez un nom :" - -#: api.lua -msgid "Rename" -msgstr "Renommer" - -#: crafts.lua -msgid "Name Tag" -msgstr "Étiquette pour collier" - -#: crafts.lua -msgid "Leather" -msgstr "Cuir" - -#: crafts.lua -msgid "Raw Meat" -msgstr "Viande crue" - -#: crafts.lua -msgid "Meat" -msgstr "Viande" - -#: crafts.lua -msgid "Lasso (right-click animal to put in inventory)" -msgstr "Lasso (clic droit sur l'animal pour le mettre dans l'inventaire)" - -#: crafts.lua -msgid "Net (right-click animal to put in inventory)" -msgstr "Filet (clic droit sur l'animal pour le mettre dans l'inventaire)" - -#: crafts.lua -msgid "Steel Shears (right-click to shear)" -msgstr "Ciseaux à laine (clic droit pour tondre)" - -#: crafts.lua -msgid "Mob Protection Rune" -msgstr "Rune de protection des animaux" - -#: crafts.lua -msgid "Saddle" -msgstr "Selle" - -#: spawner.lua -msgid "Mob Spawner" -msgstr "" - -#: spawner.lua -msgid "Mob MinLight MaxLight Amount PlayerDist" -msgstr "" - -#: spawner.lua -msgid "Spawner Not Active (enter settings)" -msgstr "" - -#: spawner.lua -msgid "Spawner Active (@1)" -msgstr "" - -#: spawner.lua -msgid "Mob Spawner settings failed!" -msgstr "" - -#: spawner.lua -msgid "" -"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] " -"distance[1-20] y_offset[-10 to 10]”" -msgstr "" diff --git a/mods/ENTITIES/mobs/locale/pt.po b/mods/ENTITIES/mobs/locale/pt.po deleted file mode 100644 index 05c3ae3..0000000 --- a/mods/ENTITIES/mobs/locale/pt.po +++ /dev/null @@ -1,129 +0,0 @@ -# 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: mobs\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-02 16:48+0200\n" -"PO-Revision-Date: 2017-07-02 14:55+0200\n" -"Last-Translator: Wuzzy \n" -"Language-Team: \n" -"Language: pt\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: api.lua -msgid "Mob has been protected!" -msgstr "" - -#: api.lua -msgid "@1 (Tamed)" -msgstr "" - -#: api.lua -msgid "Not tamed!" -msgstr "Indomesticado!" - -#: api.lua -msgid "@1 is owner!" -msgstr "Dono @1!" - -#: api.lua -msgid "Missed!" -msgstr "Faltou!" - -#: api.lua -msgid "Already protected!" -msgstr "" - -#: api.lua -msgid "Protected!" -msgstr "" - -#: api.lua -msgid "@1 at full health (@2)" -msgstr "@1 em plena saude (@2)" - -#: api.lua -msgid "@1 has been tamed!" -msgstr "@1 foi domesticado!" - -#: api.lua -msgid "Enter name:" -msgstr "Insira um nome:" - -#: api.lua -msgid "Rename" -msgstr "Renomear" - -#: crafts.lua -msgid "Name Tag" -msgstr "Etiqueta" - -#: crafts.lua -msgid "Leather" -msgstr "Couro" - -#: crafts.lua -msgid "Raw Meat" -msgstr "Carne crua" - -#: crafts.lua -msgid "Meat" -msgstr "Carne" - -#: crafts.lua -#, fuzzy -msgid "Lasso (right-click animal to put in inventory)" -msgstr "Laço (clique-direito no animal para por no inventario)" - -#: crafts.lua -msgid "Net (right-click animal to put in inventory)" -msgstr "Net (clique-direito no animal para por no inventario)" - -#: crafts.lua -msgid "Steel Shears (right-click to shear)" -msgstr "Tesoura de Aço (clique-direito para tosquiar)" - -#: crafts.lua -msgid "Mob Protection Rune" -msgstr "" - -#: crafts.lua -msgid "Saddle" -msgstr "" - -#: spawner.lua -msgid "Mob Spawner" -msgstr "Spawnador de Mob" - -#: spawner.lua -msgid "Mob MinLight MaxLight Amount PlayerDist" -msgstr "Mob LuzMinima LuzMaxima Valor DistJogador" - -#: spawner.lua -msgid "Spawner Not Active (enter settings)" -msgstr "Spawnador Inativo (configurar)" - -#: spawner.lua -msgid "Spawner Active (@1)" -msgstr "Spawnador Ativo (@1)" - -#: spawner.lua -msgid "Mob Spawner settings failed!" -msgstr "Configuraçao de Spawnador do Mob falhou!" - -#: spawner.lua -#, fuzzy -msgid "" -"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] " -"distance[1-20] y_offset[-10 to 10]”" -msgstr "" -"> nome luz_min[0-14] luz_max[0-14] max_mobs_na_area[0 para desabilitar] " -"distancia[1-20] y_offset[-10 a 10]" \ No newline at end of file diff --git a/mods/ENTITIES/mobs/locale/ru.po b/mods/ENTITIES/mobs/locale/ru.po deleted file mode 100644 index 7e2bc3b..0000000 --- a/mods/ENTITIES/mobs/locale/ru.po +++ /dev/null @@ -1,124 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-13 15:47+0200\n" -"PO-Revision-Date: 2017-08-13 15:47+ZONE\n" -"Last-Translator: Oleg720 \n" -"Language-Team: 720 Locales <>\n" -"Language: ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: api.lua -msgid "Mob has been protected!" -msgstr "Моб защищен!" - -#: api.lua -msgid "@1 (Tamed)" -msgstr "@1 (Прирученный)" - -#: api.lua -msgid "Not tamed!" -msgstr "Не прирученный" - -#: api.lua -msgid "@1 is owner!" -msgstr "@1 владелец" - -#: api.lua -msgid "Missed!" -msgstr "" - -#: api.lua -msgid "Already protected!" -msgstr "Уже защищен!" - -#: api.lua -msgid "Protected!" -msgstr "Защищен!" - -#: api.lua -msgid "@1 at full health (@2)" -msgstr "@1 при полном здоровье (@2)" - -#: api.lua -msgid "@1 has been tamed!" -msgstr "@1 приручен" - -#: api.lua -msgid "Enter name:" -msgstr "Введите имя:" - -#: api.lua -msgid "Rename" -msgstr "Переименовать" - -#: crafts.lua -msgid "Name Tag" -msgstr "Новый тег - -#: crafts.lua -msgid "Leather" -msgstr "Кожа" - -#: crafts.lua -msgid "Raw Meat" -msgstr "Сырое мясо" - -#: crafts.lua -msgid "Meat" -msgstr "Мясо" - -#: crafts.lua -msgid "Lasso (right-click animal to put in inventory)" -msgstr "Лассо (Правый клик - положить животное в инвентарь)" - -#: crafts.lua -msgid "Net (right-click animal to put in inventory)" -msgstr "Сеть (Правый клик - положить животное в инвентарь)" - -#: crafts.lua -msgid "Steel Shears (right-click to shear)" -msgstr "Ножницы (Правый клик - подстричь)" - -#: crafts.lua -msgid "Mob Protection Rune" -msgstr "" - -#: crafts.lua -msgid "Saddle" -msgstr "Седло" - -#: spawner.lua -msgid "Mob Spawner" -msgstr "Спавнер моба" - -#: spawner.lua -msgid "Mob MinLight MaxLight Amount PlayerDist" -msgstr "" - -#: spawner.lua -msgid "Spawner Not Active (enter settings)" -msgstr "Спавнер не активен (введите настройки)" - -#: spawner.lua -msgid "Spawner Active (@1)" -msgstr "Активные спавнер (@1)" - -#: spawner.lua -msgid "Mob Spawner settings failed!" -msgstr "Настройки спавнера моба провалились" - -#: spawner.lua -msgid "" -"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] " -"distance[1-20] y_offset[-10 to 10]”" -msgstr "" diff --git a/mods/ENTITIES/mobs/locale/template.pot b/mods/ENTITIES/mobs/locale/template.pot deleted file mode 100644 index 90e5241..0000000 --- a/mods/ENTITIES/mobs/locale/template.pot +++ /dev/null @@ -1,124 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-02 16:48+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: api.lua -msgid "Mob has been protected!" -msgstr "" - -#: api.lua -msgid "@1 (Tamed)" -msgstr "" - -#: api.lua -msgid "Not tamed!" -msgstr "" - -#: api.lua -msgid "@1 is owner!" -msgstr "" - -#: api.lua -msgid "Missed!" -msgstr "" - -#: api.lua -msgid "Already protected!" -msgstr "" - -#: api.lua -msgid "Protected!" -msgstr "" - -#: api.lua -msgid "@1 at full health (@2)" -msgstr "" - -#: api.lua -msgid "@1 has been tamed!" -msgstr "" - -#: api.lua -msgid "Enter name:" -msgstr "" - -#: api.lua -msgid "Rename" -msgstr "" - -#: crafts.lua -msgid "Name Tag" -msgstr "" - -#: crafts.lua -msgid "Leather" -msgstr "" - -#: crafts.lua -msgid "Raw Meat" -msgstr "" - -#: crafts.lua -msgid "Meat" -msgstr "" - -#: crafts.lua -msgid "Lasso (right-click animal to put in inventory)" -msgstr "" - -#: crafts.lua -msgid "Net (right-click animal to put in inventory)" -msgstr "" - -#: crafts.lua -msgid "Steel Shears (right-click to shear)" -msgstr "" - -#: crafts.lua -msgid "Mob Protection Rune" -msgstr "" - -#: crafts.lua -msgid "Saddle" -msgstr "" - -#: spawner.lua -msgid "Mob Spawner" -msgstr "" - -#: spawner.lua -msgid "Mob MinLight MaxLight Amount PlayerDist" -msgstr "" - -#: spawner.lua -msgid "Spawner Not Active (enter settings)" -msgstr "" - -#: spawner.lua -msgid "Spawner Active (@1)" -msgstr "" - -#: spawner.lua -msgid "Mob Spawner settings failed!" -msgstr "" - -#: spawner.lua -msgid "" -"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] " -"distance[1-20] y_offset[-10 to 10]”" -msgstr "" \ No newline at end of file diff --git a/mods/ENTITIES/mobs/locale/tr.po b/mods/ENTITIES/mobs/locale/tr.po deleted file mode 100644 index b9c06d5..0000000 --- a/mods/ENTITIES/mobs/locale/tr.po +++ /dev/null @@ -1,129 +0,0 @@ -# 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: mobs\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-02 16:48+0200\n" -"PO-Revision-Date: 2017-07-02 14:56+0200\n" -"Last-Translator: Wuzzy \n" -"Language-Team: \n" -"Language: tr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: api.lua -msgid "Mob has been protected!" -msgstr "" - -#: api.lua -msgid "@1 (Tamed)" -msgstr "" - -#: api.lua -msgid "Not tamed!" -msgstr "Evcil değil!" - -#: api.lua -msgid "@1 is owner!" -msgstr "Sahibi @1!" - -#: api.lua -msgid "Missed!" -msgstr "Kaçırdın!" - -#: api.lua -msgid "Already protected!" -msgstr "" - -#: api.lua -msgid "Protected!" -msgstr "" - -#: api.lua -msgid "@1 at full health (@2)" -msgstr "@1 tam canında (@2)" - -#: api.lua -msgid "@1 has been tamed!" -msgstr "@1 tamamen evcilleştirilmiştir!" - -#: api.lua -msgid "Enter name:" -msgstr "İsim gir:" - -#: api.lua -msgid "Rename" -msgstr "Yeniden adlandır" - -#: crafts.lua -msgid "Name Tag" -msgstr "İsim etiketi" - -#: crafts.lua -msgid "Leather" -msgstr "Deri" - -#: crafts.lua -msgid "Raw Meat" -msgstr "Çiğ et" - -#: crafts.lua -msgid "Meat" -msgstr "Et" - -#: crafts.lua -#, fuzzy -msgid "Lasso (right-click animal to put in inventory)" -msgstr "Kement (hayvana sağ tıklayarak envantere koy)" - -#: crafts.lua -msgid "Net (right-click animal to put in inventory)" -msgstr "Ağ (hayvana sağ tıklayarak envantere koy)" - -#: crafts.lua -msgid "Steel Shears (right-click to shear)" -msgstr "Çelik makas (sağ tıklayarak kes)" - -#: crafts.lua -msgid "Mob Protection Rune" -msgstr "" - -#: crafts.lua -msgid "Saddle" -msgstr "" - -#: spawner.lua -msgid "Mob Spawner" -msgstr "Canavar Yaratıcı" - -#: spawner.lua -msgid "Mob MinLight MaxLight Amount PlayerDist" -msgstr "Mob MinIşık MaxIşık Miktar OyuncuMesafesi" - -#: spawner.lua -msgid "Spawner Not Active (enter settings)" -msgstr "Yaratıcı aktif değil (ayarlara gir)" - -#: spawner.lua -msgid "Spawner Active (@1)" -msgstr "Yaratıcı aktif (@1)" - -#: spawner.lua -msgid "Mob Spawner settings failed!" -msgstr "Yaratıcı ayarları uygulanamadı." - -#: spawner.lua -#, fuzzy -msgid "" -"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] " -"distance[1-20] y_offset[-10 to 10]”" -msgstr "" -"> isim min_isik[0-14] max_isik[0-14] alandaki_max_canavar_sayisi[kapatmak " -"icin 0] mesafe[1-20] y_cikinti[-10 ve 10 arası]" \ No newline at end of file diff --git a/mods/ENTITIES/mobs/lucky_block.lua b/mods/ENTITIES/mobs/lucky_block.lua deleted file mode 100644 index 0c2794f..0000000 --- a/mods/ENTITIES/mobs/lucky_block.lua +++ /dev/null @@ -1,15 +0,0 @@ - -if minetest.get_modpath("lucky_block") then - - lucky_block:add_blocks({ - {"dro", {"mobs:meat_raw"}, 5}, - {"dro", {"mobs:meat"}, 5}, - {"dro", {"mobs:nametag"}, 1}, - {"dro", {"mobs:leather"}, 5}, - {"dro", {"mobs:net"}, 1}, - {"dro", {"mobs:magic_lasso"}, 1}, - {"dro", {"mobs:shears"}, 1}, - {"dro", {"mobs:protector"}, 1}, - {"lig"}, - }) -end diff --git a/mods/ENTITIES/mobs/mod.conf b/mods/ENTITIES/mobs/mod.conf deleted file mode 100644 index f3a3ad7..0000000 --- a/mods/ENTITIES/mobs/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = mobs diff --git a/mods/ENTITIES/mobs/mount.lua b/mods/ENTITIES/mobs/mount.lua deleted file mode 100644 index 7fefd52..0000000 --- a/mods/ENTITIES/mobs/mount.lua +++ /dev/null @@ -1,451 +0,0 @@ - --- lib_mount by Blert2112 (edited by TenPlus1) - -local enable_crash = false -local crash_threshold = 6.5 -- ignored if enable_crash=false - ------------------------------------------------------------------------------- - --- --- Helper functions --- - -local node_ok = function(pos, fallback) - - fallback = fallback or mobs.fallback_node - - local node = minetest.get_node_or_nil(pos) - - if node and minetest.registered_nodes[node.name] then - return node - end - - return {name = fallback} -end - - -local function node_is(pos) - - local node = node_ok(pos) - - if node.name == "air" then - return "air" - end - - if minetest.get_item_group(node.name, "lava") ~= 0 then - return "lava" - end - - if minetest.get_item_group(node.name, "liquid") ~= 0 then - return "liquid" - end - - if minetest.registered_nodes[node.name].walkable == true then - return "walkable" - end - - return "other" -end - - -local function get_sign(i) - - i = i or 0 - - if i == 0 then - return 0 - else - return i / math.abs(i) - end -end - - -local function get_velocity(v, yaw, y) - - local x = -math.sin(yaw) * v - local z = math.cos(yaw) * v - - return {x = x, y = y, z = z} -end - - -local function get_v(v) - return math.sqrt(v.x * v.x + v.z * v.z) -end - - -local function force_detach(player) - - local attached_to = player:get_attach() - - if not attached_to then - return - end - - local entity = attached_to:get_luaentity() - - if entity.driver - and entity.driver == player then - - entity.driver = nil - end - - player:set_detach() - player_api.player_attached[player:get_player_name()] = false - player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) - player_api.player_set_animation(player, "stand" , 30) - player:set_properties({visual_size = {x = 1, y = 1} }) - -end - -------------------------------------------------------------------------------- - - -minetest.register_on_leaveplayer(function(player) - force_detach(player) -end) - -minetest.register_on_shutdown(function() - local players = minetest.get_connected_players() - for i = 1, #players do - force_detach(players[i]) - end -end) - -minetest.register_on_dieplayer(function(player) - force_detach(player) - return true -end) - -------------------------------------------------------------------------------- - -function mobs.attach(entity, player) - - local attach_at, eye_offset = {}, {} - - 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} - entity.driver_scale = entity.driver_scale or {x = 1, y = 1} - - local rot_view = 0 - - if entity.player_rotation.y == 90 then - rot_view = math.pi/2 - end - - attach_at = entity.driver_attach_at - eye_offset = entity.driver_eye_offset - entity.driver = player - - force_detach(player) - - player:set_attach(entity.object, "", attach_at, entity.player_rotation) - player_api.player_attached[player:get_player_name()] = true - player:set_eye_offset(eye_offset, {x = 0, y = 0, z = 0}) - - player:set_properties({ - visual_size = { - x = entity.driver_scale.x, - y = entity.driver_scale.y - } - }) - - minetest.after(0.2, function() - player_api.player_set_animation(player, "sit" , 30) - end) - - --player:set_look_yaw(entity.object:getyaw() - rot_view) - player:set_look_horizontal(entity.object:getyaw() - rot_view) -end - - -function mobs.detach(player, offset) - - force_detach(player) - - player_api.player_set_animation(player, "stand" , 30) - - local pos = player:getpos() - - pos = {x = pos.x + offset.x, y = pos.y + 0.2 + offset.y, z = pos.z + offset.z} - - minetest.after(0.1, function() - player:setpos(pos) - end) -end - - -function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) - - local rot_steer, rot_view = math.pi/2, 0 - - if entity.player_rotation.y == 90 then - rot_steer, rot_view = 0, math.pi/2 - end - - local acce_y = 0 - local velo = entity.object:getvelocity() - - entity.v = get_v(velo) * get_sign(entity.v) - - -- process controls - if entity.driver then - ---print ("---velo", get_v(velo)) - - 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 - - entity.v = entity.v - entity.accel / 10 - end - - -- fix mob rotation --- entity.object:setyaw(entity.driver:get_look_yaw() - entity.rotate) - entity.object:setyaw(entity.driver:get_look_horizontal() - entity.rotate) - - 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 - - -- jump - if ctrl.jump then - - if velo.y == 0 then - velo.y = velo.y + entity.jump_height - acce_y = acce_y + (acce_y * 3) + 1 - end - end - - end - end - - -- 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 - - return - end - - -- set moving animation - if moving_anim then - mobs:set_animation(entity, moving_anim) - end - - -- Stop! - local s = get_sign(entity.v) - - entity.v = entity.v - 0.02 * s - - if s ~= get_sign(entity.v) then - - entity.object:setvelocity({x = 0, y = 0, z = 0}) - entity.v = 0 - return - end - - -- enforce speed limit forward and reverse - local max_spd = entity.max_speed_reverse - - if get_sign(entity.v) >= 0 then - max_spd = entity.max_speed_forward - end - - if math.abs(entity.v) > max_spd then - entity.v = entity.v - get_sign(entity.v) - end - - -- Set position, velocity and acceleration - local p = entity.object:getpos() - local new_velo = {x = 0, y = 0, z = 0} - local new_acce = {x = 0, y = -9.8, z = 0} - - p.y = p.y - 0.5 - - local ni = node_is(p) - 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 - }) - - entity.object:punch(entity.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = entity.lava_damage} - }, nil) - - entity.lava_counter = 0 - end - end - - if entity.terrain_type == 2 - or entity.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 - new_acce.y = 20 - else - new_acce.y = 5 - end - else - if math.abs(velo.y) < 1 then - local pos = entity.object:getpos() - pos.y = math.floor(pos.y) + 0.5 - entity.object:setpos(pos) - velo.y = 0 - end - end - else - v = v * 0.25 - end - end - - new_velo = get_velocity(v, entity.object:getyaw() - rot_view, velo.y) - new_acce.y = new_acce.y + acce_y - - entity.object:setvelocity(new_velo) - entity.object:setacceleration(new_acce) - - -- CRASH! - if enable_crash then - - local intensity = entity.v2 - v - - if intensity >= crash_threshold then - ---print("----------- crash", intensity) - - entity.object:punch(entity.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = intensity} - }, nil) - - end - end - - entity.v2 = v -end - - --- directional flying routine by D00Med (edited by TenPlus1) - -function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim) - - local ctrl = entity.driver:get_player_control() - local velo = entity.object:getvelocity() - local dir = entity.driver:get_look_dir() --- local yaw = entity.driver:get_look_yaw() - local yaw = entity.driver:get_look_horizontal() + 1.57 -- offset fix between old and new commands - local rot_steer, rot_view = math.pi / 2, 0 - - if entity.player_rotation.y == 90 then - rot_steer, rot_view = 0, math.pi / 2 - end - - if ctrl.up then - entity.object:setvelocity({ - x = dir.x * speed, - y = dir.y * speed + 2, - z = dir.z * speed - }) - - elseif ctrl.down then - entity.object:setvelocity({ - x = -dir.x * speed, - y = dir.y * speed + 2, - z = -dir.z * speed - }) - - elseif not ctrl.down or ctrl.up or ctrl.jump then - entity.object:setvelocity({x = 0, y = -2, z = 0}) - end - - entity.object:setyaw(yaw + math.pi + math.pi / 2 - entity.rotate) - - -- firing arrows - if ctrl.LMB and ctrl.sneak and shoots then - - local pos = entity.object:getpos() - local obj = minetest.add_entity({ - x = pos.x + 0 + dir.x * 2.5, - y = pos.y + 1.5 + dir.y, - 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} --- local yaw = entity.driver:get_look_yaw() - local yaw = entity.driver:get_look_horizontal() - obj:setyaw(yaw + math.pi / 2) - obj:setvelocity(vec) - else - obj:remove() - end - end - - -- change animation if stopped - if velo.x == 0 and velo.y == 0 and velo.z == 0 then - - mobs:set_animation(entity, stand_anim) - else - -- moving animation - mobs:set_animation(entity, moving_anim) - end -end diff --git a/mods/ENTITIES/mobs/readme.MD b/mods/ENTITIES/mobs/readme.MD deleted file mode 100644 index 0fee129..0000000 --- a/mods/ENTITIES/mobs/readme.MD +++ /dev/null @@ -1,72 +0,0 @@ - -MOBS REDO for MINETEST - -Built from PilzAdam's original Simple Mobs with additional mobs by KrupnoPavel, Zeg9, ExeterDad and AspireMint. - - -This mod contains the API only for adding your own mobs into the world, so please use the additional modpacks to add animals, monsters etc. - - -https://forum.minetest.net/viewtopic.php?f=11&t=9917 - - -Crafts: - - - Nametag (paper, black dye, string) can be used right-click on a tamed mob to give them a name. - - Nets can be used to right-click tamed mobs to pick them up and place inside inventory as a spawn egg. - - Magic Lasso is similar to nets but with a better chance of picking up larger mobs. - - Shears are used to right-click sheep and return 1-3 wool. - - Protection Rune lets you protect tamed mobs from harm by other players - -Lucky Blocks: 9 - - -Changelog: -- 1.37- Added support for Raymoo's CMI (common mob interface) mod: https://forum.minetest.net/viewtopic.php?f=9&t=15448 -- 1.36- Death check added, if mob dies in fire/lava/with lava pick then drops are cooked -- 1.35- Added owner_loyal flag for owned mobs to attack player enemies, also fixed group_attack -- 1.34- Added function to fly mob using directional movement (thanks D00Med for flying code) -- 1.33- Added functions to mount ride mobs (mobs.attach, mobs.detach, mobs.drive) many thanks to Blert2112 -- 1.32- Added new spawn check to count specific mobs AND new minetest.conf setting to chance spawn chance and numbers, added ability to protect tamed mobs -- 1.31- Added 'attack_animals' and 'specific_attack' flags for custom monster attacks, also 'mob_difficulty' .conf setting to make mobs harder. -- 1.30- Added support for invisibility mod (mobs cant attack what they cant see), tweaked and tidied code -- 1.29- Split original Mobs Redo into a modpack to make it easier to disable mob sets (animal, monster, npc) or simply use the Api itself for your own mod -- 1.28- New damage system added with ability for mob to be immune to weapons or healed by them :) -- 1.27- Added new sheep, lava flan and spawn egg textures. New Lava Pick tool smelts what you dig. New atan checking function. -- 1.26- Pathfinding feature added thanks to rnd, when monsters attack they become scary smart in finding you :) also, beehive produces honey now :) -- 1.25- Mobs no longer spawn within 12 blocks of player or despawn within same range, spawners now have player detection, Code tidy and tweak. -- 1.24- Added feature where certain animals run away when punched (runaway = true in mob definition) -- 1.23- Added mob spawner block for admin to setup spawners in-game (place and right click to enter settings) -- 1.22- Added ability to name tamed animals and npc using nametags, also npc will attack anyone who punches them apart from owner -- 1.21- Added some more error checking to reduce serialize.h error and added height checks for falling off cliffs (thanks cmdskp) -- 1.20- Error checking added to remove bad mobs, out of map limit mobs and stop serialize.h error -- 1.19- Chickens now drop egg items instead of placing the egg, also throwing eggs result in 1/8 chance of spawning chick -- 1.18- Added docile_by_day flag so that monsters will not attack automatically during daylight hours unless hit first -- 1.17- Added 'dogshoot' attack type, shoots when out of reach, melee attack when in reach, also api tweaks and self.reach added -- 1.16- Mobs follow multiple items now, Npc's can breed -- 1.15- Added Feeding/Taming/Breeding function, right-click to pick up any sheep with X mark on them and replace with new one to fix compatibility. -- 1.14- All .self variables saved in staticdata, Fixed self.health bug -- 1.13- Added capture function (thanks blert2112) chance of picking up mob with hand; net; magic lasso, replaced some .x models with newer .b3d one's -- 1.12- Added animal ownership so that players cannot steal your tamed animals -- 1.11- Added flying mobs (and swimming), fly=true and fly_in="air" or "deafult:water_source" for fishy -- 1,10- Footstep removed (use replace), explosion routine added for exploding mobs. -- 1.09- reworked breeding routine, added mob rotation value, added footstep feature, added jumping mobs with sounds feature, added magic lasso for picking up animals -- 1.08- Mob throwing attack has been rehauled so that they can damage one another, also drops and on_die function added -- 1.07- Npc's can now be set to follow player or stand by using self.order and self.owner variables -- beta- Npc mob added, kills monsters, attacks player when punched, right click with food to heal or gold lump for drop -- 1.06- Changed recovery times after breeding, and time taken to grow up (can be sped up by feeding baby animal) -- 1.05- Added ExeterDad's bunny's which can be picked up and tamed with 4 carrots from farming redo or farming_plus, also shears added to get wool from sheep and lastly Jordach/BSD's kitten -- 1.04- Added mating for sheep, cows and hogs... feed animals to make horny and hope for a baby which is half size, will grow up quick though :) -- 1.03- Added mob drop/replace feature so that chickens can drop eggs, cow/sheep can eat grass/wheat etc. -- 1.02- Sheared sheep are remembered and spawn shaven, Warthogs will attack when threatened, Api additions -- 1.01- Mobs that suffer fall damage or die in water/lava/sunlight will now drop items -- 1.0 - more work on Api so that certain mobs can float in water while some sink like a brick :) -- 0.9 - Spawn eggs added for all mobs (admin only, cannot be placed in protected areas)... Api tweaked -- 0.8 - Added sounds to monster mobs (thanks Cyberpangolin for the sfx) and also chicken sound -- 0.7 - mobs.protected switch added to api.lua, when set to 1 mobs no longer spawn in protected areas, also bug fixes -- 0.6 - Api now supports multi-textured mobs, e.g oerkki, dungeon master, rats and chickens have random skins when spawning (sheep fix TODO), also new Honey block -- 0.5 - Mobs now float in water, die from falling, and some code improvements -- 0.4 - Dungeon Masters and Mese Monsters have much better aim due to shoot_offset, also they can both shoot through nodes that aren't walkable (flowers, grass etc) plus new sheep sound :) -- 0.3 - Added LOTT's Spider mob, made Cobwebs, added KPavel's Bee with Honey and Beehives (made texture), Warthogs now have sound and can be tamed, taming of shaved sheep or milked cow with 8 wheat so it will not despawn, many bug fixes :) -- 0.2 - Cooking bucket of milk into cheese now returns empty bucket -- 0.1 - Initial Release diff --git a/mods/ENTITIES/mobs/sounds/default_punch.ogg b/mods/ENTITIES/mobs/sounds/default_punch.ogg deleted file mode 100644 index 28a500b..0000000 Binary files a/mods/ENTITIES/mobs/sounds/default_punch.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs/sounds/license.txt b/mods/ENTITIES/mobs/sounds/license.txt deleted file mode 100644 index 3b160fe..0000000 --- a/mods/ENTITIES/mobs/sounds/license.txt +++ /dev/null @@ -1,7 +0,0 @@ -Creative Commons sounds from Freesound.org - -mobs_swing.ogg by qubodup - - http://freesound.org/people/qubodup/sounds/60012/ - -mobs_spell.ogg by littlerobotsoundfactory - - http://freesound.org/people/LittleRobotSoundFactory/sounds/270396/ diff --git a/mods/ENTITIES/mobs/sounds/mobs_spell.ogg b/mods/ENTITIES/mobs/sounds/mobs_spell.ogg deleted file mode 100644 index 455b54f..0000000 Binary files a/mods/ENTITIES/mobs/sounds/mobs_spell.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs/sounds/mobs_swing.ogg b/mods/ENTITIES/mobs/sounds/mobs_swing.ogg deleted file mode 100644 index ffe6a9c..0000000 Binary files a/mods/ENTITIES/mobs/sounds/mobs_swing.ogg and /dev/null differ diff --git a/mods/ENTITIES/mobs/spawner.lua b/mods/ENTITIES/mobs/spawner.lua deleted file mode 100644 index 8aa5e32..0000000 --- a/mods/ENTITIES/mobs/spawner.lua +++ /dev/null @@ -1,180 +0,0 @@ - --- intllib -local MP = minetest.get_modpath(minetest.get_current_modname()) -local S, NS = dofile(MP .. "/intllib.lua") - --- mob spawner - -local spawner_default = "mobs_animal:pumba 10 15 0 0" - -minetest.register_node("mobs:spawner", { - tiles = {"mob_spawner.png"}, - drawtype = "glasslike", - paramtype = "light", - walkable = true, - description = S("Mob Spawner"), - groups = {cracky = 1}, - - on_construct = function(pos) - - local meta = minetest.get_meta(pos) - - -- text entry formspec - meta:set_string("formspec", - "field[text;" .. S("Mob MinLight MaxLight Amount PlayerDist") .. ";${command}]") - meta:set_string("infotext", S("Spawner Not Active (enter settings)")) - meta:set_string("command", spawner_default) - end, - - on_right_click = function(pos, placer) - - if minetest.is_protected(pos, placer:get_player_name()) then - return - end - end, - - on_receive_fields = function(pos, formname, fields, sender) - - if not fields.text or fields.text == "" then - return - end - - local meta = minetest.get_meta(pos) - local comm = fields.text:split(" ") - local name = sender:get_player_name() - - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - - local mob = comm[1] -- mob to spawn - local mlig = tonumber(comm[2]) -- min light - local xlig = tonumber(comm[3]) -- max light - local num = tonumber(comm[4]) -- total mobs in area - local pla = tonumber(comm[5]) -- player distance (0 to disable) - local yof = tonumber(comm[6]) or 0 -- Y offset to spawn mob - - if mob and mob ~= "" and mobs.spawning_mobs[mob] == true - and num and num >= 0 and num <= 10 - and mlig and mlig >= 0 and mlig <= 15 - and xlig and xlig >= 0 and xlig <= 15 - and pla and pla >=0 and pla <= 20 - and yof and yof > -10 and yof < 10 then - - meta:set_string("command", fields.text) - meta:set_string("infotext", S("Spawner Active (@1)", mob)) - - else - minetest.chat_send_player(name, S("Mob Spawner settings failed!")) - minetest.chat_send_player(name, - S("Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] distance[1-20] y_offset[-10 to 10]”")) - end - end, -}) - - -local max_per_block = tonumber(minetest.setting_get("max_objects_per_block") or 99) - --- spawner abm -minetest.register_abm({ - label = "Mob spawner node", - nodenames = {"mobs:spawner"}, - interval = 10, - chance = 4, - catch_up = false, - - action = function(pos, node, active_object_count, active_object_count_wider) - - -- return if too many entities already - if active_object_count_wider >= max_per_block then - return - end - - -- get meta and command - local meta = minetest.get_meta(pos) - local comm = meta:get_string("command"):split(" ") - - -- get settings from command - local mob = comm[1] - local mlig = tonumber(comm[2]) - local xlig = tonumber(comm[3]) - local num = tonumber(comm[4]) - local pla = tonumber(comm[5]) or 0 - local yof = tonumber(comm[6]) or 0 - - -- if amount is 0 then do nothing - if num == 0 then - return - end - - -- are we spawning a registered mob? - if not mobs.spawning_mobs[mob] then - --print ("--- mob doesn't exist", mob) - return - end - - -- check objects inside 9x9 area around spawner - local objs = minetest.get_objects_inside_radius(pos, 9) - local count = 0 - local ent = nil - - -- count mob objects of same type in area - for k, obj in ipairs(objs) do - - ent = obj:get_luaentity() - - if ent and ent.name and ent.name == mob then - count = count + 1 - end - end - - -- is there too many of same type? - if count >= num then - return - end - - -- spawn mob if player detected and in range - if pla > 0 then - - local in_range = 0 - local objs = minetest.get_objects_inside_radius(pos, pla) - - for _,oir in pairs(objs) do - - if oir:is_player() then - - in_range = 1 - - break - end - end - - -- player not found - if in_range == 0 then - return - end - end - - -- find air blocks within 5 nodes of spawner - local air = minetest.find_nodes_in_area( - {x = pos.x - 5, y = pos.y + yof, z = pos.z - 5}, - {x = pos.x + 5, y = pos.y + yof, z = pos.z + 5}, - {"air"}) - - -- spawn in random air block - if air and #air > 0 then - - local pos2 = air[math.random(#air)] - local lig = minetest.get_node_light(pos2) or 0 - - pos2.y = pos2.y + 0.5 - - -- only if light levels are within range - if lig >= mlig and lig <= xlig then - minetest.add_entity(pos2, mob) - end - end - - end -}) diff --git a/mods/ENTITIES/mobs/textures/mob_spawner.png b/mods/ENTITIES/mobs/textures/mob_spawner.png deleted file mode 100644 index 8f0ac39..0000000 Binary files a/mods/ENTITIES/mobs/textures/mob_spawner.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_blood.png b/mods/ENTITIES/mobs/textures/mobs_blood.png deleted file mode 100644 index 77cfbda..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_blood.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_chicken_egg.png b/mods/ENTITIES/mobs/textures/mobs_chicken_egg.png deleted file mode 100644 index be8a4e1..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_chicken_egg.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_chicken_egg_overlay.png b/mods/ENTITIES/mobs/textures/mobs_chicken_egg_overlay.png deleted file mode 100644 index e81716a..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_chicken_egg_overlay.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_leather.png b/mods/ENTITIES/mobs/textures/mobs_leather.png deleted file mode 100644 index 3205e5d..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_leather.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_magic_lasso.png b/mods/ENTITIES/mobs/textures/mobs_magic_lasso.png deleted file mode 100644 index befdc11..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_magic_lasso.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_meat.png b/mods/ENTITIES/mobs/textures/mobs_meat.png deleted file mode 100644 index 4c63fdd..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_meat.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_meat_raw.png b/mods/ENTITIES/mobs/textures/mobs_meat_raw.png deleted file mode 100644 index 0dea4ec..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_meat_raw.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_nametag.png b/mods/ENTITIES/mobs/textures/mobs_nametag.png deleted file mode 100644 index 74005b3..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_nametag.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_net.png b/mods/ENTITIES/mobs/textures/mobs_net.png deleted file mode 100644 index df7c3a6..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_net.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_noentry_particle.png b/mods/ENTITIES/mobs/textures/mobs_noentry_particle.png deleted file mode 100644 index 87938ff..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_noentry_particle.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_protect_particle.png b/mods/ENTITIES/mobs/textures/mobs_protect_particle.png deleted file mode 100644 index debe20c..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_protect_particle.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_protector.png b/mods/ENTITIES/mobs/textures/mobs_protector.png deleted file mode 100644 index f3937b7..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_protector.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_saddle.png b/mods/ENTITIES/mobs/textures/mobs_saddle.png deleted file mode 100644 index e9d42f8..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_saddle.png and /dev/null differ diff --git a/mods/ENTITIES/mobs/textures/mobs_shears.png b/mods/ENTITIES/mobs/textures/mobs_shears.png deleted file mode 100644 index aa16f2e..0000000 Binary files a/mods/ENTITIES/mobs/textures/mobs_shears.png and /dev/null differ diff --git a/mods/ENTITIES/modpack.txt b/mods/ENTITIES/modpack.txt deleted file mode 100644 index e69de29..0000000 diff --git a/mods/HUD/base_textures/init.lua b/mods/HUD/base_textures/init.lua deleted file mode 100644 index 643c511..0000000 --- a/mods/HUD/base_textures/init.lua +++ /dev/null @@ -1 +0,0 @@ --- This mod has no code and is only a collection of textures. diff --git a/mods/HUD/base_textures/mod.conf b/mods/HUD/base_textures/mod.conf deleted file mode 100644 index 682b09d..0000000 --- a/mods/HUD/base_textures/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = base_textures diff --git a/mods/HUD/creative/README.txt b/mods/HUD/creative/README.txt deleted file mode 100644 index 82357f3..0000000 --- a/mods/HUD/creative/README.txt +++ /dev/null @@ -1,12 +0,0 @@ -Minetest Game mod: creative -=========================== -See license.txt for license information. - -Authors of source code ----------------------- -Originally by Perttu Ahola (celeron55) (MIT) -Jean-Patrick G. (kilbith) (MIT) - -Author of media (textures) --------------------------- -Jean-Patrick G. (kilbith) (CC BY-SA 3.0) diff --git a/mods/HUD/creative/depends.txt b/mods/HUD/creative/depends.txt deleted file mode 100644 index a58c989..0000000 --- a/mods/HUD/creative/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -init -sfinv diff --git a/mods/HUD/creative/init.lua b/mods/HUD/creative/init.lua deleted file mode 100644 index 51d6f79..0000000 --- a/mods/HUD/creative/init.lua +++ /dev/null @@ -1,63 +0,0 @@ -creative = {} - -local creative_mode_cache = minetest.settings:get_bool("creative_mode") - -function creative.is_enabled_for(name) - return creative_mode_cache -end - -dofile(minetest.get_modpath("creative") .. "/inventory.lua") - -if creative_mode_cache then - -- Dig time is modified according to difference (leveldiff) between tool - -- 'maxlevel' and node 'level'. Digtime is divided by the larger of - -- leveldiff and 1. - -- To speed up digging in creative, hand 'maxlevel' and 'digtime' have been - -- increased such that nodes of differing levels have an insignificant - -- effect on digtime. - local digtime = 42 - local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 256} - - minetest.register_item(":", { - type = "none", - wield_image = "wieldhand.png", - wield_scale = {x = 1, y = 1, z = 2.5}, - range = 10, - tool_capabilities = { - full_punch_interval = 0.5, - max_drop_level = 3, - groupcaps = { - crumbly = caps, - cracky = caps, - snappy = caps, - choppy = caps, - oddly_breakable_by_hand = caps, - }, - damage_groups = {fleshy = 10}, - } - }) -end - --- Unlimited node placement -minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) - return creative.is_enabled_for(placer:get_player_name()) -end) - --- Don't pick up if the item is already in the inventory -local old_handle_node_drops = minetest.handle_node_drops -function minetest.handle_node_drops(pos, drops, digger) - if not digger or not digger:is_player() then - return - end - if not creative.is_enabled_for(digger:get_player_name()) then - return old_handle_node_drops(pos, drops, digger) - end - local inv = digger:get_inventory() - if inv then - for _, item in ipairs(drops) do - if not inv:contains_item("main", item, true) then - inv:add_item("main", item) - end - end - end -end diff --git a/mods/HUD/creative/inventory.lua b/mods/HUD/creative/inventory.lua deleted file mode 100644 index 05ee50e..0000000 --- a/mods/HUD/creative/inventory.lua +++ /dev/null @@ -1,177 +0,0 @@ -local player_inventory = {} - -function creative.init_creative_inventory(player) - local player_name = player:get_player_name() - player_inventory[player_name] = { - size = 0, - filter = "", - start_i = 0 - } - - minetest.create_detached_inventory("creative_" .. player_name, { - allow_move = function(inv, from_list, from_index, to_list, to_index, count, player2) - if not to_list == "main" then - return count - else - return 0 - end - end, - allow_put = function(inv, listname, index, stack, player2) - return 0 - end, - allow_take = function(inv, listname, index, stack, player2) - return -1 - end, - on_move = function(inv, from_list, from_index, to_list, to_index, count, player2) - end, - on_put = function(inv, listname, index, stack, player2) - end, - on_take = function(inv, listname, index, stack, player2) - if stack and stack:get_count() > 0 then - minetest.log("action", player_name .. " takes " .. stack:get_name().. " from creative inventory") - end - end, - }, player_name) - - return player_inventory[player_name] -end - -function creative.update_creative_inventory(player_name, tab_content) - local creative_list = {} - local inv = player_inventory[player_name] or - creative.init_creative_inventory(minetest.get_player_by_name(player_name)) - local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) - - for name, def in pairs(tab_content) do - if not (def.groups.not_in_creative_inventory == 1) and - def.description and def.description ~= "" and - (def.name:find(inv.filter, 1, true) or - def.description:lower():find(inv.filter, 1, true)) then - creative_list[#creative_list+1] = name - end - end - - table.sort(creative_list) - player_inv:set_size("main", #creative_list) - player_inv:set_list("main", creative_list) - inv.size = #creative_list -end - --- Create the trash field -local trash = minetest.create_detached_inventory("creative_trash", { - -- Allow the stack to be placed and remove it in on_put() - -- This allows the creative inventory to restore the stack - allow_put = function(inv, listname, index, stack, player) - return stack:get_count() - end, - on_put = function(inv, listname) - inv:set_list(listname, {}) - end, -}) -trash:set_size("main", 1) - -creative.formspec_add = "" - -function creative.register_tab(name, title, items) - sfinv.register_page("creative:" .. name, { - title = title, - is_in_nav = function(self, player, context) - return creative.is_enabled_for(player:get_player_name()) - end, - get = function(self, player, context) - local player_name = player:get_player_name() - creative.update_creative_inventory(player_name, items) - local inv = player_inventory[player_name] - local start_i = inv.start_i or 0 - local pagenum = math.floor(start_i / (3*8) + 1) - local pagemax = math.ceil(inv.size / (3*8)) - return sfinv.make_formspec(player, context, - "label[6.2,3.35;" .. minetest.colorize("#FFFF00", tostring(pagenum)) .. " / " .. tostring(pagemax) .. "]" .. - [[ - image[4.06,3.4;0.8,0.8;creative_trash_icon.png] - listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] - list[current_player;main;0,4.7;8,1;] - list[current_player;main;0,5.85;8,3;8] - list[detached:creative_trash;main;4,3.3;1,1;] - listring[] - button[5.4,3.2;0.8,0.9;creative_prev;<] - button[7.25,3.2;0.8,0.9;creative_next;>] - button[2.1,3.4;0.8,0.5;creative_search;?] - button[2.75,3.4;0.8,0.5;creative_clear;X] - tooltip[creative_search;Search] - tooltip[creative_clear;Reset] - listring[current_player;main] - field_close_on_enter[creative_filter;false] - ]] .. - "field[0.3,3.5;2.2,1;creative_filter;;" .. minetest.formspec_escape(inv.filter) .. "]" .. - "listring[detached:creative_" .. player_name .. ";main]" .. - "list[detached:creative_" .. player_name .. ";main;0,0;8,3;" .. tostring(start_i) .. "]" .. - init.get_hotbar_bg(0,4.7) .. - init.gui_bg .. init.gui_bg_img .. init.gui_slots - .. creative.formspec_add, false) - end, - on_enter = function(self, player, context) - local player_name = player:get_player_name() - local inv = player_inventory[player_name] - if inv then - inv.start_i = 0 - end - end, - on_player_receive_fields = function(self, player, context, fields) - local player_name = player:get_player_name() - local inv = player_inventory[player_name] - assert(inv) - - if fields.creative_clear then - inv.start_i = 0 - inv.filter = "" - creative.update_creative_inventory(player_name, items) - sfinv.set_player_inventory_formspec(player, context) - elseif fields.creative_search or - fields.key_enter_field == "creative_filter" then - inv.start_i = 0 - inv.filter = fields.creative_filter:lower() - creative.update_creative_inventory(player_name, items) - sfinv.set_player_inventory_formspec(player, context) - elseif not fields.quit then - local start_i = inv.start_i or 0 - - if fields.creative_prev then - start_i = start_i - 3*8 - if start_i < 0 then - start_i = inv.size - (inv.size % (3*8)) - if inv.size == start_i then - start_i = math.max(0, inv.size - (3*8)) - end - end - elseif fields.creative_next then - start_i = start_i + 3*8 - if start_i >= inv.size then - start_i = 0 - end - end - - inv.start_i = start_i - sfinv.set_player_inventory_formspec(player, context) - end - end - }) -end - -minetest.register_on_joinplayer(function(player) - creative.update_creative_inventory(player:get_player_name(), minetest.registered_items) -end) - -creative.register_tab("all", "All", minetest.registered_items) -creative.register_tab("nodes", "Nodes", minetest.registered_nodes) -creative.register_tab("tools", "Tools", minetest.registered_tools) -creative.register_tab("craftitems", "Items", minetest.registered_craftitems) - -local old_homepage_name = sfinv.get_homepage_name -function sfinv.get_homepage_name(player) - if creative.is_enabled_for(player:get_player_name()) then - return "creative:all" - else - return old_homepage_name(player) - end -end diff --git a/mods/HUD/creative/license.txt b/mods/HUD/creative/license.txt deleted file mode 100644 index 4ad1d5f..0000000 --- a/mods/HUD/creative/license.txt +++ /dev/null @@ -1,60 +0,0 @@ -License of source code ----------------------- - -The MIT License (MIT) -Copyright (C) 2012-2016 Perttu Ahola (celeron55) -Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or -substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -For more details: -https://opensource.org/licenses/MIT - - -Licenses of media (textures) ----------------------------- - -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -Copyright (C) 2016 Jean-Patrick G. (kilbith) - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/HUD/creative/textures/creative_trash_icon.png b/mods/HUD/creative/textures/creative_trash_icon.png deleted file mode 100644 index e789ad6..0000000 Binary files a/mods/HUD/creative/textures/creative_trash_icon.png and /dev/null differ diff --git a/mods/HUD/hudbars/API.md b/mods/HUD/hudbars/API.md deleted file mode 100644 index a53344c..0000000 --- a/mods/HUD/hudbars/API.md +++ /dev/null @@ -1,196 +0,0 @@ -API documentation for the HUD bars mod -====================================== - -## Introduction -This API allows you to add, change, hide and unhide custom HUD bars for this mod. - -## Overview -To give you a *very* brief overview over this API, here is the basic workflow on how to add your own custom HUD bar: - -* Create images for your HUD bar -* Call `hb.register_hudbar` to make the definition of the HUD bar known to this mod -* Call `hb.init_hudbar` for each player for which you want to use previously defined HUD bar -* Use `hb.change_hudbar` whenever you need to change the values of a HUD bar of a certain player -* If you need it: Use `hb.hide_hudbar` and `hb.unhide_hudbar` to hide or unhide HUD bars of a certain player - -## The basic rules -In order to use this API, you should be aware of a few basic rules in order to understand it: - -* A HUD bar is an approximate graphical representation of the ratio of a current value and a maximum value, i.e. current health of 15 and maximum health of 20. A full HUD bar represents 100%, an empty HUD bar represents 0%. -* The current value must always be equal to or smaller then the maximum -* Both current value and maximum must not be smaller than 0 -* Both current value and maximum must be real numbers. So no NaN, infinity, etc. -* The HUD bar will be hidden if the maximum equals 0. This is intentional. -* The health and breath HUD bars are hardcoded. - -These are soft rules, the HUD bars mod will not enforce all of these. -But this mod has been programmed under the assumption that these rules are followed, for integrity. - -## Adding a HUD bar -To make a new HUD bar known to this mod, you need … - -* … an image of size 2×16 for the bar -* … an icon of size 16×16 (optional) -* … to register it with `hb.register_hudbar` - -### Bar image -The image for the bar will be repeated horizontally to denote the “value” of the HUD bar. -It **must** be of size 2×16. -If neccessary, the image will be split vertically in half, and only the left half of the image -is displayed. So the final HUD bar will always be displayed on a per-pixel basis. - -The default bar images are single-colored, but you can use other styles as well, for instance, -a vertical gradient. - -### Icon -A 16×16 image shown left of the HUD bar. This is optional. - -### `hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string)` -This function registers a new custom HUD bar definition to the HUD bars mod, so it can be later used to be displayed, changed, hidden -and unhidden on a per-player basis. -Note this does not yet display the HUD bar. - -The HUD bars will be displayed in a “first come, first serve” order. This API does not allow fow a custom order or a way to set it -manually in a reliable way. However, you can use the setting `hudbars_sorting` for this. See the advanced setting menu in Minetest -for more information. - - -#### Parameters -* `identifier`: A globally unique internal name for the HUD bar, will be used later to refer to it. Please only rely on alphanumeric characters for now. The identifiers “`health`” and “`breath`” are used internally for the built-in health and breath bar, respectively. Please do not use these names. -* `text_color`: A 3-octet number defining the color of the text. The octets denote, in this order red, green and blue and range from `0x00` (complete lack of this component) to `0xFF` (full intensity of this component). Example: `0xFFFFFF` for white. -* `label`: A string which is displayed on the HUD bar itself to describe the HUD bar. Try to keep this string short. -* `textures`: A table with the following fields: - * `bar`: The file name of the bar image (as string). This is only used for the `progress_bar` bar type (see `README.txt`, settings section). - * `icon`: The file name of the icon, as string. For the `progress_bar` type, it is shown as single image left of the bar, for the two statbar bar types, it is used as the statbar icon and will be repeated. This field can be `nil`, in which case no icon will be used, but this is not recommended, because the HUD bar will be invisible if the one of the statbar bar types is used. - * `bgicon`: The file name of the background icon, it is used as the background for the modern statbar mode only. This field can be `nil`, in which case no background icon will be displayed in this mode. -* `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value -* `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value -* `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it. -* `format_string`: This is optional; You can specify an alternative format string display the final text on the HUD bar. The default format string is “`%s: %d/%d`” (in this order: Label, current value, maximum value). See also the Lua documentation of `string.format`. - -#### Return value -Always `nil`. - - -## Displaying a HUD bar -After a HUD bar has been registered, they are not yet displayed yet for any player. HUD bars must be -explicitly initialized on a per-player basis. - -You probably want to do this in the `minetest.register_on_joinplayer`. - -### `hb.init_hudbar(player, identifier, start_value, start_max, start_hidden)` -This function initialzes and activates a previously registered HUD bar and assigns it to a -certain client/player. This has only to be done once per player and after that, you can change -the values using `hb.change_hudbar`. - -However, if `start_hidden` was set to `true` for the HUD bar (in `hb.register_hudbar`), the HUD bar -will initially be hidden, but the HUD elements are still sent to the client. Otherwise, -the HUD bar will be initially be shown to the player. - -#### Parameters -* `player`: `ObjectRef` of the player to which the new HUD bar should be displayed to. -* `identifier`: The identifier of the HUD bar type, as specified in `hb.register_hudbar`. -* `start_value`: The initial current value of the HUD bar. This is optional, `default_start_value` of the registration function will be used, if this is `nil`. -* `start_max`: The initial maximum value of the HUD bar. This is optional, `default_start_max` of the registration function will be used, if this is `nil` -* `start_hidden`: Whether the HUD bar is initially hidden. This is optional, `default_start_hidden` of the registration function will be used as default - -#### Return value -`true` on success, `false` otherwise. - - -## Modifying a HUD bar -After a HUD bar has been added, you can change the current and maximum value and other attributes on a per-player basis. -You use the function `hb.change_hudbar` for this. - -### `hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon, new_bgicon, new_bar, new_label, new_text_color)` -Changes the values and the appearance of an initialized HUD bar for a certain player. `new_value` -and `new_max_value` are the most important parameters as they specify the new current and maximum new values, you do not need -to worry too much about the other parameters. - -The following parameters are less important and provided for styling the HUD bar after registration (if -this is desired). The “styling” parameters parallel the parameters of `hb.register_hudbar`. It is -recommended to not change the style of a HUD bar too often as this can be distracting or confusing -for players. - -`new_value`, `new_max_value` `new_icon`, `new_bgicon`, `new_bar`, `new_label` and `new_text_color` can be -`nil`; if one of them is `nil`, that means the value is unchanged. If all those values are `nil`, this -function is a no-op. - -This function tries to minimize the amount of calls to `hud_change` of the Minetest Lua API -(and thus, network traffic), when you only change the value and/or maximum value. In this case, -`hud_change` is only called if it is actually needed, e.g. when the actual length of the bar -or the displayed string changed, so you do not have to worry about it. There is, however, no -such network optimization for the “styling” parameters, so keep this in mind. - -#### Parameters -* `player`: `ObjectRef` of the player to which the HUD bar belongs to -* `identifier`: The identifier of the HUD bar type to change, as specified in `hb.register_hudbar`. -* `new_value`: The new current value of the HUD bar -* `new_max_value`: The new maximum value of the HUD bar -* `new_icon`: File name of the new icon -* `new_bgicon`: File name of the new background icon for the modern-style statbar -* `new_bar`: File name of the new bar segment image -* `new_label`: A new text label of the HUD bar. Note the format string still applies -* `new_text_color`: A 3-octet number defining the new color of the text. - -#### Return value -`true` on success, `false` otherwise. - - -## Hiding and unhiding a HUD bar -You can also hide custom HUD bars, meaning they will not be displayed for a certain player. You can still -use `hb.change_hudbar` on a hidden HUD bar, the new values will be correctly displayed after the HUD bar -has been unhidden. Both functions will only call `hud_change` if there has been an actual change to avoid -unneccessary traffic. - -Note that the hidden state of a HUD bar will *not* be saved by this mod on server shutdown, so you may need -to write your own routines for this or by setting the correct value for `start_hidden` when calling -`hb.init_hudbar`. - -### `hb.hide_hudbar(player, identifier)` -Hides the specified HUD bar from the screen of the specified player. - -#### Parameters -* `player`: `ObjectRef` of the player to which the HUD bar belongs to -* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`. - -#### Return value -`true` on success, `false` otherwise. - - -### `hb.unhide_hudbar(player, identifier)` -Makes a previously hidden HUD bar visible again to a player. - -#### Parameters -* `player`: `ObjectRef` of the player to which the HUD bar belongs to -* `identifier`: The identifier of the HUD bar type to unhide, as specified in `hb.register_hudbar`. - -#### Return value -`true` on success, `false` otherwise. - - -## Reading HUD bar information -It is also possible to read information about existing HUD bars. - -### `hb.get_hudbar_state(player, identifier)` -Returns the current state of the active player's HUD bar. - -#### Parameters -* `player`: `ObjectRef` of the player to which the HUD bar belongs to -* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`. - -#### Return value -On success, returns a table which holds information on the current state of the HUD bar. Note -the table is a deep copy of the internal HUD bar state, it is *not* a reference; the information -hold by the table is only true for the moment you called this function. The fields of this table are: - -* `value`: Current value of HUD bar. -* `max`: Current maximum value of HUD bar. -* `hidden`: Boolean denoting whether the HUD bar is hidden. -* `barlength`: The length of the HUD bar in pixels. This field is meaningless if the HUD bar is currently hidden. -* `text`: The text shown on the HUD bar. This fiels is meaningless if the HUD bar is currently hidden. - -If the player does not exist, returns `nil` instead. - -### `hb.get_hudbar_identifiers()` -Returns a table of all currently registered HUD bar identifiers. diff --git a/mods/HUD/hudbars/README.md b/mods/HUD/hudbars/README.md deleted file mode 100644 index 4f72340..0000000 --- a/mods/HUD/hudbars/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# HUD bars - -## Description -This mod changes the HUD of Minetest. It replaces the default health and breath -symbols by horizontal colored bars with text showing the number. - -Furthermore, it enables other mods to add their own custom bars to the HUD, -this mod will place them accordingly. - -**Important**: Keep in mind if running a server with this mod, that the custom -position should be displayed correctly on every screen size. - -## Current version -The current version is 1.9.0. - -This software uses [semantic versioning](http://semver.org), as defined by version 2.0.0 of the SemVer -standard. - -## Settings -This mod can be configured quite a bit. You can change HUD bar appearance, offsets, ordering, and more. -Use the advanced settings menu in Minetest for detailed configuration. - -## API -The API is used to add your own custom HUD bars. -Documentation for the API of this mod can be found in `API.md`. - -## Legal -### License of source code -Author: Wuzzy (2015) - -Also: This mod was forked from the “Better HUD” [hud] mod by BlockMen. - -Translations: - -* German: Wuzzy -* Portuguese: BrunoMine -* Turkish: admicos - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License (WTFPL), version 2, as published by Sam Hocevar. - -### Licenses of textures - -* `hudbars_icon_health.png`—celeron55 (CC BY-SA 3.0), modified by BlockMen -* `hudbars_bgicon_health.png`—celeron55 (CC BY-SA 3.0), modified by BlockMen -* `hudbars_icon_breath.png`—kaeza (WTFPL), modified by BlockMen, modified again by Wuzzy -* `hudbars_bgicon_breath.png`—based on previous image, edited by Wuzzy (WTFPL) -* `hudbars_bar_health.png`—Wuzzy (WTFPL) -* `hudbars_bar_breath.png`—Wuzzy (WTFPL) -* `hudbars_bar_background.png`—Wuzzy (WTFPL) - -### License references - -* [CC-BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/) -* [WTFPL](http://sam.zoy.org/wtfpl/COPYING) diff --git a/mods/HUD/hudbars/changelog.txt b/mods/HUD/hudbars/changelog.txt deleted file mode 100644 index e2e6b56..0000000 --- a/mods/HUD/hudbars/changelog.txt +++ /dev/null @@ -1,92 +0,0 @@ -Note: This software uses semantic versioning, -as of version 2.0.0 of the standard . - -0.1.0 ------ -- Initial release, forked from mod “Better HUD” [hud]. - -0.2.0 ------ -- Add API documentation - -0.3.0 ------ -- Rename main table from “hud” to “hb” (affects function names!) -- Arguments 3-4 of hb.change_hudbar can be nil for values which should not change -- Add proper function hb.init_hudbar, replaces odd call to hud.hudtables[identifier].add_all -- Update API documentation and fix mistakes -- Use “hudbars.conf” instead of “hud.conf” - -0.4.0 ------ -- New function: hb.get_hudbar_state to get information about the state of an active HUD bar, such as values, whether it is hidden, etc. -- hb.change_hudbar has been optimized to call hud_change fewer times, which is hopefully good for networking -- Rename hb.register_hudbar parameter “start_hide” to “start_hidden” -- start_hidden parameter now finally works -- Do not affect other HUD flags (crosshair, wielditem, etc.) when starting mod -- Show error message when trying to call hb.init_hudbar or hb.change_hudbar with bad values -- Update documentation -- Lots of refactoring -- Health and breath bar now use API - -1.0.0 ------ -- Add new parameter start_hidden to hb.init_hudbar, specified whether HUD bar is hidden on start -- Copy-editing of API.md and README.txt -- Internal: Fix add_all weirdness - -1.0.1 ------ -- Fix race condition causing crash at start of server - -1.0.2 ------ -- Fix other HUD elements disappearing for rejoining players -- Remove pointless delays for initializing the HUD for new or rejoining players - -1.0.3 ------ -- Adjust default HUD bars position for Minetest 0.4.12 - -1.1.0 ------ -- Add boolean minetest.conf setting support (hudbars_autohide_breathbar) to control whether the breath bar is automatically hidden when full (default: yes) - -1.2.0 ------ -- New setting: hudbars_sorting. You can now manually sort all the HUD bars. Useful if you don't like automatic order -- New setting: hudbars_bar_type. You now can change the appearance of the HUD bars. -- New HUD bar types, slightly experimental: Classic statbars and modern [hud]-style statbars -- New experimental/unfinished setting: hudbars_alignment_pattern: You can now make the HUD bars stack vertically instead of the current zig-zag pattern. Note you probably need to change source code to productively use this feature -- Various position-related HUD bar settings (see README.txt) -- Remove hudbars.conf support and hudbars.conf.example (was never officially supported anyways) - -1.2.1 ------ -- Fix crash when enable_damage is changed in mid-game - -1.3.0 ------ -- Make all settings avaialbe in Minetest's advanced settings menu -- Fix HUD bars overlap when both hudbars_tick and hudbars_vmargin were set -- Use Markdown syntax in readme file -- Fix some factual mistakes in readme file -- Add metadata: mod.conf, description.txt, screenshot.png - -1.4.0 ------ -- Allow to change HUD bar images and label after it has been registered -- Minor API.md correction - -1.4.1 ------ -- Fix bug in hb.change_hudbar being a no-op if new_value and new_max value are nil - -1.5.0 ------ -- Portuguese translation by BrunoMine - -1.5.1 ------ -- Fix critical bug: Mod does not work with both intllib and mod security enabled -- Update screenshot to use new 3:2 aspect ratio diff --git a/mods/HUD/hudbars/default_settings.lua b/mods/HUD/hudbars/default_settings.lua deleted file mode 100644 index d2a325b..0000000 --- a/mods/HUD/hudbars/default_settings.lua +++ /dev/null @@ -1,48 +0,0 @@ --- (Hardcoded) default settings - -hb.settings.max_bar_length = 160 -hb.settings.statbar_length = 20 - --- Statbar positions -hb.settings.pos_left = {} -hb.settings.pos_right = {} -hb.settings.start_offset_left = {} -hb.settings.start_offset_right= {} -hb.settings.pos_left.x = hb.load_setting("hudbars_pos_left_x", "number", 0.5) -hb.settings.pos_left.y = hb.load_setting("hudbars_pos_left_y", "number", 1) -hb.settings.pos_right.x = hb.load_setting("hudbars_pos_right_x", "number", 0.5) -hb.settings.pos_right.y = hb.load_setting("hudbars_pos_right_y", "number", 1) -hb.settings.bar_type = hb.load_setting("hudbars_bar_type", "string", "progress_bar", {"progress_bar", "statbar_classic", "statbar_modern"}) -if hb.settings.bar_type == "progress_bar" then - hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_offset_left_x", "number", -175) - hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_offset_left_y", "number", -86) - hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_offset_right_x", "number", 15) - hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_offset_right_y", "number", -86) -else - hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_statbar_offset_left_x", "number", -265) - hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_statbar_offset_left_y", "number", -90) - hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_statbar_offset_right_x", "number", 25) - hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_statbar_offset_right_y", "number", -90) -end -hb.settings.vmargin = hb.load_setting("hudbars_vmargin", "number", 24) -hb.settings.tick = hb.load_setting("hudbars_tick", "number", 0.1) - --- Experimental setting: Changing this setting is not officially supported, do NOT rely on it! -hb.settings.forceload_default_hudbars = hb.load_setting("hudbars_forceload_default_hudbars", "bool", true) - --- Misc. settings -hb.settings.alignment_pattern = hb.load_setting("hudbars_alignment_pattern", "string", "zigzag", {"zigzag", "stack_up", "stack_down"}) -hb.settings.autohide_breath = hb.load_setting("hudbars_autohide_breath", "bool", true) - -local sorting = minetest.settings:get("hudbars_sorting") -if sorting ~= nil then - hb.settings.sorting = {} - hb.settings.sorting_reverse = {} - for k,v in string.gmatch(sorting, "(%w+)=(%w+)") do - hb.settings.sorting[k] = tonumber(v) - hb.settings.sorting_reverse[tonumber(v)] = k - end -else - hb.settings.sorting = { ["health"] = 0, ["breath"] = 1 } - hb.settings.sorting_reverse = { [0] = "health", [1] = "breath" } -end diff --git a/mods/HUD/hudbars/depends.txt b/mods/HUD/hudbars/depends.txt deleted file mode 100644 index 77e8d97..0000000 --- a/mods/HUD/hudbars/depends.txt +++ /dev/null @@ -1 +0,0 @@ -intllib? diff --git a/mods/HUD/hudbars/description.txt b/mods/HUD/hudbars/description.txt deleted file mode 100644 index 9e10e89..0000000 --- a/mods/HUD/hudbars/description.txt +++ /dev/null @@ -1 +0,0 @@ -Replaces the health and breath symbols in the HUD by “progress bars” and shows exact values. Other mods can add more progress bars for custom player stats. diff --git a/mods/HUD/hudbars/init.lua b/mods/HUD/hudbars/init.lua deleted file mode 100644 index 4e9294b..0000000 --- a/mods/HUD/hudbars/init.lua +++ /dev/null @@ -1,524 +0,0 @@ -local S -if (minetest.get_modpath("intllib")) then - S = intllib.Getter() -else - S = function ( s ) return s end -end - -hb = {} - -hb.hudtables = {} - --- number of registered HUD bars -hb.hudbars_count = 0 - --- table which records which HUD bar slots have been “registered” so far; used for automatic positioning -hb.registered_slots = {} - -hb.settings = {} - -function hb.load_setting(sname, stype, defaultval, valid_values) - local sval - if stype == "string" then - sval = minetest.settings:get(sname) - elseif stype == "bool" then - sval = minetest.settings:get_bool(sname) - elseif stype == "number" then - sval = tonumber(minetest.settings:get(sname)) - end - if sval ~= nil then - if valid_values ~= nil then - local valid = false - for i=1,#valid_values do - if sval == valid_values[i] then - valid = true - end - end - if not valid then - minetest.log("error", "[hudbars] Invalid value for "..sname.."! Using default value ("..tostring(defaultval)..").") - return defaultval - else - return sval - end - else - return sval - end - else - return defaultval - end -end - --- Load default settings -dofile(minetest.get_modpath("hudbars").."/default_settings.lua") - -local function player_exists(player) - return player ~= nil and player:is_player() -end - --- Table which contains all players with active default HUD bars (only for internal use) -hb.players = {} - -function hb.value_to_barlength(value, max) - if max == 0 then - return 0 - else - if hb.settings.bar_type == "progress_bar" then - local x - if value < 0 then x=-0.5 else x = 0.5 end - local ret = math.modf((value/max) * hb.settings.max_bar_length + x) - return ret - else - local x - if value < 0 then x=-0.5 else x = 0.5 end - local ret = math.modf((value/max) * hb.settings.statbar_length + x) - return ret - end - end -end - -function hb.get_hudtable(identifier) - return hb.hudtables[identifier] -end - -function hb.get_hudbar_position_index(identifier) - if hb.settings.sorting[identifier] ~= nil then - return hb.settings.sorting[identifier] - else - local i = 0 - while true do - if hb.registered_slots[i] ~= true and hb.settings.sorting_reverse[i] == nil then - return i - end - i = i + 1 - end - end -end - -function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string) - minetest.log("action", "hb.register_hudbar: "..tostring(identifier)) - local hudtable = {} - local pos, offset - local index = math.floor(hb.get_hudbar_position_index(identifier)) - hb.registered_slots[index] = true - if hb.settings.alignment_pattern == "stack_up" then - pos = hb.settings.pos_left - offset = { - x = hb.settings.start_offset_left.x, - y = hb.settings.start_offset_left.y - hb.settings.vmargin * index - } - elseif hb.settings.alignment_pattern == "stack_down" then - pos = hb.settings.pos_left - offset = { - x = hb.settings.start_offset_left.x, - y = hb.settings.start_offset_left.y + hb.settings.vmargin * index - } - else - if index % 2 == 0 then - pos = hb.settings.pos_left - offset = { - x = hb.settings.start_offset_left.x, - y = hb.settings.start_offset_left.y - hb.settings.vmargin * (index/2) - } - else - pos = hb.settings.pos_right - offset = { - x = hb.settings.start_offset_right.x, - y = hb.settings.start_offset_right.y - hb.settings.vmargin * ((index-1)/2) - } - end - end - if format_string == nil then - format_string = S("%s: %d/%d") - end - - hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden) - if start_value == nil then start_value = hudtable.default_start_value end - if start_max == nil then start_max = hudtable.default_start_max end - if start_hidden == nil then start_hidden = hudtable.default_start_hidden end - local ids = {} - local state = {} - local name = player:get_player_name() - local bgscale, iconscale, text, barnumber, bgiconnumber - if start_max == 0 or start_hidden then - bgscale = { x=0, y=0 } - else - bgscale = { x=1, y=1 } - end - if start_hidden then - iconscale = { x=0, y=0 } - barnumber = 0 - bgiconnumber = 0 - text = "" - else - iconscale = { x=1, y=1 } - barnumber = hb.value_to_barlength(start_value, start_max) - bgiconnumber = hb.settings.statbar_length - text = string.format(format_string, label, start_value, start_max) - end - if hb.settings.bar_type == "progress_bar" then - ids.bg = player:hud_add({ - hud_elem_type = "image", - position = pos, - scale = bgscale, - text = "hudbars_bar_background.png", - alignment = {x=1,y=1}, - offset = { x = offset.x - 1, y = offset.y - 1 }, - }) - if textures.icon ~= nil then - ids.icon = player:hud_add({ - hud_elem_type = "image", - position = pos, - scale = iconscale, - text = textures.icon, - alignment = {x=-1,y=1}, - offset = { x = offset.x - 3, y = offset.y }, - }) - end - elseif hb.settings.bar_type == "statbar_modern" then - if textures.bgicon ~= nil then - ids.bg = player:hud_add({ - hud_elem_type = "statbar", - position = pos, - text = textures.bgicon, - number = bgiconnumber, - alignment = {x=-1,y=-1}, - offset = { x = offset.x, y = offset.y }, - direction = 0, - size = {x=24, y=24}, - }) - end - end - local bar_image, bar_size - if hb.settings.bar_type == "progress_bar" then - bar_image = textures.bar - bar_size = {x=2, y=16} - elseif hb.settings.bar_type == "statbar_classic" or hb.settings.bar_type == "statbar_modern" then - bar_image = textures.icon - bar_size = {x=24, y=24} - end - ids.bar = player:hud_add({ - hud_elem_type = "statbar", - position = pos, - text = bar_image, - number = barnumber, - alignment = {x=-1,y=-1}, - offset = offset, - direction = 0, - size = bar_size, - }) - if hb.settings.bar_type == "progress_bar" then - ids.text = player:hud_add({ - hud_elem_type = "text", - position = pos, - text = text, - alignment = {x=1,y=1}, - number = text_color, - direction = 0, - offset = { x = offset.x + 2, y = offset.y - 1}, - }) - end - -- Do not forget to update hb.get_hudbar_state if you add new fields to the state table - state.hidden = start_hidden - state.value = start_value - state.max = start_max - state.text = text - state.barlength = hb.value_to_barlength(start_value, start_max) - - local main_error_text = - "[hudbars] Bad initial values of HUD bar identifier “"..tostring(identifier).."” for player "..name..". " - - if start_max < start_value then - minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than start_value ("..start_value..")!") - end - if start_max < 0 then - minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than 0!") - end - if start_value < 0 then - minetest.log("error", main_error_text.."start_value ("..start_value..") is smaller than 0!") - end - - hb.hudtables[identifier].hudids[name] = ids - hb.hudtables[identifier].hudstate[name] = state - end - - hudtable.identifier = identifier - hudtable.format_string = format_string - hudtable.label = label - hudtable.hudids = {} - hudtable.hudstate = {} - hudtable.default_start_hidden = default_start_hidden - hudtable.default_start_value = default_start_value - hudtable.default_start_max = default_start_max - - hb.hudbars_count= hb.hudbars_count + 1 - - hb.hudtables[identifier] = hudtable -end - -function hb.init_hudbar(player, identifier, start_value, start_max, start_hidden) - if not player_exists(player) then return false end - local hudtable = hb.get_hudtable(identifier) - hb.hudtables[identifier].add_all(player, hudtable, start_value, start_max, start_hidden) - return true -end - -function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon, new_bgicon, new_bar, new_label, new_text_color) - if new_value == nil and new_max_value == nil and new_icon == nil and new_bgicon == nil and new_bar == nil and new_label == nil and new_text_color == nil then - return true - end - if not player_exists(player) then - return false - end - - local name = player:get_player_name() - local hudtable = hb.get_hudtable(identifier) - local value_changed, max_changed = false, false - - if new_value ~= nil then - if new_value ~= hudtable.hudstate[name].value then - hudtable.hudstate[name].value = new_value - value_changed = true - end - else - new_value = hudtable.hudstate[name].value - end - if new_max_value ~= nil then - if new_max_value ~= hudtable.hudstate[name].max then - hudtable.hudstate[name].max = new_max_value - max_changed = true - end - else - new_max_value = hudtable.hudstate[name].max - end - - if hb.settings.bar_type == "progress_bar" then - if new_icon ~= nil and hudtable.hudids[name].icon ~= nil then - player:hud_change(hudtable.hudids[name].icon, "text", new_icon) - end - if new_bgicon ~= nil and hudtable.hudids[name].bgicon ~= nil then - player:hud_change(hudtable.hudids[name].bgicon, "text", new_bgicon) - end - if new_bar ~= nil then - player:hud_change(hudtable.hudids[name].bar , "text", new_bar) - end - if new_label ~= nil then - hudtable.label = new_label - local new_text = string.format(hudtable.format_string, new_label, hudtable.hudstate[name].value, hudtable.hudstate[name].max) - player:hud_change(hudtable.hudids[name].text, "text", new_text) - end - if new_text_color ~= nil then - player:hud_change(hudtable.hudids[name].text, "number", new_text_color) - end - else - if new_icon ~= nil and hudtable.hudids[name].bar ~= nil then - player:hud_change(hudtable.hudids[name].bar, "text", new_icon) - end - if new_bgicon ~= nil and hudtable.hudids[name].bg ~= nil then - player:hud_change(hudtable.hudids[name].bg, "text", new_bgicon) - end - end - - local main_error_text = - "[hudbars] Bad call to hb.change_hudbar, identifier: “"..tostring(identifier).."”, player name: “"..name.."”. " - if new_max_value < new_value then - minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than new_value ("..new_value..")!") - end - if new_max_value < 0 then - minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than 0!") - end - if new_value < 0 then - minetest.log("error", main_error_text.."new_value ("..new_value..") is smaller than 0!") - end - - if hudtable.hudstate[name].hidden == false then - if max_changed and hb.settings.bar_type == "progress_bar" then - if hudtable.hudstate[name].max == 0 then - player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0}) - else - player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1}) - end - end - - if value_changed or max_changed then - local new_barlength = hb.value_to_barlength(new_value, new_max_value) - if new_barlength ~= hudtable.hudstate[name].barlength then - player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(new_value, new_max_value)) - hudtable.hudstate[name].barlength = new_barlength - end - - if hb.settings.bar_type == "progress_bar" then - local new_text = string.format(hudtable.format_string, hudtable.label, new_value, new_max_value) - if new_text ~= hudtable.hudstate[name].text then - player:hud_change(hudtable.hudids[name].text, "text", new_text) - hudtable.hudstate[name].text = new_text - end - end - end - end - return true -end - -function hb.hide_hudbar(player, identifier) - if not player_exists(player) then return false end - local name = player:get_player_name() - local hudtable = hb.get_hudtable(identifier) - if hudtable == nil then return false end - if(hudtable.hudstate[name].hidden == false) then - if hb.settings.bar_type == "progress_bar" then - if hudtable.hudids[name].icon ~= nil then - player:hud_change(hudtable.hudids[name].icon, "scale", {x=0,y=0}) - end - player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0}) - player:hud_change(hudtable.hudids[name].text, "text", "") - elseif hb.settings.bar_type == "statbar_modern" then - player:hud_change(hudtable.hudids[name].bg, "number", 0) - end - player:hud_change(hudtable.hudids[name].bar, "number", 0) - hudtable.hudstate[name].hidden = true - end - return true -end - -function hb.unhide_hudbar(player, identifier) - if not player_exists(player) then return false end - local name = player:get_player_name() - local hudtable = hb.get_hudtable(identifier) - if hudtable == nil then return false end - if(hudtable.hudstate[name].hidden) then - local value = hudtable.hudstate[name].value - local max = hudtable.hudstate[name].max - if hb.settings.bar_type == "progress_bar" then - if hudtable.hudids[name].icon ~= nil then - player:hud_change(hudtable.hudids[name].icon, "scale", {x=1,y=1}) - end - if hudtable.hudstate[name].max ~= 0 then - player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1}) - end - player:hud_change(hudtable.hudids[name].text, "text", tostring(string.format(hudtable.format_string, hudtable.label, value, max))) - elseif hb.settings.bar_type == "statbar_modern" then - player:hud_change(hudtable.hudids[name].bg, "number", hb.settings.statbar_length) - end - player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max)) - hudtable.hudstate[name].hidden = false - end - return true -end - -function hb.get_hudbar_state(player, identifier) - if not player_exists(player) then return nil end - local ref = hb.get_hudtable(identifier).hudstate[player:get_player_name()] - -- Do not forget to update this chunk of code in case the state changes - local copy = { - hidden = ref.hidden, - value = ref.value, - max = ref.max, - text = ref.text, - barlength = ref.barlength, - } - return copy -end - -function hb.get_hudbar_identifiers() - local ids = {} - for id, _ in pairs(hb.hudtables) do - table.insert(ids, id) - end - return ids -end - ---register built-in HUD bars -if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then - hb.register_hudbar("health", 0xFFFFFF, S("Health"), { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }, 20, 20, false) - hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 10, 10, true) -end - -local function hide_builtin(player) - local flags = player:hud_get_flags() - flags.healthbar = false - flags.breathbar = false - player:hud_set_flags(flags) -end - - -local function custom_hud(player) - if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then - local hide - if minetest.settings:get_bool("enable_damage") then - hide = false - else - hide = true - end - hb.init_hudbar(player, "health", player:get_hp(), nil, hide) - local breath = player:get_breath() - local hide_breath - if breath == 11 and hb.settings.autohide_breath == true then hide_breath = true else hide_breath = false end - hb.init_hudbar(player, "breath", math.min(breath, 10), nil, hide_breath or hide) - end -end - -local function update_health(player) - hb.change_hudbar(player, "health", player:get_hp()) -end - --- update built-in HUD bars -local function update_hud(player) - if not player_exists(player) then return end - if minetest.settings:get_bool("enable_damage") then - if hb.settings.forceload_default_hudbars then - hb.unhide_hudbar(player, "health") - end - --air - local breath = player:get_breath() - - if breath == 11 and hb.settings.autohide_breath == true then - hb.hide_hudbar(player, "breath") - else - hb.unhide_hudbar(player, "breath") - hb.change_hudbar(player, "breath", math.min(breath, 10)) - end - --health - update_health(player) - elseif hb.settings.forceload_default_hudbars then - hb.hide_hudbar(player, "health") - hb.hide_hudbar(player, "breath") - end -end - -minetest.register_on_player_hpchange(function(player) - if hb.players[player:get_player_name()] ~= nil then - update_health(player) - end -end) - -minetest.register_on_respawnplayer(function(player) - update_health(player) - hb.hide_hudbar(player, "breath") -end) - -minetest.register_on_joinplayer(function(player) - hide_builtin(player) - custom_hud(player) - hb.players[player:get_player_name()] = player -end) - -minetest.register_on_leaveplayer(function(player) - hb.players[player:get_player_name()] = nil -end) - -local main_timer = 0 -local timer = 0 -minetest.register_globalstep(function(dtime) - main_timer = main_timer + dtime - timer = timer + dtime - if main_timer > hb.settings.tick or timer > 4 then - if main_timer > hb.settings.tick then main_timer = 0 end - -- only proceed if damage is enabled - if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then - for _, player in pairs(hb.players) do - -- update all hud elements - update_hud(player) - end - end - end - if timer > 4 then timer = 0 end -end) diff --git a/mods/HUD/hudbars/locale/de.txt b/mods/HUD/hudbars/locale/de.txt deleted file mode 100644 index 578764e..0000000 --- a/mods/HUD/hudbars/locale/de.txt +++ /dev/null @@ -1,3 +0,0 @@ -Health = Leben -Breath = Atem -%s: %d/%d = %s: %d/%d diff --git a/mods/HUD/hudbars/locale/pt.txt b/mods/HUD/hudbars/locale/pt.txt deleted file mode 100644 index 2de6265..0000000 --- a/mods/HUD/hudbars/locale/pt.txt +++ /dev/null @@ -1,5 +0,0 @@ -Health = Saude -Breath = Folego - -# Formato de string padrão para progresso bar-style de barras do HUD, por exemplo “Saude 5/20” -%s: %d/%d diff --git a/mods/HUD/hudbars/locale/template.txt b/mods/HUD/hudbars/locale/template.txt deleted file mode 100644 index 0a26b8f..0000000 --- a/mods/HUD/hudbars/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -Health -Breath - -# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -%s: %d/%d diff --git a/mods/HUD/hudbars/locale/tr.txt b/mods/HUD/hudbars/locale/tr.txt deleted file mode 100644 index b49c7a0..0000000 --- a/mods/HUD/hudbars/locale/tr.txt +++ /dev/null @@ -1,3 +0,0 @@ -Health = Can -Breath = Nefes -%s: %d/%d = %s: %d/%d diff --git a/mods/HUD/hudbars/mod.conf b/mods/HUD/hudbars/mod.conf deleted file mode 100644 index add28e6..0000000 --- a/mods/HUD/hudbars/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = hudbars diff --git a/mods/HUD/hudbars/screenshot.png b/mods/HUD/hudbars/screenshot.png deleted file mode 100644 index 88ee323..0000000 Binary files a/mods/HUD/hudbars/screenshot.png and /dev/null differ diff --git a/mods/HUD/hudbars/settingtypes.txt b/mods/HUD/hudbars/settingtypes.txt deleted file mode 100644 index 3e4390e..0000000 --- a/mods/HUD/hudbars/settingtypes.txt +++ /dev/null @@ -1,119 +0,0 @@ -[Appearance] -# Specifies how the value indicators (i.e. health, breah, etc.) look. There are 3 styles -# available. You can choose between the default progress-bar-like bars and the good -# old statbars like you know from vanilla Minetest. -# These values are possible: -# - progress_bar: A horizontal progress-bar-like bar with a label, showing numerical value -# (current, maximum), and an icon. These bars usually convey the most -# information. This is the default and recommended value. -# - statbar_classic: Classic statbar, like in vanilla Minetest. Made out of up to 20 -# half-symbols. Those bars represent the vague ratio between -# the current value and the maximum value. 1 half-symbol stands for -# approximately 5% of the maximum value. -# - statbar_modern: Like the classic statbar, but also supports background images, this -# kind of statbar may be considered to be more user-friendly than the -# classic statbar. This bar type closely resembles the mod -# “Better HUD” [hud] by BlockMen. -hudbars_bar_type (HUD bars style) enum progress_bar progress_bar,statbar_classic,statbar_modern - - -# If enabled (default), the breath indicators in the HUD will be automatically hidden shortly -# after the breath has been filled up. Otherwise, the breath will always be displayed. -hudbars_autohide_breath (Automatically hide breath indicators) bool true - -# This setting changes the way the HUD bars are ordered on the display. You can choose -# between a zig-zag pattern (default) or a vertically stacked pattern. -# The following values are allowed: -# - zigzag: Starting from the left bottom, the next is right from the first, -# the next is above the first, the next is right of the third, etc. -# - stack_up: The HUD bars are stacked vertically, going upwards. -# - stack_down: The HUD bars are stacked vertically, going downwards. -hudbars_alignment_pattern (HUD bars alignment pattern) enum zigzag zigzag,stack_up,stack_down - -# This setting allows you to specify the order of the HUD bars explicitly. If left empty -# (the default), the health and breath indicators come first, additional indicators -# may appear in any order. This setting is quite technical and normal users probably do not -# need to worry about it. -# -# Syntax: -# The setting has to be specified as a comma-seperated list of key=value pairs, where a key -# refers to the identifier of a HUD bar and the value refers to the slot number of where the -# HUD bar should be placed. The slot number must be an integer greater of equal to 0. Where -# the HUD bars will be displayed exactly depends on the alignment pattern being used. -# All HUD bars to which no order value has been applied will fill in all slots which have -# not been occupied by the HUD bars specified in this setting, the slots will be filled in -# from the lowest slot number. -# Note that the order of those remaining HUD bars is not fixed, it basically just boils -# down on which mod “came” first. Don't worry, the mod will still work perfectly fine, this -# setting is entirely optional. -# The identifier for the health bar is “health” and the identifier for the breath bar is -# “breath”. For other HUD bars, you have to learn it from the mod which is supplying them. -# -# Be careful not to use slot indices twice, or else different HUD bars will be drawn over -# each other! -# -# Example: “breath=0, health=1” -# This makes the breath bar first and the health bar second, which is the opposite order -# of the default one. -hudbars_sorting (HUD bars order) string - -[Positions and offsets] -# Horizontal (x) main position of the HUD bars over the entire screen. -# 0.0 is left-most, 1.0 is right-most. -# For the zig-zag alignment pattern, this is for the left HUD bars. -hudbars_pos_left_x (Left HUD bar screen x position) float 0.5 0.0 1.0 -# Vertical (y) main position of the HUD bars over the entire screen. -# 0.0 is top, 1.0 is bottom. -# For the zig-zag alignment pattern, this is for the left HUD bars. -hudbars_pos_left_y (Left HUD bar screen y position) float 1.0 0.0 1.0 -# Horizontal (x) main position of the right HUD bars over the entire screen. -# 0.0 is left-most, 1.0 is right-most. -# Only used for the zig-zag alignment pattern. -hudbars_pos_right_x (Right HUD bar screen x position) float 0.5 0.0 1.0 -# Vertical main position (y) of the right HUD bars over the entire screen. -# 0.0 is top, 1.0 is bottom. -# Only used for the zig-zag alignment pattern. -hudbars_pos_right_y (Right HUD bar screen y position) float 1.0 0.0 1.0 - -# Precise x offset in pixels from the basic screen x position of the HUD bars. -# For the zig-zag alignment pattern, this is for the left HUD bars. -# This setting is used for the progress bar HUD bar style. -hudbars_start_offset_left_x (Left HUD bar x offset) int -175 -# Precise y offset in pixels from the basic screen y position of the HUD bars. -# For the zig-zag alignment pattern, this is for the left HUD bars. -# This setting is used for the progress bar HUD bar style. -hudbars_start_offset_left_y (Left HUD bar y offset) int -86 -# Precise x offset in pixels from the basic screen x position of the right HUD bars. -# Only used for the zig-zag alignment pattern. -# This setting is used for the progress bar HUD bar style. -hudbars_start_offset_right_x (Right HUD bar x offset) int 15 -# Precise y offset in pixels from the basic screen y position of the right HUD bars. -# Only used for the zig-zag alignment pattern. -# This setting is used for the progress bar HUD bar style. -hudbars_start_offset_right_y (Right HUD bar y offset) int -86 - -# Precise x offset in pixels from the basic screen x position of the HUD statbars. -# For the zig-zag alignment pattern, this is for the left HUD statbars. -# This setting is used for the classic and modern statbar styles. -hudbars_start_statbar_offset_left_x (Left HUD statbar x offset) int -265 -# Precise y offset in pixels from the basic screen y position of the HUD statbars. -# For the zig-zag alignment pattern, this is for the left HUD statbars. -# This setting is used for the classic and modern statbar styles. -hudbars_start_statbar_offset_left_y (Left HUD statbar y offset) int -90 -# Precise x offset in pixels from the basic screen x position of the right HUD statbars. -# Only used for the zig-zag alignment pattern. -# This setting is used for the classic and modern statbar styles. -hudbars_start_statbar_offset_right_x (Right HUD statbar x offset) int 25 -# Precise y offset in pixels from the basic screen y position of the right HUD statbars. -# Only used for the zig-zag alignment pattern. -# This setting is used for the classic and modern statbar styles. -hudbars_start_statbar_offset_right_y (Right HUD statbar y offset) int -90 - -# The vertical distance between two HUD bars, in pixels. -hudbars_vmargin (Vertical distance between HUD bars) int 24 0 - -[Performance] -# The of seconds which need to pass before the server updates the default HUD bars -# (health and breath). Increase this number if you have a slow server or a slow network -# connection and experience performance problems. -hudbars_tick (Default HUD bars update interval) float 0.1 0.0 4.0 diff --git a/mods/HUD/hudbars/textures/hudbars_bar_background.png b/mods/HUD/hudbars/textures/hudbars_bar_background.png deleted file mode 100644 index cbc6c3f..0000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bar_background.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_bar_breath.png b/mods/HUD/hudbars/textures/hudbars_bar_breath.png deleted file mode 100644 index 7d19a57..0000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bar_breath.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_bar_health.png b/mods/HUD/hudbars/textures/hudbars_bar_health.png deleted file mode 100644 index 6530916..0000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bar_health.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_bgicon_breath.png b/mods/HUD/hudbars/textures/hudbars_bgicon_breath.png deleted file mode 100644 index 176629a..0000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bgicon_breath.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_bgicon_health.png b/mods/HUD/hudbars/textures/hudbars_bgicon_health.png deleted file mode 100644 index e2be276..0000000 Binary files a/mods/HUD/hudbars/textures/hudbars_bgicon_health.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_icon_breath.png b/mods/HUD/hudbars/textures/hudbars_icon_breath.png deleted file mode 100644 index d1a5bcc..0000000 Binary files a/mods/HUD/hudbars/textures/hudbars_icon_breath.png and /dev/null differ diff --git a/mods/HUD/hudbars/textures/hudbars_icon_health.png b/mods/HUD/hudbars/textures/hudbars_icon_health.png deleted file mode 100644 index 941e973..0000000 Binary files a/mods/HUD/hudbars/textures/hudbars_icon_health.png and /dev/null differ diff --git a/mods/HUD/inventory/init.lua b/mods/HUD/inventory/init.lua deleted file mode 100644 index 11e4b78..0000000 --- a/mods/HUD/inventory/init.lua +++ /dev/null @@ -1,23 +0,0 @@ ---[[ - Inventory -]] - - -inventory = {} - --- --- optimized helper to put all items in an inventory into a drops list --- - -function inventory.get_inventory_drops(pos, inventory, drops) - local inv = minetest.get_meta(pos):get_inventory() - local n = #drops - for i = 1, inv:get_size(inventory) do - local stack = inv:get_stack(inventory, i) - if stack:get_count() > 0 then - drops[n+1] = stack:to_table() - n = n + 1 - end - end -end - diff --git a/mods/HUD/inventory/mod.conf b/mods/HUD/inventory/mod.conf deleted file mode 100644 index 709d3f8..0000000 --- a/mods/HUD/inventory/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = inventory diff --git a/mods/HUD/modpack.txt b/mods/HUD/modpack.txt deleted file mode 100644 index e69de29..0000000 diff --git a/mods/HUD/sfinv/README.md b/mods/HUD/sfinv/README.md deleted file mode 100644 index 6ff3392..0000000 --- a/mods/HUD/sfinv/README.md +++ /dev/null @@ -1,21 +0,0 @@ -Simple Fast Inventory -==================== - -![SFINV Screeny](https://cdn.pbrd.co/images/1yQhd1TI.png) - -A cleaner, simpler, solution to having an advanced inventory in Minetest. - -Written by rubenwardy. -License: MIT - -See game_api.txt for this mod's API - -License of source code and media files: ---------------------------------------- -Copyright (C) 2016 rubenwardy - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/mods/HUD/sfinv/api.lua b/mods/HUD/sfinv/api.lua deleted file mode 100644 index 5d740f4..0000000 --- a/mods/HUD/sfinv/api.lua +++ /dev/null @@ -1,170 +0,0 @@ -sfinv = { - pages = {}, - pages_unordered = {}, - contexts = {}, - enabled = true -} - -function sfinv.register_page(name, def) - assert(name, "Invalid sfinv page. Requires a name") - assert(def, "Invalid sfinv page. Requires a def[inition] table") - assert(def.get, "Invalid sfinv page. Def requires a get function.") - assert(not sfinv.pages[name], "Attempt to register already registered sfinv page " .. dump(name)) - - sfinv.pages[name] = def - def.name = name - table.insert(sfinv.pages_unordered, def) -end - -function sfinv.override_page(name, def) - assert(name, "Invalid sfinv page override. Requires a name") - assert(def, "Invalid sfinv page override. Requires a def[inition] table") - local page = sfinv.pages[name] - assert(page, "Attempt to override sfinv page " .. dump(name) .. " which does not exist.") - for key, value in pairs(def) do - page[key] = value - end -end - -function sfinv.get_nav_fs(player, context, nav, current_idx) - -- Only show tabs if there is more than one page - if #nav > 1 then - return "tabheader[0,0;tabs;" .. table.concat(nav, ",") .. ";" .. current_idx .. ";true;false]" - else - return "" - end -end - -local theme_main = "bgcolor[#080808BB;true]" .. init.gui_bg .. - init.gui_bg_img - -local theme_inv = init.gui_slots .. [[ - list[current_player;main;0,4.7;8,1;] - list[current_player;main;0,5.85;8,3;8] - ]] - -function sfinv.make_formspec(player, context, content, show_inv, size) - local tmp = { - size or "size[8,8.6]", - theme_main, - sfinv.get_nav_fs(player, context, context.nav_titles, context.nav_idx), - content - } - if show_inv then - tmp[#tmp + 1] = theme_inv - end - return table.concat(tmp, "") -end - -function sfinv.get_homepage_name(player) - return "sfinv:crafting" -end - -function sfinv.get_formspec(player, context) - -- Generate navigation tabs - local nav = {} - local nav_ids = {} - local current_idx = 1 - for i, pdef in pairs(sfinv.pages_unordered) do - if not pdef.is_in_nav or pdef:is_in_nav(player, context) then - nav[#nav + 1] = pdef.title - nav_ids[#nav_ids + 1] = pdef.name - if pdef.name == context.page then - current_idx = #nav_ids - end - end - end - context.nav = nav_ids - context.nav_titles = nav - context.nav_idx = current_idx - - -- Generate formspec - local page = sfinv.pages[context.page] or sfinv.pages["404"] - if page then - return page:get(player, context) - else - local old_page = context.page - context.page = sfinv.get_homepage_name(player) - assert(sfinv.pages[context.page], "[sfinv] Invalid homepage") - minetest.log("warning", "[sfinv] Couldn't find " .. dump(old_page) .. " so using switching to homepage") - return sfinv.get_formspec(player, context) - end -end - -function sfinv.get_or_create_context(player) - local name = player:get_player_name() - local context = sfinv.contexts[name] - if not context then - context = { - page = sfinv.get_homepage_name(player) - } - sfinv.contexts[name] = context - end - return context -end - -function sfinv.set_context(player, context) - sfinv.contexts[player:get_player_name()] = context -end - -function sfinv.set_player_inventory_formspec(player, context) - local fs = sfinv.get_formspec(player, - context or sfinv.get_or_create_context(player)) - player:set_inventory_formspec(fs) -end - -function sfinv.set_page(player, pagename) - local context = sfinv.get_or_create_context(player) - local oldpage = sfinv.pages[context.page] - if oldpage and oldpage.on_leave then - oldpage:on_leave(player, context) - end - context.page = pagename - local page = sfinv.pages[pagename] - if page.on_enter then - page:on_enter(player, context) - end - sfinv.set_player_inventory_formspec(player, context) -end - -minetest.register_on_joinplayer(function(player) - if sfinv.enabled then - sfinv.set_player_inventory_formspec(player) - end -end) - -minetest.register_on_leaveplayer(function(player) - sfinv.contexts[player:get_player_name()] = nil -end) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "" or not sfinv.enabled then - return false - end - - -- Get Context - local name = player:get_player_name() - local context = sfinv.contexts[name] - if not context then - sfinv.set_player_inventory_formspec(player) - return false - end - - -- Was a tab selected? - if fields.tabs and context.nav then - local tid = tonumber(fields.tabs) - if tid and tid > 0 then - local id = context.nav[tid] - local page = sfinv.pages[id] - if id and page then - sfinv.set_page(player, id) - end - end - else - -- Pass event to page - local page = sfinv.pages[context.page] - if page and page.on_player_receive_fields then - return page:on_player_receive_fields(player, context, fields) - end - end -end) diff --git a/mods/HUD/sfinv/depends.txt b/mods/HUD/sfinv/depends.txt deleted file mode 100644 index 95e212c..0000000 --- a/mods/HUD/sfinv/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -init -inventory diff --git a/mods/ITEMS/australia/crafting.lua b/mods/ITEMS/australia/crafting.lua deleted file mode 100644 index b46f948..0000000 --- a/mods/ITEMS/australia/crafting.lua +++ /dev/null @@ -1,435 +0,0 @@ ---[[ - Crafting ---]] - - -minetest.register_craft({ - output = "default:pine_wood 4", - recipe = { - {"australia:arnhem_cypress_pine_tree"} - } -}) - -minetest.register_craft({ - output = "australia:eucalyptus_wood 4", - recipe = { - {"australia:black_box_tree"} - } -}) - -minetest.register_craft({ - output = "australia:blackwood 4", - recipe = { - {"australia:black_wattle_tree"} - } -}) - -minetest.register_craft({ - output = "australia:blue_gum 4", - recipe = { - {"australia:blue_gum_tree"} - } -}) - -minetest.register_craft({ - output = "default:wood 4", - recipe = { - {"australia:boab_tree"} - } -}) - -minetest.register_craft({ - output = "australia:celery_top_pine 4", - recipe = { - {"australia:celery_top_pine_tree"} - } -}) - -minetest.register_craft({ - output = "default:acacia_wood 4", - recipe = { - {"australia:coast_banksia_tree"} - } -}) - -minetest.register_craft({ - output = "australia:eucalyptus_wood 4", - recipe = { - {"australia:coolabah_tree"} - } -}) - -minetest.register_craft({ - output = "australia:red_mahogany 4", - recipe = { - {"australia:daintree_stringybark_tree"} - } -}) - --- Darwin Woollybutt -minetest.register_craft({ - output = "australia:eucalyptus_wood 4", - recipe = { - {"australia:darwin_woollybutt_tree"} - } -}) - -minetest.register_craft({ - output = "default:acacia_wood 4", - recipe = { - {"australia:desert_oak_tree"} - } -}) - -minetest.register_craft({ - output = "australia:huon_pine 4", - recipe = { - {"australia:huon_pine_tree"} - } -}) - -minetest.register_craft({ - output = "default:wood 4", - recipe = { - {"australia:illawarra_flame_tree"} - } -}) - -minetest.register_craft({ - output = "australia:jarrah 4", - recipe = { - {"australia:jarrah_tree"} - } -}) - -minetest.register_craft({ - output = "australia:karri 4", - recipe = { - {"australia:karri_tree"} - } -}) - -minetest.register_craft({ - output = "australia:eucalyptus_wood 4", - recipe = { - {"australia:lemon_eucalyptus_tree"} - } -}) - -minetest.register_craft({ - output = "default:wood 4", - recipe = { - {"australia:macadamia_tree"} - } -}) - -minetest.register_craft({ - output = "australia:marri 4", - recipe = { - {"australia:marri_tree"} - } -}) - -minetest.register_craft({ - output = "australia:merbau 4", - recipe = { - {"australia:merbau_tree"} - } -}) - -minetest.register_craft({ - output = "default:wood 4", - recipe = { - {"australia:moreton_bay_fig_tree"} - } -}) - -minetest.register_craft({ - output = "default:acacia_wood 4", - recipe = { - {"australia:mulga_tree"} - } -}) - -minetest.register_craft({ - output = "default:acacia_wood 4", - recipe = { - {"australia:paperbark_tree"} - } -}) - -minetest.register_craft({ - output = "default:acacia_wood 4", - recipe = { - {"australia:river_oak_tree"} - } -}) - -minetest.register_craft({ - output = "australia:red_gum 4", - recipe = { - {"australia:river_red_gum_tree"} - } -}) - -minetest.register_craft({ - output = "default:pine_wood 4", - recipe = { - {"australia:rottnest_island_pine_tree"} - } -}) - -minetest.register_craft({ - output = "australia:eucalyptus_wood 4", - recipe = { - {"australia:scribbly_gum_tree"} - } -}) - -minetest.register_craft({ - output = "default:acacia_wood 4", - recipe = { - {"australia:shoestring_acacia_tree"} - } -}) - -minetest.register_craft({ - output = "australia:eucalyptus_wood 4", - recipe = { - {"australia:snow_gum_tree"} - } -}) - -minetest.register_craft({ - output = "australia:southern_sassafras 4", - recipe = { - {"australia:southern_sassafras_tree"} - } -}) - -minetest.register_craft({ - output = "australia:eucalyptus_wood 4", - recipe = { - {"australia:sugar_gum_tree"} - } -}) - -minetest.register_craft({ - output = "australia:eucalyptus_wood 4", - recipe = { - {"australia:swamp_bloodwood_tree"} - } -}) - -minetest.register_craft({ - output = "australia:tasmanian_oak 4", - recipe = { - {"australia:swamp_gum_tree"} - } -}) - -minetest.register_craft({ - output = "australia:tasmanian_myrtle 4", - recipe = { - {"australia:tasmanian_myrtle_tree"} - } -}) - -minetest.register_craft({ - output = "australia:eucalyptus_wood 4", - recipe = { - {"australia:white_box_tree"} - } -}) - -minetest.register_craft({ - output = "australia:aluminiumblock", - recipe = { - {"australia:aluminium_ingot", "australia:aluminium_ingot", "australia:aluminium_ingot"}, - {"australia:aluminium_ingot", "australia:aluminium_ingot", "australia:aluminium_ingot"}, - {"australia:aluminium_ingot", "australia:aluminium_ingot", "australia:aluminium_ingot"}, - } -}) - -minetest.register_craft({ - output = "australia:aluminium_ingot 9", - recipe = { - {"australia:aluminiumblock"}, - } -}) - -minetest.register_craft({ - output = "australia:nickelblock", - recipe = { - {"australia:nickel_ingot", "australia:nickel_ingot", "australia:nickel_ingot"}, - {"australia:nickel_ingot", "australia:nickel_ingot", "australia:nickel_ingot"}, - {"australia:nickel_ingot", "australia:nickel_ingot", "australia:nickel_ingot"}, - } -}) - -minetest.register_craft({ - output = "australia:nickel_ingot 9", - recipe = { - {"australia:nickelblock"}, - } -}) - -minetest.register_craft({ - output = 'australia:silverblock', - recipe = { - {'australia:silver_ingot', 'australia:silver_ingot', 'australia:silver_ingot'}, - {'australia:silver_ingot', 'australia:silver_ingot', 'australia:silver_ingot'}, - {'australia:silver_ingot', 'australia:silver_ingot', 'australia:silver_ingot'}, - } -}) - -minetest.register_craft({ - output = 'australia:silver_ingot 9', - recipe = { - {'australia:silverblock'}, - } -}) - -minetest.register_craft({ - output = "australia:salt_block", - recipe = { - {"australia:salt", "australia:salt", "australia:salt"}, - {"australia:salt", "australia:salt", "australia:salt"}, - {"australia:salt", "australia:salt", "australia:salt"}, - } -}) - -minetest.register_craft({ - output = "australia:salt 9", - recipe = { - {"australia:salt_block"}, - } -}) - -minetest.register_craft({ - output = "australia:basalt_brick 4", - recipe = { - {"australia:basalt", "australia:basalt"}, - {"australia:basalt", "australia:basalt"}, - } -}) - -minetest.register_craft({ - output = "australia:diorite_brick 4", - recipe = { - {"australia:diorite", "australia:diorite"}, - {"australia:diorite", "australia:diorite"}, - } -}) - -minetest.register_craft({ - output = "australia:slate_tile 4", - recipe = { - {"australia:slate","australia:slate"}, - {"australia:slate","australia:slate"}, - {"default:sand","default:clay"}, - } -}) - -minetest.register_craft({ - output = "australia:marble_tile 4", - recipe = { - {"australia:marble","australia:marble"}, - {"australia:marble","australia:marble"}, - {"default:sand","default:clay"}, - } -}) - --- Small rocks can be used to create cobblestone. -minetest.register_craft({ - output = "australia:red_sandstone_cobble", - recipe = { - {"australia:small_red_rocks", "australia:small_red_rocks", "australia:small_red_rocks"}, - {"australia:small_red_rocks", "australia:small_red_rocks", "australia:small_red_rocks"}, - {"australia:small_red_rocks", "australia:small_red_rocks", "australia:small_red_rocks"}, - } -}) - -minetest.register_craft({ - output = "australia:sandstone_cobble", - recipe = { - {"australia:small_sandstone_rocks", "australia:small_sandstone_rocks", "australia:small_sandstone_rocks"}, - {"australia:small_sandstone_rocks", "australia:small_sandstone_rocks", "australia:small_sandstone_rocks"}, - {"australia:small_sandstone_rocks", "australia:small_sandstone_rocks", "australia:small_sandstone_rocks"}, - } -}) - -minetest.register_craft({ - output = "default:cobble", - recipe = { - {"australia:small_stone_rocks", "australia:small_stone_rocks", "australia:small_stone_rocks"}, - {"australia:small_stone_rocks", "australia:small_stone_rocks", "australia:small_stone_rocks"}, - {"australia:small_stone_rocks", "australia:small_stone_rocks", "australia:small_stone_rocks"}, - } -}) - - ---[[ - Cooking recipes ---]] - -minetest.register_craft({ - type = "cooking", - output = "australia:aluminium_ingot", - recipe = "australia:aluminium_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "australia:nickel_ingot", - recipe = "australia:nickel_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "australia:silver_ingot", - recipe = "australia:silver_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "australia:basalt", - recipe = "australia:basalt_cobble", -}) - -minetest.register_craft({ - type = "cooking", - output = "australia:diorite", - recipe = "australia:diorite_cobble", -}) - -minetest.register_craft({ - type = "cooking", - output = "australia:limestone", - recipe = "australia:limestone_cobble", -}) - -minetest.register_craft({ - type = "cooking", - output = "australia:red_sandstone", - recipe = "australia:red_sandstone_cobble", -}) - -minetest.register_craft({ - type = "cooking", - output = "australia:slate", - recipe = "australia:shale", -}) - -minetest.register_craft({ - type = "cooking", - output = "australia:slate", - recipe = "australia:slate_cobble", -}) - -minetest.register_craft({ - type = "cooking", - output = "australia:shale", - recipe = "australia:mangrove_mud", -}) - diff --git a/mods/ITEMS/australia/craftitems.lua b/mods/ITEMS/australia/craftitems.lua deleted file mode 100644 index 2f34fe4..0000000 --- a/mods/ITEMS/australia/craftitems.lua +++ /dev/null @@ -1,34 +0,0 @@ ---[[ - Craftitems ---]] - -minetest.register_craftitem("australia:aluminium_lump", { - description = "Aluminium Lump", - inventory_image = "aus_aluminium_lump.png", -}) - -minetest.register_craftitem("australia:nickel_lump", { - description = "Nickel Lump", - inventory_image = "aus_nickel_lump.png", -}) - -minetest.register_craftitem("australia:silver_lump", { - description = "Silver Lump", - inventory_image = "aus_silver_lump.png", -}) - -minetest.register_craftitem("australia:aluminium_ingot", { - description = "Aluminium Ingot", - inventory_image = "aus_aluminium_ingot.png", -}) - -minetest.register_craftitem("australia:nickel_ingot", { - description = "Nickel Ingot", - inventory_image = "aus_nickel_ingot.png", -}) - -minetest.register_craftitem("australia:silver_ingot", { - description = "Silver Ingot", - inventory_image = "aus_silver_ingot.png", -}) - diff --git a/mods/ITEMS/australia/functions.lua b/mods/ITEMS/australia/functions.lua deleted file mode 100644 index 744d429..0000000 --- a/mods/ITEMS/australia/functions.lua +++ /dev/null @@ -1,10 +0,0 @@ ---[[ - Functions ---]] - - --- Push an element onto a stack (table). -function aus.push(t, x) - t[#t+1] = x -end - diff --git a/mods/ITEMS/australia/init.lua b/mods/ITEMS/australia/init.lua deleted file mode 100644 index ce11b87..0000000 --- a/mods/ITEMS/australia/init.lua +++ /dev/null @@ -1,18 +0,0 @@ ---[[ - Australia: Nodes for Outback game ---]] - -aus = {} - --- Load files -local modpath = minetest.get_modpath("australia") -dofile(modpath.."/functions.lua") -dofile(modpath.."/nodes_base.lua") -- Simple solid cubic nodes with simple definitions -dofile(modpath.."/nodes_liquid.lua") -- Liquids -dofile(modpath.."/nodes_plants.lua") -- Plants -dofile(modpath.."/nodes_trees.lua") -- Tree nodes: wood, planks, sapling, leaves -dofile(modpath.."/nodes_glass.lua") -- Glass -dofile(modpath.."/nodes_climb.lua") -- Climbable nodes -dofile(modpath.."/nodes_misc.lua") -- Other and special nodes -dofile(modpath.."/craftitems.lua") -dofile(modpath.."/crafting.lua") diff --git a/mods/ITEMS/australia/mod.conf b/mods/ITEMS/australia/mod.conf deleted file mode 100644 index be03747..0000000 --- a/mods/ITEMS/australia/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = australia diff --git a/mods/ITEMS/australia/nodes_base.lua b/mods/ITEMS/australia/nodes_base.lua deleted file mode 100644 index 41f2dc6..0000000 --- a/mods/ITEMS/australia/nodes_base.lua +++ /dev/null @@ -1,408 +0,0 @@ ---[[ - Base nodes ---]] - - --- --- Stone --- - -minetest.register_node("australia:red_sandstone", { - description = "Red Sandstone", - tiles = {"aus_red_sandstone.png"}, - groups = {crumbly = 1, cracky = 3}, - drop = 'australia:red_sandstone_cobble', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:red_sandstonebrick", { - description = "Red Sandstone Brick", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"aus_red_sandstone_brick.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:sandstone_cobble", { - description = "Sandstone Cobble", - tiles = {"aus_sandstone_cobble.png"}, - groups = {crumbly = 1, cracky = 3, oddly_breakable_by_hand = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:basalt", { - description = "Basalt", - tiles = {"aus_basalt.png"}, - groups = {cracky = 2, stone = 1}, - drop = "australia:basalt_cobble", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:basalt_cobble", { - description = "Basalt Cobble", - tiles = {"aus_basalt_cobble.png"}, - is_ground_content = false, - groups = {cracky = 2, stone = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:basalt_brick", { - description = "Basalt Brick", - tiles = {"aus_basalt_brick.png"}, - is_ground_content = false, - groups = {cracky = 1, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:diorite", { - description = "Diorite", - tiles = {"aus_diorite.png"}, - groups = {cracky = 2, stone = 1}, - drop = 'australia:diorite_cobble', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:diorite_cobble", { - description = "Diorite Cobble", - tiles = {"aus_diorite_cobble.png"}, - groups = {cracky = 2, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:diorite_brick", { - description = "Diorite Brick", - tiles = {"aus_diorite_brick.png"}, - groups = {cracky = 2, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:limestone", { - description = "Limestone", - tiles = {"aus_limestone.png"}, - drop = 'australia:limestone_cobble', - groups = {cracky = 3, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:limestone_cobble", { - description = "Limestone Cobble", - tiles = {"aus_limestone_cobble.png"}, - is_ground_content = false, - groups = {cracky = 3, stone = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:limestone_brick", { - description = "Limestone Brick", - tiles = {"aus_limestone_brick.png"}, - groups = {cracky = 3, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:marble", { - description = "Marble", - tiles = {"aus_marble.png"}, - groups = {cracky = 3, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:marble_tile", { - description = "Marble Tile", - tiles = {"aus_marble_tile.png"}, - is_ground_content = false, - groups = {cracky = 2, stone = 1}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node("australia:shale", { - description = "Shale", - tiles = {"aus_shale.png","aus_shale.png","aus_shale_side.png"}, - is_ground_content = true, - groups = {crumbly = 2, cracky = 2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node("australia:slate", { - description = "Slate", - tiles = {"aus_slate.png","aus_slate.png","aus_slate_side.png"}, - is_ground_content = true, - drop = 'australia:slate_rubble', - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node("australia:slate_rubble", { - description = "Slate Rubble", - tiles = {"aus_slate_rubble.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node("australia:slate_brick", { - description = "Slate Brick", - tiles = {"aus_slate_brick.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node("australia:slate_tile", { - description = "Slate Tile", - tiles = {"aus_slate_tile.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults() -}) - - --- --- Soft / Non-Stone --- - -minetest.register_node("australia:red_dirt", { - description = "Red Dirt", - tiles = {"aus_red_dirt.png"}, - groups = {crumbly = 3, soil = 1}, - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("australia:red_sand", { - description = "Red Sand", - tiles = {"aus_red_sand.png"}, - groups = {crumbly = 3, falling_node = 1, sand = 1}, - sounds = default.node_sound_sand_defaults(), -}) - -minetest.register_node("australia:red_gravel", { - description = "Red Gravel", - tiles = {"aus_red_gravel.png"}, - groups = {crumbly = 2, falling_node = 1}, - sounds = default.node_sound_gravel_defaults(), -}) - -minetest.register_node("australia:mangrove_mud", { - description = "Mangrove Mud", - tiles = {"aus_mangrove_mud.png"}, - groups = {crumbly = 3, soil = 1, disable_jump = 1}, - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "aus_mangrove_mud", gain = 0.4}, - dug = {name = "aus_mangrove_mud", gain = 0.4}, - }), -}) - -minetest.register_node("australia:mineral_salt", { - description = "Salt Mineral", - tiles = {"aus_red_sand.png^aus_mineral_salt.png"}, - paramtype = "light", - is_ground_content = true, - groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, - drop = { - items = { - {items = {"australia:red_sand"} }, - {items = {"australia:salt"} } - } - }, - sounds = default.node_sound_dirt_defaults, -}) - -minetest.register_node( "australia:salt_block", { - description = "Salt Block", - tiles = {"default_clay.png^aus_salt_block.png"}, - is_ground_content = false, - groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3}, - on_use = minetest.item_eat(3), - sounds = default.node_sound_stone_defaults(), -}) - - --- --- Ores --- - -minetest.register_node("australia:diorite_with_coal", { - description = "Coal Ore", - tiles = {"aus_diorite.png^default_mineral_coal.png"}, - groups = {cracky = 3}, - drop = 'default:coal_lump', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:granite_with_iron", { - description = "Iron Ore", - tiles = {"technic_granite.png^default_mineral_iron.png"}, - groups = {cracky = 2}, - drop = 'default:iron_lump', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:granite_with_copper", { - description = "Copper Ore", - tiles = {"technic_granite.png^default_mineral_copper.png"}, - groups = {cracky = 2}, - drop = 'default:copper_lump', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:granite_with_opal", { - description = "Opal Ore", - tiles = {"technic_granite.png^aus_mineral_opal.png"}, - groups = {cracky = 2}, - drop = "australia:opal", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:granite_with_tin", { - description = "Tin Ore", - tiles = {"technic_granite.png^default_mineral_tin.png"}, - groups = {cracky = 2}, - drop = "default:tin_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:stone_with_aluminium", { - description = "Aluminium Ore", - tiles = {"default_stone.png^aus_mineral_aluminium.png"}, - groups = {cracky = 2}, - drop = "australia:aluminium_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:aluminiumblock", { - description = "Aluminium Block", - tiles = {"aus_aluminium_block.png"}, - is_ground_content = false, - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_metal_defaults(), -}) - -minetest.register_node("australia:stone_with_nickel", { - description = "Nickel Ore", - tiles = {"default_stone.png^aus_mineral_nickel.png"}, - groups = {cracky = 2}, - drop = "australia:nickel_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:nickelblock", { - description = "Nickel Block", - tiles = {"aus_nickel_block.png"}, - is_ground_content = false, - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_metal_defaults(), -}) - -minetest.register_node("australia:stone_with_silver", { - description = "Silver Ore", - tiles = {"default_stone.png^aus_mineral_silver.png" }, - groups = {cracky = 3}, - drop = "australia:silver_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:silverblock", { - description = "Silver Block", - tiles = {"aus_silver_block.png"}, - is_ground_content = false, - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_metal_defaults(), -}) - -minetest.register_node("australia:basalt_with_diamond", { - description = "Diamond Ore", - tiles = {"aus_basalt.png^default_mineral_diamond.png"}, - groups = {cracky = 1}, - drop = "default:diamond", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:stone_with_agate", { - description = "Agate Ore", - tiles = {"default_stone.png^aus_mineral_agate.png"}, - groups = {cracky = 1}, - drop = "australia:agate", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:stone_with_amethyst", { - description = "Amethyst Ore", - tiles = {"default_stone.png^aus_mineral_amethyst.png"}, - groups = {cracky = 1}, - drop = "australia:amethyst", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:granite_with_amethyst", { - description = "Amethyst Ore", - tiles = {"technic_granite.png^aus_mineral_amethyst.png"}, - groups = {cracky = 1}, - drop = "australia:amethyst", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:stone_with_citrine", { - description = "Citrine Ore", - tiles = {"default_stone.png^aus_mineral_citrine.png"}, - groups = {cracky = 1}, - drop = "australia:citrine", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:stone_with_emerald", { - description = "Emerald Ore", - tiles = {"default_stone.png^aus_mineral_emerald.png"}, - groups = {cracky = 1}, - drop = "australia:emerald", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:granite_with_emerald", { - description = "Emerald Ore", - tiles = {"technic_granite.png^aus_mineral_emerald.png"}, - groups = {cracky = 1}, - drop = "australia:emerald", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:stone_with_jade", { - description = "Jade Ore", - tiles = {"default_stone.png^aus_mineral_jade.png"}, - groups = {cracky = 1}, - drop = "australia:jade", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:stone_with_ruby", { - description = "Ruby Ore", - tiles = {"default_stone.png^aus_mineral_ruby.png"}, - groups = {cracky = 1}, - drop = "australia:ruby", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:stone_with_sapphire", { - description = "Sapphire Ore", - tiles = {"default_stone.png^aus_mineral_sapphire.png"}, - groups = {cracky = 1}, - drop = "australia:sapphire", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:stone_with_smoky_quartz", { - description = "Smoky Quartz Ore", - tiles = {"default_stone.png^aus_mineral_smoky_quartz.png"}, - groups = {cracky = 1}, - drop = "australia:smoky_quartz", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("australia:granite_with_smoky_quartz", { - description = "Smoky Quartz Ore", - tiles = {"technic_granite.png^aus_mineral_smoky_quartz.png"}, - groups = {cracky = 1}, - drop = "australia:smoky_quartz", - sounds = default.node_sound_stone_defaults(), -}) - diff --git a/mods/ITEMS/australia/nodes_climb.lua b/mods/ITEMS/australia/nodes_climb.lua deleted file mode 100644 index f570d3e..0000000 --- a/mods/ITEMS/australia/nodes_climb.lua +++ /dev/null @@ -1,4 +0,0 @@ ---[[ - Climbable nodes ---]] - diff --git a/mods/ITEMS/australia/nodes_glass.lua b/mods/ITEMS/australia/nodes_glass.lua deleted file mode 100644 index d828189..0000000 --- a/mods/ITEMS/australia/nodes_glass.lua +++ /dev/null @@ -1,4 +0,0 @@ ---[[ - Glass nodes ---]] - diff --git a/mods/ITEMS/australia/nodes_liquid.lua b/mods/ITEMS/australia/nodes_liquid.lua deleted file mode 100644 index 1703bc8..0000000 --- a/mods/ITEMS/australia/nodes_liquid.lua +++ /dev/null @@ -1,190 +0,0 @@ ---[[ - Liquid nodes ---]] - -minetest.register_node("australia:muddy_water_source", { - description = "Muddy Water Source", - drawtype = "liquid", - tiles = { - { - name="aus_muddy_water_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - }, - }, - special_tiles = { - { - name="aus_muddy_water_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - backface_culling = false, - }, - }, - alpha = 224, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "australia:muddy_water_flowing", - liquid_alternative_source = "australia:muddy_water_source", - liquid_viscosity = 1, - liquid_renewable = true, - liquid_range = 2, - post_effect_color = {a = 232, r = 92, g = 80, b = 48}, - groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1}, - sounds = default.node_sound_water_defaults(), -}) - -minetest.register_node("australia:muddy_water_flowing", { - description = "Flowing Muddy Water", - drawtype = "flowingliquid", - tiles = {"aus_muddy_water.png"}, - special_tiles = { - { - image="aus_muddy_water_flowing_animated.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - { - image="aus_muddy_water_flowing_animated.png", - backface_culling = true, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - }, - alpha = 224, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "australia:muddy_water_flowing", - liquid_alternative_source = "australia:muddy_water_source", - liquid_viscosity = 1, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a = 232, r = 92, g = 80, b = 48}, - groups = {water = 3, liquid = 3, puts_out_fire = 1, - not_in_creative_inventory = 1, cools_lava = 1}, - sounds = default.node_sound_water_defaults(), -}) - - -minetest.register_node("australia:crude_oil_source", { - description = "Crude Oil Source", - drawtype = "liquid", - tiles = { - { - name="aus_crude_oil_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - }, - }, - special_tiles = { - { - name="aus_crude_oil_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - backface_culling = false, - }, - }, - alpha = 248, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "australia:crude_oil_flowing", - liquid_alternative_source = "australia:crude_oil_source", - liquid_viscosity = 1, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a = 240, r = 16, g = 16, b = 16}, - groups = {liquid = 3, flammable = 1}, - sounds = default.node_sound_water_defaults(), -}) - -minetest.register_node("australia:crude_oil_flowing", { - description = "Flowing Crude Oil", - drawtype = "flowingliquid", - tiles = {"aus_crude_oil.png"}, - special_tiles = { - { - image="aus_crude_oil_flowing_animated.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - { - image="aus_crude_oil_flowing_animated.png", - backface_culling = true, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - }, - alpha = 248, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "australia:crude_oil_flowing", - liquid_alternative_source = "australia:crude_oil_source", - liquid_viscosity = 1, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a = 240, r = 16, g = 16, b = 16}, - groups = {liquid = 3, flammable = 1, not_in_creative_inventory = 1}, - sounds = default.node_sound_water_defaults(), -}) - diff --git a/mods/ITEMS/australia/nodes_misc.lua b/mods/ITEMS/australia/nodes_misc.lua deleted file mode 100644 index 24cffc7..0000000 --- a/mods/ITEMS/australia/nodes_misc.lua +++ /dev/null @@ -1,258 +0,0 @@ ---[[ - Miscellaneous nodes ---]] - -minetest.register_node("australia:salt", { - description = "Salt", - drawtype = "plantlike", - visual_scale = 0.6, - tiles = {"aus_salt.png"}, - inventory_image = "aus_salt.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - groups = {fleshy = 3, dig_immediate = 3, flammable = 1}, - on_use = minetest.item_eat(1), - sounds = default.node_sound_defaults(), - selection_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, - }, - collision_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, - }, -}) - -minetest.register_node("australia:opal",{ - description = "Opal", - drawtype = "mesh", - mesh = "aus_pebble.obj", - tiles = {"aus_opal.png"}, - paramtype = "light", - paramtype2 = "facedir", - groups = {cracky=2, stone=1, dig_immediate = 1}, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -6/16, 5/16, -1/32, 5/16}, - }, - collision_box = { - type = "fixed", - fixed = {-5/16, -8/16, -6/16, 5/16, -1/32, 5/16}, - }, - sounds = default.node_sound_stone_defaults(), -}) - - ---[[ - Small Rocks ---]] - --- Place a small nodebox. -local function small_cube(grid, pos, diameters) - local rock = {} - - rock[1] = pos.x - rock[2] = pos.y - rock[3] = pos.z - rock[4] = pos.x + diameters.x - rock[5] = pos.y + diameters.y - rock[6] = pos.z + diameters.z - aus.push(grid, rock) -end - --- Small red rocks -local default_grid_red_rocks - -for grid_count = 1, 6 do - local grid = {} - for rock_count = 2, math.random(1, 4) + 1 do - local diameter = math.random(15, 25) / 100 - local x = math.random(1, 80) / 100 - 0.5 - local z = math.random(1, 80) / 100 - 0.5 - small_cube(grid, {x = x, y = -0.5, z = z}, {x = diameter, y = diameter, z = diameter}) - end - - minetest.register_node("australia:small_red_rocks"..grid_count, { - description = "Small Red Rocks", - tiles = {"technic_granite.png"}, - is_ground_content = true, - walkable = false, - paramtype = "light", - drawtype = "nodebox", - buildable_to = true, - node_box = {type = "fixed", fixed = grid}, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, - groups = {stone = 1, oddly_breakable_by_hand = 3}, - drop = "australia:small_red_rocks", - sounds = default.node_sound_stone_defaults(), - }) - - default_grid_red_rocks = grid -end - -minetest.register_node("australia:small_red_rocks", { - description = "Small Red Rocks", - tiles = {"technic_granite.png"}, - inventory_image = "aus_small_red_rocks.png", - is_ground_content = true, - walkable = false, - paramtype = "light", - drawtype = "nodebox", - node_box = {type = "fixed", fixed = default_grid_red_rocks}, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, - groups = {stone = 1, oddly_breakable_by_hand = 3}, - sounds = default.node_sound_stone_defaults(), - on_place = function(itemstack, placer, pointed_thing) - local pos = pointed_thing.above - local player_name = placer:get_player_name() - -- place a random small red rocks node - if not minetest.is_protected(pos, player_name) then - minetest.set_node(pos, {name = "australia:small_red_rocks"..math.random(1, 6)}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - else - minetest.chat_send_player(player_name, "Node is protected") - minetest.record_protection_violation(pos, player_name) - end - return itemstack - end -}) - --- Small sandstone rocks -local default_grid_sandstone_rocks - -for grid_count = 1, 6 do - local grid = {} - for rock_count = 2, math.random(1, 4) + 1 do - local diameter = math.random(15, 25) / 100 - local x = math.random(1, 80) / 100 - 0.5 - local z = math.random(1, 80) / 100 - 0.5 - small_cube(grid, {x = x, y = -0.5, z = z}, {x = diameter, y = diameter, z = diameter}) - end - - minetest.register_node("australia:small_sandstone_rocks"..grid_count, { - description = "Small Sandstone Rocks", - tiles = {"default_sandstone.png"}, - is_ground_content = true, - walkable = false, - paramtype = "light", - drawtype = "nodebox", - buildable_to = true, - node_box = {type = "fixed", fixed = grid}, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, - groups = {stone = 1, oddly_breakable_by_hand = 3}, - drop = "australia:small_sandstone_rocks", - sounds = default.node_sound_stone_defaults(), - }) - - default_grid_sandstone_rocks = grid -end - -minetest.register_node("australia:small_sandstone_rocks", { - description = "Small Sandstone Rocks", - tiles = {"default_sandstone.png"}, - inventory_image = "aus_small_sandstone_rocks.png", - is_ground_content = true, - walkable = false, - paramtype = "light", - drawtype = "nodebox", - node_box = {type = "fixed", fixed = default_grid_sandstone_rocks}, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, - groups = {stone = 1, oddly_breakable_by_hand = 3}, - sounds = default.node_sound_stone_defaults(), - on_place = function(itemstack, placer, pointed_thing) - local pos = pointed_thing.above - local player_name = placer:get_player_name() - -- place a random small sandstone rocks node - if not minetest.is_protected(pos, player_name) then - minetest.set_node(pos, {name = "australia:small_sandstone_rocks"..math.random(1, 6)}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - else - minetest.chat_send_player(player_name, "Node is protected") - minetest.record_protection_violation(pos, player_name) - end - return itemstack - end -}) - --- Small stone rocks -local default_grid_stone_rocks - -for grid_count = 1, 6 do - local grid = {} - for rock_count = 2, math.random(1, 4) + 1 do - local diameter = math.random(15, 25) / 100 - local x = math.random(1, 80) / 100 - 0.5 - local z = math.random(1, 80) / 100 - 0.5 - small_cube(grid, {x = x, y = -0.5, z = z}, {x = diameter, y = diameter, z = diameter}) - end - - minetest.register_node("australia:small_stone_rocks"..grid_count, { - description = "Small Stone Rocks", - tiles = {"default_stone.png"}, - is_ground_content = true, - walkable = false, - paramtype = "light", - drawtype = "nodebox", - buildable_to = true, - node_box = {type = "fixed", fixed = grid}, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, - groups = {stone = 1, oddly_breakable_by_hand = 3}, - drop = "australia:small_stone_rocks", - sounds = default.node_sound_stone_defaults(), - }) - - default_grid_stone_rocks = grid -end - -minetest.register_node("australia:small_stone_rocks", { - description = "Small Stone Rocks", - tiles = {"default_stone.png"}, - inventory_image = "aus_small_stone_rocks.png", - is_ground_content = true, - walkable = false, - paramtype = "light", - drawtype = "nodebox", - node_box = {type = "fixed", fixed = default_grid_stone_rocks}, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, - groups = {stone = 1, oddly_breakable_by_hand = 3}, - sounds = default.node_sound_stone_defaults(), - on_place = function(itemstack, placer, pointed_thing) - local pos = pointed_thing.above - local player_name = placer:get_player_name() - -- place a random small stone rocks node - if not minetest.is_protected(pos, player_name) then - minetest.set_node(pos, {name = "australia:small_stone_rocks"..math.random(1, 6)}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - else - minetest.chat_send_player(player_name, "Node is protected") - minetest.record_protection_violation(pos, player_name) - end - return itemstack - end -}) - diff --git a/mods/ITEMS/australia/nodes_plants.lua b/mods/ITEMS/australia/nodes_plants.lua deleted file mode 100644 index 09d84d6..0000000 --- a/mods/ITEMS/australia/nodes_plants.lua +++ /dev/null @@ -1,353 +0,0 @@ ---[[ - Plant nodes ---]] - - -minetest.register_node("australia:tomato_bush", { - description = "Bush Tomato plant", - drawtype = "plantlike", - waving = 0, - tiles = {"aus_tomato_bush.png"}, - inventory_image = "aus_tomato_bush.png", - wield_image = "aus_tomato_bush.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, flammable = 2, flora = 1, attached_node = 1, - not_in_creative_inventory = 1}, - drop = { - items = { - {items = {"australia:tomato_bush"}, rarity = 5}, - {items = {"australia:bush_tomato 4"}} - } - }, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - }, -}) - -minetest.register_craftitem("australia:bush_tomato", { - description = "Bush Tomato", - inventory_image = "aus_bush_tomato.png", - groups = {fleshy = 3, dig_immediate = 3, flammable = 2}, - on_use = minetest.item_eat(1), -}) - -minetest.register_node("australia:lavender_grevillea", { - description = "Lavender Grevillea", - drawtype = "allfaces_optional", - tiles = {"aus_lavender_grevillea.png"}, - inventory_image = {"aus_lavender_grevillea.png"}, - wield_image = {"aus_lavender_grevillea.png"}, - paramtype = "light", - sunlight_propagates = true, - groups = {snappy = 3, flammable = 2, flora = 1, attached_node = 1}, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("australia:mangrove_fern", { - description = "Mangrove Fern", - drawtype = "plantlike", - waving = 1, - tiles = {"aus_mangrove_fern.png"}, - inventory_image = "aus_mangrove_fern.png", - wield_image = "aus_mangrove_fern.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = false, - groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - }, -}) - -minetest.register_node("australia:mitchell_grass", { - description = "Mitchell Grass", - drawtype = "plantlike", - waving = 0, - tiles = {"aus_mitchell_grass.png"}, - inventory_image = "aus_mitchell_grass.png", - wield_image = "aus_mitchell_grass.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = false, - groups = {snappy = 3, flammable = 1, flora = 1, attached_node = 1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - }, -}) - --- Nipa Palm -minetest.register_node("australia:mangrove_palm_trunk", { - description = "Nipa Palm", - tiles = {"aus_mangrove_palm_trunk.png", "aus_mangrove_mud.png", - "aus_mangrove_palm_trunk.png"}, - inventory_image = "aus_mangrove_palm_trunk.png", - wield_image = "aus_mangrove_palm_trunk.png", - paramtype = "light", - paramtype2 = "facedir", - groups = {choppy = 2, flammable = 3, flora = 1, attached_node = 1, oddly_breakable_by_hand = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node, - selection_box = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, - }, -}) - -minetest.register_node("australia:mangrove_palm_leaf_bot", { - description = "Nipa Palm", - tiles = {"aus_mangrove_palm_leaf_bot.png", "aus_mangrove_palm_leaf_bot.png", - "aus_mangrove_palm_leaf_bot.png"}, - inventory_image = "aus_mangrove_palm_leaf_bot.png", - wield_image = "aus_mangrove_palm_leaf_bot.png", - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1}, - sounds = default.node_sound_leaves_defaults(), - drawtype = "nodebox", - nodebox = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, - }, - selection_box = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, - }, -}) - -minetest.register_node("australia:mangrove_palm_leaf_top", { - description = "Nipa Palm", - tiles = {"aus_mangrove_palm_leaf_top.png", "aus_mangrove_palm_leaf_top.png", - "aus_mangrove_palm_leaf_top.png"}, - inventory_image = "aus_mangrove_palm_leaf_top.png", - wield_image = "aus_mangrove_palm_leaf_top.png", - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1}, - sounds = default.node_sound_leaves_defaults(), - drawtype = "nodebox", - nodebox = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, - }, - selection_box = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, - }, -}) - -minetest.register_node("australia:saltbush", { - description = "Old Man Saltbush", - drawtype = "plantlike", - waving = 0, - visual_scale = 1.4, - tiles = {"aus_saltbush.png"}, - inventory_image = "aus_saltbush.png", - wield_image = "aus_saltbush.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 2, flammable = 1, flora = 1, attached_node = 1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - }, -}) - -minetest.register_node("australia:spinifex", { - description = "Spinifex", - drawtype = "plantlike", - waving = 0, - visual_scale = 2, - tiles = {"aus_spinifex.png"}, - inventory_image = "aus_spinifex.png", - wield_image = "aus_spinifex.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 2, flammable = 1, flora = 1, attached_node = 1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - }, -}) - -minetest.register_node("australia:flame_grevillea_leaves", { - description = "Flame Grevillea Leaves", - drawtype = "allfaces_optional", - waving = 1, - tiles = {"aus_flame_grevillea_leaves.png"}, - paramtype = "light", - groups = {snappy = 3, leafdecay = 3, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:flame_grevillea_sapling"}, rarity = 10,}, - {items = {"australia:flame_grevillea_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:flame_grevillea_sapling", { - description = "Flame Grevillea Sapling", - drawtype = "plantlike", - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 6/16, 5/16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:flame_grevillea_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 4, z = 3}, - -- maximum interval of interior volume check - 4) - - return itemstack - end, -}) - --- Red Bottlebrush -minetest.register_node("australia:red_bottlebrush_leaves", { - description = "Red Bottlebrush Leaves", - drawtype = "allfaces_optional", - waving = 1, - tiles = {"aus_red_bottlebrush_leaves.png"}, - paramtype = "light", - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:red_bottlebrush_sapling"}, rarity = 10,}, - {items = {"australia:red_bottlebrush_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:red_bottlebrush_sapling", { - description = "Red Bottlebrush Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_melaleuca_sapling.png"}, - inventory_image = "aus_melaleuca_sapling.png", - wield_image = "aus_melaleuca_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 6/16, 5/16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:red_bottlebrush_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 4, z = 3}, - -- maximum interval of interior volume check - 4) - - return itemstack - end, -}) - --- Waratah -minetest.register_node("australia:waratah_leaves", { - description = "Waratah Leaves", - drawtype = "allfaces_optional", - waving = 1, - tiles = {"aus_waratah_leaves.png"}, - paramtype = "light", - groups = {snappy = 3, leafdecay = 3, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:waratah_sapling"}, rarity = 10,}, - {items = {"australia:waratah_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:waratah_sapling", { - description = "Waratah Sapling", - drawtype = "plantlike", - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 6/16, 5/16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:waratah_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 3, z = 3}, - -- maximum interval of interior volume check - 4) - - return itemstack - end, -}) - diff --git a/mods/ITEMS/australia/nodes_trees.lua b/mods/ITEMS/australia/nodes_trees.lua deleted file mode 100644 index 22be02d..0000000 --- a/mods/ITEMS/australia/nodes_trees.lua +++ /dev/null @@ -1,5429 +0,0 @@ ---[[ - Tree nodes ---]] - - -aus.schematics = {} - --- Arnhem Cypress Pine -minetest.register_node("australia:arnhem_cypress_pine_tree", { - description = "Arnhem Cypress Pine Tree", - tiles = { - "aus_arnhem_cypress_pine_tree_top.png", - "aus_arnhem_cypress_pine_tree_top.png", - "aus_arnhem_cypress_pine_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:arnhem_cypress_pine_leaves", { - description = "Arnhem Cypress Pine Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_arnhem_cypress_pine_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:arnhem_cypress_pine_sapling"}, rarity = 20,}, - {items = {"australia:arnhem_cypress_pine_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:arnhem_cypress_pine_sapling", { - description = "Arnhem Cypress Pine Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_pine_sapling.png"}, - inventory_image = "default_pine_sapling.png", - wield_image = "default_pine_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:arnhem_cypress_pine_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 17, z = 4}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Black Box -minetest.register_node("australia:black_box_tree", { - description = "Black Box Tree", - tiles = { - "aus_black_box_tree_top.png", - "aus_black_box_tree_top.png", - "aus_black_box_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:black_box_leaves", { - description = "Black Box Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_black_box_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:black_box_sapling"}, rarity = 20,}, - {items = {"australia:black_box_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:black_box_sapling", { - description = "Black Box Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:black_box_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -6, y = 1, z = -6}, - {x = 6, y = 16, z = 6}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Black Wattle -minetest.register_node("australia:black_wattle_tree", { - description = "Black Wattle Tree", - tiles = { - "aus_black_wattle_tree_top.png", - "aus_black_wattle_tree_top.png", - "aus_black_wattle_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - selection_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:black_wattle_leaves", { - description = "Black Wattle Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_black_wattle_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:black_wattle_sapling"}, rarity = 20,}, - {items = {"australia:black_wattle_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:black_wattle_sapling", { - description = "Black Wattle Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:black_wattle_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 17, z = 4}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Blue Gum -minetest.register_node("australia:blue_gum_tree", { - description = "Blue Gum Tree", - tiles = { - "aus_blue_gum_tree_top.png", - "aus_blue_gum_tree_top.png", - "aus_blue_gum_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:blue_gum_leaves", { - description = "Blue Gum Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_blue_gum_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:blue_gum_sapling"}, rarity = 20,}, - {items = {"australia:blue_gum_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:blue_gum_sapling", { - description = "Blue Gum Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:blue_gum_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -7, y = 1, z = -7}, - {x = 7, y = 31, z = 7}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Boab -minetest.register_node("australia:boab_tree", { - description = "Boab Tree", - tiles = { - "aus_boab_tree_top.png", - "aus_boab_tree_top.png", - "aus_boab_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:boab_leaves", { - description = "Boab Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_boab_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:boab_sapling"}, rarity = 20,}, - {items = {"australia:boab_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:boab_sapling", { - description = "Boab Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_boab_sapling.png"}, - inventory_image = "aus_boab_sapling.png", - wield_image = "aus_boab_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:boab_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -5, y = 1, z = -5}, - {x = 5, y = 9, z = 5}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Bull Banksia -minetest.register_node("australia:bull_banksia_tree", { - description = "Bull Banksia Tree", - tiles = { - "aus_bull_banksia_tree_top.png", - "aus_bull_banksia_tree_top.png", - "aus_bull_banksia_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - selection_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:bull_banksia_leaves", { - description = "Bull Banksia Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_bull_banksia_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:bull_banksia_sapling"}, rarity = 20,}, - {items = {"australia:bull_banksia_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:bull_banksia_sapling", { - description = "Bull Banksia Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_banksia_sapling.png"}, - inventory_image = "aus_banksia_sapling.png", - wield_image = "aus_banksia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:bull_banksia_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 8, z = 3}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Celery-top Pine -minetest.register_node("australia:celery_top_pine_tree", { - description = "Celery-top Pine Tree", - tiles = { - "aus_celery_top_pine_tree_top.png", - "aus_celery_top_pine_tree_top.png", - "aus_celery_top_pine_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - selection_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:celery_top_pine_leaves", { - description = "Celery-top Pine Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_celery_top_pine_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:celery_top_pine_sapling"}, rarity = 20,}, - {items = {"australia:celery_top_pine_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:celery_top_pine_sapling", { - description = "Celery-top Pine Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_pine_sapling.png"}, - inventory_image = "default_pine_sapling.png", - wield_image = "default_pine_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:celery_top_pine_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 12, z = 4}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Australian Cherry -minetest.register_node("australia:cherry_tree", { - description = "Australian Cherry Tree", - tiles = { - "aus_cherry_tree_top.png", - "aus_cherry_tree_top.png", - "aus_cherry_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - selection_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:cherry_leaves", { - description = "Australian Cherry Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_cherry_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:cherry_sapling"}, rarity = 20,}, - {items = {"australia:cherry_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:cherry_sapling", { - description = "Australian Cherry Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_berry_sapling.png"}, - inventory_image = "aus_berry_sapling.png", - wield_image = "aus_berry_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:cherry_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 6, z = 3}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - -minetest.register_node("australia:cherry", { - description = "Australian Cherries", - drawtype = "plantlike", - visual_scale = 8/16, - tiles = {"aus_cherry.png"}, - inventory_image = "aus_cherry.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, - }, - groups = {fleshy = 3, dig_immediate = 2, flammable = 3, leafdecay = 5, leafdecay_drop = 1}, - on_use = minetest.item_eat(1), - sounds = default.node_sound_leaves_defaults(), - after_place_node = function(pos, placer, itemstack) - if placer:is_player() then - minetest.set_node(pos, {name = "australia:cherry", param2 = 1}) - end - end, -}) - --- Coast Banksia -minetest.register_node("australia:coast_banksia_tree", { - description = "Coast Banksia Tree", - tiles = { - "aus_coast_banksia_tree_top.png", - "aus_coast_banksia_tree_top.png", - "aus_coast_banksia_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - selection_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:coast_banksia_leaves", { - description = "Coast Banksia Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_coast_banksia_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:coast_banksia_sapling"}, rarity = 20,}, - {items = {"australia:coast_banksia_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:coast_banksia_sapling", { - description = "Coast Banksia Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_banksia_sapling.png"}, - inventory_image = "aus_banksia_sapling.png", - wield_image = "aus_banksia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:coast_banksia_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -5, y = 1, z = -5}, - {x = 5, y = 18, z = 5}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Coolabah -minetest.register_node("australia:coolabah_tree", { - description = "Coolabah Tree", - tiles = { - "aus_coolabah_tree_top.png", - "aus_coolabah_tree_top.png", - "aus_coolabah_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:coolabah_leaves", { - description = "Coolabah Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_coolabah_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:coolabah_sapling"}, rarity = 20,}, - {items = {"australia:coolabah_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:coolabah_sapling", { - description = "Coolabah Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:blue_gum_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -5, y = 1, z = -5}, - {x = 5, y = 15, z = 5}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Daintree Stringybark -minetest.register_node("australia:daintree_stringybark_tree", { - description = "Daintree Stringybark Tree", - tiles = { - "aus_daintree_stringybark_tree_top.png", - "aus_daintree_stringybark_tree_top.png", - "aus_daintree_stringybark_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:daintree_stringybark_leaves", { - description = "Daintree Stringybark Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_daintree_stringybark_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:daintree_stringybark_sapling"}, rarity = 20,}, - {items = {"australia:daintree_stringybark_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:daintree_stringybark_sapling", { - description = "Daintree Stringybark Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:blue_gum_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -9, y = 1, z = -9}, - {x = 9, y = 31, z = 9}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Darwin Woollybutt -minetest.register_node("australia:darwin_woollybutt_tree", { - description = "Darwin Woollybutt Tree", - tiles = { - "aus_darwin_woollybutt_tree_top.png", - "aus_darwin_woollybutt_tree_top.png", - "aus_darwin_woollybutt_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:darwin_woollybutt_leaves", { - description = "Darwin Woollybutt Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_darwin_woollybutt_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:darwin_woollybutt_sapling"}, rarity = 20,}, - {items = {"australia:darwin_woollybutt_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:darwin_woollybutt_sapling", { - description = "Darwin Woollybutt Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:blue_gum_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -5, y = 1, z = -5}, - {x = 5, y = 18, z = 5}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Desert Oak -minetest.register_node("australia:desert_oak_tree", { - description = "Desert Oak Tree", - tiles = { - "aus_desert_oak_tree_top.png", - "aus_desert_oak_tree_top.png", - "aus_desert_oak_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:desert_oak_leaves", { - description = "Desert Oak Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_desert_oak_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:desert_oak_sapling"}, rarity = 20,}, - {items = {"australia:desert_oak_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:desert_oak_sapling", { - description = "Desert Oak Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:desert_oak_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 12, z = 4}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Australian Fan Palm -minetest.register_node("australia:fan_palm_tree", { - description = "Australian Fan Palm Tree", - tiles = { - "aus_fan_palm_tree_top.png", - "aus_fan_palm_tree_top.png", - "aus_fan_palm_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - selection_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:fan_palm_leaves", { - description = "Australian Fan Palm Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_fan_palm_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 2, leafdecay = 5, flammable = 1, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:fan_palm_sapling"}, rarity = 20,}, - {items = {"australia:fan_palm_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:fan_palm_sapling", { - description = "Australian Fan Palm Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_palm_sapling.png"}, - inventory_image = "aus_palm_sapling.png", - wield_image = "aus_palm_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 1, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:fan_palm_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 10, z = 3}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Golden Wattle -minetest.register_node("australia:golden_wattle_tree", { - description = "Golden Wattle Tree", - tiles = { - "aus_golden_wattle_tree_top.png", - "aus_golden_wattle_tree_top.png", - "aus_golden_wattle_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - selection_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 3, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:golden_wattle_leaves", { - description = "Golden Wattle Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_golden_wattle_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:golden_wattle_sapling"}, rarity = 20,}, - {items = {"australia:golden_wattle_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:golden_wattle_sapling", { - description = "Golden Wattle Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:golden_wattle_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 6, z = 2}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Grey Mangrove -minetest.register_node("australia:grey_mangrove_tree", { - description = "Grey Mangrove Tree", - tiles = { - "aus_grey_mangrove_tree_top.png", - "aus_grey_mangrove_tree_top.png", - "aus_grey_mangrove_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, 8/16, 3/32}, - }, - selection_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, 8/16, 3/32}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 3, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:grey_mangrove_leaves", { - description = "Grey Mangrove Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_grey_mangrove_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:grey_mangrove_sapling"}, rarity = 20,}, - {items = {"australia:grey_mangrove_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:grey_mangrove_sapling", { - description = "Grey Mangrove Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_mangrove_sapling.png"}, - inventory_image = "aus_mangrove_sapling.png", - wield_image = "aus_mangrove_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:grey_mangrove_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 5, z = 2}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Huon Pine -minetest.register_node("australia:huon_pine_tree", { - description = "Huon Pine Tree", - tiles = { - "aus_huon_pine_tree_top.png", - "aus_huon_pine_tree_top.png", - "aus_huon_pine_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:huon_pine_leaves", { - description = "Huon Pine Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_huon_pine_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:huon_pine_sapling"}, rarity = 20,}, - {items = {"australia:huon_pine_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:huon_pine_sapling", { - description = "Huon Pine Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_pine_sapling.png"}, - inventory_image = "default_pine_sapling.png", - wield_image = "default_pine_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:huon_pine_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -6, y = 1, z = -6}, - {x = 6, y = 19, z = 6}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Illawarra Flame -minetest.register_node("australia:illawarra_flame_tree", { - description = "Illawarra Flame Tree", - tiles = { - "aus_illawarra_flame_tree_top.png", - "aus_illawarra_flame_tree_top.png", - "aus_illawarra_flame_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:illawarra_flame_leaves", { - description = "Illawarra Flame Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_illawarra_flame_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:illawarra_flame_sapling"}, rarity = 20,}, - {items = {"australia:illawarra_flame_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:illawarra_flame_sapling", { - description = "Illawarra Flame Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_illawarra_flame_sapling.png"}, - inventory_image = "aus_illawarra_flame_sapling.png", - wield_image = "aus_illawarra_flame_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:illawarra_flame_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -7, y = 1, z = -7}, - {x = 7, y = 18, z = 7}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Jarrah -minetest.register_node("australia:jarrah_tree", { - description = "Jarrah Tree", - tiles = { - "aus_jarrah_tree_top.png", - "aus_jarrah_tree_top.png", - "aus_jarrah_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 1, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:jarrah_leaves", { - description = "Jarrah Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_jarrah_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:jarrah_sapling"}, rarity = 20,}, - {items = {"australia:jarrah_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:jarrah_sapling", { - description = "Jarrah Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:jarrah_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -10, y = 1, z = -10}, - {x = 10, y = 30, z = 10}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Karri -minetest.register_node("australia:karri_tree", { - description = "Karri Tree", - tiles = { - "aus_karri_tree_top.png", - "aus_karri_tree_top.png", - "aus_karri_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 1, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:karri_leaves", { - description = "Karri Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_karri_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:karri_sapling"}, rarity = 20,}, - {items = {"australia:karri_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:karri_sapling", { - description = "Karri Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:karri_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -10, y = 1, z = -10}, - {x = 10, y = 40, z = 10}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Lemon Eucalyptus -minetest.register_node("australia:lemon_eucalyptus_tree", { - description = "Lemon Eucalyptus Tree", - tiles = { - "aus_lemon_eucalyptus_tree_top.png", - "aus_lemon_eucalyptus_tree_top.png", - "aus_lemon_eucalyptus_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:lemon_eucalyptus_leaves", { - description = "Lemon Eucalyptus Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_lemon_eucalyptus_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:lemon_eucalyptus_sapling"}, rarity = 20,}, - {items = {"australia:lemon_eucalyptus_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:lemon_eucalyptus_sapling", { - description = "Lemon Eucalyptus Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:lemon_eucalyptus_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -6, y = 1, z = -6}, - {x = 6, y = 24, z = 6}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Lemon Myrtle -minetest.register_node("australia:lemon_myrtle_tree", { - description = "Lemon Myrtle Tree", - tiles = { - "aus_lemon_myrtle_tree_top.png", - "aus_lemon_myrtle_tree_top.png", - "aus_lemon_myrtle_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - selection_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 3, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:lemon_myrtle_leaves", { - description = "Lemon Myrtle Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_lemon_myrtle_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:lemon_myrtle_sapling"}, rarity = 20,}, - {items = {"australia:lemon_myrtle_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:lemon_myrtle_sapling", { - description = "Lemon Myrtle Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_myrtle_sapling.png"}, - inventory_image = "aus_myrtle_sapling.png", - wield_image = "aus_myrtle_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:lemon_myrtle_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 8, z = 3}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Lilly Pilly -minetest.register_node("australia:lilly_pilly_tree", { - description = "Lilly Pilly Tree", - tiles = { - "aus_lilly_pilly_tree_top.png", - "aus_lilly_pilly_tree_top.png", - "aus_lilly_pilly_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - selection_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:lilly_pilly_leaves", { - description = "Lilly Pilly Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_lilly_pilly_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:lilly_pilly_sapling"}, rarity = 20,}, - {items = {"australia:lilly_pilly_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:lilly_pilly_sapling", { - description = "Lilly Pilly Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_berry_sapling.png"}, - inventory_image = "aus_berry_sapling.png", - wield_image = "aus_berry_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:lilly_pilly_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -6, y = 1, z = -6}, - {x = 6, y = 12, z = 6}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - -minetest.register_node("australia:lilly_pilly_berries", { - description = "Lilly Pilly Berries", - drawtype = "plantlike", - visual_scale = 0.67, - tiles = {"aus_lilly_pilly_berries.png"}, - inventory_image = "aus_lilly_pilly_berries.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, - }, - groups = {fleshy = 3, dig_immediate = 3, flammable = 2, leafdecay = 5, leafdecay_drop = 1}, - on_use = minetest.item_eat(1), - sounds = default.node_sound_leaves_defaults(), - after_place_node = function(pos, placer, itemstack) - if placer:is_player() then - minetest.set_node(pos, {name = "australia:lilly_pilly_berries", param2 = 1}) - end - end, -}) - --- Macadamia -minetest.register_node("australia:macadamia_tree", { - description = "Macadamia Tree", - tiles = { - "aus_macadamia_tree_top.png", - "aus_macadamia_tree_top.png", - "aus_macadamia_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - selection_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:macadamia_leaves", { - description = "Prickly Macadamia Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_macadamia_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:macadamia_sapling"}, rarity = 20,}, - {items = {"australia:macadamia_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:macadamia_sapling", { - description = "Prickly Macadamia Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_macadamia_sapling.png"}, - inventory_image = "aus_macadamia_sapling.png", - wield_image = "aus_macadamia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:macadamia_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 12, z = 4}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - -minetest.register_node("australia:macadamia", { - description = "Macadamia Nuts", - drawtype = "plantlike", - visual_scale = 0.67, - tiles = {"aus_macadamia.png"}, - inventory_image = "aus_macadamia.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, - }, - groups = {fleshy = 3, dig_immediate = 3, flammable = 2, leafdecay = 5, leafdecay_drop = 1}, - on_use = minetest.item_eat(1), - sounds = default.node_sound_leaves_defaults(), - after_place_node = function(pos, placer, itemstack) - if placer:is_player() then - minetest.set_node(pos, {name = "australia:macadamia", param2 = 1}) - end - end, -}) - --- Mangrove Apple -minetest.register_node("australia:mangrove_apple_tree", { - description = "Mangrove Apple Tree", - tiles = { - "aus_mangrove_apple_tree_top.png", - "aus_mangrove_apple_tree_top.png", - "aus_mangrove_apple_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - selection_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:mangrove_apple_leaves", { - description = "Mangrove Apple Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_mangrove_apple_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:mangrove_apple_sapling"}, rarity = 20,}, - {items = {"australia:mangrove_apple_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:mangrove_apple_sapling", { - description = "Mangrove Apple Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_mangrove_apple_sapling.png"}, - inventory_image = "aus_mangrove_apple_sapling.png", - wield_image = "aus_mangrove_apple_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:mangrove_apple_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 12, z = 4}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - -minetest.register_node("australia:mangrove_apple", { - description = "Mangrove Apple", - drawtype = "plantlike", - visual_scale = 0.67, - tiles = {"aus_mangrove_apple.png"}, - inventory_image = "aus_mangrove_apple.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, - }, - groups = {fleshy = 3, dig_immediate = 3, flammable = 2, leafdecay = 5, leafdecay_drop = 1}, - on_use = minetest.item_eat(1), - sounds = default.node_sound_leaves_defaults(), - after_place_node = function(pos, placer, itemstack) - if placer:is_player() then - minetest.set_node(pos, {name = "australia:mangrove_apple", param2 = 1}) - end - end, -}) - --- Marri -minetest.register_node("australia:marri_tree", { - description = "Marri Tree", - tiles = { - "aus_marri_tree_top.png", - "aus_marri_tree_top.png", - "aus_marri_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 1, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:marri_leaves", { - description = "Marri Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_marri_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:marri_sapling"}, rarity = 20,}, - {items = {"australia:marri_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:marri_sapling", { - description = "Marri Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:marri_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -10, y = 1, z = -10}, - {x = 10, y = 30, z = 10}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Merbau -minetest.register_node("australia:merbau_tree", { - description = "Merbau Tree", - tiles = { - "aus_merbau_tree_top.png", - "aus_merbau_tree_top.png", - "aus_merbau_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:merbau_leaves", { - description = "Merbau Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_merbau_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:merbau_sapling"}, rarity = 20,}, - {items = {"australia:merbau_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:merbau_sapling", { - description = "Merbau Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_merbau_sapling.png"}, - inventory_image = "aus_merbau_sapling.png", - wield_image = "aus_merbau_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:merbau_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -5, y = 1, z = -5}, - {x = 5, y = 23, z = 5}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Moreton Bay Fig -minetest.register_node("australia:moreton_bay_fig_tree", { - description = "Moreton Bay Fig Tree", - tiles = { - "aus_moreton_bay_fig_tree_top.png", - "aus_moreton_bay_fig_tree_top.png", - "aus_moreton_bay_fig_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:moreton_bay_fig_leaves", { - description = "Moreton Bay Fig Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_moreton_bay_fig_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:moreton_bay_fig_sapling"}, rarity = 20,}, - {items = {"australia:moreton_bay_fig_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:moreton_bay_fig_sapling", { - description = "Moreton Bay Fig Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_fig_sapling.png"}, - inventory_image = "aus_fig_sapling.png", - wield_image = "aus_fig_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:mangrove_apple_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -15, y = 1, z = -15}, - {x = 15, y = 35, z = 15}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - -minetest.register_node("australia:moreton_bay_fig", { - description = "Moreton Bay Fig", - drawtype = "plantlike", - visual_scale = 0.67, - tiles = {"aus_moreton_bay_fig.png"}, - inventory_image = "aus_moreton_bay_fig.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, - }, - groups = {fleshy = 3, dig_immediate = 3, flammable = 2, leafdecay = 5, leafdecay_drop = 1}, - on_use = minetest.item_eat(1), - sounds = default.node_sound_leaves_defaults(), - after_place_node = function(pos, placer, itemstack) - if placer:is_player() then - minetest.set_node(pos, {name = "australia:moreton_bay_fig", param2 = 1}) - end - end, -}) - --- Mulga Tree -minetest.register_node("australia:mulga_tree", { - description = "Mulga Tree", - tiles = { - "aus_mulga_tree_top.png", - "aus_mulga_tree_top.png", - "aus_mulga_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - selection_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:mulga_leaves", { - description = "Mulga Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_mulga_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:mulga_sapling"}, rarity = 20,}, - {items = {"australia:mulga_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:mulga_sapling", { - description = "Mulga Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:mulga_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 10, z = 3}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Palm Tree -minetest.register_node("australia:palm_tree", { - description = "Palm Tree", - tiles = { - "aus_palm_tree_top.png", - "aus_palm_tree_top.png", - "aus_palm_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:palm_leaves", { - description = "Palm Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_palm_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:palm_sapling"}, rarity = 20,}, - {items = {"australia:palm_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:palm_sapling", { - description = "Palm Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_palm_sapling.png"}, - inventory_image = "aus_palm_sapling.png", - wield_image = "aus_palm_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:palm_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -5, y = 1, z = -5}, - {x = 5, y = 15, z = 5}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Paper Bark -minetest.register_node("australia:paperbark_tree", { - description = "Paper Bark Tree", - tiles = { - "aus_paperbark_tree_top.png", - "aus_paperbark_tree_top.png", - "aus_paperbark_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:paperbark_leaves", { - description = "Paper Bark Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_paperbark_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:paperbark_sapling"}, rarity = 20,}, - {items = {"australia:paperbark_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:paperbark_sapling", { - description = "Paper Bark Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_melaleuca_sapling.png"}, - inventory_image = "aus_melaleuca_sapling.png", - wield_image = "aus_melaleuca_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:paperbark_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -5, y = 1, z = -5}, - {x = 5, y = 15, z = 5}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Desert Quandong -minetest.register_node("australia:quandong_tree", { - description = "Desert Quandong Tree", - tiles = { - "aus_quandong_tree_top.png", - "aus_quandong_tree_top.png", - "aus_quandong_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - selection_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:quandong_leaves", { - description = "Desert Quandong Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_quandong_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:quandong_sapling"}, rarity = 20,}, - {items = {"australia:quandong_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:quandong_sapling", { - description = "Desert Quandong Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_quandong_sapling.png"}, - inventory_image = "aus_quandong_sapling.png", - wield_image = "aus_quandong_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:quandong_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 5, z = 2}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - -minetest.register_node("australia:quandong", { - description = "Desert Quandong", - drawtype = "plantlike", - visual_scale = 8/16, - tiles = {"aus_quandong.png"}, - inventory_image = "aus_quandong.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, - }, - groups = {fleshy = 3, dig_immediate = 3, flammable = 2, leafdecay = 5, leafdecay_drop = 1}, - on_use = minetest.item_eat(1), - sounds = default.node_sound_leaves_defaults(), - after_place_node = function(pos, placer, itemstack) - if placer:is_player() then - minetest.set_node(pos, {name = "australia:quandong", param2 = 1}) - end - end, -}) - --- River Oak -minetest.register_node("australia:river_oak_tree", { - description = "River Oak Tree", - tiles = { - "aus_river_oak_tree_top.png", - "aus_river_oak_tree_top.png", - "aus_river_oak_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:river_oak_leaves", { - description = "River Oak Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_river_oak_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:river_oak_sapling"}, rarity = 20,}, - {items = {"australia:river_oak_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:river_oak_sapling", { - description = "River Oak Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:river_oak_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -5, y = 1, z = -5}, - {x = 5, y = 20, z = 5}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- River Red Gum -minetest.register_node("australia:river_red_gum_tree", { - description = "River Red Gum Tree", - tiles = { - "aus_river_red_gum_tree_top.png", - "aus_river_red_gum_tree_top.png", - "aus_river_red_gum_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 1,flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:river_red_gum_leaves", { - description = "River Red Gum Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_river_red_gum_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:river_red_gum_sapling"}, rarity = 20,}, - {items = {"australia:river_red_gum_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:river_red_gum_sapling", { - description = "River Red Gum Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:river_red_gum_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -8, y = 1, z = -8}, - {x = 8, y = 26, z = 8}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Rottnest Island Pine -minetest.register_node("australia:rottnest_island_pine_tree", { - description = "Rottnest Island Pine Tree", - tiles = { - "aus_rottnest_island_pine_tree_top.png", - "aus_rottnest_island_pine_tree_top.png", - "aus_rottnest_island_pine_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - selection_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:rottnest_island_pine_leaves", { - description = "Rottnest Island Pine Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_rottnest_island_pine_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:rottnest_island_pine_sapling"}, rarity = 20,}, - {items = {"australia:rottnest_island_pine_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:rottnest_island_pine_sapling", { - description = "Rottnest Island Pine Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_pine_sapling.png"}, - inventory_image = "default_pine_sapling.png", - wield_image = "default_pine_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:rottnest_island_pine_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 6, z = 3}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Scribbly Gum -minetest.register_node("australia:scribbly_gum_tree", { - description = "Scribbly Gum Tree", - tiles = { - "aus_scribbly_gum_tree_top.png", - "aus_scribbly_gum_tree_top.png", - "aus_scribbly_gum_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:scribbly_gum_leaves", { - description = "Scribbly Gum Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_scribbly_gum_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:scribbly_gum_sapling"}, rarity = 20,}, - {items = {"australia:scribbly_gum_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:scribbly_gum_sapling", { - description = "Scribbly Gum Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:scribbly_gum_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -5, y = 1, z = -5}, - {x = 5, y = 13, z = 5}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Shoestring Acacia -minetest.register_node("australia:shoestring_acacia_tree", { - description = "Shoestring Acacia Tree", - tiles = { - "aus_shoestring_acacia_tree_top.png", - "aus_shoestring_acacia_tree_top.png", - "aus_shoestring_acacia_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:shoestring_acacia_leaves", { - description = "Shoestring Acacia Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_shoestring_acacia_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:shoestring_acacia_sapling"}, rarity = 20,}, - {items = {"australia:shoestring_acacia_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:shoestring_acacia_sapling", { - description = "Shoestring Acacia Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:shoestring_acacia_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 9, z = 4}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Snow Gum -minetest.register_node("australia:snow_gum_tree", { - description = "Snow Gum Tree", - tiles = { - "aus_snow_gum_tree_top.png", - "aus_snow_gum_tree_top.png", - "aus_snow_gum_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - selection_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:snow_gum_leaves", { - description = "Snow Gum Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_snow_gum_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:snow_gum_sapling"}, rarity = 20,}, - {items = {"australia:snow_gum_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:snow_gum_sapling", { - description = "Snow Gum Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:snow_gum_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 8, z = 2}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Southern Sassafras -minetest.register_node("australia:southern_sassafras_tree", { - description = "Southern Sassafras Tree", - tiles = { - "aus_southern_sassafras_tree_top.png", - "aus_southern_sassafras_tree_top.png", - "aus_southern_sassafras_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - selection_box = { - type = "fixed", - fixed = {-6/16, -8/16, -6/16, 6/16, 8/16, 6/16}, - }, - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:southern_sassafras_leaves", { - description = "Southern Sassafras Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_southern_sassafras_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:southern_sassafras_sapling"}, rarity = 20,}, - {items = {"australia:southern_sassafras_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:southern_sassafras_sapling", { - description = "Southern Sassafras Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_pine_sapling.png"}, - inventory_image = "default_pine_sapling.png", - wield_image = "default_pine_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:southern_sassafras_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 15, z = 4}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Stilted Mangrove -minetest.register_node("australia:stilted_mangrove_tree", { - description = "Stilted Mangrove Tree", - tiles = { - "aus_stilted_mangrove_tree_top.png", - "aus_stilted_mangrove_tree_top.png", - "aus_stilted_mangrove_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, 8/16, 3/32}, - }, - selection_box = { - type = "fixed", - fixed = {-3/32, -8/16, -3/32, 3/32, 8/16, 3/32}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 3, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:stilted_mangrove_leaves", { - description = "Stilted Mangrove Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_stilted_mangrove_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:stilted_mangrove_sapling"}, rarity = 20,}, - {items = {"australia:stilted_mangrove_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:stilted_mangrove_sapling", { - description = "Stilted Mangrove Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_mangrove_sapling.png"}, - inventory_image = "aus_mangrove_sapling.png", - wield_image = "aus_mangrove_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:stilted_mangrove_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 9, z = 3}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Sugar Gum -minetest.register_node("australia:sugar_gum_tree", { - description = "Sugar Gum Tree", - tiles = { - "aus_sugar_gum_tree_top.png", - "aus_sugar_gum_tree_top.png", - "aus_sugar_gum_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:sugar_gum_leaves", { - description = "Sugar Gum Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_sugar_gum_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:sugar_gum_sapling"}, rarity = 20,}, - {items = {"australia:sugar_gum_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:sugar_gum_sapling", { - description = "Sugar Gum Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:sugar_gum_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -10, y = 1, z = -10}, - {x = 10, y = 23, z = 10}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Swamp Bloodwood -minetest.register_node("australia:swamp_bloodwood_tree", { - description = "Swamp Bloodwood Tree", - tiles = { - "aus_swamp_bloodwood_tree_top.png", - "aus_swamp_bloodwood_tree_top.png", - "aus_swamp_bloodwood_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:swamp_bloodwood_leaves", { - description = "Swamp Bloodwood Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_swamp_bloodwood_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:swamp_bloodwood_sapling"}, rarity = 20,}, - {items = {"australia:swamp_bloodwood_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:swamp_bloodwood_sapling", { - description = "Swamp Bloodwood Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:swamp_bloodwood_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 12, z = 4}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Swamp Gum -minetest.register_node("australia:swamp_gum_tree", { - description = "Swamp Gum Tree", - tiles = { - "aus_swamp_gum_tree_top.png", - "aus_swamp_gum_tree_top.png", - "aus_swamp_gum_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 1, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:swamp_gum_leaves", { - description = "Swamp Gum Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_swamp_gum_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:swamp_gum_sapling"}, rarity = 20,}, - {items = {"australia:swamp_gum_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:swamp_gum_sapling", { - description = "Swamp Gum Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:swamp_gum_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -10, y = 1, z = -10}, - {x = 10, y = 52, z = 10}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Swamp Paperbark -minetest.register_node("australia:swamp_paperbark_tree", { - description = "Swamp Paperbark Tree", - tiles = { - "aus_swamp_paperbark_tree_top.png", - "aus_swamp_paperbark_tree_top.png", - "aus_swamp_paperbark_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - selection_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:swamp_paperbark_leaves", { - description = "Swamp Paperbark Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_swamp_paperbark_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:swamp_paperbark_sapling"}, rarity = 20,}, - {items = {"australia:swamp_paperbark_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:swamp_paperbark_sapling", { - description = "Swamp Paperbark Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_melaleuca_sapling.png"}, - inventory_image = "aus_melaleuca_sapling.png", - wield_image = "aus_melaleuca_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:swamp_paperbark_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 6, z = 2}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Tasmanian Myrtle -minetest.register_node("australia:tasmanian_myrtle_tree", { - description = "Tasmanian Myrtle Tree", - tiles = { - "aus_tasmanian_myrtle_tree_top.png", - "aus_tasmanian_myrtle_tree_top.png", - "aus_tasmanian_myrtle_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:tasmanian_myrtle_leaves", { - description = "Tasmanian Myrtle Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_tasmanian_myrtle_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:tasmanian_myrtle_sapling"}, rarity = 20,}, - {items = {"australia:tasmanian_myrtle_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:tasmanian_myrtle_sapling", { - description = "Tasmanian Myrtle Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_myrtle_sapling.png"}, - inventory_image = "aus_myrtle_sapling.png", - wield_image = "aus_myrtle_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:tasmanian_myrtle_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -9, y = 1, z = -9}, - {x = 9, y = 29, z = 9}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Tea Tree -minetest.register_node("australia:tea_tree_tree", { - description = "Tea Tree", - tiles = { - "aus_tea_tree_tree_top.png", - "aus_tea_tree_tree_top.png", - "aus_tea_tree_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - selection_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, 8/16, 4/16}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:tea_tree_leaves", { - description = "Tea Tree Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_tea_tree_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:tea_tree_sapling"}, rarity = 20,}, - {items = {"australia:tea_tree_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:tea_tree_sapling", { - description = "Tea Tree Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_melaleuca_sapling.png"}, - inventory_image = "aus_melaleuca_sapling.png", - wield_image = "aus_melaleuca_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:tea_tree_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -3, y = 1, z = -3}, - {x = 3, y = 7, z = 3}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- White Box -minetest.register_node("australia:white_box_tree", { - description = "White Box Tree", - tiles = { - "aus_white_box_tree_top.png", - "aus_white_box_tree_top.png", - "aus_white_box_tree.png" - }, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, flammable = 1}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:white_box_leaves", { - description = "White Box Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_white_box_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:white_box_sapling"}, rarity = 20,}, - {items = {"australia:white_box_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:white_box_sapling", { - description = "White Box Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"aus_eucalyptus_sapling.png"}, - inventory_image = "aus_eucalyptus_sapling.png", - wield_image = "aus_eucalyptus_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:white_box_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -8, y = 1, z = -8}, - {x = 8, y = 20, z = 8}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - --- Wirewood -minetest.register_node("australia:wirewood_tree", { - description = "Wirewood Tree", - tiles = { - "aus_wirewood_tree_top.png", - "aus_wirewood_tree_top.png", - "aus_wirewood_tree.png" - }, - paramtype2 = "facedir", - paramtype = "light", - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - selection_box = { - type = "fixed", - fixed = {-5/32, -8/16, -5/32, 5/32, 8/16, 5/32}, - }, - drop = 'default:stick 4', - groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("australia:wirewood_leaves", { - description = "Wirewood Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.0, - tiles = {"aus_wirewood_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 5, flammable = 3, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"australia:wirewood_sapling"}, rarity = 20,}, - {items = {"australia:wirewood_leaves"},} - } - }, - sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("australia:wirewood_sapling", { - description = "Wirewood Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} - }, - groups = {snappy = 2, dig_immediate = 2, flammable = 3, attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "australia:wirewood_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 10, z = 2}, - -- maximum interval of interior volume check - 4) - return itemstack - end, -}) - - ---[[ - Wood Planks ---]] - -minetest.register_node("australia:eucalyptus_wood", { - description = "Eucalyptus Wood Planks", - tiles = {"aus_eucalyptus_wood.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:blackwood", { - description = "Blackwood Planks", - tiles = {"aus_blackwood.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:blue_gum", { - description = "Blue Gum Planks", - tiles = {"aus_blue_gum.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:celery_top_pine", { - description = "Celery-top Pine Planks", - tiles = {"aus_celery_top_pine.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:red_mahogany", { - description = "Red Mahogany Planks", - tiles = {"aus_red_mahogany.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:huon_pine", { - description = "Huon Pine Planks", - tiles = {"aus_huon_pine.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:jarrah", { - description = "Jarrah Planks", - tiles = {"aus_jarrah.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:karri", { - description = "Karri Planks", - tiles = {"aus_karri.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:marri", { - description = "Marri Planks", - tiles = {"aus_marri.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:merbau", { - description = "Merbau Planks", - tiles = {"aus_merbau.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:red_gum", { - description = "Red Gum Planks", - tiles = {"aus_red_gum.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:southern_sassafras", { - description = "Southern Sassafras Planks", - tiles = {"aus_southern_sassafras.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:tasmanian_oak", { - description = "Tasmanian Oak Planks", - tiles = {"aus_tasmanian_oak.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("australia:tasmanian_myrtle", { - description = "Tasmanian Myrtle Planks", - tiles = {"aus_tasmanian_myrtle.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - - --- Localize math routines for performance. -local math_abs = math.abs -local math_ceil = math.ceil -local math_floor = math.floor -local math_max = math.max -local math_random = math.random -local math_sqrt = math.sqrt - --- Create and initialize a table for a schematic. -function aus.schematic_array(width, height, depth) - -- Dimensions of data array. - local s = {size = {x = width, y = height, z = depth}} - s.data = {} - - for z = 0, depth - 1 do - for y = 0, height - 1 do - for x = 0, width - 1 do - local i = z * width * height + y * width + x + 1 - s.data[i] = {} - s.data[i].name = "air" - s.data[i].param1 = 000 - end - end - end - - s.yslice_prob = {} - - return s -end - --- Make a tree trunk 2-nodes wide. -local function make_treetrunk2(x0, y0, z0, data, area, height, trunk, air, base) - local ystride = area.ystride - local ybot = y0 - 1 - for x = x0, x0 + 1 do - for y = 1,height do - for z = z0, z0 + 1 do -- iterate in a 2x2 square around the trunk - local iv = area:index(x, ybot, z) - for i = 0, height + 1 do - if data[iv] == air then -- find the ground level - if math_random() < base then - data[iv-ystride] = trunk -- make tree trunk below - if math_random() < base then - data[iv] = trunk -- make tree trunk at this air node - end - end - break - end - iv = iv + ystride -- increment by one node up - end - end - end - end -end - --- Make a tree trunk 3-nodes wide. -local function make_treetrunk3(x0, y0, z0, data, area, height, trunk, air, base) - local ystride = area.ystride - local ybot = y0 - 1 - for x = x0 - 1, x0 + 1 do - for y = 1, height do - for z = z0 - 1, z0 + 1 do -- iterate in a 3x3 square around the trunk - local iv = area:index(x, ybot, z) - for i = 0, height + 1 do - if data[iv] == air then -- find the ground level - if math_random() < base then - data[iv-ystride] = trunk -- make tree trunk below - if math_random() < base then - data[iv] = trunk -- make tree trunk at this air node - end - end - break - end - iv = iv + ystride -- increment by one node up - end - end - end - end -end - - --- Make leaves on a tree in a noise blob. -function aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, radius, np, limbs, fruit_chance, fruit) - limbs = limbs - fruit_chance = fruit_chance or 0 - np.seed = math_random(0, 16777215) -- noise seed - local minp = vector.subtract(pos, radius) -- minimal corner of the leavesblob - local maxp = vector.add(pos, radius) -- maximal corner of the leavesblob - -- Same positions, but with integer coordinates - local int_minp = {x = math_floor(minp.x), y = math_floor(minp.y), z = math_floor(minp.z)} - local int_maxp = {x = math_ceil(maxp.x), y = math_ceil(maxp.y), z = math_ceil(maxp.z)} - - local length = vector.subtract(int_maxp, int_minp) - local chulens = vector.add(length, 1) - local obj = minetest.get_perlin_map(np, chulens) - local pmap = obj:get3dMap_flat(minp) - local i = 1 - -- iterate for every position - -- calculate the distance from the center by the Pythagorean theorem: d = sqrt(x²+y²+z²) - for x = int_minp.x, int_maxp.x do - -- calculate x², y², z² separately, to avoid recalculating x² for every - -- y or z iteration. Divided by the radius to scale it to 0…1 - local xval = ((x - pos.x) / radius.x) ^ 2 - for y = int_minp.y, int_maxp.y do - local yval = ((y - pos.y) / radius.y) ^ 2 - for z = int_minp.z, int_maxp.z do - local zval = ((z - pos.z) / radius.z) ^ 2 - local dist = math_sqrt(xval + yval + zval) -- Calculate the distance - local nval = pmap[i] -- Get the noise value - if nval > dist then -- if the noise is bigger than the distance, make leaves - local iv = area:index(x, y, z) - if data[iv] == air or data[iv] == ignore then - -- make some branches within the leaf structure - if nval > dist * 1.5 and limbs and math_random(5) == 1 then - data[iv] = trunk - -- if a fruit tree add fruit - elseif math_random() < fruit_chance then - data[iv] = fruit - else - data[iv] = leaves - end - end - end - i = i + 1 -- increment noise index - end - end - end -end - - --- Generic bush function. -function aus.make_bush(pos, data, area, height, radius, stem, leaves, air, - ignore) - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = stem - iv = iv + ystride -- increment by one node up - end - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, stem, leaves, air, ignore, - {x = radius, y = radius, z = radius}, np) -end - --- Generic tree function. -function aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, - ignore, limbs, fruit_chance, fruit) - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - 1 - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius, z = radius}, np, limbs, fruit_chance, fruit) -end - -function aus.make_black_box(pos, data, area, height, radius, trunk, leaves, - air, ignore, limbs, fruit) - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk2(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.5) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - 1 - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius * 0.8, z = radius}, np, limbs) -end - -function aus.make_black_wattle(pos, data, area, height, radius, trunk, leaves, - air, ignore, limbs, fruit) - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - 1 - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius * 1.5, z = radius}, np, limbs) -end - -function aus.make_tall_gum(pos, data, area, height, radius, trunk, leaves, air, - ignore, limbs, fruit) - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk2(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.2) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - 1 - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius * 1.25, z = radius}, np, limbs) -end - -function aus.make_boab(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - local ystride = area.ystride -- Useful to get the index above - local width = 0.8 - local ybot = pos.y - 1 - for x = pos.x - 1, pos.x + 1 do - for y = 1, height do - for z = pos.z - 1, pos.z + 1 do -- iterate in a 3x3 square around the trunk - local iv = area:index(x, ybot, z) - for i = 0, height + 1 do - if data[iv] == air then -- find the ground level - if math_random() < width then - data[iv-ystride] = trunk -- make tree trunk below - if math_random() < width then - data[iv] = trunk -- make tree trunk at this air node - end - end - break - end - iv = iv + ystride -- increment by one node up - end - end - end - end - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - 1 - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius * 0.5, z = radius}, np, limbs) -end - -function aus.make_conifer(pos, data, area, height, radius, trunk, leaves, air, - ignore, limbs, fruit_chance, fruit) - local x, y, z = pos.x, pos.y, pos.z - fruit_chance = fruit_chance or 0 - -- Trunk - for y_dist = 0, height - 1 do - local iv = area:index(x, y + y_dist, z) - if y_dist == 0 or data[iv] == air or data[iv] == leaves then - data[iv] = trunk - end - end - -- Add rings of leaves randomly - local d = 0 - for yi = height + 1, 2 + math_random(0, 1), -1 do - for xi = -d, d do - for zi = -d, d do - if math_abs(xi) + math_abs(zi) <= d or math_abs(zi) + math_abs(xi) <= d then - local iv = area:index(x + xi, y + yi, z + zi) - if data[iv] == air or data[iv] == ignore then - if math_random() < fruit_chance then - data[iv] = fruit - else - data[iv] = leaves - end - end - end - end - end - d = d + 1 - if d > math_random(2,4) then d = 1 end - end -end - -function aus.make_fan_palm(pos, data, area, height, radius, trunk, leaves, air, ignore) - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius * 0.5, z = radius}, np) -end - -function aus.make_jarrah(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - local x, y, z = pos.x, pos.y, pos.z - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk2(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.8) - make_treetrunk3(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.4) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius, z = radius}, np, limbs) -end - -function aus.make_karri(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - local x, y, z = pos.x, pos.y, pos.z - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk3(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.8) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius, z = radius}, np, limbs) -end - -function aus.make_mangrove(pos, data, area, height, radius, trunk, leaves, air, ignore) - local x, y, z = pos.x, pos.y, pos.z - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius * 0.5, z = radius}, np) - for z_dist = -1, 1 do - local vi_1 = area:index(x - 1, y - 1, z + z_dist) - local vi_2 = area:index(x - 1, y, z + z_dist) - local vi_3 = area:index(x - 1, y + 1, z + z_dist) - for x_dist = -1, 1 do - if math_random(1, 3) >= 2 then - if data[vi_1] == air or data[vi_1] == ignore then - data[vi_1] = trunk - elseif data[vi_2] == air or data[vi_2] == ignore then - data[vi_2] = trunk - elseif data[vi_3] == air or data[vi_3] == ignore then - data[vi_3] = trunk - end - end - vi_1 = vi_1 + 1 - vi_2 = vi_2 + 1 - end - end -end - --- Mangrove trees use schematic placement because the vocelmanipulator cannot place nodes under sea level. -function aus.generate_mangrove_tree_schematic(trunk_height, trunk, leaf) - local height = trunk_height * 2 + 1 - local radius = 2 - local width = 2 * radius + 1 - local trunk_top = height - 3 - local s = aus.schematic_array(width, height, width) - - -- roots, trunk, and extra leaves - for z = -1, 1 do - for y = 1, trunk_top do - for x = -1, 1 do - local i = (z + radius) * width * height + y * width + (x + radius) + 1 - if x == 0 and z == 0 then - s.data[i].name = trunk - s.data[i].param1 = 255 - s.data[i].force_place = true - elseif (x == 0 or z == 0) and y < 3 then - s.data[i].name = trunk - s.data[i].param1 = 255 - s.data[i].force_place = true - elseif y > 3 then - s.data[i].name = leaf - s.data[i].param1 = 50 - end - end - end - end - - -- canopy - for y = 1, trunk_top + 2 do - if y > trunk_height and (y == trunk_top or math_random(1, height - y) == 1) then - local x, z = 0, 0 - while x == 0 and z == 0 do - x = math_random(-1, 1) * 2 - z = math_random(-1, 1) * 2 - end - for j = -1, 1, 2 do - aus.generate_canopy(s, leaf, {x = j * x, y = y, z = j * z}) - end - end - end - return s -end - --- Create a canopy of leaves. -function aus.generate_canopy(s, leaf, pos) - local height = s.size.y - local width = s.size.x - local rx = math_floor(s.size.x / 2) - local rz = math_floor(s.size.z / 2) - local r1 = 4 -- leaf decay radius - local probs = {255, 200, 150, 100, 75} - - for z = -r1, r1 do - for y = 0, 1 do - for x = -r1, r1 do - if x+pos.x >= -rx and x + pos.x <= rx and y + pos.y >= 0 and - y + pos.y < height and z + pos.z >= -rz and z + pos.z <= rz then - local i = (z + pos.z + rz) * width * height + (y + pos.y) * width + (x + pos.x + rx) + 1 - local dist1 = math_sqrt(x^2 + y^2 + z^2) - local dist2 = math_sqrt((x+pos.x)^2 + (z+pos.z)^2) - if dist1 <= r1 then - local newprob = probs[math_max(1, math_ceil(dist1))] - if s.data[i].name == "air" then - s.data[i].name = leaf - s.data[i].param1 = newprob - elseif s.data[i].name == leaf then - s.data[i].param1 = math_max(s.data[i].param1, newprob) - end - end - end - end - end - end -end - -function aus.make_marri(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - local x, y, z = pos.x, pos.y, pos.z - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk2(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.6) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius, z = radius}, np, limbs) -end - -function aus.make_merbau(pos, data, area, height, radius, trunk, leaves, air, ignore) - local x, y, z = pos.x, pos.y, pos.z - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk3(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.2) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius * 0.5, z = radius}, np) -end - -function aus.make_moreton_bay_fig(pos, data, area, height, radius, trunk, - leaves, air, ignore, limbs, fruit_chance, fruit) - local x, y, z = pos.x, pos.y, pos.z - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk2(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.7) - make_treetrunk3(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.3) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius, z = radius}, np, limbs, fruit_chance, fruit) -end - -function aus.make_river_red_gum(pos, data, area, height, radius, trunk, leaves, - air, ignore, limbs) - local x, y, z = pos.x, pos.y, pos.z - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk2(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.7) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius, z = radius}, np, limbs) -end - -function aus.make_swamp_gum(pos, data, area, height, radius, trunk, leaves, - air, ignore, limbs) - local x, y, z = pos.x, pos.y, pos.z - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk2(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.8) - make_treetrunk3(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.5) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, - octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius * 0.8, y = radius * 1.2, z = radius * 0.8}, np, limbs) -end - -function aus.make_tasmanian_myrtle(pos, data, area, height, radius, trunk, - leaves, air, ignore, limbs) - local x, y, z = pos.x, pos.y, pos.z - local ystride = area.ystride -- Useful to get the index above - local iv = area:indexp(pos) - for i = 1, height do -- Build the trunk - data[iv] = trunk - iv = iv + ystride -- increment by one node up - end - make_treetrunk2(pos.x, pos.y, pos.z, data, area, height, trunk, air, 0.6) - local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} - pos.y = pos.y + height - aus.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, - {x = radius, y = radius, z = radius}, np, limbs) -end - - -function aus.grow_arnhem_cypress_pine(pos) - -- individual parameters - local height = math_random(8, 12) - local radius = 4 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:arnhem_cypress_pine_tree") - local leaves = minetest.get_content_id("australia:arnhem_cypress_pine_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 4, y = pos.y, z = pos.z - 4}, - {x = pos.x + 4, y = pos.y + height + 2, z = pos.z + 4} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_conifer(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_black_box(pos) - -- individual parameters - local height = math_random(5, 9) - local radius = math_random(4, 6) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:black_box_tree") - local leaves = minetest.get_content_id("australia:black_box_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 6, y = pos.y, z = pos.z - 6}, - {x = pos.x + 6, y = pos.y + height + 6, z = pos.z + 6} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_black_box(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_black_wattle(pos) - -- individual parameters - local height = math_random(5, 7) - local radius = 3 - local limbs = false - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:black_wattle_tree") - local leaves = minetest.get_content_id("australia:black_wattle_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 3, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_black_wattle(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_blue_gum(pos) - -- individual parameters - local height = math_random(10, 18) - local radius = math_random(5, 6) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:blue_gum_tree") - local leaves = minetest.get_content_id("australia:blue_gum_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 7, y = pos.y, z = pos.z - 7}, - {x = pos.x + 7, y = pos.y + height + 9, z = pos.z + 7} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tall_gum(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_boab(pos) - -- individual parameters - local height = math_random(5, 6) - local radius = math_random(4, 5) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:boab_tree") - local leaves = minetest.get_content_id("australia:boab_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 5, y = pos.y, z = pos.z - 5}, - {x = pos.x + 5, y = pos.y + height + 3, z = pos.z + 5} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_boab(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_bull_banksia(pos) - -- individual parameters - local height = math_random(3, 5) - local radius = math_random(2, 3) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:bull_banksia_tree") - local leaves = minetest.get_content_id("australia:bull_banksia_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 3, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_celery_top_pine(pos) - -- individual parameters - local height = math_random(7, 9) - local radius = math_random(3, 4) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:celery_top_pine_tree") - local leaves = minetest.get_content_id("australia:celery_top_pine_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 4, y = pos.y, z = pos.z - 4}, - {x = pos.x + 4, y = pos.y + height + 2, z = pos.z + 4} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_conifer(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_cherry(pos) - -- individual parameters - local height = math_random(3, 4) - local radius = 3 - local limbs = nil - local fruit_chance = 0.2 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:cherry_tree") - local leaves = minetest.get_content_id("australia:cherry_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local fruit = minetest.get_content_id("australia:cherry") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 2, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_conifer(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs, fruit_chance, fruit) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_coast_banksia(pos) - -- individual parameters - local height = math_random(7, 12) - local radius = math_random(4, 5) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:coast_banksia_tree") - local leaves = minetest.get_content_id("australia:coast_banksia_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 5, y = pos.y, z = pos.z - 5}, - {x = pos.x + 5, y = pos.y + height + 5, z = pos.z + 5} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_coolabah(pos) - -- individual parameters - local height = math_random(7, 9) - local radius = math_random(4, 5) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:coolabah_tree") - local leaves = minetest.get_content_id("australia:coolabah_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 5, y = pos.y, z = pos.z - 5}, - {x = pos.x + 5, y = pos.y + height + 5, z = pos.z + 5} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_daintree_stringybark(pos) - -- individual parameters - local height = math_random(12, 16) - local radius = math_random(6, 8) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:daintree_stringybark_tree") - local leaves = minetest.get_content_id("australia:daintree_stringybark_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 9, y = pos.y, z = pos.z - 9}, - {x = pos.x + 9, y = pos.y + height + 11, z = pos.z + 9} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tall_gum(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_darwin_woollybutt(pos) - -- individual parameters - local height = math_random(7, 12) - local radius = math_random(4, 5) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:darwin_woollybutt_tree") - local leaves = minetest.get_content_id("australia:darwin_woollybutt_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 5, y = pos.y, z = pos.z - 5}, - {x = pos.x + 5, y = pos.y + height + 5, z = pos.z + 5} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_desert_oak(pos) - -- individual parameters - local height = math_random(4, 8) - local radius = math_random(2, 4) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:desert_oak_tree") - local leaves = minetest.get_content_id("australia:desert_oak_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 4, y = pos.y, z = pos.z - 4}, - {x = pos.x + 4, y = pos.y + height + 4, z = pos.z + 4} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_fan_palm(pos) - -- individual parameters - local height = math_random(5, 7) - local radius = 3 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:fan_palm_tree") - local leaves = minetest.get_content_id("australia:fan_palm_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y - 1, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 2, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_fan_palm(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_flame_grevillea(pos) - -- individual parameters - local height = 1 - local radius = math_random(2, 3) - -- voxelmanip stuff - local stem = minetest.get_content_id("australia:acacia_bush_stem") - local leaves = minetest.get_content_id("australia:flame_grevillea_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 3, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_bush(pos, data, area, height, radius, stem, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_golden_wattle(pos) - -- individual parameters - local height = math_random(3, 4) - local radius = 2 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:golden_wattle_tree") - local leaves = minetest.get_content_id("australia:golden_wattle_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 2, y = pos.y, z = pos.z - 2}, - {x = pos.x + 2, y = pos.y + height + 2, z = pos.z + 2} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_grey_mangrove(pos) - -- individual parameters - local height = math_random(3, 4) - local radius = 2 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:grey_mangrove_tree") - local leaves = minetest.get_content_id("australia:grey_mangrove_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, - {x = pos.x + 2, y = pos.y + height + 1, z = pos.z + 2} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_mangrove(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_huon_pine(pos) - -- individual parameters - local height = math_random(7, 12) - local radius = math_random(5, 6) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:huon_pine_tree") - local leaves = minetest.get_content_id("australia:huon_pine_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 6, y = pos.y, z = pos.z - 6}, - {x = pos.x + 6, y = pos.y + height + 6, z = pos.z + 6} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_illawarra_flame(pos) - -- individual parameters - local height = math_random(8, 10) - local radius = math_random(5, 6) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:illawarra_flame_tree") - local leaves = minetest.get_content_id("australia:illawarra_flame_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 7, y = pos.y, z = pos.z - 7}, - {x = pos.x + 7, y = pos.y + height + 7, z = pos.z + 7} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_jarrah(pos) - -- individual parameters - local height = math_random(12, 16) - local radius = math_random(7, 8) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:jarrah_tree") - local leaves = minetest.get_content_id("australia:jarrah_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 10, y = pos.y, z = pos.z - 10}, - {x = pos.x + 10, y = pos.y + height + 10, z = pos.z + 10} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_jarrah(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_karri(pos) - -- individual parameters - local height = math_random(15, 20) - local radius = math_random(7, 8) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:karri_tree") - local leaves = minetest.get_content_id("australia:karri_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 10, y = pos.y, z = pos.z - 10}, - {x = pos.x + 10, y = pos.y + height + 10, z = pos.z + 10} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_karri(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_lemon_eucalyptus(pos) - -- individual parameters - local height = math_random(10, 15) - local radius = math_random(4, 5) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:lemon_eucalyptus_tree") - local leaves = minetest.get_content_id("australia:lemon_eucalyptus_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 6, y = pos.y, z = pos.z - 6}, - {x = pos.x + 6, y = pos.y + height + 6, z = pos.z + 6} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_lemon_myrtle(pos) - -- individual parameters - local height = math_random(3, 5) - local radius = math_random(2, 3) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:lemon_myrtle_tree") - local leaves = minetest.get_content_id("australia:lemon_myrtle_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 3, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_lilly_pilly(pos) - -- individual parameters - local height = math_random(3, 5) - local radius = math_random(3, 5) - local limbs = nil - local fruit_chance = 0.3 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:lilly_pilly_tree") - local leaves = minetest.get_content_id("australia:lilly_pilly_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local fruit = minetest.get_content_id("australia:lilly_pilly_berries") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 6, y = pos.y, z = pos.z - 6}, - {x = pos.x + 6, y = pos.y + height + 6, z = pos.z + 6} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs, fruit_chance, fruit) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_macadamia(pos) - -- individual parameters - local height = math_random(5, 7) - local radius = math_random(3, 4) - local limbs = nil - local fruit_chance = 0.3 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:macadamia_tree") - local leaves = minetest.get_content_id("australia:macadamia_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local fruit = minetest.get_content_id("australia:macadamia") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 4, y = pos.y, z = pos.z - 4}, - {x = pos.x + 4, y = pos.y + height + 4, z = pos.z + 4} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs, fruit_chance, fruit) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_mangrove_apple(pos) - -- individual parameters - local height = math_random(6, 8) - local radius = math_random(3, 4) - local limbs = nil - local fruit_chance = 0.2 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:mangrove_apple_tree") - local leaves = minetest.get_content_id("australia:mangrove_apple_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local fruit = minetest.get_content_id("australia:mangrove_apple") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 4, y = pos.y, z = pos.z - 4}, - {x = pos.x + 4, y = pos.y + height + 4, z = pos.z + 4} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs, fruit_chance, fruit) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_marri(pos) - -- individual parameters - local height = math_random(12, 16) - local radius = math_random(6, 8) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:marri_tree") - local leaves = minetest.get_content_id("australia:marri_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 10, y = pos.y, z = pos.z - 10}, - {x = pos.x + 10, y = pos.y + height + 10, z = pos.z + 10} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_marri(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_merbau(pos) - -- individual parameters - local height = math_random(12, 16) - local radius = math_random(4, 5) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:merbau_tree") - local leaves = minetest.get_content_id("australia:merbau_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 5, y = pos.y - 1, z = pos.z - 5}, - {x = pos.x + 5, y = pos.y + height + 3, z = pos.z + 5} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_merbau(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_moreton_bay_fig(pos) - -- individual parameters - local height = math_random(12, 16) - local radius = math_random(10, 12) - local limbs = true - local fruit_chance = 0.2 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:moreton_bay_fig_tree") - local leaves = minetest.get_content_id("australia:moreton_bay_fig_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local fruit = minetest.get_content_id("australia:moreton_bay_fig") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 15, y = pos.y, z = pos.z - 15}, - {x = pos.x + 15, y = pos.y + height + 15, z = pos.z + 15} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_moreton_bay_fig(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs, fruit_chance, fruit) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_mulga(pos) - -- individual parameters - local height = math_random(4, 6) - local radius = math_random(2, 3) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:mulga_tree") - local leaves = minetest.get_content_id("australia:mulga_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 3, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_paperbark(pos) - -- individual parameters - local height = math_random(5, 8) - local radius = math_random(3, 4) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:paperbark_tree") - local leaves = minetest.get_content_id("australia:paperbark_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 5, y = pos.y, z = pos.z - 5}, - {x = pos.x + 5, y = pos.y + height + 5, z = pos.z + 5} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_quandong(pos) - -- individual parameters - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.2 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:quandong_tree") - local leaves = minetest.get_content_id("australia:quandong_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local fruit = minetest.get_content_id("australia:quandong") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 2, y = pos.y, z = pos.z - 2}, - {x = pos.x + 2, y = pos.y + height + 2, z = pos.z + 2} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs, fruit_chance, fruit) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_red_bottlebrush(pos) - -- individual parameters - local height = 1 - local radius = math_random(2, 3) - -- voxelmanip stuff - local stem = minetest.get_content_id("australia:bush_stem") - local leaves = minetest.get_content_id("australia:red_bottlebrush_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 3, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_bush(pos, data, area, height, radius, stem, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_river_oak(pos) - -- individual parameters - local height = math_random(10, 12) - local radius = math_random(3, 4) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:river_oak_tree") - local leaves = minetest.get_content_id("australia:river_oak_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 5, y = pos.y, z = pos.z - 5}, - {x = pos.x + 5, y = pos.y + height + 5, z = pos.z + 5} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_river_red_gum(pos) - -- individual parameters - local height = math_random(10, 15) - local radius = math_random(5, 7) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:river_red_gum_tree") - local leaves = minetest.get_content_id("australia:river_red_gum_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 8, y = pos.y, z = pos.z - 8}, - {x = pos.x + 8, y = pos.y + height + 8, z = pos.z + 8} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_river_red_gum(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_rottnest_island_pine(pos) - -- individual parameters - local height = math_random(3, 4) - local radius = 3 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:rottnest_island_pine_tree") - local leaves = minetest.get_content_id("australia:rottnest_island_pine_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 2, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_conifer(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_scribbly_gum(pos) - -- individual parameters - local height = math_random(5, 7) - local radius = math_random(3, 4) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:scribbly_gum_tree") - local leaves = minetest.get_content_id("australia:scribbly_gum_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 5, y = pos.y, z = pos.z - 5}, - {x = pos.x + 5, y = pos.y + height + 5, z = pos.z + 5} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_shoestring_acacia(pos) - -- individual parameters - local height = math_random(3, 5) - local radius = math_random(3, 4) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:shoestring_acacia_tree") - local leaves = minetest.get_content_id("australia:shoestring_acacia_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 4, y = pos.y, z = pos.z - 4}, - {x = pos.x + 4, y = pos.y + height + 4, z = pos.z + 4} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_snow_gum(pos) - -- individual parameters - local height = math_random(2, 4) - local radius = 2 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:snow_gum_tree") - local leaves = minetest.get_content_id("australia:snow_gum_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 2, y = pos.y, z = pos.z - 2}, - {x = pos.x + 2, y = pos.y + height + 4, z = pos.z + 2} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_southern_sassafras(pos) - -- individual parameters - local height = math_random(7, 12) - local radius = math_random(5, 7) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:southern_sassafras_tree") - local leaves = minetest.get_content_id("australia:southern_sassafras_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 4, y = pos.y, z = pos.z - 4}, - {x = pos.x + 4, y = pos.y + height + 2, z = pos.z + 4} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_conifer(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_stilted_mangrove(pos) - -- individual parameters - local height = math_random(4, 7) - local radius = math_random(2, 3) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:stilted_mangrove_tree") - local leaves = minetest.get_content_id("australia:stilted_mangrove_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y - 1, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 2, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_mangrove(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_sugar_gum(pos) - -- individual parameters - local height = math_random(7, 11) - local radius = math_random(6, 8) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:sugar_gum_tree") - local leaves = minetest.get_content_id("australia:sugar_gum_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 10, y = pos.y, z = pos.z - 10}, - {x = pos.x + 10, y = pos.y + height + 10, z = pos.z + 10} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_swamp_bloodwood(pos) - -- individual parameters - local height = math_random(5, 7) - local radius = math_random(3, 4) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:swamp_bloodwood_tree") - local leaves = minetest.get_content_id("australia:swamp_bloodwood_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 4, y = pos.y, z = pos.z - 4}, - {x = pos.x + 4, y = pos.y + height + 4, z = pos.z + 4} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_swamp_gum(pos) - -- individual parameters - local height = math_random(20, 30) - local radius = math_random(7, 9) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:swamp_gum_tree") - local leaves = minetest.get_content_id("australia:swamp_gum_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 10, y = pos.y, z = pos.z - 10}, - {x = pos.x + 10, y = pos.y + height + 12, z = pos.z + 10} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_swamp_gum(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_swamp_paperbark(pos) - -- individual parameters - local height = math_random(3, 4) - local radius = 2 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:swamp_paperbark_tree") - local leaves = minetest.get_content_id("australia:swamp_paperbark_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 2, y = pos.y, z = pos.z - 2}, - {x = pos.x + 2, y = pos.y + height + 2, z = pos.z + 2} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_tasmanian_myrtle(pos) - -- individual parameters - local height = math_random(12, 15) - local radius = math_random(5, 7) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:tasmanian_myrtle_tree") - local leaves = minetest.get_content_id("australia:tasmanian_myrtle_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 9, y = pos.y - 1, z = pos.z - 9}, - {x = pos.x + 9, y = pos.y + height + 9, z = pos.z + 9} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tasmanian_myrtle(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_tea_tree(pos) - -- individual parameters - local height = math_random(3, 4) - local radius = math_random(2, 3) - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:tea_tree_tree") - local leaves = minetest.get_content_id("australia:tea_tree_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 3, y = pos.y, z = pos.z - 3}, - {x = pos.x + 3, y = pos.y + height + 3, z = pos.z + 3} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_waratah(pos) - -- individual parameters - local height = 1 - local radius = math_random(1, 2) - -- voxelmanip stuff - local stem = minetest.get_content_id("australia:bush_stem") - local leaves = minetest.get_content_id("australia:waratah_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 2, y = pos.y, z = pos.z - 2}, - {x = pos.x + 2, y = pos.y + height + 2, z = pos.z + 2} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_bush(pos, data, area, height, radius, stem, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_white_box(pos) - -- individual parameters - local height = math_random(6, 10) - local radius = math_random(5, 7) - local limbs = true - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:white_box_tree") - local leaves = minetest.get_content_id("australia:white_box_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 8, y = pos.y, z = pos.z - 8}, - {x = pos.x + 8, y = pos.y + height + 8, z = pos.z + 8} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore, limbs) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - -function aus.grow_wirewood(pos) - -- individual parameters - local height = math_random(5, 7) - local radius = 2 - -- voxelmanip stuff - local trunk = minetest.get_content_id("australia:wirewood_tree") - local leaves = minetest.get_content_id("australia:wirewood_leaves") - local air = minetest.get_content_id("air") - local ignore = minetest.get_content_id("ignore") - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = pos.x - 2, y = pos.y, z = pos.z - 2}, - {x = pos.x + 2, y = pos.y + height + 2, z = pos.z + 2} - ) - local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - aus.make_tree(pos, data, area, height, radius, trunk, leaves, air, ignore) - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - - -aus.palm_model={ - axiom="FFcccccc&FFFFFdddRA//A//A//A//A//A", - rules_a="[&fb&bbb[++f--&ffff&ff][--f++&ffff&ff]&ffff&bbbb&b]", - rules_b="f", - rules_c="/", - rules_d="F", - trunk="australia:palm_tree", - leaves="australia:palm_leaves", - angle=30, - iterations=2, - random_level=0, - trunk_type="single", - thin_branches=true, - fruit="australia:palm_tree", - fruit_chance=0 -} - diff --git a/mods/ITEMS/australia/textures/aus_aluminium_block.png b/mods/ITEMS/australia/textures/aus_aluminium_block.png deleted file mode 100644 index 8fd5572..0000000 Binary files a/mods/ITEMS/australia/textures/aus_aluminium_block.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_aluminium_ingot.png b/mods/ITEMS/australia/textures/aus_aluminium_ingot.png deleted file mode 100644 index 62deb5e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_aluminium_ingot.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_aluminium_lump.png b/mods/ITEMS/australia/textures/aus_aluminium_lump.png deleted file mode 100644 index 27678ee..0000000 Binary files a/mods/ITEMS/australia/textures/aus_aluminium_lump.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_arnhem_cypress_pine_leaves.png b/mods/ITEMS/australia/textures/aus_arnhem_cypress_pine_leaves.png deleted file mode 100644 index 5625ee7..0000000 Binary files a/mods/ITEMS/australia/textures/aus_arnhem_cypress_pine_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_arnhem_cypress_pine_tree.png b/mods/ITEMS/australia/textures/aus_arnhem_cypress_pine_tree.png deleted file mode 100644 index 7ddf110..0000000 Binary files a/mods/ITEMS/australia/textures/aus_arnhem_cypress_pine_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_arnhem_cypress_pine_tree_top.png b/mods/ITEMS/australia/textures/aus_arnhem_cypress_pine_tree_top.png deleted file mode 100644 index f5e6128..0000000 Binary files a/mods/ITEMS/australia/textures/aus_arnhem_cypress_pine_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_banksia_sapling.png b/mods/ITEMS/australia/textures/aus_banksia_sapling.png deleted file mode 100644 index b881a12..0000000 Binary files a/mods/ITEMS/australia/textures/aus_banksia_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_berry_sapling.png b/mods/ITEMS/australia/textures/aus_berry_sapling.png deleted file mode 100644 index 1e8f099..0000000 Binary files a/mods/ITEMS/australia/textures/aus_berry_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_black_box_leaves.png b/mods/ITEMS/australia/textures/aus_black_box_leaves.png deleted file mode 100644 index 310053c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_black_box_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_black_box_tree.png b/mods/ITEMS/australia/textures/aus_black_box_tree.png deleted file mode 100644 index eb3a29e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_black_box_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_black_box_tree_top.png b/mods/ITEMS/australia/textures/aus_black_box_tree_top.png deleted file mode 100644 index c7fd785..0000000 Binary files a/mods/ITEMS/australia/textures/aus_black_box_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_black_wattle_leaves.png b/mods/ITEMS/australia/textures/aus_black_wattle_leaves.png deleted file mode 100644 index 13cf8b1..0000000 Binary files a/mods/ITEMS/australia/textures/aus_black_wattle_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_black_wattle_tree.png b/mods/ITEMS/australia/textures/aus_black_wattle_tree.png deleted file mode 100644 index a7b8c1f..0000000 Binary files a/mods/ITEMS/australia/textures/aus_black_wattle_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_black_wattle_tree_top.png b/mods/ITEMS/australia/textures/aus_black_wattle_tree_top.png deleted file mode 100644 index 4d8c8d3..0000000 Binary files a/mods/ITEMS/australia/textures/aus_black_wattle_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_blackwood.png b/mods/ITEMS/australia/textures/aus_blackwood.png deleted file mode 100644 index e0fec50..0000000 Binary files a/mods/ITEMS/australia/textures/aus_blackwood.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_blue_gum.png b/mods/ITEMS/australia/textures/aus_blue_gum.png deleted file mode 100644 index b7d9468..0000000 Binary files a/mods/ITEMS/australia/textures/aus_blue_gum.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_blue_gum_leaves.png b/mods/ITEMS/australia/textures/aus_blue_gum_leaves.png deleted file mode 100644 index c0d504c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_blue_gum_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_blue_gum_tree.png b/mods/ITEMS/australia/textures/aus_blue_gum_tree.png deleted file mode 100644 index 551e869..0000000 Binary files a/mods/ITEMS/australia/textures/aus_blue_gum_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_blue_gum_tree_top.png b/mods/ITEMS/australia/textures/aus_blue_gum_tree_top.png deleted file mode 100644 index d0bb940..0000000 Binary files a/mods/ITEMS/australia/textures/aus_blue_gum_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_boab_leaves.png b/mods/ITEMS/australia/textures/aus_boab_leaves.png deleted file mode 100644 index 35609e7..0000000 Binary files a/mods/ITEMS/australia/textures/aus_boab_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_boab_sapling.png b/mods/ITEMS/australia/textures/aus_boab_sapling.png deleted file mode 100644 index be43351..0000000 Binary files a/mods/ITEMS/australia/textures/aus_boab_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_boab_tree.png b/mods/ITEMS/australia/textures/aus_boab_tree.png deleted file mode 100644 index d0abf22..0000000 Binary files a/mods/ITEMS/australia/textures/aus_boab_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_boab_tree_top.png b/mods/ITEMS/australia/textures/aus_boab_tree_top.png deleted file mode 100644 index 298f5bb..0000000 Binary files a/mods/ITEMS/australia/textures/aus_boab_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_bull_banksia_leaves.png b/mods/ITEMS/australia/textures/aus_bull_banksia_leaves.png deleted file mode 100644 index ff0d39c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_bull_banksia_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_bull_banksia_tree.png b/mods/ITEMS/australia/textures/aus_bull_banksia_tree.png deleted file mode 100644 index 7d9f8fc..0000000 Binary files a/mods/ITEMS/australia/textures/aus_bull_banksia_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_bull_banksia_tree_top.png b/mods/ITEMS/australia/textures/aus_bull_banksia_tree_top.png deleted file mode 100644 index ed881b4..0000000 Binary files a/mods/ITEMS/australia/textures/aus_bull_banksia_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_bush_tomato.png b/mods/ITEMS/australia/textures/aus_bush_tomato.png deleted file mode 100644 index dd811b1..0000000 Binary files a/mods/ITEMS/australia/textures/aus_bush_tomato.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_celery_top_pine.png b/mods/ITEMS/australia/textures/aus_celery_top_pine.png deleted file mode 100644 index 46bd3fc..0000000 Binary files a/mods/ITEMS/australia/textures/aus_celery_top_pine.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_celery_top_pine_leaves.png b/mods/ITEMS/australia/textures/aus_celery_top_pine_leaves.png deleted file mode 100644 index 7369b0e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_celery_top_pine_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_celery_top_pine_tree.png b/mods/ITEMS/australia/textures/aus_celery_top_pine_tree.png deleted file mode 100644 index 2958710..0000000 Binary files a/mods/ITEMS/australia/textures/aus_celery_top_pine_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_celery_top_pine_tree_top.png b/mods/ITEMS/australia/textures/aus_celery_top_pine_tree_top.png deleted file mode 100644 index 407f6f6..0000000 Binary files a/mods/ITEMS/australia/textures/aus_celery_top_pine_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_cherry.png b/mods/ITEMS/australia/textures/aus_cherry.png deleted file mode 100644 index bad5b58..0000000 Binary files a/mods/ITEMS/australia/textures/aus_cherry.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_cherry_leaves.png b/mods/ITEMS/australia/textures/aus_cherry_leaves.png deleted file mode 100644 index 607ca8e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_cherry_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_cherry_tree.png b/mods/ITEMS/australia/textures/aus_cherry_tree.png deleted file mode 100644 index ace5461..0000000 Binary files a/mods/ITEMS/australia/textures/aus_cherry_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_cherry_tree_top.png b/mods/ITEMS/australia/textures/aus_cherry_tree_top.png deleted file mode 100644 index 6cffe2e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_cherry_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_coast_banksia_leaves.png b/mods/ITEMS/australia/textures/aus_coast_banksia_leaves.png deleted file mode 100644 index 72b2272..0000000 Binary files a/mods/ITEMS/australia/textures/aus_coast_banksia_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_coast_banksia_tree.png b/mods/ITEMS/australia/textures/aus_coast_banksia_tree.png deleted file mode 100644 index f3ce71c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_coast_banksia_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_coast_banksia_tree_top.png b/mods/ITEMS/australia/textures/aus_coast_banksia_tree_top.png deleted file mode 100644 index 6125373..0000000 Binary files a/mods/ITEMS/australia/textures/aus_coast_banksia_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_coolabah_leaves.png b/mods/ITEMS/australia/textures/aus_coolabah_leaves.png deleted file mode 100644 index 5bd457c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_coolabah_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_coolabah_tree.png b/mods/ITEMS/australia/textures/aus_coolabah_tree.png deleted file mode 100644 index 9d3da79..0000000 Binary files a/mods/ITEMS/australia/textures/aus_coolabah_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_coolabah_tree_top.png b/mods/ITEMS/australia/textures/aus_coolabah_tree_top.png deleted file mode 100644 index 4387792..0000000 Binary files a/mods/ITEMS/australia/textures/aus_coolabah_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_crude_oil.png b/mods/ITEMS/australia/textures/aus_crude_oil.png deleted file mode 100644 index a71dc08..0000000 Binary files a/mods/ITEMS/australia/textures/aus_crude_oil.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_crude_oil_flowing_animated.png b/mods/ITEMS/australia/textures/aus_crude_oil_flowing_animated.png deleted file mode 100644 index 7e7db3d..0000000 Binary files a/mods/ITEMS/australia/textures/aus_crude_oil_flowing_animated.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_crude_oil_source_animated.png b/mods/ITEMS/australia/textures/aus_crude_oil_source_animated.png deleted file mode 100644 index 31a63ec..0000000 Binary files a/mods/ITEMS/australia/textures/aus_crude_oil_source_animated.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_daintree_stringybark_leaves.png b/mods/ITEMS/australia/textures/aus_daintree_stringybark_leaves.png deleted file mode 100644 index efa1377..0000000 Binary files a/mods/ITEMS/australia/textures/aus_daintree_stringybark_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_daintree_stringybark_tree.png b/mods/ITEMS/australia/textures/aus_daintree_stringybark_tree.png deleted file mode 100644 index ed42ef5..0000000 Binary files a/mods/ITEMS/australia/textures/aus_daintree_stringybark_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_daintree_stringybark_tree_top.png b/mods/ITEMS/australia/textures/aus_daintree_stringybark_tree_top.png deleted file mode 100644 index 68dfe16..0000000 Binary files a/mods/ITEMS/australia/textures/aus_daintree_stringybark_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_darwin_woollybutt_leaves.png b/mods/ITEMS/australia/textures/aus_darwin_woollybutt_leaves.png deleted file mode 100644 index 14963f5..0000000 Binary files a/mods/ITEMS/australia/textures/aus_darwin_woollybutt_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_darwin_woollybutt_tree.png b/mods/ITEMS/australia/textures/aus_darwin_woollybutt_tree.png deleted file mode 100644 index 73aa3ac..0000000 Binary files a/mods/ITEMS/australia/textures/aus_darwin_woollybutt_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_darwin_woollybutt_tree_top.png b/mods/ITEMS/australia/textures/aus_darwin_woollybutt_tree_top.png deleted file mode 100644 index 15d6d24..0000000 Binary files a/mods/ITEMS/australia/textures/aus_darwin_woollybutt_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_desert_oak_leaves.png b/mods/ITEMS/australia/textures/aus_desert_oak_leaves.png deleted file mode 100644 index 64835c7..0000000 Binary files a/mods/ITEMS/australia/textures/aus_desert_oak_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_desert_oak_tree.png b/mods/ITEMS/australia/textures/aus_desert_oak_tree.png deleted file mode 100644 index 741baf0..0000000 Binary files a/mods/ITEMS/australia/textures/aus_desert_oak_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_desert_oak_tree_top.png b/mods/ITEMS/australia/textures/aus_desert_oak_tree_top.png deleted file mode 100644 index b99e182..0000000 Binary files a/mods/ITEMS/australia/textures/aus_desert_oak_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_eucalyptus_sapling.png b/mods/ITEMS/australia/textures/aus_eucalyptus_sapling.png deleted file mode 100644 index 161f6a5..0000000 Binary files a/mods/ITEMS/australia/textures/aus_eucalyptus_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_eucalyptus_wood.png b/mods/ITEMS/australia/textures/aus_eucalyptus_wood.png deleted file mode 100644 index c168612..0000000 Binary files a/mods/ITEMS/australia/textures/aus_eucalyptus_wood.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_fan_palm_leaves.png b/mods/ITEMS/australia/textures/aus_fan_palm_leaves.png deleted file mode 100644 index 7f7a99a..0000000 Binary files a/mods/ITEMS/australia/textures/aus_fan_palm_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_fan_palm_tree.png b/mods/ITEMS/australia/textures/aus_fan_palm_tree.png deleted file mode 100644 index e4cb5a2..0000000 Binary files a/mods/ITEMS/australia/textures/aus_fan_palm_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_fan_palm_tree_top.png b/mods/ITEMS/australia/textures/aus_fan_palm_tree_top.png deleted file mode 100644 index 799c031..0000000 Binary files a/mods/ITEMS/australia/textures/aus_fan_palm_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_fig_sapling.png b/mods/ITEMS/australia/textures/aus_fig_sapling.png deleted file mode 100644 index bdcfbab..0000000 Binary files a/mods/ITEMS/australia/textures/aus_fig_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_flame_grevillea_leaves.png b/mods/ITEMS/australia/textures/aus_flame_grevillea_leaves.png deleted file mode 100644 index c101243..0000000 Binary files a/mods/ITEMS/australia/textures/aus_flame_grevillea_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_golden_wattle_leaves.png b/mods/ITEMS/australia/textures/aus_golden_wattle_leaves.png deleted file mode 100644 index 3c5881f..0000000 Binary files a/mods/ITEMS/australia/textures/aus_golden_wattle_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_golden_wattle_tree.png b/mods/ITEMS/australia/textures/aus_golden_wattle_tree.png deleted file mode 100644 index 98fd7d3..0000000 Binary files a/mods/ITEMS/australia/textures/aus_golden_wattle_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_golden_wattle_tree_top.png b/mods/ITEMS/australia/textures/aus_golden_wattle_tree_top.png deleted file mode 100644 index e0b46fb..0000000 Binary files a/mods/ITEMS/australia/textures/aus_golden_wattle_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_huon_pine.png b/mods/ITEMS/australia/textures/aus_huon_pine.png deleted file mode 100644 index 719d447..0000000 Binary files a/mods/ITEMS/australia/textures/aus_huon_pine.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_huon_pine_leaves.png b/mods/ITEMS/australia/textures/aus_huon_pine_leaves.png deleted file mode 100644 index 9ead841..0000000 Binary files a/mods/ITEMS/australia/textures/aus_huon_pine_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_huon_pine_tree.png b/mods/ITEMS/australia/textures/aus_huon_pine_tree.png deleted file mode 100644 index 11bf511..0000000 Binary files a/mods/ITEMS/australia/textures/aus_huon_pine_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_huon_pine_tree_top.png b/mods/ITEMS/australia/textures/aus_huon_pine_tree_top.png deleted file mode 100644 index c7a9f58..0000000 Binary files a/mods/ITEMS/australia/textures/aus_huon_pine_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_illawarra_flame_leaves.png b/mods/ITEMS/australia/textures/aus_illawarra_flame_leaves.png deleted file mode 100644 index d59c168..0000000 Binary files a/mods/ITEMS/australia/textures/aus_illawarra_flame_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_illawarra_flame_sapling.png b/mods/ITEMS/australia/textures/aus_illawarra_flame_sapling.png deleted file mode 100644 index d766d8d..0000000 Binary files a/mods/ITEMS/australia/textures/aus_illawarra_flame_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_illawarra_flame_tree.png b/mods/ITEMS/australia/textures/aus_illawarra_flame_tree.png deleted file mode 100644 index 5e4c42d..0000000 Binary files a/mods/ITEMS/australia/textures/aus_illawarra_flame_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_illawarra_flame_tree_top.png b/mods/ITEMS/australia/textures/aus_illawarra_flame_tree_top.png deleted file mode 100644 index d535cd5..0000000 Binary files a/mods/ITEMS/australia/textures/aus_illawarra_flame_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_jarrah.png b/mods/ITEMS/australia/textures/aus_jarrah.png deleted file mode 100644 index 2dcf00b..0000000 Binary files a/mods/ITEMS/australia/textures/aus_jarrah.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_jarrah_leaves.png b/mods/ITEMS/australia/textures/aus_jarrah_leaves.png deleted file mode 100644 index f1d6eb9..0000000 Binary files a/mods/ITEMS/australia/textures/aus_jarrah_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_jarrah_tree.png b/mods/ITEMS/australia/textures/aus_jarrah_tree.png deleted file mode 100644 index 428f07e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_jarrah_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_jarrah_tree_top.png b/mods/ITEMS/australia/textures/aus_jarrah_tree_top.png deleted file mode 100644 index 0fa29e4..0000000 Binary files a/mods/ITEMS/australia/textures/aus_jarrah_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_karri.png b/mods/ITEMS/australia/textures/aus_karri.png deleted file mode 100644 index 3b07ff7..0000000 Binary files a/mods/ITEMS/australia/textures/aus_karri.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_karri_leaves.png b/mods/ITEMS/australia/textures/aus_karri_leaves.png deleted file mode 100644 index ecf13c6..0000000 Binary files a/mods/ITEMS/australia/textures/aus_karri_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_karri_tree.png b/mods/ITEMS/australia/textures/aus_karri_tree.png deleted file mode 100644 index bc79bab..0000000 Binary files a/mods/ITEMS/australia/textures/aus_karri_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_karri_tree_top.png b/mods/ITEMS/australia/textures/aus_karri_tree_top.png deleted file mode 100644 index 8e1c49a..0000000 Binary files a/mods/ITEMS/australia/textures/aus_karri_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lavender_grevillea.png b/mods/ITEMS/australia/textures/aus_lavender_grevillea.png deleted file mode 100644 index 3d5c145..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lavender_grevillea.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lead_block.png b/mods/ITEMS/australia/textures/aus_lead_block.png deleted file mode 100644 index 11da56a..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lead_block.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lead_ingot.png b/mods/ITEMS/australia/textures/aus_lead_ingot.png deleted file mode 100644 index fae0cbf..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lead_ingot.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lead_lump.png b/mods/ITEMS/australia/textures/aus_lead_lump.png deleted file mode 100644 index 64584cb..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lead_lump.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lemon_eucalyptus_leaves.png b/mods/ITEMS/australia/textures/aus_lemon_eucalyptus_leaves.png deleted file mode 100644 index 3059d42..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lemon_eucalyptus_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lemon_eucalyptus_tree.png b/mods/ITEMS/australia/textures/aus_lemon_eucalyptus_tree.png deleted file mode 100644 index b2f975e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lemon_eucalyptus_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lemon_eucalyptus_tree_top.png b/mods/ITEMS/australia/textures/aus_lemon_eucalyptus_tree_top.png deleted file mode 100644 index ec5f302..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lemon_eucalyptus_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lemon_myrtle_leaves.png b/mods/ITEMS/australia/textures/aus_lemon_myrtle_leaves.png deleted file mode 100644 index 34f796c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lemon_myrtle_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lemon_myrtle_tree.png b/mods/ITEMS/australia/textures/aus_lemon_myrtle_tree.png deleted file mode 100644 index 74b4e3f..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lemon_myrtle_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lemon_myrtle_tree_top.png b/mods/ITEMS/australia/textures/aus_lemon_myrtle_tree_top.png deleted file mode 100644 index c8cc858..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lemon_myrtle_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lilly_pilly_berries.png b/mods/ITEMS/australia/textures/aus_lilly_pilly_berries.png deleted file mode 100644 index d49be3e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lilly_pilly_berries.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lilly_pilly_leaves.png b/mods/ITEMS/australia/textures/aus_lilly_pilly_leaves.png deleted file mode 100644 index d6aadf6..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lilly_pilly_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lilly_pilly_tree.png b/mods/ITEMS/australia/textures/aus_lilly_pilly_tree.png deleted file mode 100644 index b6e5d12..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lilly_pilly_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_lilly_pilly_tree_top.png b/mods/ITEMS/australia/textures/aus_lilly_pilly_tree_top.png deleted file mode 100644 index 6196366..0000000 Binary files a/mods/ITEMS/australia/textures/aus_lilly_pilly_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_limestone.png b/mods/ITEMS/australia/textures/aus_limestone.png deleted file mode 100644 index ed476f8..0000000 Binary files a/mods/ITEMS/australia/textures/aus_limestone.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_macadamia.png b/mods/ITEMS/australia/textures/aus_macadamia.png deleted file mode 100644 index fedb0f6..0000000 Binary files a/mods/ITEMS/australia/textures/aus_macadamia.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_macadamia_leaves.png b/mods/ITEMS/australia/textures/aus_macadamia_leaves.png deleted file mode 100644 index 28c3eb5..0000000 Binary files a/mods/ITEMS/australia/textures/aus_macadamia_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_macadamia_sapling.png b/mods/ITEMS/australia/textures/aus_macadamia_sapling.png deleted file mode 100644 index 1309e8f..0000000 Binary files a/mods/ITEMS/australia/textures/aus_macadamia_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_macadamia_tree.png b/mods/ITEMS/australia/textures/aus_macadamia_tree.png deleted file mode 100644 index 66b3ffc..0000000 Binary files a/mods/ITEMS/australia/textures/aus_macadamia_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_macadamia_tree_top.png b/mods/ITEMS/australia/textures/aus_macadamia_tree_top.png deleted file mode 100644 index d8f3d9c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_macadamia_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mangrove_apple.png b/mods/ITEMS/australia/textures/aus_mangrove_apple.png deleted file mode 100644 index afd5400..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mangrove_apple.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mangrove_apple_leaves.png b/mods/ITEMS/australia/textures/aus_mangrove_apple_leaves.png deleted file mode 100644 index 169b24a..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mangrove_apple_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mangrove_apple_sapling.png b/mods/ITEMS/australia/textures/aus_mangrove_apple_sapling.png deleted file mode 100644 index 81dc314..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mangrove_apple_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mangrove_apple_tree.png b/mods/ITEMS/australia/textures/aus_mangrove_apple_tree.png deleted file mode 100644 index d64575b..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mangrove_apple_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mangrove_apple_tree_top.png b/mods/ITEMS/australia/textures/aus_mangrove_apple_tree_top.png deleted file mode 100644 index 316347d..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mangrove_apple_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mangrove_sapling.png b/mods/ITEMS/australia/textures/aus_mangrove_sapling.png deleted file mode 100644 index 8393fb8..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mangrove_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_marri.png b/mods/ITEMS/australia/textures/aus_marri.png deleted file mode 100644 index 743386b..0000000 Binary files a/mods/ITEMS/australia/textures/aus_marri.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_marri_leaves.png b/mods/ITEMS/australia/textures/aus_marri_leaves.png deleted file mode 100644 index fe9ac94..0000000 Binary files a/mods/ITEMS/australia/textures/aus_marri_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_marri_tree.png b/mods/ITEMS/australia/textures/aus_marri_tree.png deleted file mode 100644 index 5f3966c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_marri_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_marri_tree_top.png b/mods/ITEMS/australia/textures/aus_marri_tree_top.png deleted file mode 100644 index 23d656d..0000000 Binary files a/mods/ITEMS/australia/textures/aus_marri_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_melaleuca_sapling.png b/mods/ITEMS/australia/textures/aus_melaleuca_sapling.png deleted file mode 100644 index 3a96d66..0000000 Binary files a/mods/ITEMS/australia/textures/aus_melaleuca_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_merbau.png b/mods/ITEMS/australia/textures/aus_merbau.png deleted file mode 100644 index d9ba822..0000000 Binary files a/mods/ITEMS/australia/textures/aus_merbau.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_merbau_leaves.png b/mods/ITEMS/australia/textures/aus_merbau_leaves.png deleted file mode 100644 index c8a6b67..0000000 Binary files a/mods/ITEMS/australia/textures/aus_merbau_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_merbau_sapling.png b/mods/ITEMS/australia/textures/aus_merbau_sapling.png deleted file mode 100644 index 6577c8d..0000000 Binary files a/mods/ITEMS/australia/textures/aus_merbau_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_merbau_tree.png b/mods/ITEMS/australia/textures/aus_merbau_tree.png deleted file mode 100644 index f339f2b..0000000 Binary files a/mods/ITEMS/australia/textures/aus_merbau_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_merbau_tree_top.png b/mods/ITEMS/australia/textures/aus_merbau_tree_top.png deleted file mode 100644 index 7109917..0000000 Binary files a/mods/ITEMS/australia/textures/aus_merbau_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mineral_lead.png b/mods/ITEMS/australia/textures/aus_mineral_lead.png deleted file mode 100644 index b3bc14b..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mineral_lead.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mineral_salt.png b/mods/ITEMS/australia/textures/aus_mineral_salt.png deleted file mode 100644 index 0774927..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mineral_salt.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mineral_zinc.png b/mods/ITEMS/australia/textures/aus_mineral_zinc.png deleted file mode 100644 index 95f17c8..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mineral_zinc.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mitchell_grass.png b/mods/ITEMS/australia/textures/aus_mitchell_grass.png deleted file mode 100644 index 7acd04c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mitchell_grass.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_moreton_bay_fig.png b/mods/ITEMS/australia/textures/aus_moreton_bay_fig.png deleted file mode 100644 index 795d3b8..0000000 Binary files a/mods/ITEMS/australia/textures/aus_moreton_bay_fig.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_moreton_bay_fig_leaves.png b/mods/ITEMS/australia/textures/aus_moreton_bay_fig_leaves.png deleted file mode 100644 index abca077..0000000 Binary files a/mods/ITEMS/australia/textures/aus_moreton_bay_fig_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_moreton_bay_fig_tree.png b/mods/ITEMS/australia/textures/aus_moreton_bay_fig_tree.png deleted file mode 100644 index 92dd325..0000000 Binary files a/mods/ITEMS/australia/textures/aus_moreton_bay_fig_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_moreton_bay_fig_tree_top.png b/mods/ITEMS/australia/textures/aus_moreton_bay_fig_tree_top.png deleted file mode 100644 index fe2b366..0000000 Binary files a/mods/ITEMS/australia/textures/aus_moreton_bay_fig_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mulga_leaves.png b/mods/ITEMS/australia/textures/aus_mulga_leaves.png deleted file mode 100644 index 755b6db..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mulga_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mulga_tree.png b/mods/ITEMS/australia/textures/aus_mulga_tree.png deleted file mode 100644 index 7457b79..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mulga_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_mulga_tree_top.png b/mods/ITEMS/australia/textures/aus_mulga_tree_top.png deleted file mode 100644 index 78800a2..0000000 Binary files a/mods/ITEMS/australia/textures/aus_mulga_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_myrtle_sapling.png b/mods/ITEMS/australia/textures/aus_myrtle_sapling.png deleted file mode 100644 index d2d0c95..0000000 Binary files a/mods/ITEMS/australia/textures/aus_myrtle_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_nickel_block.png b/mods/ITEMS/australia/textures/aus_nickel_block.png deleted file mode 100644 index e9cb1c4..0000000 Binary files a/mods/ITEMS/australia/textures/aus_nickel_block.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_nickel_ingot.png b/mods/ITEMS/australia/textures/aus_nickel_ingot.png deleted file mode 100644 index 7491339..0000000 Binary files a/mods/ITEMS/australia/textures/aus_nickel_ingot.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_nickel_lump.png b/mods/ITEMS/australia/textures/aus_nickel_lump.png deleted file mode 100644 index 64131b3..0000000 Binary files a/mods/ITEMS/australia/textures/aus_nickel_lump.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_palm_wood.png b/mods/ITEMS/australia/textures/aus_palm_wood.png deleted file mode 100755 index c0c0ed6..0000000 Binary files a/mods/ITEMS/australia/textures/aus_palm_wood.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_paperbark_leaves.png b/mods/ITEMS/australia/textures/aus_paperbark_leaves.png deleted file mode 100644 index 4c4007c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_paperbark_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_paperbark_tree.png b/mods/ITEMS/australia/textures/aus_paperbark_tree.png deleted file mode 100644 index eebe6e7..0000000 Binary files a/mods/ITEMS/australia/textures/aus_paperbark_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_paperbark_tree_top.png b/mods/ITEMS/australia/textures/aus_paperbark_tree_top.png deleted file mode 100644 index 502989f..0000000 Binary files a/mods/ITEMS/australia/textures/aus_paperbark_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_quandong.png b/mods/ITEMS/australia/textures/aus_quandong.png deleted file mode 100644 index 96744d0..0000000 Binary files a/mods/ITEMS/australia/textures/aus_quandong.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_quandong_leaves.png b/mods/ITEMS/australia/textures/aus_quandong_leaves.png deleted file mode 100644 index 5782e14..0000000 Binary files a/mods/ITEMS/australia/textures/aus_quandong_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_quandong_sapling.png b/mods/ITEMS/australia/textures/aus_quandong_sapling.png deleted file mode 100644 index c294766..0000000 Binary files a/mods/ITEMS/australia/textures/aus_quandong_sapling.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_quandong_tree.png b/mods/ITEMS/australia/textures/aus_quandong_tree.png deleted file mode 100644 index 0903042..0000000 Binary files a/mods/ITEMS/australia/textures/aus_quandong_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_quandong_tree_top.png b/mods/ITEMS/australia/textures/aus_quandong_tree_top.png deleted file mode 100644 index db8d1b9..0000000 Binary files a/mods/ITEMS/australia/textures/aus_quandong_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_red_bottlebrush_leaves.png b/mods/ITEMS/australia/textures/aus_red_bottlebrush_leaves.png deleted file mode 100644 index 6ee6780..0000000 Binary files a/mods/ITEMS/australia/textures/aus_red_bottlebrush_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_red_gravel.png b/mods/ITEMS/australia/textures/aus_red_gravel.png deleted file mode 100644 index 7ebbb48..0000000 Binary files a/mods/ITEMS/australia/textures/aus_red_gravel.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_red_gum.png b/mods/ITEMS/australia/textures/aus_red_gum.png deleted file mode 100644 index cf1c02d..0000000 Binary files a/mods/ITEMS/australia/textures/aus_red_gum.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_red_mahogany.png b/mods/ITEMS/australia/textures/aus_red_mahogany.png deleted file mode 100644 index 7e60be4..0000000 Binary files a/mods/ITEMS/australia/textures/aus_red_mahogany.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_red_sand.png b/mods/ITEMS/australia/textures/aus_red_sand.png deleted file mode 100644 index ab8d896..0000000 Binary files a/mods/ITEMS/australia/textures/aus_red_sand.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_red_sandstone.png b/mods/ITEMS/australia/textures/aus_red_sandstone.png deleted file mode 100644 index 4ae1eba..0000000 Binary files a/mods/ITEMS/australia/textures/aus_red_sandstone.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_river_oak_leaves.png b/mods/ITEMS/australia/textures/aus_river_oak_leaves.png deleted file mode 100644 index ada10b8..0000000 Binary files a/mods/ITEMS/australia/textures/aus_river_oak_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_river_oak_tree.png b/mods/ITEMS/australia/textures/aus_river_oak_tree.png deleted file mode 100644 index d063b14..0000000 Binary files a/mods/ITEMS/australia/textures/aus_river_oak_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_river_oak_tree_top.png b/mods/ITEMS/australia/textures/aus_river_oak_tree_top.png deleted file mode 100644 index 6f6fc13..0000000 Binary files a/mods/ITEMS/australia/textures/aus_river_oak_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_river_red_gum_leaves.png b/mods/ITEMS/australia/textures/aus_river_red_gum_leaves.png deleted file mode 100644 index db7a58a..0000000 Binary files a/mods/ITEMS/australia/textures/aus_river_red_gum_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_river_red_gum_tree.png b/mods/ITEMS/australia/textures/aus_river_red_gum_tree.png deleted file mode 100644 index 5c6b28d..0000000 Binary files a/mods/ITEMS/australia/textures/aus_river_red_gum_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_river_red_gum_tree_top.png b/mods/ITEMS/australia/textures/aus_river_red_gum_tree_top.png deleted file mode 100644 index b039e3e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_river_red_gum_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_rottnest_island_pine_leaves.png b/mods/ITEMS/australia/textures/aus_rottnest_island_pine_leaves.png deleted file mode 100644 index 15298e4..0000000 Binary files a/mods/ITEMS/australia/textures/aus_rottnest_island_pine_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_rottnest_island_pine_tree.png b/mods/ITEMS/australia/textures/aus_rottnest_island_pine_tree.png deleted file mode 100644 index 6f26d63..0000000 Binary files a/mods/ITEMS/australia/textures/aus_rottnest_island_pine_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_rottnest_island_pine_tree_top.png b/mods/ITEMS/australia/textures/aus_rottnest_island_pine_tree_top.png deleted file mode 100644 index ce6328b..0000000 Binary files a/mods/ITEMS/australia/textures/aus_rottnest_island_pine_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_salt_block.png b/mods/ITEMS/australia/textures/aus_salt_block.png deleted file mode 100644 index b1b22f1..0000000 Binary files a/mods/ITEMS/australia/textures/aus_salt_block.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_saltbush.png b/mods/ITEMS/australia/textures/aus_saltbush.png deleted file mode 100644 index b39eaf7..0000000 Binary files a/mods/ITEMS/australia/textures/aus_saltbush.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_scribbly_gum_leaves.png b/mods/ITEMS/australia/textures/aus_scribbly_gum_leaves.png deleted file mode 100644 index c0dbc43..0000000 Binary files a/mods/ITEMS/australia/textures/aus_scribbly_gum_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_scribbly_gum_tree.png b/mods/ITEMS/australia/textures/aus_scribbly_gum_tree.png deleted file mode 100644 index 0474431..0000000 Binary files a/mods/ITEMS/australia/textures/aus_scribbly_gum_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_scribbly_gum_tree_top.png b/mods/ITEMS/australia/textures/aus_scribbly_gum_tree_top.png deleted file mode 100644 index 11b3ee4..0000000 Binary files a/mods/ITEMS/australia/textures/aus_scribbly_gum_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_shoestring_acacia_leaves.png b/mods/ITEMS/australia/textures/aus_shoestring_acacia_leaves.png deleted file mode 100644 index a01b77e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_shoestring_acacia_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_shoestring_acacia_tree.png b/mods/ITEMS/australia/textures/aus_shoestring_acacia_tree.png deleted file mode 100644 index 84750fa..0000000 Binary files a/mods/ITEMS/australia/textures/aus_shoestring_acacia_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_shoestring_acacia_tree_top.png b/mods/ITEMS/australia/textures/aus_shoestring_acacia_tree_top.png deleted file mode 100644 index 0bbb0fa..0000000 Binary files a/mods/ITEMS/australia/textures/aus_shoestring_acacia_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_silver_block.png b/mods/ITEMS/australia/textures/aus_silver_block.png deleted file mode 100644 index 6806b5c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_silver_block.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_silver_ingot.png b/mods/ITEMS/australia/textures/aus_silver_ingot.png deleted file mode 100644 index 86dd54e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_silver_ingot.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_silver_lump.png b/mods/ITEMS/australia/textures/aus_silver_lump.png deleted file mode 100644 index e815ef0..0000000 Binary files a/mods/ITEMS/australia/textures/aus_silver_lump.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_silver_sand.png b/mods/ITEMS/australia/textures/aus_silver_sand.png deleted file mode 100644 index b5f4079..0000000 Binary files a/mods/ITEMS/australia/textures/aus_silver_sand.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_silver_sandstone.png b/mods/ITEMS/australia/textures/aus_silver_sandstone.png deleted file mode 100644 index 152c1e3..0000000 Binary files a/mods/ITEMS/australia/textures/aus_silver_sandstone.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_silver_sandstone_block.png b/mods/ITEMS/australia/textures/aus_silver_sandstone_block.png deleted file mode 100644 index c3e1267..0000000 Binary files a/mods/ITEMS/australia/textures/aus_silver_sandstone_block.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_silver_sandstone_brick.png b/mods/ITEMS/australia/textures/aus_silver_sandstone_brick.png deleted file mode 100644 index e3d5d0e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_silver_sandstone_brick.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_small_red_rocks.png b/mods/ITEMS/australia/textures/aus_small_red_rocks.png deleted file mode 100644 index 0580fbf..0000000 Binary files a/mods/ITEMS/australia/textures/aus_small_red_rocks.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_small_sandstone_rocks.png b/mods/ITEMS/australia/textures/aus_small_sandstone_rocks.png deleted file mode 100644 index f72826c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_small_sandstone_rocks.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_small_stone_rocks.png b/mods/ITEMS/australia/textures/aus_small_stone_rocks.png deleted file mode 100644 index b645ca4..0000000 Binary files a/mods/ITEMS/australia/textures/aus_small_stone_rocks.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_snow_gum_leaves.png b/mods/ITEMS/australia/textures/aus_snow_gum_leaves.png deleted file mode 100644 index db872eb..0000000 Binary files a/mods/ITEMS/australia/textures/aus_snow_gum_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_snow_gum_tree.png b/mods/ITEMS/australia/textures/aus_snow_gum_tree.png deleted file mode 100644 index 1d70805..0000000 Binary files a/mods/ITEMS/australia/textures/aus_snow_gum_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_snow_gum_tree_top.png b/mods/ITEMS/australia/textures/aus_snow_gum_tree_top.png deleted file mode 100644 index 8cee7e1..0000000 Binary files a/mods/ITEMS/australia/textures/aus_snow_gum_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_southern_sassafras.png b/mods/ITEMS/australia/textures/aus_southern_sassafras.png deleted file mode 100644 index 663d57f..0000000 Binary files a/mods/ITEMS/australia/textures/aus_southern_sassafras.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_southern_sassafras_leaves.png b/mods/ITEMS/australia/textures/aus_southern_sassafras_leaves.png deleted file mode 100644 index 47fc1de..0000000 Binary files a/mods/ITEMS/australia/textures/aus_southern_sassafras_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_southern_sassafras_tree.png b/mods/ITEMS/australia/textures/aus_southern_sassafras_tree.png deleted file mode 100644 index 86300e8..0000000 Binary files a/mods/ITEMS/australia/textures/aus_southern_sassafras_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_southern_sassafras_tree_top.png b/mods/ITEMS/australia/textures/aus_southern_sassafras_tree_top.png deleted file mode 100644 index 04275ec..0000000 Binary files a/mods/ITEMS/australia/textures/aus_southern_sassafras_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_spinifex.png b/mods/ITEMS/australia/textures/aus_spinifex.png deleted file mode 100644 index efb295b..0000000 Binary files a/mods/ITEMS/australia/textures/aus_spinifex.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_stilted_mangrove_leaves.png b/mods/ITEMS/australia/textures/aus_stilted_mangrove_leaves.png deleted file mode 100644 index 8601e02..0000000 Binary files a/mods/ITEMS/australia/textures/aus_stilted_mangrove_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_stilted_mangrove_tree.png b/mods/ITEMS/australia/textures/aus_stilted_mangrove_tree.png deleted file mode 100644 index a664031..0000000 Binary files a/mods/ITEMS/australia/textures/aus_stilted_mangrove_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_stilted_mangrove_tree_top.png b/mods/ITEMS/australia/textures/aus_stilted_mangrove_tree_top.png deleted file mode 100644 index 9967bfc..0000000 Binary files a/mods/ITEMS/australia/textures/aus_stilted_mangrove_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_sugar_gum_leaves.png b/mods/ITEMS/australia/textures/aus_sugar_gum_leaves.png deleted file mode 100644 index ba6bd5b..0000000 Binary files a/mods/ITEMS/australia/textures/aus_sugar_gum_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_sugar_gum_tree.png b/mods/ITEMS/australia/textures/aus_sugar_gum_tree.png deleted file mode 100644 index bdb008c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_sugar_gum_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_sugar_gum_tree_top.png b/mods/ITEMS/australia/textures/aus_sugar_gum_tree_top.png deleted file mode 100644 index dd985d7..0000000 Binary files a/mods/ITEMS/australia/textures/aus_sugar_gum_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_swamp_bloodwood_leaves.png b/mods/ITEMS/australia/textures/aus_swamp_bloodwood_leaves.png deleted file mode 100644 index 513920e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_swamp_bloodwood_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_swamp_bloodwood_tree.png b/mods/ITEMS/australia/textures/aus_swamp_bloodwood_tree.png deleted file mode 100644 index 1e0c4ed..0000000 Binary files a/mods/ITEMS/australia/textures/aus_swamp_bloodwood_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_swamp_bloodwood_tree_top.png b/mods/ITEMS/australia/textures/aus_swamp_bloodwood_tree_top.png deleted file mode 100644 index 6ddf4d6..0000000 Binary files a/mods/ITEMS/australia/textures/aus_swamp_bloodwood_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_swamp_gum_leaves.png b/mods/ITEMS/australia/textures/aus_swamp_gum_leaves.png deleted file mode 100644 index 09cb2d0..0000000 Binary files a/mods/ITEMS/australia/textures/aus_swamp_gum_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_swamp_gum_tree.png b/mods/ITEMS/australia/textures/aus_swamp_gum_tree.png deleted file mode 100644 index 4fed85d..0000000 Binary files a/mods/ITEMS/australia/textures/aus_swamp_gum_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_swamp_gum_tree_top.png b/mods/ITEMS/australia/textures/aus_swamp_gum_tree_top.png deleted file mode 100644 index 5d7baa9..0000000 Binary files a/mods/ITEMS/australia/textures/aus_swamp_gum_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_swamp_paperbark_leaves.png b/mods/ITEMS/australia/textures/aus_swamp_paperbark_leaves.png deleted file mode 100644 index bcb2a90..0000000 Binary files a/mods/ITEMS/australia/textures/aus_swamp_paperbark_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_swamp_paperbark_tree.png b/mods/ITEMS/australia/textures/aus_swamp_paperbark_tree.png deleted file mode 100644 index c53b357..0000000 Binary files a/mods/ITEMS/australia/textures/aus_swamp_paperbark_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_swamp_paperbark_tree_top.png b/mods/ITEMS/australia/textures/aus_swamp_paperbark_tree_top.png deleted file mode 100644 index 24a202c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_swamp_paperbark_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_tasmanian_myrtle.png b/mods/ITEMS/australia/textures/aus_tasmanian_myrtle.png deleted file mode 100644 index a31bfaa..0000000 Binary files a/mods/ITEMS/australia/textures/aus_tasmanian_myrtle.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_tasmanian_myrtle_leaves.png b/mods/ITEMS/australia/textures/aus_tasmanian_myrtle_leaves.png deleted file mode 100644 index d5b75b5..0000000 Binary files a/mods/ITEMS/australia/textures/aus_tasmanian_myrtle_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_tasmanian_myrtle_tree.png b/mods/ITEMS/australia/textures/aus_tasmanian_myrtle_tree.png deleted file mode 100644 index 61bf176..0000000 Binary files a/mods/ITEMS/australia/textures/aus_tasmanian_myrtle_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_tasmanian_myrtle_tree_top.png b/mods/ITEMS/australia/textures/aus_tasmanian_myrtle_tree_top.png deleted file mode 100644 index 830bee6..0000000 Binary files a/mods/ITEMS/australia/textures/aus_tasmanian_myrtle_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_tasmanian_oak.png b/mods/ITEMS/australia/textures/aus_tasmanian_oak.png deleted file mode 100644 index 53cb657..0000000 Binary files a/mods/ITEMS/australia/textures/aus_tasmanian_oak.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_tea_tree_leaves.png b/mods/ITEMS/australia/textures/aus_tea_tree_leaves.png deleted file mode 100644 index ef3d2a1..0000000 Binary files a/mods/ITEMS/australia/textures/aus_tea_tree_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_tea_tree_tree.png b/mods/ITEMS/australia/textures/aus_tea_tree_tree.png deleted file mode 100644 index 2c4abfd..0000000 Binary files a/mods/ITEMS/australia/textures/aus_tea_tree_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_tea_tree_tree_top.png b/mods/ITEMS/australia/textures/aus_tea_tree_tree_top.png deleted file mode 100644 index 1fad882..0000000 Binary files a/mods/ITEMS/australia/textures/aus_tea_tree_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_tomato_bush.png b/mods/ITEMS/australia/textures/aus_tomato_bush.png deleted file mode 100644 index d690024..0000000 Binary files a/mods/ITEMS/australia/textures/aus_tomato_bush.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_waratah_leaves.png b/mods/ITEMS/australia/textures/aus_waratah_leaves.png deleted file mode 100644 index 1f73c9e..0000000 Binary files a/mods/ITEMS/australia/textures/aus_waratah_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_white_box_leaves.png b/mods/ITEMS/australia/textures/aus_white_box_leaves.png deleted file mode 100644 index 30edfed..0000000 Binary files a/mods/ITEMS/australia/textures/aus_white_box_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_white_box_tree.png b/mods/ITEMS/australia/textures/aus_white_box_tree.png deleted file mode 100644 index 6c0a72c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_white_box_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_white_box_tree_top.png b/mods/ITEMS/australia/textures/aus_white_box_tree_top.png deleted file mode 100644 index 23543af..0000000 Binary files a/mods/ITEMS/australia/textures/aus_white_box_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_wirewood_leaves.png b/mods/ITEMS/australia/textures/aus_wirewood_leaves.png deleted file mode 100644 index 19cbd1c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_wirewood_leaves.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_wirewood_tree.png b/mods/ITEMS/australia/textures/aus_wirewood_tree.png deleted file mode 100644 index 7fb72af..0000000 Binary files a/mods/ITEMS/australia/textures/aus_wirewood_tree.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_wirewood_tree_top.png b/mods/ITEMS/australia/textures/aus_wirewood_tree_top.png deleted file mode 100644 index c7ba513..0000000 Binary files a/mods/ITEMS/australia/textures/aus_wirewood_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_zinc_block.png b/mods/ITEMS/australia/textures/aus_zinc_block.png deleted file mode 100644 index 5ae7947..0000000 Binary files a/mods/ITEMS/australia/textures/aus_zinc_block.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_zinc_ingot.png b/mods/ITEMS/australia/textures/aus_zinc_ingot.png deleted file mode 100644 index a36a11c..0000000 Binary files a/mods/ITEMS/australia/textures/aus_zinc_ingot.png and /dev/null differ diff --git a/mods/ITEMS/australia/textures/aus_zinc_lump.png b/mods/ITEMS/australia/textures/aus_zinc_lump.png deleted file mode 100644 index 1a620ab..0000000 Binary files a/mods/ITEMS/australia/textures/aus_zinc_lump.png and /dev/null differ diff --git a/mods/ITEMS/beds/API.md b/mods/ITEMS/beds/API.md deleted file mode 100644 index f77f530..0000000 --- a/mods/ITEMS/beds/API.md +++ /dev/null @@ -1,76 +0,0 @@ -# Beds API - -This API allows you to add more beds to Outback. - -## `beds.register_bed(nodename, {def})` - -```lua - beds.register_bed( - "beds:bed", -- Bed name - def -- See [#Bed definition] - ) -``` - -* `beds.read_spawns()` Returns a table containing players respawn positions -* `beds.kick_players()` Forces all players to leave bed -* `beds.skip_night()` Sets world time to morning and saves respawn position of all players currently sleeping - -### Bed definition - -```lua - { - description = "Simple Bed", -- Item description of item (tooltip), visible to user - inventory_image = "beds_bed.png", -- Inventory image (optional, default is an ugly 3D image) - wield_image = "beds_bed.png", -- Wield image (optional, default is an ugly 3D image) - tiles = { - bottom = {'Tile definition'}, -- The tiles of the bottom part of the bed. - top = {Tile definition} -- The tiles of the bottom part of the bed. - }, - nodebox = { - bottom = 'regular nodebox', -- Bottom part of bed (see [Node boxes]) - top = 'regular nodebox', -- Top part of bed (see [Node boxes]) - }, - selectionbox = 'regular nodebox', -- For both nodeboxes (see [Node boxes]) - recipe = { -- Craft recipe - {"group:wool", "group:wool", "group:wool"}, - {"group:wood", "group:wood", "group:wood"} - } - } -``` - -### Example - -```lua -beds.register_bed("beds:bed", { - description = "Simple Bed", - inventory_image = "beds_bed.png", - wield_image = "beds_bed.png", - tiles = { - bottom = { - "beds_bed_top_bottom.png^[transformR90", - "default_wood.png", - "beds_bed_side_bottom_r.png", - "beds_bed_side_bottom_r.png^[transformfx", - "beds_transparent.png", - "beds_bed_side_bottom.png" - }, - top = { - "beds_bed_top_top.png^[transformR90", - "default_wood.png", - "beds_bed_side_top_r.png", - "beds_bed_side_top_r.png^[transformfx", - "beds_bed_side_top.png", - "beds_transparent.png", - } - }, - nodebox = { - bottom = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, - top = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, - }, - selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5}, - recipe = { - {"wool:red", "wool:red", "wool:white"}, - {"group:wood", "group:wood", "group:wood"} - }, -}) -``` diff --git a/mods/ITEMS/beds/api.lua b/mods/ITEMS/beds/api.lua deleted file mode 100644 index 97dde43..0000000 --- a/mods/ITEMS/beds/api.lua +++ /dev/null @@ -1,167 +0,0 @@ - -local reverse = true - -local function destruct_bed(pos, n) - local node = minetest.get_node(pos) - local other - - if n == 2 then - local dir = minetest.facedir_to_dir(node.param2) - other = vector.subtract(pos, dir) - elseif n == 1 then - local dir = minetest.facedir_to_dir(node.param2) - other = vector.add(pos, dir) - end - - if reverse then - reverse = not reverse - minetest.remove_node(other) - minetest.check_for_falling(other) - else - reverse = not reverse - end -end - -function beds.register_bed(name, def) - minetest.register_node(name .. "_bottom", { - description = def.description, - inventory_image = def.inventory_image, - wield_image = def.wield_image, - drawtype = "nodebox", - tiles = def.tiles.bottom, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - stack_max = 1, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1}, - sounds = def.sounds or default.node_sound_wood_defaults(), - node_box = { - type = "fixed", - fixed = def.nodebox.bottom, - }, - selection_box = { - type = "fixed", - fixed = def.selectionbox, - }, - - on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local udef = minetest.registered_nodes[node.name] - if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return udef.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - - local pos - if minetest.registered_items[minetest.get_node(under).name].buildable_to then - pos = under - else - pos = pointed_thing.above - end - - if minetest.is_protected(pos, placer:get_player_name()) and - not minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(pos, placer:get_player_name()) - return itemstack - end - - local node_def = minetest.registered_nodes[minetest.get_node(pos).name] - if not node_def or not node_def.buildable_to then - return itemstack - end - - local dir = minetest.dir_to_facedir(placer:get_look_dir()) - local botpos = vector.add(pos, minetest.facedir_to_dir(dir)) - - if minetest.is_protected(botpos, placer:get_player_name()) and - not minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(botpos, placer:get_player_name()) - return itemstack - end - - local botdef = minetest.registered_nodes[minetest.get_node(botpos).name] - if not botdef or not botdef.buildable_to then - return itemstack - end - - minetest.set_node(pos, {name = name .. "_bottom", param2 = dir}) - minetest.set_node(botpos, {name = name .. "_top", param2 = dir}) - - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then - itemstack:take_item() - end - return itemstack - end, - - on_destruct = function(pos) - destruct_bed(pos, 1) - end, - - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - beds.on_rightclick(pos, clicker) - return itemstack - end, - - on_rotate = function(pos, node, user, mode, new_param2) - local dir = minetest.facedir_to_dir(node.param2) - local p = vector.add(pos, dir) - local node2 = minetest.get_node_or_nil(p) - if not node2 or not minetest.get_item_group(node2.name, "bed") == 2 or - not node.param2 == node2.param2 then - return false - end - if minetest.is_protected(p, user:get_player_name()) then - minetest.record_protection_violation(p, user:get_player_name()) - return false - end - if mode ~= screwdriver.ROTATE_FACE then - return false - end - local newp = vector.add(pos, minetest.facedir_to_dir(new_param2)) - local node3 = minetest.get_node_or_nil(newp) - local node_def = node3 and minetest.registered_nodes[node3.name] - if not node_def or not node_def.buildable_to then - return false - end - if minetest.is_protected(newp, user:get_player_name()) then - minetest.record_protection_violation(newp, user:get_player_name()) - return false - end - node.param2 = new_param2 - -- do not remove_node here - it will trigger destroy_bed() - minetest.set_node(p, {name = "air"}) - minetest.set_node(pos, node) - minetest.set_node(newp, {name = name .. "_top", param2 = new_param2}) - return true - end, - }) - - minetest.register_node(name .. "_top", { - drawtype = "nodebox", - tiles = def.tiles.top, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - pointable = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2}, - sounds = def.sounds or default.node_sound_wood_defaults(), - drop = name .. "_bottom", - node_box = { - type = "fixed", - fixed = def.nodebox.top, - }, - on_destruct = function(pos) - destruct_bed(pos, 2) - end, - }) - - minetest.register_alias(name, name .. "_bottom") - - minetest.register_craft({ - output = name, - recipe = def.recipe - }) -end diff --git a/mods/ITEMS/beds/functions.lua b/mods/ITEMS/beds/functions.lua deleted file mode 100644 index 585f02a..0000000 --- a/mods/ITEMS/beds/functions.lua +++ /dev/null @@ -1,220 +0,0 @@ -local pi = math.pi -local player_in_bed = 0 -local is_sp = minetest.is_singleplayer() -local enable_respawn = minetest.settings:get_bool("enable_bed_respawn") -if enable_respawn == nil then - enable_respawn = true -end - --- Helper functions - -local function get_look_yaw(pos) - local n = minetest.get_node(pos) - if n.param2 == 1 then - return pi / 2, n.param2 - elseif n.param2 == 3 then - return -pi / 2, n.param2 - elseif n.param2 == 0 then - return pi, n.param2 - else - return 0, n.param2 - end -end - -local function is_night_skip_enabled() - local enable_night_skip = minetest.settings:get_bool("enable_bed_night_skip") - if enable_night_skip == nil then - enable_night_skip = true - end - return enable_night_skip -end - -local function check_in_beds(players) - local in_bed = beds.player - if not players then - players = minetest.get_connected_players() - end - - for n, player in ipairs(players) do - local name = player:get_player_name() - if not in_bed[name] then - return false - end - end - - return #players > 0 -end - -local function lay_down(player, pos, bed_pos, state, skip) - local name = player:get_player_name() - local hud_flags = player:hud_get_flags() - - if not player or not name then - return - end - - -- stand up - if state ~= nil and not state then - local p = beds.pos[name] or nil - if beds.player[name] ~= nil then - beds.player[name] = nil - player_in_bed = player_in_bed - 1 - end - -- skip here to prevent sending player specific changes (used for leaving players) - if skip then - return - end - if p then - player:setpos(p) - end - - -- physics, eye_offset, etc - player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) - player:set_look_horizontal(math.random(1, 180) / 100) - player_api.player_attached[name] = false - player:set_physics_override(1, 1, 1) - hud_flags.wielditem = true - player_api.player_set_animation(player, "stand" , 30) - - -- lay down - else - beds.player[name] = 1 - beds.pos[name] = pos - player_in_bed = player_in_bed + 1 - - -- physics, eye_offset, etc - player:set_eye_offset({x = 0, y = -13, z = 0}, {x = 0, y = 0, z = 0}) - local yaw, param2 = get_look_yaw(bed_pos) - player:set_look_horizontal(yaw) - local dir = minetest.facedir_to_dir(param2) - local p = {x = bed_pos.x + dir.x / 2, y = bed_pos.y, z = bed_pos.z + dir.z / 2} - player:set_physics_override(0, 0, 0) - player:setpos(p) - player_api.player_attached[name] = true - hud_flags.wielditem = false - player_api.player_set_animation(player, "lay" , 0) - end - - player:hud_set_flags(hud_flags) -end - -local function update_formspecs(finished) - local ges = #minetest.get_connected_players() - local form_n - local is_majority = (ges / 2) < player_in_bed - - if finished then - form_n = beds.formspec .. "label[2.7,11; Good morning.]" - else - form_n = beds.formspec .. "label[2.2,11;" .. tostring(player_in_bed) .. - " of " .. tostring(ges) .. " players are in bed]" - if is_majority and is_night_skip_enabled() then - form_n = form_n .. "button_exit[2,8;4,0.75;force;Force night skip]" - end - end - - for name,_ in pairs(beds.player) do - minetest.show_formspec(name, "beds_form", form_n) - end -end - - --- Public functions - -function beds.kick_players() - for name, _ in pairs(beds.player) do - local player = minetest.get_player_by_name(name) - lay_down(player, nil, nil, false) - end -end - -function beds.skip_night() - minetest.set_timeofday(0.23) -end - -function beds.on_rightclick(pos, player) - local name = player:get_player_name() - local ppos = player:getpos() - local tod = minetest.get_timeofday() - - if tod > 0.2 and tod < 0.805 then - if beds.player[name] then - lay_down(player, nil, nil, false) - end - minetest.chat_send_player(name, "You can only sleep at night.") - return - end - - -- move to bed - if not beds.player[name] then - lay_down(player, ppos, pos) - beds.set_spawns() -- save respawn positions when entering bed - else - lay_down(player, nil, nil, false) - end - - if not is_sp then - update_formspecs(false) - end - - -- skip the night and let all players stand up - if check_in_beds() then - minetest.after(2, function() - if not is_sp then - update_formspecs(is_night_skip_enabled()) - end - if is_night_skip_enabled() then - beds.skip_night() - beds.kick_players() - end - end) - end -end - - --- Callbacks --- Only register respawn callback if respawn enabled -if enable_respawn then - -- respawn player at bed if enabled and valid position is found - minetest.register_on_respawnplayer(function(player) - local name = player:get_player_name() - local pos = beds.spawn[name] - if pos then - player:setpos(pos) - return true - end - end) -end - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - lay_down(player, nil, nil, false, true) - beds.player[name] = nil - if check_in_beds() then - minetest.after(2, function() - update_formspecs(is_night_skip_enabled()) - if is_night_skip_enabled() then - beds.skip_night() - beds.kick_players() - end - end) - end -end) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "beds_form" then - return - end - if fields.quit or fields.leave then - lay_down(player, nil, nil, false) - update_formspecs(false) - end - - if fields.force then - update_formspecs(is_night_skip_enabled()) - if is_night_skip_enabled() then - beds.skip_night() - beds.kick_players() - end - end -end) diff --git a/mods/ITEMS/beds/init.lua b/mods/ITEMS/beds/init.lua deleted file mode 100644 index 8b25890..0000000 --- a/mods/ITEMS/beds/init.lua +++ /dev/null @@ -1,17 +0,0 @@ -beds = {} -beds.player = {} -beds.pos = {} -beds.spawn = {} - -beds.formspec = "size[8,15;true]" .. - "bgcolor[#080808BB; true]" .. - "button_exit[2,12;4,0.75;leave;Leave Bed]" - -local modpath = minetest.get_modpath("beds") - --- Load files - -dofile(modpath .. "/functions.lua") -dofile(modpath .. "/api.lua") -dofile(modpath .. "/beds.lua") -dofile(modpath .. "/spawns.lua") diff --git a/mods/ITEMS/beds/spawns.lua b/mods/ITEMS/beds/spawns.lua deleted file mode 100644 index 6b1f404..0000000 --- a/mods/ITEMS/beds/spawns.lua +++ /dev/null @@ -1,63 +0,0 @@ -local world_path = minetest.get_worldpath() -local org_file = world_path .. "/beds_spawns" -local file = world_path .. "/beds_spawns" -local bkwd = false - --- check for PA's beds mod spawns -local cf = io.open(world_path .. "/beds_player_spawns", "r") -if cf ~= nil then - io.close(cf) - file = world_path .. "/beds_player_spawns" - bkwd = true -end - -function beds.read_spawns() - local spawns = beds.spawn - local input = io.open(file, "r") - if input and not bkwd then - repeat - local x = input:read("*n") - if x == nil then - break - end - local y = input:read("*n") - local z = input:read("*n") - local name = input:read("*l") - spawns[name:sub(2)] = {x = x, y = y, z = z} - until input:read(0) == nil - io.close(input) - elseif input and bkwd then - beds.spawn = minetest.deserialize(input:read("*all")) - input:close() - beds.save_spawns() - os.rename(file, file .. ".backup") - file = org_file - end -end - -beds.read_spawns() - -function beds.save_spawns() - if not beds.spawn then - return - end - local data = {} - local output = io.open(org_file, "w") - for k, v in pairs(beds.spawn) do - table.insert(data, string.format("%.1f %.1f %.1f %s\n", v.x, v.y, v.z, k)) - end - output:write(table.concat(data)) - io.close(output) -end - -function beds.set_spawns() - for name,_ in pairs(beds.player) do - local player = minetest.get_player_by_name(name) - local p = player:getpos() - -- but don't change spawn location if borrowing a bed - if not minetest.is_protected(p, name) then - beds.spawn[name] = p - end - end - beds.save_spawns() -end diff --git a/mods/ITEMS/beds/textures/beds_bed.png b/mods/ITEMS/beds/textures/beds_bed.png deleted file mode 100644 index 9c8b7c0..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_fancy.png b/mods/ITEMS/beds/textures/beds_bed_fancy.png deleted file mode 100644 index bb39ce9..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_fancy.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_foot.png b/mods/ITEMS/beds/textures/beds_bed_foot.png deleted file mode 100644 index 2f141d5..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_foot.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_head.png b/mods/ITEMS/beds/textures/beds_bed_head.png deleted file mode 100644 index 5ee9ff3..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_head.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_side1.png b/mods/ITEMS/beds/textures/beds_bed_side1.png deleted file mode 100644 index 7e7c062..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_side1.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_side2.png b/mods/ITEMS/beds/textures/beds_bed_side2.png deleted file mode 100644 index cc9d583..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_side2.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_side_bottom.png b/mods/ITEMS/beds/textures/beds_bed_side_bottom.png deleted file mode 100644 index d26e1de..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_side_bottom.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_side_bottom_r.png b/mods/ITEMS/beds/textures/beds_bed_side_bottom_r.png deleted file mode 100644 index 18e86ba..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_side_bottom_r.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_side_top.png b/mods/ITEMS/beds/textures/beds_bed_side_top.png deleted file mode 100644 index 2fdad5c..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_side_top.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_side_top_r.png b/mods/ITEMS/beds/textures/beds_bed_side_top_r.png deleted file mode 100644 index bb7a91b..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_side_top_r.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_top1.png b/mods/ITEMS/beds/textures/beds_bed_top1.png deleted file mode 100644 index 75c878f..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_top1.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_top2.png b/mods/ITEMS/beds/textures/beds_bed_top2.png deleted file mode 100644 index ab8ac03..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_top2.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_top_bottom.png b/mods/ITEMS/beds/textures/beds_bed_top_bottom.png deleted file mode 100644 index 93c3f52..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_top_bottom.png and /dev/null differ diff --git a/mods/ITEMS/beds/textures/beds_bed_top_top.png b/mods/ITEMS/beds/textures/beds_bed_top_top.png deleted file mode 100644 index 96231f7..0000000 Binary files a/mods/ITEMS/beds/textures/beds_bed_top_top.png and /dev/null differ diff --git a/mods/ITEMS/books/depends.txt b/mods/ITEMS/books/depends.txt deleted file mode 100644 index aaeb4b6..0000000 --- a/mods/ITEMS/books/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -init -inventory -default diff --git a/mods/ITEMS/books/init.lua b/mods/ITEMS/books/init.lua deleted file mode 100644 index 935651e..0000000 --- a/mods/ITEMS/books/init.lua +++ /dev/null @@ -1,304 +0,0 @@ ---[[ - Books ---]] - -local books = {} - -local bookshelf_formspec = - "size[8,7;]" .. - init.gui_bg .. - init.gui_bg_img .. - init.gui_slots .. - "list[context;books;0,0.3;8,2;]" .. - "list[current_player;main;0,2.85;8,1;]" .. - "list[current_player;main;0,4.08;8,3;8]" .. - "listring[context;books]" .. - "listring[current_player;main]" .. - init.get_hotbar_bg(0,2.85) - -local function get_bookshelf_formspec(inv) - local formspec = bookshelf_formspec - local invlist = inv and inv:get_list("books") - -- Inventory slots overlay - local bx, by = 0, 0.3 - for i = 1, 16 do - if i == 9 then - bx = 0 - by = by + 1 - end - if not invlist or invlist[i]:is_empty() then - formspec = formspec .. - "image[" .. bx .. "," .. by .. ";1,1;books_bookshelf_slot.png]" - end - bx = bx + 1 - end - return formspec -end - -minetest.register_node("books:bookshelf", { - description = "Bookshelf", - tiles = {"default_wood.png", "default_wood.png", "default_wood.png", - "default_wood.png", "books_bookshelf.png", "books_bookshelf.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults(), - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_bookshelf_formspec(nil)) - local inv = meta:get_inventory() - inv:set_size("books", 8 * 2) - end, - can_dig = function(pos,player) - local inv = minetest.get_meta(pos):get_inventory() - return inv:is_empty("books") - end, - allow_metadata_inventory_put = function(pos, listname, index, stack) - if minetest.get_item_group(stack:get_name(), "book") ~= 0 then - return stack:get_count() - end - return 0 - 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 bookshelf at " .. minetest.pos_to_string(pos)) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory())) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " moves stuff to bookshelf at " .. minetest.pos_to_string(pos)) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory())) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " takes stuff from bookshelf at " .. minetest.pos_to_string(pos)) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory())) - end, - on_blast = function(pos) - local drops = {} - inventory.get_inventory_drops(pos, "books", drops) - drops[#drops+1] = "books:bookshelf" - minetest.remove_node(pos) - return drops - end, -}) - - -local lpp = 14 -- Lines per book's page -local function book_on_use(itemstack, user) - local player_name = user:get_player_name() - local meta = itemstack:get_meta() - local title, text, owner = "", "", player_name - local page, page_max, lines, string = 1, 1, {}, "" - - -- Backwards compatibility - local old_data = minetest.deserialize(itemstack:get_metadata()) - if old_data then - meta:from_table({ fields = old_data }) - end - - local data = meta:to_table().fields - - if data.owner then - title = data.title - text = data.text - owner = data.owner - - for str in (text .. "\n"):gmatch("([^\n]*)[\n]") do - lines[#lines+1] = str - end - - if data.page then - page = data.page - page_max = data.page_max - - for i = ((lpp * page) - lpp) + 1, lpp * page do - if not lines[i] then break end - string = string .. lines[i] .. "\n" - end - end - end - - local formspec - if owner == player_name then - formspec = "size[8,8]" .. init.gui_bg .. - init.gui_bg_img .. - "field[0.5,1;7.5,0;title;Title:;" .. - minetest.formspec_escape(title) .. "]" .. - "textarea[0.5,1.5;7.5,7;text;Contents:;" .. - minetest.formspec_escape(text) .. "]" .. - "button_exit[2.5,7.5;3,1;save;Save]" - else - formspec = "size[8,8]" .. init.gui_bg .. - init.gui_bg_img .. - "label[0.5,0.5;by " .. owner .. "]" .. - "tablecolumns[color;text]" .. - "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. - "table[0.4,0;7,0.5;title;#FFFF00," .. minetest.formspec_escape(title) .. "]" .. - "textarea[0.5,1.5;7.5,7;;" .. - minetest.formspec_escape(string ~= "" and string or text) .. ";]" .. - "button[2.4,7.6;0.8,0.8;book_prev;<]" .. - "label[3.2,7.7;Page " .. page .. " of " .. page_max .. "]" .. - "button[4.9,7.6;0.8,0.8;book_next;>]" - end - - minetest.show_formspec(player_name, "books:book", formspec) - return itemstack -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "books:book" then return end - local inv = player:get_inventory() - local stack = player:get_wielded_item() - - if fields.save and fields.title ~= "" and fields.text ~= "" then - local new_stack, data - if stack:get_name() ~= "books:book_written" then - local count = stack:get_count() - if count == 1 then - stack:set_name("books:book_written") - else - stack:set_count(count - 1) - new_stack = ItemStack("books:book_written") - end - else - data = stack:get_meta():to_table().fields - end - - if data and data.owner and data.owner ~= player:get_player_name() then - return - end - - if not data then data = {} end - data.title = fields.title - data.owner = player:get_player_name() - data.description = "\""..fields.title.."\" by "..data.owner - data.text = fields.text - data.text_len = #data.text - data.page = 1 - data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp) - - if new_stack then - new_stack:get_meta():from_table({ fields = data }) - if inv:room_for_item("main", new_stack) then - inv:add_item("main", new_stack) - else - minetest.add_item(player:getpos(), new_stack) - end - else - stack:get_meta():from_table({ fields = data }) - end - - elseif fields.book_next or fields.book_prev then - local data = stack:get_meta():to_table().fields - if not data or not data.page then - return - end - - data.page = tonumber(data.page) - data.page_max = tonumber(data.page_max) - - if fields.book_next then - data.page = data.page + 1 - if data.page > data.page_max then - data.page = 1 - end - else - data.page = data.page - 1 - if data.page == 0 then - data.page = data.page_max - end - end - - stack:get_meta():from_table({fields = data}) - stack = book_on_use(stack, player) - end - - -- Update stack - player:set_wielded_item(stack) -end) - -minetest.register_craftitem("books:book", { - description = "Book", - inventory_image = "books_book.png", - groups = {book = 1, flammable = 3}, - on_use = book_on_use, -}) - -minetest.register_craftitem("books:book_written", { - description = "Book With Text", - inventory_image = "books_book_written.png", - groups = {book = 1, not_in_creative_inventory = 1, flammable = 3}, - stack_max = 1, - on_use = book_on_use, -}) - -minetest.register_craft({ - type = "shapeless", - output = "books:book_written", - recipe = {"books:book", "books:book_written"} -}) - -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - if itemstack:get_name() ~= "books:book_written" then - return - end - - local original - local index - for i = 1, player:get_inventory():get_size("craft") do - if old_craft_grid[i]:get_name() == "books:book_written" then - original = old_craft_grid[i] - index = i - end - end - if not original then - return - end - local copymeta = original:get_meta():to_table() - -- copy of the book held by player's mouse cursor - itemstack:get_meta():from_table(copymeta) - -- put the book with metadata back in the craft grid - craft_inv:set_stack("craft", index, original) -end) - -minetest.register_craft({ - output = 'books:book', - recipe = { - {'default:paper'}, - {'default:paper'}, - {'default:paper'}, - } -}) - -minetest.register_craft({ - output = 'books:bookshelf', - recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'books:book', 'books:book', 'books:book'}, - {'group:wood', 'group:wood', 'group:wood'}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "books:bookshelf", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "books:book", - burntime = 3, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "books:book_written", - burntime = 3, -}) - diff --git a/mods/ITEMS/books/mod.conf b/mods/ITEMS/books/mod.conf deleted file mode 100644 index a248002..0000000 --- a/mods/ITEMS/books/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = books diff --git a/mods/ITEMS/books/textures/books_book.png b/mods/ITEMS/books/textures/books_book.png deleted file mode 100644 index 448a7df..0000000 Binary files a/mods/ITEMS/books/textures/books_book.png and /dev/null differ diff --git a/mods/ITEMS/books/textures/books_book_written.png b/mods/ITEMS/books/textures/books_book_written.png deleted file mode 100644 index 9196ac6..0000000 Binary files a/mods/ITEMS/books/textures/books_book_written.png and /dev/null differ diff --git a/mods/ITEMS/books/textures/books_bookshelf_slot.png b/mods/ITEMS/books/textures/books_bookshelf_slot.png deleted file mode 100644 index 715a3dc..0000000 Binary files a/mods/ITEMS/books/textures/books_bookshelf_slot.png and /dev/null differ diff --git a/mods/ITEMS/bucket/depends.txt b/mods/ITEMS/bucket/depends.txt deleted file mode 100644 index 1e82165..0000000 --- a/mods/ITEMS/bucket/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -australia diff --git a/mods/ITEMS/bucket/init.lua b/mods/ITEMS/bucket/init.lua deleted file mode 100644 index 513ee92..0000000 --- a/mods/ITEMS/bucket/init.lua +++ /dev/null @@ -1,224 +0,0 @@ --- Minetest 0.4 mod: bucket --- See README.txt for licensing and other information. - -minetest.register_alias("bucket", "bucket:bucket_empty") -minetest.register_alias("bucket_water", "bucket:bucket_water") -minetest.register_alias("bucket_lava", "bucket:bucket_lava") - -minetest.register_craft({ - output = 'bucket:bucket_empty 1', - recipe = { - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'', 'default:steel_ingot', ''}, - } -}) - -bucket = {} -bucket.liquids = {} - -local function check_protection(pos, name, text) - if minetest.is_protected(pos, name) then - minetest.log("action", (name ~= "" and name or "A mod") - .. " tried to " .. text - .. " at protected position " - .. minetest.pos_to_string(pos) - .. " with a bucket") - minetest.record_protection_violation(pos, name) - return true - end - return false -end - --- Register a new liquid --- source = name of the source node --- flowing = name of the flowing node --- itemname = name of the new bucket item (or nil if liquid is not takeable) --- inventory_image = texture of the new bucket item (ignored if itemname == nil) --- name = text description of the bucket item --- groups = (optional) groups of the bucket item, for example {water_bucket = 1} --- force_renew = (optional) bool. Force the liquid source to renew if it has a --- source neighbour, even if defined as 'liquid_renewable = false'. --- Needed to avoid creating holes in sloping rivers. --- This function can be called from any mod (that depends on bucket). -function bucket.register_liquid(source, flowing, itemname, inventory_image, name, - groups, force_renew) - bucket.liquids[source] = { - source = source, - flowing = flowing, - itemname = itemname, - force_renew = force_renew, - } - bucket.liquids[flowing] = bucket.liquids[source] - - if itemname ~= nil then - minetest.register_craftitem(itemname, { - description = name, - inventory_image = inventory_image, - stack_max = 1, - liquids_pointable = true, - groups = groups, - - on_place = function(itemstack, user, pointed_thing) - -- Must be pointing to node - if pointed_thing.type ~= "node" then - return - end - - local node = minetest.get_node_or_nil(pointed_thing.under) - local ndef = node and minetest.registered_nodes[node.name] - - -- Call on_rightclick if the pointed node defines it - if ndef and ndef.on_rightclick and - user and not user:get_player_control().sneak then - return ndef.on_rightclick( - pointed_thing.under, - node, user, - itemstack) - end - - local lpos - - -- Check if pointing to a buildable node - if ndef and ndef.buildable_to then - -- buildable; replace the node - lpos = pointed_thing.under - else - -- not buildable to; place the liquid above - -- check if the node above can be replaced - - lpos = pointed_thing.above - node = minetest.get_node_or_nil(lpos) - local above_ndef = node and minetest.registered_nodes[node.name] - - if not above_ndef or not above_ndef.buildable_to then - -- do not remove the bucket with the liquid - return itemstack - end - end - - if check_protection(lpos, user - and user:get_player_name() - or "", "place "..source) then - return - end - - minetest.set_node(lpos, {name = source}) - return ItemStack("bucket:bucket_empty") - end - }) - end -end - -minetest.register_craftitem("bucket:bucket_empty", { - description = "Empty Bucket", - inventory_image = "bucket.png", - stack_max = 99, - liquids_pointable = true, - on_use = function(itemstack, user, pointed_thing) - if pointed_thing.type == "object" then - pointed_thing.ref:punch(user, 1.0, { full_punch_interval=1.0 }, nil) - return user:get_wielded_item() - elseif pointed_thing.type ~= "node" then - -- do nothing if it's neither object nor node - return - end - -- Check if pointing to a liquid source - local node = minetest.get_node(pointed_thing.under) - local liquiddef = bucket.liquids[node.name] - local item_count = user:get_wielded_item():get_count() - - if liquiddef ~= nil - and liquiddef.itemname ~= nil - and node.name == liquiddef.source then - if check_protection(pointed_thing.under, - user:get_player_name(), - "take ".. node.name) then - return - end - - -- default set to return filled bucket - local giving_back = liquiddef.itemname - - -- check if holding more than 1 empty bucket - if item_count > 1 then - - -- if space in inventory add filled bucked, otherwise drop as item - local inv = user:get_inventory() - if inv:room_for_item("main", {name=liquiddef.itemname}) then - inv:add_item("main", liquiddef.itemname) - else - local pos = user:getpos() - pos.y = math.floor(pos.y + 0.5) - minetest.add_item(pos, liquiddef.itemname) - end - - -- set to return empty buckets minus 1 - giving_back = "bucket:bucket_empty "..tostring(item_count-1) - - end - - -- force_renew requires a source neighbour - local source_neighbor = false - if liquiddef.force_renew then - source_neighbor = - minetest.find_node_near(pointed_thing.under, 1, liquiddef.source) - end - if not (source_neighbor and liquiddef.force_renew) then - minetest.add_node(pointed_thing.under, {name = "air"}) - end - - return ItemStack(giving_back) - else - -- non-liquid nodes will have their on_punch triggered - local node_def = minetest.registered_nodes[node.name] - if node_def then - node_def.on_punch(pointed_thing.under, node, user, pointed_thing) - end - return user:get_wielded_item() - end - end, -}) - -bucket.register_liquid( - "default:water_source", - "default:water_flowing", - "bucket:bucket_water", - "bucket_water.png", - "Water Bucket", - {water_bucket = 1} -) - -bucket.register_liquid( - "default:river_water_source", - "default:river_water_flowing", - "bucket:bucket_river_water", - "bucket_river_water.png", - "River Water Bucket", - {water_bucket = 1}, - true -) - -bucket.register_liquid( - "australia:muddy_water_source", - "australia:muddy_water_flowing", - "bucket:bucket_muddy_water", - "bucket_muddy_water.png", - "Muddy Water Bucket", - {water_bucket = 1} -) - -bucket.register_liquid( - "default:lava_source", - "default:lava_flowing", - "bucket:bucket_lava", - "bucket_lava.png", - "Lava Bucket" -) - -minetest.register_craft({ - type = "fuel", - recipe = "bucket:bucket_lava", - burntime = 60, - replacements = {{"bucket:bucket_lava", "bucket:bucket_empty"}}, -}) - diff --git a/mods/ITEMS/bucket/textures/bucket_muddy_water.png b/mods/ITEMS/bucket/textures/bucket_muddy_water.png deleted file mode 100644 index 2c2e213..0000000 Binary files a/mods/ITEMS/bucket/textures/bucket_muddy_water.png and /dev/null differ diff --git a/mods/ITEMS/chests/depends.txt b/mods/ITEMS/chests/depends.txt deleted file mode 100644 index aaeb4b6..0000000 --- a/mods/ITEMS/chests/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -init -inventory -default diff --git a/mods/ITEMS/chests/init.lua b/mods/ITEMS/chests/init.lua deleted file mode 100644 index be10a91..0000000 --- a/mods/ITEMS/chests/init.lua +++ /dev/null @@ -1,320 +0,0 @@ ---[[ - Chests ---]] - -chests = {} - -local function get_chest_formspec(pos) - local spos = pos.x .. "," .. pos.y .. "," .. pos.z - local formspec = - "size[8,9]" .. - init.gui_bg .. - init.gui_bg_img .. - init.gui_slots .. - "list[nodemeta:" .. spos .. ";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[nodemeta:" .. spos .. ";main]" .. - "listring[current_player;main]" .. - init.get_hotbar_bg(0,4.85) - return formspec -end - -local function chest_lid_obstructed(pos) - local above = { x = pos.x, y = pos.y + 1, z = pos.z } - local def = minetest.registered_nodes[minetest.get_node(above).name] - -- allow ladders, signs, wallmounted things and torches to not obstruct - if def.drawtype == "airlike" or - def.drawtype == "signlike" or - def.drawtype == "torchlike" or - (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted") then - return false - end - return true -end - -local open_chests = {} - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "chests:chest" then - return - end - if not player or not fields.quit then - return - end - local pn = player:get_player_name() - - if not open_chests[pn] then - return - end - - local pos = open_chests[pn].pos - local sound = open_chests[pn].sound - local swap = open_chests[pn].swap - local node = minetest.get_node(pos) - - open_chests[pn] = nil - for k, v in pairs(open_chests) do - if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then - return true - end - end - minetest.after(0.2, minetest.swap_node, pos, { name = "chests:" .. swap, - param2 = node.param2 }) - minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}) - return true -end) - -function chests.register_chest(name, d) - local def = table.copy(d) - def.drawtype = "mesh" - def.visual = "mesh" - def.paramtype = "light" - def.paramtype2 = "facedir" - def.legacy_facedir_simple = true - def.is_ground_content = false - - if def.protected then - def.on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", "Locked Chest") - meta:set_string("owner", "") - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end - def.after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name() or "") - meta:set_string("infotext", "Locked Chest (owned by " .. - meta:get_string("owner") .. ")") - end - def.can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") and - default.can_interact_with_node(player, pos) - end - def.allow_metadata_inventory_move = function(pos, from_list, from_index, - to_list, to_index, count, player) - if not default.can_interact_with_node(player, pos) then - return 0 - end - return count - end - def.allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if not default.can_interact_with_node(player, pos) then - return 0 - end - return stack:get_count() - end - def.allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if not default.can_interact_with_node(player, pos) then - return 0 - end - return stack:get_count() - end - def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - if not default.can_interact_with_node(clicker, pos) then - return itemstack - end - - minetest.sound_play(def.sound_open, {gain = 0.3, - pos = pos, max_hear_distance = 10}) - if not chest_lid_obstructed(pos) then - minetest.swap_node(pos, - { name = "chests:" .. name .. "_open", - param2 = node.param2 }) - end - minetest.after(0.2, minetest.show_formspec, - clicker:get_player_name(), - "chests:chest", get_chest_formspec(pos)) - open_chests[clicker:get_player_name()] = { pos = pos, - sound = def.sound_close, swap = name } - end - def.on_blast = function() end - def.on_key_use = function(pos, player) - local secret = minetest.get_meta(pos):get_string("key_lock_secret") - local itemstack = player:get_wielded_item() - local key_meta = itemstack:get_meta() - - if key_meta:get_string("secret") == "" then - key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret) - itemstack:set_metadata("") - end - - if secret ~= key_meta:get_string("secret") then - return - end - - minetest.show_formspec( - player:get_player_name(), - "chests:chest_locked", - get_chest_formspec(pos) - ) - end - def.on_skeleton_key_use = function(pos, player, newsecret) - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - local pn = player:get_player_name() - - -- verify placer is owner of lockable chest - if owner ~= pn then - minetest.record_protection_violation(pos, pn) - minetest.chat_send_player(pn, "You do not own this chest.") - return nil - end - - local secret = meta:get_string("key_lock_secret") - if secret == "" then - secret = newsecret - meta:set_string("key_lock_secret", secret) - end - - return secret, "a locked chest", owner - end - else - def.on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", "Chest") - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end - def.can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end - def.on_rightclick = function(pos, node, clicker) - minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, - max_hear_distance = 10}) - if not chest_lid_obstructed(pos) then - minetest.swap_node(pos, { - name = "chests:" .. name .. "_open", - param2 = node.param2 }) - end - minetest.after(0.2, minetest.show_formspec, - clicker:get_player_name(), - "chests:chest", get_chest_formspec(pos)) - open_chests[clicker:get_player_name()] = { pos = pos, - sound = def.sound_close, swap = name } - end - end - - def.on_metadata_inventory_move = function(pos, from_list, from_index, - to_list, to_index, count, player) - minetest.log("action", player:get_player_name() .. - " moves stuff in chest at " .. minetest.pos_to_string(pos)) - end - def.on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " moves " .. stack:get_name() .. - " to chest at " .. minetest.pos_to_string(pos)) - end - def.on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " takes " .. stack:get_name() .. - " from chest at " .. minetest.pos_to_string(pos)) - end - def.on_blast = function(pos) - local drops = {} - inventory.get_inventory_drops(pos, "main", drops) - drops[#drops+1] = "chests:chest" - minetest.remove_node(pos) - return drops - end - - local def_opened = table.copy(def) - local def_closed = table.copy(def) - - def_opened.mesh = "chest_open.obj" - def_opened.drop = "chests:" .. name - def_opened.groups.not_in_creative_inventory = 1 - def_opened.selection_box = { - type = "fixed", - fixed = { -1/2, -1/2, -1/2, 1/2, 3/16, 1/2 }, - } - def_opened.can_dig = function() - return false - end - - def_closed.mesh = nil - def_closed.drawtype = nil - def_closed.tiles[6] = def.tiles[5] -- swap textures around for "normal" - def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh - def_closed.tiles[3] = def.tiles[3].."^[transformFX" - - minetest.register_node("chests:" .. name, def_closed) - minetest.register_node("chests:" .. name .. "_open", def_opened) -end - - -chests.register_chest("chest", { - description = "Chest", - tiles = { - "chests_chest_top.png", - "chests_chest_top.png", - "chests_chest_side.png", - "chests_chest_side.png", - "chests_chest_front.png", - "chests_chest_inside.png" - }, - sounds = default.node_sound_wood_defaults(), - sound_open = "chests_chest_open", - sound_close = "chests_chest_close", - groups = {choppy = 2, oddly_breakable_by_hand = 2}, -}) - -chests.register_chest("chest_locked", { - description = "Locked Chest", - tiles = { - "chests_chest_top.png", - "chests_chest_top.png", - "chests_chest_side.png", - "chests_chest_side.png", - "chests_chest_lock.png", - "chests_chest_inside.png" - }, - sounds = default.node_sound_wood_defaults(), - sound_open = "chests_chest_open", - sound_close = "chests_chest_close", - groups = {choppy = 2, oddly_breakable_by_hand = 2}, - protected = true, -}) - - -minetest.register_craft({ - output = 'chests:chest', - recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', '', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, - } -}) - -minetest.register_craft({ - output = 'chests:chest_locked', - recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', 'default:steel_ingot', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, - } -}) - -minetest.register_craft( { - type = "shapeless", - output = "chests:chest_locked", - recipe = {"chests:chest", "default:steel_ingot"}, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "chests:chest", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "chests:chest_locked", - burntime = 30, -}) - diff --git a/mods/ITEMS/chests/mod.conf b/mods/ITEMS/chests/mod.conf deleted file mode 100644 index 6c7a3a1..0000000 --- a/mods/ITEMS/chests/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = chests diff --git a/mods/ITEMS/chests/sounds/chests_chest_close.ogg b/mods/ITEMS/chests/sounds/chests_chest_close.ogg deleted file mode 100644 index 53ff23d..0000000 Binary files a/mods/ITEMS/chests/sounds/chests_chest_close.ogg and /dev/null differ diff --git a/mods/ITEMS/chests/sounds/chests_chest_open.ogg b/mods/ITEMS/chests/sounds/chests_chest_open.ogg deleted file mode 100644 index c73c072..0000000 Binary files a/mods/ITEMS/chests/sounds/chests_chest_open.ogg and /dev/null differ diff --git a/mods/ITEMS/crops/.luacheckrc b/mods/ITEMS/crops/.luacheckrc deleted file mode 100755 index 15eed66..0000000 --- a/mods/ITEMS/crops/.luacheckrc +++ /dev/null @@ -1,15 +0,0 @@ -unused_args = false -allow_defined_top = true - -read_globals = { - "DIR_DELIM", - "minetest", "core", - "dump", - "vector", "nodeupdate", - "VoxelManip", "VoxelArea", - "PseudoRandom", "ItemStack", - "intllib", - "default", - table = { fields = { "copy", "getn" } } -} - diff --git a/mods/ITEMS/crops/LICENSE b/mods/ITEMS/crops/LICENSE deleted file mode 100755 index e657693..0000000 --- a/mods/ITEMS/crops/LICENSE +++ /dev/null @@ -1,38 +0,0 @@ - -Crops - a minetest mod that adds more farming crops - -See spdx.org/licenses to see what the License Identifiers used below mean. - -=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ - -All source code (lua): - (C) Auke Kok - LGPL-2.0+ - -All textures, models: - (C) Auke Kok - CC-BY-SA-3.0 - -Translations: - - de.po - (C) 2017 LNJ - LGPL-2.0+ - -Sounds: - - crops_watercan_splash* - http://freesound.org/people/junggle/sounds/27361/ - http://profiles.google.com/jun66le - CC-BY-3.0 - - crops_watercan_entering.ogg - http://freesound.org/people/Quistard/sounds/166824/ - CC-BY-3.0 - - crops_flies.ogg - http://www.freesound.org/people/galeku/sounds/46938/ - CC0-1.0 - - crops_watercan_watering.ogg - http://www.freesound.org/people/Eakoontz/sounds/151736/ - CC0-1.0 - -* Sounds edited with audacity - -=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ diff --git a/mods/ITEMS/crops/Makefile b/mods/ITEMS/crops/Makefile deleted file mode 100755 index 2586844..0000000 --- a/mods/ITEMS/crops/Makefile +++ /dev/null @@ -1,10 +0,0 @@ - -PROJECT = crops -all: release - -release: - VERSION=`git describe --tags`; \ - git archive --format zip --output "$(PROJECT)-$${VERSION}.zip" --prefix=$(PROJECT)/ master - -poupdate: - ../intllib/tools/xgettext.sh *.lua diff --git a/mods/ITEMS/crops/cooking.lua b/mods/ITEMS/crops/cooking.lua deleted file mode 100755 index 1d58bf2..0000000 --- a/mods/ITEMS/crops/cooking.lua +++ /dev/null @@ -1,75 +0,0 @@ - ---[[ - -Copyright (C) 2015 - Auke Kok - -"crops" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - --- --- cooking recipes that don't go directly with any of the --- crops in this mod - either these combine them in new --- ways or use other items --- - --- Intllib -local S = crops.intllib - -minetest.register_craftitem("crops:unbaked_clay_bowl", { - description = S("Unbaked clay bowl"), - inventory_image = "crops_unbaked_clay_bowl.png", -}) - -minetest.register_craft({ - output = "crops:unbaked_clay_bowl", - recipe = { - { "", "", "" }, - { "default:clay_lump", "", "default:clay_lump" }, - { "", "default:clay_lump", "" } - } -}) - -minetest.register_craftitem("crops:clay_bowl", { - description = S("Clay bowl"), - inventory_image = "crops_clay_bowl.png", - groups = { food_bowl=1 } -}) - -minetest.register_craft({ - type = "cooking", - output = "crops:clay_bowl", - recipe = "crops:unbaked_clay_bowl" -}) - -minetest.register_craftitem("crops:vegetable_stew", { - description = S("Bowl of vegetable stew"), - inventory_image = "crops_bowl_vegetable_stew.png", - groups = { eatable=1 }, - on_use = minetest.item_eat(8, "crops:clay_bowl"), -}) - -minetest.register_craft({ - type = "cooking", - output = "crops:vegetable_stew", - recipe = "crops:uncooked_vegetable_stew" -}) - -minetest.register_craftitem("crops:uncooked_vegetable_stew", { - description = S("Bowl of uncooked vegetable stew"), - inventory_image = "crops_bowl_uncooked_vegetable_stew.png", - groups = { eatable=1 }, - on_use = minetest.item_eat(2, "crops:clay_bowl") -}) - -minetest.register_craft({ - output = "crops:uncooked_vegetable_stew", - recipe = { - { "", "", "" }, - { "crops:green_bean", "crops:potato", "crops:tomato" }, - { "", "group:food_bowl", "" } - } -}) diff --git a/mods/ITEMS/crops/corn.lua b/mods/ITEMS/crops/corn.lua deleted file mode 100755 index 1285780..0000000 --- a/mods/ITEMS/crops/corn.lua +++ /dev/null @@ -1,347 +0,0 @@ - ---[[ - -Copyright (C) 2015 - Auke Kok - -"crops" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - --- Intllib -local S = crops.intllib - -minetest.register_node("crops:corn", { - description = S("Corn"), - inventory_image = "crops_corn.png", - wield_image = "crops_corn.png", - tiles = { "crops_corn_base_seed.png" }, - drawtype = "plantlike", - paramtype2 = "meshoptions", - waving = 1, - sunlight_propagates = true, - use_texture_alpha = true, - walkable = true, - paramtype = "light", - node_placement_prediction = "crops:corn_base_seed", - groups = { snappy=3,flammable=3,flora=1,attached_node=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - - on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) - if minetest.get_item_group(under.name, "soil") <= 1 then - return - end - crops.plant(pointed_thing.above, {name="crops:corn_base_seed", param2 = 3}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end -}) - -minetest.register_craftitem("crops:corn_cob", { - description = S("Corn Cob"), - inventory_image = "crops_corn_cob.png", -}) - -minetest.register_craft({ - type = "shapeless", - output = "crops:corn", - recipe = { "crops:corn_cob" } -}) - -minetest.register_craftitem("crops:corn_on_the_cob", { - description = S("Corn on the Cob"), - inventory_image = "crops_corn_on_the_cob.png", - on_use = minetest.item_eat(1) -}) - -minetest.register_craft({ - type = "cooking", - output = "crops:corn_on_the_cob", - recipe = "crops:corn_cob" -}) - -minetest.register_node("crops:corn_base_seed", { - visual = "mesh", - description = S("Corn plant"), - drawtype = "plantlike", - paramtype2 = "meshoptions", - waving = 1, - tiles = { "crops_corn_base_seed.png" }, - use_texture_alpha = true, - walkable = false, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.3, 0.5} - } -}) - -minetest.register_abm({ - nodenames = { "crops:corn_base_seed" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - minetest.swap_node(pos, { name = "crops:corn_base_1", param2 = 3 }) - end -}) - -minetest.register_node("crops:corn_base_1", { - visual = "mesh", - description = S("Corn plant"), - drawtype = "plantlike", - paramtype2 = "meshoptions", - tiles = { "crops_corn_base_1.png" }, - waving = 1, - use_texture_alpha = true, - walkable = false, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_abm({ - nodenames = { "crops:corn_base_1" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - if not minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then - return - end - minetest.swap_node(pos, { name = "crops:corn_base_2", param2 = 3 }) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - minetest.set_node(above , { name = "crops:corn_top_1", param2 = 3 }) - local meta = minetest.get_meta(above) - meta:set_int("crops_top_half", 1) - end -}) - -minetest.register_node("crops:corn_base_2", { - description = S("Corn plant"), - drawtype = "plantlike", - paramtype2 = "meshoptions", - tiles = { "crops_corn_base_2.png" }, - use_texture_alpha = true, - walkable = false, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - on_dig = function(pos, node, digger) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - if minetest.get_node(above).name == "crops:corn_top_1" or minetest.get_node(above).name == "crops:corn_top_2" then - minetest.remove_node(above) - minetest.remove_node(pos) - return - end - if not minetest.get_node(above).name == "crops:corn_top_3" then - minetest.remove_node(pos) - end - - local meta = minetest.get_meta(pos) - local damage = meta:get_int("crops_damage") - local drops = {} - -- 0 - 2-4 - -- 50 - 2-3 - -- 100 - 1-1 - for i = 1,math.random(2 - (damage / 100), 4 - (3 * (damage / 100))) do - table.insert(drops, ('crops:corn_cob')) - end - minetest.set_node(pos, { name = "crops:corn_base_3", param2 = 3 }) - minetest.set_node(above, { name = "crops:corn_top_4", param2 = 3 }) - minetest.handle_node_drops(above, drops, digger) - end -}) - -minetest.register_node("crops:corn_base_3", { - description = S("Corn plant"), - drawtype = "plantlike", - paramtype2 = "meshoptions", - tiles = { "crops_corn_base_3.png" }, - use_texture_alpha = true, - walkable = false, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - on_dig = function(pos, node, digger) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - if minetest.get_node(above).name == "crops:corn_top_4" then - minetest.remove_node(above) - end - minetest.remove_node(pos) - end -}) - -minetest.register_node("crops:corn_top_1", { - description = S("Corn plant"), - drawtype = "plantlike", - paramtype2 = "meshoptions", - tiles = { "crops_corn_base_1.png" }, - waving = 1, - use_texture_alpha = true, - walkable = false, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - on_dig = function(pos, node, digger) - local below = {x = pos.x, y = pos.y - 1, z = pos.z} - if not minetest.get_node(below).name == "crops:base_2" then - return - end - minetest.remove_node(below) - minetest.remove_node(pos) - end -}) - -minetest.register_abm({ - nodenames = { "crops:corn_top_1" }, - neighbors = { "crops:corn_base_2" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if minetest.get_node_light(pos, nil) < crops.settings.light then - return - end - minetest.swap_node(pos, { name = "crops:corn_top_2", param2 = 3 }) - end -}) - -minetest.register_node("crops:corn_top_2", { - description = S("Corn plant"), - drawtype = "plantlike", - paramtype2 = "meshoptions", - tiles = { "crops_corn_top_1.png" }, - waving = 1, - use_texture_alpha = true, - walkable = false, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - - on_dig = function(pos, node, digger) - local below = {x = pos.x, y = pos.y - 1, z = pos.z} - if not minetest.get_node(below).name == "crops:base_2" then - return - end - minetest.remove_node(below) - minetest.remove_node(pos) - end -}) - -minetest.register_abm({ - nodenames = { "crops:corn_top_2" }, - neighbors = { "crops:corn_base_2" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - -- we don't call crops.grow here otherwise there would be 2 abm's hitting - -- this stack, and dmg needs to be applied to the bottom part - if minetest.get_node_light(pos, nil) < crops.settings.light then - return - end - minetest.swap_node(pos, { name = "crops:corn_top_3", param2 = 3 }) - end -}) - -minetest.register_node("crops:corn_top_3", { - description = S("Corn plant"), - drawtype = "plantlike", - paramtype2 = "meshoptions", - tiles = { "crops_corn_top_2.png" }, - waving = 1, - use_texture_alpha = true, - walkable = false, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - - on_dig = function(pos, node, digger) - local below = { x = pos.x, y = pos.y - 1, z = pos.z } - local meta = minetest.get_meta(below) - local damage = meta:get_int("crops_damage") - local drops = {} - -- 0 - 2-4 - -- 50 - 2-3 - -- 100 - 1-1 - for i = 1,math.random(2 - (damage / 100), 4 - (3 * (damage / 100))) do - table.insert(drops, ('crops:corn_cob')) - end - crops.die(below) - minetest.handle_node_drops(pos, drops, digger) - end -}) - -minetest.register_node("crops:corn_top_4", { - description = S("Corn plant"), - drawtype = "plantlike", - paramtype2 = "meshoptions", - tiles = { "crops_corn_top_3.png" }, - waving = 1, - use_texture_alpha = true, - walkable = false, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - - on_dig = function(pos, node, digger) - local below = {x = pos.x, y = pos.y - 1, z = pos.z} - if minetest.get_node(below).name == "crops:corn_base_3" then - minetest.remove_node(below) - end - minetest.remove_node(pos) - end -}) - -crops.corn_die = function(pos) - minetest.set_node(pos, { name = "crops:corn_base_3", param2 = 3 }) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - minetest.set_node(above, { name = "crops:corn_top_4", param2 = 3 }) -end - -local properties = { - die = crops.corn_die, - waterstart = 40, - wateruse = 1, - night = 5, - soak = 60, - soak_damage = 75, - wither = 10, - wither_damage = 5, - doublesize = true, -} - -crops.register({ name = "crops:corn_base_seed", properties = properties }) -crops.register({ name = "crops:corn_base_1", properties = properties }) -crops.register({ name = "crops:corn_base_2", properties = properties }) -crops.register({ name = "crops:corn_base_3", properties = properties }) - diff --git a/mods/ITEMS/crops/crops_settings.txt b/mods/ITEMS/crops/crops_settings.txt deleted file mode 100755 index ac97802..0000000 --- a/mods/ITEMS/crops/crops_settings.txt +++ /dev/null @@ -1,10 +0,0 @@ - --- --- crops_settings.txt --- --- These are the default difficulty settings for the crops mod. You can uncomment --- the "easy" or "difficult" settings if you wish, or come up with your own values. --- - --- Valid values are "easy", "normal", and "difficult" -crops.difficulty = "normal" diff --git a/mods/ITEMS/crops/depends.txt b/mods/ITEMS/crops/depends.txt deleted file mode 100755 index 657056a..0000000 --- a/mods/ITEMS/crops/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -default -farming -intllib? diff --git a/mods/ITEMS/crops/description.txt b/mods/ITEMS/crops/description.txt deleted file mode 100755 index 8b85a22..0000000 --- a/mods/ITEMS/crops/description.txt +++ /dev/null @@ -1,5 +0,0 @@ -This mod expands the basic set of farming-related crops that minetest_game offers. It adds melons, potatoes, tomatoes, green beans and corn. The mod also implements plant humidity - you will have to water plants to make sure they're not dried out, or make sure they don't get over-watered. - -Mod specific settings can be changed in the "crops_settings.txt" file in the world folder. - -For more information, go to: http://goo.gl/wf0XLh diff --git a/mods/ITEMS/crops/init.lua b/mods/ITEMS/crops/init.lua deleted file mode 100755 index 0e5e4aa..0000000 --- a/mods/ITEMS/crops/init.lua +++ /dev/null @@ -1,385 +0,0 @@ - ---[[ - -Copyright (C) 2015 - Auke Kok - -"crops" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - -crops = {} -crops.plants = {} -crops.settings = {} - -local settings = {} -settings.easy = { - chance = 4, - interval = 30, - light = 8, - watercan = 25, - watercan_max = 90, - watercan_uses = 20, - damage_chance = 8, - damage_interval = 30, - damage_tick_min = 0, - damage_tick_max = 1, - damage_max = 25, - hydration = false, -} -settings.normal = { - chance = 8, - interval = 30, - light = 10, - watercan = 25, - watercan_max = 90, - watercan_uses = 20, - damage_chance = 8, - damage_interval = 30, - damage_tick_min = 0, - damage_tick_max = 5, - damage_max = 50, - hydration = true, -} -settings.difficult = { - chance = 16, - interval = 30, - light = 13, - watercan = 25, - watercan_max = 100, - watercan_uses = 20, - damage_chance = 4, - damage_interval = 30, - damage_tick_min = 3, - damage_tick_max = 7, - damage_max = 100, - hydration = true, -} - - -local worldpath = minetest.get_worldpath() -local modpath = minetest.get_modpath(minetest.get_current_modname()) - --- Load support for intllib. -local S, _ = dofile(modpath .. "/intllib.lua") -crops.intllib = S - - -dofile(modpath .. "/crops_settings.txt") - -if io.open(worldpath .. "/crops_settings.txt", "r") == nil then - io.input(modpath .. "/crops_settings.txt") - io.output(worldpath .. "/crops_settings.txt") - - local size = 4096 - while true do - local buf = io.read(size) - if not buf then - io.close() - break - end - io.write(buf) - end -else - dofile(worldpath .. "/crops_settings.txt") -end - -if not crops.difficulty then - crops.difficulty = "normal" - minetest.log("error", "[crops] "..S("Defaulting to \"normal\" difficulty settings")) -end -crops.settings = settings[crops.difficulty] -if not crops.settings then - minetest.log("error", "[crops] "..S("Defaulting to \"normal\" difficulty settings")) - crops.settings = settings.normal -end -if crops.settings.hydration then - minetest.log("action", "[crops] "..S("Hydration and dehydration mechanics are enabled.")) -end - -local find_plant = function(node) - for i = 1,table.getn(crops.plants) do - if crops.plants[i].name == node.name then - return crops.plants[i] - end - end - minetest.log("error", "[crops] "..S("Unable to find plant \"@1\" in crops table", node.name)) - return nil -end - -crops.register = function(plantdef) - table.insert(crops.plants, plantdef) -end - -crops.plant = function(pos, node) - minetest.set_node(pos, node) - local meta = minetest.get_meta(pos) - local plant = find_plant(node) - meta:set_int("crops_water", math.max(plant.properties.waterstart, 1)) - meta:set_int("crops_damage", 0) -end - -crops.can_grow = function(pos) - if minetest.get_node_light(pos) < crops.settings.light then - return false - end - local node = minetest.get_node(pos) - local plant = find_plant(node) - if not plant then - return false - end - local meta = minetest.get_meta(pos) - if crops.settings.hydration then - local water = meta:get_int("crops_water") - if water < plant.properties.wither or water > plant.properties.soak then - if math.random(0,1) == 0 then - return false - end - end - -- growing costs water! - meta:set_int("crops_water", math.max(1, water - 10)) - end - - -- damaged plants are less likely to grow - local damage = meta:get_int("crops_damage") - if not damage == 0 then - if math.random(math.min(50, damage), 100) > 75 then - return false - end - end - - -- allow the plant to grow - return true -end - -crops.particles = function(pos, flag) - if flag == 0 then - -- wither (0) - minetest.add_particlespawner({ - amount = 1 * crops.settings.interval, - time = crops.settings.interval, - minpos = { x = pos.x - 0.4, y = pos.y - 0.4, z = pos.z - 0.4 }, - maxpos = { x = pos.x + 0.4, y = pos.y + 0.4, z = pos.z + 0.4 }, - minvel = { x = 0, y = 0.2, z = 0 }, - maxvel = { x = 0, y = 0.4, z = 0 }, - minacc = { x = 0, y = 0, z = 0 }, - maxacc = { x = 0, y = 0.2, z = 0 }, - minexptime = 3, - maxexptime = 5, - minsize = 1, - maxsize = 2, - collisiondetection = false, - texture = "crops_wither.png", - vertical = true, - }) - elseif flag == 1 then - -- soak (1) - minetest.add_particlespawner({ - amount = 8 * crops.settings.interval, - time = crops.settings.interval, - minpos = { x = pos.x - 0.4, y = pos.y - 0.4, z = pos.z - 0.4 }, - maxpos = { x = pos.x + 0.4, y = pos.y - 0.4, z = pos.z + 0.4 }, - minvel = { x = -0.04, y = 0, z = -0.04 }, - maxvel = { x = 0.04, y = 0, z = 0.04 }, - minacc = { x = 0, y = 0, z = 0 }, - maxacc = { x = 0, y = 0, z = 0 }, - minexptime = 3, - maxexptime = 5, - minsize = 1, - maxsize = 2, - collisiondetection = false, - texture = "crops_soak.png", - vertical = false, - }) - elseif flag == 2 then - -- watering (2) - minetest.add_particlespawner({ - amount = 30, - time = 3, - minpos = { x = pos.x - 0.4, y = pos.y - 0.4, z = pos.z - 0.4 }, - maxpos = { x = pos.x + 0.4, y = pos.y + 0.4, z = pos.z + 0.4 }, - minvel = { x = 0, y = 0.0, z = 0 }, - maxvel = { x = 0, y = 0.0, z = 0 }, - minacc = { x = 0, y = -9.81, z = 0 }, - maxacc = { x = 0, y = -9.81, z = 0 }, - minexptime = 2, - maxexptime = 2, - minsize = 1, - maxsize = 3, - collisiondetection = false, - texture = "crops_watering.png", - vertical = true, - }) - else - -- withered/rotting (3) - minetest.add_particlespawner({ - amount = 20, - time = 30, - minpos = { x = pos.x + 0.3, y = pos.y - 0.5, z = pos.z - 0.5 }, - maxpos = { x = pos.x + 0.5, y = pos.y + 0.5, z = pos.z + 0.5 }, - minvel = { x = -0.6, y = -0.1, z = -0.2 }, - maxvel = { x = -0.4, y = 0.1, z = 0.2 }, - minacc = { x = 0.4, y = 0, z = -0.1 }, - maxacc = { x = 0.5, y = 0, z = 0.1 }, - minexptime = 2, - maxexptime = 4, - minsize = 1, - maxsize = 1, - collisiondetection = false, - texture = "crops_flies.png", - vertical = true, - }) - minetest.add_particlespawner({ - amount = 20, - time = 30, - minpos = { x = pos.x - 0.3, y = pos.y - 0.5, z = pos.z - 0.5 }, - maxpos = { x = pos.x - 0.5, y = pos.y + 0.5, z = pos.z + 0.5 }, - minvel = { x = 0.6, y = -0.1, z = -0.2 }, - maxvel = { x = 0.4, y = 0.1, z = 0.2 }, - minacc = { x = -0.4, y = 0, z = -0.1 }, - maxacc = { x = -0.5, y = 0, z = 0.1 }, - minexptime = 2, - maxexptime = 4, - minsize = 1, - maxsize = 1, - collisiondetection = false, - texture = "crops_flies.png", - vertical = true, - }) - minetest.add_particlespawner({ - amount = 20, - time = 30, - minpos = { x = pos.x - 0.5, y = pos.y - 0.5, z = pos.z + 0.3 }, - maxpos = { x = pos.x + 0.5, y = pos.y + 0.5, z = pos.z + 0.5 }, - minvel = { z = -0.6, y = -0.1, x = -0.2 }, - maxvel = { z = -0.4, y = 0.1, x = 0.2 }, - minacc = { z = 0.4, y = 0, x = -0.1 }, - maxacc = { z = 0.5, y = 0, x = 0.1 }, - minexptime = 2, - maxexptime = 4, - minsize = 1, - maxsize = 1, - collisiondetection = false, - texture = "crops_flies.png", - vertical = true, - }) - minetest.add_particlespawner({ - amount = 20, - time = 30, - minpos = { x = pos.x - 0.5, y = pos.y - 0.5, z = pos.z - 0.3 }, - maxpos = { x = pos.x + 0.5, y = pos.y + 0.5, z = pos.z - 0.5 }, - minvel = { z = 0.6, y = -0.1, x = -0.2 }, - maxvel = { z = 0.4, y = 0.1, x = 0.2 }, - minacc = { z = -0.4, y = 0, x = -0.1 }, - maxacc = { z = -0.5, y = 0, x = 0.1 }, - minexptime = 2, - maxexptime = 4, - minsize = 1, - maxsize = 1, - collisiondetection = false, - texture = "crops_flies.png", - vertical = true, - }) - end -end - -crops.die = function(pos) - crops.particles(pos, 3) - local node = minetest.get_node(pos) - local plant = find_plant(node) - plant.properties.die(pos) - minetest.sound_play("crops_flies", {pos=pos, gain=0.8}) -end - -if crops.settings.hydration then - dofile(modpath .. "/tools.lua") -end - --- crop nodes, crafts, craftitems -dofile(modpath .. "/melon.lua") -dofile(modpath .. "/pumpkin.lua") -dofile(modpath .. "/corn.lua") -dofile(modpath .. "/tomato.lua") -dofile(modpath .. "/potato.lua") -dofile(modpath .. "/polebean.lua") - -local nodenames = {} -for i = 1,table.getn(crops.plants) do - table.insert(nodenames, crops.plants[i].name) -end - --- water handling code -if crops.settings.hydration then - minetest.register_abm({ - nodenames = nodenames, - interval = crops.settings.damage_interval, - chance = crops.settings.damage_chance, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - local water = meta:get_int("crops_water") - local damage = meta:get_int("crops_damage") - - -- get plant specific data - local plant = find_plant(node) - if plant == nil then - return - end - - -- increase water for nearby water sources - local f = minetest.find_node_near(pos, 1, {"default:water_source", "default:water_flowing"}) - if not f == nil then - water = math.min(100, water + 2) - else - f = minetest.find_node_near(pos, 2, {"default:water_source", "default:water_flowing"}) - if not f == nil then - water = math.min(100, water + 1) - end - end - - if minetest.get_node_light(pos, nil) < plant.properties.night then - -- compensate for light: at night give some water back to the plant - water = math.min(100, water + 1) - else - -- dry out the plant - water = math.max(1, water - plant.properties.wateruse) - end - - meta:set_int("crops_water", water) - - -- for convenience, copy water attribute to top half - if not plant.properties.doublesize == nil and plant.properties.doublesize then - local above = { x = pos.x, y = pos.y + 1, z = pos.z} - local abovemeta = minetest.get_meta(above) - abovemeta:set_int("crops_water", water) - end - - if water <= plant.properties.wither_damage then - crops.particles(pos, 0) - damage = damage + math.random(crops.settings.damage_tick_min, crops.settings.damage_tick_max) - elseif water <= plant.properties.wither then - crops.particles(pos, 0) - return - elseif water >= plant.properties.soak_damage then - crops.particles(pos, 1) - damage = damage + math.random(crops.settings.damage_tick_min, crops.settings.damage_tick_max) - elseif water >= plant.properties.soak then - crops.particles(pos, 1) - return - end - meta:set_int("crops_damage", math.min(crops.settings.damage_max, damage)) - - -- is it dead? - if damage >= 100 then - crops.die(pos) - end - end - }) -end - --- cooking recipes that mix craftitems -dofile(modpath .. "/cooking.lua") -dofile(modpath .. "/mapgen.lua") - -minetest.log("action", "[crops] "..S("Loaded!")) diff --git a/mods/ITEMS/crops/intllib.lua b/mods/ITEMS/crops/intllib.lua deleted file mode 100755 index c7af2c2..0000000 --- a/mods/ITEMS/crops/intllib.lua +++ /dev/null @@ -1,44 +0,0 @@ --- Fallback functions for when `intllib` is not installed. --- Code released under Unlicense . - --- Get the latest version of this file at: --- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua - -local function format(str, ...) - local args = { ... } - local function repl(escape, open, num, close) - if escape == "" then - local replacement = tostring(args[tonumber(num)]) - if open == "" then - replacement = replacement..close - end - return replacement - else - return "@"..open..num..close - end - end - return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) -end - -local gettext, ngettext -if minetest.get_modpath("intllib") then - if intllib.make_gettext_pair then - -- New method using gettext. - gettext, ngettext = intllib.make_gettext_pair() - else - -- Old method using text files. - gettext = intllib.Getter() - end -end - --- Fill in missing functions. - -gettext = gettext or function(msgid, ...) - return format(msgid, ...) -end - -ngettext = ngettext or function(msgid, msgid_plural, n, ...) - return format(n==1 and msgid or msgid_plural, ...) -end - -return gettext, ngettext diff --git a/mods/ITEMS/crops/locale/de.po b/mods/ITEMS/crops/locale/de.po deleted file mode 100755 index 8c7d45e..0000000 --- a/mods/ITEMS/crops/locale/de.po +++ /dev/null @@ -1,152 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-20 17:17-0300\n" -"PO-Revision-Date: 2017-02-20 16:54-0300\n" -"Last-Translator: LNJ2\n" -"Language-Team: German\n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: melon.lua -msgid "Melon seed" -msgstr "Melonensamen" - -#: melon.lua -msgid "Melon plant" -msgstr "Melonenpflanze" - -#: melon.lua -msgid "Melon slice" -msgstr "Melonenscheibe" - -#: melon.lua -msgid "Melon" -msgstr "Melone" - -#: tomato.lua -msgid "Tomato seed" -msgstr "Tomatensamen" - -#: tomato.lua -msgid "Tomato plant" -msgstr "Tomatenpflanze" - -#: tomato.lua -msgid "Tomato" -msgstr "Tomate" - -#: polebean.lua -msgid "Green Bean" -msgstr "Grne Bohne" - -#: polebean.lua -msgid "Beanpoles" -msgstr "Bohnenstangen" - -#: polebean.lua -msgid "Green bean seed" -msgstr "Samen einer Grnen Bohne" - -#: polebean.lua -msgid "Green Bean plant" -msgstr "Grne Bohnenpflanze" - -#: tools.lua -msgid "Watering Can" -msgstr "Giekanne" - -#: tools.lua -msgid "Hydrometer" -msgstr "Hydrometer" - -#: pumpkin.lua -msgid "Pumpkin seed" -msgstr "Krbissamen" - -#: pumpkin.lua -msgid "Pumpkin plant" -msgstr "Krbispflanze" - -#: pumpkin.lua -msgid "Roasted pumpkin" -msgstr "Gersteter Krbis" - -#: pumpkin.lua -msgid "Pumpkin" -msgstr "Krbis" - -#: init.lua -msgid "Defaulting to \"normal\" difficulty settings" -msgstr "Benutze standard Schwierigkeitsgrad \"normal\"" - -#: init.lua -msgid "Hydration and dehydration mechanics are enabled." -msgstr "Hydrierungs- und Dehydrierungsmechaniken sind aktiviert." - -#: init.lua -#, fuzzy -msgid "Unable to find plant \"@1\" in crops table" -msgstr "Konnte Pflanze \"@1\" nicht in der Tabelle finden" - -#: init.lua -msgid "Loaded!" -msgstr "" - -#: potato.lua -msgid "Potato eyes" -msgstr "Kartoffelaugen" - -#: potato.lua -msgid "Potato plant" -msgstr "Kartoffelpflanze" - -#: potato.lua -msgid "Potato" -msgstr "Kartoffel" - -#: potato.lua -msgid "Soil with potatoes" -msgstr "Acker mit Kartoffeln" - -#: cooking.lua -msgid "Unbaked clay bowl" -msgstr "Ungebackene Lehmschale" - -#: cooking.lua -msgid "Clay bowl" -msgstr "Lehmschale" - -#: cooking.lua -msgid "Bowl of vegetable stew" -msgstr "Schale voll Gemseeintopf" - -#: cooking.lua -msgid "Bowl of uncooked vegetable stew" -msgstr "Schale voll mit roher Gemseeintopf" - -#: corn.lua -msgid "Corn" -msgstr "Mais" - -#: corn.lua -msgid "Corn Cob" -msgstr "Maiskolben" - -#: corn.lua -msgid "Corn on the Cob" -msgstr "Gebackener Maiskolben" - -#: corn.lua -msgid "Corn plant" -msgstr "Maispflanze" diff --git a/mods/ITEMS/crops/locale/es.po b/mods/ITEMS/crops/locale/es.po deleted file mode 100755 index 2673102..0000000 --- a/mods/ITEMS/crops/locale/es.po +++ /dev/null @@ -1,151 +0,0 @@ -# Spanish translations for PACKAGE package -# Traducciones al español para el paquete PACKAGE. -# Copyright (C) 2017 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# Diego Martínez , 2017. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-20 17:17-0300\n" -"PO-Revision-Date: 2017-02-20 16:54-0300\n" -"Last-Translator: Diego Martínez \n" -"Language-Team: Spanish\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: melon.lua -msgid "Melon seed" -msgstr "Semilla de sandía" - -#: melon.lua -msgid "Melon plant" -msgstr "Planta de sandía" - -#: melon.lua -msgid "Melon slice" -msgstr "Trozo de sandía" - -#: melon.lua -msgid "Melon" -msgstr "Sandía" - -#: tomato.lua -msgid "Tomato seed" -msgstr "Semilla de tomate" - -#: tomato.lua -msgid "Tomato plant" -msgstr "Planta de tomate" - -#: tomato.lua -msgid "Tomato" -msgstr "Tomate" - -#: polebean.lua -msgid "Green Bean" -msgstr "Frijol verde" - -#: polebean.lua -msgid "Beanpoles" -msgstr "Poste para frijoles" - -#: polebean.lua -msgid "Green bean seed" -msgstr "Semilla de frijoles verdes" - -#: polebean.lua -msgid "Green Bean plant" -msgstr "Planta de frijoles verdes" - -#: tools.lua -msgid "Watering Can" -msgstr "Regadera" - -#: tools.lua -msgid "Hydrometer" -msgstr "Hidrómetro" - -#: pumpkin.lua -msgid "Pumpkin seed" -msgstr "Semillas de calabaza" - -#: pumpkin.lua -msgid "Pumpkin plant" -msgstr "Planta de calabaza" - -#: pumpkin.lua -msgid "Roasted pumpkin" -msgstr "Calabaza asada" - -#: pumpkin.lua -msgid "Pumpkin" -msgstr "Calabaza" - -#: init.lua -msgid "Defaulting to \"normal\" difficulty settings" -msgstr "Se usará la dificultad \"normal\" por defecto" - -#: init.lua -msgid "Hydration and dehydration mechanics are enabled." -msgstr "Mecánica de hidratación y deshidratación activada." - -#: init.lua -msgid "Unable to find plant \"@1\" in crops table" -msgstr "No se pudo encontrar la planta \"@1\" en la tabla de cosechas" - -#: init.lua -msgid "Loaded!" -msgstr "¡Cargado!" - -#: potato.lua -msgid "Potato eyes" -msgstr "Ojos de patata" - -#: potato.lua -msgid "Potato plant" -msgstr "Planta de patata" - -#: potato.lua -msgid "Potato" -msgstr "Patata" - -#: potato.lua -msgid "Soil with potatoes" -msgstr "Suelo con patatas" - -#: cooking.lua -msgid "Unbaked clay bowl" -msgstr "Tazón de arcilla sin cocer" - -#: cooking.lua -msgid "Clay bowl" -msgstr "Tazón de arcilla" - -#: cooking.lua -msgid "Bowl of vegetable stew" -msgstr "Tazón de sopa de vegetales" - -#: cooking.lua -msgid "Bowl of uncooked vegetable stew" -msgstr "Tazón de sopa de vegetales sin cocer" - -#: corn.lua -msgid "Corn" -msgstr "Maíz" - -#: corn.lua -msgid "Corn Cob" -msgstr "Elote" - -#: corn.lua -msgid "Corn on the Cob" -msgstr "Maíz en mazorca" - -#: corn.lua -msgid "Corn plant" -msgstr "Planta de maíz" diff --git a/mods/ITEMS/crops/locale/fr.po b/mods/ITEMS/crops/locale/fr.po deleted file mode 100755 index b3b03a6..0000000 --- a/mods/ITEMS/crops/locale/fr.po +++ /dev/null @@ -1,150 +0,0 @@ -# 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: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-20 17:17-0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: xisd\n" -"Language-Team: French\n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: melon.lua -msgid "Melon seed" -msgstr "Graine de Pastèque" - -#: melon.lua -msgid "Melon plant" -msgstr "Pied de Pastèque" - -#: melon.lua -msgid "Melon slice" -msgstr "Tranche de Pastèque" - -#: melon.lua -msgid "Melon" -msgstr "Pastèque" - -#: tomato.lua -msgid "Tomato seed" -msgstr "Graines de tomate" - -#: tomato.lua -msgid "Tomato plant" -msgstr "Pied de tomate" - -#: tomato.lua -msgid "Tomato" -msgstr "Tomate" - -#: polebean.lua -msgid "Green Bean" -msgstr "Haricot vert" - -#: polebean.lua -msgid "Beanpoles" -msgstr "Tuteur pour haricots" - -#: polebean.lua -msgid "Green bean seed" -msgstr "Graine de haricot vert" - -#: polebean.lua -msgid "Green Bean plant" -msgstr "Plant de haricot vert" - -#: tools.lua -msgid "Watering Can" -msgstr "Arrosoir" - -#: tools.lua -msgid "Hydrometer" -msgstr "Hydromètre" - -#: pumpkin.lua -msgid "Pumpkin seed" -msgstr "Graines de citrouille" - -#: pumpkin.lua -msgid "Pumpkin plant" -msgstr "Plant de citrouille" - -#: pumpkin.lua -msgid "Roasted pumpkin" -msgstr "Citrouille grillée" - -#: pumpkin.lua -msgid "Pumpkin" -msgstr "Citrouille" - -#: init.lua -msgid "Defaulting to \"normal\" difficulty settings" -msgstr "Réglage par default : \"normal\"" - -#: init.lua -msgid "Hydration and dehydration mechanics are enabled." -msgstr "Les mécaniques d'hydratation et déshydratation sont activées." - -#: init.lua -msgid "Unable to find plant \"@1\" in crops table" -msgstr "Impossible de trouver la plante \"@1\" dans le tableau crops" - -#: init.lua -msgid "Loaded!" -msgstr "Chargé !" - -#: potato.lua -msgid "Potato eyes" -msgstr "Yeux de pomme de terre" - -#: potato.lua -msgid "Potato plant" -msgstr "Plant de pomme de terre" - -#: potato.lua -msgid "Potato" -msgstr "Pomme de terre" - -#: potato.lua -msgid "Soil with potatoes" -msgstr "Terre labourée avec pommes de terres" - -#: cooking.lua -msgid "Unbaked clay bowl" -msgstr "Bol en argile crue" - -#: cooking.lua -msgid "Clay bowl" -msgstr "Bol en terre cuite" - -#: cooking.lua -msgid "Bowl of vegetable stew" -msgstr "Bol de soupe de légumes" - -#: cooking.lua -msgid "Bowl of uncooked vegetable stew" -msgstr "Bol de soupe de légumes non-cuite" - -#: corn.lua -msgid "Corn" -msgstr "Mais" - -#: corn.lua -msgid "Corn Cob" -msgstr "Epis de mais" - -#: corn.lua -msgid "Corn on the Cob" -msgstr "Epis de mais grillé" - -#: corn.lua -msgid "Corn plant" -msgstr "Plant de Mais" diff --git a/mods/ITEMS/crops/locale/template.pot b/mods/ITEMS/crops/locale/template.pot deleted file mode 100755 index 5bb16bd..0000000 --- a/mods/ITEMS/crops/locale/template.pot +++ /dev/null @@ -1,150 +0,0 @@ -# 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. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-20 17:17-0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: melon.lua -msgid "Melon seed" -msgstr "" - -#: melon.lua -msgid "Melon plant" -msgstr "" - -#: melon.lua -msgid "Melon slice" -msgstr "" - -#: melon.lua -msgid "Melon" -msgstr "" - -#: tomato.lua -msgid "Tomato seed" -msgstr "" - -#: tomato.lua -msgid "Tomato plant" -msgstr "" - -#: tomato.lua -msgid "Tomato" -msgstr "" - -#: polebean.lua -msgid "Green Bean" -msgstr "" - -#: polebean.lua -msgid "Beanpoles" -msgstr "" - -#: polebean.lua -msgid "Green bean seed" -msgstr "" - -#: polebean.lua -msgid "Green Bean plant" -msgstr "" - -#: tools.lua -msgid "Watering Can" -msgstr "" - -#: tools.lua -msgid "Hydrometer" -msgstr "" - -#: pumpkin.lua -msgid "Pumpkin seed" -msgstr "" - -#: pumpkin.lua -msgid "Pumpkin plant" -msgstr "" - -#: pumpkin.lua -msgid "Roasted pumpkin" -msgstr "" - -#: pumpkin.lua -msgid "Pumpkin" -msgstr "" - -#: init.lua -msgid "Defaulting to \"normal\" difficulty settings" -msgstr "" - -#: init.lua -msgid "Hydration and dehydration mechanics are enabled." -msgstr "" - -#: init.lua -msgid "Unable to find plant \"@1\" in crops table" -msgstr "" - -#: init.lua -msgid "Loaded!" -msgstr "" - -#: potato.lua -msgid "Potato eyes" -msgstr "" - -#: potato.lua -msgid "Potato plant" -msgstr "" - -#: potato.lua -msgid "Potato" -msgstr "" - -#: potato.lua -msgid "Soil with potatoes" -msgstr "" - -#: cooking.lua -msgid "Unbaked clay bowl" -msgstr "" - -#: cooking.lua -msgid "Clay bowl" -msgstr "" - -#: cooking.lua -msgid "Bowl of vegetable stew" -msgstr "" - -#: cooking.lua -msgid "Bowl of uncooked vegetable stew" -msgstr "" - -#: corn.lua -msgid "Corn" -msgstr "" - -#: corn.lua -msgid "Corn Cob" -msgstr "" - -#: corn.lua -msgid "Corn on the Cob" -msgstr "" - -#: corn.lua -msgid "Corn plant" -msgstr "" diff --git a/mods/ITEMS/crops/mapgen.lua b/mods/ITEMS/crops/mapgen.lua deleted file mode 100755 index 961d032..0000000 --- a/mods/ITEMS/crops/mapgen.lua +++ /dev/null @@ -1,48 +0,0 @@ - -local mg_params = minetest.get_mapgen_params() -if mg_params.mgname ~= "v6" and mg_params.mgname ~= "singlenode" then - minetest.register_decoration({ - deco_type = "simple", - place_on = { "default:dirt_with_grass" }, - sidelen = 16, - noise_params = { - offset = -0.02, - scale = 0.02, - spread = {x = 200, y = 200, z = 200}, - seed = 90459126, - octaves = 3, - persist = 0.6 - }, - biomes = {"grassland", "deciduous_forest", "coniferous_forest"}, - y_min = 1, - y_max = 31000, - decoration = "crops:melon_plant_4" - }) - minetest.register_decoration({ - deco_type = "simple", - place_on = { "default:dirt_with_grass" }, - sidelen = 16, - noise_params = { - offset = -0.02, - scale = 0.02, - spread = {x = 200, y = 200, z = 200}, - seed = 26294592, - octaves = 3, - persist = 0.6 - }, - biomes = {"deciduous_forest", "coniferous_forest", "tundra"}, - y_min = 1, - y_max = 31000, - decoration = "crops:pumpkin_plant_4" - }) -end - --- drop potatoes when digging in dirt -minetest.override_item("default:dirt_with_grass", { - drop = { - items = { - { items = {'default:dirt'}}, - { items = {'crops:potato'}, rarity = 500 } - } - } -}) diff --git a/mods/ITEMS/crops/melon.lua b/mods/ITEMS/crops/melon.lua deleted file mode 100755 index 50ba4ac..0000000 --- a/mods/ITEMS/crops/melon.lua +++ /dev/null @@ -1,249 +0,0 @@ - ---[[ - -Copyright (C) 2015 - Auke Kok - -"crops" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - --- Intllib -local S = crops.intllib - -local faces = { - [1] = { x = -1, z = 0, r = 3, o = 1, m = 14 }, - [2] = { x = 1, z = 0, r = 1, o = 3, m = 16 }, - [3] = { x = 0, z = -1, r = 2, o = 0, m = 5 }, - [4] = { x = 0, z = 1, r = 0, o = 2, m = 11 } -} - -minetest.register_node("crops:melon_seed", { - description = S("Melon seed"), - inventory_image = "crops_melon_seed.png", - wield_image = "crops_melon_seed.png", - tiles = { "crops_melon_plant_1.png" }, - drawtype = "plantlike", - waving = 1, - sunlight_propagates = false, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - node_placement_prediction = "crops:melon_plant_1", - groups = { snappy=3,flammable=3,flora=1,attached_node=1 }, - - on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) - if minetest.get_item_group(under.name, "soil") <= 1 then - return - end - crops.plant(pointed_thing.above, {name="crops:melon_plant_1"}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end -}) - -for stage = 1, 6 do -minetest.register_node("crops:melon_plant_" .. stage , { - description = S("Melon plant"), - tiles = { "crops_melon_plant_" .. stage .. ".png" }, - drawtype = "plantlike", - waving = 1, - sunlight_propagates = true, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - groups = { snappy=3, flammable=3, flora=1, attached_node=1, not_in_creative_inventory=1 }, - drop = "crops:melon_seed", - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.5 + (((math.min(stage, 4)) + 1) / 5), 0.5} - } -}) -end - -minetest.register_node("crops:melon_plant_5_attached", { - visual = "mesh", - mesh = "crops_plant_extra_face.obj", - description = S("Melon plant"), - tiles = { "crops_melon_stem.png", "crops_melon_plant_4.png" }, - drawtype = "mesh", - paramtype2 = "facedir", - sunlight_propagates = true, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - groups = { snappy=3, flammable=3, flora=1, attached_node=1, not_in_creative_inventory=1 }, - drop = "crops:melon_seed", - sounds = default.node_sound_leaves_defaults(), -}) - - -minetest.register_craftitem("crops:melon_slice", { - description = S("Melon slice"), - inventory_image = "crops_melon_slice.png", - on_use = minetest.item_eat(1) -}) - -minetest.register_craft({ - type = "shapeless", - output = "crops:melon_seed", - recipe = { "crops:melon_slice" } -}) - --- --- the melon "block" --- -minetest.register_node("crops:melon", { - description = S("Melon"), - tiles = { - "crops_melon_top.png", - "crops_melon_bottom.png", - "crops_melon.png", - }, - sunlight_propagates = false, - use_texture_alpha = false, - walkable = true, - groups = { snappy=3, flammable=3, oddly_breakable_by_hand=2 }, - paramtype2 = "facedir", - drop = {}, - sounds = default.node_sound_wood_defaults({ - dig = { name = "default_dig_oddly_breakable_by_hand" }, - dug = { name = "default_dig_choppy" } - }), - on_dig = function(pos, node, digger) - for face = 1, 4 do - local s = { x = pos.x + faces[face].x, y = pos.y, z = pos.z + faces[face].z } - local n = minetest.get_node(s) - if n.name == "crops:melon_plant_5_attached" then - -- make sure it was actually attached to this stem - if n.param2 == faces[face].o then - minetest.swap_node(s, { name = "crops:melon_plant_4" }) - end - end - end - local meta = minetest.get_meta(pos) - local damage = meta:get_int("crops_damage") - local drops = {} - -- 0 dmg - 3-5 - -- 50 dmg - 2-3 - -- 100 dmg - 1-1 - for i = 1,math.random(3 - (2 * (damage / 100)), 5 - (4 * (damage / 100))) do - table.insert(drops, ('crops:melon_slice')) - end - minetest.handle_node_drops(pos, drops, digger) - minetest.remove_node(pos) - end -}) - --- --- grows a plant to mature size --- -minetest.register_abm({ - nodenames = { "crops:melon_plant_1", "crops:melon_plant_2", "crops:melon_plant_3","crops:melon_plant_4" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - local n = string.gsub(node.name, "4", "5") - n = string.gsub(n, "3", "4") - n = string.gsub(n, "2", "3") - n = string.gsub(n, "1", "2") - minetest.swap_node(pos, { name = n }) - end -}) - --- --- grows a melon --- -minetest.register_abm({ - nodenames = { "crops:melon_plant_5" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - for face = 1, 4 do - local t = { x = pos.x + faces[face].x, y = pos.y, z = pos.z + faces[face].z } - if minetest.get_node(t).name == "crops:melon" then - return - end - end - local r = math.random(1, 4) - local t = { x = pos.x + faces[r].x, y = pos.y, z = pos.z + faces[r].z } - local n = minetest.get_node(t) - if n.name == "ignore" then - return - end - - if minetest.registered_nodes[minetest.get_node({ x = t.x, y = t.y - 1, z = t.z }).name].walkable == false then - return - end - - if minetest.registered_nodes[n.name].drawtype == "plantlike" or - minetest.registered_nodes[n.name].groups.flora == 1 or - n.name == "air" then - minetest.swap_node(pos, {name = "crops:melon_plant_5_attached", param2 = faces[r].r}) - minetest.set_node(t, {name = "crops:melon", param2 = faces[r].m}) - local meta = minetest.get_meta(pos) - local damage = meta:get_int("crops_damage") - local water = meta:get_int("crops_water") - -- growing a melon costs 25 water! - meta:set_int("crops_water", math.max(0, water - 25)) - meta = minetest.get_meta(t) - -- reflect plants' damage in the melon yield - meta:set_int("crops_damage", damage) - end - end -}) - --- --- return a melon to a normal one if there is no melon attached, so it can --- grow a new melon again --- -minetest.register_abm({ - nodenames = { "crops:melon_plant_5_attached" }, - interval = crops.settings.interval, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - for face = 1, 4 do - local t = { x = pos.x + faces[face].x, y = pos.y, z = pos.z + faces[face].z } - if minetest.get_node(t).name == "crops:melon" then - return - end - end - minetest.swap_node(pos, {name = "crops:melon_plant_4" }) - end -}) - -crops.melon_die = function(pos) - minetest.set_node(pos, { name = "crops:melon_plant_6" }) -end - -local properties = { - die = crops.melon_die, - waterstart = 20, - wateruse = 1, - night = 5, - soak = 80, - soak_damage = 90, - wither = 20, - wither_damage = 10, -} - -crops.register({ name = "crops:melon_plant_1", properties = properties }) -crops.register({ name = "crops:melon_plant_2", properties = properties }) -crops.register({ name = "crops:melon_plant_3", properties = properties }) -crops.register({ name = "crops:melon_plant_4", properties = properties }) -crops.register({ name = "crops:melon_plant_5", properties = properties }) -crops.register({ name = "crops:melon_plant_5_attached", properties = properties }) diff --git a/mods/ITEMS/crops/mod.conf b/mods/ITEMS/crops/mod.conf deleted file mode 100755 index 7f7691a..0000000 --- a/mods/ITEMS/crops/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = crops diff --git a/mods/ITEMS/crops/models/crops_plant_extra_face.obj b/mods/ITEMS/crops/models/crops_plant_extra_face.obj deleted file mode 100755 index fd22dd7..0000000 --- a/mods/ITEMS/crops/models/crops_plant_extra_face.obj +++ /dev/null @@ -1,49 +0,0 @@ -# Blender v2.60 (sub 0) OBJ File: 'p1.blend' -# www.blender.org -mtllib crops_plant_extra_face.mtl -o Mesh_Stem_Stem -v -0.000000 0.500000 0.500000 -v 0.000000 -0.500000 0.500000 -v 0.000000 -0.500000 -0.500000 -v -0.000000 0.500000 -0.500000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 1.000000 0.000000 -0.000000 -g Mesh_Stem_Stem_Material.002 -usemtl Material.002 -s off -f 1/1/1 2/2/1 3/3/1 4/4/1 -o Mesh_Plant_Plant -v 0.359670 -0.500000 0.347329 -v 0.359670 0.500000 0.347329 -v -0.359670 0.500000 -0.347329 -v -0.359670 -0.500000 -0.347329 -v -0.347329 -0.500000 0.359670 -v -0.347329 0.500000 0.359670 -v 0.347329 0.500000 -0.359670 -v 0.347329 -0.500000 -0.359670 -v 0.359670 -0.500000 0.347329 -v -0.359670 -0.500000 -0.347329 -v -0.359670 0.500000 -0.347329 -v 0.359670 0.500000 0.347329 -v -0.347329 -0.500000 0.359670 -v 0.347329 -0.500000 -0.359670 -v 0.347329 0.500000 -0.359670 -v -0.347329 0.500000 0.359670 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn -0.694658 0.000000 0.719340 -vn -0.719340 -0.000000 -0.694658 -vn 0.694658 -0.000000 -0.719340 -vn 0.719340 0.000000 0.694658 -g Mesh_Plant_Plant_Material.001 -usemtl Material.001 -s off -f 5/5/2 6/6/2 7/7/2 8/8/2 -f 9/5/3 10/6/3 11/7/3 12/8/3 -f 13/5/4 14/8/4 15/7/4 16/6/4 -f 17/5/5 18/8/5 19/7/5 20/6/5 diff --git a/mods/ITEMS/crops/polebean.lua b/mods/ITEMS/crops/polebean.lua deleted file mode 100755 index 9e661fc..0000000 --- a/mods/ITEMS/crops/polebean.lua +++ /dev/null @@ -1,309 +0,0 @@ - ---[[ - -Copyright (C) 2015 - Auke Kok - -"crops" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - --- Intllib -local S = crops.intllib - -minetest.register_craft({ - output = "crops:beanpoles", - recipe = { - {'', '', ''}, - {'default:stick', '', 'default:stick'}, - {'default:stick', '', 'default:stick'}, - } -}) - -minetest.register_craftitem("crops:green_bean", { - description = S("Green Bean"), - inventory_image = "crops_green_bean.png", - on_use = minetest.item_eat(1) -}) - -minetest.register_craft({ - type = "shapeless", - output = "crops:green_bean_seed", - recipe = { "crops:green_bean" } -}) - -local function crops_beanpole_on_dig(pos, node, digger) - local bottom - local bottom_n - local top - local top_n - local drops = {} - - if node.name == "crops:beanpole_base" or - node.name == "crops:beanpole_plant_base_1" or - node.name == "crops:beanpole_plant_base_2" or - node.name == "crops:beanpole_plant_base_3" or --grown tall enough for top section - node.name == "crops:beanpole_plant_base_4" or --flowering - node.name == "crops:beanpole_plant_base_5" or --ripe - node.name == "crops:beanpole_plant_base_6" --harvested - then - bottom = pos - bottom_n = node - top = { x = pos.x, y = pos.y + 1, z = pos.z } - top_n = minetest.get_node(top) - elseif node.name == "crops:beanpole_top" or - node.name == "crops:beanpole_plant_top_1" or - node.name == "crops:beanpole_plant_top_2" or --flowering - node.name == "crops:beanpole_plant_top_3" or --ripe - node.name == "crops:beanpole_plant_top_4" --harvested - then - top = pos - top_n = node - bottom = { x = pos.x, y = pos.y - 1, z = pos.z } - bottom_n = minetest.get_node(bottom) - else - -- ouch, this shouldn't happen - print("beanpole on_dig falsely attached to: " .. pos.x .. "," .. pos.y .. "," .. pos.z) - return - end - - if bottom_n.name == "crops:beanpole_base" and top_n.name == "crops:beanpole_top" then - -- bare beanpole - table.insert(drops, "crops:beanpoles") - minetest.remove_node(bottom) - minetest.remove_node(top) - elseif ( - bottom_n.name == "crops:beanpole_plant_base_1" or - bottom_n.name == "crops:beanpole_plant_base_2" or - bottom_n.name == "crops:beanpole_plant_base_3" or - bottom_n.name == "crops:beanpole_plant_base_4" - ) and ( - top_n.name == "crops:beanpole_top" or - top_n.name == "crops:beanpole_plant_top_1" or - top_n.name == "crops:beanpole_plant_top_2" - ) then - -- non-ripe - for i = 1,4 do - table.insert(drops, "default:stick") - end - minetest.set_node(bottom, { name = "crops:beanpole_base"}) - minetest.set_node(top, { name = "crops:beanpole_top"}) - elseif bottom_n.name == "crops:beanpole_plant_base_5" and top_n.name == "crops:beanpole_plant_top_3" then - -- ripe beanpole - local meta = minetest.get_meta(bottom) - local damage = meta:get_int("crops_damage") - -- 0 - 3-7 - -- 50 - 2-4 - -- 100 - 1-1 - for i = 1,math.random(3 - (2 * (damage / 100)),7 - (6 * (damage / 100))) do - table.insert(drops, "crops:green_bean") - end - crops.die(bottom) - elseif bottom_n.name == "crops:beanpole_plant_base_6" and top_n.name == "crops:beanpole_plant_top_4" then - -- harvested beans - for i = 1,math.random(3,4) do - table.insert(drops, "default:stick") - end - minetest.remove_node(bottom) - minetest.remove_node(top) - else - -- ouch, this shouldn't happen - print("beanpole on_dig can't handle blocks at to: " .. - bottom.x .. "," .. bottom.y .. "," .. bottom.z .. - " and " .. top.x .. "," .. top.y .. "," .. top.z) - print("removing a " .. node.name .. " at " .. - pos.x .. "," .. pos.y .. "," .. pos.z) - minetest.remove_node(pos) - return - end - - minetest.handle_node_drops(pos, drops, digger) -end - -minetest.register_node("crops:beanpole_base", { - description = "", - drawtype = "plantlike", - tiles = { "crops_beanpole_base.png" }, - use_texture_alpha = true, - walkable = true, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - on_dig = crops_beanpole_on_dig, -}) - -minetest.register_node("crops:beanpole_top", { - description = "", - drawtype = "plantlike", - tiles = { "crops_beanpole_top.png" }, - use_texture_alpha = true, - walkable = true, - sunlight_propagates = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - on_dig = crops_beanpole_on_dig, -}) - -minetest.register_node("crops:beanpoles", { - description = S("Beanpoles"), - inventory_image = "crops_beanpole_top.png", - wield_image = "crops_beanpole_top.png", - tiles = { "crops_beanpole_base.png" }, - drawtype = "plantlike", - sunlight_propagates = true, - use_texture_alpha = true, - paramtype = "light", - groups = { snappy=3,flammable=3,flora=1,attached_node=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - node_placement_prediction = "crops:beanpole_base", - - on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) - if minetest.get_item_group(under.name, "soil") <= 1 then - return - end - local top = { x = pointed_thing.above.x, y = pointed_thing.above.y + 1, z = pointed_thing.above.z } - if not minetest.get_node(top).name == "air" then - return - end - minetest.set_node(pointed_thing.above, {name="crops:beanpole_base"}) - minetest.set_node(top, {name="crops:beanpole_top"}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end -}) - -minetest.register_craftitem("crops:green_bean_seed", { - description = S("Green bean seed"), - inventory_image = "crops_green_bean_seed.png", - wield_image = "crops_green_bean_seed.png", - node_placement_prediction = "", -- disabled, prediction assumes pointed_think.above! - - on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) - if under.name == "crops:beanpole_base" then - crops.plant(pointed_thing.under, {name="crops:beanpole_plant_base_1"}) - local above = { x = pointed_thing.under.x, y = pointed_thing.under.y + 1, z = pointed_thing.under.z} - local meta = minetest.get_meta(above) - meta:set_int("crops_top_half", 1) - elseif under.name == "crops:beanpole_top" then - local below = { x = pointed_thing.under.x, y = pointed_thing.under.y - 1, z = pointed_thing.under.z } - if minetest.get_node(below).name == "crops:beanpole_base" then - crops.plant(below, {name="crops:beanpole_plant_base_1"}) - local meta = minetest.get_meta(pointed_thing.under) - meta:set_int("crops_top_half", 1) - else - return - end - else - return - end - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end -}) - -for stage = 1,6 do -minetest.register_node("crops:beanpole_plant_base_" .. stage, { - description = S("Green Bean plant"), - tiles = { "crops_beanpole_plant_base_" .. stage .. ".png" }, - drawtype = "plantlike", - sunlight_propagates = true, - use_texture_alpha = true, - paramtype = "light", - walkable = false, - groups = { snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - on_dig = crops_beanpole_on_dig -}) -end - -for stage = 1,4 do -minetest.register_node("crops:beanpole_plant_top_" .. stage, { - description = S("Green Bean plant"), - tiles = { "crops_beanpole_plant_top_" .. stage .. ".png" }, - drawtype = "plantlike", - sunlight_propagates = true, - use_texture_alpha = true, - paramtype = "light", - walkable = true, - groups = { snappy=3,flammable=3,flora=1,not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - on_dig = crops_beanpole_on_dig -}) -end - -minetest.register_abm({ - nodenames = { - "crops:beanpole_plant_base_1", - "crops:beanpole_plant_base_2", - "crops:beanpole_plant_base_3", - "crops:beanpole_plant_base_4" - }, - interval = crops.settings.interval, - chance = crops.settings.chance, - neighbors = { "group:soil" }, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - if node.name == "crops:beanpole_plant_base_1" then - minetest.swap_node(pos, { name = "crops:beanpole_plant_base_2"}) - elseif node.name == "crops:beanpole_plant_base_2" then - minetest.swap_node(pos, { name = "crops:beanpole_plant_base_3"}) - elseif node.name == "crops:beanpole_plant_base_3" then - local apos = {x = pos.x, y = pos.y + 1, z = pos.z} - local above = minetest.get_node(apos) - if above.name == "crops:beanpole_top" then - minetest.set_node(apos, { name = "crops:beanpole_plant_top_1" }) - local meta = minetest.get_meta(apos) - meta:set_int("crops_top_half", 1) - elseif above.name == "crops:beanpole_plant_top_1" then - minetest.swap_node(pos, { name = "crops:beanpole_plant_base_4" }) - minetest.swap_node(apos, { name = "crops:beanpole_plant_top_2" }) - end - elseif node.name == "crops:beanpole_plant_base_4" then - local apos = {x = pos.x, y = pos.y + 1, z = pos.z} - minetest.swap_node(pos, { name = "crops:beanpole_plant_base_5" }) - minetest.swap_node(apos, { name = "crops:beanpole_plant_top_3" }) - end - end -}) - -crops.beanpole_die = function(pos) - minetest.set_node(pos, { name = "crops:beanpole_plant_base_6" }) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - minetest.set_node(above, { name = "crops:beanpole_plant_top_4" }) -end - -local properties = { - die = crops.beanpole_die, - waterstart = 30, - wateruse = 1, - night = 5, - soak = 60, - soak_damage = 75, - wither = 25, - wither_damage = 15, - doublesize = true, -} - -crops.register({ name = "crops:beanpole_plant_base_1", properties = properties }) -crops.register({ name = "crops:beanpole_plant_base_2", properties = properties }) -crops.register({ name = "crops:beanpole_plant_base_3", properties = properties }) -crops.register({ name = "crops:beanpole_plant_base_4", properties = properties }) -crops.register({ name = "crops:beanpole_plant_base_5", properties = properties }) - diff --git a/mods/ITEMS/crops/potato.lua b/mods/ITEMS/crops/potato.lua deleted file mode 100755 index 1bd7c5b..0000000 --- a/mods/ITEMS/crops/potato.lua +++ /dev/null @@ -1,196 +0,0 @@ - ---[[ - -Copyright (C) 2015 - Auke Kok - -"crops" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - --- Intllib -local S = crops.intllib - -minetest.register_node("crops:potato_eyes", { - description = S("Potato eyes"), - inventory_image = "crops_potato_eyes.png", - wield_image = "crops_potato_eyes.png", - tiles = { "crops_potato_plant_1.png" }, - drawtype = "plantlike", - paramtype2 = "meshoptions", - waving = 1, - sunlight_propagates = false, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - node_placement_prediction = "crops:potato_plant_1", - groups = { snappy=3,flammable=3,flora=1,attached_node=1 }, - selection_box = { - type = "fixed", - fixed = {-0.45, -0.5, -0.45, 0.45, -0.4, 0.45} - }, - - on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) - if minetest.get_item_group(under.name, "soil") <= 1 then - return - end - crops.plant(pointed_thing.above, {name="crops:potato_plant_1", param2 = 3}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end -}) - -for stage = 1, 5 do -minetest.register_node("crops:potato_plant_" .. stage , { - description = S("Potato plant"), - tiles = { "crops_potato_plant_" .. stage .. ".png" }, - drawtype = "plantlike", - paramtype2 = "meshoptions", - waving = 1, - sunlight_propagates = true, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - groups = { snappy=3, flammable=3, flora=1, attached_node=1, not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.45, -0.5, -0.45, 0.45, -0.6 + (((math.min(stage, 4)) + 1) / 5), 0.45} - } -}) -end - -minetest.register_craftitem("crops:potato", { - description = S("Potato"), - inventory_image = "crops_potato.png", - on_use = minetest.item_eat(1) -}) - -minetest.register_craft({ - type = "shapeless", - output = "crops:potato_eyes", - recipe = { "crops:potato" } -}) - --- --- the potatoes "block" --- -minetest.register_node("crops:soil_with_potatoes", { - description = S("Soil with potatoes"), - tiles = { "default_dirt.png^crops_potato_soil.png", "default_dirt.png" }, - sunlight_propagates = false, - use_texture_alpha = false, - walkable = true, - groups = { snappy=3, flammable=3, oddly_breakable_by_hand=2, soil=1 }, - paramtype2 = "facedir", - drop = {max_items = 5, items = { - { items = {'crops:potato'}, rarity = 1 }, - { items = {'crops:potato'}, rarity = 1 }, - { items = {'crops:potato'}, rarity = 1 }, - { items = {'crops:potato'}, rarity = 2 }, - { items = {'crops:potato'}, rarity = 5 }, - }}, - sounds = default.node_sound_dirt_defaults(), - on_dig = function(pos, node, digger) - local drops = {} - -- damage 0 = drops 3-5 - -- damage 50 = drops 1-3 - -- damage 100 = drops 0-1 - local meta = minetest.get_meta(pos) - local damage = meta:get_int("crops_damage") - for i = 1, math.random(3 - (3 * damage / 100), 5 - (4 * (damage / 100))) do - table.insert(drops, "crops:potato") - end - minetest.handle_node_drops(pos, drops, digger) - minetest.set_node(pos, { name = "farming:soil" }) - local above = { x = pos.x, y = pos.y + 1, z = pos.z } - if minetest.get_node(above).name == "crops:potato_plant_4" then - minetest.set_node(above, { name = "air" }) - end - end -}) - --- --- grows a plant to mature size --- -minetest.register_abm({ - nodenames = { "crops:potato_plant_1", "crops:potato_plant_2", "crops:potato_plant_3" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - local below = { x = pos.x, y = pos.y - 1, z = pos.z } - if not minetest.registered_nodes[minetest.get_node(below).name].groups.soil then - return - end - local meta = minetest.get_meta(pos) - local damage = meta:get_int("crops_damage") - if damage == 100 then - crops.die(pos) - return - end - local n = string.gsub(node.name, "3", "4") - n = string.gsub(n, "2", "3") - n = string.gsub(n, "1", "2") - minetest.swap_node(pos, { name = n, param2 = 3 }) - end -}) - --- --- grows the final potatoes in the soil beneath --- -minetest.register_abm({ - nodenames = { "crops:potato_plant_4" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - local below = { x = pos.x, y = pos.y - 1, z = pos.z } - if not minetest.registered_nodes[minetest.get_node(below).name].groups.soil then - return - end - local meta = minetest.get_meta(pos) - local damage = meta:get_int("crops_damage") - minetest.set_node(below, { name = "crops:soil_with_potatoes" }) - meta = minetest.get_meta(below) - meta:set_int("crops_damage", damage) - end -}) - -crops.potato_die = function(pos) - minetest.set_node(pos, { name = "crops:potato_plant_5", param2 = 3 }) - local below = { x = pos.x, y = pos.y - 1, z = pos.z } - local node = minetest.get_node(below) - if node.name == "crops:soil_with_potatoes" then - local meta = minetest.get_meta(below) - meta:set_int("crops_damage", 100) - end -end - -local properties = { - die = crops.potato_die, - waterstart = 30, - wateruse = 1, - night = 5, - soak = 80, - soak_damage = 90, - wither = 20, - wither_damage = 10, -} - -crops.register({ name = "crops:potato_plant_1", properties = properties }) -crops.register({ name = "crops:potato_plant_2", properties = properties }) -crops.register({ name = "crops:potato_plant_3", properties = properties }) -crops.register({ name = "crops:potato_plant_4", properties = properties }) diff --git a/mods/ITEMS/crops/pumpkin.lua b/mods/ITEMS/crops/pumpkin.lua deleted file mode 100755 index 64ea77d..0000000 --- a/mods/ITEMS/crops/pumpkin.lua +++ /dev/null @@ -1,260 +0,0 @@ - ---[[ - -Copyright (C) 2015 - Auke Kok - -"crops" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - --- Intllib -local S = crops.intllib - -local faces = { - [1] = { x = -1, z = 0, r = 3, o = 1, m = 14 }, - [2] = { x = 1, z = 0, r = 1, o = 3, m = 16 }, - [3] = { x = 0, z = -1, r = 2, o = 0, m = 5 }, - [4] = { x = 0, z = 1, r = 0, o = 2, m = 11 } -} - -minetest.register_node("crops:pumpkin_seed", { - description = S("Pumpkin seed"), - inventory_image = "crops_pumpkin_seed.png", - wield_image = "crops_pumpkin_seed.png", - tiles = { "crops_pumpkin_plant_1.png" }, - drawtype = "plantlike", - waving = 1, - sunlight_propagates = false, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - node_placement_prediction = "crops:pumpkin_plant_1", - groups = { snappy=3,flammable=3,flora=1,attached_node=1 }, - - on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) - if minetest.get_item_group(under.name, "soil") <= 1 then - return - end - crops.plant(pointed_thing.above, {name="crops:pumpkin_plant_1"}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end -}) - -for stage = 1, 6 do -minetest.register_node("crops:pumpkin_plant_" .. stage , { - description = S("Pumpkin plant"), - tiles = { "crops_pumpkin_plant_" .. stage .. ".png" }, - drawtype = "plantlike", - waving = 1, - sunlight_propagates = true, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - groups = { snappy=3, flammable=3, flora=1, attached_node=1, not_in_creative_inventory=1 }, - drop = "crops:pumpkin_seed", - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.5 + (((math.min(stage, 4)) + 1) / 5), 0.5} - } -}) -end - -minetest.register_node("crops:pumpkin_plant_5_attached", { - visual = "mesh", - mesh = "crops_plant_extra_face.obj", - description = S("Pumpkin plant"), - tiles = { "crops_pumpkin_stem.png", "crops_pumpkin_plant_4.png" }, - drawtype = "mesh", - paramtype2 = "facedir", - sunlight_propagates = true, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - groups = { snappy=3, flammable=3, flora=1, attached_node=1, not_in_creative_inventory=1 }, - drop = "crops:pumpkin_seed", - sounds = default.node_sound_leaves_defaults(), -}) - - -minetest.register_craftitem("crops:roasted_pumpkin", { - description = S("Roasted pumpkin"), - inventory_image = "crops_roasted_pumpkin.png", - on_use = minetest.item_eat(2) -}) - -minetest.register_craft({ - type = "shapeless", - output = "crops:pumpkin_seed", - recipe = { "crops:pumpkin" } -}) - -minetest.register_craft({ - type = "cooking", - output = "crops:roasted_pumpkin", - recipe = "crops:pumpkin" -}) - --- --- the pumpkin "block" --- -minetest.register_node("crops:pumpkin", { - description = S("Pumpkin"), - tiles = { - "crops_pumpkin_top.png", - "crops_pumpkin_bottom.png", - "crops_pumpkin.png" - }, - sunlight_propagates = false, - use_texture_alpha = false, - walkable = true, - groups = { snappy=3, flammable=3, oddly_breakable_by_hand=2 }, - paramtype2 = "facedir", - sounds = default.node_sound_wood_defaults({ - dig = { name = "default_dig_oddly_breakable_by_hand" }, - dug = { name = "default_dig_choppy" } - }), - after_dig_node = function(pos, node) - for face = 1, 4 do - local s = { x = pos.x + faces[face].x, y = pos.y, z = pos.z + faces[face].z } - local n = minetest.get_node(s) - if n.name == "crops:pumpkin_plant_5_attached" then - -- make sure it was actually attached to this stem - if n.param2 == faces[face].o then - minetest.swap_node(s, { name = "crops:pumpkin_plant_4" }) - end - end - end - end -}) - --- --- grows a plant to mature size --- -minetest.register_abm({ - nodenames = { "crops:pumpkin_plant_1", "crops:pumpkin_plant_2", "crops:pumpkin_plant_3","crops:pumpkin_plant_4" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - local n = string.gsub(node.name, "4", "5") - n = string.gsub(n, "3", "4") - n = string.gsub(n, "2", "3") - n = string.gsub(n, "1", "2") - minetest.swap_node(pos, { name = n }) - end -}) - --- --- grows a pumpkin --- -minetest.register_abm({ - nodenames = { "crops:pumpkin_plant_5" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - for face = 1, 4 do - local t = { x = pos.x + faces[face].x, y = pos.y, z = pos.z + faces[face].z } - if minetest.get_node(t).name == "crops:pumpkin" then - return - end - end - local r = math.random(1, 4) - local t = { x = pos.x + faces[r].x, y = pos.y, z = pos.z + faces[r].z } - local n = minetest.get_node(t) - if n.name == "ignore" then - return - end - - if minetest.registered_nodes[minetest.get_node({ x = t.x, y = t.y - 1, z = t.z }).name].walkable == false then - return - end - - if minetest.registered_nodes[n.name].drawtype == "plantlike" or - minetest.registered_nodes[n.name].groups.flora == 1 or - n.name == "air" then - minetest.set_node(t, {name = "crops:pumpkin", param2 = faces[r].m}) - - local meta = minetest.get_meta(pos) - local ttl = meta:get_int("crops_pumpkin_ttl") - local damage = meta:get_int("crops_damage") - if ttl == 0 then - -- damage 0 - regrows 3-4 - -- damage 50 - drops 1-2 - -- damage 100 - drops 0-1 - ttl = math.random(3 - (3 * (damage / 100)), 4 - (3 * (damage / 100))) - end - if ttl > 1 then - minetest.swap_node(pos, {name = "crops:pumpkin_plant_5_attached", param2 = faces[r].r}) - meta:set_int("crops_pumpkin_ttl", ttl - 1) - else - crops.die(pos) - end - local water = meta:get_int("crops_water") - -- growing a pumpkin costs 25 water! - meta:set_int("crops_water", math.max(0, water - 25)) - end - end -}) - --- --- return a pumpkin to a normal one if there is no pumpkin attached, so it can --- grow a new pumpkin again --- -minetest.register_abm({ - nodenames = { "crops:pumpkin_plant_5_attached" }, - interval = crops.settings.interval, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - for face = 1, 4 do - local t = { x = pos.x + faces[face].x, y = pos.y, z = pos.z + faces[face].z } - if minetest.get_node(t).name == "crops:pumpkin" then - return - end - end - local meta = minetest.get_meta(pos) - local ttl = meta:get_int("crops_pumpkin_ttl") - if ttl > 1 then - minetest.swap_node(pos, { name = "crops:pumpkin_plant_4" }) - meta:set_int("crops_pumpkin_ttl", ttl) - else - crops.die(pos) - end - end -}) - -crops.pumpkin_die = function(pos) - minetest.set_node(pos, { name = "crops:pumpkin_plant_6" }) -end - -local properties = { - die = crops.pumpkin_die, - waterstart = 40, - wateruse = 1, - night = 5, - soak = 80, - soak_damage = 90, - wither = 10, - wither_damage = 5, -} - -crops.register({ name = "crops:pumpkin_plant_1", properties = properties }) -crops.register({ name = "crops:pumpkin_plant_2", properties = properties }) -crops.register({ name = "crops:pumpkin_plant_3", properties = properties }) -crops.register({ name = "crops:pumpkin_plant_4", properties = properties }) -crops.register({ name = "crops:pumpkin_plant_5", properties = properties }) -crops.register({ name = "crops:pumpkin_plant_5_attached", properties = properties }) diff --git a/mods/ITEMS/crops/readme.md b/mods/ITEMS/crops/readme.md deleted file mode 100755 index 6d62342..0000000 --- a/mods/ITEMS/crops/readme.md +++ /dev/null @@ -1,162 +0,0 @@ -## Crops - more farming crops mod for minetest - -Copyright (C) 2015 - Auke Kok - -This minetest mod expands the basic set of farming-related crops that -`minetest_game` offers. A list of crops/crafts is below. - -## Configuration - -A default configuration file, `crops_settings.txt` will be added -to your world folder that contains suggested `easy`, `normal` (the -default) and `difficult` settings for this mod. You can currently tune -the ABM interval/chance, and required light level for plant growth. - -## Hydration mechanic - -This feature is disabled in the `easy` setting. - -Plants need water. Plants need more water when they grow. This mod -implements mechanics of plant hydration and what happens when you -over-water or not water your plants properly: Plants may wither or -soak, and if they wither/soak too much, the plant will get damaged. - -You can see that plants are under stress visually. When a plant -withers, there will be particles that are steam/smoke-like floating -upwards from the plant. When a plant is over-watered, water bubbles -can be seen at the plant base. These are implemented as particles. - -In the default difficulty settings, plants don't accrue enough damage -to kill the plant. But at difficult settings, withering will end up -resulting in plant death, or the loss of crop entirely. At default -settings, plants will yield significantly less harvest if not taken -care of! So if you do decide to not water your plants, make sure you -don't let them sit around for days and harvest them as soon as they -are ripe to limit the effects. - -Environment factors can influence hydration: nearby water, night time -moisture. And of course, the watering can. The watering can holds -20 watering charges, and it takes 3-4 charges to water a plant from -completely dry to maximum wetness. Some plants will want more water, -some will do better with less, so make sure you use a hydrometer to -measure plant humidity. Recipes for the watering can and hydrometer -are listed below. - -## Plants - -1. Melons and pumpkins - -Melon plants grow from melon seeds. Once a plant is mature (there -are 5 stages) it will spawn a melon block adjacent to the plant. -The melon block can be harvested by punching, and yields 3-5 -melon slices. The melon slice can be crafted to a melon seed. - -Pumpkins grow from pumpkin seeds, and are harvested to yield a -pumpkin block. Each block can be cooked to yield one or more -roast pumpkin chunks, which can be eaten. You can also craft -the blocks to seeds. A pumpkin plant will only yield limited amounts -of pumpkins. After a while they automatically wither. - -2. Corn. - -Corn plants are 2 blocks high, and yield corn cobs. These can be -cooked to corn-on-the-cob, or processed to make corn seed (corn -kernels, basically). - -Digging a mature plant yields the corn cob. A harvested corn plant -"wilts", and needs to be dug away to make the land usable, or can -be left as ornamental 2-block plant. Digging either top or bottom -block works in all cases. - -3. Tomatoes. - -Tomatoes appear to work simple enough, until you harvest them -the first time: The plant stays! However, after the 3rd to 5th -harvest, the plant wilts and needs to be removed, since no more -tomatoes will grow on the plant. Per harvest you can get 1-2 -tomatoes only. You can craft the tomatoes to tomato seeds, as -expected. - -4. Potatoes. - -The plants themselves don't drop anything. Only if the plant matures -can you dig potatoes from the soil. If you can reach the soil from the -side you can save yourself one dig by digging the soil as that will -remove the plant from the top, but otherwise you need to dig twice: -once to remove the plant, once to dig out the potatoes. - -You get 3-5 potatoes. Each potato gives one (set of) "potato eyes" -which are the clones that can grow back to potatoes. Be careful not -to dig the plant when there's flowers! You have to wait until the soil -below shows potatoes. It's fairly easy to see the difference, though. - -5. Green Beans - -These green beans are unnaturally green, but there's so many -of them that grow on a vine! Sadly, these beans don't grow beans -unsupported, so you stick some sticks together to make a beanpole, -something like this way: - -empty empty empty -stick empty stick -stick empty stick - -There, that should help the viney bean plant to grow to 2 meters -high. It has remarkable purple flowers, that pop all over the plant -just before the beans grow. - -Sadly, once the beans are picked, this plant turns into an unusable -mess that makes it hard for the next plant to grow on the beanpole, -so you salvage the beanpole's sticks after harvesting in order to -make more beanpoles again. It's a bit of work, but worth it, these -beans are delicious! - - -## Cooking / Crafting - -The corn cobs can be cooked directly to make Corn-on-the-Cob. - -This mod includes a bowl recipe. The bowl is made from clay lumps, -which results in an unbaked clay bowl that needs to be baked in an -oven to be usable: - -empty empty empty -clay_lump empty clay_lump -empty clay_lump empty - -Pumpkin blocks can be cooked whole, and yield roasted pumpkin. It's -okay as food, but it takes a lot of work. - -You can fill these bowls (or any group:food_bowl) with vegetables to -craft an uncooked vegetable stew: - -empty empty empty -grean_beans potato tomato -empty clay_bowl empty - -The uncooked vegetable stew obviously needs to be cooked as well in -an oven. The resulting Vegetable Stew bowl gives a lot of hears back, -which is worth the effort. - -The watering can can be made as follows: - -steel_ingot empty empty -steel_ingot empty steel_ingot -empty steel_ingot empty - -To fill the watering can, left click any block of water. To use, -left click a plant. The damage bar on the icon indicates the fill -level of the watering can. - -The hydrometer can be crafted like this: - -mese_crystal_fragment empty empty -empty steel_ingot empty -empty empty steel_ingot - -Left-click any plant with the hydrometer, and the charge bar indicates -the humidity level of the plant: a dry plant will have 0% humidity -and be a small red bar or no bar at all, and a soaked plant will -have a full green bar. Be careful though! Some plants prefer to be -at mid-level (yellow) instead of full wetness! - diff --git a/mods/ITEMS/crops/screenshot.png b/mods/ITEMS/crops/screenshot.png deleted file mode 100755 index 3cbf879..0000000 Binary files a/mods/ITEMS/crops/screenshot.png and /dev/null differ diff --git a/mods/ITEMS/crops/sounds/crops_flies.ogg b/mods/ITEMS/crops/sounds/crops_flies.ogg deleted file mode 100755 index b5d3941..0000000 Binary files a/mods/ITEMS/crops/sounds/crops_flies.ogg and /dev/null differ diff --git a/mods/ITEMS/crops/sounds/crops_watercan_entering.ogg b/mods/ITEMS/crops/sounds/crops_watercan_entering.ogg deleted file mode 100755 index 68212bc..0000000 Binary files a/mods/ITEMS/crops/sounds/crops_watercan_entering.ogg and /dev/null differ diff --git a/mods/ITEMS/crops/sounds/crops_watercan_splash_big.ogg b/mods/ITEMS/crops/sounds/crops_watercan_splash_big.ogg deleted file mode 100755 index 19c4b5e..0000000 Binary files a/mods/ITEMS/crops/sounds/crops_watercan_splash_big.ogg and /dev/null differ diff --git a/mods/ITEMS/crops/sounds/crops_watercan_splash_quiet.ogg b/mods/ITEMS/crops/sounds/crops_watercan_splash_quiet.ogg deleted file mode 100755 index 9518e17..0000000 Binary files a/mods/ITEMS/crops/sounds/crops_watercan_splash_quiet.ogg and /dev/null differ diff --git a/mods/ITEMS/crops/sounds/crops_watercan_splash_small.ogg b/mods/ITEMS/crops/sounds/crops_watercan_splash_small.ogg deleted file mode 100755 index 7c02b3e..0000000 Binary files a/mods/ITEMS/crops/sounds/crops_watercan_splash_small.ogg and /dev/null differ diff --git a/mods/ITEMS/crops/sounds/crops_watercan_watering.ogg b/mods/ITEMS/crops/sounds/crops_watercan_watering.ogg deleted file mode 100755 index f1fc2d5..0000000 Binary files a/mods/ITEMS/crops/sounds/crops_watercan_watering.ogg and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_base.png b/mods/ITEMS/crops/textures/crops_beanpole_base.png deleted file mode 100755 index f9f6073..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_base.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_1.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_base_1.png deleted file mode 100755 index 905c4aa..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_1.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_2.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_base_2.png deleted file mode 100755 index fa7b421..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_2.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_3.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_base_3.png deleted file mode 100755 index a3678c2..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_3.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_4.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_base_4.png deleted file mode 100755 index cdc87ea..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_4.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_5.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_base_5.png deleted file mode 100755 index 99d6528..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_5.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_6.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_base_6.png deleted file mode 100755 index 291bd94..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_base_6.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_top_1.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_top_1.png deleted file mode 100755 index c6b9086..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_top_1.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_top_2.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_top_2.png deleted file mode 100755 index ed9629d..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_top_2.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_top_3.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_top_3.png deleted file mode 100755 index 4b340c5..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_top_3.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_plant_top_4.png b/mods/ITEMS/crops/textures/crops_beanpole_plant_top_4.png deleted file mode 100755 index 29be63b..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_plant_top_4.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_beanpole_top.png b/mods/ITEMS/crops/textures/crops_beanpole_top.png deleted file mode 100755 index 5416a60..0000000 Binary files a/mods/ITEMS/crops/textures/crops_beanpole_top.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_bowl_uncooked_vegetable_stew.png b/mods/ITEMS/crops/textures/crops_bowl_uncooked_vegetable_stew.png deleted file mode 100755 index d2baa9b..0000000 Binary files a/mods/ITEMS/crops/textures/crops_bowl_uncooked_vegetable_stew.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_bowl_vegetable_stew.png b/mods/ITEMS/crops/textures/crops_bowl_vegetable_stew.png deleted file mode 100755 index 2079682..0000000 Binary files a/mods/ITEMS/crops/textures/crops_bowl_vegetable_stew.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_clay_bowl.png b/mods/ITEMS/crops/textures/crops_clay_bowl.png deleted file mode 100755 index e45a6ba..0000000 Binary files a/mods/ITEMS/crops/textures/crops_clay_bowl.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn.png b/mods/ITEMS/crops/textures/crops_corn.png deleted file mode 100755 index a24dd14..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn_base_1.png b/mods/ITEMS/crops/textures/crops_corn_base_1.png deleted file mode 100755 index ccf95cb..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn_base_1.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn_base_2.png b/mods/ITEMS/crops/textures/crops_corn_base_2.png deleted file mode 100755 index 893a831..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn_base_2.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn_base_3.png b/mods/ITEMS/crops/textures/crops_corn_base_3.png deleted file mode 100755 index 367e993..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn_base_3.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn_base_seed.png b/mods/ITEMS/crops/textures/crops_corn_base_seed.png deleted file mode 100755 index fe54542..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn_base_seed.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn_cob.png b/mods/ITEMS/crops/textures/crops_corn_cob.png deleted file mode 100755 index 9cd5aa9..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn_cob.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn_on_the_cob.png b/mods/ITEMS/crops/textures/crops_corn_on_the_cob.png deleted file mode 100755 index 04894fd..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn_on_the_cob.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn_top_1.png b/mods/ITEMS/crops/textures/crops_corn_top_1.png deleted file mode 100755 index f3cef38..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn_top_1.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn_top_2.png b/mods/ITEMS/crops/textures/crops_corn_top_2.png deleted file mode 100755 index 94317eb..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn_top_2.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_corn_top_3.png b/mods/ITEMS/crops/textures/crops_corn_top_3.png deleted file mode 100755 index fd8ea71..0000000 Binary files a/mods/ITEMS/crops/textures/crops_corn_top_3.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_flies.png b/mods/ITEMS/crops/textures/crops_flies.png deleted file mode 100755 index b047a61..0000000 Binary files a/mods/ITEMS/crops/textures/crops_flies.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_green_bean.png b/mods/ITEMS/crops/textures/crops_green_bean.png deleted file mode 100755 index eb1ad66..0000000 Binary files a/mods/ITEMS/crops/textures/crops_green_bean.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_green_bean_seed.png b/mods/ITEMS/crops/textures/crops_green_bean_seed.png deleted file mode 100755 index f9c9459..0000000 Binary files a/mods/ITEMS/crops/textures/crops_green_bean_seed.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_hydrometer.png b/mods/ITEMS/crops/textures/crops_hydrometer.png deleted file mode 100755 index 65e1732..0000000 Binary files a/mods/ITEMS/crops/textures/crops_hydrometer.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon.png b/mods/ITEMS/crops/textures/crops_melon.png deleted file mode 100755 index bb05024..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_bottom.png b/mods/ITEMS/crops/textures/crops_melon_bottom.png deleted file mode 100755 index 432219d..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_bottom.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_plant_1.png b/mods/ITEMS/crops/textures/crops_melon_plant_1.png deleted file mode 100755 index 798c10d..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_plant_1.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_plant_2.png b/mods/ITEMS/crops/textures/crops_melon_plant_2.png deleted file mode 100755 index bc0dd6e..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_plant_2.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_plant_3.png b/mods/ITEMS/crops/textures/crops_melon_plant_3.png deleted file mode 100755 index 5d06c29..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_plant_3.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_plant_4.png b/mods/ITEMS/crops/textures/crops_melon_plant_4.png deleted file mode 100755 index 9195c33..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_plant_4.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_plant_5.png b/mods/ITEMS/crops/textures/crops_melon_plant_5.png deleted file mode 100755 index 9b24d8b..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_plant_5.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_plant_6.png b/mods/ITEMS/crops/textures/crops_melon_plant_6.png deleted file mode 100755 index f08c514..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_plant_6.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_seed.png b/mods/ITEMS/crops/textures/crops_melon_seed.png deleted file mode 100755 index 4322de5..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_seed.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_slice.png b/mods/ITEMS/crops/textures/crops_melon_slice.png deleted file mode 100755 index 0931eef..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_slice.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_stem.png b/mods/ITEMS/crops/textures/crops_melon_stem.png deleted file mode 100755 index 7ab2c02..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_stem.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_melon_top.png b/mods/ITEMS/crops/textures/crops_melon_top.png deleted file mode 100755 index a3384b8..0000000 Binary files a/mods/ITEMS/crops/textures/crops_melon_top.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_potato.png b/mods/ITEMS/crops/textures/crops_potato.png deleted file mode 100755 index c0d6d8a..0000000 Binary files a/mods/ITEMS/crops/textures/crops_potato.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_potato_eyes.png b/mods/ITEMS/crops/textures/crops_potato_eyes.png deleted file mode 100755 index e45d5f8..0000000 Binary files a/mods/ITEMS/crops/textures/crops_potato_eyes.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_potato_plant_1.png b/mods/ITEMS/crops/textures/crops_potato_plant_1.png deleted file mode 100755 index 8d481f4..0000000 Binary files a/mods/ITEMS/crops/textures/crops_potato_plant_1.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_potato_plant_2.png b/mods/ITEMS/crops/textures/crops_potato_plant_2.png deleted file mode 100755 index 061ad4d..0000000 Binary files a/mods/ITEMS/crops/textures/crops_potato_plant_2.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_potato_plant_3.png b/mods/ITEMS/crops/textures/crops_potato_plant_3.png deleted file mode 100755 index a0593a6..0000000 Binary files a/mods/ITEMS/crops/textures/crops_potato_plant_3.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_potato_plant_4.png b/mods/ITEMS/crops/textures/crops_potato_plant_4.png deleted file mode 100755 index 9e29b5a..0000000 Binary files a/mods/ITEMS/crops/textures/crops_potato_plant_4.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_potato_plant_5.png b/mods/ITEMS/crops/textures/crops_potato_plant_5.png deleted file mode 100755 index 2909223..0000000 Binary files a/mods/ITEMS/crops/textures/crops_potato_plant_5.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_potato_soil.png b/mods/ITEMS/crops/textures/crops_potato_soil.png deleted file mode 100755 index cb471ca..0000000 Binary files a/mods/ITEMS/crops/textures/crops_potato_soil.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin.png b/mods/ITEMS/crops/textures/crops_pumpkin.png deleted file mode 100755 index ac5f86d..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_bottom.png b/mods/ITEMS/crops/textures/crops_pumpkin_bottom.png deleted file mode 100755 index 5a90188..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_bottom.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_plant_1.png b/mods/ITEMS/crops/textures/crops_pumpkin_plant_1.png deleted file mode 100755 index 1a33321..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_plant_1.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_plant_2.png b/mods/ITEMS/crops/textures/crops_pumpkin_plant_2.png deleted file mode 100755 index 1131783..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_plant_2.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_plant_3.png b/mods/ITEMS/crops/textures/crops_pumpkin_plant_3.png deleted file mode 100755 index d7497a5..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_plant_3.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_plant_4.png b/mods/ITEMS/crops/textures/crops_pumpkin_plant_4.png deleted file mode 100755 index 9dc781a..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_plant_4.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_plant_5.png b/mods/ITEMS/crops/textures/crops_pumpkin_plant_5.png deleted file mode 100755 index 144f5e2..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_plant_5.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_plant_6.png b/mods/ITEMS/crops/textures/crops_pumpkin_plant_6.png deleted file mode 100755 index ff46604..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_plant_6.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_seed.png b/mods/ITEMS/crops/textures/crops_pumpkin_seed.png deleted file mode 100755 index bf4fb05..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_seed.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_stem.png b/mods/ITEMS/crops/textures/crops_pumpkin_stem.png deleted file mode 100755 index db6d1b6..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_stem.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_pumpkin_top.png b/mods/ITEMS/crops/textures/crops_pumpkin_top.png deleted file mode 100755 index 9972a63..0000000 Binary files a/mods/ITEMS/crops/textures/crops_pumpkin_top.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_roasted_pumpkin.png b/mods/ITEMS/crops/textures/crops_roasted_pumpkin.png deleted file mode 100755 index 42ff0f0..0000000 Binary files a/mods/ITEMS/crops/textures/crops_roasted_pumpkin.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_soak.png b/mods/ITEMS/crops/textures/crops_soak.png deleted file mode 100755 index 39311c4..0000000 Binary files a/mods/ITEMS/crops/textures/crops_soak.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_tomato.png b/mods/ITEMS/crops/textures/crops_tomato.png deleted file mode 100755 index aa9a524..0000000 Binary files a/mods/ITEMS/crops/textures/crops_tomato.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_tomato_plant_1.png b/mods/ITEMS/crops/textures/crops_tomato_plant_1.png deleted file mode 100755 index b562784..0000000 Binary files a/mods/ITEMS/crops/textures/crops_tomato_plant_1.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_tomato_plant_2.png b/mods/ITEMS/crops/textures/crops_tomato_plant_2.png deleted file mode 100755 index eff9ab6..0000000 Binary files a/mods/ITEMS/crops/textures/crops_tomato_plant_2.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_tomato_plant_3.png b/mods/ITEMS/crops/textures/crops_tomato_plant_3.png deleted file mode 100755 index c8ebbba..0000000 Binary files a/mods/ITEMS/crops/textures/crops_tomato_plant_3.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_tomato_plant_4.png b/mods/ITEMS/crops/textures/crops_tomato_plant_4.png deleted file mode 100755 index bc6ced3..0000000 Binary files a/mods/ITEMS/crops/textures/crops_tomato_plant_4.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_tomato_plant_5.png b/mods/ITEMS/crops/textures/crops_tomato_plant_5.png deleted file mode 100755 index 9e7cf82..0000000 Binary files a/mods/ITEMS/crops/textures/crops_tomato_plant_5.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_tomato_plant_6.png b/mods/ITEMS/crops/textures/crops_tomato_plant_6.png deleted file mode 100755 index 9203705..0000000 Binary files a/mods/ITEMS/crops/textures/crops_tomato_plant_6.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_tomato_seed.png b/mods/ITEMS/crops/textures/crops_tomato_seed.png deleted file mode 100755 index f32d3f2..0000000 Binary files a/mods/ITEMS/crops/textures/crops_tomato_seed.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_unbaked_clay_bowl.png b/mods/ITEMS/crops/textures/crops_unbaked_clay_bowl.png deleted file mode 100755 index 15bdfab..0000000 Binary files a/mods/ITEMS/crops/textures/crops_unbaked_clay_bowl.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_watering.png b/mods/ITEMS/crops/textures/crops_watering.png deleted file mode 100755 index e06226e..0000000 Binary files a/mods/ITEMS/crops/textures/crops_watering.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_watering_can.png b/mods/ITEMS/crops/textures/crops_watering_can.png deleted file mode 100755 index 2e57dc0..0000000 Binary files a/mods/ITEMS/crops/textures/crops_watering_can.png and /dev/null differ diff --git a/mods/ITEMS/crops/textures/crops_wither.png b/mods/ITEMS/crops/textures/crops_wither.png deleted file mode 100755 index edb591a..0000000 Binary files a/mods/ITEMS/crops/textures/crops_wither.png and /dev/null differ diff --git a/mods/ITEMS/crops/tomato.lua b/mods/ITEMS/crops/tomato.lua deleted file mode 100755 index e2491a4..0000000 --- a/mods/ITEMS/crops/tomato.lua +++ /dev/null @@ -1,201 +0,0 @@ - ---[[ - -Copyright (C) 2015 - Auke Kok - -"crops" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - --- Intllib -local S = crops.intllib - -minetest.register_node("crops:tomato_seed", { - description = S("Tomato seed"), - inventory_image = "crops_tomato_seed.png", - wield_image = "crops_tomato_seed.png", - tiles = { "crops_tomato_plant_1.png" }, - drawtype = "plantlike", - paramtype2 = "meshoptions", - waving = 1, - sunlight_propagates = true, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - node_placement_prediction = "crops:tomato_plant_1", - groups = { snappy=3,flammable=3,flora=1,attached_node=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - - on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) - if minetest.get_item_group(under.name, "soil") <= 1 then - return - end - crops.plant(pointed_thing.above, {name="crops:tomato_plant_1", param2 = 1}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end -}) - -for stage = 1, 4 do -minetest.register_node("crops:tomato_plant_" .. stage , { - description = S("Tomato plant"), - tiles = { "crops_tomato_plant_" .. stage .. ".png" }, - drawtype = "plantlike", - paramtype2 = "meshoptions", - waving = 1, - sunlight_propagates = true, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - groups = { snappy=3, flammable=3, flora=1, attached_node=1, not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.45, -0.5, -0.45, 0.45, -0.6 + (((math.min(stage, 4)) + 1) / 5), 0.45} - } -}) -end - -minetest.register_node("crops:tomato_plant_5" , { - description = S("Tomato plant"), - tiles = { "crops_tomato_plant_5.png" }, - drawtype = "plantlike", - paramtype2 = "meshoptions", - waving = 1, - sunlight_propagates = true, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - groups = { snappy=3, flammable=3, flora=1, attached_node=1, not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.45, -0.5, -0.45, 0.45, 0.45, 0.45} - }, - on_dig = function(pos, node, digger) - local drops = {} - for i = 1, math.random(1, 2) do - table.insert(drops, "crops:tomato") - end - minetest.handle_node_drops(pos, drops, digger) - - local meta = minetest.get_meta(pos) - local ttl = meta:get_int("crops_tomato_ttl") - if ttl > 1 then - minetest.swap_node(pos, { name = "crops:tomato_plant_4", param2 = 1}) - meta:set_int("crops_tomato_ttl", ttl - 1) - else - crops.die(pos) - end - end -}) - -minetest.register_node("crops:tomato_plant_6", { - description = S("Tomato plant"), - tiles = { "crops_tomato_plant_6.png" }, - drawtype = "plantlike", - paramtype2 = "meshoptions", - waving = 1, - sunlight_propagates = true, - use_texture_alpha = true, - walkable = false, - paramtype = "light", - groups = { snappy=3, flammable=3, flora=1, attached_node=1, not_in_creative_inventory=1 }, - drop = {}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.45, -0.5, -0.45, 0.45, 0.45, 0.45} - }, -}) - -minetest.register_craftitem("crops:tomato", { - description = S("Tomato"), - inventory_image = "crops_tomato.png", - on_use = minetest.item_eat(1) -}) - -minetest.register_craft({ - type = "shapeless", - output = "crops:tomato_seed", - recipe = { "crops:tomato" } -}) - --- --- grows a plant to mature size --- -minetest.register_abm({ - nodenames = { "crops:tomato_plant_1", "crops:tomato_plant_2", "crops:tomato_plant_3" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - local n = string.gsub(node.name, "4", "5") - n = string.gsub(n, "3", "4") - n = string.gsub(n, "2", "3") - n = string.gsub(n, "1", "2") - minetest.swap_node(pos, { name = n, param2 = 1 }) - end -}) - --- --- grows a tomato --- -minetest.register_abm({ - nodenames = { "crops:tomato_plant_4" }, - neighbors = { "group:soil" }, - interval = crops.settings.interval, - chance = crops.settings.chance, - action = function(pos, node, active_object_count, active_object_count_wider) - if not crops.can_grow(pos) then - return - end - local meta = minetest.get_meta(pos) - local ttl = meta:get_int("crops_tomato_ttl") - local damage = meta:get_int("crops_damage") - if ttl == 0 then - -- damage 0 - drops 4-6 - -- damage 50 - drops 2-3 - -- damage 100 - drops 0-1 - ttl = math.random(4 - (4 * (damage / 100)), 6 - (5 * (damage / 100))) - end - if ttl > 1 then - minetest.swap_node(pos, { name = "crops:tomato_plant_5", param2 = 1 }) - meta:set_int("crops_tomato_ttl", ttl) - else - crops.die(pos) - end - end -}) - -crops.tomato_die = function(pos) - minetest.set_node(pos, { name = "crops:tomato_plant_6", param2 = 1 }) -end - -local properties = { - die = crops.tomato_die, - waterstart = 19, - wateruse = 1, - night = 5, - soak = 80, - soak_damage = 90, - wither = 20, - wither_damage = 10, -} -crops.register({ name = "crops:tomato_plant_1", properties = properties }) -crops.register({ name = "crops:tomato_plant_2", properties = properties }) -crops.register({ name = "crops:tomato_plant_3", properties = properties }) -crops.register({ name = "crops:tomato_plant_4", properties = properties }) -crops.register({ name = "crops:tomato_plant_5", properties = properties }) diff --git a/mods/ITEMS/crops/tools.lua b/mods/ITEMS/crops/tools.lua deleted file mode 100755 index cb80788..0000000 --- a/mods/ITEMS/crops/tools.lua +++ /dev/null @@ -1,125 +0,0 @@ ---[[ - -Copyright (C) 2015 - Auke Kok - -"crops" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - --- Intllib -local S = crops.intllib - -minetest.register_tool("crops:watering_can", { - description = S("Watering Can"), - inventory_image = "crops_watering_can.png", - liquids_pointable = true, - range = 2.5, - stack_max = 1, - wear = 65535, - tool_capabilities = {}, - on_use = function(itemstack, user, pointed_thing) - local pos = pointed_thing.under - local ppos = pos - if not pos then - return itemstack - end - -- filling it up? - local wear = itemstack:get_wear() - if minetest.get_item_group(minetest.get_node(pos).name, "water") >= 3 then - if wear ~= 1 then - minetest.sound_play("crops_watercan_entering", {pos=pos, gain=0.8}) - minetest.after(math.random()/2, function(p) - if math.random(2) == 1 then - minetest.sound_play("crops_watercan_splash_quiet", {pos=p, gain=0.1}) - end - if math.random(3) == 1 then - minetest.after(math.random()/2, function(pp) - minetest.sound_play("crops_watercan_splash_small", {pos=pp, gain=0.7}) - end, p) - end - if math.random(3) == 1 then - minetest.after(math.random()/2, function(pp) - minetest.sound_play("crops_watercan_splash_big", {pos=pp, gain=0.7}) - end, p) - end - end, pos) - itemstack:set_wear(1) - end - return itemstack - end - -- using it on a top-half part of a plant? - local meta = minetest.get_meta(pos) - if meta:get_int("crops_top_half") == 1 then - meta = minetest.get_meta({x=pos.x, y=pos.y-1, z=pos.z}) - end - -- using it on a plant? - local water = meta:get_int("crops_water") - if water < 1 then - return itemstack - end - -- empty? - if wear == 65534 then - return itemstack - end - crops.particles(ppos, 2) - minetest.sound_play("crops_watercan_watering", {pos=pos, gain=0.8}) - water = math.min(water + crops.settings.watercan, crops.settings.watercan_max) - meta:set_int("crops_water", water) - - if not minetest.setting_getbool("creative_mode") then - itemstack:set_wear(math.min(65534, wear + (65535 / crops.settings.watercan_uses))) - end - return itemstack - end, -}) - -minetest.register_tool("crops:hydrometer", { - description = S("Hydrometer"), - inventory_image = "crops_hydrometer.png", - liquids_pointable = false, - range = 2.5, - stack_max = 1, - tool_capabilities = { - }, - on_use = function(itemstack, user, pointed_thing) - local pos = pointed_thing.under - if not pos then - return itemstack - end - -- doublesize plant? - local meta = minetest.get_meta(pos) - if meta:get_int("crops_top_half") == 1 then - meta = minetest.get_meta({x=pos.x, y=pos.y-1, z=pos.z}) - end - - -- using it on a plant? - local water = meta:get_int("crops_water") - if water == nil then - itemstack:set_wear(65534) - return itemstack - end - itemstack:set_wear(65535 - ((65534 / 100) * water)) - return itemstack - end, -}) - -minetest.register_craft({ - output = "crops:watering_can", - recipe = { - { "default:steel_ingot", "", "" }, - { "default:steel_ingot", "", "default:steel_ingot" }, - { "", "default:steel_ingot", "" }, - }, -}) - -minetest.register_craft({ - output = "crops:hydrometer", - recipe = { - { "default:mese_crystal_fragment", "", "" }, - { "", "default:steel_ingot", "" }, - { "", "", "default:steel_ingot" }, - }, -}) diff --git a/mods/ITEMS/crops/tools/updatepo.sh b/mods/ITEMS/crops/tools/updatepo.sh deleted file mode 100755 index 74332e0..0000000 --- a/mods/ITEMS/crops/tools/updatepo.sh +++ /dev/null @@ -1,22 +0,0 @@ -#! /bin/bash - -# To create a new translation: -# msginit --locale=ll_CC -o locale/ll_CC.po -i locale/template.pot - -cd "$(dirname "${BASH_SOURCE[0]}")/.."; - -# Extract translatable strings. -xgettext --from-code=UTF-8 \ - --keyword=S \ - --keyword=NS:1,2 \ - --keyword=N_ \ - --add-comments='Translators:' \ - --add-location=file \ - -o locale/template.pot \ - $(find . -name '*.lua') - -# Update translations. -find locale -name '*.po' | while read -r file; do - echo $file - msgmerge --update $file locale/template.pot; -done diff --git a/mods/ITEMS/default/crafting.lua b/mods/ITEMS/default/crafting.lua deleted file mode 100644 index ee6e740..0000000 --- a/mods/ITEMS/default/crafting.lua +++ /dev/null @@ -1,497 +0,0 @@ ---[[ - Default crafting ---]] - -minetest.register_craft({ - output = 'default:wood 4', - recipe = { - {'default:tree'}, - } -}) - -minetest.register_craft({ - output = 'default:junglewood 4', - recipe = { - {'default:jungletree'}, - } -}) - -minetest.register_craft({ - output = 'default:pine_wood 4', - recipe = { - {'default:pine_tree'}, - } -}) - -minetest.register_craft({ - output = 'default:acacia_wood 4', - recipe = { - {'default:acacia_tree'}, - } -}) - -minetest.register_craft({ - output = 'default:aspen_wood 4', - recipe = { - {'default:aspen_tree'}, - } -}) - -minetest.register_craft({ - output = 'default:wood', - recipe = { - {'default:bush_stem'}, - } -}) - -minetest.register_craft({ - output = 'default:acacia_wood', - recipe = { - {'default:acacia_bush_stem'}, - } -}) - -minetest.register_craft({ - output = 'default:stick 4', - recipe = { - {'group:wood'}, - } -}) - -minetest.register_craft({ - output = 'default:coalblock', - recipe = { - {'default:coal_lump', 'default:coal_lump', 'default:coal_lump'}, - {'default:coal_lump', 'default:coal_lump', 'default:coal_lump'}, - {'default:coal_lump', 'default:coal_lump', 'default:coal_lump'}, - } -}) - -minetest.register_craft({ - output = 'default:coal_lump 9', - recipe = { - {'default:coalblock'}, - } -}) - -minetest.register_craft({ - output = 'default:steelblock', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - } -}) - -minetest.register_craft({ - output = 'default:steel_ingot 9', - recipe = { - {'default:steelblock'}, - } -}) - -minetest.register_craft({ - output = 'default:copperblock', - recipe = { - {'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'}, - {'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'}, - {'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'}, - } -}) - -minetest.register_craft({ - output = 'default:copper_ingot 9', - recipe = { - {'default:copperblock'}, - } -}) - -minetest.register_craft({ - output = "default:tinblock", - recipe = { - {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, - {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, - {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, - } -}) - -minetest.register_craft({ - output = "default:tin_ingot 9", - recipe = { - {"default:tinblock"}, - } -}) - -minetest.register_craft({ - output = "default:bronze_ingot 9", - recipe = { - {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, - {"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"}, - {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, - } -}) - -minetest.register_craft({ - output = 'default:bronzeblock', - recipe = { - {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, - {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, - {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, - } -}) - -minetest.register_craft({ - output = 'default:bronze_ingot 9', - recipe = { - {'default:bronzeblock'}, - } -}) - -minetest.register_craft({ - output = 'default:goldblock', - recipe = { - {'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'}, - {'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'}, - {'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'}, - } -}) - -minetest.register_craft({ - output = 'default:gold_ingot 9', - recipe = { - {'default:goldblock'}, - } -}) - -minetest.register_craft({ - output = 'default:diamondblock', - recipe = { - {'default:diamond', 'default:diamond', 'default:diamond'}, - {'default:diamond', 'default:diamond', 'default:diamond'}, - {'default:diamond', 'default:diamond', 'default:diamond'}, - } -}) - -minetest.register_craft({ - output = 'default:diamond 9', - recipe = { - {'default:diamondblock'}, - } -}) - -minetest.register_craft({ - output = "default:sandstone", - recipe = { - {"default:sand", "default:sand"}, - {"default:sand", "default:sand"}, - } -}) - -minetest.register_craft({ - output = "default:sand 4", - recipe = { - {"default:sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:sandstonebrick 4", - recipe = { - {"default:sandstone", "default:sandstone"}, - {"default:sandstone", "default:sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:sandstone_block 9", - recipe = { - {"default:sandstone", "default:sandstone", "default:sandstone"}, - {"default:sandstone", "default:sandstone", "default:sandstone"}, - {"default:sandstone", "default:sandstone", "default:sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:desert_sandstone", - recipe = { - {"default:desert_sand", "default:desert_sand"}, - {"default:desert_sand", "default:desert_sand"}, - } -}) - -minetest.register_craft({ - output = "default:desert_sand 4", - recipe = { - {"default:desert_sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:desert_sandstone_brick 4", - recipe = { - {"default:desert_sandstone", "default:desert_sandstone"}, - {"default:desert_sandstone", "default:desert_sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:desert_sandstone_block 9", - recipe = { - {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, - {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, - {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, - } -}) - -minetest.register_craft({ - output = 'default:clay', - recipe = { - {'default:clay_lump', 'default:clay_lump'}, - {'default:clay_lump', 'default:clay_lump'}, - } -}) - -minetest.register_craft({ - output = 'default:clay_lump 4', - recipe = { - {'deafult:clay'}, - } -}) - -minetest.register_craft({ - output = 'default:brick', - recipe = { - {'default:clay_brick', 'default:clay_brick'}, - {'default:clay_brick', 'default:clay_brick'}, - } -}) - -minetest.register_craft({ - output = 'default:clay_brick 4', - recipe = { - {'default:brick'}, - } -}) - -minetest.register_craft({ - output = 'default:paper', - recipe = { - {'default:papyrus', 'default:papyrus', 'default:papyrus'}, - } -}) - -minetest.register_craft({ - output = "default:ladder_wood 5", - recipe = { - {"group:stick", "", "group:stick"}, - {"group:stick", "group:stick", "group:stick"}, - {"group:stick", "", "group:stick"}, - } -}) - -minetest.register_craft({ - output = 'default:ladder_steel 15', - recipe = { - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', '', 'default:steel_ingot'}, - } -}) - -minetest.register_craft({ - output = 'default:mese', - recipe = { - {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, - {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, - {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, - } -}) - -minetest.register_craft({ - output = 'default:mese_crystal 9', - recipe = { - {'default:mese'}, - } -}) - -minetest.register_craft({ - output = 'default:mese_crystal_fragment 9', - recipe = { - {'default:mese_crystal'}, - } -}) - -minetest.register_craft({ - output = "default:mese_crystal", - recipe = { - {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, - {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, - {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, - } -}) - -minetest.register_craft({ - output = 'default:meselamp', - recipe = { - {'default:glass'}, - {'default:mese_crystal'}, - } -}) - -minetest.register_craft({ - output = "default:mese_post_light 3", - recipe = { - {"", "default:glass", ""}, - {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, - {"", "group:wood", ""}, - } -}) - -minetest.register_craft({ - output = 'default:obsidian_shard 9', - recipe = { - {'default:obsidian'} - } -}) - -minetest.register_craft({ - output = 'default:obsidian', - recipe = { - {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'}, - {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'}, - {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'}, - } -}) - -minetest.register_craft({ - output = 'default:obsidianbrick 4', - recipe = { - {'default:obsidian', 'default:obsidian'}, - {'default:obsidian', 'default:obsidian'} - } -}) - -minetest.register_craft({ - output = 'default:obsidian_block 9', - recipe = { - {'default:obsidian', 'default:obsidian', 'default:obsidian'}, - {'default:obsidian', 'default:obsidian', 'default:obsidian'}, - {'default:obsidian', 'default:obsidian', 'default:obsidian'}, - } -}) - -minetest.register_craft({ - output = 'default:stonebrick 4', - recipe = { - {'default:stone', 'default:stone'}, - {'default:stone', 'default:stone'}, - } -}) - -minetest.register_craft({ - output = 'default:stone_block 9', - recipe = { - {'default:stone', 'default:stone', 'default:stone'}, - {'default:stone', 'default:stone', 'default:stone'}, - {'default:stone', 'default:stone', 'default:stone'}, - } -}) - -minetest.register_craft({ - output = 'default:desert_stonebrick 4', - recipe = { - {'default:desert_stone', 'default:desert_stone'}, - {'default:desert_stone', 'default:desert_stone'}, - } -}) - -minetest.register_craft({ - output = 'default:desert_stone_block 9', - recipe = { - {'default:desert_stone', 'default:desert_stone', 'default:desert_stone'}, - {'default:desert_stone', 'default:desert_stone', 'default:desert_stone'}, - {'default:desert_stone', 'default:desert_stone', 'default:desert_stone'}, - } -}) - -minetest.register_craft({ - output = 'default:snowblock', - recipe = { - {'default:snow', 'default:snow', 'default:snow'}, - {'default:snow', 'default:snow', 'default:snow'}, - {'default:snow', 'default:snow', 'default:snow'}, - } -}) - -minetest.register_craft({ - output = 'default:snow 9', - recipe = { - {'default:snowblock'}, - } -}) - - ---[[ - Cooking recipes ---]] - -minetest.register_craft({ - type = "cooking", - output = "default:glass", - recipe = "group:sand", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:obsidian_glass", - recipe = "default:obsidian_shard", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:stone", - recipe = "default:cobble", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:stone", - recipe = "default:mossycobble", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:desert_stone", - recipe = "default:desert_cobble", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:steel_ingot", - recipe = "default:iron_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:copper_ingot", - recipe = "default:copper_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:tin_ingot", - recipe = "default:tin_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:gold_ingot", - recipe = "default:gold_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:clay_brick", - recipe = "default:clay_lump", -}) - diff --git a/mods/ITEMS/default/craftitems.lua b/mods/ITEMS/default/craftitems.lua deleted file mode 100644 index ce78856..0000000 --- a/mods/ITEMS/default/craftitems.lua +++ /dev/null @@ -1,102 +0,0 @@ ---[[ - Default craftitems ---]] - -minetest.register_craftitem("default:stick", { - description = "Stick", - inventory_image = "default_stick.png", - groups = {stick = 1, flammable = 2}, -}) - -minetest.register_craftitem("default:paper", { - description = "Paper", - inventory_image = "default_paper.png", - groups = {flammable = 3}, -}) - -minetest.register_craftitem("default:coal_lump", { - description = "Coal Lump", - inventory_image = "default_coal_lump.png", - groups = {coal = 1, flammable = 1} -}) - -minetest.register_craftitem("default:iron_lump", { - description = "Iron Lump", - inventory_image = "default_iron_lump.png", -}) - -minetest.register_craftitem("default:copper_lump", { - description = "Copper Lump", - inventory_image = "default_copper_lump.png", -}) - -minetest.register_craftitem("default:tin_lump", { - description = "Tin Lump", - inventory_image = "default_tin_lump.png", -}) - -minetest.register_craftitem("default:mese_crystal", { - description = "Mese Crystal", - inventory_image = "default_mese_crystal.png", -}) - -minetest.register_craftitem("default:gold_lump", { - description = "Gold Lump", - inventory_image = "default_gold_lump.png", -}) - -minetest.register_craftitem("default:diamond", { - description = "Diamond", - inventory_image = "default_diamond.png", -}) - -minetest.register_craftitem("default:clay_lump", { - description = "Clay Lump", - inventory_image = "default_clay_lump.png", -}) - -minetest.register_craftitem("default:steel_ingot", { - description = "Steel Ingot", - inventory_image = "default_steel_ingot.png", -}) - -minetest.register_craftitem("default:copper_ingot", { - description = "Copper Ingot", - inventory_image = "default_copper_ingot.png", -}) - -minetest.register_craftitem("default:tin_ingot", { - description = "Tin Ingot", - inventory_image = "default_tin_ingot.png", -}) - -minetest.register_craftitem("default:bronze_ingot", { - description = "Bronze Ingot", - inventory_image = "default_bronze_ingot.png", -}) - -minetest.register_craftitem("default:gold_ingot", { - description = "Gold Ingot", - inventory_image = "default_gold_ingot.png" -}) - -minetest.register_craftitem("default:mese_crystal_fragment", { - description = "Mese Crystal Fragment", - inventory_image = "default_mese_crystal_fragment.png", -}) - -minetest.register_craftitem("default:clay_brick", { - description = "Clay Brick", - inventory_image = "default_clay_brick.png", -}) - -minetest.register_craftitem("default:obsidian_shard", { - description = "Obsidian Shard", - inventory_image = "default_obsidian_shard.png", -}) - -minetest.register_craftitem("default:flint", { - description = "Flint", - inventory_image = "default_flint.png" -}) - diff --git a/mods/ITEMS/default/depends.txt b/mods/ITEMS/default/depends.txt deleted file mode 100644 index b1b7161..0000000 --- a/mods/ITEMS/default/depends.txt +++ /dev/null @@ -1 +0,0 @@ -init diff --git a/mods/ITEMS/default/functions.lua b/mods/ITEMS/default/functions.lua deleted file mode 100644 index c818408..0000000 --- a/mods/ITEMS/default/functions.lua +++ /dev/null @@ -1,374 +0,0 @@ ---[[ - Default functions ---]] - - --- --- Lavacooling --- - -default.cool_lava = function(pos, node) - if node.name == "default:lava_source" then - minetest.set_node(pos, {name = "default:obsidian"}) - else -- Lava flowing - minetest.set_node(pos, {name = "default:stone"}) - end - minetest.sound_play("default_cool_lava", - {pos = pos, max_hear_distance = 16, gain = 0.25}) -end - -if minetest.settings:get_bool("enable_lavacooling") ~= false then - minetest.register_abm({ - label = "Lava cooling", - nodenames = {"default:lava_source", "default:lava_flowing"}, - neighbors = {"group:cools_lava", "group:water"}, - interval = 1, - chance = 2, - catch_up = false, - action = default.cool_lava, - }) -end - - --- --- Papyrus and cactus growing --- - --- wrapping the functions in abm action is necessary to make overriding them possible - -function default.grow_cactus(pos, node) - if node.param2 >= 4 then - return - end - pos.y = pos.y - 1 - if minetest.get_item_group(minetest.get_node(pos).name, "sand") == 0 then - return - end - pos.y = pos.y + 1 - local height = 0 - while node.name == "default:cactus" and height < 4 do - height = height + 1 - pos.y = pos.y + 1 - node = minetest.get_node(pos) - end - if height == 4 or node.name ~= "air" then - return - end - if minetest.get_node_light(pos) < 13 then - return - end - minetest.set_node(pos, {name = "default:cactus"}) - return true -end - -function default.grow_papyrus(pos, node) - pos.y = pos.y - 1 - local name = minetest.get_node(pos).name - if name ~= "default:dirt_with_grass" and name ~= "default:dirt" then - return - end - if not minetest.find_node_near(pos, 3, {"group:water"}) then - return - end - pos.y = pos.y + 1 - local height = 0 - while node.name == "default:papyrus" and height < 4 do - height = height + 1 - pos.y = pos.y + 1 - node = minetest.get_node(pos) - end - if height == 4 or node.name ~= "air" then - return - end - if minetest.get_node_light(pos) < 13 then - return - end - minetest.set_node(pos, {name = "default:papyrus"}) - return true -end - -minetest.register_abm({ - label = "Grow cactus", - nodenames = {"default:cactus"}, - neighbors = {"group:sand"}, - interval = 12, - chance = 83, - action = default.grow_cactus -}) - -minetest.register_abm({ - label = "Grow papyrus", - nodenames = {"default:papyrus"}, - neighbors = {"default:dirt", "default:dirt_with_grass"}, - interval = 14, - chance = 71, - action = default.grow_papyrus -}) - - --- --- dig upwards --- - -function default.dig_up(pos, node, digger) - if digger == nil then return end - local np = {x = pos.x, y = pos.y + 1, z = pos.z} - local nn = minetest.get_node(np) - if nn.name == node.name then - minetest.node_dig(np, nn, digger) - end -end - - --- --- Convert dirt to something that fits the environment --- - -minetest.register_abm({ - label = "Grass spread", - nodenames = {"default:dirt"}, - neighbors = { - "air", - "group:grass", - "group:dry_grass", - "default:snow", - }, - interval = 6, - chance = 50, - catch_up = false, - action = function(pos, node) - -- Check for darkness: night, shadow or under a light-blocking node - -- Returns if ignore above - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - if (minetest.get_node_light(above) or 0) < 13 then - return - end - - -- Look for spreading dirt-type neighbours - local p2 = minetest.find_node_near(pos, 1, "group:spreading_dirt_type") - if p2 then - local n3 = minetest.get_node(p2) - minetest.set_node(pos, {name = n3.name}) - return - end - - -- Else, any seeding nodes on top? - local name = minetest.get_node(above).name - -- Snow check is cheapest, so comes first - if name == "default:snow" then - minetest.set_node(pos, {name = "default:dirt_with_snow"}) - -- Most likely case first - elseif minetest.get_item_group(name, "grass") ~= 0 then - minetest.set_node(pos, {name = "default:dirt_with_grass"}) - elseif minetest.get_item_group(name, "dry_grass") ~= 0 then - minetest.set_node(pos, {name = "default:dirt_with_dry_grass"}) - end - end -}) - - --- --- Grass and dry grass removed in darkness --- - -minetest.register_abm({ - label = "Grass covered", - nodenames = {"group:spreading_dirt_type"}, - interval = 8, - chance = 50, - catch_up = false, - action = function(pos, node) - local above = {x = pos.x, y = pos.y + 1, z = pos.z} - local name = minetest.get_node(above).name - local nodedef = minetest.registered_nodes[name] - if name ~= "ignore" and nodedef and not ((nodedef.sunlight_propagates or - nodedef.paramtype == "light") and - nodedef.liquidtype == "none") then - minetest.set_node(pos, {name = "default:dirt"}) - end - end -}) - - --- --- Moss growth on cobble near water --- - -minetest.register_abm({ - label = "Moss growth", - nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble", "walls:cobble"}, - neighbors = {"group:water"}, - interval = 16, - chance = 200, - catch_up = false, - action = function(pos, node) - if node.name == "default:cobble" then - minetest.set_node(pos, {name = "default:mossycobble"}) - elseif node.name == "stairs:slab_cobble" then - minetest.set_node(pos, {name = "stairs:slab_mossycobble", param2 = node.param2}) - elseif node.name == "stairs:stair_cobble" then - minetest.set_node(pos, {name = "stairs:stair_mossycobble", param2 = node.param2}) - elseif node.name == "walls:cobble" then - minetest.set_node(pos, {name = "walls:mossycobble", param2 = node.param2}) - end - end -}) - - --- --- Leafdecay --- - --- Prevent decay of placed leaves - -default.after_place_leaves = function(pos, placer, itemstack, pointed_thing) - if placer and not placer:get_player_control().sneak then - local node = minetest.get_node(pos) - node.param2 = 1 - minetest.set_node(pos, node) - end -end - --- Leafdecay -local function leafdecay_after_destruct(pos, oldnode, def) - for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius), - vector.add(pos, def.radius), def.leaves)) do - local node = minetest.get_node(v) - local timer = minetest.get_node_timer(v) - if node.param2 == 0 and not timer:is_started() then - timer:start(math.random(20, 120) / 10) - end - end -end - -local function leafdecay_on_timer(pos, def) - if minetest.find_node_near(pos, def.radius, def.trunks) then - return false - end - - local node = minetest.get_node(pos) - local drops = minetest.get_node_drops(node.name) - for _, item in ipairs(drops) do - local is_leaf - for _, v in pairs(def.leaves) do - if v == item then - is_leaf = true - end - end - if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or - not is_leaf then - minetest.add_item({ - x = pos.x - 0.5 + math.random(), - y = pos.y - 0.5 + math.random(), - z = pos.z - 0.5 + math.random(), - }, item) - end - end - - minetest.remove_node(pos) - minetest.check_for_falling(pos) -end - -function default.register_leafdecay(def) - assert(def.leaves) - assert(def.trunks) - assert(def.radius) - for _, v in pairs(def.trunks) do - minetest.override_item(v, { - after_destruct = function(pos, oldnode) - leafdecay_after_destruct(pos, oldnode, def) - end, - }) - end - for _, v in pairs(def.leaves) do - minetest.override_item(v, { - on_timer = function(pos) - leafdecay_on_timer(pos, def) - end, - }) - end -end - - --- --- Checks if specified volume intersects a protected volume --- - -function default.intersects_protection(minp, maxp, player_name, interval) - -- 'interval' is the largest allowed interval for the 3D lattice of checks - - -- Compute the optimal float step 'd' for each axis so that all corners and - -- borders are checked. 'd' will be smaller or equal to 'interval'. - -- Subtracting 1e-4 ensures that the max co-ordinate will be reached by the - -- for loop (which might otherwise not be the case due to rounding errors). - local d = {} - for _, c in pairs({"x", "y", "z"}) do - if maxp[c] > minp[c] then - d[c] = (maxp[c] - minp[c]) / math.ceil((maxp[c] - minp[c]) / interval) - 1e-4 - elseif maxp[c] == minp[c] then - d[c] = 1 -- Any value larger than 0 to avoid division by zero - else -- maxp[c] < minp[c], print error and treat as protection intersected - minetest.log("error", "maxp < minp in 'default.intersects_protection()'") - return true - end - end - - for zf = minp.z, maxp.z, d.z do - local z = math.floor(zf + 0.5) - for yf = minp.y, maxp.y, d.y do - local y = math.floor(yf + 0.5) - for xf = minp.x, maxp.x, d.x do - local x = math.floor(xf + 0.5) - if minetest.is_protected({x = x, y = y, z = z}, player_name) then - return true - end - end - end - end - - return false -end - - --- --- NOTICE: This method is not an official part of the API yet! --- This method may change in future. --- - -function default.can_interact_with_node(player, pos) - if player then - if minetest.check_player_privs(player, "protection_bypass") then - return true - end - else - return false - end - - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - - if not owner or owner == "" or owner == player:get_player_name() then - return true - end - - -- is player wielding the right key? - local item = player:get_wielded_item() - if item:get_name() == "default:key" then - local key_meta = item:get_meta() - - if key_meta:get_string("secret") == "" then - local key_oldmeta = item:get_metadata() - if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then - return false - end - - key_meta:set_string("secret", minetest.parse_json(key_oldmeta).secret) - item:set_metadata("") - end - - return meta:get_string("key_lock_secret") == key_meta:get_string("secret") - end - - return false -end - diff --git a/mods/ITEMS/default/init.lua b/mods/ITEMS/default/init.lua deleted file mode 100644 index fb303f5..0000000 --- a/mods/ITEMS/default/init.lua +++ /dev/null @@ -1,29 +0,0 @@ ---[[ - Default ---]] - --- Definitions made by this mod that other mods can use too -default = {} - -default.LIGHT_MAX = 14 - --- Load files -local modpath = minetest.get_modpath("default") -dofile(modpath.."/sounds.lua") -dofile(modpath.."/functions.lua") -dofile(modpath.."/nodes_base.lua") -- Simple solid cubic nodes with simple definitions -dofile(modpath.."/nodes_liquid.lua") -- Liquids -dofile(modpath.."/nodes_plants.lua") -- Plants -dofile(modpath.."/nodes_trees.lua") -- Tree nodes: wood, planks, sapling, leaves -dofile(modpath.."/nodes_glass.lua") -- Glass -dofile(modpath.."/nodes_climb.lua") -- Climbable nodes -dofile(modpath.."/nodes_misc.lua") -- Other and special nodes -dofile(modpath.."/craftitems.lua") -dofile(modpath.."/crafting.lua") - --- Legacy -WATER_ALPHA = minetest.registered_nodes["default:water_source"].alpha -WATER_VISC = minetest.registered_nodes["default:water_source"].liquid_viscosity -LAVA_VISC = minetest.registered_nodes["default:lava_source"].liquid_viscosity -LIGHT_MAX = default.LIGHT_MAX - diff --git a/mods/ITEMS/default/mod.conf b/mods/ITEMS/default/mod.conf deleted file mode 100644 index 8fe05af..0000000 --- a/mods/ITEMS/default/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = default - diff --git a/mods/ITEMS/default/nodes_base.lua b/mods/ITEMS/default/nodes_base.lua deleted file mode 100644 index c51502f..0000000 --- a/mods/ITEMS/default/nodes_base.lua +++ /dev/null @@ -1,454 +0,0 @@ ---[[ - Default nodes ---]] - - -minetest.register_node("default:clay", { - description = "Clay", - tiles = {"default_clay.png"}, - groups = {crumbly = 3}, - drop = "default:clay_lump 4", - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("default:dirt", { - description = "Dirt", - tiles = {"default_dirt.png"}, - groups = {crumbly = 3, soil = 1}, - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("default:gravel", { - description = "Gravel", - tiles = {"default_gravel.png"}, - groups = {crumbly = 2, falling_node = 1}, - sounds = default.node_sound_gravel_defaults(), - drop = { - max_items = 1, - items = { - {items = {"default:flint"}, rarity = 16}, - {items = {"default:gravel"}} - } - } -}) - -minetest.register_node("default:stone", { - description = "Stone", - tiles = {"default_stone.png"}, - groups = {cracky = 3, stone = 1}, - drop = "default:cobble", - legacy_mineral = true, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:stone_with_diamond", { - description = "Diamond Ore", - tiles = {"default_stone.png^default_mineral_diamond.png"}, - groups = {cracky = 1}, - drop = "default:diamond", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:cobble", { - description = "Cobblestone", - tiles = {"default_cobble.png"}, - is_ground_content = false, - groups = {cracky = 3, stone = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:stonebrick", { - description = "Stone Brick", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_stone_brick.png"}, - is_ground_content = false, - groups = {cracky = 2, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:stone_block", { - description = "Stone Block", - tiles = {"default_stone_block.png"}, - is_ground_content = false, - groups = {cracky = 2, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:mossycobble", { - description = "Mossy Cobblestone", - tiles = {"default_mossycobble.png"}, - is_ground_content = false, - groups = {cracky = 3, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:sandstone", { - description = "Sandstone", - tiles = {"default_sandstone.png"}, - drop = "base:sandstone_cobble", - groups = {crumbly = 1, cracky = 3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:sandstonebrick", { - description = "Sandstone Brick", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_sandstone_brick.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:sandstone_block", { - description = "Sandstone Block", - tiles = {"default_sandstone_block.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:desert_sandstone", { - description = "Desert Sandstone", - tiles = {"default_desert_sandstone.png"}, - groups = {crumbly = 1, cracky = 3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:desert_sandstone_brick", { - description = "Desert Sandstone Brick", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_desert_sandstone_brick.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:desert_sandstone_block", { - description = "Desert Sandstone Block", - tiles = {"default_desert_sandstone_block.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:obsidian", { - description = "Obsidian", - tiles = {"default_obsidian.png"}, - sounds = default.node_sound_stone_defaults(), - groups = {cracky = 1, level = 2}, -}) - -minetest.register_node("default:obsidianbrick", { - description = "Obsidian Brick", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_obsidian_brick.png"}, - is_ground_content = false, - sounds = default.node_sound_stone_defaults(), - groups = {cracky = 1, level = 2}, -}) - -minetest.register_node("default:obsidian_block", { - description = "Obsidian Block", - tiles = {"default_obsidian_block.png"}, - is_ground_content = false, - sounds = default.node_sound_stone_defaults(), - groups = {cracky = 1, level = 2}, -}) - -minetest.register_node("default:dirt_with_grass", { - description = "Dirt with Grass", - tiles = {"default_grass.png", "default_dirt.png", - {name = "default_dirt.png^default_grass_side.png", - tileable_vertical = false}}, - groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_grass_footstep", gain = 0.25}, - }), -}) - -minetest.register_node("default:dirt_with_grass_footsteps", { - description = "Dirt with Grass and Footsteps", - tiles = {"default_grass.png^default_footprint.png", "default_dirt.png", - {name = "default_dirt.png^default_grass_side.png", - tileable_vertical = false}}, - groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_grass_footstep", gain = 0.25}, - }), -}) - -minetest.register_node("default:dirt_with_dry_grass", { - description = "Dirt with Dry Grass", - tiles = {"default_dry_grass.png", - "default_dirt.png", - {name = "default_dirt.png^default_dry_grass_side.png", - tileable_vertical = false}}, - groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_grass_footstep", gain = 0.4}, - }), -}) - -minetest.register_node("default:dirt_with_snow", { - description = "Dirt with Snow", - tiles = {"default_snow.png", "default_dirt.png", - {name = "default_dirt.png^default_snow_side.png", - tileable_vertical = false}}, - groups = {crumbly = 3, spreading_dirt_type = 1, snowy = 1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_snow_footstep", gain = 0.15}, - }), -}) - -minetest.register_node("default:dirt_with_rainforest_litter", { - description = "Dirt with Rainforest Litter", - tiles = { - "default_rainforest_litter.png", - "default_dirt.png", - {name = "default_dirt.png^default_rainforest_litter_side.png", - tileable_vertical = false} - }, - groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_grass_footstep", gain = 0.4}, - }), -}) - -minetest.register_node("default:sand", { - description = "Sand", - tiles = {"default_sand.png"}, - groups = {crumbly = 3, falling_node = 1, sand = 1}, - sounds = default.node_sound_sand_defaults(), -}) - -minetest.register_node("default:desert_sand", { - description = "Desert Sand", - tiles = {"default_desert_sand.png"}, - groups = {crumbly = 3, falling_node = 1, sand = 1}, - sounds = default.node_sound_sand_defaults(), -}) - -minetest.register_node("default:snow", { - description = "Snow", - tiles = {"default_snow.png"}, - inventory_image = "default_snowball.png", - wield_image = "default_snowball.png", - paramtype = "light", - buildable_to = true, - floodable = true, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, - }, - }, - groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1, snowy = 1}, - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_snow_footstep", gain = 0.15}, - dug = {name = "default_snow_footstep", gain = 0.2}, - dig = {name = "default_snow_footstep", gain = 0.2} - }), - - on_construct = function(pos) - pos.y = pos.y - 1 - if minetest.get_node(pos).name == "default:dirt_with_grass" then - minetest.set_node(pos, {name = "default:dirt_with_snow"}) - end - end, -}) - -minetest.register_node("default:snowblock", { - description = "Snow Block", - tiles = {"default_snow.png"}, - groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1, snowy = 1}, - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_snow_footstep", gain = 0.15}, - dug = {name = "default_snow_footstep", gain = 0.2}, - dig = {name = "default_snow_footstep", gain = 0.2} - }), - - on_construct = function(pos) - pos.y = pos.y - 1 - if minetest.get_node(pos).name == "default:dirt_with_grass" then - minetest.set_node(pos, {name = "default:dirt_with_snow"}) - end - end, -}) - -minetest.register_node("default:ice", { - description = "Ice", - drawtype = "allfaces_optional", - tiles = {"default_ice.png"}, - use_texture_alpha = true, - is_ground_content = false, - paramtype = "light", - groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1}, - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_node("default:stone_with_coal", { - description = "Coal Ore", - tiles = {"default_stone.png^default_mineral_coal.png"}, - groups = {cracky = 3}, - drop = "default:coal_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:coalblock", { - description = "Coal Block", - tiles = {"default_coal_block.png"}, - is_ground_content = false, - groups = {cracky = 3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:stone_with_iron", { - description = "Iron Ore", - tiles = {"default_stone.png^default_mineral_iron.png"}, - groups = {cracky = 2}, - drop = "default:iron_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:steelblock", { - description = "Steel Block", - tiles = {"default_steel_block.png"}, - is_ground_content = false, - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_metal_defaults(), -}) - -minetest.register_node("default:stone_with_copper", { - description = "Copper Ore", - tiles = {"default_stone.png^default_mineral_copper.png"}, - groups = {cracky = 2}, - drop = "default:copper_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:copperblock", { - description = "Copper Block", - tiles = {"default_copper_block.png"}, - is_ground_content = false, - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_metal_defaults(), -}) - -minetest.register_node("default:stone_with_tin", { - description = "Tin Ore", - tiles = {"default_stone.png^default_mineral_tin.png"}, - groups = {cracky = 2}, - drop = "default:tin_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:tinblock", { - description = "Tin Block", - tiles = {"default_tin_block.png"}, - is_ground_content = false, - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_metal_defaults(), -}) - -minetest.register_node("default:bronzeblock", { - description = "Bronze Block", - tiles = {"default_bronze_block.png"}, - is_ground_content = false, - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_metal_defaults(), -}) - -minetest.register_node("default:stone_with_mese", { - description = "Mese Ore", - tiles = {"default_stone.png^default_mineral_mese.png"}, - groups = {cracky = 1}, - drop = "default:mese_crystal", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:mese", { - description = "Mese Block", - tiles = {"default_mese_block.png"}, - paramtype = "light", - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_stone_defaults(), - light_source = 3, -}) - -minetest.register_node("default:stone_with_gold", { - description = "Gold Ore", - tiles = {"default_stone.png^default_mineral_gold.png"}, - groups = {cracky = 2}, - drop = "default:gold_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:goldblock", { - description = "Gold Block", - tiles = {"default_gold_block.png"}, - is_ground_content = false, - groups = {cracky = 1}, - sounds = default.node_sound_metal_defaults(), -}) - -minetest.register_node("default:diamondblock", { - description = "Diamond Block", - tiles = {"default_diamond_block.png"}, - is_ground_content = false, - groups = {cracky = 1, level = 3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:brick", { - description = "Brick Block", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_brick.png"}, - is_ground_content = false, - groups = {cracky = 3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:meselamp", { - description = "Mese Lamp", - drawtype = "glasslike", - tiles = {"default_meselamp.png"}, - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - groups = {cracky = 3, oddly_breakable_by_hand = 3}, - sounds = default.node_sound_glass_defaults(), - light_source = default.LIGHT_MAX, -}) - -minetest.register_node("default:mese_post_light", { - description = "Mese Post Light", - tiles = {"default_mese_post_light_top.png", "default_mese_post_light_top.png", - "default_mese_post_light_side_dark.png", "default_mese_post_light_side_dark.png", - "default_mese_post_light_side.png", "default_mese_post_light_side.png"}, - wield_image = "default_mese_post_light_side.png", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16}, - }, - }, - paramtype = "light", - light_source = default.LIGHT_MAX, - sunlight_propagates = true, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - diff --git a/mods/ITEMS/default/nodes_climb.lua b/mods/ITEMS/default/nodes_climb.lua deleted file mode 100644 index fe6df56..0000000 --- a/mods/ITEMS/default/nodes_climb.lua +++ /dev/null @@ -1,49 +0,0 @@ ---[[ - Default climbable nodes ---]] - -minetest.register_node("default:ladder_wood", { - description = "Wooden Ladder", - drawtype = "signlike", - tiles = {"default_ladder_wood.png"}, - inventory_image = "default_ladder_wood.png", - wield_image = "default_ladder_wood.png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = false, - climbable = true, - is_ground_content = false, - selection_box = { - type = "wallmounted", - --wall_top = = - --wall_bottom = = - --wall_side = = - }, - groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2}, - legacy_wallmounted = true, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:ladder_steel", { - description = "Steel Ladder", - drawtype = "signlike", - tiles = {"default_ladder_steel.png"}, - inventory_image = "default_ladder_steel.png", - wield_image = "default_ladder_steel.png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = false, - climbable = true, - is_ground_content = false, - selection_box = { - type = "wallmounted", - --wall_top = = - --wall_bottom = = - --wall_side = = - }, - groups = {cracky = 2}, - sounds = default.node_sound_metal_defaults(), -}) - diff --git a/mods/ITEMS/default/nodes_glass.lua b/mods/ITEMS/default/nodes_glass.lua deleted file mode 100644 index f453470..0000000 --- a/mods/ITEMS/default/nodes_glass.lua +++ /dev/null @@ -1,28 +0,0 @@ ---[[ - Default glass nodes ---]] - -minetest.register_node("default:glass", { - description = "Glass", - drawtype = "glasslike_framed_optional", - tiles = {"default_glass.png", "default_glass_detail.png"}, - paramtype = "light", - paramtype2 = "glasslikeliquidlevel", - sunlight_propagates = true, - is_ground_content = false, - groups = {cracky = 3, oddly_breakable_by_hand = 3}, - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_node("default:obsidian_glass", { - description = "Obsidian Glass", - drawtype = "glasslike_framed_optional", - tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"}, - paramtype = "light", - paramtype2 = "glasslikeliquidlevel", - is_ground_content = false, - sunlight_propagates = true, - sounds = default.node_sound_glass_defaults(), - groups = {cracky = 3}, -}) - diff --git a/mods/ITEMS/default/nodes_liquid.lua b/mods/ITEMS/default/nodes_liquid.lua deleted file mode 100644 index 336b0f7..0000000 --- a/mods/ITEMS/default/nodes_liquid.lua +++ /dev/null @@ -1,284 +0,0 @@ ---[[ - Default liquid nodes ---]] - -minetest.register_node("default:water_source", { - description = "Water Source", - drawtype = "liquid", - tiles = { - { - name = "default_water_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - }, - }, - special_tiles = { - -- New-style water source material (mostly unused) - { - name = "default_water_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - backface_culling = false, - }, - }, - alpha = 160, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "default:water_flowing", - liquid_alternative_source = "default:water_source", - liquid_viscosity = 1, - post_effect_color = {a = 103, r = 30, g = 60, b = 90}, - groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1}, - sounds = default.node_sound_water_defaults(), -}) - -minetest.register_node("default:water_flowing", { - description = "Flowing Water", - drawtype = "flowingliquid", - tiles = {"default_water.png"}, - special_tiles = { - { - name = "default_water_flowing_animated.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - { - name = "default_water_flowing_animated.png", - backface_culling = true, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - }, - alpha = 160, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "default:water_flowing", - liquid_alternative_source = "default:water_source", - liquid_viscosity = 1, - post_effect_color = {a = 103, r = 30, g = 60, b = 90}, - groups = {water = 3, liquid = 3, puts_out_fire = 1, - not_in_creative_inventory = 1, cools_lava = 1}, - sounds = default.node_sound_water_defaults(), -}) - - -minetest.register_node("default:river_water_source", { - description = "River Water Source", - drawtype = "liquid", - tiles = { - { - name = "default_river_water_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - }, - }, - special_tiles = { - { - name = "default_river_water_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - backface_culling = false, - }, - }, - alpha = 160, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "default:river_water_flowing", - liquid_alternative_source = "default:river_water_source", - liquid_viscosity = 1, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a = 103, r = 30, g = 76, b = 90}, - groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1}, - sounds = default.node_sound_water_defaults(), -}) - -minetest.register_node("default:river_water_flowing", { - description = "Flowing River Water", - drawtype = "flowingliquid", - tiles = {"default_river_water.png"}, - special_tiles = { - { - name = "default_river_water_flowing_animated.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - { - name = "default_river_water_flowing_animated.png", - backface_culling = true, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - }, - alpha = 160, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "default:river_water_flowing", - liquid_alternative_source = "default:river_water_source", - liquid_viscosity = 1, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a = 103, r = 30, g = 76, b = 90}, - groups = {water = 3, liquid = 3, puts_out_fire = 1, - not_in_creative_inventory = 1, cools_lava = 1}, - sounds = default.node_sound_water_defaults(), -}) - - -minetest.register_node("default:lava_source", { - description = "Lava Source", - drawtype = "liquid", - tiles = { - { - name = "default_lava_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0, - }, - }, - }, - special_tiles = { - -- New-style lava source material (mostly unused) - { - name = "default_lava_source_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0, - }, - backface_culling = false, - }, - }, - paramtype = "light", - light_source = default.LIGHT_MAX - 1, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "default:lava_flowing", - liquid_alternative_source = "default:lava_source", - liquid_viscosity = 7, - liquid_renewable = false, - damage_per_second = 4 * 2, - post_effect_color = {a = 191, r = 255, g = 64, b = 0}, - groups = {lava = 3, liquid = 2, igniter = 1}, -}) - -minetest.register_node("default:lava_flowing", { - description = "Flowing Lava", - drawtype = "flowingliquid", - tiles = {"default_lava.png"}, - special_tiles = { - { - name = "default_lava_flowing_animated.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.3, - }, - }, - { - name = "default_lava_flowing_animated.png", - backface_culling = true, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.3, - }, - }, - }, - paramtype = "light", - paramtype2 = "flowingliquid", - light_source = default.LIGHT_MAX - 1, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "default:lava_flowing", - liquid_alternative_source = "default:lava_source", - liquid_viscosity = 7, - liquid_renewable = false, - damage_per_second = 4 * 2, - post_effect_color = {a = 191, r = 255, g = 64, b = 0}, - groups = {lava = 3, liquid = 2, igniter = 1, - not_in_creative_inventory = 1}, -}) - diff --git a/mods/ITEMS/default/nodes_misc.lua b/mods/ITEMS/default/nodes_misc.lua deleted file mode 100644 index dd462ad..0000000 --- a/mods/ITEMS/default/nodes_misc.lua +++ /dev/null @@ -1,12 +0,0 @@ ---[[ - Default miscellaneous nodes ---]] - -minetest.register_node("default:cloud", { - description = "Cloud", - tiles = {"default_cloud.png"}, - is_ground_content = false, - sounds = default.node_sound_defaults(), - groups = {not_in_creative_inventory = 1}, -}) - diff --git a/mods/ITEMS/default/nodes_plants.lua b/mods/ITEMS/default/nodes_plants.lua deleted file mode 100644 index 3f71f0b..0000000 --- a/mods/ITEMS/default/nodes_plants.lua +++ /dev/null @@ -1,318 +0,0 @@ ---[[ - Default plant nodes ---]] - - -minetest.register_node("default:cactus", { - description = "Cactus", - tiles = {"default_cactus_top.png", "default_cactus_top.png", - "default_cactus_side.png"}, - paramtype2 = "facedir", - groups = {choppy = 3}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node, -}) - -minetest.register_node("default:papyrus", { - description = "Papyrus", - drawtype = "plantlike", - tiles = {"default_papyrus.png"}, - inventory_image = "default_papyrus.png", - wield_image = "default_papyrus.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, - }, - groups = {snappy = 3, flammable = 2}, - sounds = default.node_sound_leaves_defaults(), - - after_dig_node = function(pos, node, metadata, digger) - default.dig_up(pos, node, digger) - end, -}) - -minetest.register_node("default:dry_shrub", { - description = "Dry Shrub", - drawtype = "plantlike", - waving = 1, - tiles = {"default_dry_shrub.png"}, - inventory_image = "default_dry_shrub.png", - wield_image = "default_dry_shrub.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, flammable = 3, attached_node = 1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16}, - }, -}) - -minetest.register_node("default:junglegrass", { - description = "Jungle Grass", - drawtype = "plantlike", - waving = 1, - visual_scale = 1.69, - tiles = {"default_junglegrass.png"}, - inventory_image = "default_junglegrass.png", - wield_image = "default_junglegrass.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 1.19, 7 / 16}, - }, -}) - -minetest.register_node("default:grass_1", { - description = "Grass", - drawtype = "plantlike", - waving = 1, - tiles = {"default_grass_1.png"}, - -- Use texture of a taller grass stage in inventory - inventory_image = "default_grass_3.png", - wield_image = "default_grass_3.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, flammable = 1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16}, - }, - - on_place = function(itemstack, placer, pointed_thing) - -- place a random grass node - local stack = ItemStack("default:grass_" .. math.random(1,5)) - local ret = minetest.item_place(stack, placer, pointed_thing) - return ItemStack("default:grass_1 " .. - itemstack:get_count() - (1 - ret:get_count())) - end, -}) - -for i = 2, 5 do - minetest.register_node("default:grass_" .. i, { - description = "Grass", - drawtype = "plantlike", - waving = 1, - tiles = {"default_grass_" .. i .. ".png"}, - inventory_image = "default_grass_" .. i .. ".png", - wield_image = "default_grass_" .. i .. ".png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - drop = "default:grass_1", - groups = {snappy = 3, flora = 1, attached_node = 1, - not_in_creative_inventory = 1, grass = 1, flammable = 1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, - }, - }) -end - -minetest.register_node("default:dry_grass_1", { - description = "Dry Grass", - drawtype = "plantlike", - waving = 1, - tiles = {"default_dry_grass_1.png"}, - inventory_image = "default_dry_grass_3.png", - wield_image = "default_dry_grass_3.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, flammable = 3, flora = 1, - attached_node = 1, dry_grass = 1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, - }, - - on_place = function(itemstack, placer, pointed_thing) - -- place a random dry grass node - local stack = ItemStack("default:dry_grass_" .. math.random(1, 5)) - local ret = minetest.item_place(stack, placer, pointed_thing) - return ItemStack("default:dry_grass_1 " .. - itemstack:get_count() - (1 - ret:get_count())) - end, -}) - -for i = 2, 5 do - minetest.register_node("default:dry_grass_" .. i, { - description = "Dry Grass", - drawtype = "plantlike", - waving = 1, - tiles = {"default_dry_grass_" .. i .. ".png"}, - inventory_image = "default_dry_grass_" .. i .. ".png", - wield_image = "default_dry_grass_" .. i .. ".png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, - not_in_creative_inventory=1, dry_grass = 1}, - drop = "default:dry_grass_1", - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -1 / 16, 6 / 16}, - }, - }) -end -minetest.register_node("default:bush_stem", { - description = "Bush Stem", - drawtype = "plantlike", - visual_scale = 1.41, - tiles = {"default_bush_stem.png"}, - inventory_image = "default_bush_stem.png", - wield_image = "default_bush_stem.png", - paramtype = "light", - sunlight_propagates = true, - groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - selection_box = { - type = "fixed", - fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, - }, -}) - -minetest.register_node("default:bush_leaves", { - description = "Bush Leaves", - drawtype = "allfaces_optional", - waving = 1, - tiles = {"default_leaves_simple.png"}, - paramtype = "light", - groups = {snappy = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"default:bush_sapling"}, rarity = 5}, - {items = {"default:bush_leaves"}} - } - }, - sounds = default.node_sound_leaves_defaults(), - - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("default:bush_sapling", { - description = "Bush Sapling", - drawtype = "plantlike", - tiles = {"default_bush_sapling.png"}, - inventory_image = "default_bush_sapling.png", - wield_image = "default_bush_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "default:bush_sapling", - -- minp, maxp to be checked, relative to sapling pos - {x = -1, y = 0, z = -1}, - {x = 1, y = 1, z = 1}, - -- maximum interval of interior volume check - 2) - - return itemstack - end, -}) - -minetest.register_node("default:acacia_bush_stem", { - description = "Acacia Bush Stem", - drawtype = "plantlike", - visual_scale = 1.41, - tiles = {"default_acacia_bush_stem.png"}, - inventory_image = "default_acacia_bush_stem.png", - wield_image = "default_acacia_bush_stem.png", - paramtype = "light", - sunlight_propagates = true, - groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - selection_box = { - type = "fixed", - fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, - }, -}) - -minetest.register_node("default:acacia_bush_leaves", { - description = "Acacia Bush Leaves", - drawtype = "allfaces_optional", - waving = 1, - tiles = {"default_acacia_leaves_simple.png"}, - paramtype = "light", - groups = {snappy = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"default:acacia_bush_sapling"}, rarity = 5}, - {items = {"default:acacia_bush_leaves"}} - } - }, - sounds = default.node_sound_leaves_defaults(), - - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("default:acacia_bush_sapling", { - description = "Acacia Bush Sapling", - drawtype = "plantlike", - tiles = {"default_acacia_bush_sapling.png"}, - inventory_image = "default_acacia_bush_sapling.png", - wield_image = "default_acacia_bush_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 2 / 16, 3 / 16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "default:acacia_bush_sapling", - -- minp, maxp to be checked, relative to sapling pos - {x = -1, y = 0, z = -1}, - {x = 1, y = 1, z = 1}, - -- maximum interval of interior volume check - 2) - - return itemstack - end, -}) - diff --git a/mods/ITEMS/default/nodes_trees.lua b/mods/ITEMS/default/nodes_trees.lua deleted file mode 100644 index d1a59cd..0000000 --- a/mods/ITEMS/default/nodes_trees.lua +++ /dev/null @@ -1,1263 +0,0 @@ ---[[ - Default tree nodes ---]] - - -minetest.register_node("default:tree", { - description = "Tree", - tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - - on_place = minetest.rotate_node -}) - -minetest.register_node("default:wood", { - description = "Wooden Planks", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_wood.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:sapling", { - description = "Sapling", - drawtype = "plantlike", - tiles = {"default_sapling.png"}, - inventory_image = "default_sapling.png", - wield_image = "default_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "default:sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 6, z = 2}, - -- maximum interval of interior volume check - 4) - - return itemstack - end, -}) - -minetest.register_node("default:leaves", { - description = "Leaves", - drawtype = "allfaces_optional", - waving = 1, - tiles = {"default_leaves.png"}, - special_tiles = {"default_leaves_simple.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - { - -- player will get sapling with 1/20 chance - items = {'default:sapling'}, - rarity = 20, - }, - { - -- player will get leaves only if he get no saplings, - -- this is because max_items is 1 - items = {'default:leaves'}, - } - } - }, - sounds = default.node_sound_leaves_defaults(), - - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("default:apple", { - description = "Apple", - drawtype = "plantlike", - tiles = {"default_apple.png"}, - inventory_image = "default_apple.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-3 / 16, -7 / 16, -3 / 16, 3 / 16, 4 / 16, 3 / 16} - }, - groups = {fleshy = 3, dig_immediate = 3, flammable = 2, - leafdecay = 3, leafdecay_drop = 1}, - on_use = minetest.item_eat(2), - sounds = default.node_sound_leaves_defaults(), - - after_place_node = function(pos, placer, itemstack) - if placer:is_player() then - minetest.set_node(pos, {name = "default:apple", param2 = 1}) - end - end, -}) - - -minetest.register_node("default:jungletree", { - description = "Jungle Tree", - tiles = {"default_jungletree_top.png", "default_jungletree_top.png", - "default_jungletree.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - - on_place = minetest.rotate_node -}) - -minetest.register_node("default:junglewood", { - description = "Jungle Wood Planks", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_junglewood.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:jungleleaves", { - description = "Jungle Leaves", - drawtype = "allfaces_optional", - waving = 1, - tiles = {"default_jungleleaves.png"}, - special_tiles = {"default_jungleleaves_simple.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {'default:junglesapling'}, rarity = 20}, - {items = {'default:jungleleaves'}} - } - }, - sounds = default.node_sound_leaves_defaults(), - - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("default:junglesapling", { - description = "Jungle Sapling", - drawtype = "plantlike", - tiles = {"default_junglesapling.png"}, - inventory_image = "default_junglesapling.png", - wield_image = "default_junglesapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "default:junglesapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 15, z = 2}, - -- maximum interval of interior volume check - 4) - - return itemstack - end, -}) - - -minetest.register_node("default:pine_tree", { - description = "Pine Tree", - tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", - "default_pine_tree.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, - sounds = default.node_sound_wood_defaults(), - - on_place = minetest.rotate_node -}) - -minetest.register_node("default:pine_wood", { - description = "Pine Wood Planks", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_pine_wood.png"}, - is_ground_content = false, - groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:pine_needles",{ - description = "Pine Needles", - drawtype = "allfaces_optional", - tiles = {"default_pine_needles.png"}, - waving = 1, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"default:pine_sapling"}, rarity = 20}, - {items = {"default:pine_needles"}} - } - }, - sounds = default.node_sound_leaves_defaults(), - - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("default:pine_sapling", { - description = "Pine Sapling", - drawtype = "plantlike", - tiles = {"default_pine_sapling.png"}, - inventory_image = "default_pine_sapling.png", - wield_image = "default_pine_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 3, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "default:pine_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 12, z = 2}, - -- maximum interval of interior volume check - 4) - - return itemstack - end, -}) - - -minetest.register_node("default:acacia_tree", { - description = "Acacia Tree", - tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png", - "default_acacia_tree.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - - on_place = minetest.rotate_node -}) - -minetest.register_node("default:acacia_wood", { - description = "Acacia Wood Planks", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_acacia_wood.png"}, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:acacia_leaves", { - description = "Acacia Leaves", - drawtype = "allfaces_optional", - tiles = {"default_acacia_leaves.png"}, - special_tiles = {"default_acacia_leaves_simple.png"}, - waving = 1, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"default:acacia_sapling"}, rarity = 20}, - {items = {"default:acacia_leaves"}} - } - }, - sounds = default.node_sound_leaves_defaults(), - - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("default:acacia_sapling", { - description = "Acacia Tree Sapling", - drawtype = "plantlike", - tiles = {"default_acacia_sapling.png"}, - inventory_image = "default_acacia_sapling.png", - wield_image = "default_acacia_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "default:acacia_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -4, y = 1, z = -4}, - {x = 4, y = 6, z = 4}, - -- maximum interval of interior volume check - 4) - - return itemstack - end, -}) - -minetest.register_node("default:aspen_tree", { - description = "Aspen Tree", - tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png", - "default_aspen_tree.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, - sounds = default.node_sound_wood_defaults(), - - on_place = minetest.rotate_node -}) - -minetest.register_node("default:aspen_wood", { - description = "Aspen Wood Planks", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_aspen_wood.png"}, - is_ground_content = false, - groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:aspen_leaves", { - description = "Aspen Leaves", - drawtype = "allfaces_optional", - tiles = {"default_aspen_leaves.png"}, - waving = 1, - paramtype = "light", - is_ground_content = false, - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"default:aspen_sapling"}, rarity = 20}, - {items = {"default:aspen_leaves"}} - } - }, - sounds = default.node_sound_leaves_defaults(), - - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("default:aspen_sapling", { - description = "Aspen Tree Sapling", - drawtype = "plantlike", - tiles = {"default_aspen_sapling.png"}, - inventory_image = "default_aspen_sapling.png", - wield_image = "default_aspen_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 3, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "default:aspen_sapling", - -- minp, maxp to be checked, relative to sapling pos - -- minp_relative.y = 1 because sapling pos has been checked - {x = -2, y = 1, z = -2}, - {x = 2, y = 12, z = 2}, - -- maximum interval of interior volume check - 4) - - return itemstack - end, -}) - - -local random = math.random - --- --- Grow trees from saplings --- - --- 'can grow' function - -function default.can_grow(pos) - local node_under = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) - if not node_under then - return false - end - local name_under = node_under.name - local is_soil = minetest.get_item_group(name_under, "soil") - if is_soil == 0 then - return false - end - local light_level = minetest.get_node_light(pos) - if not light_level or light_level < 13 then - return false - end - return true -end - - --- 'is snow nearby' function - -local function is_snow_nearby(pos) - return minetest.find_node_near(pos, 1, {"group:snowy"}) -end - - --- Sapling ABM - -function default.grow_sapling(pos) - if not default.can_grow(pos) then - -- try a bit later again - minetest.get_node_timer(pos):start(math.random(240, 600)) - return - end - - local mg_name = minetest.get_mapgen_setting("mg_name") - local node = minetest.get_node(pos) - if node.name == "default:sapling" then - minetest.log("action", "A sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - if mg_name == "v6" then - default.grow_tree(pos, random(1, 4) == 1) - else - default.grow_new_apple_tree(pos) - end - elseif node.name == "default:junglesapling" then - minetest.log("action", "A jungle sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - if mg_name == "v6" then - default.grow_jungle_tree(pos) - else - default.grow_new_jungle_tree(pos) - end - elseif node.name == "default:pine_sapling" then - minetest.log("action", "A pine sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - local snow = is_snow_nearby(pos) - if mg_name == "v6" then - default.grow_pine_tree(pos, snow) - elseif snow then - default.grow_new_snowy_pine_tree(pos) - else - default.grow_new_pine_tree(pos) - end - elseif node.name == "default:acacia_sapling" then - minetest.log("action", "An acacia sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - default.grow_new_acacia_tree(pos) - elseif node.name == "default:aspen_sapling" then - minetest.log("action", "An aspen sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - default.grow_new_aspen_tree(pos) - elseif node.name == "default:bush_sapling" then - minetest.log("action", "A bush sapling grows into a bush at ".. - minetest.pos_to_string(pos)) - default.grow_bush(pos) - elseif node.name == "default:acacia_bush_sapling" then - minetest.log("action", "An acacia bush sapling grows into a bush at ".. - minetest.pos_to_string(pos)) - default.grow_acacia_bush(pos) - elseif node.name == "base:arnhem_cypress_pine_sapling" then - minetest.log("action", "An Arnhem Cypress Pine sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_arnhem_cypress_pine(pos) - elseif node.name == "base:black_box_sapling" then - minetest.log("action", "A Black Box sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_black_box(pos) - elseif node.name == "base:black_wattle_sapling" then - minetest.log("action", "A Black Wattle sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_black_wattle(pos) - elseif node.name == "base:blue_gum_sapling" then - minetest.log("action", "A Blue Gum sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_blue_gum(pos) - elseif node.name == "base:boab_sapling" then - minetest.log("action", "A Boab sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_boab(pos) - elseif node.name == "base:bull_banksia_sapling" then - minetest.log("action", "A Bull Banksia sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_bull_banksia(pos) - elseif node.name == "base:celery_top_pine_sapling" then - minetest.log("action", "A Celery-top Pine sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_celery_top_pine(pos) - elseif node.name == "base:cherry_sapling" then - minetest.log("action", "A Cherry sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_cherry(pos) - elseif node.name == "base:coast_banksia_sapling" then - minetest.log("action", "A Coast Banksia sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_coast_banksia(pos) - elseif node.name == "base:coolabah_sapling" then - minetest.log("action", "A Coolabah sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_coolabah(pos) - elseif node.name == "base:daintree_stringybark_sapling" then - minetest.log("action", "A Daintree Stringybark sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_daintree_stringybark(pos) - elseif node.name == "base:darwin_woollybutt_sapling" then - minetest.log("action", "A Darwin Woollybutt sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_darwin_woollybutt(pos) - elseif node.name == "base:desert_oak_sapling" then - minetest.log("action", "A Desert Oak sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_desert_oak(pos) - elseif node.name == "base:fan_palm_sapling" then - minetest.log("action", "A Fan Palm sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_fan_palm(pos) - elseif node.name == "base:flame_grevillea_sapling" then - minetest.log("action", "A Flame Grevillea sapling grows into a bush at ".. - minetest.pos_to_string(pos)) - base.grow_flame_grevillea(pos) - elseif node.name == "base:golden_wattle_sapling" then - minetest.log("action", "A Golden Wattle sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_golden_wattle(pos) - elseif node.name == "base:grey_mangrove_sapling" then - minetest.log("action", "A Grey Mangrove sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_grey_mangrove(pos) - elseif node.name == "base:huon_pine_sapling" then - minetest.log("action", "A Huon Pine sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_huon_pine(pos) - elseif node.name == "base:illawarra_flame_sapling" then - minetest.log("action", "A Illawarra Flame Tree sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_illawarra_flame(pos) - elseif node.name == "base:jarrah_sapling" then - minetest.log("action", "A Jarrah sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_jarrah(pos) - elseif node.name == "base:karri_sapling" then - minetest.log("action", "A Karri sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_karri(pos) - elseif node.name == "base:lemon_eucalyptus_sapling" then - minetest.log("action", "A Lemon Eucalyptus sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_lemon_eucalyptus(pos) - elseif node.name == "base:lemon_myrtle_sapling" then - minetest.log("action", "A Lemon Myrtle sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_lemon_myrtle(pos) - elseif node.name == "base:lilly_pilly_sapling" then - minetest.log("action", "A Lilly Pilly sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_lilly_pilly(pos) - elseif node.name == "base:macadamia_sapling" then - minetest.log("action", "A Macadamia sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_macadamia(pos) - elseif node.name == "base:mangrove_apple_sapling" then - minetest.log("action", "A Mangrove Apple sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_mangrove_apple(pos) - elseif node.name == "base:marri_sapling" then - minetest.log("action", "A Marri sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_marri(pos) - elseif node.name == "base:merbau_sapling" then - minetest.log("action", "A Merbau sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_merbau(pos) - elseif node.name == "base:moreton_bay_fig_sapling" then - minetest.log("action", "A Moreton Bay Fig sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_moreton_bay_fig(pos) - elseif node.name == "base:mulga_sapling" then - minetest.log("action", "A Mulga sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_mulga(pos) - elseif node.name == "base:palm_sapling" then - minetest.log("action", "A Palm sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_paperbark(pos) - elseif node.name == "base:paperbark_sapling" then - minetest.log("action", "A Paperbark sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_paperbark(pos) - elseif node.name == "base:quandong_sapling" then - minetest.log("action", "A Quandong sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_quandong(pos) - elseif node.name == "base:red_bottlebrush_sapling" then - minetest.log("action", "A Red Bottlebrush sapling grows into a bush at ".. - minetest.pos_to_string(pos)) - base.grow_red_bottlebrush(pos) - elseif node.name == "base:river_oak_sapling" then - minetest.log("action", "A River Oak sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_river_oak(pos) - elseif node.name == "base:river_red_gum_sapling" then - minetest.log("action", "A River Red Gum sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_river_red_gum(pos) - elseif node.name == "base:rottnest_island_pine_sapling" then - minetest.log("action", "A Rottnest Island Pine sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_rottnest_island_pine(pos) - elseif node.name == "base:scribbly_gum_sapling" then - minetest.log("action", "A Scribbly Gum sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_scribbly_gum(pos) - elseif node.name == "base:shoestring_acacia_sapling" then - minetest.log("action", "A Shoestring Acacia sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_shoestring_acacia(pos) - elseif node.name == "base:snow_gum_sapling" then - minetest.log("action", "A Snow Gum sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_snow_gum(pos) - elseif node.name == "base:southern_sassafras_sapling" then - minetest.log("action", "A Southern Sassafras sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_southern_sassafras(pos) - elseif node.name == "base:stilted_mangrove_sapling" then - minetest.log("action", "A Stilted Mangrove sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_stilted_mangrove(pos) - elseif node.name == "base:sugar_gum_sapling" then - minetest.log("action", "A Sugar Gum sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_sugar_gum(pos) - elseif node.name == "base:swamp_bloodwood_sapling" then - minetest.log("action", "A Swamp Bloodwood sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_swamp_bloodwood(pos) - elseif node.name == "base:swamp_gum_sapling" then - minetest.log("action", "A Swamp Gum sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_swamp_gum(pos) - elseif node.name == "base:swamp_paperbark_sapling" then - minetest.log("action", "A Swamp Paperbark sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_swamp_paperbark(pos) - elseif node.name == "base:tasmanian_myrtle_sapling" then - minetest.log("action", "A Tasmanian Myrtle sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_tasmanian_myrtle(pos) - elseif node.name == "base:tea_tree_sapling" then - minetest.log("action", "A Tea Tree sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_tea_tree(pos) - elseif node.name == "base:waratah_sapling" then - minetest.log("action", "A Waratah sapling grows into a bush at ".. - minetest.pos_to_string(pos)) - base.grow_waratah(pos) - elseif node.name == "base:white_box_sapling" then - minetest.log("action", "A White Box sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_white_box(pos) - elseif node.name == "base:wirewood_sapling" then - minetest.log("action", "A Wirewood sapling grows into a tree at ".. - minetest.pos_to_string(pos)) - base.grow_wirewood(pos) - end -end - -minetest.register_lbm({ - name = "default:convert_saplings_to_node_timer", - nodenames = { - "default:sapling", - "default:junglesapling", - "default:pine_sapling", - "default:acacia_sapling", - "default:aspen_sapling", - "base:arnhem_cypress_pine_sapling", - "base:black_box_sapling", - "base:black_wattle_sapling", - "base:blue_gum_sapling", - "base:boab_sapling", - "base:bull_banksia_sapling", - "base:celery_top_pine_sapling", - "base:cherry_sapling", - "base:coast_banksia_sapling", - "base:coolabah_sapling", - "base:daintree_stringybark_sapling", - "base:darwin_woollybutt_sapling", - "base:desert_oak_sapling", - "base:fan_palm_sapling", - "base:flame_grevillea_sapling", - "base:golden_wattle_sapling", - "base:grey_mangrove_sapling", - "base:huon_pine_sapling", - "base:illawarra_flame_sapling", - "base:jarrah_sapling", - "base:karri_sapling", - "base:lemon_eucalyptus_sapling", - "base:lemon_myrtle_sapling", - "base:lilly_pilly_sapling", - "base:macadamia_sapling", - "base:mangrove_apple_sapling", - "base:marri_sapling", - "base:merbau_sapling", - "base:moreton_bay_fig_sapling", - "base:mulga_sapling", - "base:palm_sapling", - "base:paperbark_sapling", - "base:quandong_sapling", - "base:red_bottlebrush_sapling", - "base:river_oak_sapling", - "base:river_red_gum_sapling", - "base:rottnest_island_pine_sapling", - "base:scribbly_gum_sapling", - "base:shoestring_acacia_sapling", - "base:snow_gum_sapling", - "base:southern_sassafras_sapling", - "base:stilted_mangrove_sapling", - "base:sugar_gum_sapling", - "base:swamp_bloodwood_sapling", - "base:swamp_gum_sapling", - "base:swamp_paperbark_sapling", - "base:tasmanian_myrtle_sapling", - "base:tea_tree_sapling", - "base:waratah_sapling", - "base:white_box_sapling", - "base:wirewood_sapling" - }, - action = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) - end -}) - --- --- Tree generation --- - --- Apple tree and jungle tree trunk and leaves function - -local function add_trunk_and_leaves(data, a, pos, tree_cid, leaves_cid, - height, size, iters, is_apple_tree) - local x, y, z = pos.x, pos.y, pos.z - local c_air = minetest.get_content_id("air") - local c_ignore = minetest.get_content_id("ignore") - local c_apple = minetest.get_content_id("default:apple") - - -- Trunk - data[a:index(x, y, z)] = tree_cid -- Force-place lowest trunk node to replace sapling - for yy = y + 1, y + height - 1 do - local vi = a:index(x, yy, z) - local node_id = data[vi] - if node_id == c_air or node_id == c_ignore or node_id == leaves_cid then - data[vi] = tree_cid - end - end - - -- Force leaves near the trunk - for z_dist = -1, 1 do - for y_dist = -size, 1 do - local vi = a:index(x - 1, y + height + y_dist, z + z_dist) - for x_dist = -1, 1 do - if data[vi] == c_air or data[vi] == c_ignore then - if is_apple_tree and random(1, 8) == 1 then - data[vi] = c_apple - else - data[vi] = leaves_cid - end - end - vi = vi + 1 - end - end - end - - -- Randomly add leaves in 2x2x2 clusters. - for i = 1, iters do - local clust_x = x + random(-size, size - 1) - local clust_y = y + height + random(-size, 0) - local clust_z = z + random(-size, size - 1) - - for xi = 0, 1 do - for yi = 0, 1 do - for zi = 0, 1 do - local vi = a:index(clust_x + xi, clust_y + yi, clust_z + zi) - if data[vi] == c_air or data[vi] == c_ignore then - if is_apple_tree and random(1, 8) == 1 then - data[vi] = c_apple - else - data[vi] = leaves_cid - end - end - end - end - end - end -end - - --- Apple tree - -function default.grow_tree(pos, is_apple_tree, bad) - --[[ - NOTE: Tree-placing code is currently duplicated in the engine - and in games that have saplings; both are deprecated but not - replaced yet - --]] - if bad then - error("Deprecated use of default.grow_tree") - end - - local x, y, z = pos.x, pos.y, pos.z - local height = random(4, 5) - local c_tree = minetest.get_content_id("default:tree") - local c_leaves = minetest.get_content_id("default:leaves") - - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = x - 2, y = y, z = z - 2}, - {x = x + 2, y = y + height + 1, z = z + 2} - ) - local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - - add_trunk_and_leaves(data, a, pos, c_tree, c_leaves, height, 2, 8, is_apple_tree) - - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - - --- Jungle tree - -function default.grow_jungle_tree(pos, bad) - --[[ - NOTE: Jungletree-placing code is currently duplicated in the engine - and in games that have saplings; both are deprecated but not - replaced yet - --]] - if bad then - error("Deprecated use of default.grow_jungle_tree") - end - - local x, y, z = pos.x, pos.y, pos.z - local height = random(8, 12) - local c_air = minetest.get_content_id("air") - local c_ignore = minetest.get_content_id("ignore") - local c_jungletree = minetest.get_content_id("default:jungletree") - local c_jungleleaves = minetest.get_content_id("default:jungleleaves") - - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = x - 3, y = y - 1, z = z - 3}, - {x = x + 3, y = y + height + 1, z = z + 3} - ) - local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - - add_trunk_and_leaves(data, a, pos, c_jungletree, c_jungleleaves, - height, 3, 30, false) - - -- Roots - for z_dist = -1, 1 do - local vi_1 = a:index(x - 1, y - 1, z + z_dist) - local vi_2 = a:index(x - 1, y, z + z_dist) - for x_dist = -1, 1 do - if random(1, 3) >= 2 then - if data[vi_1] == c_air or data[vi_1] == c_ignore then - data[vi_1] = c_jungletree - elseif data[vi_2] == c_air or data[vi_2] == c_ignore then - data[vi_2] = c_jungletree - end - end - vi_1 = vi_1 + 1 - vi_2 = vi_2 + 1 - end - end - - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - - --- Pine tree from mg mapgen mod, design by sfan5, pointy top added by paramat - -local function add_pine_needles(data, vi, c_air, c_ignore, c_snow, c_pine_needles) - local node_id = data[vi] - if node_id == c_air or node_id == c_ignore or node_id == c_snow then - data[vi] = c_pine_needles - end -end - -local function add_snow(data, vi, c_air, c_ignore, c_snow) - local node_id = data[vi] - if node_id == c_air or node_id == c_ignore then - data[vi] = c_snow - end -end - -function default.grow_pine_tree(pos, snow) - local x, y, z = pos.x, pos.y, pos.z - local maxy = y + random(9, 13) -- Trunk top - - local c_air = minetest.get_content_id("air") - local c_ignore = minetest.get_content_id("ignore") - local c_pine_tree = minetest.get_content_id("default:pine_tree") - local c_pine_needles = minetest.get_content_id("default:pine_needles") - local c_snow = minetest.get_content_id("default:snow") - - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map( - {x = x - 3, y = y, z = z - 3}, - {x = x + 3, y = maxy + 3, z = z + 3} - ) - local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - - -- Upper branches layer - local dev = 3 - for yy = maxy - 1, maxy + 1 do - for zz = z - dev, z + dev do - local vi = a:index(x - dev, yy, zz) - local via = a:index(x - dev, yy + 1, zz) - for xx = x - dev, x + dev do - if random() < 0.95 - dev * 0.05 then - add_pine_needles(data, vi, c_air, c_ignore, c_snow, - c_pine_needles) - if snow then - add_snow(data, via, c_air, c_ignore, c_snow) - end - end - vi = vi + 1 - via = via + 1 - end - end - dev = dev - 1 - end - - -- Centre top nodes - add_pine_needles(data, a:index(x, maxy + 1, z), c_air, c_ignore, c_snow, - c_pine_needles) - add_pine_needles(data, a:index(x, maxy + 2, z), c_air, c_ignore, c_snow, - c_pine_needles) -- Paramat added a pointy top node - if snow then - add_snow(data, a:index(x, maxy + 3, z), c_air, c_ignore, c_snow) - end - - -- Lower branches layer - local my = 0 - for i = 1, 20 do -- Random 2x2 squares of needles - local xi = x + random(-3, 2) - local yy = maxy + random(-6, -5) - local zi = z + random(-3, 2) - if yy > my then - my = yy - end - for zz = zi, zi+1 do - local vi = a:index(xi, yy, zz) - local via = a:index(xi, yy + 1, zz) - for xx = xi, xi + 1 do - add_pine_needles(data, vi, c_air, c_ignore, c_snow, - c_pine_needles) - if snow then - add_snow(data, via, c_air, c_ignore, c_snow) - end - vi = vi + 1 - via = via + 1 - end - end - end - - dev = 2 - for yy = my + 1, my + 2 do - for zz = z - dev, z + dev do - local vi = a:index(x - dev, yy, zz) - local via = a:index(x - dev, yy + 1, zz) - for xx = x - dev, x + dev do - if random() < 0.95 - dev * 0.05 then - add_pine_needles(data, vi, c_air, c_ignore, c_snow, - c_pine_needles) - if snow then - add_snow(data, via, c_air, c_ignore, c_snow) - end - end - vi = vi + 1 - via = via + 1 - end - end - dev = dev - 1 - end - - -- Trunk - -- Force-place lowest trunk node to replace sapling - data[a:index(x, y, z)] = c_pine_tree - for yy = y + 1, maxy do - local vi = a:index(x, yy, z) - local node_id = data[vi] - if node_id == c_air or node_id == c_ignore or - node_id == c_pine_needles or node_id == c_snow then - data[vi] = c_pine_tree - end - end - - vm:set_data(data) - vm:write_to_map() - vm:update_map() -end - - --- New apple tree - -function default.grow_new_apple_tree(pos) - local path = minetest.get_modpath("default") .. - "/schematics/apple_tree_from_sapling.mts" - minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, - path, "random", nil, false) -end - - --- New jungle tree - -function default.grow_new_jungle_tree(pos) - local path = minetest.get_modpath("default") .. - "/schematics/jungle_tree_from_sapling.mts" - minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, - path, "random", nil, false) -end - - --- New pine tree - -function default.grow_new_pine_tree(pos) - local path = minetest.get_modpath("default") .. - "/schematics/pine_tree_from_sapling.mts" - minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, - path, "0", nil, false) -end - - --- New snowy pine tree - -function default.grow_new_snowy_pine_tree(pos) - local path = minetest.get_modpath("default") .. - "/schematics/snowy_pine_tree_from_sapling.mts" - minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, - path, "random", nil, false) -end - - --- New acacia tree - -function default.grow_new_acacia_tree(pos) - local path = minetest.get_modpath("default") .. - "/schematics/acacia_tree_from_sapling.mts" - minetest.place_schematic({x = pos.x - 4, y = pos.y - 1, z = pos.z - 4}, - path, "random", nil, false) -end - - --- New aspen tree - -function default.grow_new_aspen_tree(pos) - local path = minetest.get_modpath("default") .. - "/schematics/aspen_tree_from_sapling.mts" - minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, - path, "0", nil, false) -end - - --- Bushes do not need 'from sapling' schematic variants because --- only the stem node is force-placed in the schematic. - --- Bush - -function default.grow_bush(pos) - local path = minetest.get_modpath("default") .. - "/schematics/bush.mts" - minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, - path, "0", nil, false) -end - - --- Acacia bush - -function default.grow_acacia_bush(pos) - local path = minetest.get_modpath("default") .. - "/schematics/acacia_bush.mts" - minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, - path, "0", nil, false) -end - - --- --- Sapling 'on place' function to check protection of node and resulting tree volume --- - -function default.sapling_on_place(itemstack, placer, pointed_thing, - sapling_name, minp_relative, maxp_relative, interval) - -- Position of sapling - local pos = pointed_thing.under - local node = minetest.get_node_or_nil(pos) - local pdef = node and minetest.registered_nodes[node.name] - - if pdef and pdef.on_rightclick and not placer:get_player_control().sneak then - return pdef.on_rightclick(pos, node, placer, itemstack, pointed_thing) - end - - if not pdef or not pdef.buildable_to then - pos = pointed_thing.above - node = minetest.get_node_or_nil(pos) - pdef = node and minetest.registered_nodes[node.name] - if not pdef or not pdef.buildable_to then - return itemstack - end - end - - local player_name = placer:get_player_name() - -- Check sapling position for protection - if minetest.is_protected(pos, player_name) then - minetest.record_protection_violation(pos, player_name) - return itemstack - end - -- Check tree volume for protection - if default.intersects_protection( - vector.add(pos, minp_relative), - vector.add(pos, maxp_relative), - player_name, - interval) then - minetest.record_protection_violation(pos, player_name) - -- Print extra information to explain - minetest.chat_send_player(player_name, "Tree will intersect protection") - return itemstack - end - - minetest.log("action", player_name .. " places node " - .. sapling_name .. " at " .. minetest.pos_to_string(pos)) - - local take_item = not (creative and creative.is_enabled_for - and creative.is_enabled_for(player_name)) - local newnode = {name = sapling_name} - local ndef = minetest.registered_nodes[sapling_name] - minetest.set_node(pos, newnode) - - -- Run callback - if ndef and ndef.after_place_node then - -- Deepcopy place_to and pointed_thing because callback can modify it - if ndef.after_place_node(table.copy(pos), placer, - itemstack, table.copy(pointed_thing)) then - take_item = false - end - end - - -- Run script hook - for _, callback in ipairs(minetest.registered_on_placenodes) do - -- Deepcopy pos, node and pointed_thing because callback can modify them - if callback(table.copy(pos), table.copy(newnode), - placer, table.copy(node or {}), - itemstack, table.copy(pointed_thing)) then - take_item = false - end - end - - if take_item then - itemstack:take_item() - end - - return itemstack -end - - --- --- register trees for leafdecay --- - -default.register_leafdecay({ - trunks = {"default:tree"}, leaves = {"default:apple", "default:leaves"}, radius = 3, -}) - -default.register_leafdecay({ - trunks = {"default:jungletree"}, leaves = {"default:jungleleaves"}, radius = 2, -}) - -default.register_leafdecay({ - trunks = {"default:pine_tree"}, leaves = {"default:pine_needles"}, radius = 2, -}) - -default.register_leafdecay({ - trunks = {"default:acacia_tree"}, leaves = {"default:acacia_leaves"}, radius = 2, -}) - -default.register_leafdecay({ - trunks = {"default:aspen_tree"}, leaves = {"default:aspen_leaves"}, radius = 3, -}) - -default.register_leafdecay({ - trunks = {"default:bush_stem"}, leaves = {"default:bush_leaves"}, radius = 1, -}) - -default.register_leafdecay({ - trunks = {"default:acacia_bush_stem"}, leaves = {"default:acacia_bush_leaves"}, radius = 1, -}) - - diff --git a/mods/ITEMS/default/schematics/acacia_bush.mts b/mods/ITEMS/default/schematics/acacia_bush.mts deleted file mode 100644 index df95586..0000000 Binary files a/mods/ITEMS/default/schematics/acacia_bush.mts and /dev/null differ diff --git a/mods/ITEMS/default/schematics/acacia_tree.mts b/mods/ITEMS/default/schematics/acacia_tree.mts deleted file mode 100644 index 4732ade..0000000 Binary files a/mods/ITEMS/default/schematics/acacia_tree.mts and /dev/null differ diff --git a/mods/ITEMS/default/schematics/acacia_tree_from_sapling.mts b/mods/ITEMS/default/schematics/acacia_tree_from_sapling.mts deleted file mode 100644 index 23e8e4b..0000000 Binary files a/mods/ITEMS/default/schematics/acacia_tree_from_sapling.mts and /dev/null differ diff --git a/mods/ITEMS/default/schematics/jungle_tree.mts b/mods/ITEMS/default/schematics/jungle_tree.mts deleted file mode 100644 index 01a1b11..0000000 Binary files a/mods/ITEMS/default/schematics/jungle_tree.mts and /dev/null differ diff --git a/mods/ITEMS/default/schematics/jungle_tree_from_sapling.mts b/mods/ITEMS/default/schematics/jungle_tree_from_sapling.mts deleted file mode 100644 index f93f014..0000000 Binary files a/mods/ITEMS/default/schematics/jungle_tree_from_sapling.mts and /dev/null differ diff --git a/mods/ITEMS/default/schematics/pine_tree.mts b/mods/ITEMS/default/schematics/pine_tree.mts deleted file mode 100644 index 6f27d83..0000000 Binary files a/mods/ITEMS/default/schematics/pine_tree.mts and /dev/null differ diff --git a/mods/ITEMS/default/schematics/pine_tree_from_sapling.mts b/mods/ITEMS/default/schematics/pine_tree_from_sapling.mts deleted file mode 100644 index e42a996..0000000 Binary files a/mods/ITEMS/default/schematics/pine_tree_from_sapling.mts and /dev/null differ diff --git a/mods/ITEMS/default/schematics/snowy_pine_tree_from_sapling.mts b/mods/ITEMS/default/schematics/snowy_pine_tree_from_sapling.mts deleted file mode 100644 index 0692049..0000000 Binary files a/mods/ITEMS/default/schematics/snowy_pine_tree_from_sapling.mts and /dev/null differ diff --git a/mods/ITEMS/default/sounds.lua b/mods/ITEMS/default/sounds.lua deleted file mode 100644 index 9f5fffd..0000000 --- a/mods/ITEMS/default/sounds.lua +++ /dev/null @@ -1,117 +0,0 @@ ---[[ - Default sounds ---]] - -function default.node_sound_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "", gain = 1.0} - table.dug = table.dug or - {name = "default_dug_node", gain = 0.25} - table.place = table.place or - {name = "default_place_node_hard", gain = 1.0} - return table -end - -function default.node_sound_stone_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_hard_footstep", gain = 0.3} - table.dug = table.dug or - {name = "default_hard_footstep", gain = 1.0} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_dirt_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_dirt_footstep", gain = 0.4} - table.dug = table.dug or - {name = "default_dirt_footstep", gain = 1.0} - table.place = table.place or - {name = "default_place_node", gain = 1.0} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_sand_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_sand_footstep", gain = 0.12} - table.dug = table.dug or - {name = "default_sand_footstep", gain = 0.24} - table.place = table.place or - {name = "default_place_node", gain = 1.0} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_gravel_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_gravel_footstep", gain = 0.4} - table.dug = table.dug or - {name = "default_gravel_footstep", gain = 1.0} - table.place = table.place or - {name = "default_place_node", gain = 1.0} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_wood_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_wood_footstep", gain = 0.3} - table.dug = table.dug or - {name = "default_wood_footstep", gain = 1.0} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_leaves_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_grass_footstep", gain = 0.45} - table.dug = table.dug or - {name = "default_grass_footstep", gain = 0.7} - table.place = table.place or - {name = "default_place_node", gain = 1.0} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_glass_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_glass_footstep", gain = 0.3} - table.dig = table.dig or - {name = "default_glass_footstep", gain = 0.5} - table.dug = table.dug or - {name = "default_break_glass", gain = 1.0} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_metal_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_metal_footstep", gain = 0.4} - table.dig = table.dig or - {name = "default_dig_metal", gain = 0.5} - table.dug = table.dug or - {name = "default_dug_metal", gain = 0.5} - table.place = table.place or - {name = "default_place_node_metal", gain = 0.5} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_water_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name = "default_water_footstep", gain = 0.2} - default.node_sound_defaults(table) - return table -end - diff --git a/mods/ITEMS/default/sounds/default_dirt_footstep.1.ogg b/mods/ITEMS/default/sounds/default_dirt_footstep.1.ogg deleted file mode 100644 index 84a197d..0000000 Binary files a/mods/ITEMS/default/sounds/default_dirt_footstep.1.ogg and /dev/null differ diff --git a/mods/ITEMS/default/sounds/default_dirt_footstep.2.ogg b/mods/ITEMS/default/sounds/default_dirt_footstep.2.ogg deleted file mode 100644 index 2e23b8a..0000000 Binary files a/mods/ITEMS/default/sounds/default_dirt_footstep.2.ogg and /dev/null differ diff --git a/mods/ITEMS/default/sounds/default_snow_footstep.1.ogg b/mods/ITEMS/default/sounds/default_snow_footstep.1.ogg deleted file mode 100644 index 3260b91..0000000 Binary files a/mods/ITEMS/default/sounds/default_snow_footstep.1.ogg and /dev/null differ diff --git a/mods/ITEMS/default/sounds/default_snow_footstep.2.ogg b/mods/ITEMS/default/sounds/default_snow_footstep.2.ogg deleted file mode 100644 index 4aac1e7..0000000 Binary files a/mods/ITEMS/default/sounds/default_snow_footstep.2.ogg and /dev/null differ diff --git a/mods/ITEMS/default/sounds/default_snow_footstep.3.ogg b/mods/ITEMS/default/sounds/default_snow_footstep.3.ogg deleted file mode 100644 index cf4235b..0000000 Binary files a/mods/ITEMS/default/sounds/default_snow_footstep.3.ogg and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_acacia_bush_sapling.png b/mods/ITEMS/default/textures/default_acacia_bush_sapling.png deleted file mode 100644 index d4faae8..0000000 Binary files a/mods/ITEMS/default/textures/default_acacia_bush_sapling.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_acacia_bush_stem.png b/mods/ITEMS/default/textures/default_acacia_bush_stem.png deleted file mode 100644 index 504ae39..0000000 Binary files a/mods/ITEMS/default/textures/default_acacia_bush_stem.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_acacia_leaves.png b/mods/ITEMS/default/textures/default_acacia_leaves.png deleted file mode 100644 index 68135ae..0000000 Binary files a/mods/ITEMS/default/textures/default_acacia_leaves.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_acacia_leaves_simple.png b/mods/ITEMS/default/textures/default_acacia_leaves_simple.png deleted file mode 100644 index 68135ae..0000000 Binary files a/mods/ITEMS/default/textures/default_acacia_leaves_simple.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_acacia_sapling.png b/mods/ITEMS/default/textures/default_acacia_sapling.png deleted file mode 100644 index bc27940..0000000 Binary files a/mods/ITEMS/default/textures/default_acacia_sapling.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_acacia_tree.png b/mods/ITEMS/default/textures/default_acacia_tree.png deleted file mode 100644 index 0251198..0000000 Binary files a/mods/ITEMS/default/textures/default_acacia_tree.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_acacia_tree_top.png b/mods/ITEMS/default/textures/default_acacia_tree_top.png deleted file mode 100644 index 4c8a492..0000000 Binary files a/mods/ITEMS/default/textures/default_acacia_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_acacia_wood.png b/mods/ITEMS/default/textures/default_acacia_wood.png deleted file mode 100644 index 9926d64..0000000 Binary files a/mods/ITEMS/default/textures/default_acacia_wood.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_apple.png b/mods/ITEMS/default/textures/default_apple.png deleted file mode 100644 index b6f5170..0000000 Binary files a/mods/ITEMS/default/textures/default_apple.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_aspen_leaves.png b/mods/ITEMS/default/textures/default_aspen_leaves.png deleted file mode 100644 index 2ffda8f..0000000 Binary files a/mods/ITEMS/default/textures/default_aspen_leaves.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_aspen_leaves_simple.png b/mods/ITEMS/default/textures/default_aspen_leaves_simple.png deleted file mode 100644 index 2ffda8f..0000000 Binary files a/mods/ITEMS/default/textures/default_aspen_leaves_simple.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_aspen_sapling.png b/mods/ITEMS/default/textures/default_aspen_sapling.png deleted file mode 100644 index 4e97ec9..0000000 Binary files a/mods/ITEMS/default/textures/default_aspen_sapling.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_aspen_tree.png b/mods/ITEMS/default/textures/default_aspen_tree.png deleted file mode 100644 index 73a6dbc..0000000 Binary files a/mods/ITEMS/default/textures/default_aspen_tree.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_aspen_tree_top.png b/mods/ITEMS/default/textures/default_aspen_tree_top.png deleted file mode 100644 index f105a5f..0000000 Binary files a/mods/ITEMS/default/textures/default_aspen_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_aspen_wood.png b/mods/ITEMS/default/textures/default_aspen_wood.png deleted file mode 100644 index 0e89da5..0000000 Binary files a/mods/ITEMS/default/textures/default_aspen_wood.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_bronze_block.png b/mods/ITEMS/default/textures/default_bronze_block.png deleted file mode 100644 index e538af6..0000000 Binary files a/mods/ITEMS/default/textures/default_bronze_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_bronze_ingot.png b/mods/ITEMS/default/textures/default_bronze_ingot.png deleted file mode 100644 index dd0e410..0000000 Binary files a/mods/ITEMS/default/textures/default_bronze_ingot.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_bush_sapling.png b/mods/ITEMS/default/textures/default_bush_sapling.png deleted file mode 100644 index 8766e33..0000000 Binary files a/mods/ITEMS/default/textures/default_bush_sapling.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_bush_stem.png b/mods/ITEMS/default/textures/default_bush_stem.png deleted file mode 100644 index f7f585c..0000000 Binary files a/mods/ITEMS/default/textures/default_bush_stem.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_cactus_side.png b/mods/ITEMS/default/textures/default_cactus_side.png deleted file mode 100644 index 0aef66d..0000000 Binary files a/mods/ITEMS/default/textures/default_cactus_side.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_cactus_top.png b/mods/ITEMS/default/textures/default_cactus_top.png deleted file mode 100644 index 2ef92d0..0000000 Binary files a/mods/ITEMS/default/textures/default_cactus_top.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_clay_brick.png b/mods/ITEMS/default/textures/default_clay_brick.png deleted file mode 100644 index 7fceafc..0000000 Binary files a/mods/ITEMS/default/textures/default_clay_brick.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_clay_lump.png b/mods/ITEMS/default/textures/default_clay_lump.png deleted file mode 100644 index 8a0000d..0000000 Binary files a/mods/ITEMS/default/textures/default_clay_lump.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_coal_block.png b/mods/ITEMS/default/textures/default_coal_block.png deleted file mode 100644 index 67e87a5..0000000 Binary files a/mods/ITEMS/default/textures/default_coal_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_coal_lump.png b/mods/ITEMS/default/textures/default_coal_lump.png deleted file mode 100644 index 57c6aab..0000000 Binary files a/mods/ITEMS/default/textures/default_coal_lump.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_copper_block.png b/mods/ITEMS/default/textures/default_copper_block.png deleted file mode 100644 index 508c303..0000000 Binary files a/mods/ITEMS/default/textures/default_copper_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_copper_ingot.png b/mods/ITEMS/default/textures/default_copper_ingot.png deleted file mode 100644 index f6ae850..0000000 Binary files a/mods/ITEMS/default/textures/default_copper_ingot.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_copper_lump.png b/mods/ITEMS/default/textures/default_copper_lump.png deleted file mode 100644 index 2ec0010..0000000 Binary files a/mods/ITEMS/default/textures/default_copper_lump.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_diamond.png b/mods/ITEMS/default/textures/default_diamond.png deleted file mode 100644 index 45ec32e..0000000 Binary files a/mods/ITEMS/default/textures/default_diamond.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_diamond_block.png b/mods/ITEMS/default/textures/default_diamond_block.png deleted file mode 100644 index 8073002..0000000 Binary files a/mods/ITEMS/default/textures/default_diamond_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_flint.png b/mods/ITEMS/default/textures/default_flint.png deleted file mode 100644 index d79495e..0000000 Binary files a/mods/ITEMS/default/textures/default_flint.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_glass.png b/mods/ITEMS/default/textures/default_glass.png deleted file mode 100644 index 8b35d89..0000000 Binary files a/mods/ITEMS/default/textures/default_glass.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_glass_detail.png b/mods/ITEMS/default/textures/default_glass_detail.png deleted file mode 100644 index 9c426cc..0000000 Binary files a/mods/ITEMS/default/textures/default_glass_detail.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_gold_block.png b/mods/ITEMS/default/textures/default_gold_block.png deleted file mode 100644 index 7a7f91d..0000000 Binary files a/mods/ITEMS/default/textures/default_gold_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_gold_ingot.png b/mods/ITEMS/default/textures/default_gold_ingot.png deleted file mode 100644 index 9012daa..0000000 Binary files a/mods/ITEMS/default/textures/default_gold_ingot.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_gold_lump.png b/mods/ITEMS/default/textures/default_gold_lump.png deleted file mode 100644 index e247c4a..0000000 Binary files a/mods/ITEMS/default/textures/default_gold_lump.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_grass_footsteps.png b/mods/ITEMS/default/textures/default_grass_footsteps.png deleted file mode 100644 index bf7261b..0000000 Binary files a/mods/ITEMS/default/textures/default_grass_footsteps.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_iron_lump.png b/mods/ITEMS/default/textures/default_iron_lump.png deleted file mode 100644 index 15857bd..0000000 Binary files a/mods/ITEMS/default/textures/default_iron_lump.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_junglegrass.png b/mods/ITEMS/default/textures/default_junglegrass.png deleted file mode 100644 index f5e9b26..0000000 Binary files a/mods/ITEMS/default/textures/default_junglegrass.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_jungleleaves.png b/mods/ITEMS/default/textures/default_jungleleaves.png deleted file mode 100644 index 62f90f4..0000000 Binary files a/mods/ITEMS/default/textures/default_jungleleaves.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_jungleleaves_simple.png b/mods/ITEMS/default/textures/default_jungleleaves_simple.png deleted file mode 100644 index 62f90f4..0000000 Binary files a/mods/ITEMS/default/textures/default_jungleleaves_simple.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_junglesapling.png b/mods/ITEMS/default/textures/default_junglesapling.png deleted file mode 100644 index 4e97ec9..0000000 Binary files a/mods/ITEMS/default/textures/default_junglesapling.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_jungletree.png b/mods/ITEMS/default/textures/default_jungletree.png deleted file mode 100644 index 660dbfd..0000000 Binary files a/mods/ITEMS/default/textures/default_jungletree.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_jungletree_top.png b/mods/ITEMS/default/textures/default_jungletree_top.png deleted file mode 100644 index 6eb68eb..0000000 Binary files a/mods/ITEMS/default/textures/default_jungletree_top.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_junglewood.png b/mods/ITEMS/default/textures/default_junglewood.png deleted file mode 100644 index 4bb9164..0000000 Binary files a/mods/ITEMS/default/textures/default_junglewood.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_ladder.png b/mods/ITEMS/default/textures/default_ladder.png deleted file mode 100644 index ea7310a..0000000 Binary files a/mods/ITEMS/default/textures/default_ladder.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_ladder_steel.png b/mods/ITEMS/default/textures/default_ladder_steel.png deleted file mode 100644 index f59623d..0000000 Binary files a/mods/ITEMS/default/textures/default_ladder_steel.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_ladder_wood.png b/mods/ITEMS/default/textures/default_ladder_wood.png deleted file mode 100644 index ea7310a..0000000 Binary files a/mods/ITEMS/default/textures/default_ladder_wood.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_leaves.png b/mods/ITEMS/default/textures/default_leaves.png deleted file mode 100644 index e8d88ba..0000000 Binary files a/mods/ITEMS/default/textures/default_leaves.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_leaves_simple.png b/mods/ITEMS/default/textures/default_leaves_simple.png deleted file mode 100644 index 3b36fa6..0000000 Binary files a/mods/ITEMS/default/textures/default_leaves_simple.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_mese.png b/mods/ITEMS/default/textures/default_mese.png deleted file mode 100644 index 57afcc0..0000000 Binary files a/mods/ITEMS/default/textures/default_mese.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_mese_block.png b/mods/ITEMS/default/textures/default_mese_block.png deleted file mode 100644 index 7a663d2..0000000 Binary files a/mods/ITEMS/default/textures/default_mese_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_mese_crystal.png b/mods/ITEMS/default/textures/default_mese_crystal.png deleted file mode 100644 index ef15344..0000000 Binary files a/mods/ITEMS/default/textures/default_mese_crystal.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_mese_crystal_fragment.png b/mods/ITEMS/default/textures/default_mese_crystal_fragment.png deleted file mode 100644 index e7b2faf..0000000 Binary files a/mods/ITEMS/default/textures/default_mese_crystal_fragment.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_mese_post_light_side.png b/mods/ITEMS/default/textures/default_mese_post_light_side.png deleted file mode 100644 index f45d42b..0000000 Binary files a/mods/ITEMS/default/textures/default_mese_post_light_side.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_mese_post_light_side_dark.png b/mods/ITEMS/default/textures/default_mese_post_light_side_dark.png deleted file mode 100644 index 2186027..0000000 Binary files a/mods/ITEMS/default/textures/default_mese_post_light_side_dark.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_mese_post_light_top.png b/mods/ITEMS/default/textures/default_mese_post_light_top.png deleted file mode 100644 index 127f0cb..0000000 Binary files a/mods/ITEMS/default/textures/default_mese_post_light_top.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_meselamp.png b/mods/ITEMS/default/textures/default_meselamp.png deleted file mode 100644 index fb9a39b..0000000 Binary files a/mods/ITEMS/default/textures/default_meselamp.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_obsidian_block.png b/mods/ITEMS/default/textures/default_obsidian_block.png deleted file mode 100644 index b6674fa..0000000 Binary files a/mods/ITEMS/default/textures/default_obsidian_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_obsidian_brick.png b/mods/ITEMS/default/textures/default_obsidian_brick.png deleted file mode 100644 index 37dee80..0000000 Binary files a/mods/ITEMS/default/textures/default_obsidian_brick.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_obsidian_glass.png b/mods/ITEMS/default/textures/default_obsidian_glass.png deleted file mode 100644 index 008d201..0000000 Binary files a/mods/ITEMS/default/textures/default_obsidian_glass.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_obsidian_shard.png b/mods/ITEMS/default/textures/default_obsidian_shard.png deleted file mode 100644 index b5ef261..0000000 Binary files a/mods/ITEMS/default/textures/default_obsidian_shard.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_papyrus.png b/mods/ITEMS/default/textures/default_papyrus.png deleted file mode 100644 index 378900e..0000000 Binary files a/mods/ITEMS/default/textures/default_papyrus.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_pine_needles.png b/mods/ITEMS/default/textures/default_pine_needles.png deleted file mode 100644 index d22bed1..0000000 Binary files a/mods/ITEMS/default/textures/default_pine_needles.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_pine_sapling.png b/mods/ITEMS/default/textures/default_pine_sapling.png deleted file mode 100644 index 2721570..0000000 Binary files a/mods/ITEMS/default/textures/default_pine_sapling.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_pine_tree.png b/mods/ITEMS/default/textures/default_pine_tree.png deleted file mode 100644 index 8c85e42..0000000 Binary files a/mods/ITEMS/default/textures/default_pine_tree.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_pine_tree_top.png b/mods/ITEMS/default/textures/default_pine_tree_top.png deleted file mode 100644 index f105a5f..0000000 Binary files a/mods/ITEMS/default/textures/default_pine_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_pine_wood.png b/mods/ITEMS/default/textures/default_pine_wood.png deleted file mode 100644 index 792b9c8..0000000 Binary files a/mods/ITEMS/default/textures/default_pine_wood.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_rainforest_litter.png b/mods/ITEMS/default/textures/default_rainforest_litter.png deleted file mode 100644 index 7cdffac..0000000 Binary files a/mods/ITEMS/default/textures/default_rainforest_litter.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_rainforest_litter_side.png b/mods/ITEMS/default/textures/default_rainforest_litter_side.png deleted file mode 100644 index 255a162..0000000 Binary files a/mods/ITEMS/default/textures/default_rainforest_litter_side.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_sandstone.png b/mods/ITEMS/default/textures/default_sandstone.png deleted file mode 100644 index bf5f803..0000000 Binary files a/mods/ITEMS/default/textures/default_sandstone.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_sandstone_block.png b/mods/ITEMS/default/textures/default_sandstone_block.png deleted file mode 100644 index cf5d888..0000000 Binary files a/mods/ITEMS/default/textures/default_sandstone_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_sandstone_brick.png b/mods/ITEMS/default/textures/default_sandstone_brick.png deleted file mode 100644 index da19435..0000000 Binary files a/mods/ITEMS/default/textures/default_sandstone_brick.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_sapling.png b/mods/ITEMS/default/textures/default_sapling.png deleted file mode 100644 index 0af62ec..0000000 Binary files a/mods/ITEMS/default/textures/default_sapling.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_steel_block.png b/mods/ITEMS/default/textures/default_steel_block.png deleted file mode 100644 index 37d3368..0000000 Binary files a/mods/ITEMS/default/textures/default_steel_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_steel_ingot.png b/mods/ITEMS/default/textures/default_steel_ingot.png deleted file mode 100644 index 2b72136..0000000 Binary files a/mods/ITEMS/default/textures/default_steel_ingot.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_tin_block.png b/mods/ITEMS/default/textures/default_tin_block.png deleted file mode 100644 index b4fb034..0000000 Binary files a/mods/ITEMS/default/textures/default_tin_block.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_tin_ingot.png b/mods/ITEMS/default/textures/default_tin_ingot.png deleted file mode 100644 index 0c92872..0000000 Binary files a/mods/ITEMS/default/textures/default_tin_ingot.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_tin_lump.png b/mods/ITEMS/default/textures/default_tin_lump.png deleted file mode 100644 index d84cdc3..0000000 Binary files a/mods/ITEMS/default/textures/default_tin_lump.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_tree.png b/mods/ITEMS/default/textures/default_tree.png deleted file mode 100644 index 4e1e2cd..0000000 Binary files a/mods/ITEMS/default/textures/default_tree.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_tree_top.png b/mods/ITEMS/default/textures/default_tree_top.png deleted file mode 100644 index 6eb68eb..0000000 Binary files a/mods/ITEMS/default/textures/default_tree_top.png and /dev/null differ diff --git a/mods/ITEMS/default/textures/default_wood.png b/mods/ITEMS/default/textures/default_wood.png deleted file mode 100644 index 8a4fd32..0000000 Binary files a/mods/ITEMS/default/textures/default_wood.png and /dev/null differ diff --git a/mods/ITEMS/doors/depends.txt b/mods/ITEMS/doors/depends.txt deleted file mode 100644 index 28660da..0000000 --- a/mods/ITEMS/doors/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -default -australia -screwdriver? diff --git a/mods/ITEMS/doors/init.lua b/mods/ITEMS/doors/init.lua deleted file mode 100644 index 2a96794..0000000 --- a/mods/ITEMS/doors/init.lua +++ /dev/null @@ -1,946 +0,0 @@ --- our API object -doors = {} - --- private data -local _doors = {} -_doors.registered_doors = {} -_doors.registered_trapdoors = {} - -local function replace_old_owner_information(pos) - local meta = minetest.get_meta(pos) - local owner = meta:get_string("doors_owner") - if owner and owner ~= "" then - meta:set_string("owner", owner) - meta:set_string("doors_owner", "") - end -end - --- returns an object to a door object or nil -function doors.get(pos) - local node_name = minetest.get_node(pos).name - 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 - } - else - return nil - 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", { - description = "Hidden Door Segment", - -- can't use airlike otherwise falling nodes will turn to entities - -- and will be forever stuck until door is removed. - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - -- has to be walkable for falling nodes to stop falling. - walkable = true, - pointable = false, - diggable = false, - buildable_to = false, - floodable = false, - drop = "", - groups = {not_in_creative_inventory = 1}, - on_blast = function() end, - tiles = {"doors_blank.png"}, - -- 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}, - }, - -- 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}, - }, -}) - --- 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 = "_b", param2 = 1}, - {v = "_b", param2 = 2}, - {v = "_b", param2 = 3}, - {v = "_b", param2 = 0}, - }, - { - {v = "_b", param2 = 1}, - {v = "_b", param2 = 2}, - {v = "_b", param2 = 3}, - {v = "_b", param2 = 0}, - }, - { - {v = "_a", param2 = 3}, - {v = "_a", param2 = 0}, - {v = "_a", param2 = 1}, - {v = "_a", param2 = 2}, - }, -} - -function _doors.door_toggle(pos, node, clicker) - local meta = minetest.get_meta(pos) - 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 - else - state = 0 - end - else - state = tonumber(state) - end - - replace_old_owner_information(pos) - - if clicker and not default.can_interact_with_node(clicker, pos) then - return false - end - - -- until Lua-5.2 we have no bitwise operators :( - if state % 2 == 1 then - state = state - 1 - else - state = state + 1 - end - - local dir = node.param2 - if state % 2 == 0 then - minetest.sound_play(def.door.sounds[1], - {pos = pos, gain = 0.3, max_hear_distance = 10}) - else - minetest.sound_play(def.door.sounds[2], - {pos = pos, gain = 0.3, max_hear_distance = 10}) - end - - minetest.swap_node(pos, { - name = name .. transform[state + 1][dir+1].v, - param2 = transform[state + 1][dir+1].param2 - }) - meta:set_int("state", state) - - return true -end - - -local function on_place_node(place_to, newnode, - placer, oldnode, itemstack, pointed_thing) - -- Run script hook - for _, callback in ipairs(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 pointed_thing_copy = { - type = pointed_thing.type, - above = vector.new(pointed_thing.above), - under = vector.new(pointed_thing.under), - ref = pointed_thing.ref, - } - 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) - if default.can_interact_with_node(digger, pos) then - return true - else - minetest.record_protection_violation(pos, digger:get_player_name()) - return false - end -end - -function doors.register(name, def) - if not name:find(":") then - name = "doors:" .. name - end - - -- replace old doors of this type automatically - 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}} - } - 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}) - end - }) - - minetest.register_craftitem(":" .. name, { - description = def.description, - inventory_image = def.inventory_image, - groups = table.copy(def.groups), - - on_place = function(itemstack, placer, pointed_thing) - local pos - - if not pointed_thing.type == "node" then - return itemstack - end - - local node = minetest.get_node(pointed_thing.under) - local pdef = minetest.registered_nodes[node.name] - if pdef and pdef.on_rightclick and - not placer:get_player_control().sneak then - return pdef.on_rightclick(pointed_thing.under, - node, placer, itemstack, pointed_thing) - end - - if pdef and pdef.buildable_to then - pos = pointed_thing.under - else - 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 top_node = minetest.get_node_or_nil(above) - local topdef = top_node and minetest.registered_nodes[top_node.name] - - if not topdef or not topdef.buildable_to then - return itemstack - end - - local pn = placer:get_player_name() - if minetest.is_protected(pos, pn) or minetest.is_protected(above, pn) then - return itemstack - end - - local dir = minetest.dir_to_facedir(placer:get_look_dir()) - - 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}, - } - - local aside = { - x = pos.x + ref[dir + 1].x, - y = pos.y + ref[dir + 1].y, - 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}) - minetest.set_node(above, {name = "doors:hidden", param2 = (dir + 3) % 4}) - else - minetest.set_node(pos, {name = name .. "_a", param2 = dir}) - minetest.set_node(above, {name = "doors:hidden", param2 = dir}) - end - - local meta = minetest.get_meta(pos) - meta:set_int("state", state) - - if def.protected then - meta:set_string("owner", pn) - meta:set_string("infotext", "Owned by " .. pn) - end - - if not (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) then - itemstack:take_item() - end - - minetest.sound_play(def.sounds.place, {pos = pos}) - - on_place_node(pos, minetest.get_node(pos), - placer, node, itemstack, pointed_thing) - - return itemstack - end - }) - def.inventory_image = nil - - if def.recipe then - minetest.register_craft({ - output = name, - recipe = def.recipe, - }) - end - def.recipe = nil - - if not def.sounds then - def.sounds = default.node_sound_wood_defaults() - end - - if not def.sound_open then - def.sound_open = "doors_door_open" - end - - if not def.sound_close then - def.sound_close = "doors_door_close" - end - - 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.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - _doors.door_toggle(pos, node, clicker) - return itemstack - 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 = 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 - def.on_key_use = function(pos, player) - local door = doors.get(pos) - door:toggle(player) - end - def.on_skeleton_key_use = function(pos, player, newsecret) - replace_old_owner_information(pos) - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - local pname = player:get_player_name() - - -- verify placer is owner of lockable door - if owner ~= pname then - minetest.record_protection_violation(pos, pname) - minetest.chat_send_player(pname, "You do not own this locked door.") - return nil - end - - local secret = meta:get_string("key_lock_secret") - if secret == "" then - secret = newsecret - meta:set_string("key_lock_secret", secret) - end - - return secret, "a locked door", owner - end - else - def.on_blast = function(pos, intensity) - minetest.remove_node(pos) - -- hidden node doesn't get blasted away. - minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) - return {name} - end - end - - def.on_destruct = function(pos) - minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) - end - - def.drawtype = "mesh" - def.paramtype = "light" - def.paramtype2 = "facedir" - def.sunlight_propagates = true - 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.mesh = "door_a.obj" - minetest.register_node(":" .. name .. "_a", def) - - def.mesh = "door_b.obj" - minetest.register_node(":" .. name .. "_b", def) - - _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"}, - } -}) - -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_metal_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"}, - } -}) - -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"}, - }, -}) - --- 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 " .. - "will be used instead.") - end - - doors.register(name, def) -end - -----trapdoor---- - -function _doors.trapdoor_toggle(pos, node, clicker) - node = node or minetest.get_node(pos) - - replace_old_owner_information(pos) - - if clicker and not default.can_interact_with_node(clicker, pos) then - return false - end - - local def = minetest.registered_nodes[node.name] - - 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}) - 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}) - end -end - -function doors.register_trapdoor(name, def) - if not name:find(":") then - name = "doors:" .. name - end - - local name_closed = name - local name_opened = name.."_open" - - def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - _doors.trapdoor_toggle(pos, node, clicker) - return itemstack - end - - -- Common trapdoor configuration - def.drawtype = "nodebox" - def.paramtype = "light" - def.paramtype2 = "facedir" - 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("owner", pn) - meta:set_string("infotext", "Owned by "..pn) - - return (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) - end - - def.on_blast = function() end - def.on_key_use = function(pos, player) - local door = doors.get(pos) - door:toggle(player) - end - def.on_skeleton_key_use = function(pos, player, newsecret) - replace_old_owner_information(pos) - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - local pname = player:get_player_name() - - -- verify placer is owner of lockable door - if owner ~= pname then - minetest.record_protection_violation(pos, pname) - minetest.chat_send_player(pname, "You do not own this trapdoor.") - return nil - end - - local secret = meta:get_string("key_lock_secret") - if secret == "" then - secret = newsecret - meta:set_string("key_lock_secret", secret) - end - - return secret, "a locked trapdoor", owner - end - else - def.on_blast = function(pos, intensity) - minetest.remove_node(pos) - return {name} - end - end - - if not def.sounds then - def.sounds = default.node_sound_wood_defaults() - end - - if not def.sound_open then - def.sound_open = "doors_door_open" - end - - if not def.sound_close then - def.sound_close = "doors_door_close" - end - - local def_opened = table.copy(def) - local def_closed = table.copy(def) - - def_closed.node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} - } - def_closed.selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} - } - def_closed.tiles = {def.tile_front, - def.tile_front .. '^[transformFY', - def.tile_side, def.tile_side, - def.tile_side, def.tile_side} - - def_opened.node_box = { - type = "fixed", - fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5} - } - def_opened.selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5} - } - def_opened.tiles = {def.tile_side, def.tile_side, - def.tile_side .. '^[transform3', - def.tile_side .. '^[transform1', - def.tile_front .. '^[transform46', - def.tile_front .. '^[transform6'} - - def_opened.drop = name_closed - def_opened.groups.not_in_creative_inventory = 1 - - minetest.register_node(name_opened, def_opened) - minetest.register_node(name_closed, def_closed) - - _doors.registered_trapdoors[name_opened] = true - _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}, -}) - -doors.register_trapdoor("doors:trapdoor_steel", { - description = "Steel Trapdoor", - inventory_image = "doors_trapdoor_steel.png", - wield_image = "doors_trapdoor_steel.png", - tile_front = "doors_trapdoor_steel.png", - tile_side = "doors_trapdoor_steel_side.png", - protected = true, - sounds = default.node_sound_metal_defaults(), - sound_open = "doors_steel_door_open", - sound_close = "doors_steel_door_close", - groups = {cracky = 1, level = 2, door = 1}, -}) - -minetest.register_craft({ - output = 'doors:trapdoor 2', - recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, - {'', '', ''}, - } -}) - -minetest.register_craft({ - output = 'doors:trapdoor_steel', - recipe = { - {'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot'}, - } -}) - - -----fence gate---- - -function doors.register_fencegate(name, def) - local fence = { - description = def.description, - drawtype = "mesh", - tiles = {def.texture}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = false, - drop = name .. "_closed", - 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}) - return itemstack - end, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4}, - }, - } - - if not fence.sounds then - fence.sounds = default.node_sound_wood_defaults() - end - - 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}, - } - - 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}, - {-1/2, -3/8, -1/2, -3/8, 3/8, 0}}, - } - - minetest.register_node(":" .. name .. "_closed", fence_closed) - minetest.register_node(":" .. name .. "_open", fence_open) - - minetest.register_craft({ - output = name .. "_closed", - recipe = { - {"default:stick", def.material, "default:stick"}, - {"default:stick", def.material, "default:stick"} - } - }) -end - -doors.register_fencegate("doors:gate_wood", { - description = "Wooden Fence Gate", - texture = "default_wood.png", - material = "default:wood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} -}) - -doors.register_fencegate("doors:gate_acacia_wood", { - description = "Acacia Fence Gate", - texture = "default_acacia_wood.png", - material = "default:acacia_wood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} -}) - -doors.register_fencegate("doors:gate_junglewood", { - description = "Jungle Wood Fence Gate", - texture = "default_junglewood.png", - material = "default:junglewood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} -}) - -doors.register_fencegate("doors:gate_pine_wood", { - description = "Pine Fence Gate", - texture = "default_pine_wood.png", - material = "default:pine_wood", - groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3} -}) - -doors.register_fencegate("doors:gate_aspen_wood", { - description = "Aspen Fence Gate", - texture = "default_aspen_wood.png", - material = "default:aspen_wood", - groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3} -}) - -doors.register_fencegate("doors:gate_eucalyptus", { - description = "Eucalyptus Fence Gate", - texture = "aus_eucalyptus_wood.png", - material = "australia:eucalyptus_wood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_blackwood", { - description = "Blackwood Fence Gate", - texture = "aus_blackwood.png", - material = "australia:blackwood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_blue_gum", { - description = "Blue Gum Fence Gate", - texture = "aus_blue_gum.png", - material = "australia:blue_gum", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_celery_top_pine", { - description = "Celery-top Pine Fence Gate", - texture = "aus_celery_top_pine.png", - material = "australia:celery_top_pine", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, -}) - -doors.register_fencegate("doors:gate_red_mahogany", { - description = "Red Mahogany Fence Gate", - texture = "aus_red_mahogany.png", - material = "australia:red_mahogany", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_huon_pine", { - description = "Huon Pine Fence Gate", - texture = "aus_huon_pine.png", - material = "australia:huon_pine", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, -}) - -doors.register_fencegate("doors:gate_jarrah", { - description = "Jarrah Fence Gate", - texture = "aus_jarrah.png", - material = "australia:jarrah", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_karri", { - description = "Karri Fence Gate", - texture = "aus_karri.png", - material = "australia:karri", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_marri", { - description = "Marri Fence Gate", - texture = "aus_marri.png", - material = "australia:marri", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_merbau", { - description = "Merbau Fence Gate", - texture = "aus_merbau.png", - material = "australia:merbau", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_red_gum", { - description = "Red Gum Fence Gate", - texture = "aus_red_gum.png", - material = "australia:red_gum", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_southern_sassafras", { - description = "Southern Sassafras Fence Gate", - texture = "aus_southern_sassafras.png", - material = "australia:southern_sassafras", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - -doors.register_fencegate("doors:gate_tasmanian_oak", { - description = "Tasmanian Oak Fence Gate", - texture = "aus_tasmanian_oak.png", - material = "australia:tasmanian_oak", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, -}) - -doors.register_fencegate("doors:gate_tasmanian_myrtle", { - description = "Tasmanian Myrtle Fence Gate", - texture = "aus_tasmanian_myrtle.png", - material = "australia:tasmanian_myrtle", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, -}) - - -----fuels---- - -local function add_doors_fuel(name, burntime) - minetest.register_craft({ - type = "fuel", - recipe = "doors:" .. name, - burntime = burntime, - }) -end - -doors.fuel = { - {"trapdoor", 7}, - {"door_wood", 14}, - {"gate_wood_closed", 7}, - {"gate_acacia_wood_closed", 8}, - {"gate_junglewood_closed", 9}, - {"gate_pine_wood_closed", 6}, - {"gate_aspen_wood_closed", 5}, - {"gate_eucalyptus_closed", 8}, - {"gate_blackwood_closed", 7}, - {"gate_blue_gum_closed", 7}, - {"gate_celery_top_pine_closed", 6}, - {"gate_red_mahogany_closed", 8}, - {"gate_huon_pine_closed", 7}, - {"gate_jarrah_closed", 9}, - {"gate_karri_closed", 8}, - {"gate_marri_closed", 8}, - {"gate_merbau_closed", 8}, - {"gate_red_gum_closed", 8}, - {"gate_southern_sassafras_closed", 7}, - {"gate_tasmanian_oak_closed", 6}, - {"gate_tasmanian_myrtle_closed", 8}, -} - -for _,item in pairs(doors.fuel) do - add_doors_fuel(unpack(item)) -end - diff --git a/mods/ITEMS/doors/textures/doors_trapdoor_side.png b/mods/ITEMS/doors/textures/doors_trapdoor_side.png deleted file mode 100644 index c45d870..0000000 Binary files a/mods/ITEMS/doors/textures/doors_trapdoor_side.png and /dev/null differ diff --git a/mods/ITEMS/dryplants/crafting.lua b/mods/ITEMS/dryplants/crafting.lua deleted file mode 100644 index 634192c..0000000 --- a/mods/ITEMS/dryplants/crafting.lua +++ /dev/null @@ -1,345 +0,0 @@ ------------------------------------------------------------------------------------------------ --- Dry Plants - Recipes 0.1.0 -- Short Grass -> Dirt ------------------------------------------------------------------------------------------------ --- by Mossmanikin --- License (everything): WTFPL --- Looked at code from: darkage, default, farming, sickle, stairs --- Dependencies: default, farming --- Supports: flint, stoneage, sumpf ------------------------------------------------------------------------------------------------ - ------------------------------------------------------------------------------------------------ --- Short Grass ------------------------------------------------------------------------------------------------ -minetest.register_craft({ - output = "default:dirt", - recipe = { - {"dryplants:grass_short"}, - } -}) - ------------------------------------------------------------------------------------------------ --- Cut Grass ------------------------------------------------------------------------------------------------ --- grass recipes (remove roots) -minetest.register_craft({ - output = "dryplants:grass", - recipe = { - {"default:grass_1"}, - } -}) -minetest.register_craft({ - output = "dryplants:grass", - recipe = { - {"default:junglegrass"}, - } -}) -if minetest.get_modpath("sumpf") ~= nil then - minetest.register_craft({ - output = "dryplants:grass", - recipe = { - {"sumpf:gras"}, - } - }) -end - ------------------------------------------------------------------------------------------------ --- Sickle ------------------------------------------------------------------------------------------------ -minetest.register_craft({ - output = "dryplants:sickle", - recipe = { - {"group:stone",""}, - {"", "default:stick"}, - {"default:stick",""} - } -}) -if minetest.get_modpath("flint") ~= nil then - minetest.register_craft({ - output = "dryplants:sickle", - recipe = { - {"flint:flintstone",""}, - {"", "default:stick"}, - {"default:stick",""} - } - }) -end -if minetest.get_modpath("stoneage") ~= nil then - minetest.register_craft({ - output = "dryplants:sickle", - recipe = { - {"stoneage:silex",""}, - {"", "default:stick"}, - {"default:stick",""} - } - }) -end - ------------------------------------------------------------------------------------------------ --- Hay ------------------------------------------------------------------------------------------------ ---cooking -minetest.register_craft({ - type = "cooking", - output = "dryplants:hay", - recipe = "dryplants:grass", - cooktime = 2, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "dryplants:hay", - burntime = 1, -}) - ------------------------------------------------------------------------------------------------ --- Wet Reed ------------------------------------------------------------------------------------------------ -minetest.register_craft({ -- papyrus -> wetreed - output = "dryplants:wetreed 2", - recipe = { - {"default:papyrus","default:papyrus"}, - {"default:papyrus","default:papyrus"}, - } -}) -minetest.register_craft({ -- reedmace_sapling -> wetreed - output = "dryplants:wetreed 2", - recipe = { - {"dryplants:reedmace_sapling","dryplants:reedmace_sapling"}, - {"dryplants:reedmace_sapling","dryplants:reedmace_sapling"}, - } -}) -minetest.register_craft({ -- reedmace_top -> wetreed - output = "dryplants:wetreed 2", - recipe = { - {"dryplants:reedmace_top","dryplants:reedmace_top"}, - {"dryplants:reedmace_top","dryplants:reedmace_top"}, - } -}) -minetest.register_craft({ -- reedmace -> wetreed - output = "dryplants:wetreed 2", - recipe = { - {"dryplants:reedmace","dryplants:reedmace"}, - {"dryplants:reedmace","dryplants:reedmace"}, - } -}) -minetest.register_craft({ -- reedmace_bottom -> wetreed - output = "dryplants:wetreed 2", - recipe = { - {"dryplants:reedmace_bottom","dryplants:reedmace_bottom"}, - {"dryplants:reedmace_bottom","dryplants:reedmace_bottom"}, - } -}) - - -local ReeD = { - {"wetreed"}, - {"reed"} -} -for i in pairs(ReeD) do - local reed = "dryplants:"..ReeD[i][1] - local slab = reed.."_slab" - local roof = reed.."_roof" - local corner = roof.."_corner" - local corner_2 = corner.."_2" ------------------------------------------------------------------------------------------------ --- Block ------------------------------------------------------------------------------------------------ - minetest.register_craft({ -- slab -> block - output = reed, - recipe = { - {slab}, - {slab}, - } - }) - minetest.register_craft({ -- roof -> block - output = reed, - recipe = { - {roof}, - {roof}, - } - }) - minetest.register_craft({ -- corner -> block - type = "shapeless", - output = reed.." 3", - recipe = {corner,corner,corner,corner,corner,corner,corner,corner}, -- 8x - }) - minetest.register_craft({ -- corner_2 -> block - type = "shapeless", - output = reed.." 3", - recipe = {corner_2,corner_2,corner_2,corner_2,corner_2,corner_2,corner_2,corner_2}, -- 8x - }) ------------------------------------------------------------------------------------------------ --- Slab ------------------------------------------------------------------------------------------------ - minetest.register_craft({ -- block -> slab - output = slab.." 6", - recipe = { - {reed,reed,reed}, - } - }) - minetest.register_craft({ -- roof -> slab - output = slab, - recipe = { - {roof}, - } - }) - minetest.register_craft({ -- corner -> slab - output = slab.." 3", - recipe = { - {corner,corner}, - {corner,corner}, - } - }) - minetest.register_craft({ -- corner_2 -> slab - output = slab.." 3", - recipe = { - {corner_2,corner_2}, - {corner_2,corner_2}, - } - }) ------------------------------------------------------------------------------------------------ --- Roof ------------------------------------------------------------------------------------------------ - minetest.register_craft({ -- block -> roof - output = roof.." 4", - recipe = { - {reed,""}, - {"",reed}, - } - }) - minetest.register_craft({ -- block -> roof - output = roof.." 4", - recipe = { - {"",reed}, - {reed,""}, - } - }) - minetest.register_craft({ -- slab -> roof - output = roof, - recipe = { - {slab}, - } - }) ------------------------------------------------------------------------------------------------ --- Roof Corner ------------------------------------------------------------------------------------------------ - minetest.register_craft({ -- block -> corner - output = corner.." 8", - recipe = { - {"",reed,""}, - {reed,"",reed}, - } - }) - minetest.register_craft({ -- corner_2 -> corner - output = corner, - recipe = { - {corner_2}, - } - }) ------------------------------------------------------------------------------------------------ --- Roof Corner 2 ------------------------------------------------------------------------------------------------ - minetest.register_craft({ -- block -> corner_2 - output = corner_2.." 8", - recipe = { - {reed,"",reed}, - {"",reed,""}, - } - }) - minetest.register_craft({ -- corner -> corner_2 - output = corner_2, - recipe = { - {corner}, - } - }) -end - ------------------------------------------------------------------------------------------------ --- Reed ------------------------------------------------------------------------------------------------ -minetest.register_craft({ -- hay -> reed - output = "dryplants:reed 2", - recipe = { - {"dryplants:hay","dryplants:hay"}, - {"dryplants:hay","dryplants:hay"}, - } -}) ---cooking -minetest.register_craft({ -- wetreed -> reed - type = "cooking", - output = "dryplants:reed", - recipe = "dryplants:wetreed", - cooktime = 2, -}) ---fuel -minetest.register_craft({ - type = "fuel", - recipe = "dryplants:reed", - burntime = 4, -}) ------------------------------------------------------------------------------------------------ --- Reed Slab ------------------------------------------------------------------------------------------------ ---cooking -minetest.register_craft({ -- wetreed_slab -> reed_slab - type = "cooking", - output = "dryplants:reed_slab", - recipe = "dryplants:wetreed_slab", - cooktime = 1, -}) ---fuel -minetest.register_craft({ - type = "fuel", - recipe = "dryplants:reed_slab", - burntime = 2, -}) ------------------------------------------------------------------------------------------------ --- Reed Roof ------------------------------------------------------------------------------------------------ ---cooking -minetest.register_craft({ -- wetreed_roof -> reed_roof - type = "cooking", - output = "dryplants:reed_roof", - recipe = "dryplants:wetreed_roof", - cooktime = 1, -}) ---fuel -minetest.register_craft({ - type = "fuel", - recipe = "dryplants:reed_roof", - burntime = 2, -}) ------------------------------------------------------------------------------------------------ --- Reed Roof Corner ------------------------------------------------------------------------------------------------ ---cooking -minetest.register_craft({ -- wetreed_roof_corner -> reed_roof_corner - type = "cooking", - output = "dryplants:reed_roof_corner", - recipe = "dryplants:wetreed_roof_corner", - cooktime = 1, -}) ---fuel -minetest.register_craft({ - type = "fuel", - recipe = "dryplants:reed_roof_corner", - burntime = 2, -}) ------------------------------------------------------------------------------------------------ --- Wet Reed Roof Corner 2 ------------------------------------------------------------------------------------------------ ---cooking -minetest.register_craft({ -- wetreed_roof_corner -> reed_roof_corner - type = "cooking", - output = "dryplants:reed_roof_corner_2", - recipe = "dryplants:wetreed_roof_corner_2", - cooktime = 1, -}) ---fuel -minetest.register_craft({ - type = "fuel", - recipe = "dryplants:reed_roof_corner_2", - burntime = 2, -}) - diff --git a/mods/ITEMS/dryplants/depends.txt b/mods/ITEMS/dryplants/depends.txt deleted file mode 100644 index ddb2ca1..0000000 --- a/mods/ITEMS/dryplants/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -biome_lib -default -plantlife_i18n -farming? -australia? diff --git a/mods/ITEMS/dryplants/init.lua b/mods/ITEMS/dryplants/init.lua deleted file mode 100644 index 8734ff9..0000000 --- a/mods/ITEMS/dryplants/init.lua +++ /dev/null @@ -1,204 +0,0 @@ ------------------------------------------------------------------------------------------------ -local title = "Grasses" -- former "Dry plants" -local version = "0.1.5" -local mname = "dryplants" ------------------------------------------------------------------------------------------------ --- by Mossmanikin --- textures & ideas partly by Neuromancer - --- License (everything): WTFPL --- Contains code from: default, farming --- Looked at code from: darkage, sickle, stairs --- Dependencies: default, farming, biome_lib --- Supports: ------------------------------------------------------------------------------------------------ -abstract_dryplants = {} - --- support for i18n -local S = plantlife_i18n.gettext - -dofile(minetest.get_modpath("dryplants").."/crafting.lua") -dofile(minetest.get_modpath("dryplants").."/settings.txt") -dofile(minetest.get_modpath("dryplants").."/spear_grass.lua") -dofile(minetest.get_modpath("dryplants").."/reed.lua") -if REEDMACE_GENERATES == true then -dofile(minetest.get_modpath("dryplants").."/reedmace.lua") -end -if SMALL_JUNCUS_GENERATES == true then -dofile(minetest.get_modpath("dryplants").."/juncus.lua") -end - - ------------------------------------------------------------------------------------------------ --- Sickle ------------------------------------------------------------------------------------------------ -local function sickle_can_break(pos, deff, player) - local def = ItemStack({name=deff.name}):get_definition() - - if not def.diggable or (def.can_dig and not def.can_dig(pos,player)) then - minetest.log("info", player:get_player_name() .. " tried to sickle " - .. def.name .. " which is not diggable " - .. minetest.pos_to_string(pos)) - return - end - - if minetest.is_protected(pos, player:get_player_name()) then - minetest.log("action", player:get_player_name() - .. " tried to sickle " .. def.name - .. " at protected position " - .. minetest.pos_to_string(pos)) - minetest.record_protection_violation(pos, player:get_player_name()) - return - end - - return true -end --- turns nodes with group flora=1 & flower=0 into cut grass -local function sickle_on_use(itemstack, user, pointed_thing, uses) - local pt = pointed_thing - -- check if pointing at a node - if not pt then - return - end - if pt.type ~= "node" then - return - end - - local under = minetest.get_node(pt.under) - local above_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} - local above = minetest.get_node(above_pos) - - -- return if any of the nodes is not registered - if not minetest.registered_nodes[under.name] then - return - end - if not minetest.registered_nodes[above.name] then - return - end - - if not sickle_can_break(pt.under, under, user) then - return - end - -- check if something that can be cut using fine tools - if minetest.get_item_group(under.name, "snappy") > 0 then - -- check if flora but no flower - if minetest.get_item_group(under.name, "flora") == 1 and minetest.get_item_group(under.name, "flower") == 0 then - -- turn the node into cut grass, wear out item and play sound - minetest.set_node(pt.under, {name="dryplants:grass"}) - else -- otherwise dig the node - if not minetest.node_dig(pt.under, under, user) then - return - end - end - minetest.sound_play("default_dig_crumbly", { - pos = pt.under, - gain = 0.5, - }) - itemstack:add_wear(65535/(uses-1)) - return itemstack - elseif string.find(under.name, "default:dirt_with_grass") then - if minetest.is_protected(above_pos, user:get_player_name()) or above.name ~= "air" then - return - end - minetest.set_node(pt.under, {name="dryplants:grass_short"}) - minetest.set_node(above_pos, {name="dryplants:grass"}) - minetest.sound_play("default_dig_crumbly", { - pos = pt.under, - gain = 0.5, - }) - itemstack:add_wear(65535/(uses-1)) - return itemstack - end -end --- the tool -minetest.register_tool("dryplants:sickle", { - description = S("Sickle"), - inventory_image = "dryplants_sickle.png", - on_use = function(itemstack, user, pointed_thing) - return sickle_on_use(itemstack, user, pointed_thing, 220) - end, -}) - ------------------------------------------------------------------------------------------------ --- Cut Grass ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:grass", { - description = S("Cut Grass"), - inventory_image = "dryplants_grass.png", - wield_image = "dryplants_grass.png", - paramtype = "light", - sunlight_propagates = true, - tiles = {"dryplants_grass.png"}, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.5 , -0.5 , -0.5 , 0.5 , -0.4375, 0.5 }, - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Cut Grass becomes Hay over time ------------------------------------------------------------------------------------------------ -minetest.register_abm({ - nodenames = {"dryplants:grass"}, - interval = HAY_DRYING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle - chance = 1, - action = function(pos) - minetest.set_node(pos, {name="dryplants:hay"}) - end, -}) - ------------------------------------------------------------------------------------------------ --- Hay ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:hay", { - description = S("Hay"), - inventory_image = "dryplants_hay.png", - wield_image = "dryplants_hay.png", - paramtype = "light", - sunlight_propagates = true, - tiles = {"dryplants_hay.png"}, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.5 , -0.5 , -0.5 , 0.5 , -0.4375, 0.5 }, - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Short Grass ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:grass_short", { - description = S("Short Grass"), - tiles = {"default_grass.png^dryplants_grass_short.png", "default_dirt.png", "default_dirt.png^default_grass_side.png^dryplants_grass_short_side.png"}, - is_ground_content = true, - groups = {crumbly=3,soil=1,not_in_creative_inventory=1}, - --drop = 'default:dirt', - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.4}, - }), -}) - ------------------------------------------------------------------------------------------------ --- Short Grass becomes Dirt with Grass over time ------------------------------------------------------------------------------------------------ -minetest.register_abm({ - nodenames = {"dryplants:grass_short"}, - interval = GRASS_REGROWING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle - chance = 100/GRASS_REGROWING_CHANCE, - action = function(pos) - -- Only become dirt with grass if no cut grass or hay lies on top - local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) - if above.name ~= "dryplants:grass" and above.name ~= "dryplants:hay" then - minetest.set_node(pos, {name="default:dirt_with_grass"}) - end - end, -}) - ------------------------------------------------------------------------------------------------ -print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") ------------------------------------------------------------------------------------------------ diff --git a/mods/ITEMS/dryplants/juncus.lua b/mods/ITEMS/dryplants/juncus.lua deleted file mode 100644 index 863ce7c..0000000 --- a/mods/ITEMS/dryplants/juncus.lua +++ /dev/null @@ -1,131 +0,0 @@ ------------------------------------------------------------------------------------------------ --- Grasses - Juncus 0.0.5 ------------------------------------------------------------------------------------------------ --- by Mossmanikin --- textures & ideas partly by Neuromancer - --- License (everything): WTFPL --- Contains code from: biome_lib --- Looked at code from: default ------------------------------------------------------------------------------------------------ - --- support for i18n -local S = plantlife_i18n.gettext - -abstract_dryplants.grow_juncus = function(pos) - local juncus_type = math.random(2,3) - local right_here = {x=pos.x, y=pos.y+1, z=pos.z} - if minetest.get_node(right_here).name == "air" -- instead of check_air = true, - or minetest.get_node(right_here).name == "default:junglegrass" then - if juncus_type == 2 then - minetest.set_node(right_here, {name="dryplants:juncus_02"}) - else - minetest.set_node(right_here, {name="dryplants:juncus"}) - end - end -end - -minetest.register_node("dryplants:juncus", { - description = S("Juncus"), - drawtype = "plantlike", - visual_scale = math.sqrt(8), - paramtype = "light", - tiles = {"dryplants_juncus_03.png"}, - inventory_image = "dryplants_juncus_inv.png", - walkable = false, - buildable_to = true, - groups = { - snappy=3, - flammable=2, - attached_node=1, - flora=1 - --not_in_creative_inventory=1 - }, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, - }, - on_place = function(itemstack, placer, pointed_thing) - local playername = placer:get_player_name() - if minetest.is_protected(pointed_thing.above, playername) or - minetest.is_protected(pointed_thing.under, playername) then - minetest.chat_send_player(playername, "Someone else owns that spot.") - return - end - local pos = pointed_thing.under - local juncus_type = math.random(2,3) - local right_here = {x=pos.x, y=pos.y+1, z=pos.z} - if juncus_type == 2 then - minetest.set_node(right_here, {name="dryplants:juncus_02"}) - else - minetest.set_node(right_here, {name="dryplants:juncus"}) - end - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end, -}) -minetest.register_node("dryplants:juncus_02", { - description = S("Juncus"), - drawtype = "plantlike", - visual_scale = math.sqrt(8), - paramtype = "light", - tiles = {"dryplants_juncus_02.png"}, - walkable = false, - buildable_to = true, - groups = { - snappy=3, - flammable=2, - attached_node=1, - flora=1, - not_in_creative_inventory=1 - }, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, - }, - drop = "dryplants:juncus", -}) ------------------------------------------------------------------------------------------------ --- GENERATE SMALL JUNCUS ------------------------------------------------------------------------------------------------ --- near water or swamp -biome_lib:register_generate_plant({ - surface = { - "default:dirt_with_grass", - "default:dirt_with_dry_grass", - "default:sand", - "australia:mangrove_mud" - }, - max_count = JUNCUS_NEAR_WATER_PER_MAPBLOCK, - rarity = 101 - JUNCUS_NEAR_WATER_RARITY, - min_elevation = 1, -- above sea level - near_nodes = {"default:river_water_source","australia:muddy_water_source"}, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_dryplants.grow_juncus -) --- at dunes/beach -biome_lib:register_generate_plant({ - surface = { - "default:sand" - }, - max_count = JUNCUS_AT_BEACH_PER_MAPBLOCK, - rarity = 101 - JUNCUS_AT_BEACH_RARITY, - min_elevation = 3, - max_elevation = 3, - near_nodes = {"default:dirt_with_grass"}, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_dryplants.grow_juncus -) - diff --git a/mods/ITEMS/dryplants/reed.lua b/mods/ITEMS/dryplants/reed.lua deleted file mode 100644 index dc4c2e0..0000000 --- a/mods/ITEMS/dryplants/reed.lua +++ /dev/null @@ -1,383 +0,0 @@ ------------------------------------------------------------------------------------------------ --- Dry Plants - Reed 0.0.5 ------------------------------------------------------------------------------------------------ --- by Mossmanikin --- License (everything): WTFPL --- Looked at code from: darkage, default, stairs --- Dependencies: default ------------------------------------------------------------------------------------------------ --- support for i18n -local S = plantlife_i18n.gettext - -minetest.register_alias("stairs:stair_wetreed", "dryplants:wetreed_roof") -minetest.register_alias("stairs:slab_wetreed", "dryplants:wetreed_slab") -minetest.register_alias("stairs:stair_reed", "dryplants:reed_roof") -minetest.register_alias("stairs:slab_reed", "dryplants:reed_slab") - - ------------------------------------------------------------------------------------------------ --- Wet Reed ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:wetreed", { - description = S("Wet Reed"), - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed_wet.png"}, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Wet Reed Slab ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:wetreed_slab", { - description = S("Wet Reed Slab"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed_wet.png"}, - node_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, - }, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Wet Reed Roof ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:wetreed_roof", { - description = S("Wet Reed Roof"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed_wet.png"}, - node_box = { - type = "fixed", --- { left , bottom , front , right , top , back } - fixed = { - {-1/2, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, -1/2, -1/2, 1/2, 0, 0}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-1/2, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, -1/2, -1/2, 1/2, 0, 0}, - } - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - -if AUTO_ROOF_CORNER == true then - - local CoRNeR = { --- MaTeRiaL - {"wetreed"}, - {"reed"} - } - - for i in pairs(CoRNeR) do - - local MaTeRiaL = CoRNeR[i][1] - local roof = "dryplants:"..MaTeRiaL.."_roof" - local corner = "dryplants:"..MaTeRiaL.."_roof_corner" - local corner_2 = "dryplants:"..MaTeRiaL.."_roof_corner_2" - - minetest.register_abm({ - nodenames = {roof}, - interval = 1, - chance = 1, - action = function(pos) - - local node_east = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z }) - local node_west = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z }) - local node_north = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) - local node_south = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) - -- corner 1 - if ((node_west.name == roof and node_west.param2 == 0) - or (node_west.name == corner and node_west.param2 == 1)) - and ((node_north.name == roof and node_north.param2 == 3) - or (node_north.name == corner and node_north.param2 == 3)) - then - minetest.set_node(pos, {name=corner, param2=0}) - end - - if ((node_north.name == roof and node_north.param2 == 1) - or (node_north.name == corner and node_north.param2 == 2)) - and ((node_east.name == roof and node_east.param2 == 0) - or (node_east.name == corner and node_east.param2 == 0)) - then - minetest.set_node(pos, {name=corner, param2=1}) - end - - if ((node_east.name == roof and node_east.param2 == 2) - or (node_east.name == corner and node_east.param2 == 3)) - and ((node_south.name == roof and node_south.param2 == 1) - or (node_south.name == corner and node_south.param2 == 1)) - then - minetest.set_node(pos, {name=corner, param2=2}) - end - - if ((node_south.name == roof and node_south.param2 == 3) - or (node_south.name == corner and node_south.param2 == 0)) - and ((node_west.name == roof and node_west.param2 == 2) - or (node_west.name == corner and node_west.param2 == 2)) - then - minetest.set_node(pos, {name=corner, param2=3}) - end - -- corner 2 - if ((node_west.name == roof and node_west.param2 == 2) - or (node_west.name == corner_2 and node_west.param2 == 1)) - and ((node_north.name == roof and node_north.param2 == 1) - or (node_north.name == corner_2 and node_north.param2 == 3)) - then - minetest.set_node(pos, {name=corner_2, param2=0}) - end - - if ((node_north.name == roof and node_north.param2 == 3) - or (node_north.name == corner_2 and node_north.param2 == 2)) - and ((node_east.name == roof and node_east.param2 == 2) - or (node_east.name == corner_2 and node_east.param2 == 0)) - then - minetest.set_node(pos, {name=corner_2, param2=1}) - end - - if ((node_east.name == roof and node_east.param2 == 0) - or (node_east.name == corner_2 and node_east.param2 == 3)) - and ((node_south.name == roof and node_south.param2 == 3) - or (node_south.name == corner_2 and node_south.param2 == 1)) - then - minetest.set_node(pos, {name=corner_2, param2=2}) - end - - if ((node_south.name == roof and node_south.param2 == 1) - or (node_south.name == corner_2 and node_south.param2 == 0)) - and ((node_west.name == roof and node_west.param2 == 0) - or (node_west.name == corner_2 and node_west.param2 == 2)) - then - minetest.set_node(pos, {name=corner_2, param2=3}) - end - - end, - }) - end -end - ------------------------------------------------------------------------------------------------ --- Wet Reed Roof Corner ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:wetreed_roof_corner", { - description = S("Wet Reed Roof Corner"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed_wet.png"}, - node_box = { - type = "fixed", --- { left , bottom , front , right , top , back } - fixed = { - {-1/2, 0, 0, 0, 1/2, 1/2}, - {0, -1/2, 0, 1/2, 0, 1/2}, - {-1/2, -1/2, -1/2, 0, 0, 0}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-1/2, 0, 0, 0, 1/2, 1/2}, - {0, -1/2, 0, 1/2, 0, 1/2}, - {-1/2, -1/2, -1/2, 0, 0, 0}, - } - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Wet Reed Roof Corner 2 ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:wetreed_roof_corner_2", { - description = S("Wet Reed Roof Corner 2"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed_wet.png"}, - node_box = { - type = "fixed", --- { left , bottom , front , right , top , back } - fixed = { - {-1/2, -1/2, 0, 0, 0, 1/2}, - {0, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, 0, -1/2, 0, 1/2, 0}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-1/2, -1/2, 0, 0, 0, 1/2}, - {0, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, 0, -1/2, 0, 1/2, 0}, - } - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Wet Reed becomes (dry) Reed over time ------------------------------------------------------------------------------------------------ -if REED_WILL_DRY == true then - - local DRyiNG = { --- WeT DRy - {"dryplants:wetreed", "dryplants:reed"}, - {"dryplants:wetreed_slab", "dryplants:reed_slab"}, - {"dryplants:wetreed_roof", "dryplants:reed_roof"}, - {"dryplants:wetreed_roof_corner", "dryplants:reed_roof_corner"}, - {"dryplants:wetreed_roof_corner_2", "dryplants:reed_roof_corner_2"} - } - for i in pairs(DRyiNG) do - - local WeT = DRyiNG[i][1] - local DRy = DRyiNG[i][2] - - minetest.register_abm({ - nodenames = {WeT}, - interval = REED_DRYING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle - chance = 1, - action = function(pos) - local direction = minetest.get_node(pos).param2 - minetest.set_node(pos, {name=DRy, param2=direction}) - end, - }) - end -end - ------------------------------------------------------------------------------------------------ --- Reed ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reed", { - description = S("Reed"), - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed.png"}, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Reed Slab ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reed_slab", { - description = S("Reed Slab"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed.png"}, - node_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, - }, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Reed Roof ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reed_roof", { - description = S("Reed Roof"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed.png"}, - node_box = { - type = "fixed", --- { left , bottom , front , right , top , back } - fixed = { - {-1/2, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, -1/2, -1/2, 1/2, 0, 0}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-1/2, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, -1/2, -1/2, 1/2, 0, 0}, - } - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Reed Roof Corner ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reed_roof_corner", { - description = S("Reed Roof Corner"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed.png"}, - node_box = { - type = "fixed", --- { left , bottom , front , right , top , back } - fixed = { - {-1/2, 0, 0, 0, 1/2, 1/2}, - {0, -1/2, 0, 1/2, 0, 1/2}, - {-1/2, -1/2, -1/2, 0, 0, 0}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-1/2, 0, 0, 0, 1/2, 1/2}, - {0, -1/2, 0, 1/2, 0, 1/2}, - {-1/2, -1/2, -1/2, 0, 0, 0}, - } - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- Reed Roof Corner 2 ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reed_roof_corner_2", { - description = S("Reed Roof Corner 2"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"dryplants_reed.png"}, - node_box = { - type = "fixed", --- { left , bottom , front , right , top , back } - fixed = { - {-1/2, -1/2, 0, 0, 0, 1/2}, - {0, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, 0, -1/2, 0, 1/2, 0}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-1/2, -1/2, 0, 0, 0, 1/2}, - {0, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, 0, -1/2, 0, 1/2, 0}, - } - }, - groups = {snappy=3, flammable=2}, - sounds = default.node_sound_leaves_defaults(), -}) diff --git a/mods/ITEMS/dryplants/reedmace.lua b/mods/ITEMS/dryplants/reedmace.lua deleted file mode 100644 index 2f8637f..0000000 --- a/mods/ITEMS/dryplants/reedmace.lua +++ /dev/null @@ -1,386 +0,0 @@ ------------------------------------------------------------------------------------------------ --- Grasses - Reedmace 0.1.1 ------------------------------------------------------------------------------------------------ --- by Mossmanikin --- textures & ideas partly by Neuromancer - --- License (everything): WTFPL --- Contains code from: biome_lib --- Looked at code from: default, trees ------------------------------------------------------------------------------------------------ - --- NOTES (from wikipedia, some of this might get implemented) --- rhizomes are edible --- outer portion of young plants can be peeled and the heart can be eaten raw or boiled and eaten like asparagus --- leaf bases can be eaten raw or cooked --- sheath can be removed from the developing green flower spike, which can then be boiled and eaten like corn on the cob --- pollen can be collected and used as a flour supplement or thickener --- Typha stems and leaves can be used to make paper --- The seed hairs were used by some Native American groups as tinder for starting fires - --- support for i18n -local S = plantlife_i18n.gettext - ------------------------------------------------------------------------------------------------ --- REEDMACE SHAPES ------------------------------------------------------------------------------------------------ - -abstract_dryplants.grow_reedmace = function(pos) - local size = math.random(1,3) - local spikes = math.random(1,3) - local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} - local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z} - local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z} - if minetest.get_node(pos_01).name == "air" -- bug fix - or minetest.get_node(pos_01).name == "dryplants:reedmace_sapling" then - if minetest.get_node(pos_02).name ~= "air" then - minetest.set_node(pos_01, {name="dryplants:reedmace_top"}) - elseif minetest.get_node(pos_03).name ~= "air" then - minetest.set_node(pos_01, {name="dryplants:reedmace_height_2"}) - elseif size == 1 then - minetest.set_node(pos_01, {name="dryplants:reedmace_top"}) - elseif size == 2 then - minetest.set_node(pos_01, {name="dryplants:reedmace_height_2"}) - elseif size == 3 then - if spikes == 1 then - minetest.set_node(pos_01, {name="dryplants:reedmace_height_3_spikes"}) - else - minetest.set_node(pos_01, {name="dryplants:reedmace_height_3"}) - end - end - end -end - -abstract_dryplants.grow_reedmace_water = function(pos) - local size = math.random(1,3) - local spikes = math.random(1,3) - local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} - local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z} - local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z} - local pos_04 = {x = pos.x, y = pos.y + 4, z = pos.z} - minetest.add_entity(pos_01, "dryplants:reedmace_water_entity") - if minetest.get_node(pos_02).name == "air" then -- bug fix - if minetest.get_node(pos_03).name ~= "air" then - minetest.set_node(pos_02, {name="dryplants:reedmace_top"}) - elseif minetest.get_node(pos_04).name ~= "air" then - minetest.set_node(pos_02, {name="dryplants:reedmace_height_2"}) - elseif size == 1 then - minetest.set_node(pos_02, {name="dryplants:reedmace_top"}) - elseif size == 2 then - minetest.set_node(pos_02, {name="dryplants:reedmace_height_2"}) - elseif size == 3 then - if spikes == 1 then - minetest.set_node(pos_02, {name="dryplants:reedmace_height_3_spikes"}) - else - minetest.set_node(pos_02, {name="dryplants:reedmace_height_3"}) - end - end - end -end - ------------------------------------------------------------------------------------------------ --- REEDMACE SPIKES ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reedmace_spikes", { - description = S("Reedmace"), - drawtype = "plantlike", - paramtype = "light", - tiles = {"dryplants_reedmace_spikes.png"}, - inventory_image = "dryplants_reedmace_spikes.png", - walkable = false, - groups = { - snappy=3, - flammable=2, - not_in_creative_inventory=1 - }, - drop = 'dryplants:reedmace_sapling', - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, -}) ------------------------------------------------------------------------------------------------ --- REEDMACE height: 1 ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reedmace_top", { - description = S("Reedmace, height: 1"), - drawtype = "plantlike", - paramtype = "light", - tiles = {"dryplants_reedmace_top.png"}, - inventory_image = "dryplants_reedmace_top.png", - walkable = false, - groups = { - snappy=3, - flammable=2, - not_in_creative_inventory=1 - }, - drop = 'dryplants:reedmace_sapling', - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, -}) ------------------------------------------------------------------------------------------------ --- REEDMACE height: 2 ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reedmace_height_2", { - description = S("Reedmace, height: 2"), - drawtype = "plantlike", - visual_scale = math.sqrt(8), - paramtype = "light", - tiles = {"dryplants_reedmace_height_2.png"}, - inventory_image = "dryplants_reedmace_top.png", - walkable = false, - groups = { - snappy=3, - flammable=2--, - --not_in_creative_inventory=1 - }, - drop = 'dryplants:reedmace_sapling', - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, -}) ------------------------------------------------------------------------------------------------ --- REEDMACE height: 3 ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reedmace_height_3", { - description = S("Reedmace, height: 3"), - drawtype = "plantlike", - visual_scale = math.sqrt(8), - paramtype = "light", - tiles = {"dryplants_reedmace_height_3.png"}, - inventory_image = "dryplants_reedmace_top.png", - walkable = false, - groups = { - snappy=3, - flammable=2--, - --not_in_creative_inventory=1 - }, - drop = 'dryplants:reedmace_sapling', - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, -}) ------------------------------------------------------------------------------------------------ --- REEDMACE height: 3 & Spikes ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reedmace_height_3_spikes", { - description = S("Reedmace, height: 3 & Spikes"), - drawtype = "plantlike", - visual_scale = math.sqrt(8), - paramtype = "light", - tiles = {"dryplants_reedmace_height_3_spikes.png"}, - inventory_image = "dryplants_reedmace_top.png", - walkable = false, - groups = { - snappy=3, - flammable=2--, - --not_in_creative_inventory=1 - }, - drop = 'dryplants:reedmace_sapling', - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, -}) ------------------------------------------------------------------------------------------------ --- REEDMACE STEMS ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reedmace", { - description = S("Reedmace"), - drawtype = "plantlike", - paramtype = "light", - tiles = {"dryplants_reedmace.png"}, - inventory_image = "dryplants_reedmace.png", - walkable = false, - groups = { - snappy=3, - flammable=2, - not_in_creative_inventory=1 - }, - drop = 'dryplants:reedmace_sapling', - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, - after_destruct = function(pos,oldnode) - local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if node.name == "dryplants:reedmace_top" - or node.name == "dryplants:reedmace_spikes" then - minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) - minetest.add_item(pos,"dryplants:reedmace_sapling") - end - end, -}) ------------------------------------------------------------------------------------------------ --- REEDMACE BOTTOM ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reedmace_bottom", { - description = S("Reedmace"), - drawtype = "plantlike", - paramtype = "light", - tiles = {"dryplants_reedmace_bottom.png"}, - inventory_image = "dryplants_reedmace_bottom.png", - walkable = false, - groups = { - snappy=3, - flammable=2, - not_in_creative_inventory=1 - }, - drop = 'dryplants:reedmace_sapling', - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, - after_destruct = function(pos,oldnode) - local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if node.name == "dryplants:reedmace" - or node.name == "dryplants:reedmace_top" - or node.name == "dryplants:reedmace_spikes" then - minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) - minetest.add_item(pos,"dryplants:reedmace_sapling") - end - end, -}) ------------------------------------------------------------------------------------------------ --- REEDMACE "SAPLING" (the drop from the above) ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reedmace_sapling", { - description = S("Reedmace"), - drawtype = "plantlike", - paramtype = "light", - tiles = {"dryplants_reedmace_sapling.png"}, - inventory_image = "dryplants_reedmace_sapling.png", - walkable = false, - groups = { - snappy=3, - flammable=2, - attached_node=1 - }, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, -}) --- abm -minetest.register_abm({ - nodenames = "dryplants:reedmace_sapling", - interval = REEDMACE_GROWING_TIME, - chance = 100/REEDMACE_GROWING_CHANCE, - action = function(pos, node, _, _) - if string.find(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z }).name, "default:water") - or string.find(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}).name, "default:water") - or string.find(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z }).name, "default:water") - or string.find(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}).name, "default:water") then - if minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then - abstract_dryplants.grow_reedmace_water({x = pos.x, y = pos.y - 1, z = pos.z}) - end - minetest.set_node({x=pos.x, y=pos.y, z=pos.z}, {name="default:water_source"}) - else - abstract_dryplants.grow_reedmace({x = pos.x, y = pos.y - 1, z = pos.z}) - end - end -}) ------------------------------------------------------------------------------------------------ --- REEDMACE WATER (for entity) ------------------------------------------------------------------------------------------------ -minetest.register_node("dryplants:reedmace_water", { - description = S("Reedmace"), - drawtype = "plantlike", - paramtype = "light", - tiles = {"dryplants_reedmace_water.png"}, - inventory_image = "dryplants_reedmace_water.png", - groups = {not_in_creative_inventory=1}, - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, -}) ------------------------------------------------------------------------------------------------ --- REEDMACE WATER ENTITY ------------------------------------------------------------------------------------------------ -minetest.register_entity("dryplants:reedmace_water_entity",{ - visual = "mesh", - mesh = "plantlike.obj", - visual_size = {x=10, y=10}, - textures = {"dryplants_reedmace_water.png"}, - collisionbox = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}, - on_punch = function(self, puncher) - if puncher:is_player() and puncher:get_inventory() then - if not minetest.setting_getbool("creative_mode") then - puncher:get_inventory():add_item("main", "dryplants:reedmace_sapling") - end - self.object:remove() - end - end, -}) - - ------------------------------------------------------------------------------------------------ --- GENERATE REEDMACE ------------------------------------------------------------------------------------------------ --- near water or swamp -biome_lib:register_generate_plant({ - surface = { - "default:sand", - "australia:mangrove_mud" - }, - max_count = REEDMACE_NEAR_WATER_PER_MAPBLOCK, - rarity = 101 - REEDMACE_NEAR_WATER_RARITY, - min_elevation = 1, - max_elevation = 15, - near_nodes = {"default:river_water_source", "australia:muddy_water_source"}, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_dryplants.grow_reedmace -) - --- mangroves -biome_lib:register_generate_plant({ - surface = { - "australia:mangrove_mud" - }, - max_count = REEDMACE_NEAR_WATER_PER_MAPBLOCK, - rarity = 101 - REEDMACE_NEAR_WATER_RARITY, - min_elevation = 0, - max_elevation = 2, - near_nodes = {"default:water_source"}, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_dryplants.grow_reedmace -) - --- in water -biome_lib:register_generate_plant({ - surface = { - "default:clay", - "australia:mangrove_mud" - }, - max_count = REEDMACE_IN_WATER_PER_MAPBLOCK, - rarity = 101 - REEDMACE_IN_WATER_RARITY, - min_elevation = 0, -- a bit below sea level - max_elevation = 0, - near_nodes = {"australia:muddy_water_source"}, - near_nodes_size = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_dryplants.grow_reedmace_water -) diff --git a/mods/ITEMS/dryplants/settings.txt b/mods/ITEMS/dryplants/settings.txt deleted file mode 100644 index 49dda5f..0000000 --- a/mods/ITEMS/dryplants/settings.txt +++ /dev/null @@ -1,35 +0,0 @@ --- Here you can enable/disable the different plants -REEDMACE_GENERATES = true -SMALL_JUNCUS_GENERATES = true - --- Amount of Reedmace near water or swamp -REEDMACE_NEAR_WATER_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number) -REEDMACE_NEAR_WATER_RARITY = 40 -- percent - --- Amount of Reedmace in water -REEDMACE_IN_WATER_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number) -REEDMACE_IN_WATER_RARITY = 65 -- percent - --- growing of reedmace sapling -REEDMACE_GROWING_TIME = 600 -- seconds -REEDMACE_GROWING_CHANCE = 5 -- percent - --- Amount of small Juncus near water or swamp -JUNCUS_NEAR_WATER_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number) -JUNCUS_NEAR_WATER_RARITY = 75 -- percent - --- Amount of small Juncus at dunes/beach -JUNCUS_AT_BEACH_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number) -JUNCUS_AT_BEACH_RARITY = 75 -- percent - --- short grass becomes dirt with grass again -GRASS_REGROWING_TIME = 1200 -- seconds -GRASS_REGROWING_CHANCE = 5 -- percent - -HAY_DRYING_TIME = 3600 -- seconds - -REED_WILL_DRY = false -- wet reed nodes will become dry reed nodes -REED_DRYING_TIME = 3600 -- seconds - -AUTO_ROOF_CORNER = true - diff --git a/mods/ITEMS/dryplants/spear_grass.lua b/mods/ITEMS/dryplants/spear_grass.lua deleted file mode 100644 index 72df79e..0000000 --- a/mods/ITEMS/dryplants/spear_grass.lua +++ /dev/null @@ -1,80 +0,0 @@ --------------------------------------------------------------------------------- --- Grasses - Spear Grass 0.1 --------------------------------------------------------------------------------- --- new code and textures by demon_boy --- original by Mossmanikin --- textures & ideas partly by Neuromancer - --- License (everything): BSD --- Contains code from: biome_lib --- Looked at code from: default, trees --------------------------------------------------------------------------------- - --- NOTES (from wikipedia, some of this might get implemented) --- rhizomes are edible --- outer portion of young plants can be peeled and the heart can be eaten raw or boiled and eaten like asparagus --- leaf bases can be eaten raw or cooked --- sheath can be removed from the developing green flower spike, which can then be boiled and eaten like corn on the cob --- pollen can be collected and used as a flour supplement or thickener --- Typha stems and leaves can be used to make paper --- The seed hairs were used by some Native American groups as tinder for starting fires - --------------------------------------------------------------------------------- --- SPEAR GRASS SHAPES --------------------------------------------------------------------------------- - -abstract_dryplants.grow_spear_grass = function(pos) - local size = math.random(1,3) - local spikes = math.random(1,3) - local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} - local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z} - local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z} - if minetest.get_node(pos_01).name == "air" -- bug fix - or minetest.get_node(pos_01).name == "dryplants:reedmace_sapling" then - if minetest.get_node(pos_02).name ~= "air" then - minetest.set_node(pos_01, {name="dryplants:reedmace_top"}) - elseif minetest.get_node(pos_03).name ~= "air" then - minetest.set_node(pos_01, {name="dryplants:reedmace_height_2"}) - elseif size == 1 then - minetest.set_node(pos_01, {name="dryplants:reedmace_top"}) - elseif size == 2 then - minetest.set_node(pos_01, {name="dryplants:reedmace_height_2"}) - elseif size == 3 then - if spikes == 1 then - minetest.set_node(pos_01, {name="dryplants:reedmace_height_3_spikes"}) - else - minetest.set_node(pos_01, {name="dryplants:reedmace_height_3"}) - end - end - end -end - - --------------------------------------------------------------------------------- --- SPEAR GRASS (Sorghum intrans) --------------------------------------------------------------------------------- -minetest.register_node("dryplants:spear_grass", { - description = "Spear Grass (Sorghum intrans)", - drawtype = "plantlike", - waving = 1, - visual_scale = 2, - paramtype = "light", - tiles = {"dryplants_spear_grass.png"}, - inventory_image = "dryplants_spear_grass.png", - walkable = false, - buildable_to = false, - floodable = true, - groups = { - snappy=3, - flammable=2, - flora=1, - attached_node=1 - }, - drop = 'dryplants:spear_grass', - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} - }, -}) - diff --git a/mods/ITEMS/dryplants/textures/dryplants_spear_grass.png b/mods/ITEMS/dryplants/textures/dryplants_spear_grass.png deleted file mode 100644 index 20d6f35..0000000 Binary files a/mods/ITEMS/dryplants/textures/dryplants_spear_grass.png and /dev/null differ diff --git a/mods/ITEMS/dye/init.lua b/mods/ITEMS/dye/init.lua deleted file mode 100644 index 8028457..0000000 --- a/mods/ITEMS/dye/init.lua +++ /dev/null @@ -1,112 +0,0 @@ --- Other mods can use these for looping through available colors - -dye = {} -dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"} -dye.excolors = {"white", "lightgrey", "grey", "darkgrey", "black", "red", "orange", "yellow", - "lime", "green", "aqua", "cyan", "sky_blue", "blue", "violet", "magenta", "red_violet"} - --- Make dye names and descriptions available globally - -dye.dyes = { - {"white", "White"}, - {"grey", "Grey"}, - {"dark_grey", "Dark grey"}, - {"black", "Black"}, - {"violet", "Violet"}, - {"blue", "Blue"}, - {"cyan", "Cyan"}, - {"dark_green", "Dark green"}, - {"green", "Green"}, - {"yellow", "Yellow"}, - {"brown", "Brown"}, - {"orange", "Orange"}, - {"red", "Red"}, - {"magenta", "Magenta"}, - {"pink", "Pink"}, -} - --- This collection of colors is partly a historic thing, partly something else - -local dyes = { - {"white", "White dye", {dye=1, basecolor_white=1, excolor_white=1, unicolor_white=1}}, - {"grey", "Grey dye", {dye=1, basecolor_grey=1, excolor_grey=1, unicolor_grey=1}}, - {"dark_grey", "Dark grey dye", {dye=1, basecolor_grey=1, excolor_darkgrey=1, unicolor_darkgrey=1}}, - {"black", "Black dye", {dye=1, basecolor_black=1, excolor_black=1, unicolor_black=1}}, - {"violet", "Violet dye", {dye=1, basecolor_magenta=1, excolor_violet=1, unicolor_violet=1}}, - {"blue", "Blue dye", {dye=1, basecolor_blue=1, excolor_blue=1, unicolor_blue=1}}, - {"cyan", "Cyan dye", {dye=1, basecolor_cyan=1, excolor_cyan=1, unicolor_cyan=1}}, - {"dark_green", "Dark green dye", {dye=1, basecolor_green=1, excolor_green=1, unicolor_dark_green=1}}, - {"green", "Green dye", {dye=1, basecolor_green=1, excolor_green=1, unicolor_green=1}}, - {"yellow", "Yellow dye", {dye=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1}}, - {"brown", "Brown dye", {dye=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1}}, - {"orange", "Orange dye", {dye=1, basecolor_orange=1, excolor_orange=1, unicolor_orange=1}}, - {"red", "Red dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_red=1}}, - {"magenta", "Magenta dye", {dye=1, basecolor_magenta=1, excolor_red_violet=1, unicolor_red_violet=1}}, - {"pink", "Pink dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_light_red=1}}, -} - --- Define items - -for _, row in ipairs(dyes) do - local name = row[1] - local description = row[2] - local groups = row[3] - local item_name = "dye:" .. name - local item_image = "dye_" .. name .. ".png" - minetest.register_craftitem(item_name, { - inventory_image = item_image, - description = description, - groups = groups - }) - minetest.register_craft({ - type = "shapeless", - output = item_name .. " 4", - recipe = {"group:flower,color_" .. name}, - }) -end - --- Manually add coal->black dye - -minetest.register_craft({ - type = "shapeless", - output = "dye:black 4", - recipe = {"group:coal"}, -}) - --- Mix recipes -local dye_recipes = { - -- src1, src2, dst - -- RYB mixes - {"red", "blue", "violet"}, -- "purple" - {"yellow", "red", "orange"}, - {"yellow", "blue", "green"}, - -- RYB complementary mixes - {"yellow", "violet", "dark_grey"}, - {"blue", "orange", "dark_grey"}, - -- CMY mixes - approximation - {"cyan", "yellow", "green"}, - {"cyan", "magenta", "blue"}, - {"yellow", "magenta", "red"}, - -- other mixes that result in a color we have - {"red", "green", "brown"}, - {"magenta", "blue", "violet"}, - {"green", "blue", "cyan"}, - {"pink", "violet", "magenta"}, - -- mixes with black - {"white", "black", "grey"}, - {"grey", "black", "dark_grey"}, - {"green", "black", "dark_green"}, - {"orange", "black", "brown"}, - -- mixes with white - {"white", "red", "pink"}, - {"white", "dark_grey", "grey"}, - {"white", "dark_green", "green"}, -} - -for _, mix in pairs(dye_recipes) do - minetest.register_craft({ - type = "shapeless", - output = 'dye:' .. mix[3] .. ' 2', - recipe = {'dye:' .. mix[1], 'dye:' .. mix[2]}, - }) -end diff --git a/mods/ITEMS/farming/README.txt b/mods/ITEMS/farming/README.txt deleted file mode 100644 index 3ccd8c3..0000000 --- a/mods/ITEMS/farming/README.txt +++ /dev/null @@ -1,37 +0,0 @@ -Minetest Game mod: farming -========================== -See license.txt for license information. - -Authors of source code ----------------------- -Originally by PilzAdam (MIT) -webdesigner97 (MIT) -Various Minetest developers and contributors (MIT) - -Authors of media (textures) ---------------------------- -Created by PilzAdam (CC BY 3.0): - farming_bread.png - farming_soil.png - farming_soil_wet.png - farming_soil_wet_side.png - farming_string.png - -Created by BlockMen (CC BY 3.0): - farming_tool_diamondhoe.png - farming_tool_mesehoe.png - farming_tool_bronzehoe.png - farming_tool_steelhoe.png - farming_tool_stonehoe.png - farming_tool_woodhoe.png - -Created by MasterGollum (CC BY 3.0): - farming_straw.png - -Created by Gambit (CC BY 3.0): - farming_wheat.png - farming_wheat_*.png - farming_cotton_*.png - farming_flour.png - farming_cotton_seed.png - farming_wheat_seed.png diff --git a/mods/ITEMS/farming/api.lua b/mods/ITEMS/farming/api.lua deleted file mode 100644 index 35a77e9..0000000 --- a/mods/ITEMS/farming/api.lua +++ /dev/null @@ -1,404 +0,0 @@ - --- Wear out hoes, place soil --- TODO Ignore group:flower -farming.registered_plants = {} - -farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) - local pt = pointed_thing - -- check if pointing at a node - if not pt then - return - end - if pt.type ~= "node" then - return - end - - local under = minetest.get_node(pt.under) - local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} - local above = minetest.get_node(p) - - -- return if any of the nodes is not registered - if not minetest.registered_nodes[under.name] then - return - end - if not minetest.registered_nodes[above.name] then - return - end - - -- check if the node above the pointed thing is air - if above.name ~= "air" then - return - end - - -- check if pointing at soil - if minetest.get_item_group(under.name, "soil") ~= 1 then - return - end - - -- check if (wet) soil defined - local regN = minetest.registered_nodes - if regN[under.name].soil == nil or regN[under.name].soil.wet == nil or regN[under.name].soil.dry == nil then - return - end - - if minetest.is_protected(pt.under, user:get_player_name()) then - minetest.record_protection_violation(pt.under, user:get_player_name()) - return - end - if minetest.is_protected(pt.above, user:get_player_name()) then - minetest.record_protection_violation(pt.above, user:get_player_name()) - return - end - - -- turn the node into soil and play sound - minetest.set_node(pt.under, {name = regN[under.name].soil.dry}) - minetest.sound_play("default_dig_crumbly", { - pos = pt.under, - gain = 0.5, - }) - - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(user:get_player_name())) then - -- wear tool - local wdef = itemstack:get_definition() - itemstack:add_wear(65535/(uses-1)) - -- tool break sound - if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}) - end - end - return itemstack -end - --- Register new hoes -farming.register_hoe = function(name, def) - -- Check for : prefix (register new hoes in your mod's namespace) - if name:sub(1,1) ~= ":" then - name = ":" .. name - end - -- Check def table - if def.description == nil then - def.description = "Hoe" - end - if def.inventory_image == nil then - def.inventory_image = "unknown_item.png" - end - if def.recipe == nil then - def.recipe = { - {"air","air",""}, - {"","group:stick",""}, - {"","group:stick",""} - } - end - if def.max_uses == nil then - def.max_uses = 30 - end - -- Register the tool - minetest.register_tool(name, { - description = def.description, - inventory_image = def.inventory_image, - on_use = function(itemstack, user, pointed_thing) - return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses) - end, - groups = def.groups, - sound = {breaks = "default_tool_breaks"}, - }) - -- Register its recipe - if def.material == nil then - minetest.register_craft({ - output = name:sub(2), - recipe = def.recipe - }) - else - minetest.register_craft({ - output = name:sub(2), - recipe = { - {def.material, def.material, ""}, - {"", "group:stick", ""}, - {"", "group:stick", ""} - } - }) - -- Reverse Recipe - minetest.register_craft({ - output = name:sub(2), - recipe = { - {"", def.material, def.material}, - {"", "group:stick", ""}, - {"", "group:stick", ""} - } - }) - end -end - --- how often node timers for plants will tick, +/- some random value -local function tick(pos) - minetest.get_node_timer(pos):start(math.random(166, 286)) -end --- how often a growth failure tick is retried (e.g. too dark) -local function tick_again(pos) - minetest.get_node_timer(pos):start(math.random(40, 80)) -end - --- Seed placement -farming.place_seed = function(itemstack, placer, pointed_thing, plantname) - local pt = pointed_thing - -- check if pointing at a node - if not pt then - return itemstack - end - if pt.type ~= "node" then - return itemstack - end - - local under = minetest.get_node(pt.under) - local above = minetest.get_node(pt.above) - - if minetest.is_protected(pt.under, placer:get_player_name()) then - minetest.record_protection_violation(pt.under, placer:get_player_name()) - return - end - if minetest.is_protected(pt.above, placer:get_player_name()) then - minetest.record_protection_violation(pt.above, placer:get_player_name()) - return - end - - -- return if any of the nodes is not registered - if not minetest.registered_nodes[under.name] then - return itemstack - end - if not minetest.registered_nodes[above.name] then - return itemstack - end - - -- check if pointing at the top of the node - if pt.above.y ~= pt.under.y+1 then - return itemstack - end - - -- check if you can replace the node above the pointed node - if not minetest.registered_nodes[above.name].buildable_to then - return itemstack - end - - -- check if pointing at soil - if minetest.get_item_group(under.name, "soil") < 2 then - return itemstack - end - - -- add the node and remove 1 item from the itemstack - minetest.add_node(pt.above, {name = plantname, param2 = 1}) - tick(pt.above) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then - itemstack:take_item() - end - return itemstack -end - -farming.grow_plant = function(pos, elapsed) - local node = minetest.get_node(pos) - local name = node.name - local def = minetest.registered_nodes[name] - - if not def.next_plant then - -- disable timer for fully grown plant - return - end - - -- grow seed - if minetest.get_item_group(node.name, "seed") and def.fertility then - local soil_node = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) - if not soil_node then - tick_again(pos) - return - end - -- omitted is a check for light, we assume seeds can germinate in the dark. - for _, v in pairs(def.fertility) do - if minetest.get_item_group(soil_node.name, v) ~= 0 then - local placenode = {name = def.next_plant} - if def.place_param2 then - placenode.param2 = def.place_param2 - end - minetest.swap_node(pos, placenode) - if minetest.registered_nodes[def.next_plant].next_plant then - tick(pos) - return - end - end - end - - return - end - - -- check if on wet soil - local below = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) - if minetest.get_item_group(below.name, "soil") < 3 then - tick_again(pos) - return - end - - -- check light - local light = minetest.get_node_light(pos) - if not light or light < def.minlight or light > def.maxlight then - tick_again(pos) - return - end - - -- grow - local placenode = {name = def.next_plant} - if def.place_param2 then - placenode.param2 = def.place_param2 - end - minetest.swap_node(pos, placenode) - - -- new timer needed? - if minetest.registered_nodes[def.next_plant].next_plant then - tick(pos) - end - return -end - --- Register plants -farming.register_plant = function(name, def) - local mname = name:split(":")[1] - local pname = name:split(":")[2] - - -- Check def table - if not def.description then - def.description = "Seed" - end - if not def.inventory_image then - def.inventory_image = "unknown_item.png" - end - if not def.steps then - return nil - end - if not def.minlight then - def.minlight = 1 - end - if not def.maxlight then - def.maxlight = 14 - end - if not def.fertility then - def.fertility = {} - end - - farming.registered_plants[pname] = def - - -- Register seed - local lbm_nodes = {mname .. ":seed_" .. pname} - local g = {seed = 1, snappy = 3, attached_node = 1, flammable = 2} - for k, v in pairs(def.fertility) do - g[v] = 1 - end - minetest.register_node(":" .. mname .. ":seed_" .. pname, { - description = def.description, - tiles = {def.inventory_image}, - inventory_image = def.inventory_image, - wield_image = def.inventory_image, - drawtype = "signlike", - groups = g, - paramtype = "light", - paramtype2 = "wallmounted", - place_param2 = def.place_param2 or nil, -- this isn't actually used for placement - walkable = false, - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, - fertility = def.fertility, - sounds = default.node_sound_dirt_defaults({ - dig = {name = "", gain = 0}, - dug = {name = "default_grass_footstep", gain = 0.2}, - place = {name = "default_place_node", gain = 0.25}, - }), - - on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local udef = minetest.registered_nodes[node.name] - if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return udef.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - - return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":seed_" .. pname) - end, - next_plant = mname .. ":" .. pname .. "_1", - on_timer = farming.grow_plant, - minlight = def.minlight, - maxlight = def.maxlight, - }) - - -- Register harvest - minetest.register_craftitem(":" .. mname .. ":" .. pname, { - description = pname:gsub("^%l", string.upper), - inventory_image = mname .. "_" .. pname .. ".png", - groups = {flammable = 2}, - }) - - -- Register growing steps - for i = 1, def.steps do - local base_rarity = 1 - if def.steps ~= 1 then - base_rarity = 8 - (i - 1) * 7 / (def.steps - 1) - end - local drop = { - items = { - {items = {mname .. ":" .. pname}, rarity = base_rarity}, - {items = {mname .. ":" .. pname}, rarity = base_rarity * 2}, - {items = {mname .. ":seed_" .. pname}, rarity = base_rarity}, - {items = {mname .. ":seed_" .. pname}, rarity = base_rarity * 2}, - } - } - local nodegroups = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1} - nodegroups[pname] = i - - local next_plant = nil - - if i < def.steps then - next_plant = mname .. ":" .. pname .. "_" .. (i + 1) - lbm_nodes[#lbm_nodes + 1] = mname .. ":" .. pname .. "_" .. i - end - - minetest.register_node(":" .. mname .. ":" .. pname .. "_" .. i, { - drawtype = "plantlike", - waving = 1, - tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, - paramtype = "light", - paramtype2 = def.paramtype2 or nil, - place_param2 = def.place_param2 or nil, - walkable = false, - buildable_to = true, - drop = drop, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, - groups = nodegroups, - sounds = default.node_sound_leaves_defaults(), - next_plant = next_plant, - on_timer = farming.grow_plant, - minlight = def.minlight, - maxlight = def.maxlight, - }) - end - - -- replacement LBM for pre-nodetimer plants - minetest.register_lbm({ - name = ":" .. mname .. ":start_nodetimer_" .. pname, - nodenames = lbm_nodes, - action = function(pos, node) - tick_again(pos) - end, - }) - - -- Return - local r = { - seed = mname .. ":seed_" .. pname, - harvest = mname .. ":" .. pname - } - return r -end diff --git a/mods/ITEMS/farming/depends.txt b/mods/ITEMS/farming/depends.txt deleted file mode 100644 index 470ec30..0000000 --- a/mods/ITEMS/farming/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -wool diff --git a/mods/ITEMS/farming/hoes.lua b/mods/ITEMS/farming/hoes.lua deleted file mode 100644 index f40eca7..0000000 --- a/mods/ITEMS/farming/hoes.lua +++ /dev/null @@ -1,35 +0,0 @@ -farming.register_hoe(":farming:hoe_wood", { - description = "Wooden Hoe", - inventory_image = "farming_tool_woodhoe.png", - max_uses = 30, - material = "group:wood", - groups = {flammable = 2}, -}) - -farming.register_hoe(":farming:hoe_stone", { - description = "Stone Hoe", - inventory_image = "farming_tool_stonehoe.png", - max_uses = 90, - material = "group:stone" -}) - -farming.register_hoe(":farming:hoe_steel", { - description = "Steel Hoe", - inventory_image = "farming_tool_steelhoe.png", - max_uses = 200, - material = "default:steel_ingot" -}) - -farming.register_hoe(":farming:hoe_bronze", { - description = "Bronze Hoe", - inventory_image = "farming_tool_bronzehoe.png", - max_uses = 220, - material = "default:bronze_ingot" -}) - -farming.register_hoe(":farming:hoe_diamond", { - description = "Diamond Hoe", - inventory_image = "farming_tool_diamondhoe.png", - max_uses = 500, - material = "default:diamond" -}) diff --git a/mods/ITEMS/farming/init.lua b/mods/ITEMS/farming/init.lua deleted file mode 100644 index 97dc9b4..0000000 --- a/mods/ITEMS/farming/init.lua +++ /dev/null @@ -1,109 +0,0 @@ --- Global farming namespace -farming = {} -farming.path = minetest.get_modpath("farming") - --- Load files -dofile(farming.path .. "/api.lua") -dofile(farming.path .. "/nodes.lua") -dofile(farming.path .. "/hoes.lua") - --- WHEAT -farming.register_plant("farming:wheat", { - description = "Wheat seed", - paramtype2 = "meshoptions", - inventory_image = "farming_wheat_seed.png", - steps = 8, - minlight = 13, - maxlight = default.LIGHT_MAX, - fertility = {"grassland"}, - groups = {flammable = 4}, - place_param2 = 3, -}) -minetest.register_craftitem("farming:flour", { - description = "Flour", - inventory_image = "farming_flour.png", - groups = {flammable = 1}, -}) - -minetest.register_craftitem("farming:bread", { - description = "Bread", - inventory_image = "farming_bread.png", - on_use = minetest.item_eat(5), - groups = {flammable = 2}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "farming:flour", - recipe = {"farming:wheat", "farming:wheat", "farming:wheat", "farming:wheat"} -}) - -minetest.register_craft({ - type = "cooking", - cooktime = 15, - output = "farming:bread", - recipe = "farming:flour" -}) - --- Cotton -farming.register_plant("farming:cotton", { - description = "Cotton seed", - inventory_image = "farming_cotton_seed.png", - steps = 8, - minlight = 13, - maxlight = default.LIGHT_MAX, - fertility = {"grassland", "desert"}, - groups = {flammable = 4}, -}) - -minetest.register_alias("farming:string", "farming:cotton") - -minetest.register_craft({ - output = "wool:white", - recipe = { - {"farming:cotton", "farming:cotton"}, - {"farming:cotton", "farming:cotton"}, - } -}) - --- Straw -minetest.register_craft({ - output = "farming:straw 3", - recipe = { - {"farming:wheat", "farming:wheat", "farming:wheat"}, - {"farming:wheat", "farming:wheat", "farming:wheat"}, - {"farming:wheat", "farming:wheat", "farming:wheat"}, - } -}) - -minetest.register_craft({ - output = "farming:wheat 3", - recipe = { - {"farming:straw"}, - } -}) - --- Fuels -minetest.register_craft({ - type = "fuel", - recipe = "farming:straw", - burntime = 3, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:wheat", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:cotton", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "farming:hoe_wood", - burntime = 5, -}) diff --git a/mods/ITEMS/farming/nodes.lua b/mods/ITEMS/farming/nodes.lua deleted file mode 100644 index c969d31..0000000 --- a/mods/ITEMS/farming/nodes.lua +++ /dev/null @@ -1,171 +0,0 @@ -minetest.override_item("default:dirt", { - soil = { - base = "default:dirt", - dry = "farming:soil", - wet = "farming:soil_wet" - } -}) - -minetest.override_item("default:dirt_with_grass", { - soil = { - base = "default:dirt_with_grass", - dry = "farming:soil", - wet = "farming:soil_wet" - } -}) - -minetest.override_item("default:dirt_with_dry_grass", { - soil = { - base = "default:dirt_with_dry_grass", - dry = "farming:soil", - wet = "farming:soil_wet" - } -}) - -minetest.override_item("default:dirt_with_rainforest_litter", { - soil = { - base = "default:dirt_with_rainforest_litter", - dry = "farming:soil", - wet = "farming:soil_wet" - } -}) - -minetest.register_node("farming:soil", { - description = "Soil", - tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, - drop = "default:dirt", - groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1}, - sounds = default.node_sound_dirt_defaults(), - soil = { - base = "default:dirt", - dry = "farming:soil", - wet = "farming:soil_wet" - } -}) - -minetest.register_node("farming:soil_wet", { - description = "Wet Soil", - tiles = {"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet_side.png"}, - drop = "default:dirt", - groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1}, - sounds = default.node_sound_dirt_defaults(), - soil = { - base = "default:dirt", - dry = "farming:soil", - wet = "farming:soil_wet" - } -}) - -minetest.override_item("default:desert_sand", { - groups = {crumbly=3, falling_node=1, sand=1, soil = 1}, - soil = { - base = "default:desert_sand", - dry = "farming:desert_sand_soil", - wet = "farming:desert_sand_soil_wet" - } -}) -minetest.register_node("farming:desert_sand_soil", { - description = "Desert Sand Soil", - drop = "default:desert_sand", - tiles = {"farming_desert_sand_soil.png", "default_desert_sand.png"}, - groups = {crumbly=3, not_in_creative_inventory = 1, falling_node=1, sand=1, soil = 2, desert = 1, field = 1}, - sounds = default.node_sound_sand_defaults(), - soil = { - base = "default:desert_sand", - dry = "farming:desert_sand_soil", - wet = "farming:desert_sand_soil_wet" - } -}) - -minetest.register_node("farming:desert_sand_soil_wet", { - description = "Wet Desert Sand Soil", - drop = "default:desert_sand", - tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"}, - groups = {crumbly=3, falling_node=1, sand=1, not_in_creative_inventory=1, soil=3, wet = 1, desert = 1, field = 1}, - sounds = default.node_sound_sand_defaults(), - soil = { - base = "default:desert_sand", - dry = "farming:desert_sand_soil", - wet = "farming:desert_sand_soil_wet" - } -}) - -minetest.register_node("farming:straw", { - description = "Straw", - tiles = {"farming_straw.png"}, - is_ground_content = false, - groups = {snappy=3, flammable=4, fall_damage_add_percent=-30}, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_abm({ - label = "Farming soil", - nodenames = {"group:field"}, - interval = 15, - chance = 4, - action = function(pos, node) - local n_def = minetest.registered_nodes[node.name] or nil - local wet = n_def.soil.wet or nil - local base = n_def.soil.base or nil - local dry = n_def.soil.dry or nil - if not n_def or not n_def.soil or not wet or not base or not dry then - return - end - - pos.y = pos.y + 1 - local nn = minetest.get_node_or_nil(pos) - if not nn or not nn.name then - return - end - local nn_def = minetest.registered_nodes[nn.name] or nil - pos.y = pos.y - 1 - - if nn_def and nn_def.walkable and minetest.get_item_group(nn.name, "plant") == 0 then - minetest.set_node(pos, {name = base}) - return - end - -- check if there is water nearby - local wet_lvl = minetest.get_item_group(node.name, "wet") - if minetest.find_node_near(pos, 3, {"group:water"}) then - -- if it is dry soil and not base node, turn it into wet soil - if wet_lvl == 0 then - minetest.set_node(pos, {name = wet}) - end - else - -- only turn back if there are no unloaded blocks (and therefore - -- possible water sources) nearby - if not minetest.find_node_near(pos, 3, {"ignore"}) then - -- turn it back into base if it is already dry - if wet_lvl == 0 then - -- only turn it back if there is no plant/seed on top of it - if minetest.get_item_group(nn.name, "plant") == 0 and minetest.get_item_group(nn.name, "seed") == 0 then - minetest.set_node(pos, {name = base}) - end - - -- if its wet turn it back into dry soil - elseif wet_lvl == 1 then - minetest.set_node(pos, {name = dry}) - end - end - end - end, -}) - - -for i = 1, 5 do - minetest.override_item("default:grass_"..i, {drop = { - max_items = 1, - items = { - {items = {'farming:seed_wheat'},rarity = 5}, - {items = {'default:grass_1'}}, - } - }}) -end - -minetest.override_item("default:junglegrass", {drop = { - max_items = 1, - items = { - {items = {'farming:seed_cotton'},rarity = 8}, - {items = {'default:junglegrass'}}, - } -}}) diff --git a/mods/ITEMS/farming/textures/farming_soil.png b/mods/ITEMS/farming/textures/farming_soil.png deleted file mode 100644 index 667794e..0000000 Binary files a/mods/ITEMS/farming/textures/farming_soil.png and /dev/null differ diff --git a/mods/ITEMS/farming/textures/farming_soil_wet.png b/mods/ITEMS/farming/textures/farming_soil_wet.png deleted file mode 100644 index e487ef5..0000000 Binary files a/mods/ITEMS/farming/textures/farming_soil_wet.png and /dev/null differ diff --git a/mods/ITEMS/fences/depends.txt b/mods/ITEMS/fences/depends.txt deleted file mode 100644 index 1e82165..0000000 --- a/mods/ITEMS/fences/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -australia diff --git a/mods/ITEMS/fences/init.lua b/mods/ITEMS/fences/init.lua deleted file mode 100644 index 2f2b0dd..0000000 --- a/mods/ITEMS/fences/init.lua +++ /dev/null @@ -1,253 +0,0 @@ ---[[ - Fences ---]] - -local fences = {} - --- --- Fence registration helper --- - -function fences.register_fence(name, def) - minetest.register_craft({ - output = name .. " 4", - recipe = { - { def.material, 'group:stick', def.material }, - { def.material, 'group:stick', def.material }, - } - }) - - local fence_texture = "fences_fence_overlay.png^" .. def.texture .. - "^fences_fence_overlay.png^[makealpha:255,126,126" - -- Allow almost everything to be overridden - local default_fields = { - paramtype = "light", - drawtype = "nodebox", - node_box = { - type = "connected", - fixed = {{-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}}, - -- connect_top = - -- connect_bottom = - connect_front = {{-1/16,3/16,-1/2,1/16,5/16,-1/8}, - {-1/16,-5/16,-1/2,1/16,-3/16,-1/8}}, - connect_left = {{-1/2,3/16,-1/16,-1/8,5/16,1/16}, - {-1/2,-5/16,-1/16,-1/8,-3/16,1/16}}, - connect_back = {{-1/16,3/16,1/8,1/16,5/16,1/2}, - {-1/16,-5/16,1/8,1/16,-3/16,1/2}}, - connect_right = {{1/8,3/16,-1/16,1/2,5/16,1/16}, - {1/8,-5/16,-1/16,1/2,-3/16,1/16}}, - }, - connects_to = {"group:fence", "group:wood", "group:tree"}, - inventory_image = fence_texture, - wield_image = fence_texture, - tiles = {def.texture}, - sunlight_propagates = true, - is_ground_content = false, - groups = {}, - } - for k, v in pairs(default_fields) do - if not def[k] then - def[k] = v - end - end - - -- Always add to the fence group, even if no group provided - def.groups.fence = 1 - - def.texture = nil - def.material = nil - - minetest.register_node(name, def) -end - - -fences.register_fence("fences:fence_wood", { - description = "Wooden Fence", - texture = "fences_fence_wood.png", - inventory_image = "fences_fence_overlay.png^default_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^default_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "default:wood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults() -}) - -fences.register_fence("fences:fence_acacia_wood", { - description = "Acacia Fence", - texture = "fences_fence_acacia_wood.png", - inventory_image = "fences_fence_overlay.png^default_acacia_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^default_acacia_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "default:acacia_wood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults() -}) - -fences.register_fence("fences:fence_junglewood", { - description = "Jungle Wood Fence", - texture = "fences_fence_junglewood.png", - inventory_image = "fences_fence_overlay.png^default_junglewood.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^default_junglewood.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "default:junglewood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults() -}) - -fences.register_fence("fences:fence_pine_wood", { - description = "Pine Fence", - texture = "fences_fence_pine_wood.png", - inventory_image = "fences_fence_overlay.png^default_pine_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^default_pine_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "default:pine_wood", - groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults() -}) - -fences.register_fence("fences:fence_aspen_wood", { - description = "Aspen Fence", - texture = "fences_fence_aspen_wood.png", - inventory_image = "fences_fence_overlay.png^default_aspen_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^default_aspen_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "default:aspen_wood", - groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults() -}) - -fences.register_fence("fences:fence_eucalyptus_wood", { - description = "Eucalyptus Wood Fence", - texture = "aus_eucalyptus_wood.png", - inventory_image = "fences_fence_overlay.png^aus_eucalyptus_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_eucalyptus_wood.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:eucalyptus_wood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_blackwood", { - description = "Blackwood Fence", - texture = "aus_blackwood.png", - inventory_image = "fences_fence_overlay.png^aus_blackwood.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_blackwood.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:blackwood", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_blue_gum", { - description = "Blue Gum Fence", - texture = "aus_blue_gum.png", - inventory_image = "fences_fence_overlay.png^aus_blue_gum.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_blue_gum.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:bluegum", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_celery_top_pine", { - description = "Celery-top Pine Fence", - texture = "aus_celery_top_pine.png", - inventory_image = "fences_fence_overlay.png^aus_celery_top_pine.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_celery_top_pine.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:celery_top_pine", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_red_mahogany", { - description = "Red Mahogany Fence", - texture = "aus_red_mahogany.png", - inventory_image = "fences_fence_overlay.png^aus_red_mahogany.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_red_mahogany.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:red_mahogany", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_huon_pine", { - description = "Huon Pine Fence", - texture = "aus_huon_pine.png", - inventory_image = "fences_fence_overlay.png^aus_huon_pine.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_huon_pine.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:huon_pine", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_jarrah", { - description = "Jarrah Fence", - texture = "aus_jarrah.png", - inventory_image = "fences_fence_overlay.png^aus_jarrah.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_jarrah.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:jarrah", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_karri", { - description = "Karri Fence", - texture = "aus_karri.png", - inventory_image = "fences_fence_overlay.png^aus_karri.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_karri.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:karri", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_marri", { - description = "Marri Fence", - texture = "aus_marri.png", - inventory_image = "fences_fence_overlay.png^aus_marri.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_marri.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:marri", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_merbau", { - description = "Merbau Fence", - texture = "aus_merbau.png", - inventory_image = "fences_fence_overlay.png^aus_merbau.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_merbau.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:merbau", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_red_gum", { - description = "Red Gum Fence", - texture = "aus_red_gum.png", - inventory_image = "fences_fence_overlay.png^aus_red_gum.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_red_gum.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:red_gum", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_southern_sassafras", { - description = "Southern Sassafras Fence", - texture = "aus_southern_sassafras.png", - inventory_image = "fences_fence_overlay.png^aus_southern_sassafras.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_southern_sassafras.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:southern_sassafras", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_tasmanian_oak", { - description = "Tasmanian Oak Fence", - texture = "aus_tasmanian_oak.png", - inventory_image = "fences_fence_overlay.png^aus_tasmanian_oak.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_tasmanian_oak.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:tasmanian_oak", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -fences.register_fence("fences:fence_tasmanian_myrtle", { - description = "Tasmanian Myrtle Fence", - texture = "aus_tasmanian_myrtle.png", - inventory_image = "fences_fence_overlay.png^aus_tasmanian_myrtle.png^fences_fence_overlay.png^[makealpha:255,126,126", - wield_image = "fences_fence_overlay.png^aus_tasmanian_myrtle.png^fences_fence_overlay.png^[makealpha:255,126,126", - material = "australia:tasmanian_myrtle", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults(), -}) - diff --git a/mods/ITEMS/fences/mod.conf b/mods/ITEMS/fences/mod.conf deleted file mode 100644 index f188823..0000000 --- a/mods/ITEMS/fences/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = fences diff --git a/mods/ITEMS/ferns/crafting.lua b/mods/ITEMS/ferns/crafting.lua deleted file mode 100644 index 8ca3c7e..0000000 --- a/mods/ITEMS/ferns/crafting.lua +++ /dev/null @@ -1,78 +0,0 @@ --- support for i18n -local S = plantlife_i18n.gettext ------------------------------------------------------------------------------------------------ --- Ferns - Crafting 0.0.5 ------------------------------------------------------------------------------------------------ --- (by Mossmanikin) --- License (everything): WTFPL ------------------------------------------------------------------------------------------------ -minetest.register_craft({ - type = "shapeless", - output = "ferns:fiddlehead 3", - recipe = {"ferns:fern_01"}, - replacements = { - {"ferns:fern_01", "ferns:ferntuber"} - }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "ferns:fiddlehead 3", - recipe = {"ferns:tree_fern_leaves"}, - replacements = { - {"ferns:tree_fern_leaves", "ferns:sapling_tree_fern"} - }, -}) ------------------------------------------------------------------------------------------------ --- FIDDLEHEAD ------------------------------------------------------------------------------------------------ -minetest.register_alias("archaeplantae:fiddlehead", "ferns:fiddlehead") - -minetest.register_craftitem("ferns:fiddlehead", { - description = S("Fiddlehead"), - inventory_image = "ferns_fiddlehead.png", - on_use = minetest.item_eat(-1), -- slightly poisonous when raw -}) -minetest.register_craft({ - type = "cooking", - output = "ferns:fiddlehead_roasted", - recipe = "ferns:fiddlehead", - cooktime = 1, -}) -minetest.register_craftitem("ferns:fiddlehead_roasted", { - description = S("Roasted Fiddlehead"), - inventory_image = "ferns_fiddlehead_roasted.png", - on_use = minetest.item_eat(1), -- edible when cooked -}) ------------------------------------------------------------------------------------------------ --- FERN TUBER ------------------------------------------------------------------------------------------------ -minetest.register_alias("archaeplantae:ferntuber", "ferns:ferntuber") - -minetest.register_craftitem("ferns:ferntuber", { - description = S("Fern Tuber"), - inventory_image = "ferns_ferntuber.png", -}) -minetest.register_craft({ - type = "cooking", - output = "ferns:ferntuber_roasted", - recipe = "ferns:ferntuber", - cooktime = 3, -}) - -minetest.register_alias("archaeplantae:ferntuber_roasted", "ferns:ferntuber_roasted") - -minetest.register_craftitem("ferns:ferntuber_roasted", { - description = S("Roasted Fern Tuber"), - inventory_image = "ferns_ferntuber_roasted.png", - on_use = minetest.item_eat(3), -}) ------------------------------------------------------------------------------------------------ --- HORSETAIL (EQUISETUM) --> GREEN DYE https://en.wikipedia.org/wiki/Equisetum ------------------------------------------------------------------------------------------------ -minetest.register_craft({ - type = "shapeless", - output = "dye:green", - recipe = {"group:horsetail"}, -}) - diff --git a/mods/ITEMS/ferns/depends.txt b/mods/ITEMS/ferns/depends.txt deleted file mode 100644 index 2f4ee6f..0000000 --- a/mods/ITEMS/ferns/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -biome_lib -plantlife_i18n -default -australia? diff --git a/mods/ITEMS/ferns/fern.lua b/mods/ITEMS/ferns/fern.lua deleted file mode 100644 index 65988c3..0000000 --- a/mods/ITEMS/ferns/fern.lua +++ /dev/null @@ -1,182 +0,0 @@ ------------------------------------------------------------------------------------------------ --- Ferns - Fern 0.1.0 ------------------------------------------------------------------------------------------------ --- by Mossmanikin --- License (everything): WTFPL --- Contains code from: biome_lib --- Looked at code from: default, flowers, painting, trees --- Dependencies: biome_lib --- Supports: dryplants, stoneage, sumpf ------------------------------------------------------------------------------------------------ --- some inspiration from here --- https://en.wikipedia.org/wiki/Athyrium_yokoscense --- http://www.mygarden.net.au/gardening/athyrium-yokoscense/3900/1 ------------------------------------------------------------------------------------------------ - -assert(abstract_ferns.config.enable_lady_fern == true) - --- support for i18n -local S = plantlife_i18n.gettext - --- Maintain backward compatibilty -minetest.register_alias("archaeplantae:fern", "ferns:fern_03") -minetest.register_alias("archaeplantae:fern_mid", "ferns:fern_02") -minetest.register_alias("archaeplantae:fern_small", "ferns:fern_01") -minetest.register_alias("ferns:fern_04", "ferns:fern_02") -- for placing - -local nodenames = {} - -local function create_nodes() - local images = { "ferns_fern.png", "ferns_fern_mid.png", "ferns_fern_big.png" } - local vscales = { 1, math.sqrt(8), math.sqrt(11) } - local descs = { S("Lady-fern (Athyrium)"), nil, nil } - - for i = 1, 3 do - local node_on_place = nil - if i == 1 then - node_on_place = function(itemstack, placer, pointed_thing) - -- place a random fern - local stack = ItemStack("ferns:fern_0"..math.random(1,4)) - local ret = minetest.item_place(stack, placer, pointed_thing) - return ItemStack("ferns:fern_01 "..itemstack:get_count()-(1-ret:get_count())) -- TODO FIXME? - end - end - nodenames[i] = "ferns:fern_"..string.format("%02d", i) - minetest.register_node(nodenames[i], { - description = descs[i] or (S("Lady-fern (Athyrium)").." " .. string.format("%02d", i)), - inventory_image = "ferns_fern.png", - drawtype = "plantlike", - visual_scale = vscales[i], - paramtype = "light", - tiles = { images[i] }, - walkable = false, - buildable_to = true, - groups = {snappy=3,flammable=2,attached_node=1,not_in_creative_inventory=1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, - }, - drop = "ferns:fern_01", - on_place = node_on_place - }) - end -end - ------------------------------------------------------------------------------------------------ --- Init ------------------------------------------------------------------------------------------------ - -create_nodes() - ------------------------------------------------------------------------------------------------ --- Spawning ------------------------------------------------------------------------------------------------ - -if abstract_ferns.config.lady_ferns_near_tree == true then - biome_lib:register_generate_plant({ -- near trees (woodlands) - surface = { - "default:dirt_with_grass", - "default:mossycobble" - }, - max_count = 30, - rarity = 62, - min_elevation = 5, - max_elevation = 140, - near_nodes = { - "australia:blue_gum_tree", - "australia:celery_top_pine_tree", - "australia:southern_sassafras_tree", - "australia:swamp_gum_tree", - "australia:tasmanian_myrtle_tree" - }, - near_nodes_size = 3, - near_nodes_vertical = 2, - near_nodes_count = 1, - plantlife_limit = -0.9, - random_facedir = { 0, 179 }, - }, - nodenames - ) -end - -if abstract_ferns.config.lady_ferns_near_rock == true then - biome_lib:register_generate_plant({ -- near stone (mountains) - surface = { - "default:dirt_with_grass", - "default:mossycobble", - "group:falling_node" - }, - max_count = 35, - rarity = 40, - min_elevation = 5, - max_elevation = 140, - near_nodes = {"group:stone"}, - near_nodes_size = 1, - near_nodes_count = 16, - plantlife_limit = -0.9, - random_facedir = { 0, 179 }, - }, - nodenames - ) -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) - surface = { - "default:dirt_with_grass", - "default:mossycobble", - "default:stone_with_coal", - "default:stone_with_iron", - "default:stone_with_tin", - "australia:stone_with_silver" - }, - max_count = 1200, - rarity = 25, - min_elevation = 5, - max_elevation = 140, - near_nodes = { - "default:stone_with_iron", - "default:stone_with_copper", - "default:stone_with_gold", - "default:stone_with_diamond", - "default:stone_with_tin", - "australia:stone_with_silver" - }, - near_nodes_size = 2, - near_nodes_vertical = 4, - near_nodes_count = 2, - plantlife_limit = -0.9, - random_facedir = { 0, 179 }, - }, - nodenames - ) -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({ - surface = { - "default:dirt_with_grass", - "default:mossycobble", - "default:stone_with_coal", - "default:stone_with_iron", - "default:stone_with_tin", - "australia:stone_with_silver" - }, - max_count = 70, - rarity = 25, - min_elevation = 5, - max_elevation = 140, - near_nodes = { - "default:stone" - }, - near_nodes_size = 2, - near_nodes_vertical = 2, - near_nodes_count = 3, - plantlife_limit = -0.9, - random_facedir = { 0, 179 }, - }, - nodenames - ) -end - diff --git a/mods/ITEMS/ferns/gianttreefern.lua b/mods/ITEMS/ferns/gianttreefern.lua deleted file mode 100644 index 2e38959..0000000 --- a/mods/ITEMS/ferns/gianttreefern.lua +++ /dev/null @@ -1,337 +0,0 @@ ------------------------------------------------------------------------------------------------ --- Ferns - Giant Tree Fern 0.1.1 ------------------------------------------------------------------------------------------------ --- by Mossmanikin --- License (everything): WTFPL --- Contains code from: biome_lib --- Looked at code from: 4seasons, default --- Supports: vines ------------------------------------------------------------------------------------------------ - -assert(abstract_ferns.config.enable_giant_treefern == true) - --- support for i18n -local S = plantlife_i18n.gettext --- lot of code, lot to load - -abstract_ferns.grow_giant_tree_fern = function(pos) - local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} - if minetest.get_node(pos_01).name ~= "air" - and minetest.get_node(pos_01).name ~= "ferns:sapling_giant_tree_fern" - and minetest.get_node(pos_01).name ~= "default:junglegrass" then - return - end - - local size = math.random(4,8) -- min of range must be >= 4 - - local leafchecks = { - { - direction = 3, - positions = { - {x = pos.x + 1, y = pos.y + size - 1, z = pos.z }, - {x = pos.x + 2, y = pos.y + size , z = pos.z }, - {x = pos.x + 3, y = pos.y + size - 1, z = pos.z }, - {x = pos.x + 4, y = pos.y + size - 2, z = pos.z } - } - }, - { - direction = 1, - positions = { - {x = pos.x - 1, y = pos.y + size - 1, z = pos.z }, - {x = pos.x - 2, y = pos.y + size, z = pos.z }, - {x = pos.x - 3, y = pos.y + size - 1, z = pos.z }, - {x = pos.x - 4, y = pos.y + size - 2, z = pos.z } - } - }, - { - direction = 2, - positions = { - {x = pos.x , y = pos.y + size - 1, z = pos.z + 1}, - {x = pos.x , y = pos.y + size , z = pos.z + 2}, - {x = pos.x , y = pos.y + size - 1, z = pos.z + 3}, - {x = pos.x , y = pos.y + size - 2, z = pos.z + 4} - } - }, - { - direction = 0, - positions = { - {x = pos.x , y = pos.y + size - 1, z = pos.z - 1}, - {x = pos.x , y = pos.y + size , z = pos.z - 2}, - {x = pos.x , y = pos.y + size - 1, z = pos.z - 3}, - {x = pos.x , y = pos.y + size - 2, z = pos.z - 4} - } - } - } - - local brk = false - for i = 1, size-3 do - if minetest.get_node({x = pos.x, y = pos.y + i, z = pos.z}).name ~= "air" then - brk = true - break - end - minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, {name="ferns:fern_trunk_big"}) - end - if not brk then - minetest.set_node({x = pos.x, y = pos.y + size-2, z = pos.z}, {name="ferns:fern_trunk_big_top"}) - minetest.set_node({x = pos.x, y = pos.y + size-1, z = pos.z}, {name="ferns:tree_fern_leaves_giant"}) - - -- all the checking for air below is to prevent some ugly bugs (incomplete trunks of neighbouring trees), it's a bit slower, but worth the result - - -- assert(#leafchecks == 4) - for i = 1, 4 do - local positions = leafchecks[i].positions - local rot = leafchecks[i].direction - local endpos = 4 -- If the loop below adds all intermediate leaves then the "terminating" leaf will be at positions[4] - -- assert(#positions == 4) - -- add leaves so long as the destination nodes are air - for j = 1, 3 do - if minetest.get_node(positions[j]).name == "air" then - minetest.set_node(positions[j], {name="ferns:tree_fern_leave_big"}) - else - endpos = j - break - end - end - -- add the terminating leaf if required and possible - if endpos == 4 and minetest.get_node(positions[endpos]).name == "air" then - minetest.set_node(positions[endpos], {name="ferns:tree_fern_leave_big_end", param2=rot}) - end - end - end -end - ------------------------------------------------------------------------------------------------ --- GIANT TREE FERN LEAVES ------------------------------------------------------------------------------------------------ -minetest.register_node("ferns:tree_fern_leaves_giant", { - description = S("Tree Fern Crown (Dicksonia)"), - drawtype = "plantlike", - visual_scale = math.sqrt(11), - wield_scale = {x=0.175, y=0.175, z=0.175}, - paramtype = "light", - tiles = {"ferns_fern_tree_giant.png"}, - inventory_image = "ferns_fern_tree.png", - walkable = false, - groups = { - snappy=3, - flammable=2, - attached_node=1, - not_in_creative_inventory=1 - }, - drop = { - max_items = 2, - items = { - { - -- occasionally, drop a second sapling instead of leaves - -- (extra saplings can also be obtained by replanting and - -- reharvesting leaves) - items = {"ferns:sapling_giant_tree_fern"}, - rarity = 10, - }, - { - items = {"ferns:sapling_giant_tree_fern"}, - }, - { - items = {"ferns:tree_fern_leaves_giant"}, - } - } - }, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, - }, -}) ------------------------------------------------------------------------------------------------ --- GIANT TREE FERN LEAVE PART ------------------------------------------------------------------------------------------------ -minetest.register_node("ferns:tree_fern_leave_big", { - description = S("Giant Tree Fern Leaves"), - drawtype = "raillike", - paramtype = "light", - tiles = { - "ferns_tree_fern_leave_big.png", - }, - walkable = false, - groups = { - snappy=3, - flammable=2, - attached_node=1, - not_in_creative_inventory=1 - }, - drop = "", - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- GIANT TREE FERN LEAVE END ------------------------------------------------------------------------------------------------ -minetest.register_node("ferns:tree_fern_leave_big_end", { - description = S("Giant Tree Fern Leave End"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = { "ferns_tree_fern_leave_big_end.png" }, - walkable = false, - node_box = { - type = "fixed", --- {left, bottom, front, right, top, back } - fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2}, - }, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2}, - }, - groups = { - snappy=3, - flammable=2, - attached_node=1, - not_in_creative_inventory=1 - }, - drop = "", - sounds = default.node_sound_leaves_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- GIANT TREE FERN TRUNK TOP ------------------------------------------------------------------------------------------------ -minetest.register_node("ferns:fern_trunk_big_top", { - description = S("Giant Fern Trunk"), - drawtype = "nodebox", - paramtype = "light", - tiles = { - "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png", - "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png", - "ferns_fern_trunk_big.png" - }, - node_box = { - type = "fixed", --- {left, bottom, front, right, top, back } - fixed = { - {-1/2, 33/64, -1/2, 1/2, 33/64, 1/2}, - {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, - } - }, - selection_box = { - type = "fixed", - fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, - }, - groups = { - tree=1, - choppy=2, - oddly_breakable_by_hand=2, - flammable=3, - wood=1, - not_in_creative_inventory=1, - leafdecay=3 -- to support vines - }, - drop = "ferns:fern_trunk_big", - sounds = default.node_sound_wood_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- GIANT TREE FERN TRUNK ------------------------------------------------------------------------------------------------ -minetest.register_node("ferns:fern_trunk_big", { - description = S("Giant Fern Trunk"), - drawtype = "nodebox", - paramtype = "light", - tiles = { - "ferns_fern_trunk_big_top.png", - "ferns_fern_trunk_big_top.png", - "ferns_fern_trunk_big.png" - }, - node_box = { - type = "fixed", - fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, - }, - selection_box = { - type = "fixed", - fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, - }, - groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, - sounds = default.node_sound_wood_defaults(), - after_destruct = function(pos,oldnode) - local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if node.name == "ferns:fern_trunk_big" or node.name == "ferns:fern_trunk_big_top" then - minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) - minetest.add_item(pos,"ferns:fern_trunk_big") - end - end, -}) - ------------------------------------------------------------------------------------------------ --- GIANT TREE FERN SAPLING ------------------------------------------------------------------------------------------------ -minetest.register_node("ferns:sapling_giant_tree_fern", { - description = S("Giant Tree Fern Sapling"), - drawtype = "plantlike", - paramtype = "light", - tiles = {"ferns_sapling_tree_fern_giant.png"}, - inventory_image = "ferns_sapling_tree_fern_giant.png", - walkable = false, - groups = {snappy=3,flammable=2,flora=1,attached_node=1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, - }, -}) - --- abm -minetest.register_abm({ - nodenames = "ferns:sapling_giant_tree_fern", - interval = 1000, - chance = 4, - action = function(pos, node, _, _) - abstract_ferns.grow_giant_tree_fern({x = pos.x, y = pos.y-1, z = pos.z}) - end -}) - ------------------------------------------------------------------------------------------------ --- GENERATE GIANT TREE FERN ------------------------------------------------------------------------------------------------ - --- in Victorian-Forests and Tasmania biomes -if abstract_ferns.config.enable_giant_treeferns_in_victas == true then - biome_lib:register_generate_plant({ - surface = {"default:dirt_with_grass"}, - max_count = 30, - avoid_nodes = {"group:tree"}, - avoid_radius = 3, - rarity = 66, - seed_diff = 329, - min_elevation = 5, - near_nodes = { - "australia:blue_gum_tree", - "australia:swamp_gum_tree", - "australia:tasmanian_myrtle_tree" - }, - near_nodes_size = 6, - near_nodes_vertical = 2, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_ferns.grow_giant_tree_fern - ) -end - --- In Far North Queensland biome -if abstract_ferns.config.enable_giant_treeferns_in_fnq == true then - biome_lib:register_generate_plant({ - surface = {"default:dirt_with_grass"}, - max_count = 20, - rarity = 66, - seed_diff = 329, - min_elevation = 5, - max_elevation = 25, - near_nodes = {"australia:merbau_tree"}, - near_nodes_size = 6, - near_nodes_vertical = 2, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_ferns.grow_giant_tree_fern - ) -end - diff --git a/mods/ITEMS/ferns/horsetail.lua b/mods/ITEMS/ferns/horsetail.lua deleted file mode 100644 index fcb8908..0000000 --- a/mods/ITEMS/ferns/horsetail.lua +++ /dev/null @@ -1,143 +0,0 @@ ------------------------------------------------------------------------------------------------ --- Archae Plantae - Horsetail 0.0.5 ------------------------------------------------------------------------------------------------ --- by Mossmanikin --- License (everything): WTFPL --- Contains code from: biome_lib --- Looked at code from: default, flowers, trees --- Dependencies: biome_lib --- Supports: dryplants, stoneage, sumpf ------------------------------------------------------------------------------------------------ - -assert(abstract_ferns.config.enable_horsetails == true) - --- support for i18n -local S = plantlife_i18n.gettext ------------------------------------------------------------------------------------------------ --- HORSETAIL (EQUISETUM) ------------------------------------------------------------------------------------------------ - -local node_names = {} - -local function create_nodes() - local selection_boxes = { - { -0.15, -1/2, -0.15, 0.15, -1/16, 0.15 }, - { -0.15, -1/2, -0.15, 0.15, 1/16, 0.15 }, - { -0.15, -1/2, -0.15, 0.15, 4/16, 0.15 }, - { -0.15, -1/2, -0.15, 0.15, 7/16, 0.15 }, - } - - for i = 1, 4 do - local node_name = "ferns:horsetail_" .. string.format("%02d", i) - local node_img = "ferns_horsetail_" .. string.format("%02d", i) .. ".png" - local node_desc - local node_on_use = nil - local node_drop = "ferns:horsetail_04" - - if i == 1 then - node_desc = S("Young Horsetail (Equisetum)") - node_on_use = minetest.item_eat(1) -- young ones edible https://en.wikipedia.org/wiki/Equisetum - node_drop = node_name - elseif i == 4 then - node_desc = S("Horsetail (Equisetum)") - else - node_desc = S("Horsetail (Equisetum)").." ".. string.format("%02d", i) - end - - node_names[i] = node_name - - minetest.register_node(node_name, { - description = node_desc, - drawtype = "plantlike", - paramtype = "light", - tiles = { node_img }, - inventory_image = node_img, - walkable = false, - buildable_to = true, - groups = {snappy=3,flammable=2,attached_node=1,horsetail=1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = selection_boxes[i], - }, - on_use = node_on_use, - drop = node_drop, - }) - end -end - ------------------------------------------------------------------------------------------------ --- Init ------------------------------------------------------------------------------------------------ - -create_nodes() - ------------------------------------------------------------------------------------------------ --- Spawning ------------------------------------------------------------------------------------------------ -if abstract_ferns.config.enable_horsetails_spawning == true then - biome_lib:spawn_on_surfaces({ - spawn_delay = 1200, - spawn_plants = node_names, - spawn_chance = 400, - spawn_surfaces = { - "default:dirt_with_grass", - "default:mossycobble", - "default:gravel" - }, - seed_diff = 329, - min_elevation = 30, - max_elevation = 120, - near_nodes = { - "group:water", - "default:gravel" - }, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - --random_facedir = { 0, 179 }, - }) -end - ------------------------------------------------------------------------------------------------ --- Generating ------------------------------------------------------------------------------------------------ - -if abstract_ferns.config.enable_horsetails_on_grass == true then - biome_lib:register_generate_plant({ - surface = {"default:dirt_with_grass"}, - max_count = 35, - rarity = 40, - min_elevation = 30, - max_elevation = 120, - near_nodes = { - "group:water", -- likes water (of course) - "default:gravel", -- near those on gravel - "default:clay", -- some like clay - "default:mossycobble", - "default:cobble" - }, - near_nodes_size = 3, - near_nodes_vertical = 2, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - node_names - ) -end - -if abstract_ferns.config.enable_horsetails_on_stones == true then - biome_lib:register_generate_plant({ - surface = { - "default:gravel", -- roots go deep - "default:mossycobble" - }, - max_count = 35, - rarity = 20, - min_elevation = 30, - max_elevation = 120, - plantlife_limit = -0.9, - }, - node_names - ) -end diff --git a/mods/ITEMS/ferns/init.lua b/mods/ITEMS/ferns/init.lua deleted file mode 100644 index 6e7dcac..0000000 --- a/mods/ITEMS/ferns/init.lua +++ /dev/null @@ -1,72 +0,0 @@ ------------------------------------------------------------------------------------------------ -local title = "Ferns" -- former "Archae Plantae" -local version = "0.2.0" -local mname = "ferns" -- former "archaeplantae" ------------------------------------------------------------------------------------------------ --- (by Mossmanikin) --- License (everything): WTFPL ------------------------------------------------------------------------------------------------ - -abstract_ferns = {} - --- support for i18n -local S = plantlife_i18n.gettext - -dofile(minetest.get_modpath("ferns").."/settings.lua") - -if abstract_ferns.config.enable_lady_fern == true then - dofile(minetest.get_modpath("ferns").."/fern.lua") -end - -if abstract_ferns.config.enable_horsetails == true then - dofile(minetest.get_modpath("ferns").."/horsetail.lua") -end - -if abstract_ferns.config.enable_treefern == true then - dofile(minetest.get_modpath("ferns").."/treefern.lua") -end - -if abstract_ferns.config.enable_giant_treefern == true then - dofile(minetest.get_modpath("ferns").."/gianttreefern.lua") -end - -dofile(minetest.get_modpath("ferns").."/crafting.lua") - - ------------------------------------------------------------------------------ --- TESTS ------------------------------------------------------------------------------ -local run_tests = true -- set to false to skip - -if run_tests then - - -- These are, essentially, unit tests to make sure that all required item - -- strings are registered. The init sequence is not time critical so leaving - -- them here won't affect performance. - - -- Check node names - if abstract_ferns.config.enable_horsetails then - print("[Mod] " ..title.. " Checking horsetail item strings") - assert(minetest.registered_items["ferns:horsetail_01"] ~= nil) - assert(minetest.registered_items["ferns:horsetail_02"] ~= nil) - assert(minetest.registered_items["ferns:horsetail_03"] ~= nil) - assert(minetest.registered_items["ferns:horsetail_04"] ~= nil) - end - if abstract_ferns.config.enable_lady_fern then - print("[Mod] ".. title .." Checking lady fern item strings") - assert(minetest.registered_items["ferns:fern_01"] ~= nil) - assert(minetest.registered_items["ferns:fern_02"] ~= nil) - assert(minetest.registered_items["ferns:fern_03"] ~= nil) - end - if abstract_ferns.config.enable_treefern then - print("[Mod] ".. title .." Checking tree fern item strings") - assert(minetest.registered_items["ferns:tree_fern_leaves"] ~= nil) - assert(minetest.registered_items["ferns:tree_fern_leaves_02"] ~= nil) - assert(minetest.registered_items["ferns:fern_trunk"] ~= nil) - assert(minetest.registered_items["ferns:sapling_tree_fern"] ~= nil) - end -end - ------------------------------------------------------------------------------------------------ -print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") ------------------------------------------------------------------------------------------------ diff --git a/mods/ITEMS/ferns/settings.lua b/mods/ITEMS/ferns/settings.lua deleted file mode 100644 index c1e2304..0000000 --- a/mods/ITEMS/ferns/settings.lua +++ /dev/null @@ -1,43 +0,0 @@ --- In case you don't wanna have errors: - --- Only change what's behind a "=" (or "--"). --- Don't use caps (behind a "="). - --- If there's a "false" (behind a "=") you can change it to "true" (and the other way around). --- Spelling is important. --- If "true" or "false" is necessary as setting, everything(!) which is not spelled "true" will be read as if it were "false" (even "1", "True"...) - --- If you wanna comment something (for example to remember the default value), you can do this by putting "--" in front of the comment. --- You can put "--" at the end of a line with "=" in it, or at the beginning of an empty/new line (minetest will ignore what's behind it then). --- But don't put "--" in front of a line with "=" in it (or else minetest will ignore the setting and you might get an error). - --- If something is still unclear, don't hesitate to post your question @ https://forum.minetest.net/viewtopic.php?id=6921 - -abstract_ferns.config = {} - --- Which plants should generate/spawn? -abstract_ferns.config.enable_lady_fern = true -abstract_ferns.config.enable_horsetails = true -abstract_ferns.config.enable_treefern = true -abstract_ferns.config.enable_giant_treefern = true - --- Where should they generate/spawn? (if they generate/spawn) --- --- Lady-Fern -abstract_ferns.config.lady_ferns_near_tree = true -abstract_ferns.config.lady_ferns_near_rock = true -abstract_ferns.config.lady_ferns_near_ores = true -- if there's a bunch of ferns there's ores nearby, this one causes a huge fps drop -abstract_ferns.config.lady_ferns_in_groups = false -- this one is meant as a replacement of Ferns_near_Ores: ferns tend to generate in groups, less fps drop, no hint for nearby ores --- --- Horsetails -abstract_ferns.config.enable_horsetails_spawning = true -- horsetails will grow in already explored areas, over time, near water or gravel -abstract_ferns.config.enable_horsetails_on_grass = true -- on dirt with grass -abstract_ferns.config.enable_horsetails_on_stones = true -- on gravel, mossy cobble --- --- Tree_Fern -abstract_ferns.config.enable_treeferns_in_victas = true -- victorian-forests and tasmania -abstract_ferns.config.enable_treeferns_in_fnq = true -- far north queensland --- --- Giant_Tree_Fern -abstract_ferns.config.enable_giant_treeferns_in_victas = true -- victorian-forests and tasmania -abstract_ferns.config.enable_giant_treeferns_in_fnq = true -- far north queensland diff --git a/mods/ITEMS/ferns/textures/not_in_use/archaeplantae_horsetails.png b/mods/ITEMS/ferns/textures/not_in_use/archaeplantae_horsetails.png deleted file mode 100644 index 6ba89c1..0000000 Binary files a/mods/ITEMS/ferns/textures/not_in_use/archaeplantae_horsetails.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/not_in_use/big picture 3.png b/mods/ITEMS/ferns/textures/not_in_use/big picture 3.png deleted file mode 100644 index de344e6..0000000 Binary files a/mods/ITEMS/ferns/textures/not_in_use/big picture 3.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_big_left.png b/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_big_left.png deleted file mode 100644 index 0fdf515..0000000 Binary files a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_big_left.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_big_right.png b/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_big_right.png deleted file mode 100644 index d30def0..0000000 Binary files a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_big_right.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_mid_left.png b/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_mid_left.png deleted file mode 100644 index d146df3..0000000 Binary files a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_mid_left.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_mid_right.png b/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_mid_right.png deleted file mode 100644 index e10460a..0000000 Binary files a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_mid_right.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_tree_bl.png b/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_tree_bl.png deleted file mode 100644 index e2fdb67..0000000 Binary files a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_tree_bl.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_tree_br.png b/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_tree_br.png deleted file mode 100644 index eb547e8..0000000 Binary files a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_tree_br.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.png b/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.png deleted file mode 100644 index 7a12671..0000000 Binary files a/mods/ITEMS/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/archaeplantae_fern_old4.png b/mods/ITEMS/ferns/textures/old/archaeplantae_fern_old4.png deleted file mode 100644 index a3d403c..0000000 Binary files a/mods/ITEMS/ferns/textures/old/archaeplantae_fern_old4.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/comb.png b/mods/ITEMS/ferns/textures/old/comb.png deleted file mode 100644 index ea1e19f..0000000 Binary files a/mods/ITEMS/ferns/textures/old/comb.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_5_old.png b/mods/ITEMS/ferns/textures/old/ferns_5_old.png deleted file mode 100644 index 5676278..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_5_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_6_old.png b/mods/ITEMS/ferns/textures/old/ferns_6_old.png deleted file mode 100644 index 36d6040..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_6_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_7_old.png b/mods/ITEMS/ferns/textures/old/ferns_7_old.png deleted file mode 100644 index 8aabe61..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_7_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_fern_big_old.png b/mods/ITEMS/ferns/textures/old/ferns_fern_big_old.png deleted file mode 100644 index d17ed11..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_fern_big_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_fern_mid_old.png b/mods/ITEMS/ferns/textures/old/ferns_fern_mid_old.png deleted file mode 100644 index 08513c2..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_fern_mid_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_fern_tree_old.png b/mods/ITEMS/ferns/textures/old/ferns_fern_tree_old.png deleted file mode 100644 index 4599672..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_fern_tree_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_big_old2.png b/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_big_old2.png deleted file mode 100644 index a048ee0..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_big_old2.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_big_top_old.png b/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_big_top_old.png deleted file mode 100644 index d83151f..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_big_top_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_big_top_old2.png b/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_big_top_old2.png deleted file mode 100644 index 244ddfe..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_big_top_old2.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_top_old.png b/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_top_old.png deleted file mode 100644 index 872fdab..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_fern_trunk_top_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_horsetail_01_old2.png b/mods/ITEMS/ferns/textures/old/ferns_horsetail_01_old2.png deleted file mode 100644 index 7d55718..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_horsetail_01_old2.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_horsetail_02_old2.png b/mods/ITEMS/ferns/textures/old/ferns_horsetail_02_old2.png deleted file mode 100644 index d0b5563..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_horsetail_02_old2.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_horsetail_03_old2.png b/mods/ITEMS/ferns/textures/old/ferns_horsetail_03_old2.png deleted file mode 100644 index 42cf76e..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_horsetail_03_old2.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_horsetail_04_old2.png b/mods/ITEMS/ferns/textures/old/ferns_horsetail_04_old2.png deleted file mode 100644 index 600ebe7..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_horsetail_04_old2.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.png b/mods/ITEMS/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.png deleted file mode 100644 index 00ec9d8..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_tree_fern_leave_big_end_old.png b/mods/ITEMS/ferns/textures/old/ferns_tree_fern_leave_big_end_old.png deleted file mode 100644 index ce1a87d..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_tree_fern_leave_big_end_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/textures/old/ferns_tree_fern_leave_big_old.png b/mods/ITEMS/ferns/textures/old/ferns_tree_fern_leave_big_old.png deleted file mode 100644 index b568383..0000000 Binary files a/mods/ITEMS/ferns/textures/old/ferns_tree_fern_leave_big_old.png and /dev/null differ diff --git a/mods/ITEMS/ferns/treefern.lua b/mods/ITEMS/ferns/treefern.lua deleted file mode 100644 index 5b5559d..0000000 --- a/mods/ITEMS/ferns/treefern.lua +++ /dev/null @@ -1,228 +0,0 @@ ------------------------------------------------------------------------------------------------ --- Ferns - Tree Fern 0.1.1 ------------------------------------------------------------------------------------------------ --- by Mossmanikin --- License (everything): WTFPL --- Contains code from: biome_lib --- Looked at code from: default , trees ------------------------------------------------------------------------------------------------ - --- support for i18n -local S = plantlife_i18n.gettext - -assert(abstract_ferns.config.enable_treefern == true) - -abstract_ferns.grow_tree_fern = function(pos) - - local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} - if minetest.get_node(pos_01).name ~= "air" - and minetest.get_node(pos_01).name ~= "ferns:sapling_tree_fern" - and minetest.get_node(pos_01).name ~= "default:junglegrass" then - return - end - - local size = math.random(1, 4) + math.random(1, 4) - if (size > 5) then - size = 10 - size - end - size = size + 1 - local crown = ({ "ferns:tree_fern_leaves", "ferns:tree_fern_leaves_02" })[math.random(1, 2)] - - local i = 1 - local brk = false - while (i < size) do - print(minetest.get_node({x = pos.x, y = pos.y + i, z = pos.z}).name) - if minetest.get_node({x = pos.x, y = pos.y + i, z = pos.z}).name ~= "air" then - brk = true - print("break!") - break - end - print("set trunk node at:") - print(dump({x = pos.x, y = pos.y + i, z = pos.z})) - minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, { name = "ferns:fern_trunk" }) - i = i + 1 - end - if not brk then - print("set crown node at:") - print(dump({x = pos.x, y = pos.y + i, z = pos.z})) - minetest.set_node({x = pos.x, y = pos.y + i - 1, z = pos.z}, { name = crown }) - end -end - ------------------------------------------------------------------------------------------------ --- TREE FERN LEAVES ------------------------------------------------------------------------------------------------ - --- TODO: Both of these nodes look the same? - -minetest.register_node("ferns:tree_fern_leaves", { - description = S("Tree Fern Crown (Dicksonia)"), - drawtype = "plantlike", - visual_scale = math.sqrt(8), - paramtype = "light", - paramtype2 = "facedir", - --tiles = {"[combine:32x32:0,0=top_left.png:0,16=bottom_left.png:16,0=top_right.png:16,16=bottom_right.png"}, - tiles = {"ferns_fern_tree.png"}, - inventory_image = "ferns_fern_tree_inv.png", - walkable = false, - groups = {snappy=3,flammable=2,attached_node=1}, - drop = { - max_items = 2, - items = { - { - -- occasionally, drop a second sapling instead of leaves - -- (extra saplings can also be obtained by replanting and - -- reharvesting leaves) - items = {"ferns:sapling_tree_fern"}, - rarity = 10, - }, - { - items = {"ferns:sapling_tree_fern"}, - }, - { - items = {"ferns:tree_fern_leaves"}, - } - } - }, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, - }, -}) -minetest.register_node("ferns:tree_fern_leaves_02", { - drawtype = "plantlike", - visual_scale = math.sqrt(8), - paramtype = "light", - tiles = {"ferns_fern_big.png"}, - walkable = false, - groups = {snappy=3,flammable=2,attached_node=1,not_in_creative_inventory=1}, - drop = { - max_items = 2, - items = { - { - -- occasionally, drop a second sapling instead of leaves - -- (extra saplings can also be obtained by replanting and - -- reharvesting leaves) - items = {"ferns:sapling_tree_fern"}, - rarity = 10, - }, - { - items = {"ferns:sapling_tree_fern"}, - }, - { - items = {"ferns:tree_fern_leaves"}, - } - } - }, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, - }, -}) ------------------------------------------------------------------------------------------------ --- FERN TRUNK ------------------------------------------------------------------------------------------------ -minetest.register_node("ferns:fern_trunk", { - description = S("Fern Trunk (Dicksonia)"), - drawtype = "nodebox", - paramtype = "light", - tiles = { - "ferns_fern_trunk_top.png", - "ferns_fern_trunk_top.png", - "ferns_fern_trunk.png" - }, - node_box = { - type = "fixed", - fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}, - }, - selection_box = { - type = "fixed", - fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, - }, - groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, - sounds = default.node_sound_wood_defaults(), - after_destruct = function(pos,oldnode) - local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if node.name == "ferns:fern_trunk" then - minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) - minetest.add_item(pos,"ferns:fern_trunk") - end - end, -}) - ------------------------------------------------------------------------------------------------ --- TREE FERN SAPLING ------------------------------------------------------------------------------------------------ -minetest.register_node("ferns:sapling_tree_fern", { - description = S("Tree Fern Sapling (Dicksonia)"), - drawtype = "plantlike", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"ferns_sapling_tree_fern.png"}, - inventory_image = "ferns_sapling_tree_fern.png", - walkable = false, - groups = {snappy=3,flammable=2,flora=1,attached_node=1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, - }, -}) --- abm -minetest.register_abm({ - nodenames = "ferns:sapling_tree_fern", - interval = 1000, - chance = 4, - action = function(pos, node, _, _) - abstract_ferns.grow_tree_fern({x = pos.x, y = pos.y-1, z = pos.z}) - end -}) - ------------------------------------------------------------------------------------------------ --- GENERATE TREE FERN ------------------------------------------------------------------------------------------------ - --- in Victorian-Forests and Tasmania biomes -if abstract_ferns.config.enable_treeferns_in_victas == true then - biome_lib:register_generate_plant({ - surface = {"default:dirt_with_grass"}, - max_count = 60, - avoid_nodes = {"group:tree"}, - avoid_radius = 2, - rarity = 50, - seed_diff = 329, - min_elevation = 5, - near_nodes = { - "australia:blue_gum_tree", - "australia:swamp_gum_tree", - "australia:tasmanian_myrtle_tree" - }, - near_nodes_size = 6, - near_nodes_vertical = 2, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_ferns.grow_tree_fern - ) -end - --- In Far North Queensland biome -if abstract_ferns.config.enable_treeferns_in_fnq == true then - biome_lib:register_generate_plant({ - surface = {"default:dirt_with_grass"}, - max_count = 40, - rarity = 50, - seed_diff = 329, - min_elevation = 4, - max_elevation = 25, - near_nodes = {"australia:merbau_tree"}, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_ferns.grow_tree_fern -) -end diff --git a/mods/ITEMS/fire/init.lua b/mods/ITEMS/fire/init.lua deleted file mode 100644 index f97636b..0000000 --- a/mods/ITEMS/fire/init.lua +++ /dev/null @@ -1,365 +0,0 @@ --- Global namespace for functions - -fire = {} - - --- --- Items --- - --- Flame nodes - -minetest.register_node("fire:basic_flame", { - drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, - }, - inventory_image = "fire_basic_flame.png", - paramtype = "light", - light_source = 13, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - damage_per_second = 4, - groups = {igniter = 2, dig_immediate = 3, not_in_creative_inventory = 1}, - on_timer = function(pos) - local f = minetest.find_node_near(pos, 1, {"group:flammable"}) - if not f then - minetest.remove_node(pos) - return - end - -- Restart timer - return true - end, - drop = "", - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(30, 60)) - end, -}) - -minetest.register_node("fire:permanent_flame", { - description = "Permanent Flame", - drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, - }, - inventory_image = "fire_basic_flame.png", - paramtype = "light", - light_source = 13, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - damage_per_second = 4, - groups = {igniter = 2, dig_immediate = 3}, - drop = "", -}) - - --- Flint and steel - -minetest.register_tool("fire:flint_and_steel", { - description = "Flint and Steel", - inventory_image = "fire_flint_steel.png", - sound = {breaks = "default_tool_breaks"}, - - on_use = function(itemstack, user, pointed_thing) - local sound_pos = pointed_thing.above or user:get_pos() - minetest.sound_play( - "fire_flint_and_steel", - {pos = sound_pos, gain = 0.5, max_hear_distance = 8} - ) - local player_name = user:get_player_name() - if pointed_thing.type == "node" then - local node_under = minetest.get_node(pointed_thing.under).name - local nodedef = minetest.registered_nodes[node_under] - if not nodedef then - return - end - if minetest.is_protected(pointed_thing.under, player_name) then - minetest.chat_send_player(player_name, "This area is protected") - return - end - if nodedef.on_ignite then - nodedef.on_ignite(pointed_thing.under, user) - elseif minetest.get_item_group(node_under, "flammable") >= 1 - and minetest.get_node(pointed_thing.above).name == "air" then - minetest.set_node(pointed_thing.above, {name = "fire:basic_flame"}) - end - end - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(player_name)) then - -- Wear tool - local wdef = itemstack:get_definition() - itemstack:add_wear(1000) - -- Tool break sound - if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, gain = 0.5}) - end - return itemstack - end - end -}) - -minetest.register_craft({ - output = "fire:flint_and_steel", - recipe = { - {"default:flint", "default:steel_ingot"} - } -}) - - --- Override coalblock to enable permanent flame above --- Coalblock is non-flammable to avoid unwanted basic_flame nodes - -minetest.override_item("default:coalblock", { - after_destruct = function(pos, oldnode) - pos.y = pos.y + 1 - if minetest.get_node(pos).name == "fire:permanent_flame" then - minetest.remove_node(pos) - end - end, - on_ignite = function(pos, igniter) - local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} - if minetest.get_node(flame_pos).name == "air" then - minetest.set_node(flame_pos, {name = "fire:permanent_flame"}) - end - end, -}) - - --- --- Sound --- - -local flame_sound = minetest.settings:get_bool("flame_sound") -if flame_sound == nil then - -- Enable if no setting present - flame_sound = true -end - -if flame_sound then - - local handles = {} - local timer = 0 - - -- Parameters - - local radius = 8 -- Flame node search radius around player - local cycle = 3 -- Cycle time for sound updates - - -- Update sound for player - - function fire.update_player_sound(player) - local player_name = player:get_player_name() - -- Search for flame nodes in radius around player - local ppos = player:getpos() - local areamin = vector.subtract(ppos, radius) - local areamax = vector.add(ppos, radius) - local fpos, num = minetest.find_nodes_in_area( - areamin, - areamax, - {"fire:basic_flame", "fire:permanent_flame"} - ) - -- Total number of flames in radius - local flames = (num["fire:basic_flame"] or 0) + - (num["fire:permanent_flame"] or 0) - -- Stop previous sound - if handles[player_name] then - minetest.sound_stop(handles[player_name]) - handles[player_name] = nil - end - -- If flames - if flames > 0 then - -- Find centre of flame positions - local fposmid = fpos[1] - -- If more than 1 flame - if #fpos > 1 then - local fposmin = areamax - local fposmax = areamin - for i = 1, #fpos do - local fposi = fpos[i] - if fposi.x > fposmax.x then - fposmax.x = fposi.x - end - if fposi.y > fposmax.y then - fposmax.y = fposi.y - end - if fposi.z > fposmax.z then - fposmax.z = fposi.z - end - if fposi.x < fposmin.x then - fposmin.x = fposi.x - end - if fposi.y < fposmin.y then - fposmin.y = fposi.y - end - if fposi.z < fposmin.z then - fposmin.z = fposi.z - end - end - fposmid = vector.divide(vector.add(fposmin, fposmax), 2) - end - -- Play sound - local handle = minetest.sound_play( - "fire_fire", - { - pos = fposmid, - to_player = player_name, - gain = math.min(0.06 * (1 + flames * 0.125), 0.18), - max_hear_distance = 32, - loop = true, -- In case of lag - } - ) - -- Store sound handle for this player - if handle then - handles[player_name] = handle - end - end - end - - -- Cycle for updating players sounds - - minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer < cycle then - return - end - - timer = 0 - local players = minetest.get_connected_players() - for n = 1, #players do - fire.update_player_sound(players[n]) - end - end) - - -- Stop sound and clear handle on player leave - - minetest.register_on_leaveplayer(function(player) - local player_name = player:get_player_name() - if handles[player_name] then - minetest.sound_stop(handles[player_name]) - handles[player_name] = nil - end - end) -end - - --- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it - -function fire.update_sounds_around(pos) -end - - --- --- ABMs --- - --- Extinguish all flames quickly with water, snow, ice - -minetest.register_abm({ - label = "Extinguish flame", - nodenames = {"fire:basic_flame", "fire:permanent_flame"}, - neighbors = {"group:puts_out_fire"}, - interval = 3, - chance = 1, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - minetest.remove_node(pos) - minetest.sound_play("fire_extinguish_flame", - {pos = pos, max_hear_distance = 16, gain = 0.15}) - end, -}) - - --- Enable the following ABMs according to 'enable fire' setting - -local fire_enabled = minetest.settings:get_bool("enable_fire") -if fire_enabled == nil then - -- enable_fire setting not specified, check for disable_fire - local fire_disabled = minetest.settings:get_bool("disable_fire") - if fire_disabled == nil then - -- Neither setting specified, check whether singleplayer - fire_enabled = minetest.is_singleplayer() - else - fire_enabled = not fire_disabled - end -end - -if not fire_enabled then - - -- Remove basic flames only if fire disabled - - minetest.register_abm({ - label = "Remove disabled fire", - nodenames = {"fire:basic_flame"}, - interval = 7, - chance = 1, - catch_up = false, - action = minetest.remove_node, - }) - -else -- Fire enabled - - -- Ignite neighboring nodes, add basic flames - - minetest.register_abm({ - label = "Ignite flame", - nodenames = {"group:flammable"}, - neighbors = {"group:igniter"}, - interval = 7, - chance = 12, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - -- If there is water or stuff like that around node, don't ignite - if minetest.find_node_near(pos, 1, {"group:puts_out_fire"}) then - return - end - local p = minetest.find_node_near(pos, 1, {"air"}) - if p then - minetest.set_node(p, {name = "fire:basic_flame"}) - end - end, - }) - - -- Remove flammable nodes around basic flame - - minetest.register_abm({ - label = "Remove flammable nodes", - nodenames = {"fire:basic_flame"}, - neighbors = "group:flammable", - interval = 5, - chance = 18, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - local p = minetest.find_node_near(pos, 1, {"group:flammable"}) - if p then - local flammable_node = minetest.get_node(p) - local def = minetest.registered_nodes[flammable_node.name] - if def.on_burn then - def.on_burn(p) - else - minetest.remove_node(p) - minetest.check_for_falling(p) - end - end - end, - }) - -end diff --git a/mods/ITEMS/flowers/README.txt b/mods/ITEMS/flowers/README.txt deleted file mode 100644 index 2a5e4de..0000000 --- a/mods/ITEMS/flowers/README.txt +++ /dev/null @@ -1,26 +0,0 @@ -Minetest Game mod: flowers -========================== -See license.txt for license information. - -Authors of source code ----------------------- -Originally by Ironzorg (MIT) and VanessaE (MIT) -Various Minetest developers and contributors (MIT) - -Authors of media (textures) ---------------------------- -RHRhino (CC BY-SA 3.0): - flowers_dandelion_white.png - flowers_dandelion_yellow.png - flowers_geranium.png - flowers_rose.png - flowers_tulip.png - flowers_viola.png - -Gambit (CC BY-SA 3.0): - flowers_mushroom_brown.png - flowers_mushroom_red.png - flowers_waterlily.png - -yyt16384 (CC BY-SA 3.0): - flowers_waterlily_bottom.png, derived from Gambit's texture diff --git a/mods/ITEMS/flowers/init.lua b/mods/ITEMS/flowers/init.lua deleted file mode 100644 index e6285fc..0000000 --- a/mods/ITEMS/flowers/init.lua +++ /dev/null @@ -1,251 +0,0 @@ --- Namespace for functions - -flowers = {} - - ---[[ - Flowers ---]] - --- Flower registration - -local function add_simple_flower(name, desc, box, f_groups) - -- Common flowers' groups - f_groups.snappy = 3 - f_groups.flammable = 1 - f_groups.flower = 1 - f_groups.flora = 1 - f_groups.attached_node = 1 - - minetest.register_node("flowers:" .. name, { - description = desc, - drawtype = "plantlike", - waving = 1, - tiles = {"flowers_" .. name .. ".png"}, - inventory_image = "flowers_" .. name .. ".png", - wield_image = "flowers_" .. name .. ".png", - sunlight_propagates = true, - paramtype = "light", - walkable = false, - buildable_to = true, - stack_max = 99, - groups = f_groups, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = box - } - }) -end - -flowers.datas = { - { - "rose", - "Red Rose", - {-2/16, -8/16, -2/16, 2/16, 5/16, 2/16}, - {color_red = 1} - }, - { - "tulip", - "Orange Tulip", - {-2/16, -8/16, -2/16, 2/16, 3/16, 2/16}, - {color_orange = 1} - }, - { - "dandelion_yellow", - "Yellow Dandelion", - {-2/16, -8/16, -2/16, 2/16, 4/16, 2/16}, - {color_yellow = 1} - }, - { - "geranium", - "Blue Geranium", - {-2/16, -8/16, -2/16, 2/16, 2/16, 2/16}, - {color_blue = 1} - }, - { - "viola", - "Viola", - {-5/16, -8/16, -5/16, 5/16, -1/16, 5/16}, - {color_violet = 1} - }, - { - "dandelion_white", - "White Dandelion", - {-5/16, -8/16, -5/16, 5/16, -2/16, 5/16}, - {color_white = 1} - }, - { - "bottlebrush_orchid", - "Bottlebrush Orchid", - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - {color_green = 1} - }, - { - "cooktown_orchid", - "Cooktown Orchid", - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - {color_pink = 1} - }, - { - "couch_honeypot", - "Couch Honeypot", - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - {color_orange = 1} - }, - { - "darling_lily", - "Darling Lily", - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - {color_white = 1} - }, - { - "kangaroo_paw", - "Kangaroo Paw", - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - {color_red = 1} - }, - { - "mangrove_lily", - "Mangrove Lily", - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - {color_white = 1} - }, - { - "pink_mulla_mulla", - "Pink Mulla Mulla", - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - {color_pink = 1} - }, - { - "silver_daisy", - "Silver Daisy", - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - {color_grey = 1} - }, - { - "sturts_desert_pea", - "Sturt's Desert Pea", - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, - {color_red = 1} - }, -} - -for _,item in pairs(flowers.datas) do - add_simple_flower(unpack(item)) -end - - --- Flower spread --- Public function to enable override by mods - -function flowers.flower_spread(pos, node) - pos.y = pos.y - 1 - local under = minetest.get_node(pos) - pos.y = pos.y + 1 - -- Replace flora with dry shrub in desert sand and silver sand, - -- as this is the only way to generate them. - -- However, preserve grasses in sand dune biomes. - if minetest.get_item_group(under.name, "sand") == 1 and - under.name ~= "default:sand" then - minetest.set_node(pos, {name = "default:dry_shrub"}) - return - end - - if minetest.get_item_group(under.name, "soil") == 0 then - return - end - - local light = minetest.get_node_light(pos) - if not light or light < 13 then - return - end - - local pos0 = vector.subtract(pos, 4) - local pos1 = vector.add(pos, 4) - if #minetest.find_nodes_in_area(pos0, pos1, "group:flora") > 3 then - return - end - - local soils = minetest.find_nodes_in_area_under_air( - pos0, pos1, "group:soil") - if #soils > 0 then - local seedling = soils[math.random(#soils)] - local seedling_above = - {x = seedling.x, y = seedling.y + 1, z = seedling.z} - light = minetest.get_node_light(seedling_above) - if not light or light < 13 or - -- Desert sand is in the soil group - minetest.get_node(seedling).name == "default:desert_sand" then - return - end - - minetest.set_node(seedling_above, {name = node.name}) - end -end - -minetest.register_abm({ - label = "Flower spread", - nodenames = {"group:flora"}, - interval = 13, - chance = 96, - action = function(...) - flowers.flower_spread(...) - end, -}) - - ---[[ - Waterlily ---]] - -minetest.register_node("flowers:waterlily", { - description = "Waterlily", - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"flowers_waterlily.png", "flowers_waterlily_bottom.png"}, - inventory_image = "flowers_waterlily.png", - wield_image = "flowers_waterlily.png", - liquids_pointable = true, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - floodable = true, - groups = {snappy = 3, flower = 1, flammable = 1}, - sounds = default.node_sound_leaves_defaults(), - node_placement_prediction = "", - node_box = { - type = "fixed", - fixed = {-8/16, -31/64, -8/16, 8/16, -15/32, 8/16} - }, - selection_box = { - type = "fixed", - fixed = {-7/16, -8/16, -7/16, 7/16, -15/32, 7/16} - }, - - on_place = function(itemstack, placer, pointed_thing) - local pos = pointed_thing.above - local node = minetest.get_node(pointed_thing.under).name - local def = minetest.registered_nodes[node] - local player_name = placer:get_player_name() - - if def and def.liquidtype == "source" and - minetest.get_item_group(node, "water") > 0 then - if not minetest.is_protected(pos, player_name) then - minetest.set_node(pos, {name = "flowers:waterlily", - param2 = math.random(0, 3)}) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(player_name)) then - itemstack:take_item() - end - else - minetest.chat_send_player(player_name, "Node is protected") - minetest.record_protection_violation(pos, player_name) - end - end - - return itemstack - end -}) - diff --git a/mods/ITEMS/flowers/license.txt b/mods/ITEMS/flowers/license.txt deleted file mode 100644 index d301162..0000000 --- a/mods/ITEMS/flowers/license.txt +++ /dev/null @@ -1,62 +0,0 @@ -License of source code ----------------------- - -The MIT License (MIT) -Copyright (C) 2012-2016 Ironzorg, VanessaE -Copyright (C) 2012-2016 Various Minetest developers and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or -substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -For more details: -https://opensource.org/licenses/MIT - - -Licenses of media (textures) ----------------------------- - -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -Copyright (C) 2014-2016 RHRhino -Copyright (C) 2015-2016 Gambit -Copyright (C) 2016 yyt16384 - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/ITEMS/flowers/schematics/waterlily.mts b/mods/ITEMS/flowers/schematics/waterlily.mts deleted file mode 100644 index 69e1d8e..0000000 Binary files a/mods/ITEMS/flowers/schematics/waterlily.mts and /dev/null differ diff --git a/mods/ITEMS/flowers/textures/flowers_bottlebrush_orchid.png b/mods/ITEMS/flowers/textures/flowers_bottlebrush_orchid.png deleted file mode 100644 index 4ae01a7..0000000 Binary files a/mods/ITEMS/flowers/textures/flowers_bottlebrush_orchid.png and /dev/null differ diff --git a/mods/ITEMS/flowers/textures/flowers_cooktown_orchid.png b/mods/ITEMS/flowers/textures/flowers_cooktown_orchid.png deleted file mode 100644 index 4d75d07..0000000 Binary files a/mods/ITEMS/flowers/textures/flowers_cooktown_orchid.png and /dev/null differ diff --git a/mods/ITEMS/flowers/textures/flowers_couch_honeypot.png b/mods/ITEMS/flowers/textures/flowers_couch_honeypot.png deleted file mode 100644 index 8e072a3..0000000 Binary files a/mods/ITEMS/flowers/textures/flowers_couch_honeypot.png and /dev/null differ diff --git a/mods/ITEMS/flowers/textures/flowers_dandelion_yellow.png b/mods/ITEMS/flowers/textures/flowers_dandelion_yellow.png deleted file mode 100644 index ec11c1c..0000000 Binary files a/mods/ITEMS/flowers/textures/flowers_dandelion_yellow.png and /dev/null differ diff --git a/mods/ITEMS/flowers/textures/flowers_darling_lily.png b/mods/ITEMS/flowers/textures/flowers_darling_lily.png deleted file mode 100644 index 09d4fd8..0000000 Binary files a/mods/ITEMS/flowers/textures/flowers_darling_lily.png and /dev/null differ diff --git a/mods/ITEMS/flowers/textures/flowers_kangaroo_paw.png b/mods/ITEMS/flowers/textures/flowers_kangaroo_paw.png deleted file mode 100644 index 49faf94..0000000 Binary files a/mods/ITEMS/flowers/textures/flowers_kangaroo_paw.png and /dev/null differ diff --git a/mods/ITEMS/flowers/textures/flowers_pink_mulla_mulla.png b/mods/ITEMS/flowers/textures/flowers_pink_mulla_mulla.png deleted file mode 100644 index 901e5e3..0000000 Binary files a/mods/ITEMS/flowers/textures/flowers_pink_mulla_mulla.png and /dev/null differ diff --git a/mods/ITEMS/flowers/textures/flowers_silver_daisy.png b/mods/ITEMS/flowers/textures/flowers_silver_daisy.png deleted file mode 100644 index bd49e16..0000000 Binary files a/mods/ITEMS/flowers/textures/flowers_silver_daisy.png and /dev/null differ diff --git a/mods/ITEMS/flowers/textures/flowers_sturts_desert_pea.png b/mods/ITEMS/flowers/textures/flowers_sturts_desert_pea.png deleted file mode 100644 index 86e22cb..0000000 Binary files a/mods/ITEMS/flowers/textures/flowers_sturts_desert_pea.png and /dev/null differ diff --git a/mods/ITEMS/flowers_plus/depends.txt b/mods/ITEMS/flowers_plus/depends.txt deleted file mode 100644 index 401901f..0000000 --- a/mods/ITEMS/flowers_plus/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -biome_lib -plantlife_i18n -default -farming? -flowers? diff --git a/mods/ITEMS/flowers_plus/init.lua b/mods/ITEMS/flowers_plus/init.lua deleted file mode 100644 index 0491743..0000000 --- a/mods/ITEMS/flowers_plus/init.lua +++ /dev/null @@ -1,254 +0,0 @@ --- support for i18n -local S = plantlife_i18n.gettext - --- This file supplies a few additional plants and some related crafts --- for the plantlife modpack. Last revision: 2013-04-24 - -flowers_plus = {} - -local SPAWN_DELAY = 1000 -local SPAWN_CHANCE = 200 -local flowers_seed_diff = 329 -local seaweed_max_count = 320 -local seaweed_rarity = 33 -local sunflowers_max_count = 10 -local sunflowers_rarity = 25 - - -local algae_list = { {nil}, {2}, {3}, {4} } - -for i in ipairs(algae_list) do - local num = "" - local algae_groups = {snappy = 3,flammable=2,flower=1} - - if algae_list[i][1] ~= nil then - num = "_"..algae_list[i][1] - algae_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 } - end - - minetest.register_node(":flowers:seaweed"..num, { - description = S("Seaweed"), - drawtype = "nodebox", - tiles = { - "flowers_seaweed"..num..".png", - "flowers_seaweed"..num..".png^[transformFY" - }, - inventory_image = "flowers_seaweed_2.png", - wield_image = "flowers_seaweed_2.png", - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = algae_groups, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 }, - }, - node_box = { - type = "fixed", - fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 }, - }, - buildable_to = true, - - liquids_pointable = true, - drop = "flowers:seaweed", - on_place = function(itemstack, placer, pointed_thing) - local keys=placer:get_player_control() - local pt = pointed_thing - - local place_pos = nil - local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} - local under_node = minetest.get_node(pt.under) - 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 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 - place_pos = top_pos - else - return - end - elseif biome_lib:get_nodedef_field(above_node.name, "buildable_to") then - place_pos = pt.above - end - - if not minetest.is_protected(place_pos, placer:get_player_name()) then - - local nodename = "default:cobble" -- :D - - if not keys["sneak"] then - --local node = minetest.get_node(pt.under) - local seaweed = math.random(1,4) - if seaweed == 1 then - nodename = "flowers:seaweed" - elseif seaweed == 2 then - nodename = "flowers:seaweed_2" - elseif seaweed == 3 then - nodename = "flowers:seaweed_3" - elseif seaweed == 4 then - nodename = "flowers:seaweed_4" - end - minetest.set_node(place_pos, {name = nodename, param2 = math.random(0,3) }) - else - local fdir = minetest.dir_to_facedir(placer:get_look_dir()) - minetest.set_node(place_pos, {name = "flowers:seaweed", param2 = fdir}) - end - - if not biome_lib.expect_infinite_stacks then - itemstack:take_item() - end - return itemstack - end - end, - }) -end - -local box = { - type="fixed", - fixed = { { -0.2, -0.5, -0.2, 0.2, 0.5, 0.2 } }, -} - -local sunflower_drop = "farming:seed_wheat" -if minetest.registered_items["farming:seed_spelt"] then - sunflower_drop = "farming:seed_spelt" -end - -minetest.register_node(":flowers:sunflower", { - description = S("Sunflower"), - drawtype = "mesh", - paramtype = "light", - paramtype2 = "facedir", - inventory_image = "flowers_sunflower_inv.png", - mesh = "flowers_sunflower.obj", - tiles = { "flowers_sunflower.png" }, - walkable = false, - buildable_to = true, - is_ground_content = true, - groups = { dig_immediate=3, flora=1, flammable=3 }, - sounds = default.node_sound_leaves_defaults(), - selection_box = box, - collision_box = box, - drop = { - max_items = 1, - items = { - {items = {sunflower_drop}, rarity = 8}, - {items = {"flowers:sunflower"}}, - } - } -}) - -local extra_aliases = {"seaweed"} - -for i in ipairs(extra_aliases) do - local flower = extra_aliases[i] - minetest.register_alias("flowers:flower_"..flower, "flowers:"..flower) -end - -minetest.register_alias( "along_shore:pondscum_1" , "flowers:seaweed" ) -minetest.register_alias( "along_shore:seaweed_1" , "flowers:seaweed" ) -minetest.register_alias( "along_shore:seaweed_2" , "flowers:seaweed_2" ) -minetest.register_alias( "along_shore:seaweed_3" , "flowers:seaweed_3" ) -minetest.register_alias( "along_shore:seaweed_4" , "flowers:seaweed_4" ) - --- ongen registrations - -flowers_plus.grow_seaweed = function(pos) - local right_here = {x=pos.x, y=pos.y+1, z=pos.z} - minetest.set_node(right_here, {name="along_shore:seaweed_"..math.random(1,4), param2=math.random(1,3)}) -end - -biome_lib:register_generate_plant({ - surface = {"default:water_source"}, - max_count = seaweed_max_count, - rarity = seaweed_rarity, - min_elevation = 1, - max_elevation = 2, - near_nodes = {"default:dirt_with_grass"}, - near_nodes_size = 4, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - flowers_plus.grow_seaweed -) - --- seaweed at beaches -biome_lib:register_generate_plant({ - surface = {"default:water_source"}, - max_count = seaweed_max_count, - rarity = seaweed_rarity, - min_elevation = 1, - max_elevation = 2, - near_nodes = {"default:sand"}, - near_nodes_size = 1, - near_nodes_vertical = 0, - near_nodes_count = 3, - plantlife_limit = -0.9, - }, - flowers_plus.grow_seaweed -) - -biome_lib:register_generate_plant({ - surface = {"default:sand"}, - max_count = seaweed_max_count*2, - rarity = seaweed_rarity/2, - min_elevation = 1, - max_elevation = 2, - near_nodes = {"default:water_source"}, - near_nodes_size = 1, - near_nodes_vertical = 0, - near_nodes_count = 3, - plantlife_limit = -0.9, - }, - flowers_plus.grow_seaweed -) - - --- spawn ABM registrations - -biome_lib:spawn_on_surfaces({ - spawn_delay = SPAWN_DELAY*2, - spawn_plants = {"flowers:seaweed"}, - spawn_chance = SPAWN_CHANCE*2, - spawn_surfaces = {"default:water_source"}, - avoid_nodes = {"group:flower", "group:flora"}, - seed_diff = flowers_seed_diff, - light_min = 4, - light_max = 10, - neighbors = {"default:dirt_with_grass"}, - facedir = 1 -}) - -biome_lib:spawn_on_surfaces({ - spawn_delay = SPAWN_DELAY*2, - spawn_plants = {"flowers:seaweed"}, - spawn_chance = SPAWN_CHANCE*2, - spawn_surfaces = {"default:dirt_with_grass"}, - avoid_nodes = {"group:flower", "group:flora" }, - seed_diff = flowers_seed_diff, - light_min = 4, - light_max = 10, - neighbors = {"default:water_source"}, - ncount = 1, - facedir = 1 -}) - -biome_lib:spawn_on_surfaces({ - spawn_delay = SPAWN_DELAY*2, - spawn_plants = {"flowers:seaweed"}, - spawn_chance = SPAWN_CHANCE*2, - spawn_surfaces = {"default:stone"}, - avoid_nodes = {"group:flower", "group:flora" }, - seed_diff = flowers_seed_diff, - light_min = 4, - light_max = 10, - neighbors = {"default:water_source"}, - ncount = 6, - facedir = 1 -}) - -print(S("[Flowers] Loaded.")) diff --git a/mods/ITEMS/flowers_plus/models/flowers_sunflower.obj b/mods/ITEMS/flowers_plus/models/flowers_sunflower.obj deleted file mode 100644 index 35beb8d..0000000 --- a/mods/ITEMS/flowers_plus/models/flowers_sunflower.obj +++ /dev/null @@ -1,73 +0,0 @@ -# Blender v2.70 (sub 0) OBJ File: 'sunflower.blend' -# www.blender.org -mtllib sunflower_sunflower.mtl -o Cube -v -0.015625 -0.500000 0.028125 -v -0.015625 -0.500000 -0.028125 -v 0.028125 -0.500000 -0.028125 -v 0.028125 -0.500000 0.028125 -v -0.015625 0.790890 0.028125 -v -0.015625 0.689140 -0.028125 -v 0.028125 0.689140 -0.028125 -v 0.028125 0.790890 0.028125 -v 0.250000 0.533494 -0.125000 -v -0.250000 0.533494 -0.125000 -v 0.250000 0.966506 0.125000 -v -0.250000 0.966506 0.125000 -v 0.267063 0.373606 -0.088749 -v 0.044375 0.303464 -0.141576 -v 0.239202 0.473737 0.108253 -v -0.008452 0.378817 0.108253 -v 0.017721 0.016639 -0.112053 -v -0.231280 0.110242 -0.115181 -v -0.030356 -0.036246 0.146223 -v -0.252831 0.028885 0.088910 -v 0.062500 0.641747 -0.057917 -v -0.106953 0.097386 -0.113617 -v -0.006318 -0.053008 0.024707 -v 0.118968 0.360674 0.006909 -v 0.116101 0.452031 0.108253 -v 0.017962 0.298392 -0.019504 -v 0.145794 0.358736 -0.115163 -v 0.240237 0.375544 0.033323 -v -0.224509 0.021356 -0.032606 -v -0.131273 0.023638 0.117567 -v -0.102951 0.016109 -0.003950 -vt 0.750000 0.875000 -vt 0.625000 0.875000 -vt 0.625000 0.750000 -vt 0.750000 0.750000 -vt 0.750000 1.000000 -vt 0.625000 1.000000 -vt 0.625000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 1.000000 -vt 0.000100 0.500100 -vt 0.499900 0.500100 -vt 0.499900 0.999900 -vt 0.000100 0.999900 -vt 0.250000 0.250000 -vt 0.500000 0.250000 -vt 0.250000 0.500000 -vt 0.000000 0.250000 -vt 0.000000 0.000000 -vt 0.250000 0.000000 -vt 0.000000 0.500000 -vt 0.500000 0.000000 -usemtl Sunflower -s off -f 1/1 2/2 3/3 4/4 -f 5/5 8/6 7/2 6/1 -f 1/7 5/8 6/9 2/6 -f 2/7 6/6 7/9 3/8 -f 3/7 7/8 8/9 4/6 -f 5/7 1/8 4/9 8/6 -f 9/10 10/11 12/12 11/13 -f 24/14 26/15 16/8 25/16 -f 31/14 29/17 20/18 30/19 -f 17/8 22/16 31/14 23/15 -f 22/16 18/20 29/17 31/14 -f 27/19 14/21 26/15 24/14 -f 13/18 27/19 24/14 28/17 -f 23/15 31/14 30/19 19/21 -f 28/17 24/14 25/16 15/20 diff --git a/mods/ITEMS/flowers_plus/textures/flowers_sunflower.png b/mods/ITEMS/flowers_plus/textures/flowers_sunflower.png deleted file mode 100644 index fb95cb4..0000000 Binary files a/mods/ITEMS/flowers_plus/textures/flowers_sunflower.png and /dev/null differ diff --git a/mods/ITEMS/flowers_plus/textures/flowers_sunflower_inv.png b/mods/ITEMS/flowers_plus/textures/flowers_sunflower_inv.png deleted file mode 100644 index c36ed01..0000000 Binary files a/mods/ITEMS/flowers_plus/textures/flowers_sunflower_inv.png and /dev/null differ diff --git a/mods/ITEMS/furnace/depends.txt b/mods/ITEMS/furnace/depends.txt deleted file mode 100644 index 8c6e589..0000000 --- a/mods/ITEMS/furnace/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -init -inventory -default -australia diff --git a/mods/ITEMS/furnace/init.lua b/mods/ITEMS/furnace/init.lua deleted file mode 100644 index feacfe4..0000000 --- a/mods/ITEMS/furnace/init.lua +++ /dev/null @@ -1,618 +0,0 @@ ---[[ - Furnace ---]] - -local furnace = {} - ---[[ - Formspecs ---]] - -local function active_formspec(fuel_percent, item_percent) - local formspec = - "size[8,8.5]".. - init.gui_bg.. - init.gui_bg_img.. - init.gui_slots.. - "list[current_name;src;2.75,0.5;1,1;]".. - "list[current_name;fuel;2.75,2.5;1,1;]".. - "image[2.75,1.5;1,1;furnace_furnace_fire_bg.png^[lowpart:".. - (100-fuel_percent)..":furnace_furnace_fire_fg.png]".. - "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:".. - (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. - "list[current_name;dst;4.75,0.96;2,2;]".. - "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]".. - "listring[current_player;main]".. - "listring[current_name;fuel]".. - "listring[current_player;main]".. - init.get_hotbar_bg(0, 4.25) - return formspec -end - -local inactive_formspec = - "size[8,8.5]".. - init.gui_bg.. - init.gui_bg_img.. - init.gui_slots.. - "list[current_name;src;2.75,0.5;1,1;]".. - "list[current_name;fuel;2.75,2.5;1,1;]".. - "image[2.75,1.5;1,1;furnace_furnace_fire_bg.png]".. - "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. - "list[current_name;dst;4.75,0.96;2,2;]".. - "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]".. - "listring[current_player;main]".. - "listring[current_name;fuel]".. - "listring[current_player;main]".. - init.get_hotbar_bg(0, 4.25) - - ---[[ - Node callback functions that are the same for active and inactive furnace ---]] - -local function can_dig(pos, player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src") -end - -local function allow_metadata_inventory_put(pos, listname, index, stack, player) - if minetest.is_protected(pos, player:get_player_name()) then - return 0 - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if listname == "fuel" then - if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then - if inv:is_empty("src") then - meta:set_string("infotext", "Furnace is empty") - end - return stack:get_count() - else - return 0 - end - elseif listname == "src" then - return stack:get_count() - elseif listname == "dst" then - return 0 - end -end - -local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local stack = inv:get_stack(from_list, from_index) - return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) -end - -local function allow_metadata_inventory_take(pos, listname, index, stack, player) - if minetest.is_protected(pos, player:get_player_name()) then - return 0 - end - return stack:get_count() -end - -local function swap_node(pos, name) - local node = minetest.get_node(pos) - if node.name == name then - return - end - node.name = name - minetest.swap_node(pos, node) -end - -local function furnace_node_timer(pos, elapsed) - -- Inizialize metadata - local meta = minetest.get_meta(pos) - local fuel_time = meta:get_float("fuel_time") or 0 - local src_time = meta:get_float("src_time") or 0 - local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 - - local inv = meta:get_inventory() - local srclist, fuellist - - local cookable, cooked - local fuel - - local update = true - while update do - update = false - - srclist = inv:get_list("src") - fuellist = inv:get_list("fuel") - - --[[ - Cooking - --]] - - -- Check if we have cookable content - local aftercooked - cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - cookable = cooked.time ~= 0 - - -- Check if we have enough fuel to burn - if fuel_time < fuel_totaltime then - -- The furnace is currently active and has enough fuel - fuel_time = fuel_time + elapsed - -- If there is a cookable item then check if it is ready yet - if cookable then - src_time = src_time + elapsed - if src_time >= cooked.time then - -- Place result in dst list if possible - if inv:room_for_item("dst", cooked.item) then - inv:add_item("dst", cooked.item) - inv:set_stack("src", 1, aftercooked.items[1]) - src_time = src_time - cooked.time - update = true - end - end - end - else - -- Furnace ran out of fuel - if cookable then - -- We need to get new fuel - local afterfuel - fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) - - if fuel.time == 0 then - -- No valid fuel in fuel list - fuel_totaltime = 0 - src_time = 0 - else - -- Take fuel from fuel list - inv:set_stack("fuel", 1, afterfuel.items[1]) - update = true - fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) - src_time = src_time + elapsed - end - else - -- We don't need to get new fuel since there is no cookable item - fuel_totaltime = 0 - src_time = 0 - end - fuel_time = 0 - end - - elapsed = 0 - end - - if fuel and fuel_totaltime > fuel.time then - fuel_totaltime = fuel.time - end - if srclist[1]:is_empty() then - src_time = 0 - end - - --[[ - Update formspec, infotext and node - --]] - local formspec = inactive_formspec - local item_state - local item_percent = 0 - if cookable then - item_percent = math.floor(src_time / cooked.time * 100) - if item_percent > 100 then - item_state = "100% (output full)" - else - item_state = item_percent .. "%" - end - else - if srclist[1]:is_empty() then - item_state = "Empty" - else - item_state = "Not cookable" - end - end - - local fuel_state = "Empty" - local active = "inactive " - local result = false - - if fuel_totaltime ~= 0 then - active = "active " - local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) - fuel_state = fuel_percent .. "%" - formspec = active_formspec(fuel_percent, item_percent) - swap_node(pos, "furnace:furnace_active") - -- make sure timer restarts automatically - result = true - else - if not fuellist[1]:is_empty() then - fuel_state = "0%" - end - swap_node(pos, "furnace:furnace") - -- stop timer on the inactive furnace - minetest.get_node_timer(pos):stop() - end - - local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")" - - -- Set meta values - meta:set_float("fuel_totaltime", fuel_totaltime) - meta:set_float("fuel_time", fuel_time) - meta:set_float("src_time", src_time) - meta:set_string("formspec", formspec) - meta:set_string("infotext", infotext) - - return result -end - - ---[[ - Node definitions ---]] - -minetest.register_node("furnace:furnace", { - description = "Furnace", - tiles = { - "furnace_furnace_top.png", "furnace_furnace_bottom.png", - "furnace_furnace_side.png", "furnace_furnace_side.png", - "furnace_furnace_side.png", "furnace_furnace_front.png" - }, - paramtype2 = "facedir", - groups = {cracky=2}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_stone_defaults(), - - can_dig = can_dig, - - on_timer = furnace_node_timer, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", inactive_formspec) - local inv = meta:get_inventory() - inv:set_size('src', 1) - inv:set_size('fuel', 1) - inv:set_size('dst', 4) - end, - - on_metadata_inventory_move = function(pos) - minetest.get_node_timer(pos):start(1.0) - end, - on_metadata_inventory_put = function(pos) - -- start timer function, it will sort out whether furnace can burn or not. - minetest.get_node_timer(pos):start(1.0) - end, - on_blast = function(pos) - local drops = {} - inventory.get_inventory_drops(pos, "src", drops) - inventory.get_inventory_drops(pos, "fuel", drops) - inventory.get_inventory_drops(pos, "dst", drops) - drops[#drops+1] = "furnace:furnace" - minetest.remove_node(pos) - return drops - 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, -}) - -minetest.register_node("furnace:furnace_active", { - description = "Furnace", - tiles = { - "furnace_furnace_top.png", "furnace_furnace_bottom.png", - "furnace_furnace_side.png", "furnace_furnace_side.png", - "furnace_furnace_side.png", - { - image = "furnace_furnace_front_active.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.5 - }, - } - }, - paramtype2 = "facedir", - light_source = 8, - drop = "furnace:furnace", - groups = {cracky=2, not_in_creative_inventory=1}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_stone_defaults(), - on_timer = furnace_node_timer, - - can_dig = can_dig, - - allow_metadata_inventory_put = allow_metadata_inventory_put, - allow_metadata_inventory_move = allow_metadata_inventory_move, - allow_metadata_inventory_take = allow_metadata_inventory_take, -}) - -minetest.register_craft({ - output = 'furnace:furnace', - recipe = { - {'group:stone', 'group:stone', 'group:stone'}, - {'group:stone', '', 'group:stone'}, - {'group:stone', 'group:stone', 'group:stone'}, - } -}) - - - ---[[ - Tree (trunks) fuel ---]] - -local function add_tree_fuel(node, burntime) - minetest.register_craft({ - type = "fuel", - recipe = node, - burntime = burntime, - }) -end - -furnace.tree_fuel = { - {"default:aspen_tree", 22}, - {"default:pine_tree", 26}, - {"australia:huon_pine_tree", 26}, - {"australia:celery_top_pine_tree", 26}, - {"australia:southern_sassafras_tree", 26}, - {"default:tree", 30}, - {"australia:tasmanian_myrtle_tree", 31}, - {"australia:swamp_gum_tree", 32}, - {"default:acacia_tree", 34}, - {"australia:marri_tree", 34}, - {"australia:black_wattle_tree", 35}, - {"australia:merbau_tree", 36}, - {"australia:jarrah_tree", 37}, - {"australia:blue_gum_tree", 37}, - {"australia:karri_tree", 37}, - {"default:jungletree", 38}, - {"australia:river_red_gum_tree", 38}, - {"australia:daintree_stringybark_tree", 40}, -} - -for _,item in pairs(furnace.tree_fuel) do - add_tree_fuel(unpack(item)) -end - --- Support use of group:tree -minetest.register_craft({ - type = "fuel", - recipe = "group:tree", - burntime = 25, -}) - - ---[[ - Wood (planks) fuel ---]] - -local function add_wood_fuel(node, burntime) - minetest.register_craft({ - type = "fuel", - recipe = node, - burntime = burntime, - }) -end - -furnace.wood_fuel = { - {"default:aspen_wood", 5}, - {"default:pine_wood", 6}, - {"australia:eucalyptus_wood", 6}, - {"australia:huon_pine", 6}, - {"australia:celery_top_pine", 6}, - {"australia:southern_sassafras", 6}, - {"default:wood", 7}, - {"australia:tasmanian_myrtle", 7}, - {"australia:tasmanian_oak", 7}, - {"default:acacia_wood", 8}, - {"australia:marri", 8}, - {"australia:blackwood", 8}, - {"australia:merbau", 8}, - {"australia:jarrah", 8}, - {"australia:blue_gum", 8}, - {"australia:karri", 8}, - {"default:junglewood", 9}, - {"australia:river_red_gum", 9}, - {"australia:red_mahogany", 10}, -} - -for _,item in pairs(furnace.wood_fuel) do - add_wood_fuel(unpack(item)) -end - --- Support use of group:wood -minetest.register_craft({ - type = "fuel", - recipe = "group:wood", - burntime = 6, -}) - - ---[[ - Sapling fuel ---]] - -local function add_sapling_fuel(node, burntime) - minetest.register_craft({ - type = "fuel", - recipe = node, - burntime = burntime, - }) -end - -furnace.sapling_fuel = { - {"default:bush_sapling", 6}, - {"default:acacia_bush_sapling", 7}, - {"default:aspen_sapling", 8}, - {"default:pine_sapling", 9}, - {"australia:eucalyptus_sapling", 9}, - {"australia:huon_pine_sapling", 9}, - {"australia:celery_top_pine_sapling", 9}, - {"australia:southern_sassafras_sapling", 9}, - {"default:sapling", 10}, - {"australia:tasmanian_myrtle_sapling", 10}, - {"australia:swamp_gum_sapling", 10}, - {"default:acacia_sapling", 11}, - {"australia:marri_sapling", 11}, - {"australia:black_wattle_sapling", 11}, - {"australia:merbau_sapling", 11}, - {"australia:jarrah_sapling", 11}, - {"australia:blue_gum_sapling", 11}, - {"australia:karri_sapling", 11}, - {"default:junglesapling", 12}, - {"australia:river_red_gum_sapling", 12}, - {"australia:daintree_stringybark_sapling", 14}, -} - -for _,item in pairs(furnace.sapling_fuel) do - add_sapling_fuel(unpack(item)) -end - --- Support use of group:sapling -minetest.register_craft({ - type = "fuel", - recipe = "group:sapling", - burntime = 9, -}) - - ---[[ - Fence fuel ---]] - -local function add_fence_fuel(name, burntime) - minetest.register_craft({ - type = "fuel", - recipe = "fences:" .. name, - burntime = burntime, - }) -end - -furnace.fence_fuel = { - {"fence_aspen_wood", 5}, - {"fence_pine_wood", 6}, - {"fence_eucalyptus_wood", 6}, - {"fence_huon_pine", 6}, - {"fence_celery_top_pine", 6}, - {"fence_southern_sassafras", 6}, - {"fence_wood", 7}, - {"fence_tasmanian_myrtle", 7}, - {"fence_tasmanian_oak", 7}, - {"fence_acacia_wood", 8}, - {"fence_marri", 8}, - {"fence_blackwood", 8}, - {"fence_merbau", 8}, - {"fence_jarrah", 8}, - {"fence_blue_gum", 8}, - {"fence_karri", 8}, - {"fence_junglewood", 9}, - {"fence_red_gum", 9}, - {"fence_red_mahogany", 10}, -} - -for _,item in pairs(furnace.fence_fuel) do - add_fence_fuel(unpack(item)) -end - - -minetest.register_craft({ - type = "fuel", - recipe = "default:bush_stem", - burntime = 7, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:acacia_bush_stem", - burntime = 8, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:junglegrass", - burntime = 2, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:leaves", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:cactus", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:papyrus", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:ladder_wood", - burntime = 2, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:lava_source", - burntime = 60, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:apple", - burntime = 3, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:coal_lump", - burntime = 40, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:coalblock", - burntime = 370, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:grass_1", - burntime = 2, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:dry_grass_1", - burntime = 2, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:paper", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:dry_shrub", - burntime = 2, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:stick", - burntime = 1, -}) - diff --git a/mods/ITEMS/furnace/mod.conf b/mods/ITEMS/furnace/mod.conf deleted file mode 100644 index dda36f2..0000000 --- a/mods/ITEMS/furnace/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = furnace \ No newline at end of file diff --git a/mods/ITEMS/mesecons/mesecons/internal.lua b/mods/ITEMS/mesecons/mesecons/internal.lua deleted file mode 100755 index e5ba91e..0000000 --- a/mods/ITEMS/mesecons/mesecons/internal.lua +++ /dev/null @@ -1,599 +0,0 @@ --- Internal.lua - The core of mesecons --- --- For more practical developer resources see http://mesecons.net/developers.php --- --- Function overview --- mesecon.get_effector(nodename) --> Returns the mesecons.effector -specifictation in the nodedef by the nodename --- mesecon.get_receptor(nodename) --> Returns the mesecons.receptor -specifictation in the nodedef by the nodename --- mesecon.get_conductor(nodename) --> Returns the mesecons.conductor-specifictation in the nodedef by the nodename --- mesecon.get_any_inputrules (node) --> Returns the rules of a node if it is a conductor or an effector --- mesecon.get_any_outputrules (node) --> Returns the rules of a node if it is a conductor or a receptor - --- RECEPTORS --- mesecon.is_receptor(nodename) --> Returns true if nodename is a receptor --- mesecon.is_receptor_on(nodename --> Returns true if nodename is an receptor with state = mesecon.state.on --- mesecon.is_receptor_off(nodename) --> Returns true if nodename is an receptor with state = mesecon.state.off --- mesecon.receptor_get_rules(node) --> Returns the rules of the receptor (mesecon.rules.default if none specified) - --- EFFECTORS --- mesecon.is_effector(nodename) --> Returns true if nodename is an effector --- mesecon.is_effector_on(nodename) --> Returns true if nodename is an effector with nodedef.mesecons.effector.action_off --- mesecon.is_effector_off(nodename) --> Returns true if nodename is an effector with nodedef.mesecons.effector.action_on --- mesecon.effector_get_rules(node) --> Returns the input rules of the effector (mesecon.rules.default if none specified) - --- SIGNALS --- mesecon.activate(pos, node, depth) --> Activates the effector node at the specific pos (calls nodedef.mesecons.effector.action_on), higher depths are executed later --- mesecon.deactivate(pos, node, depth) --> Deactivates the effector node at the specific pos (calls nodedef.mesecons.effector.action_off), higher depths are executed later --- mesecon.changesignal(pos, node, rulename, newstate, depth) --> Changes the effector node at the specific pos (calls nodedef.mesecons.effector.action_change), higher depths are executed later - --- CONDUCTORS --- mesecon.is_conductor(nodename) --> Returns true if nodename is a conductor --- mesecon.is_conductor_on(node --> Returns true if node is a conductor with state = mesecon.state.on --- mesecon.is_conductor_off(node) --> Returns true if node is a conductor with state = mesecon.state.off --- mesecon.get_conductor_on(node_off) --> Returns the onstate nodename of the conductor --- mesecon.get_conductor_off(node_on) --> Returns the offstate nodename of the conductor --- mesecon.conductor_get_rules(node) --> Returns the input+output rules of a conductor (mesecon.rules.default if none specified) - --- HIGH-LEVEL Internals --- mesecon.is_power_on(pos) --> Returns true if pos emits power in any way --- mesecon.is_power_off(pos) --> Returns true if pos does not emit power in any way --- mesecon.is_powered(pos) --> Returns true if pos is powered by a receptor or a conductor - --- RULES ROTATION helpers --- mesecon.rotate_rules_right(rules) --- mesecon.rotate_rules_left(rules) --- mesecon.rotate_rules_up(rules) --- mesecon.rotate_rules_down(rules) --- These functions return rules that have been rotated in the specific direction - --- General -function mesecon.get_effector(nodename) - if minetest.registered_nodes[nodename] - and minetest.registered_nodes[nodename].mesecons - and minetest.registered_nodes[nodename].mesecons.effector then - return minetest.registered_nodes[nodename].mesecons.effector - end -end - -function mesecon.get_receptor(nodename) - if minetest.registered_nodes[nodename] - and minetest.registered_nodes[nodename].mesecons - and minetest.registered_nodes[nodename].mesecons.receptor then - return minetest.registered_nodes[nodename].mesecons.receptor - end -end - -function mesecon.get_conductor(nodename) - if minetest.registered_nodes[nodename] - and minetest.registered_nodes[nodename].mesecons - and minetest.registered_nodes[nodename].mesecons.conductor then - return minetest.registered_nodes[nodename].mesecons.conductor - end -end - -function mesecon.get_any_outputrules(node) - if not node then return nil end - - if mesecon.is_conductor(node.name) then - return mesecon.conductor_get_rules(node) - elseif mesecon.is_receptor(node.name) then - return mesecon.receptor_get_rules(node) - end -end - -function mesecon.get_any_inputrules(node) - if not node then return nil end - - if mesecon.is_conductor(node.name) then - return mesecon.conductor_get_rules(node) - elseif mesecon.is_effector(node.name) then - return mesecon.effector_get_rules(node) - end -end - -function mesecon.get_any_rules(node) - return mesecon.mergetable(mesecon.get_any_inputrules(node) or {}, - mesecon.get_any_outputrules(node) or {}) -end - --- Receptors --- Nodes that can power mesecons -function mesecon.is_receptor_on(nodename) - local receptor = mesecon.get_receptor(nodename) - if receptor and receptor.state == mesecon.state.on then - return true - end - return false -end - -function mesecon.is_receptor_off(nodename) - local receptor = mesecon.get_receptor(nodename) - if receptor and receptor.state == mesecon.state.off then - return true - end - return false -end - -function mesecon.is_receptor(nodename) - local receptor = mesecon.get_receptor(nodename) - if receptor then - return true - end - return false -end - -function mesecon.receptor_get_rules(node) - local receptor = mesecon.get_receptor(node.name) - if receptor then - local rules = receptor.rules - if type(rules) == 'function' then - return rules(node) - elseif rules then - return rules - end - end - - return mesecon.rules.default -end - --- Effectors --- Nodes that can be powered by mesecons -function mesecon.is_effector_on(nodename) - local effector = mesecon.get_effector(nodename) - if effector and effector.action_off then - return true - end - return false -end - -function mesecon.is_effector_off(nodename) - local effector = mesecon.get_effector(nodename) - if effector and effector.action_on then - return true - end - return false -end - -function mesecon.is_effector(nodename) - local effector = mesecon.get_effector(nodename) - if effector then - return true - end - return false -end - -function mesecon.effector_get_rules(node) - local effector = mesecon.get_effector(node.name) - if effector then - local rules = effector.rules - if type(rules) == 'function' then - return rules(node) - elseif rules then - return rules - end - end - return mesecon.rules.default -end - --- ####################### --- # Signals (effectors) # --- ####################### - --- Activation: -mesecon.queue:add_function("activate", function (pos, rulename) - local node = mesecon.get_node_force(pos) - if not node then return end - - local effector = mesecon.get_effector(node.name) - - if effector and effector.action_on then - effector.action_on(pos, node, rulename) - end -end) - -function mesecon.activate(pos, node, rulename, depth) - if rulename == nil then - for _,rule in ipairs(mesecon.effector_get_rules(node)) do - mesecon.activate(pos, node, rule, depth + 1) - end - return - end - mesecon.queue:add_action(pos, "activate", {rulename}, nil, rulename, 1 / depth) -end - - --- Deactivation -mesecon.queue:add_function("deactivate", function (pos, rulename) - local node = mesecon.get_node_force(pos) - if not node then return end - - local effector = mesecon.get_effector(node.name) - - if effector and effector.action_off then - effector.action_off(pos, node, rulename) - end -end) - -function mesecon.deactivate(pos, node, rulename, depth) - if rulename == nil then - for _,rule in ipairs(mesecon.effector_get_rules(node)) do - mesecon.deactivate(pos, node, rule, depth + 1) - end - return - end - mesecon.queue:add_action(pos, "deactivate", {rulename}, nil, rulename, 1 / depth) -end - - --- Change -mesecon.queue:add_function("change", function (pos, rulename, changetype) - local node = mesecon.get_node_force(pos) - if not node then return end - - local effector = mesecon.get_effector(node.name) - - if effector and effector.action_change then - effector.action_change(pos, node, rulename, changetype) - end -end) - -function mesecon.changesignal(pos, node, rulename, newstate, depth) - if rulename == nil then - for _,rule in ipairs(mesecon.effector_get_rules(node)) do - mesecon.changesignal(pos, node, rule, newstate, depth + 1) - end - return - end - - -- Include "change" in overwritecheck so that it cannot be overwritten - -- by "active" / "deactivate" that will be called upon the node at the same time. - local overwritecheck = {"change", rulename} - mesecon.queue:add_action(pos, "change", {rulename, newstate}, nil, overwritecheck, 1 / depth) -end - --- Conductors - -function mesecon.is_conductor_on(node, rulename) - if not node then return false end - - local conductor = mesecon.get_conductor(node.name) - if conductor then - if conductor.state then - return conductor.state == mesecon.state.on - end - if conductor.states then - if not rulename then - return mesecon.getstate(node.name, conductor.states) ~= 1 - end - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node)) - local binstate = mesecon.getbinstate(node.name, conductor.states) - return mesecon.get_bit(binstate, bit) - end - end - - return false -end - -function mesecon.is_conductor_off(node, rulename) - if not node then return false end - - local conductor = mesecon.get_conductor(node.name) - if conductor then - if conductor.state then - return conductor.state == mesecon.state.off - end - if conductor.states then - if not rulename then - return mesecon.getstate(node.name, conductor.states) == 1 - end - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node)) - local binstate = mesecon.getbinstate(node.name, conductor.states) - return not mesecon.get_bit(binstate, bit) - end - end - - return false -end - -function mesecon.is_conductor(nodename) - local conductor = mesecon.get_conductor(nodename) - if conductor then - return true - end - return false -end - -function mesecon.get_conductor_on(node_off, rulename) - local conductor = mesecon.get_conductor(node_off.name) - if conductor then - if conductor.onstate then - return conductor.onstate - end - if conductor.states then - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node_off)) - local binstate = mesecon.getbinstate(node_off.name, conductor.states) - binstate = mesecon.set_bit(binstate, bit, "1") - return conductor.states[tonumber(binstate,2)+1] - end - end - return offstate -end - -function mesecon.get_conductor_off(node_on, rulename) - local conductor = mesecon.get_conductor(node_on.name) - if conductor then - if conductor.offstate then - return conductor.offstate - end - if conductor.states then - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node_on)) - local binstate = mesecon.getbinstate(node_on.name, conductor.states) - binstate = mesecon.set_bit(binstate, bit, "0") - return conductor.states[tonumber(binstate,2)+1] - end - end - return onstate -end - -function mesecon.conductor_get_rules(node) - local conductor = mesecon.get_conductor(node.name) - if conductor then - local rules = conductor.rules - if type(rules) == 'function' then - return rules(node) - elseif rules then - return rules - end - end - return mesecon.rules.default -end - --- some more general high-level stuff - -function mesecon.is_power_on(pos, rulename) - local node = mesecon.get_node_force(pos) - if node and (mesecon.is_conductor_on(node, rulename) or mesecon.is_receptor_on(node.name)) then - return true - end - return false -end - -function mesecon.is_power_off(pos, rulename) - local node = mesecon.get_node_force(pos) - if node and (mesecon.is_conductor_off(node, rulename) or mesecon.is_receptor_off(node.name)) then - return true - end - return false -end - --- Turn off an equipotential section starting at `pos`, which outputs in the direction of `link`. --- Breadth-first search. Map is abstracted away in a voxelmanip. --- Follow all all conductor paths replacing conductors that were already --- looked at, activating / changing all effectors along the way. -function mesecon.turnon(pos, link) - local frontiers = {{pos = pos, link = link}} - - local depth = 1 - while frontiers[1] do - local f = table.remove(frontiers, 1) - local node = mesecon.get_node_force(f.pos) - - if not node then - -- Area does not exist; do nothing - elseif mesecon.is_conductor_off(node, f.link) then - local rules = mesecon.conductor_get_rules(node) - - -- Call turnon on neighbors - for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do - local np = vector.add(f.pos, r) - for _, l in ipairs(mesecon.rules_link_rule_all(f.pos, r)) do - table.insert(frontiers, {pos = np, link = l}) - end - end - - mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link)) - elseif mesecon.is_effector(node.name) then - mesecon.changesignal(f.pos, node, f.link, mesecon.state.on, depth) - if mesecon.is_effector_off(node.name) then - mesecon.activate(f.pos, node, f.link, depth) - end - end - depth = depth + 1 - end -end - --- Turn on an equipotential section starting at `pos`, which outputs in the direction of `link`. --- Breadth-first search. Map is abstracted away in a voxelmanip. --- Follow all all conductor paths replacing conductors that were already --- looked at, deactivating / changing all effectors along the way. --- In case an onstate receptor is discovered, abort the process by returning false, which will --- cause `receptor_off` to discard all changes made in the voxelmanip. --- Contrary to turnon, turnoff has to cache all change and deactivate signals so that they will only --- be called in the very end when we can be sure that no conductor was found along the path. --- --- Signal table entry structure: --- { --- pos = position of effector, --- node = node descriptor (name, param1 and param2), --- link = link the effector is connected to, --- depth = indicates order in which signals wire fired, higher is later --- } -function mesecon.turnoff(pos, link) - local frontiers = {{pos = pos, link = link}} - local signals = {} - - local depth = 1 - while frontiers[1] do - local f = table.remove(frontiers, 1) - local node = mesecon.get_node_force(f.pos) - - if not node then - -- Area does not exist; do nothing - elseif mesecon.is_conductor_on(node, f.link) then - local rules = mesecon.conductor_get_rules(node) - for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do - local np = vector.add(f.pos, r) - - -- Check if an onstate receptor is connected. If that is the case, - -- abort this turnoff process by returning false. `receptor_off` will - -- discard all the changes that we made in the voxelmanip: - for _, l in ipairs(mesecon.rules_link_rule_all_inverted(f.pos, r)) do - if mesecon.is_receptor_on(mesecon.get_node_force(np).name) then - return false - end - end - - -- Call turnoff on neighbors - for _, l in ipairs(mesecon.rules_link_rule_all(f.pos, r)) do - table.insert(frontiers, {pos = np, link = l}) - end - end - - mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link)) - elseif mesecon.is_effector(node.name) then - table.insert(signals, { - pos = f.pos, - node = node, - link = f.link, - depth = depth - }) - end - depth = depth + 1 - end - - for _, sig in ipairs(signals) do - mesecon.changesignal(sig.pos, sig.node, sig.link, mesecon.state.off, sig.depth) - if mesecon.is_effector_on(sig.node.name) and not mesecon.is_powered(sig.pos) then - mesecon.deactivate(sig.pos, sig.node, sig.link, sig.depth) - end - end - - return true -end - --- Get all linking inputrules of inputnode (effector or conductor) that is connected to --- outputnode (receptor or conductor) at position `output` and has an output in direction `rule` -function mesecon.rules_link_rule_all(output, rule) - local input = vector.add(output, rule) - local inputnode = mesecon.get_node_force(input) - local inputrules = mesecon.get_any_inputrules(inputnode) - if not inputrules then - return {} - end - local rules = {} - - for _, inputrule in ipairs(mesecon.flattenrules(inputrules)) do - -- Check if input accepts from output - if vector.equals(vector.add(input, inputrule), output) then - table.insert(rules, inputrule) - end - end - - return rules -end - --- Get all linking outputnodes of outputnode (receptor or conductor) that is connected to --- inputnode (effector or conductor) at position `input` and has an input in direction `rule` -function mesecon.rules_link_rule_all_inverted(input, rule) - local output = vector.add(input, rule) - local outputnode = mesecon.get_node_force(output) - local outputrules = mesecon.get_any_outputrules(outputnode) - if not outputrules then - return {} - end - local rules = {} - - for _, outputrule in ipairs(mesecon.flattenrules(outputrules)) do - if vector.equals(vector.add(output, outputrule), input) then - table.insert(rules, mesecon.invertRule(outputrule)) - end - end - return rules -end - -function mesecon.is_powered(pos, rule) - local node = mesecon.get_node_force(pos) - local rules = mesecon.get_any_inputrules(node) - if not rules then return false end - - -- List of nodes that send out power to pos - local sourcepos = {} - - if not rule then - for _, rule in ipairs(mesecon.flattenrules(rules)) do - local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule) - for _, rname in ipairs(rulenames) do - local np = vector.add(pos, rname) - local nn = mesecon.get_node_force(np) - - if (mesecon.is_conductor_on(nn, mesecon.invertRule(rname)) - or mesecon.is_receptor_on(nn.name)) then - table.insert(sourcepos, np) - end - end - end - else - local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule) - for _, rname in ipairs(rulenames) do - local np = vector.add(pos, rname) - local nn = mesecon.get_node_force(np) - if (mesecon.is_conductor_on (nn, mesecon.invertRule(rname)) - or mesecon.is_receptor_on (nn.name)) then - table.insert(sourcepos, np) - end - end - end - - -- Return FALSE if not powered, return list of sources if is powered - if (#sourcepos == 0) then return false - else return sourcepos end -end - ---Rules rotation Functions: -function mesecon.rotate_rules_right(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = -rule.z, - y = rule.y, - z = rule.x, - name = rule.name}) - end - return nr -end - -function mesecon.rotate_rules_left(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = rule.z, - y = rule.y, - z = -rule.x, - name = rule.name}) - end - return nr -end - -function mesecon.rotate_rules_down(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = -rule.y, - y = rule.x, - z = rule.z, - name = rule.name}) - end - return nr -end - -function mesecon.rotate_rules_up(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = rule.y, - y = -rule.x, - z = rule.z, - name = rule.name}) - end - return nr -end diff --git a/mods/ITEMS/mesecons/mesecons/oldwires.lua b/mods/ITEMS/mesecons/mesecons/oldwires.lua deleted file mode 100755 index b3b09e5..0000000 --- a/mods/ITEMS/mesecons/mesecons/oldwires.lua +++ /dev/null @@ -1,38 +0,0 @@ -minetest.register_node("mesecons:mesecon_off", { - drawtype = "raillike", - tiles = {"jeija_mesecon_off.png", "jeija_mesecon_curved_off.png", "jeija_mesecon_t_junction_off.png", "jeija_mesecon_crossing_off.png"}, - inventory_image = "jeija_mesecon_off.png", - wield_image = "jeija_mesecon_off.png", - paramtype = "light", - is_ground_content = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}, - }, - groups = {dig_immediate=3, mesecon=1, mesecon_conductor_craftable=1}, - description="Mesecons", - mesecons = {conductor={ - state = mesecon.state.off, - onstate = "mesecons:mesecon_on" - }} -}) - -minetest.register_node("mesecons:mesecon_on", { - drawtype = "raillike", - tiles = {"jeija_mesecon_on.png", "jeija_mesecon_curved_on.png", "jeija_mesecon_t_junction_on.png", "jeija_mesecon_crossing_on.png"}, - paramtype = "light", - is_ground_content = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}, - }, - groups = {dig_immediate=3, not_in_creaive_inventory=1, mesecon=1}, - drop = "mesecons:mesecon_off 1", - light_source = default.LIGHT_MAX-11, - mesecons = {conductor={ - state = mesecon.state.on, - offstate = "mesecons:mesecon_off" - }} -}) diff --git a/mods/ITEMS/mesecons/mesecons/presets.lua b/mods/ITEMS/mesecons/mesecons/presets.lua deleted file mode 100755 index 8c3ed67..0000000 --- a/mods/ITEMS/mesecons/mesecons/presets.lua +++ /dev/null @@ -1,62 +0,0 @@ -mesecon.rules = {} -mesecon.state = {} - -mesecon.rules.default = -{{x=0, y=0, z=-1}, - {x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=0, z=1}, - {x=1, y=1, z=0}, - {x=1, y=-1, z=0}, - {x=-1, y=1, z=0}, - {x=-1, y=-1, z=0}, - {x=0, y=1, z=1}, - {x=0, y=-1, z=1}, - {x=0, y=1, z=-1}, - {x=0, y=-1, z=-1}} - -mesecon.rules.pplate = mesecon.mergetable(mesecon.rules.default, {{x=0, y=-2, z=0}}) - -mesecon.rules.buttonlike = -{{x = 1, y = 0, z = 0}, - {x = 1, y = 1, z = 0}, - {x = 1, y =-1, z = 0}, - {x = 1, y =-1, z = 1}, - {x = 1, y =-1, z =-1}, - {x = 2, y = 0, z = 0}} - -mesecon.rules.flat = -{{x = 1, y = 0, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 0, y = 0, z = 1}, - {x = 0, y = 0, z =-1}} - -mesecon.rules.alldirs = -{{x= 1, y= 0, z= 0}, - {x=-1, y= 0, z= 0}, - {x= 0, y= 1, z= 0}, - {x= 0, y=-1, z= 0}, - {x= 0, y= 0, z= 1}, - {x= 0, y= 0, z=-1}} - -mesecon.rules.buttonlike_get = function(node) - local rules = mesecon.rules.buttonlike - local dir = minetest.facedir_to_dir(node.param2) - if dir.x == 1 then - -- No action needed - elseif dir.z == -1 then - rules=mesecon.rotate_rules_left(rules) - elseif dir.x == -1 then - rules=mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) - elseif dir.z == 1 then - rules=mesecon.rotate_rules_right(rules) - elseif dir.y == -1 then - rules=mesecon.rotate_rules_up(rules) - elseif dir.y == 1 then - rules=mesecon.rotate_rules_down(rules) - end - return rules -end - -mesecon.state.on = "on" -mesecon.state.off = "off" diff --git a/mods/ITEMS/mesecons/mesecons/services.lua b/mods/ITEMS/mesecons/mesecons/services.lua deleted file mode 100755 index 1e12de0..0000000 --- a/mods/ITEMS/mesecons/mesecons/services.lua +++ /dev/null @@ -1,128 +0,0 @@ --- Dig and place services - -mesecon.on_placenode = function(pos, node) - mesecon.execute_autoconnect_hooks_now(pos, node) - - -- Receptors: Send on signal when active - if mesecon.is_receptor_on(node.name) then - mesecon.receptor_on(pos, mesecon.receptor_get_rules(node)) - end - - -- Conductors: Send turnon signal when powered or replace by respective offstate conductor - -- if placed conductor is an onstate one - if mesecon.is_conductor(node.name) then - local sources = mesecon.is_powered(pos) - if sources then - -- also call receptor_on if itself is powered already, so that neighboring - -- conductors will be activated (when pushing an on-conductor with a piston) - for _, s in ipairs(sources) do - local rule = vector.subtract(pos, s) - mesecon.turnon(pos, rule) - end - --mesecon.receptor_on (pos, mesecon.conductor_get_rules(node)) - elseif mesecon.is_conductor_on(node) then - minetest.swap_node(pos, {name = mesecon.get_conductor_off(node)}) - end - end - - -- Effectors: Send changesignal and activate or deactivate - if mesecon.is_effector(node.name) then - local powered_rules = {} - local unpowered_rules = {} - - -- for each input rule, check if powered - for _, r in ipairs(mesecon.effector_get_rules(node)) do - local powered = mesecon.is_powered(pos, r) - if powered then table.insert(powered_rules, r) - else table.insert(unpowered_rules, r) end - - local state = powered and mesecon.state.on or mesecon.state.off - mesecon.changesignal(pos, node, r, state, 1) - end - - if (#powered_rules > 0) then - for _, r in ipairs(powered_rules) do - mesecon.activate(pos, node, r, 1) - end - else - for _, r in ipairs(unpowered_rules) do - mesecon.deactivate(pos, node, r, 1) - end - end - end -end - -mesecon.on_dignode = function(pos, node) - if mesecon.is_conductor_on(node) then - mesecon.receptor_off(pos, mesecon.conductor_get_rules(node)) - elseif mesecon.is_receptor_on(node.name) then - mesecon.receptor_off(pos, mesecon.receptor_get_rules(node)) - end - - mesecon.execute_autoconnect_hooks_queue(pos, node) -end - -minetest.register_on_placenode(mesecon.on_placenode) -minetest.register_on_dignode(mesecon.on_dignode) - --- Overheating service for fast circuits -local OVERHEAT_MAX = mesecon.setting("overheat_max", 20) -local COOLDOWN_TIME = mesecon.setting("cooldown_time", 2.0) -local COOLDOWN_STEP = mesecon.setting("cooldown_granularity", 0.5) -local COOLDOWN_MULTIPLIER = OVERHEAT_MAX / COOLDOWN_TIME -local cooldown_timer = 0.0 -local object_heat = {} - --- returns true if heat is too high -function mesecon.do_overheat(pos) - local id = minetest.hash_node_position(pos) - local heat = (object_heat[id] or 0) + 1 - object_heat[id] = heat - if heat >= OVERHEAT_MAX then - minetest.log("action", "Node overheats at " .. minetest.pos_to_string(pos)) - object_heat[id] = nil - return true - end - return false -end - -function mesecon.do_cooldown(pos) - local id = minetest.hash_node_position(pos) - object_heat[id] = nil -end - -function mesecon.get_heat(pos) - local id = minetest.hash_node_position(pos) - return object_heat[id] or 0 -end - -function mesecon.move_hot_nodes(moved_nodes) - local new_heat = {} - for _, n in ipairs(moved_nodes) do - local old_id = minetest.hash_node_position(n.oldpos) - local new_id = minetest.hash_node_position(n.pos) - new_heat[new_id] = object_heat[old_id] - object_heat[old_id] = nil - end - for id, heat in pairs(new_heat) do - object_heat[id] = heat - end -end - -local function global_cooldown(dtime) - cooldown_timer = cooldown_timer + dtime - if cooldown_timer < COOLDOWN_STEP then - return -- don't overload the CPU - end - local cooldown = COOLDOWN_MULTIPLIER * cooldown_timer - cooldown_timer = 0 - for id, heat in pairs(object_heat) do - heat = heat - cooldown - if heat <= 0 then - object_heat[id] = nil -- free some RAM - else - object_heat[id] = heat - end - end -end -minetest.register_globalstep(global_cooldown) diff --git a/mods/ITEMS/mesecons/mesecons/settings.lua b/mods/ITEMS/mesecons/mesecons/settings.lua deleted file mode 100755 index 1ebbfde..0000000 --- a/mods/ITEMS/mesecons/mesecons/settings.lua +++ /dev/null @@ -1,15 +0,0 @@ --- SETTINGS -function mesecon.setting(setting, default) - if type(default) == "boolean" then - local read = minetest.setting_getbool("mesecon."..setting) - if read == nil then - return default - else - return read - end - elseif type(default) == "string" then - return minetest.setting_get("mesecon."..setting) or default - elseif type(default) == "number" then - return tonumber(minetest.setting_get("mesecon."..setting) or default) - end -end diff --git a/mods/ITEMS/mesecons/mesecons/util.lua b/mods/ITEMS/mesecons/mesecons/util.lua deleted file mode 100755 index 39f5696..0000000 --- a/mods/ITEMS/mesecons/mesecons/util.lua +++ /dev/null @@ -1,390 +0,0 @@ -function mesecon.move_node(pos, newpos) - local node = minetest.get_node(pos) - local meta = minetest.get_meta(pos):to_table() - minetest.remove_node(pos) - minetest.set_node(newpos, node) - minetest.get_meta(pos):from_table(meta) -end - -function mesecon.flattenrules(allrules) ---[[ - { - { - {xyz}, - {xyz}, - }, - { - {xyz}, - {xyz}, - }, - } ---]] - if allrules[1] and - allrules[1].x then - return allrules - end - - local shallowrules = {} - for _, metarule in ipairs( allrules) do - for _, rule in ipairs(metarule ) do - table.insert(shallowrules, rule) - end - end - return shallowrules ---[[ - { - {xyz}, - {xyz}, - {xyz}, - {xyz}, - } ---]] -end - -function mesecon.rule2bit(findrule, allrules) - --get the bit of the metarule the rule is in, or bit 1 - if (allrules[1] and - allrules[1].x) or - not findrule then - return 1 - end - for m,metarule in ipairs( allrules) do - for _, rule in ipairs(metarule ) do - if vector.equals(findrule, rule) then - return m - end - end - end -end - -function mesecon.rule2metaindex(findrule, allrules) - --get the metarule the rule is in, or allrules - if allrules[1].x then - return nil - end - - if not(findrule) then - return mesecon.flattenrules(allrules) - end - - for m, metarule in ipairs( allrules) do - for _, rule in ipairs(metarule ) do - if vector.equals(findrule, rule) then - return m - end - end - end -end - -function mesecon.rule2meta(findrule, allrules) - if #allrules == 0 then return {} end - - local index = mesecon.rule2metaindex(findrule, allrules) - if index == nil then - if allrules[1].x then - return allrules - else - return {} - end - end - return allrules[index] -end - -function mesecon.dec2bin(n) - local x, y = math.floor(n / 2), n % 2 - if (n > 1) then - return mesecon.dec2bin(x)..y - else - return ""..y - end -end - -function mesecon.getstate(nodename, states) - for state, name in ipairs(states) do - if name == nodename then - return state - end - end - error(nodename.." doesn't mention itself in "..dump(states)) -end - -function mesecon.getbinstate(nodename, states) - return mesecon.dec2bin(mesecon.getstate(nodename, states)-1) -end - -function mesecon.get_bit(binary,bit) - bit = bit or 1 - local c = binary:len()-(bit-1) - return binary:sub(c,c) == "1" -end - -function mesecon.set_bit(binary,bit,value) - if value == "1" then - if not mesecon.get_bit(binary,bit) then - return mesecon.dec2bin(tonumber(binary,2)+math.pow(2,bit-1)) - end - elseif value == "0" then - if mesecon.get_bit(binary,bit) then - return mesecon.dec2bin(tonumber(binary,2)-math.pow(2,bit-1)) - end - end - return binary - -end - -function mesecon.invertRule(r) - return vector.multiply(r, -1) -end - -function mesecon.tablecopy(table) -- deep table copy - if type(table) ~= "table" then return table end -- no need to copy - local newtable = {} - - for idx, item in pairs(table) do - if type(item) == "table" then - newtable[idx] = mesecon.tablecopy(item) - else - newtable[idx] = item - end - end - - return newtable -end - -function mesecon.cmpAny(t1, t2) - if type(t1) ~= type(t2) then return false end - if type(t1) ~= "table" and type(t2) ~= "table" then return t1 == t2 end - - for i, e in pairs(t1) do - if not mesecon.cmpAny(e, t2[i]) then return false end - end - - return true -end - --- does not overwrite values; number keys (ipairs) are appended, not overwritten -function mesecon.mergetable(source, dest) - local rval = mesecon.tablecopy(dest) - - for k, v in pairs(source) do - rval[k] = dest[k] or mesecon.tablecopy(v) - end - for i, v in ipairs(source) do - table.insert(rval, mesecon.tablecopy(v)) - end - - return rval -end - -function mesecon.register_node(name, spec_common, spec_off, spec_on) - spec_common.drop = spec_common.drop or name .. "_off" - spec_common.__mesecon_basename = name - spec_on.__mesecon_state = "on" - spec_off.__mesecon_state = "off" - - spec_on = mesecon.mergetable(spec_common, spec_on); - spec_off = mesecon.mergetable(spec_common, spec_off); - - minetest.register_node(name .. "_on", spec_on) - minetest.register_node(name .. "_off", spec_off) -end - --- swap onstate and offstate nodes, returns new state -function mesecon.flipstate(pos, node) - local nodedef = minetest.registered_nodes[node.name] - local newstate - if (nodedef.__mesecon_state == "on") then newstate = "off" end - if (nodedef.__mesecon_state == "off") then newstate = "on" end - - minetest.swap_node(pos, {name = nodedef.__mesecon_basename .. "_" .. newstate, - param2 = node.param2}) - - return newstate -end - --- File writing / reading utilities -local wpath = minetest.get_worldpath() -function mesecon.file2table(filename) - local f = io.open(wpath..DIR_DELIM..filename, "r") - if f == nil then return {} end - local t = f:read("*all") - f:close() - if t == "" or t == nil then return {} end - return minetest.deserialize(t) -end - -function mesecon.table2file(filename, table) - local f = io.open(wpath..DIR_DELIM..filename, "w") - f:write(minetest.serialize(table)) - f:close() -end - --- Block position "hashing" (convert to integer) functions for voxelmanip cache -local BLOCKSIZE = 16 - --- convert node position --> block hash -local function hash_blockpos(pos) - return minetest.hash_node_position({ - x = math.floor(pos.x/BLOCKSIZE), - y = math.floor(pos.y/BLOCKSIZE), - z = math.floor(pos.z/BLOCKSIZE) - }) -end - --- Maps from a hashed mapblock position (as returned by hash_blockpos) to a --- table. --- --- Contents of the table are: --- “vm” → the VoxelManipulator --- “va” → the VoxelArea --- “data” → the data array --- “param1” → the param1 array --- “param2” → the param2 array --- “dirty” → true if data has been modified --- --- Nil if no VM-based transaction is in progress. -local vm_cache = nil - --- Starts a VoxelManipulator-based transaction. --- --- During a VM transaction, calls to vm_get_node and vm_swap_node operate on a --- cached copy of the world loaded via VoxelManipulators. That cache can later --- be committed to the real map by means of vm_commit or discarded by means of --- vm_abort. -function mesecon.vm_begin() - vm_cache = {} -end - --- Finishes a VoxelManipulator-based transaction, freeing the VMs and map data --- and writing back any modified areas. -function mesecon.vm_commit() - for hash, tbl in pairs(vm_cache) do - if tbl.dirty then - local vm = tbl.vm - vm:set_data(tbl.data) - vm:write_to_map() - vm:update_map() - end - end - vm_cache = nil -end - --- Finishes a VoxelManipulator-based transaction, freeing the VMs and throwing --- away any modified areas. -function mesecon.vm_abort() - vm_cache = nil -end - --- Gets the cache entry covering a position, populating it if necessary. -local function vm_get_or_create_entry(pos) - local hash = hash_blockpos(pos) - local tbl = vm_cache[hash] - if not tbl then - local vm = minetest.get_voxel_manip(pos, pos) - local min_pos, max_pos = vm:get_emerged_area() - local va = VoxelArea:new{MinEdge = min_pos, MaxEdge = max_pos} - tbl = {vm = vm, va = va, data = vm:get_data(), param1 = vm:get_light_data(), param2 = vm:get_param2_data(), dirty = false} - vm_cache[hash] = tbl - end - return tbl -end - --- Gets the node at a given position during a VoxelManipulator-based --- transaction. -function mesecon.vm_get_node(pos) - local tbl = vm_get_or_create_entry(pos) - local index = tbl.va:indexp(pos) - local node_value = tbl.data[index] - if node_value == core.CONTENT_IGNORE then - return nil - else - local node_param1 = tbl.param1[index] - local node_param2 = tbl.param2[index] - return {name = minetest.get_name_from_content_id(node_value), param1 = node_param1, param2 = node_param2} - end -end - --- Sets a node’s name during a VoxelManipulator-based transaction. --- --- Existing param1, param2, and metadata are left alone. -function mesecon.vm_swap_node(pos, name) - local tbl = vm_get_or_create_entry(pos) - local index = tbl.va:indexp(pos) - tbl.data[index] = minetest.get_content_id(name) - tbl.dirty = true -end - --- Gets the node at a given position, regardless of whether it is loaded or --- not, respecting a transaction if one is in progress. --- --- Outside a VM transaction, if the mapblock is not loaded, it is pulled into --- the server’s main map data cache and then accessed from there. --- --- Inside a VM transaction, the transaction’s VM cache is used. -function mesecon.get_node_force(pos) - if vm_cache then - return mesecon.vm_get_node(pos) - else - local node = minetest.get_node_or_nil(pos) - if node == nil then - -- Node is not currently loaded; use a VoxelManipulator to prime - -- the mapblock cache and try again. - minetest.get_voxel_manip(pos, pos) - node = minetest.get_node_or_nil(pos) - end - return node - end -end - --- Swaps the node at a given position, regardless of whether it is loaded or --- not, respecting a transaction if one is in progress. --- --- Outside a VM transaction, if the mapblock is not loaded, it is pulled into --- the server’s main map data cache and then accessed from there. --- --- Inside a VM transaction, the transaction’s VM cache is used. --- --- This function can only be used to change the node’s name, not its parameters --- or metadata. -function mesecon.swap_node_force(pos, name) - if vm_cache then - return mesecon.vm_swap_node(pos, name) - else - -- This serves to both ensure the mapblock is loaded and also hand us - -- the old node table so we can preserve param2. - local node = mesecon.get_node_force(pos) - node.name = name - minetest.swap_node(pos, node) - end -end - --- Autoconnect Hooks --- Nodes like conductors may change their appearance and their connection rules --- right after being placed or after being dug, e.g. the default wires use this --- to automatically connect to linking nodes after placement. --- After placement, the update function will be executed immediately so that the --- possibly changed rules can be taken into account when recalculating the circuit. --- After digging, the update function will be queued and executed after --- recalculating the circuit. The update function must take care of updating the --- node at the given position itself, but also all of the other nodes the given --- position may have (had) a linking connection to. -mesecon.autoconnect_hooks = {} - --- name: A unique name for the hook, e.g. "foowire". Used to name the actionqueue function. --- fct: The update function with parameters function(pos, node) -function mesecon.register_autoconnect_hook(name, fct) - mesecon.autoconnect_hooks[name] = fct - mesecon.queue:add_function("autoconnect_hook_"..name, fct) -end - -function mesecon.execute_autoconnect_hooks_now(pos, node) - for _, fct in pairs(mesecon.autoconnect_hooks) do - fct(pos, node) - end -end - -function mesecon.execute_autoconnect_hooks_queue(pos, node) - for name in pairs(mesecon.autoconnect_hooks) do - mesecon.queue:add_action(pos, "autoconnect_hook_"..name, {node}) - end -end diff --git a/mods/ITEMS/mesecons/mesecons_blinkyplant/init.lua b/mods/ITEMS/mesecons/mesecons_blinkyplant/init.lua deleted file mode 100755 index 8d2aa6e..0000000 --- a/mods/ITEMS/mesecons/mesecons_blinkyplant/init.lua +++ /dev/null @@ -1,51 +0,0 @@ --- The BLINKY_PLANT - -local toggle_timer = function (pos) - local timer = minetest.get_node_timer(pos) - if timer:is_started() then - timer:stop() - else - timer:start(mesecon.setting("blinky_plant_interval", 3)) - end -end - -local on_timer = function (pos) - local node = minetest.get_node(pos) - if(mesecon.flipstate(pos, node) == "on") then - mesecon.receptor_on(pos) - else - mesecon.receptor_off(pos) - end - toggle_timer(pos) -end - -mesecon.register_node("mesecons_blinkyplant:blinky_plant", { - description="Blinky Plant", - drawtype = "plantlike", - inventory_image = "jeija_blinky_plant_off.png", - paramtype = "light", - walkable = false, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, -0.5+0.7, 0.3}, - }, - on_timer = on_timer, - on_rightclick = toggle_timer, - on_construct = toggle_timer -},{ - tiles = {"jeija_blinky_plant_off.png"}, - groups = {dig_immediate=3}, - mesecons = {receptor = { state = mesecon.state.off }} -},{ - tiles = {"jeija_blinky_plant_on.png"}, - groups = {dig_immediate=3, not_in_creative_inventory=1}, - mesecons = {receptor = { state = mesecon.state.on }} -}) - -minetest.register_craft({ - output = "mesecons_blinkyplant:blinky_plant_off 1", - recipe = { {"","group:mesecon_conductor_craftable",""}, - {"","group:mesecon_conductor_craftable",""}, - {"group:sapling","group:sapling","group:sapling"}} -}) diff --git a/mods/ITEMS/mesecons/mesecons_button/init.lua b/mods/ITEMS/mesecons/mesecons_button/init.lua deleted file mode 100755 index c67c149..0000000 --- a/mods/ITEMS/mesecons/mesecons_button/init.lua +++ /dev/null @@ -1,102 +0,0 @@ --- WALL BUTTON --- A button that when pressed emits power for 1 second --- and then turns off again - -mesecon.button_turnoff = function (pos) - local node = minetest.get_node(pos) - if node.name ~= "mesecons_button:button_on" then -- has been dug - return - end - minetest.swap_node(pos, {name = "mesecons_button:button_off", param2 = node.param2}) - minetest.sound_play("mesecons_button_pop", {pos = pos}) - local rules = mesecon.rules.buttonlike_get(node) - mesecon.receptor_off(pos, rules) -end - -minetest.register_node("mesecons_button:button_off", { - drawtype = "nodebox", - tiles = { - "jeija_wall_button_sides.png", - "jeija_wall_button_sides.png", - "jeija_wall_button_sides.png", - "jeija_wall_button_sides.png", - "jeija_wall_button_sides.png", - "jeija_wall_button_off.png" - }, - paramtype = "light", - paramtype2 = "facedir", - legacy_wallmounted = true, - walkable = false, - on_rotate = mesecon.buttonlike_onrotate, - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = { -6/16, -6/16, 5/16, 6/16, 6/16, 8/16 } - }, - node_box = { - type = "fixed", - fixed = { - { -6/16, -6/16, 6/16, 6/16, 6/16, 8/16 }, -- the thin plate behind the button - { -4/16, -2/16, 4/16, 4/16, 2/16, 6/16 } -- the button itself - } - }, - groups = {dig_immediate=2, mesecon_needs_receiver = 1}, - description = "Button", - on_rightclick = function (pos, node) - minetest.swap_node(pos, {name = "mesecons_button:button_on", param2=node.param2}) - mesecon.receptor_on(pos, mesecon.rules.buttonlike_get(node)) - minetest.sound_play("mesecons_button_push", {pos=pos}) - minetest.get_node_timer(pos):start(1) - end, - sounds = default.node_sound_stone_defaults(), - mesecons = {receptor = { - state = mesecon.state.off, - rules = mesecon.rules.buttonlike_get - }} -}) - -minetest.register_node("mesecons_button:button_on", { - drawtype = "nodebox", - tiles = { - "jeija_wall_button_sides.png", - "jeija_wall_button_sides.png", - "jeija_wall_button_sides.png", - "jeija_wall_button_sides.png", - "jeija_wall_button_sides.png", - "jeija_wall_button_on.png" - }, - paramtype = "light", - paramtype2 = "facedir", - legacy_wallmounted = true, - walkable = false, - on_rotate = false, - light_source = default.LIGHT_MAX-7, - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = { -6/16, -6/16, 5/16, 6/16, 6/16, 8/16 } - }, - node_box = { - type = "fixed", - fixed = { - { -6/16, -6/16, 6/16, 6/16, 6/16, 8/16 }, - { -4/16, -2/16, 11/32, 4/16, 2/16, 6/16 } - } - }, - groups = {dig_immediate=2, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, - drop = 'mesecons_button:button_off', - description = "Button", - sounds = default.node_sound_stone_defaults(), - mesecons = {receptor = { - state = mesecon.state.on, - rules = mesecon.rules.buttonlike_get - }}, - on_timer = mesecon.button_turnoff, -}) - -minetest.register_craft({ - output = "mesecons_button:button_off 2", - recipe = { - {"group:mesecon_conductor_craftable","default:stone"}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_commandblock/init.lua b/mods/ITEMS/mesecons/mesecons_commandblock/init.lua deleted file mode 100755 index 6cd0027..0000000 --- a/mods/ITEMS/mesecons/mesecons_commandblock/init.lua +++ /dev/null @@ -1,208 +0,0 @@ -minetest.register_chatcommand("say", { - params = "", - description = "Say as the server", - privs = {server=true}, - func = function(name, param) - minetest.chat_send_all(name .. ": " .. param) - end -}) - -minetest.register_chatcommand("tell", { - params = " ", - description = "Say to privately", - func = function(name, param) - local found, _, target, message = param:find("^([^%s]+)%s+(.*)$") - if found == nil then - minetest.chat_send_player(name, "Invalid usage: " .. param) - return - end - if not minetest.get_player_by_name(target) then - minetest.chat_send_player(name, "Invalid target: " .. target) - end - minetest.chat_send_player(target, name .. " whispers: " .. message, false) - end -}) - -minetest.register_chatcommand("hp", { - params = " ", - description = "Set health of to hitpoints", - privs = {ban=true}, - func = function(name, param) - local found, _, target, value = param:find("^([^%s]+)%s+(%d+)$") - if found == nil then - minetest.chat_send_player(name, "Invalid usage: " .. param) - return - end - local player = minetest.get_player_by_name(target) - if player then - player:set_hp(value) - else - minetest.chat_send_player(name, "Invalid target: " .. target) - end - end -}) - -local function initialize_data(meta) - local commands = minetest.formspec_escape(meta:get_string("commands")) - meta:set_string("formspec", - "invsize[9,5;]" .. - "textarea[0.5,0.5;8.5,4;commands;Commands;"..commands.."]" .. - "label[1,3.8;@nearest, @farthest, and @random are replaced by the respective player names]" .. - "button_exit[3.3,4.5;2,1;submit;Submit]") - local owner = meta:get_string("owner") - if owner == "" then - owner = "not owned" - else - owner = "owned by " .. owner - end - meta:set_string("infotext", "Command Block\n" .. - "(" .. owner .. ")\n" .. - "Commands: "..commands) -end - -local function construct(pos) - local meta = minetest.get_meta(pos) - - meta:set_string("commands", "tell @nearest Commandblock unconfigured") - - meta:set_string("owner", "") - - initialize_data(meta) -end - -local function after_place(pos, placer) - if placer then - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name()) - initialize_data(meta) - end -end - -local function receive_fields(pos, formname, fields, sender) - if not fields.submit then - return - end - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - if owner ~= "" and sender:get_player_name() ~= owner then - return - end - meta:set_string("commands", fields.commands) - - initialize_data(meta) -end - -local function resolve_commands(commands, pos) - local players = minetest.get_connected_players() - - -- No players online: remove all commands containing - -- @nearest, @farthest and @random - if #players == 0 then - commands = commands:gsub("[^\r\n]+", function (line) - if line:find("@nearest") then return "" end - if line:find("@farthest") then return "" end - if line:find("@random") then return "" end - return line - end) - return commands - end - - local nearest, farthest = nil, nil - local min_distance, max_distance = math.huge, -1 - for index, player in pairs(players) do - local distance = vector.distance(pos, player:getpos()) - if distance < min_distance then - min_distance = distance - nearest = player:get_player_name() - end - if distance > max_distance then - max_distance = distance - farthest = player:get_player_name() - end - end - local random = players[math.random(#players)]:get_player_name() - commands = commands:gsub("@nearest", nearest) - commands = commands:gsub("@farthest", farthest) - commands = commands:gsub("@random", random) - return commands -end - -local function commandblock_action_on(pos, node) - if node.name ~= "mesecons_commandblock:commandblock_off" then - return - end - - minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_on"}) - - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - if owner == "" then - return - end - - local commands = resolve_commands(meta:get_string("commands"), pos) - for _, command in pairs(commands:split("\n")) do - local pos = command:find(" ") - local cmd, param = command, "" - if pos then - cmd = command:sub(1, pos - 1) - param = command:sub(pos + 1) - end - local cmddef = minetest.chatcommands[cmd] - if not cmddef then - minetest.chat_send_player(owner, "The command "..cmd.." does not exist") - return - end - local has_privs, missing_privs = minetest.check_player_privs(owner, cmddef.privs) - if not has_privs then - minetest.chat_send_player(owner, "You don't have permission " - .."to run "..cmd - .." (missing privileges: " - ..table.concat(missing_privs, ", ")..")") - return - end - cmddef.func(owner, param) - end -end - -local function commandblock_action_off(pos, node) - if node.name == "mesecons_commandblock:commandblock_on" then - minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_off"}) - end -end - -local function can_dig(pos, player) - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - return owner == "" or owner == player:get_player_name() -end - -minetest.register_node("mesecons_commandblock:commandblock_off", { - description = "Command Block", - tiles = {"jeija_commandblock_off.png"}, - inventory_image = minetest.inventorycube("jeija_commandblock_off.png"), - groups = {cracky=2, mesecon_effector_off=1}, - on_construct = construct, - after_place_node = after_place, - on_receive_fields = receive_fields, - can_dig = can_dig, - sounds = default.node_sound_stone_defaults(), - mesecons = {effector = { - action_on = commandblock_action_on - }} -}) - -minetest.register_node("mesecons_commandblock:commandblock_on", { - tiles = {"jeija_commandblock_on.png"}, - groups = {cracky=2, mesecon_effector_on=1, not_in_creative_inventory=1}, - light_source = 10, - drop = "mesecons_commandblock:commandblock_off", - on_construct = construct, - after_place_node = after_place, - on_receive_fields = receive_fields, - can_dig = can_dig, - sounds = default.node_sound_stone_defaults(), - mesecons = {effector = { - action_off = commandblock_action_off - }} -}) diff --git a/mods/ITEMS/mesecons/mesecons_delayer/init.lua b/mods/ITEMS/mesecons/mesecons_delayer/init.lua deleted file mode 100755 index 7c480c1..0000000 --- a/mods/ITEMS/mesecons/mesecons_delayer/init.lua +++ /dev/null @@ -1,181 +0,0 @@ --- Function that get the input/output rules of the delayer -local delayer_get_output_rules = function(node) - local rules = {{x = 0, y = 0, z = 1}} - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - -local delayer_get_input_rules = function(node) - local rules = {{x = 0, y = 0, z = -1}} - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - --- Functions that are called after the delay time - -local delayer_activate = function(pos, node) - local def = minetest.registered_nodes[node.name] - local time = def.delayer_time - minetest.swap_node(pos, {name = def.delayer_onstate, param2=node.param2}) - mesecon.queue:add_action(pos, "receptor_on", {delayer_get_output_rules(node)}, time, nil) -end - -local delayer_deactivate = function(pos, node) - local def = minetest.registered_nodes[node.name] - local time = def.delayer_time - minetest.swap_node(pos, {name = def.delayer_offstate, param2=node.param2}) - mesecon.queue:add_action(pos, "receptor_off", {delayer_get_output_rules(node)}, time, nil) -end - --- Register the 2 (states) x 4 (delay times) delayers - -for i = 1, 4 do -local groups = {} -if i == 1 then - groups = {bendy=2,snappy=1,dig_immediate=2} -else - groups = {bendy=2,snappy=1,dig_immediate=2, not_in_creative_inventory=1} -end - -local delaytime -if i == 1 then delaytime = 0.1 -elseif i == 2 then delaytime = 0.3 -elseif i == 3 then delaytime = 0.5 -elseif i == 4 then delaytime = 1.0 end - -local boxes = { - { -6/16, -8/16, -6/16, 6/16, -7/16, 6/16 }, -- the main slab - - { -2/16, -7/16, -4/16, 2/16, -26/64, -3/16 }, -- the jeweled "on" indicator - { -3/16, -7/16, -3/16, 3/16, -26/64, -2/16 }, - { -4/16, -7/16, -2/16, 4/16, -26/64, 2/16 }, - { -3/16, -7/16, 2/16, 3/16, -26/64, 3/16 }, - { -2/16, -7/16, 3/16, 2/16, -26/64, 4/16 }, - - { -6/16, -7/16, -6/16, -4/16, -27/64, -4/16 }, -- the timer indicator - { -8/16, -8/16, -1/16, -6/16, -7/16, 1/16 }, -- the two wire stubs - { 6/16, -8/16, -1/16, 8/16, -7/16, 1/16 } -} - -minetest.register_node("mesecons_delayer:delayer_off_"..tostring(i), { - description = "Delayer", - drawtype = "nodebox", - tiles = { - "mesecons_delayer_off_"..tostring(i)..".png", - "mesecons_delayer_bottom.png", - "mesecons_delayer_ends_off.png", - "mesecons_delayer_ends_off.png", - "mesecons_delayer_sides_off.png", - "mesecons_delayer_sides_off.png" - }, - inventory_image = "mesecons_delayer_off_1.png", - wield_image = "mesecons_delayer_off_1.png", - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = boxes - }, - groups = groups, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = true, - drop = 'mesecons_delayer:delayer_off_1', - on_punch = function (pos, node) - if node.name=="mesecons_delayer:delayer_off_1" then - minetest.swap_node(pos, {name = "mesecons_delayer:delayer_off_2", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_off_2" then - minetest.swap_node(pos, {name = "mesecons_delayer:delayer_off_3", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_off_3" then - minetest.swap_node(pos, {name = "mesecons_delayer:delayer_off_4", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_off_4" then - minetest.swap_node(pos, {name = "mesecons_delayer:delayer_off_1", param2=node.param2}) - end - end, - delayer_time = delaytime, - delayer_onstate = "mesecons_delayer:delayer_on_"..tostring(i), - sounds = default.node_sound_stone_defaults(), - mesecons = { - receptor = - { - state = mesecon.state.off, - rules = delayer_get_output_rules - }, - effector = - { - rules = delayer_get_input_rules, - action_on = delayer_activate - } - } -}) - - -minetest.register_node("mesecons_delayer:delayer_on_"..tostring(i), { - description = "You hacker you", - drawtype = "nodebox", - tiles = { - "mesecons_delayer_on_"..tostring(i)..".png", - "mesecons_delayer_bottom.png", - "mesecons_delayer_ends_on.png", - "mesecons_delayer_ends_on.png", - "mesecons_delayer_sides_on.png", - "mesecons_delayer_sides_on.png" - }, - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = boxes - }, - groups = {bendy = 2, snappy = 1, dig_immediate = 2, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = true, - drop = 'mesecons_delayer:delayer_off_1', - on_punch = function (pos, node) - if node.name=="mesecons_delayer:delayer_on_1" then - minetest.swap_node(pos, {name = "mesecons_delayer:delayer_on_2", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_on_2" then - minetest.swap_node(pos, {name = "mesecons_delayer:delayer_on_3", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_on_3" then - minetest.swap_node(pos, {name = "mesecons_delayer:delayer_on_4", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_on_4" then - minetest.swap_node(pos, {name = "mesecons_delayer:delayer_on_1", param2=node.param2}) - end - end, - delayer_time = delaytime, - delayer_offstate = "mesecons_delayer:delayer_off_"..tostring(i), - mesecons = { - receptor = - { - state = mesecon.state.on, - rules = delayer_get_output_rules - }, - effector = - { - rules = delayer_get_input_rules, - action_off = delayer_deactivate - } - } -}) -end - -minetest.register_craft({ - output = "mesecons_delayer:delayer_off_1", - recipe = { - {"mesecons_torch:mesecon_torch_on", "group:mesecon_conductor_craftable", "mesecons_torch:mesecon_torch_on"}, - {"default:cobble","default:cobble", "default:cobble"}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_detector/init.lua b/mods/ITEMS/mesecons/mesecons_detector/init.lua deleted file mode 100755 index 397543c..0000000 --- a/mods/ITEMS/mesecons/mesecons_detector/init.lua +++ /dev/null @@ -1,289 +0,0 @@ -local GET_COMMAND = "GET" - --- Object detector --- Detects players in a certain radius --- The radius can be specified in mesecons/settings.lua - -local function object_detector_make_formspec(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", "size[9,2.5]" .. - "field[0.3, 0;9,2;scanname;Name of player to scan for (empty for any):;${scanname}]".. - "field[0.3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]".. - "button_exit[7,0.75;2,3;;Save]") -end - -local function object_detector_on_receive_fields(pos, formname, fields, sender) - if not fields.scanname or not fields.digiline_channel then return end - - if minetest.is_protected(pos, sender:get_player_name()) then return end - - local meta = minetest.get_meta(pos) - meta:set_string("scanname", fields.scanname) - meta:set_string("digiline_channel", fields.digiline_channel) - object_detector_make_formspec(pos) -end - --- returns true if player was found, false if not -local function object_detector_scan(pos) - local objs = minetest.get_objects_inside_radius(pos, mesecon.setting("detector_radius", 6)) - - -- abort if no scan results were found - if next(objs) == nil then return false end - - local scanname = minetest.get_meta(pos):get_string("scanname") - local scan_for = {} - for _, str in pairs(string.split(scanname:gsub(" ", ""), ",")) do - scan_for[str] = true - end - - local every_player = scanname == "" - for _, obj in pairs(objs) do - -- "" is returned if it is not a player; "" ~= nil; so only handle objects with foundname ~= "" - local foundname = obj:get_player_name() - if foundname ~= "" then - if every_player or scan_for[foundname] then - return true - end - end - end - - return false -end - --- set player name when receiving a digiline signal on a specific channel -local object_detector_digiline = { - effector = { - action = function(pos, node, channel, msg) - local meta = minetest.get_meta(pos) - if channel == meta:get_string("digiline_channel") then - meta:set_string("scanname", msg) - object_detector_make_formspec(pos) - end - end, - } -} - -minetest.register_node("mesecons_detector:object_detector_off", { - tiles = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png"}, - paramtype = "light", - walkable = true, - groups = {cracky=3}, - description="Player Detector", - mesecons = {receptor = { - state = mesecon.state.off, - rules = mesecon.rules.pplate - }}, - on_construct = object_detector_make_formspec, - on_receive_fields = object_detector_on_receive_fields, - sounds = default.node_sound_stone_defaults(), - digiline = object_detector_digiline -}) - -minetest.register_node("mesecons_detector:object_detector_on", { - tiles = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png"}, - paramtype = "light", - walkable = true, - groups = {cracky=3,not_in_creative_inventory=1}, - drop = 'mesecons_detector:object_detector_off', - mesecons = {receptor = { - state = mesecon.state.on, - rules = mesecon.rules.pplate - }}, - on_construct = object_detector_make_formspec, - on_receive_fields = object_detector_on_receive_fields, - sounds = default.node_sound_stone_defaults(), - digiline = object_detector_digiline -}) - -minetest.register_craft({ - output = 'mesecons_detector:object_detector_off', - recipe = { - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "mesecons_luacontroller:luacontroller0000", "default:steel_ingot"}, - {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, - } -}) - -minetest.register_abm({ - nodenames = {"mesecons_detector:object_detector_off"}, - interval = 1, - chance = 1, - action = function(pos, node) - if not object_detector_scan(pos) then return end - - node.name = "mesecons_detector:object_detector_on" - minetest.swap_node(pos, node) - mesecon.receptor_on(pos, mesecon.rules.pplate) - end, -}) - -minetest.register_abm({ - nodenames = {"mesecons_detector:object_detector_on"}, - interval = 1, - chance = 1, - action = function(pos, node) - if object_detector_scan(pos) then return end - - node.name = "mesecons_detector:object_detector_off" - minetest.swap_node(pos, node) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end, -}) - --- Node detector --- Detects the node in front of it - -local function node_detector_make_formspec(pos) - local meta = minetest.get_meta(pos) - if meta:get_string("distance") == "" then meta:set_string("distance", "0") end - meta:set_string("formspec", "size[9,2.5]" .. - "field[0.3, 0;9,2;scanname;Name of node to scan for (empty for any):;${scanname}]".. - "field[0.3,1.5;2.5,2;distance;Distance (0-"..mesecon.setting("node_detector_distance_max", 10).."):;${distance}]".. - "field[3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]".. - "button_exit[7,0.75;2,3;;Save]") -end - -local function node_detector_on_receive_fields(pos, fieldname, fields, sender) - if not fields.scanname or not fields.digiline_channel then return end - - if minetest.is_protected(pos, sender:get_player_name()) then return end - - local meta = minetest.get_meta(pos) - meta:set_string("scanname", fields.scanname) - meta:set_string("distance", fields.distance or "0") - meta:set_string("digiline_channel", fields.digiline_channel) - node_detector_make_formspec(pos) -end - --- returns true if node was found, false if not -local function node_detector_scan(pos) - local node = minetest.get_node_or_nil(pos) - if not node then return end - - local meta = minetest.get_meta(pos) - - local distance = meta:get_int("distance") - local distance_max = mesecon.setting("node_detector_distance_max", 10) - if distance < 0 then distance = 0 end - if distance > distance_max then distance = distance_max end - - local frontname = minetest.get_node( - vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1)) - ).name - local scanname = meta:get_string("scanname") - - return (frontname == scanname) or - (frontname ~= "air" and frontname ~= "ignore" and scanname == "") -end - --- set player name when receiving a digiline signal on a specific channel -local node_detector_digiline = { - effector = { - action = function(pos, node, channel, msg) - local meta = minetest.get_meta(pos) - - local distance = meta:get_int("distance") - local distance_max = mesecon.setting("node_detector_distance_max", 10) - if distance < 0 then distance = 0 end - if distance > distance_max then distance = distance_max end - - if channel ~= meta:get_string("digiline_channel") then return end - - if msg == GET_COMMAND then - local nodename = minetest.get_node( - vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1)) - ).name - - digiline:receptor_send(pos, digiline.rules.default, channel, nodename) - else - meta:set_string("scanname", msg) - node_detector_make_formspec(pos) - end - end, - }, - receptor = {} -} - -local function after_place_node_detector(pos, placer) - local placer_pos = placer:getpos() - if not placer_pos then - return - end - - --correct for the player's height - if placer:is_player() then - placer_pos.y = placer_pos.y + 1.625 - end - - --correct for 6d facedir - local node = minetest.get_node(pos) - node.param2 = minetest.dir_to_facedir(vector.subtract(pos, placer_pos), true) - minetest.set_node(pos, node) -end - -minetest.register_node("mesecons_detector:node_detector_off", { - tiles = {"default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "jeija_node_detector_off.png"}, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - groups = {cracky=3}, - description="Node Detector", - mesecons = {receptor = { - state = mesecon.state.off - }}, - on_construct = node_detector_make_formspec, - on_receive_fields = node_detector_on_receive_fields, - sounds = default.node_sound_stone_defaults(), - digiline = node_detector_digiline -}) - -minetest.register_node("mesecons_detector:node_detector_on", { - tiles = {"default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "jeija_node_detector_on.png"}, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - groups = {cracky=3,not_in_creative_inventory=1}, - drop = 'mesecons_detector:node_detector_off', - mesecons = {receptor = { - state = mesecon.state.on - }}, - on_construct = node_detector_make_formspec, - on_receive_fields = node_detector_on_receive_fields, - sounds = default.node_sound_stone_defaults(), - digiline = node_detector_digiline -}) - -minetest.register_craft({ - output = 'mesecons_detector:node_detector_off', - recipe = { - {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, - {"default:steel_ingot", "mesecons_luacontroller:luacontroller0000", "default:steel_ingot"}, - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - } -}) - -minetest.register_abm({ - nodenames = {"mesecons_detector:node_detector_off"}, - interval = 1, - chance = 1, - action = function(pos, node) - if not node_detector_scan(pos) then return end - - node.name = "mesecons_detector:node_detector_on" - minetest.swap_node(pos, node) - mesecon.receptor_on(pos) - end, -}) - -minetest.register_abm({ - nodenames = {"mesecons_detector:node_detector_on"}, - interval = 1, - chance = 1, - action = function(pos, node) - if node_detector_scan(pos) then return end - - node.name = "mesecons_detector:node_detector_off" - minetest.swap_node(pos, node) - mesecon.receptor_off(pos) - end, -}) diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/corner.lua b/mods/ITEMS/mesecons/mesecons_extrawires/corner.lua deleted file mode 100755 index 6033893..0000000 --- a/mods/ITEMS/mesecons/mesecons_extrawires/corner.lua +++ /dev/null @@ -1,83 +0,0 @@ -local corner_nodebox = { - type = "fixed", - fixed = {{ -16/32-0.001, -17/32, -3/32, 0, -13/32, 3/32 }, - { -3/32, -17/32, -16/32+0.001, 3/32, -13/32, 3/32}} -} - -local corner_selectionbox = { - type = "fixed", - fixed = { -16/32-0.001, -18/32, -16/32, 5/32, -12/32, 5/32 }, -} - -local corner_get_rules = function (node) - local rules = - {{x = 1, y = 0, z = 0}, - {x = 0, y = 0, z = -1}} - - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - - return rules -end - -minetest.register_node("mesecons_extrawires:corner_on", { - drawtype = "nodebox", - tiles = { - "jeija_insulated_wire_curved_tb_on.png", - "jeija_insulated_wire_curved_tb_on.png^[transformR270", - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_ends_on.png", - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_ends_on.png" - }, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - sunlight_propagates = true, - selection_box = corner_selectionbox, - node_box = corner_nodebox, - groups = {dig_immediate = 3, not_in_creative_inventory = 1}, - drop = "mesecons_extrawires:corner_off", - mesecons = {conductor = - { - state = mesecon.state.on, - rules = corner_get_rules, - offstate = "mesecons_extrawires:corner_off" - }} -}) - -minetest.register_node("mesecons_extrawires:corner_off", { - drawtype = "nodebox", - description = "Insulated Mesecon Corner", - tiles = { - "jeija_insulated_wire_curved_tb_off.png", - "jeija_insulated_wire_curved_tb_off.png^[transformR270", - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_ends_off.png", - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_ends_off.png" - }, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - sunlight_propagates = true, - selection_box = corner_selectionbox, - node_box = corner_nodebox, - groups = {dig_immediate = 3}, - mesecons = {conductor = - { - state = mesecon.state.off, - rules = corner_get_rules, - onstate = "mesecons_extrawires:corner_on" - }} -}) - -minetest.register_craft({ - output = "mesecons_extrawires:corner_off 3", - recipe = { - {"", "", ""}, - {"mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off", ""}, - {"", "mesecons_insulated:insulated_off", ""}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/crossover.lua b/mods/ITEMS/mesecons/mesecons_extrawires/crossover.lua deleted file mode 100755 index 8f3b8c2..0000000 --- a/mods/ITEMS/mesecons/mesecons_extrawires/crossover.lua +++ /dev/null @@ -1,131 +0,0 @@ -local function crossover_get_rules(node) - return { - {--first wire - {x=-1,y=0,z=0}, - {x=1,y=0,z=0}, - }, - {--second wire - {x=0,y=0,z=-1}, - {x=0,y=0,z=1}, - }, - } -end - -local crossover_states = { - "mesecons_extrawires:crossover_off", - "mesecons_extrawires:crossover_01", - "mesecons_extrawires:crossover_10", - "mesecons_extrawires:crossover_on", -} - -minetest.register_node("mesecons_extrawires:crossover_off", { - description = "Insulated Mesecon Crossover", - drawtype = "mesh", - mesh = "mesecons_extrawires_crossover.b3d", - tiles = { - "jeija_insulated_wire_ends_off.png", - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_ends_off.png" - }, - paramtype = "light", - walkable = false, - stack_max = 99, - selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, - groups = {dig_immediate=3, mesecon=3}, - mesecons = { - conductor = { - states = crossover_states, - rules = crossover_get_rules(), - } - }, -}) - -minetest.register_node("mesecons_extrawires:crossover_01", { - description = "You hacker you!", - drop = "mesecons_extrawires:crossover_off", - drawtype = "mesh", - mesh = "mesecons_extrawires_crossover.b3d", - tiles = { - "jeija_insulated_wire_ends_on.png", - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_ends_off.png" - }, - paramtype = "light", - walkable = false, - stack_max = 99, - selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, - groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, - mesecons = { - conductor = { - states = crossover_states, - rules = crossover_get_rules(), - } - }, -}) - -minetest.register_node("mesecons_extrawires:crossover_10", { - description = "You hacker you!", - drop = "mesecons_extrawires:crossover_off", - drawtype = "mesh", - mesh = "mesecons_extrawires_crossover.b3d", - tiles = { - "jeija_insulated_wire_ends_off.png", - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_ends_on.png" - }, - paramtype = "light", - walkable = false, - stack_max = 99, - selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, - groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, - mesecons = { - conductor = { - states = crossover_states, - rules = crossover_get_rules(), - } - }, -}) - -minetest.register_node("mesecons_extrawires:crossover_on", { - description = "You hacker you!", - drop = "mesecons_extrawires:crossover_off", - drawtype = "mesh", - mesh = "mesecons_extrawires_crossover.b3d", - tiles = { - "jeija_insulated_wire_ends_on.png", - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_ends_on.png" - }, - paramtype = "light", - walkable = false, - stack_max = 99, - selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, - groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, - mesecons = { - conductor = { - states = crossover_states, - rules = crossover_get_rules(), - } - }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mesecons_extrawires:crossover_off", - recipe = { - "mesecons_insulated:insulated_off", - "mesecons_insulated:insulated_off", - }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mesecons_insulated:insulated_off 2", - recipe = { - "mesecons_extrawires:crossover_off", - }, -}) diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/depends.txt b/mods/ITEMS/mesecons/mesecons_extrawires/depends.txt deleted file mode 100755 index aca967d..0000000 --- a/mods/ITEMS/mesecons/mesecons_extrawires/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -mesecons diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/mesewire.lua b/mods/ITEMS/mesecons/mesecons_extrawires/mesewire.lua deleted file mode 100755 index 3640de8..0000000 --- a/mods/ITEMS/mesecons/mesecons_extrawires/mesewire.lua +++ /dev/null @@ -1,36 +0,0 @@ -local mesewire_rules = -{ - {x = 1, y = 0, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 0, y = 1, z = 0}, - {x = 0, y =-1, z = 0}, - {x = 0, y = 0, z = 1}, - {x = 0, y = 0, z =-1}, -} - -minetest.override_item("default:mese", { - mesecons = {conductor = { - state = mesecon.state.off, - onstate = "mesecons_extrawires:mese_powered", - rules = mesewire_rules - }} -}) - --- Copy node definition of powered mese from normal mese --- and brighten texture tiles to indicate mese is powered -local powered_def = mesecon.mergetable(minetest.registered_nodes["default:mese"], { - drop = "default:mese", - light_source = 5, - mesecons = {conductor = { - state = mesecon.state.on, - offstate = "default:mese", - rules = mesewire_rules - }}, - groups = {cracky = 1, not_in_creative_inventory = 1} -}) - -for i, v in pairs(powered_def.tiles) do - powered_def.tiles[i] = v .. "^[brighten" -end - -minetest.register_node("mesecons_extrawires:mese_powered", powered_def) diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/tjunction.lua b/mods/ITEMS/mesecons/mesecons_extrawires/tjunction.lua deleted file mode 100755 index 70f343b..0000000 --- a/mods/ITEMS/mesecons/mesecons_extrawires/tjunction.lua +++ /dev/null @@ -1,84 +0,0 @@ -local tjunction_nodebox = { - type = "fixed", - fixed = {{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 }, - { -3/32, -17/32, -16/32+0.001, 3/32, -13/32, -3/32},} -} - -local tjunction_selectionbox = { - type = "fixed", - fixed = { -16/32-0.001, -18/32, -16/32, 16/32+0.001, -12/32, 7/32 }, -} - -local tjunction_get_rules = function (node) - local rules = - {{x = 0, y = 0, z = 1}, - {x = 1, y = 0, z = 0}, - {x = 0, y = 0, z = -1}} - - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - - return rules -end - -minetest.register_node("mesecons_extrawires:tjunction_on", { - drawtype = "nodebox", - tiles = { - "jeija_insulated_wire_tjunction_tb_on.png", - "jeija_insulated_wire_tjunction_tb_on.png^[transformR180", - "jeija_insulated_wire_ends_on.png", - "jeija_insulated_wire_ends_on.png", - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_ends_on.png" - }, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - sunlight_propagates = true, - selection_box = tjunction_selectionbox, - node_box = tjunction_nodebox, - groups = {dig_immediate = 3, not_in_creative_inventory = 1}, - drop = "mesecons_extrawires:tjunction_off", - mesecons = {conductor = - { - state = mesecon.state.on, - rules = tjunction_get_rules, - offstate = "mesecons_extrawires:tjunction_off" - }} -}) - -minetest.register_node("mesecons_extrawires:tjunction_off", { - drawtype = "nodebox", - description = "Insulated Mesecon T-junction", - tiles = { - "jeija_insulated_wire_tjunction_tb_off.png", - "jeija_insulated_wire_tjunction_tb_off.png^[transformR180", - "jeija_insulated_wire_ends_off.png", - "jeija_insulated_wire_ends_off.png", - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_ends_off.png" - }, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - sunlight_propagates = true, - selection_box = tjunction_selectionbox, - node_box = tjunction_nodebox, - groups = {dig_immediate = 3}, - mesecons = {conductor = - { - state = mesecon.state.off, - rules = tjunction_get_rules, - onstate = "mesecons_extrawires:tjunction_on" - }} -}) - -minetest.register_craft({ - output = "mesecons_extrawires:tjunction_off 3", - recipe = { - {"", "", ""}, - {"mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off"}, - {"", "mesecons_insulated:insulated_off", ""}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/vertical.lua b/mods/ITEMS/mesecons/mesecons_extrawires/vertical.lua deleted file mode 100755 index 9fabee0..0000000 --- a/mods/ITEMS/mesecons/mesecons_extrawires/vertical.lua +++ /dev/null @@ -1,181 +0,0 @@ -local vertical_box = { - type = "fixed", - fixed = {-1/16, -8/16, -1/16, 1/16, 8/16, 1/16} -} - -local top_box = { - type = "fixed", - fixed = {{-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}} -} - -local bottom_box = { - type = "fixed", - fixed = { - {-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}, - {-1/16, -7/16, -1/16, 1/16, 8/16, 1/16}, - } -} - -local vertical_rules = { - {x=0, y=1, z=0}, - {x=0, y=-1, z=0} -} - -local top_rules = { - {x=1,y=0, z=0}, - {x=-1,y=0, z=0}, - {x=0,y=0, z=1}, - {x=0,y=0, z=-1}, - {x=0,y=-1, z=0} -} - -local bottom_rules = { - {x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=0, z=1}, - {x=0, y=0, z=-1}, - {x=0, y=1, z=0}, - {x=0, y=2, z=0} -- receive power from pressure plate / detector / ... 2 nodes above -} - -local vertical_updatepos = function (pos) - local node = minetest.get_node(pos) - if minetest.registered_nodes[node.name] - and minetest.registered_nodes[node.name].is_vertical_conductor then - local node_above = minetest.get_node(vector.add(pos, vertical_rules[1])) - local node_below = minetest.get_node(vector.add(pos, vertical_rules[2])) - - local above = minetest.registered_nodes[node_above.name] - and minetest.registered_nodes[node_above.name].is_vertical_conductor - local below = minetest.registered_nodes[node_below.name] - and minetest.registered_nodes[node_below.name].is_vertical_conductor - - mesecon.on_dignode(pos, node) - - -- Always place offstate conductor and let mesecon.on_placenode take care - local newname = "mesecons_extrawires:vertical_" - if above and below then -- above and below: vertical mesecon - newname = newname .. "off" - elseif above and not below then -- above only: bottom - newname = newname .. "bottom_off" - elseif not above and below then -- below only: top - newname = newname .. "top_off" - else -- no vertical wire above, no vertical wire below: use bottom - newname = newname .. "bottom_off" - end - - minetest.set_node(pos, {name = newname}) - mesecon.on_placenode(pos, {name = newname}) - end -end - -local vertical_update = function (pos, node) - vertical_updatepos(pos) -- this one - vertical_updatepos(vector.add(pos, vertical_rules[1])) -- above - vertical_updatepos(vector.add(pos, vertical_rules[2])) -- below -end - --- Vertical wire -mesecon.register_node("mesecons_extrawires:vertical", { - description = "Vertical Mesecon", - drawtype = "nodebox", - walkable = false, - paramtype = "light", - sunlight_propagates = true, - selection_box = vertical_box, - node_box = vertical_box, - is_vertical_conductor = true, - drop = "mesecons_extrawires:vertical_off", - after_place_node = vertical_update, - after_dig_node = vertical_update -},{ - tiles = {"mesecons_wire_off.png"}, - groups = {dig_immediate=3}, - mesecons = {conductor = { - state = mesecon.state.off, - onstate = "mesecons_extrawires:vertical_on", - rules = vertical_rules, - }} -},{ - tiles = {"mesecons_wire_on.png"}, - groups = {dig_immediate=3, not_in_creative_inventory=1}, - mesecons = {conductor = { - state = mesecon.state.on, - offstate = "mesecons_extrawires:vertical_off", - rules = vertical_rules, - }} -}) - --- Vertical wire top -mesecon.register_node("mesecons_extrawires:vertical_top", { - description = "Vertical mesecon", - drawtype = "nodebox", - walkable = false, - paramtype = "light", - sunlight_propagates = true, - groups = {dig_immediate=3, not_in_creative_inventory=1}, - selection_box = top_box, - node_box = top_box, - is_vertical_conductor = true, - drop = "mesecons_extrawires:vertical_off", - after_place_node = vertical_update, - after_dig_node = vertical_update -},{ - tiles = {"mesecons_wire_off.png"}, - mesecons = {conductor = { - state = mesecon.state.off, - onstate = "mesecons_extrawires:vertical_top_on", - rules = top_rules, - }} -},{ - tiles = {"mesecons_wire_on.png"}, - mesecons = {conductor = { - state = mesecon.state.on, - offstate = "mesecons_extrawires:vertical_top_off", - rules = top_rules, - }} -}) - --- Vertical wire bottom -mesecon.register_node("mesecons_extrawires:vertical_bottom", { - description = "Vertical mesecon", - drawtype = "nodebox", - walkable = false, - paramtype = "light", - sunlight_propagates = true, - groups = {dig_immediate = 3, not_in_creative_inventory = 1}, - selection_box = bottom_box, - node_box = bottom_box, - is_vertical_conductor = true, - drop = "mesecons_extrawires:vertical_off", - after_place_node = vertical_update, - after_dig_node = vertical_update -},{ - tiles = {"mesecons_wire_off.png"}, - mesecons = {conductor = { - state = mesecon.state.off, - onstate = "mesecons_extrawires:vertical_bottom_on", - rules = bottom_rules, - }} -},{ - tiles = {"mesecons_wire_on.png"}, - mesecons = {conductor = { - state = mesecon.state.on, - offstate = "mesecons_extrawires:vertical_bottom_off", - rules = bottom_rules, - }} -}) - -minetest.register_craft({ - output = "mesecons_extrawires:vertical_off 3", - recipe = { - {"mesecons:wire_00000000_off"}, - {"mesecons:wire_00000000_off"}, - {"mesecons:wire_00000000_off"} - } -}) - -minetest.register_craft({ - output = "mesecons:wire_00000000_off", - recipe = {{"mesecons_extrawires:vertical_off"}} -}) diff --git a/mods/ITEMS/mesecons/mesecons_fpga/init.lua b/mods/ITEMS/mesecons/mesecons_fpga/init.lua deleted file mode 100755 index 6c462e6..0000000 --- a/mods/ITEMS/mesecons/mesecons_fpga/init.lua +++ /dev/null @@ -1,375 +0,0 @@ -local plg = {} -plg.rules = {} - -local lcore = dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/logic.lua") -dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/tool.lua")(plg) - - -plg.register_nodes = function(template) - -- each loop is for one of the 4 IO ports - for a = 0, 1 do - for b = 0, 1 do - for c = 0, 1 do - for d = 0, 1 do - local ndef = table.copy(template) - local nodename = "mesecons_fpga:fpga" - .. tostring(d) .. tostring(c) .. tostring(b) .. tostring(a) - - -- build top texture string - local texture = "jeija_fpga_top.png" - if a == 1 then texture = texture .. "^jeija_microcontroller_LED_A.png" end - if b == 1 then texture = texture .. "^jeija_microcontroller_LED_B.png" end - if c == 1 then texture = texture .. "^jeija_microcontroller_LED_C.png" end - if d == 1 then texture = texture .. "^jeija_microcontroller_LED_D.png" end - ndef.tiles[1] = texture - ndef.inventory_image = texture - - if (a + b + c + d) > 0 then - ndef.groups["not_in_creative_inventory"] = 1 - end - - -- interaction with mesecons (input / output) - local rules_out = {} - if a == 1 then table.insert(rules_out, {x = -1, y = 0, z = 0}) end - if b == 1 then table.insert(rules_out, {x = 0, y = 0, z = 1}) end - if c == 1 then table.insert(rules_out, {x = 1, y = 0, z = 0}) end - if d == 1 then table.insert(rules_out, {x = 0, y = 0, z = -1}) end - plg.rules[nodename] = rules_out - - local rules_in = {} - if a == 0 then table.insert(rules_in, {x = -1, y = 0, z = 0}) end - if b == 0 then table.insert(rules_in, {x = 0, y = 0, z = 1}) end - if c == 0 then table.insert(rules_in, {x = 1, y = 0, z = 0}) end - if d == 0 then table.insert(rules_in, {x = 0, y = 0, z = -1}) end - ndef.mesecons.effector.rules = rules_in - - if (a + b + c + d) > 0 then - ndef.mesecons.receptor = { - state = mesecon.state.on, - rules = rules_out, - } - end - - minetest.register_node(nodename, ndef) - end - end - end - end -end - -plg.register_nodes({ - description = "FPGA", - drawtype = "nodebox", - tiles = { - "", -- replaced later - "jeija_microcontroller_bottom.png", - "jeija_fpga_sides.png", - "jeija_fpga_sides.png", - "jeija_fpga_sides.png", - "jeija_fpga_sides.png" - }, - inventory_image = "", -- replaced later - sunlight_propagates = true, - paramtype = "light", - walkable = true, - groups = {dig_immediate = 2, mesecon = 3}, - drop = "mesecons_fpga:fpga0000", - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = { - { -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }, -- bottom slab - { -5/16, -7/16, -5/16, 5/16, -6/16, 5/16 }, -- circuit board - { -3/16, -6/16, -3/16, 3/16, -5/16, 3/16 }, -- IC - } - }, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local is = { {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {} } - - meta:set_string("instr", lcore.serialize(is)) - meta:set_int("valid", 0) - meta:set_string("formspec", plg.to_formspec_string(is)) - meta:set_string("infotext", "FPGA") - end, - on_receive_fields = function(pos, formname, fields, sender) - if fields.program == nil then return end -- we only care when the user clicks "Program" - local meta = minetest.get_meta(pos) - local is = plg.from_formspec_fields(fields) - - meta:set_string("instr", lcore.serialize(is)) - plg.update_formspec(pos, is) - end, - sounds = default.node_sound_stone_defaults(), - mesecons = { - effector = { - rules = {}, -- replaced later - action_change = function(pos, node, rule, newstate) - plg.ports_changed(pos, rule, newstate) - plg.update(pos) - end - } - }, - after_dig_node = function(pos, node) - mesecon.receptor_off(pos, plg.rules[node.name]) - end, -}) - - -plg.to_formspec_string = function(is) - local function dropdown_op(x, y, name, val) - local s = "dropdown[" .. tostring(x) .. "," .. tostring(y) .. ";" - .. "0.75,0.5;" .. name .. ";" -- the height seems to be ignored? - s = s .. " ,A,B,C,D,0,1,2,3,4,5,6,7,8,9;" - if val == nil then - s = s .. "0" -- actually selects no field at all - elseif val.type == "io" then - local mapping = { - ["A"] = 1, - ["B"] = 2, - ["C"] = 3, - ["D"] = 4, - } - s = s .. tostring(1 + mapping[val.port]) - else -- "reg" - s = s .. tostring(6 + val.n) - end - return s .. "]" - end - local function dropdown_action(x, y, name, val) - local s = "dropdown[" .. tostring(x) .. "," .. tostring(y) .. ";" - .. "1.125,0.5;" .. name .. ";" -- the height seems to be ignored? - s = s .. " , AND, OR, NOT, XOR,NAND, =,XNOR;" - if val == nil then - return s .. "0]" -- actually selects no field at all - end - local mapping = { - ["and"] = 1, - ["or"] = 2, - ["not"] = 3, - ["xor"] = 4, - ["nand"] = 5, - ["buf"] = 6, - ["xnor"] = 7, - } - return s .. tostring(1 + mapping[val]) .. "]" - end - local s = "size[9,9]".. - "label[3.4,-0.15;FPGA gate configuration]".. - "button_exit[7,7.5;2,2.5;program;Program]".. - "box[4.2,0.5;0.03,7;#ffffff]".. - "label[0.25,0.25;op. 1]".. - "label[1.0,0.25;gate type]".. - "label[2.125,0.25;op. 2]".. - "label[3.15,0.25;dest]".. - "label[4.5,0.25;op. 1]".. - "label[5.25,0.25;gate type]".. - "label[6.375,0.25;op. 2]".. - "label[7.4,0.25;dest]" - local x = 1 - 0.75 - local y = 1 - 0.25 - for i = 1, 14 do - local cur = is[i] - s = s .. dropdown_op (x , y, tostring(i).."op1", cur.op1) - s = s .. dropdown_action(x+0.75 , y, tostring(i).."act", cur.action) - s = s .. dropdown_op (x+1.875, y, tostring(i).."op2", cur.op2) - s = s .. "label[" .. tostring(x+2.625) .. "," .. tostring(y+0.1) .. "; ->]" - s = s .. dropdown_op (x+2.9 , y, tostring(i).."dst", cur.dst) - y = y + 1 - - if i == 7 then - x = 4.5 - y = 1 - 0.25 - end - end - return s -end - -plg.from_formspec_fields = function(fields) - local function read_op(s) - if s == nil or s == " " then - return nil - elseif s == "A" or s == "B" or s == "C" or s == "D" then - return {type = "io", port = s} - else - return {type = "reg", n = tonumber(s)} - end - end - local function read_action(s) - if s == nil or s == " " then - return nil - end - local mapping = { - ["AND"] = "and", - ["OR"] = "or", - ["NOT"] = "not", - ["XOR"] = "xor", - ["NAND"] = "nand", - ["="] = "buf", - ["XNOR"] = "xnor", - } - s = s:gsub("^%s*", "") -- remove leading spaces - return mapping[s] - end - local is = {} - for i = 1, 14 do - local cur = {} - cur.op1 = read_op(fields[tonumber(i) .. "op1"]) - cur.action = read_action(fields[tonumber(i) .. "act"]) - cur.op2 = read_op(fields[tonumber(i) .. "op2"]) - cur.dst = read_op(fields[tonumber(i) .. "dst"]) - is[#is + 1] = cur - end - return is -end - -plg.update_formspec = function(pos, is) - if type(is) == "string" then -- serialized string - is = lcore.deserialize(is) - end - local meta = minetest.get_meta(pos) - local form = plg.to_formspec_string(is) - - local err = lcore.validate(is) - if err == nil then - meta:set_int("valid", 1) - meta:set_string("infotext", "FPGA (functional)") - else - meta:set_int("valid", 0) - meta:set_string("infotext", "FPGA") - local fmsg = minetest.colorize("#ff0000", minetest.formspec_escape(err.msg)) - form = form .. plg.red_box_around(err.i) .. - "label[0.25,8.25;The gate configuration is erroneous in the marked area:]".. - "label[0.25,8.5;" .. fmsg .. "]" - end - - meta:set_string("formspec", form) - - -- reset ports and run programmed logic - plg.setports(pos, false, false, false, false) - plg.update(pos) -end - -plg.red_box_around = function(i) - local x, y - if i > 7 then - x = 4.5 - y = 0.75 + (i - 8) - else - x = 0.25 - y = 0.75 + (i - 1) - end - return string.format("box[%f,%f;3.8,0.8;#ff0000]", x-0.1, y-0.05) -end - - -plg.update = function(pos) - local meta = minetest.get_meta(pos) - if meta:get_int("valid") ~= 1 then - return - end - - local is = lcore.deserialize(meta:get_string("instr")) - local A, B, C, D = plg.getports(pos) - A, B, C, D = lcore.interpret(is, A, B, C, D) - plg.setports(pos, A, B, C, D) -end - -plg.ports_changed = function(pos, rule, newstate) - if rule == nil then return end - local meta = minetest.get_meta(pos) - local states - - local s = meta:get_string("portstates") - if s == nil then - states = {false, false, false, false} - else - states = { - s:sub(1, 1) == "1", - s:sub(2, 2) == "1", - s:sub(3, 3) == "1", - s:sub(4, 4) == "1", - } - end - - -- trick to transform rules (see register_node) into port number - local portno = ({4, 1, nil, 3, 2})[3 + rule.x + 2*rule.z] - states[portno] = (newstate == "on") - - meta:set_string("portstates", - (states[1] and "1" or "0") .. (states[2] and "1" or "0") .. - (states[3] and "1" or "0") .. (states[4] and "1" or "0") - ) -end - -plg.getports = function(pos) -- gets merged states of INPUT & OUTPUT - local sin, sout - - local s = minetest.get_meta(pos):get_string("portstates") - if s == nil then - sin = {false, false, false, false} - else - sin = { - s:sub(1, 1) == "1", - s:sub(2, 2) == "1", - s:sub(3, 3) == "1", - s:sub(4, 4) == "1", - } - end - - local name = minetest.get_node(pos).name - assert(name:find("mesecons_fpga:fpga") == 1) - local off = #"mesecons_fpga:fpga" - sout = { - name:sub(off+4, off+4) == "1", - name:sub(off+3, off+3) == "1", - name:sub(off+2, off+2) == "1", - name:sub(off+1, off+1) == "1", - } - - return unpack({ - sin[1] or sout[1], - sin[2] or sout[2], - sin[3] or sout[3], - sin[4] or sout[4], - }) -end - -plg.setports = function(pos, A, B, C, D) -- sets states of OUTPUT - local base = "mesecons_fpga:fpga" - - local name = base - .. (D and "1" or "0") .. (C and "1" or "0") - .. (B and "1" or "0") .. (A and "1" or "0") - minetest.swap_node(pos, {name = name, param2 = minetest.get_node(pos).param2}) - - if A ~= nil then - local ru = plg.rules[base .. "0001"] - if A then mesecon.receptor_on(pos, ru) else mesecon.receptor_off(pos, ru) end - end - if B ~= nil then - local ru = plg.rules[base .. "0010"] - if B then mesecon.receptor_on(pos, ru) else mesecon.receptor_off(pos, ru) end - end - if C ~= nil then - local ru = plg.rules[base .. "0100"] - if C then mesecon.receptor_on(pos, ru) else mesecon.receptor_off(pos, ru) end - end - if D ~= nil then - local ru = plg.rules[base .. "1000"] - if D then mesecon.receptor_on(pos, ru) else mesecon.receptor_off(pos, ru) end - end -end - - -minetest.register_craft({ - output = "mesecons_fpga:fpga0000 2", - recipe = { - {'group:mesecon_conductor_craftable', 'group:mesecon_conductor_craftable'}, - {'mesecons_materials:silicon', 'mesecons_materials:silicon'}, - {'group:mesecon_conductor_craftable', 'group:mesecon_conductor_craftable'}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_gates/init.lua b/mods/ITEMS/mesecons/mesecons_gates/init.lua deleted file mode 100755 index 3807d6f..0000000 --- a/mods/ITEMS/mesecons/mesecons_gates/init.lua +++ /dev/null @@ -1,142 +0,0 @@ -local nodebox = { - type = "fixed", - fixed = {{-8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }}, -} - -local function gate_rotate_rules(node, rules) - for rotations = 0, node.param2 - 1 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - -local function gate_get_output_rules(node) - return gate_rotate_rules(node, {{x=1, y=0, z=0}}) -end - -local function gate_get_input_rules_oneinput(node) - return gate_rotate_rules(node, {{x=-1, y=0, z=0}}) -end - -local function gate_get_input_rules_twoinputs(node) - return gate_rotate_rules(node, {{x=0, y=0, z=1, name="input1"}, - {x=0, y=0, z=-1, name="input2"}}) -end - -local function set_gate(pos, node, state) - local gate = minetest.registered_nodes[node.name] - - if mesecon.do_overheat(pos) then - minetest.remove_node(pos) - mesecon.receptor_off(pos, gate_get_output_rules(node)) - minetest.add_item(pos, gate.drop) - elseif state then - minetest.swap_node(pos, {name = gate.onstate, param2=node.param2}) - mesecon.receptor_on(pos, gate_get_output_rules(node)) - else - minetest.swap_node(pos, {name = gate.offstate, param2=node.param2}) - mesecon.receptor_off(pos, gate_get_output_rules(node)) - end -end - -local function update_gate(pos, node, link, newstate) - local gate = minetest.registered_nodes[node.name] - - if gate.inputnumber == 1 then - set_gate(pos, node, gate.assess(newstate == "on")) - elseif gate.inputnumber == 2 then - local meta = minetest.get_meta(pos) - meta:set_int(link.name, newstate == "on" and 1 or 0) - - local val1 = meta:get_int("input1") == 1 - local val2 = meta:get_int("input2") == 1 - set_gate(pos, node, gate.assess(val1, val2)) - end -end - -local function register_gate(name, inputnumber, assess, recipe, description) - local get_inputrules = inputnumber == 2 and gate_get_input_rules_twoinputs or - gate_get_input_rules_oneinput - description = "Logic Gate: "..name - - local basename = "mesecons_gates:"..name - mesecon.register_node(basename, { - description = description, - inventory_image = "jeija_gate_off.png^jeija_gate_"..name..".png", - paramtype = "light", - paramtype2 = "facedir", - drawtype = "nodebox", - drop = basename.."_off", - selection_box = nodebox, - node_box = nodebox, - walkable = true, - sounds = default.node_sound_stone_defaults(), - assess = assess, - onstate = basename.."_on", - offstate = basename.."_off", - inputnumber = inputnumber, - after_dig_node = mesecon.do_cooldown, - },{ - tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^".. - "jeija_gate_"..name..".png"}, - groups = {dig_immediate = 2, overheat = 1}, - mesecons = { receptor = { - state = "off", - rules = gate_get_output_rules - }, effector = { - rules = get_inputrules, - action_change = update_gate - }} - },{ - tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_on.png^".. - "jeija_gate_"..name..".png"}, - groups = {dig_immediate = 2, not_in_creative_inventory = 1, overheat = 1}, - mesecons = { receptor = { - state = "on", - rules = gate_get_output_rules - }, effector = { - rules = get_inputrules, - action_change = update_gate - }} - }) - - minetest.register_craft({output = basename.."_off", recipe = recipe}) -end - -register_gate("diode", 1, function (input) return input end, - {{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons_torch:mesecon_torch_on"}}, - "Diode") - -register_gate("not", 1, function (input) return not input end, - {{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons:mesecon"}}, - "NOT Gate") - -register_gate("and", 2, function (val1, val2) return val1 and val2 end, - {{"mesecons:mesecon", "", ""}, - {"", "mesecons_materials:silicon", "mesecons:mesecon"}, - {"mesecons:mesecon", "", ""}}, - "AND Gate") - -register_gate("nand", 2, function (val1, val2) return not (val1 and val2) end, - {{"mesecons:mesecon", "", ""}, - {"", "mesecons_materials:silicon", "mesecons_torch:mesecon_torch_on"}, - {"mesecons:mesecon", "", ""}}, - "NAND Gate") - -register_gate("xor", 2, function (val1, val2) return (val1 or val2) and not (val1 and val2) end, - {{"mesecons:mesecon", "", ""}, - {"", "mesecons_materials:silicon", "mesecons_materials:silicon"}, - {"mesecons:mesecon", "", ""}}, - "XOR Gate") - -register_gate("nor", 2, function (val1, val2) return not (val1 or val2) end, - {{"mesecons:mesecon", "", ""}, - {"", "mesecons:mesecon", "mesecons_torch:mesecon_torch_on"}, - {"mesecons:mesecon", "", ""}}, - "NOR Gate") - -register_gate("or", 2, function (val1, val2) return (val1 or val2) end, - {{"mesecons:mesecon", "", ""}, - {"", "mesecons:mesecon", "mesecons:mesecon"}, - {"mesecons:mesecon", "", ""}}, - "OR Gate") diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/init.lua b/mods/ITEMS/mesecons/mesecons_hydroturbine/init.lua deleted file mode 100755 index 409da75..0000000 --- a/mods/ITEMS/mesecons/mesecons_hydroturbine/init.lua +++ /dev/null @@ -1,101 +0,0 @@ --- HYDRO_TURBINE --- Water turbine: --- Active if flowing >water< above it --- (does not work with other liquids) - -minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", { - drawtype = "mesh", - mesh = "jeija_hydro_turbine_off.obj", - tiles = { - "jeija_hydro_turbine_sides_off.png", - "jeija_hydro_turbine_top_bottom.png", - "jeija_hydro_turbine_turbine_top_bottom_off.png", - "jeija_hydro_turbine_turbine_misc_off.png" - }, - inventory_image = "jeija_hydro_turbine_inv.png", - wield_scale = {x=0.75, y=0.75, z=0.75}, - groups = {dig_immediate=2}, - description="Water Turbine", - paramtype = "light", - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }, - }, - sounds = default.node_sound_stone_defaults(), - mesecons = {receptor = { - state = mesecon.state.off - }} -}) - -minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", { - drawtype = "mesh", - mesh = "jeija_hydro_turbine_on.obj", - wield_scale = {x=0.75, y=0.75, z=0.75}, - tiles = { - "jeija_hydro_turbine_sides_on.png", - "jeija_hydro_turbine_top_bottom.png", - { name = "jeija_hydro_turbine_turbine_top_bottom_on.png", - animation = {type = "vertical_frames", aspect_w = 128, aspect_h = 16, length = 1.6} }, - { name = "jeija_hydro_turbine_turbine_misc_on.png", - animation = {type = "vertical_frames", aspect_w = 256, aspect_h = 32, length = 0.4} } - }, - inventory_image = "jeija_hydro_turbine_inv.png", - drop = "mesecons_hydroturbine:hydro_turbine_off 1", - groups = {dig_immediate=2,not_in_creative_inventory=1}, - description="Water Turbine", - paramtype = "light", - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }, - }, - sounds = default.node_sound_stone_defaults(), - mesecons = {receptor = { - state = mesecon.state.on - }} -}) - - -local function is_flowing_water(pos) - local name = minetest.get_node(pos).name - local is_water = minetest.get_item_group(name, "water") > 0 - local is_flowing = minetest.registered_items[name].liquidtype == "flowing" - return (is_water and is_flowing) -end - -minetest.register_abm({ -nodenames = {"mesecons_hydroturbine:hydro_turbine_off"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local waterpos={x=pos.x, y=pos.y+1, z=pos.z} - if is_flowing_water(waterpos) then - minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_on"}) - nodeupdate(pos) - mesecon.receptor_on(pos) - end - end, -}) - -minetest.register_abm({ -nodenames = {"mesecons_hydroturbine:hydro_turbine_on"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local waterpos={x=pos.x, y=pos.y+1, z=pos.z} - if not is_flowing_water(waterpos) then - minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_off"}) - nodeupdate(pos) - mesecon.receptor_off(pos) - end - end, -}) - -minetest.register_craft({ - output = "mesecons_hydroturbine:hydro_turbine_off 2", - recipe = { - {"","default:stick", ""}, - {"default:stick", "default:steel_ingot", "default:stick"}, - {"","default:stick", ""}, - } -}) - diff --git a/mods/ITEMS/mesecons/mesecons_insulated/init.lua b/mods/ITEMS/mesecons/mesecons_insulated/init.lua deleted file mode 100755 index 891b5d3..0000000 --- a/mods/ITEMS/mesecons/mesecons_insulated/init.lua +++ /dev/null @@ -1,80 +0,0 @@ -local function insulated_wire_get_rules(node) - local rules = {{x = 1, y = 0, z = 0}, - {x =-1, y = 0, z = 0}} - if node.param2 == 1 or node.param2 == 3 then - return mesecon.rotate_rules_right(rules) - end - return rules -end - -minetest.register_node("mesecons_insulated:insulated_on", { - drawtype = "nodebox", - description = "Straight Insulated Mesecon", - tiles = { - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_ends_on.png", - "jeija_insulated_wire_ends_on.png", - "jeija_insulated_wire_sides_on.png", - "jeija_insulated_wire_sides_on.png" - }, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = { -16/32-0.001, -18/32, -7/32, 16/32+0.001, -12/32, 7/32 } - }, - node_box = { - type = "fixed", - fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 } - }, - groups = {dig_immediate = 3, not_in_creative_inventory = 1}, - drop = "mesecons_insulated:insulated_off", - mesecons = {conductor = { - state = mesecon.state.on, - offstate = "mesecons_insulated:insulated_off", - rules = insulated_wire_get_rules - }} -}) - -minetest.register_node("mesecons_insulated:insulated_off", { - drawtype = "nodebox", - description = "Straight Insulated Mesecon", - tiles = { - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_ends_off.png", - "jeija_insulated_wire_ends_off.png", - "jeija_insulated_wire_sides_off.png", - "jeija_insulated_wire_sides_off.png" - }, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = { -16/32-0.001, -18/32, -7/32, 16/32+0.001, -12/32, 7/32 } - }, - node_box = { - type = "fixed", - fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 } - }, - groups = {dig_immediate = 3}, - mesecons = {conductor = { - state = mesecon.state.off, - onstate = "mesecons_insulated:insulated_on", - rules = insulated_wire_get_rules - }} -}) - -minetest.register_craft({ - output = "mesecons_insulated:insulated_off 3", - recipe = { - {"mesecons_materials:fiber", "mesecons_materials:fiber", "mesecons_materials:fiber"}, - {"mesecons:wire_00000000_off", "mesecons:wire_00000000_off", "mesecons:wire_00000000_off"}, - {"mesecons_materials:fiber", "mesecons_materials:fiber", "mesecons_materials:fiber"}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_lamp/init.lua b/mods/ITEMS/mesecons/mesecons_lamp/init.lua deleted file mode 100755 index 6f38b27..0000000 --- a/mods/ITEMS/mesecons/mesecons_lamp/init.lua +++ /dev/null @@ -1,61 +0,0 @@ --- MESELAMPS --- A lamp is "is an electrical device used to create artificial light" (wikipedia) --- guess what? - -local mesecon_lamp_box = { - type = "wallmounted", - wall_top = {-0.3125,0.375,-0.3125,0.3125,0.5,0.3125}, - wall_bottom = {-0.3125,-0.5,-0.3125,0.3125,-0.375,0.3125}, - wall_side = {-0.375,-0.3125,-0.3125,-0.5,0.3125,0.3125}, -} - -minetest.register_node("mesecons_lamp:lamp_on", { - drawtype = "nodebox", - tiles = {"jeija_meselamp_on.png"}, - paramtype = "light", - paramtype2 = "wallmounted", - legacy_wallmounted = true, - sunlight_propagates = true, - walkable = true, - light_source = default.LIGHT_MAX, - node_box = mesecon_lamp_box, - selection_box = mesecon_lamp_box, - groups = {dig_immediate=3,not_in_creative_inventory=1, mesecon_effector_on = 1}, - drop="mesecons_lamp:lamp_off 1", - sounds = default.node_sound_glass_defaults(), - mesecons = {effector = { - action_off = function (pos, node) - minetest.swap_node(pos, {name = "mesecons_lamp:lamp_off", param2 = node.param2}) - end - }} -}) - -minetest.register_node("mesecons_lamp:lamp_off", { - drawtype = "nodebox", - tiles = {"jeija_meselamp_off.png"}, - inventory_image = "jeija_meselamp.png", - wield_image = "jeija_meselamp.png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = true, - node_box = mesecon_lamp_box, - selection_box = mesecon_lamp_box, - groups = {dig_immediate=3, mesecon_receptor_off = 1, mesecon_effector_off = 1}, - description="Mesecon Lamp", - sounds = default.node_sound_glass_defaults(), - mesecons = {effector = { - action_on = function (pos, node) - minetest.swap_node(pos, {name = "mesecons_lamp:lamp_on", param2 = node.param2}) - end - }} -}) - -minetest.register_craft({ - output = "mesecons_lamp:lamp_off 1", - recipe = { - {"", "default:glass", ""}, - {"group:mesecon_conductor_craftable", "default:steel_ingot", "group:mesecon_conductor_craftable"}, - {"", "default:glass", ""}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/init.lua b/mods/ITEMS/mesecons/mesecons_lightstone/init.lua deleted file mode 100755 index 1b8e222..0000000 --- a/mods/ITEMS/mesecons/mesecons_lightstone/init.lua +++ /dev/null @@ -1,69 +0,0 @@ -local lightstone_rules = { - {x=0, y=0, z=-1}, - {x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=0, z=1}, - {x=1, y=1, z=0}, - {x=1, y=-1, z=0}, - {x=-1, y=1, z=0}, - {x=-1, y=-1, z=0}, - {x=0, y=1, z=1}, - {x=0, y=-1, z=1}, - {x=0, y=1, z=-1}, - {x=0, y=-1, z=-1}, - {x=0, y=-1, z=0}, -} - -function mesecon.lightstone_add(name, base_item, texture_off, texture_on, desc) - if not desc then - desc = name .. " Lightstone" - end - minetest.register_node("mesecons_lightstone:lightstone_" .. name .. "_off", { - tiles = {texture_off}, - groups = {cracky=2, mesecon_effector_off = 1, mesecon = 2}, - description = desc, - sounds = default.node_sound_stone_defaults(), - mesecons = {effector = { - rules = lightstone_rules, - action_on = function (pos, node) - minetest.swap_node(pos, {name = "mesecons_lightstone:lightstone_" .. name .. "_on", param2 = node.param2}) - end, - }} - }) - minetest.register_node("mesecons_lightstone:lightstone_" .. name .. "_on", { - tiles = {texture_on}, - groups = {cracky=2,not_in_creative_inventory=1, mesecon = 2}, - drop = "mesecons_lightstone:lightstone_" .. name .. "_off", - light_source = default.LIGHT_MAX-2, - sounds = default.node_sound_stone_defaults(), - mesecons = {effector = { - rules = lightstone_rules, - action_off = function (pos, node) - minetest.swap_node(pos, {name = "mesecons_lightstone:lightstone_" .. name .. "_off", param2 = node.param2}) - end, - }} - }) - - minetest.register_craft({ - output = "mesecons_lightstone:lightstone_" .. name .. "_off", - recipe = { - {"",base_item,""}, - {base_item,"default:torch",base_item}, - {"","group:mesecon_conductor_craftable",""} - } - }) -end - - -mesecon.lightstone_add("red", "dye:red", "jeija_lightstone_red_off.png", "jeija_lightstone_red_on.png", "Red Lightstone") -mesecon.lightstone_add("green", "dye:green", "jeija_lightstone_green_off.png", "jeija_lightstone_green_on.png", "Green Lightstone") -mesecon.lightstone_add("blue", "dye:blue", "jeija_lightstone_blue_off.png", "jeija_lightstone_blue_on.png", "Blue Lightstone") -mesecon.lightstone_add("gray", "dye:grey", "jeija_lightstone_gray_off.png", "jeija_lightstone_gray_on.png", "Grey Lightstone") -mesecon.lightstone_add("darkgray", "dye:dark_grey", "jeija_lightstone_darkgray_off.png", "jeija_lightstone_darkgray_on.png", "Dark Grey Lightstone") -mesecon.lightstone_add("yellow", "dye:yellow", "jeija_lightstone_yellow_off.png", "jeija_lightstone_yellow_on.png", "Yellow Lightstone") -mesecon.lightstone_add("orange", "dye:orange", "jeija_lightstone_orange_off.png", "jeija_lightstone_orange_on.png", "Orange Lightstone") -mesecon.lightstone_add("white", "dye:white", "jeija_lightstone_white_off.png", "jeija_lightstone_white_on.png", "White Lightstone") -mesecon.lightstone_add("pink", "dye:pink", "jeija_lightstone_pink_off.png", "jeija_lightstone_pink_on.png", "Pink Lightstone") -mesecon.lightstone_add("magenta", "dye:magenta", "jeija_lightstone_magenta_off.png", "jeija_lightstone_magenta_on.png", "Magenta Lightstone") -mesecon.lightstone_add("cyan", "dye:cyan", "jeija_lightstone_cyan_off.png", "jeija_lightstone_cyan_on.png", "Cyan Lightstone") -mesecon.lightstone_add("violet", "dye:violet", "jeija_lightstone_violet_off.png", "jeija_lightstone_violet_on.png", "Violet Lightstone") diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/init.lua b/mods/ITEMS/mesecons/mesecons_luacontroller/init.lua deleted file mode 100755 index 25273a1..0000000 --- a/mods/ITEMS/mesecons/mesecons_luacontroller/init.lua +++ /dev/null @@ -1,686 +0,0 @@ --- ______ --- | --- | --- | __ ___ _ __ _ _ --- | | | | | |\ | | |_| | | | | |_ |_| --- |___| |______ |__| | \| | | \ |__| |_ |_ |_ |\ --- | --- | --- - --- Reference --- ports = get_real_port_states(pos): gets if inputs are powered from outside --- newport = merge_port_states(state1, state2): just does result = state1 or state2 for every port --- set_port(pos, rule, state): activates/deactivates the mesecons according to the port states --- set_port_states(pos, ports): Applies new port states to a Luacontroller at pos --- run(pos): runs the code in the controller at pos --- reset_meta(pos, code, errmsg): performs a software-reset, installs new code and prints error messages --- resetn(pos): performs a hardware reset, turns off all ports --- --- The Sandbox --- The whole code of the controller runs in a sandbox, --- a very restricted environment. --- Actually the only way to damage the server is to --- use too much memory from the sandbox. --- You can add more functions to the environment --- (see where local env is defined) --- Something nice to play is is appending minetest.env to it. - -local BASENAME = "mesecons_luacontroller:luacontroller" - -local rules = { - a = {x = -1, y = 0, z = 0, name="A"}, - b = {x = 0, y = 0, z = 1, name="B"}, - c = {x = 1, y = 0, z = 0, name="C"}, - d = {x = 0, y = 0, z = -1, name="D"}, -} - - ------------------- --- Action stuff -- ------------------- --- These helpers are required to set the port states of the luacontroller - -local function update_real_port_states(pos, rule_name, new_state) - local meta = minetest.get_meta(pos) - if rule_name == nil then - meta:set_int("real_portstates", 1) - return - end - local n = meta:get_int("real_portstates") - 1 - local L = {} - for i = 1, 4 do - L[i] = n % 2 - n = math.floor(n / 2) - end - -- (0,-1) (-1,0) (1,0) (0,1) - local pos_to_side = { 4, 1, nil, 3, 2 } - if rule_name.x == nil then - for _, rname in ipairs(rule_name) do - local port = pos_to_side[rname.x + (2 * rname.z) + 3] - L[port] = (newstate == "on") and 1 or 0 - end - else - local port = pos_to_side[rule_name.x + (2 * rule_name.z) + 3] - L[port] = (new_state == "on") and 1 or 0 - end - meta:set_int("real_portstates", - 1 + - 1 * L[1] + - 2 * L[2] + - 4 * L[3] + - 8 * L[4]) -end - - -local port_names = {"a", "b", "c", "d"} - -local function get_real_port_states(pos) - -- Determine if ports are powered (by itself or from outside) - local meta = minetest.get_meta(pos) - local L = {} - local n = meta:get_int("real_portstates") - 1 - for _, name in ipairs(port_names) do - L[name] = ((n % 2) == 1) - n = math.floor(n / 2) - end - return L -end - - -local function merge_port_states(ports, vports) - return { - a = ports.a or vports.a, - b = ports.b or vports.b, - c = ports.c or vports.c, - d = ports.d or vports.d, - } -end - -local function generate_name(ports) - local d = ports.d and 1 or 0 - local c = ports.c and 1 or 0 - local b = ports.b and 1 or 0 - local a = ports.a and 1 or 0 - return BASENAME..d..c..b..a -end - - -local function set_port(pos, rule, state) - if state then - mesecon.receptor_on(pos, {rule}) - else - mesecon.receptor_off(pos, {rule}) - end -end - - -local function clean_port_states(ports) - ports.a = ports.a and true or false - ports.b = ports.b and true or false - ports.c = ports.c and true or false - ports.d = ports.d and true or false -end - - -local function set_port_states(pos, ports) - local node = minetest.get_node(pos) - local name = node.name - clean_port_states(ports) - local vports = minetest.registered_nodes[name].virtual_portstates - local new_name = generate_name(ports) - - if name ~= new_name and vports then - -- Problem: - -- We need to place the new node first so that when turning - -- off some port, it won't stay on because the rules indicate - -- there is an onstate output port there. - -- When turning the output off then, it will however cause feedback - -- so that the luacontroller will receive an "off" event by turning - -- its output off. - -- Solution / Workaround: - -- Remember which output was turned off and ignore next "off" event. - local meta = minetest.get_meta(pos) - local ign = minetest.deserialize(meta:get_string("ignore_offevents")) or {} - if ports.a and not vports.a and not mesecon.is_powered(pos, rules.a) then ign.A = true end - if ports.b and not vports.b and not mesecon.is_powered(pos, rules.b) then ign.B = true end - if ports.c and not vports.c and not mesecon.is_powered(pos, rules.c) then ign.C = true end - if ports.d and not vports.d and not mesecon.is_powered(pos, rules.d) then ign.D = true end - meta:set_string("ignore_offevents", minetest.serialize(ign)) - - minetest.swap_node(pos, {name = new_name, param2 = node.param2}) - - if ports.a ~= vports.a then set_port(pos, rules.a, ports.a) end - if ports.b ~= vports.b then set_port(pos, rules.b, ports.b) end - if ports.c ~= vports.c then set_port(pos, rules.c, ports.c) end - if ports.d ~= vports.d then set_port(pos, rules.d, ports.d) end - end -end - - ------------------ --- Overheating -- ------------------ -local function burn_controller(pos) - local node = minetest.get_node(pos) - node.name = BASENAME.."_burnt" - minetest.swap_node(pos, node) - minetest.get_meta(pos):set_string("lc_memory", ""); - -- Wait for pending operations - minetest.after(0.2, mesecon.receptor_off, pos, mesecon.rules.flat) -end - -local function overheat(pos, meta) - if mesecon.do_overheat(pos) then -- If too hot - burn_controller(pos) - return true - end -end - ------------------------- --- Ignored off events -- ------------------------- - -local function ignore_event(event, meta) - if event.type ~= "off" then return false end - local ignore_offevents = minetest.deserialize(meta:get_string("ignore_offevents")) or {} - if ignore_offevents[event.pin.name] then - ignore_offevents[event.pin.name] = nil - meta:set_string("ignore_offevents", minetest.serialize(ignore_offevents)) - return true - end -end - -------------------------- --- Parsing and running -- -------------------------- - -local function safe_print(param) - print(dump(param)) -end - -local function safe_date() - return(os.date("*t",os.time())) -end - --- string.rep(str, n) with a high value for n can be used to DoS --- the server. Therefore, limit max. length of generated string. -local function safe_string_rep(str, n) - if #str * n > mesecon.setting("luacontroller_string_rep_max", 64000) then - debug.sethook() -- Clear hook - error("string.rep: string length overflow", 2) - end - - return string.rep(str, n) -end - --- string.find with a pattern can be used to DoS the server. --- Therefore, limit string.find to patternless matching. -local function safe_string_find(...) - if (select(4, ...)) ~= true then - debug.sethook() -- Clear hook - error("string.find: 'plain' (fourth parameter) must always be true in a Luacontroller") - end - - return string.find(...) -end - -local function remove_functions(x) - local tp = type(x) - if tp == "function" then - return nil - end - - -- Make sure to not serialize the same table multiple times, otherwise - -- writing mem.test = mem in the Luacontroller will lead to infinite recursion - local seen = {} - - local function rfuncs(x) - if seen[x] then return end - seen[x] = true - if type(x) ~= "table" then return end - - for key, value in pairs(x) do - if type(key) == "function" or type(value) == "function" then - x[key] = nil - else - if type(key) == "table" then - rfuncs(key) - end - if type(value) == "table" then - rfuncs(value) - end - end - end - end - - rfuncs(x) - - return x -end - -local function get_interrupt(pos) - -- iid = interrupt id - local function interrupt(time, iid) - if type(time) ~= "number" then return end - local luac_id = minetest.get_meta(pos):get_int("luac_id") - mesecon.queue:add_action(pos, "lc_interrupt", {luac_id, iid}, time, iid, 1) - end - return interrupt -end - - -local function get_digiline_send(pos) - if not digiline then return end - return function(channel, msg) - -- Make sure channel is string, number or boolean - if (type(channel) ~= "string" and type(channel) ~= "number" and type(channel) ~= "boolean") then - return false - end - - -- It is technically possible to send functions over the wire since - -- the high performance impact of stripping those from the data has - -- been decided to not be worth the added realism. - -- Make sure serialized version of the data is not insanely long to - -- prevent DoS-like attacks - local msg_ser = minetest.serialize(msg) - if #msg_ser > mesecon.setting("luacontroller_digiline_maxlen", 50000) then - return false - end - - minetest.after(0, function() - digiline:receptor_send(pos, digiline.rules.default, channel, msg) - end) - return true - end -end - - -local safe_globals = { - "assert", "error", "ipairs", "next", "pairs", "select", - "tonumber", "tostring", "type", "unpack", "_VERSION" -} - -local function create_environment(pos, mem, event) - -- Gather variables for the environment - local vports = minetest.registered_nodes[minetest.get_node(pos).name].virtual_portstates - local vports_copy = {} - for k, v in pairs(vports) do vports_copy[k] = v end - local rports = get_real_port_states(pos) - - -- Create new library tables on each call to prevent one Luacontroller - -- from breaking a library and messing up other Luacontrollers. - local env = { - pin = merge_port_states(vports, rports), - port = vports_copy, - event = event, - mem = mem, - heat = mesecon.get_heat(pos), - heat_max = mesecon.setting("overheat_max", 20), - print = safe_print, - interrupt = get_interrupt(pos), - digiline_send = get_digiline_send(pos), - string = { - byte = string.byte, - char = string.char, - format = string.format, - len = string.len, - lower = string.lower, - upper = string.upper, - rep = safe_string_rep, - reverse = string.reverse, - sub = string.sub, - find = safe_string_find, - }, - math = { - abs = math.abs, - acos = math.acos, - asin = math.asin, - atan = math.atan, - atan2 = math.atan2, - ceil = math.ceil, - cos = math.cos, - cosh = math.cosh, - deg = math.deg, - exp = math.exp, - floor = math.floor, - fmod = math.fmod, - frexp = math.frexp, - huge = math.huge, - ldexp = math.ldexp, - log = math.log, - log10 = math.log10, - max = math.max, - min = math.min, - modf = math.modf, - pi = math.pi, - pow = math.pow, - rad = math.rad, - random = math.random, - sin = math.sin, - sinh = math.sinh, - sqrt = math.sqrt, - tan = math.tan, - tanh = math.tanh, - }, - table = { - concat = table.concat, - insert = table.insert, - maxn = table.maxn, - remove = table.remove, - sort = table.sort, - }, - os = { - clock = os.clock, - difftime = os.difftime, - time = os.time, - datetable = safe_date, - }, - } - env._G = env - - for _, name in pairs(safe_globals) do - env[name] = _G[name] - end - - return env -end - - -local function timeout() - debug.sethook() -- Clear hook - error("Code timed out!", 2) -end - - -local function create_sandbox(code, env) - if code:byte(1) == 27 then - return nil, "Binary code prohibited." - end - local f, msg = loadstring(code) - if not f then return nil, msg end - setfenv(f, env) - - -- Turn off JIT optimization for user code so that count - -- events are generated when adding debug hooks - if rawget(_G, "jit") then - jit.off(f, true) - end - - return function(...) - -- Use instruction counter to stop execution - -- after luacontroller_maxevents - local maxevents = mesecon.setting("luacontroller_maxevents", 10000) - debug.sethook(timeout, "", maxevents) - local ok, ret = pcall(f, ...) - debug.sethook() -- Clear hook - if not ok then error(ret, 0) end - return ret - end -end - - -local function load_memory(meta) - return minetest.deserialize(meta:get_string("lc_memory")) or {} -end - - -local function save_memory(pos, meta, mem) - local memstring = minetest.serialize(remove_functions(mem)) - local memsize_max = mesecon.setting("luacontroller_memsize", 100000) - - if (#memstring <= memsize_max) then - meta:set_string("lc_memory", memstring) - else - print("Error: Luacontroller memory overflow. "..memsize_max.." bytes available, " - ..#memstring.." required. Controller overheats.") - burn_controller(pos) - end -end - - -local function run(pos, event) - local meta = minetest.get_meta(pos) - if overheat(pos) then return end - if ignore_event(event, meta) then return end - - -- Load code & mem from meta - local mem = load_memory(meta) - local code = meta:get_string("code") - - -- Create environment - local env = create_environment(pos, mem, event) - - -- Create the sandbox and execute code - local f, msg = create_sandbox(code, env) - if not f then return msg end - local success, msg = pcall(f) - if not success then return msg end - if type(env.port) ~= "table" then - return "Ports set are invalid." - end - - -- Actually set the ports - set_port_states(pos, env.port) - - -- Save memory. This may burn the luacontroller if a memory overflow occurs. - save_memory(pos, meta, env.mem) -end - -mesecon.queue:add_function("lc_interrupt", function (pos, luac_id, iid) - -- There is no luacontroller anymore / it has been reprogrammed / replaced / burnt - if (minetest.get_meta(pos):get_int("luac_id") ~= luac_id) then return end - if (minetest.registered_nodes[minetest.get_node(pos).name].is_burnt) then return end - run(pos, {type="interrupt", iid = iid}) -end) - -local function reset_meta(pos, code, errmsg) - local meta = minetest.get_meta(pos) - meta:set_string("code", code) - code = minetest.formspec_escape(code or "") - errmsg = minetest.formspec_escape(tostring(errmsg or "")) - meta:set_string("formspec", "size[12,10]".. - "background[-0.2,-0.25;12.4,10.75;jeija_luac_background.png]".. - "textarea[0.2,0.2;12.2,9.5;code;;"..code.."]".. - "image_button[4.75,8.75;2.5,1;jeija_luac_runbutton.png;program;]".. - "image_button_exit[11.72,-0.25;0.425,0.4;jeija_close_window.png;exit;]".. - "label[0.1,9;"..errmsg.."]") - meta:set_int("luac_id", math.random(1, 65535)) -end - -local function reset(pos) - set_port_states(pos, {a=false, b=false, c=false, d=false}) -end - - ------------------------ --- Node Registration -- ------------------------ - -local output_rules = {} -local input_rules = {} - -local node_box = { - type = "fixed", - fixed = { - {-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}, -- Bottom slab - {-5/16, -7/16, -5/16, 5/16, -6/16, 5/16}, -- Circuit board - {-3/16, -6/16, -3/16, 3/16, -5/16, 3/16}, -- IC - } -} - -local selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 }, -} - -local digiline = { - receptor = {}, - effector = { - action = function(pos, node, channel, msg) - run(pos, {type = "digiline", channel = channel, msg = msg}) - end - } -} -local function on_receive_fields(pos, form_name, fields, sender) - if not fields.program then - return - end - local name = sender:get_player_name() - if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, {protection_bypass=true}) then - minetest.record_protection_violation(pos, name) - return - end - reset(pos) - reset_meta(pos, fields.code) - local err = run(pos, {type="program"}) - if err then - print(err) - reset_meta(pos, fields.code, err) - end -end - -for a = 0, 1 do -- 0 = off 1 = on -for b = 0, 1 do -for c = 0, 1 do -for d = 0, 1 do - local cid = tostring(d)..tostring(c)..tostring(b)..tostring(a) - local node_name = BASENAME..cid - local top = "jeija_luacontroller_top.png" - if a == 1 then - top = top.."^jeija_luacontroller_LED_A.png" - end - if b == 1 then - top = top.."^jeija_luacontroller_LED_B.png" - end - if c == 1 then - top = top.."^jeija_luacontroller_LED_C.png" - end - if d == 1 then - top = top.."^jeija_luacontroller_LED_D.png" - end - - local groups - if a + b + c + d ~= 0 then - groups = {dig_immediate=2, not_in_creative_inventory=1, overheat = 1} - else - groups = {dig_immediate=2, overheat = 1} - end - - output_rules[cid] = {} - input_rules[cid] = {} - if a == 1 then table.insert(output_rules[cid], rules.a) end - if b == 1 then table.insert(output_rules[cid], rules.b) end - if c == 1 then table.insert(output_rules[cid], rules.c) end - if d == 1 then table.insert(output_rules[cid], rules.d) end - - if a == 0 then table.insert( input_rules[cid], rules.a) end - if b == 0 then table.insert( input_rules[cid], rules.b) end - if c == 0 then table.insert( input_rules[cid], rules.c) end - if d == 0 then table.insert( input_rules[cid], rules.d) end - - local mesecons = { - effector = { - rules = input_rules[cid], - action_change = function (pos, _, rule_name, new_state) - update_real_port_states(pos, rule_name, new_state) - run(pos, {type=new_state, pin=rule_name}) - end, - }, - receptor = { - state = mesecon.state.on, - rules = output_rules[cid] - } - } - - minetest.register_node(node_name, { - description = "Luacontroller", - drawtype = "nodebox", - tiles = { - top, - "jeija_microcontroller_bottom.png", - "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png" - }, - inventory_image = top, - paramtype = "light", - groups = groups, - drop = BASENAME.."0000", - sunlight_propagates = true, - selection_box = selection_box, - node_box = node_box, - on_construct = reset_meta, - on_receive_fields = on_receive_fields, - sounds = default.node_sound_stone_defaults(), - mesecons = mesecons, - digiline = digiline, - -- Virtual portstates are the ports that - -- the node shows as powered up (light up). - virtual_portstates = { - a = a == 1, - b = b == 1, - c = c == 1, - d = d == 1, - }, - after_dig_node = function (pos, node) - mesecon.do_cooldown(pos) - mesecon.receptor_off(pos, output_rules) - end, - is_luacontroller = true, - }) -end -end -end -end - ------------------------------- --- Overheated Luacontroller -- ------------------------------- - -minetest.register_node(BASENAME .. "_burnt", { - drawtype = "nodebox", - tiles = { - "jeija_luacontroller_burnt_top.png", - "jeija_microcontroller_bottom.png", - "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png" - }, - inventory_image = "jeija_luacontroller_burnt_top.png", - is_burnt = true, - paramtype = "light", - groups = {dig_immediate=2, not_in_creative_inventory=1}, - drop = BASENAME.."0000", - sunlight_propagates = true, - selection_box = selection_box, - node_box = node_box, - on_construct = reset_meta, - on_receive_fields = on_receive_fields, - sounds = default.node_sound_stone_defaults(), - virtual_portstates = {a = false, b = false, c = false, d = false}, - mesecons = { - effector = { - rules = mesecon.rules.flat, - action_change = function(pos, _, rule_name, new_state) - update_real_port_states(pos, rule_name, new_state) - end, - }, - }, -}) - ------------------------- --- Craft Registration -- ------------------------- - -minetest.register_craft({ - output = BASENAME.."0000 2", - recipe = { - {'mesecons_materials:silicon', 'mesecons_materials:silicon', 'group:mesecon_conductor_craftable'}, - {'mesecons_materials:silicon', 'mesecons_materials:silicon', 'group:mesecon_conductor_craftable'}, - {'group:mesecon_conductor_craftable', 'group:mesecon_conductor_craftable', ''}, - } -}) - diff --git a/mods/ITEMS/mesecons/mesecons_microcontroller/init.lua b/mods/ITEMS/mesecons/mesecons_microcontroller/init.lua deleted file mode 100755 index ef78f60..0000000 --- a/mods/ITEMS/mesecons/mesecons_microcontroller/init.lua +++ /dev/null @@ -1,707 +0,0 @@ -local EEPROM_SIZE = 255 - -local microc_rules = {} -local yc = {} - -for a = 0, 1 do -for b = 0, 1 do -for c = 0, 1 do -for d = 0, 1 do -local nodename = "mesecons_microcontroller:microcontroller"..tostring(d)..tostring(c)..tostring(b)..tostring(a) -local top = "jeija_microcontroller_top.png" -if tostring(a) == "1" then - top = top.."^jeija_microcontroller_LED_A.png" -end -if tostring(b) == "1" then - top = top.."^jeija_microcontroller_LED_B.png" -end -if tostring(c) == "1" then - top = top.."^jeija_microcontroller_LED_C.png" -end -if tostring(d) == "1" then - top = top.."^jeija_microcontroller_LED_D.png" -end -local groups -if tostring(d)..tostring(c)..tostring(b)..tostring(a) ~= "0000" then - groups = {dig_immediate=2, not_in_creative_inventory=1, mesecon = 3, overheat = 1} -else - groups = {dig_immediate=2, mesecon = 3, overheat = 1} -end -local rules={} -if (a == 1) then table.insert(rules, {x = -1, y = 0, z = 0}) end -if (b == 1) then table.insert(rules, {x = 0, y = 0, z = 1}) end -if (c == 1) then table.insert(rules, {x = 1, y = 0, z = 0}) end -if (d == 1) then table.insert(rules, {x = 0, y = 0, z = -1}) end - -local input_rules={} -if (a == 0) then table.insert(input_rules, {x = -1, y = 0, z = 0, name = "A"}) end -if (b == 0) then table.insert(input_rules, {x = 0, y = 0, z = 1, name = "B"}) end -if (c == 0) then table.insert(input_rules, {x = 1, y = 0, z = 0, name = "C"}) end -if (d == 0) then table.insert(input_rules, {x = 0, y = 0, z = -1, name = "D"}) end -microc_rules[nodename] = rules - -local mesecons = {effector = -{ - rules = input_rules, - action_change = function (pos, node, rulename, newstate) - yc.update_real_portstates(pos, node, rulename, newstate) - yc.update(pos) - end -}} -if nodename ~= "mesecons_microcontroller:microcontroller0000" then - mesecons.receptor = { - state = mesecon.state.on, - rules = rules - } -end - -minetest.register_node(nodename, { - description = "Microcontroller", - drawtype = "nodebox", - tiles = { - top, - "jeija_microcontroller_bottom.png", - "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png" - }, - - sunlight_propagates = true, - paramtype = "light", - walkable = true, - groups = groups, - drop = "mesecons_microcontroller:microcontroller0000 1", - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = { - { -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }, -- bottom slab - { -5/16, -7/16, -5/16, 5/16, -6/16, 5/16 }, -- circuit board - { -3/16, -6/16, -3/16, 3/16, -5/16, 3/16 }, -- IC - } - }, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("code", "") - meta:set_string("formspec", "size[9,2.5]".. - "field[0.256,-0.2;9,2;code;Code:;]".. - "button[0 ,0.2;1.5,3;band;AND]".. - "button[1.5,0.2;1.5,3;bxor;XOR]".. - "button[3 ,0.2;1.5,3;bnot;NOT]".. - "button[4.5,0.2;1.5,3;bnand;NAND]".. - "button[6 ,0.2;1.5,3;btflop;T-Flop]".. - "button[7.5,0.2;1.5,3;brsflop;RS-Flop]".. - "button_exit[3.5,1;2,3;program;Program]") - meta:set_string("infotext", "Unprogrammed Microcontroller") - local r = "" - for i=1, EEPROM_SIZE+1 do r=r.."0" end --Generate a string with EEPROM_SIZE*"0" - meta:set_string("eeprom", r) - end, - on_receive_fields = function(pos, formanme, fields, sender) - local meta = minetest.get_meta(pos) - if fields.band then - fields.code = "sbi(C, A&B) :A and B are inputs, C is output" - elseif fields.bxor then - fields.code = "sbi(C, A~B) :A and B are inputs, C is output" - elseif fields.bnot then - fields.code = "sbi(B, !A) :A is input, B is output" - elseif fields.bnand then - fields.code = "sbi(C, !A|!B) :A and B are inputs, C is output" - elseif fields.btflop then - fields.code = "if(A)sbi(1,1);if(!A)sbi(B,!B)sbi(1,0); if(C)off(B,1); :A is input, B is output (Q), C is reset, toggles with falling edge" - elseif fields.brsflop then - fields.code = "if(A)on(C);if(B)off(C); :A is S (Set), B is R (Reset), C is output (R dominates)" - end - if fields.code == nil then return end - - meta:set_string("code", fields.code) - meta:set_string("formspec", "size[9,2.5]".. - "field[0.256,-0.2;9,2;code;Code:;"..minetest.formspec_escape(fields.code).."]".. - "button[0 ,0.2;1.5,3;band;AND]".. - "button[1.5,0.2;1.5,3;bxor;XOR]".. - "button[3 ,0.2;1.5,3;bnot;NOT]".. - "button[4.5,0.2;1.5,3;bnand;NAND]".. - "button[6 ,0.2;1.5,3;btflop;T-Flop]".. - "button[7.5,0.2;1.5,3;brsflop;RS-Flop]".. - "button_exit[3.5,1;2,3;program;Program]") - meta:set_string("infotext", "Programmed Microcontroller") - yc.reset (pos) - yc.update(pos) - end, - sounds = default.node_sound_stone_defaults(), - mesecons = mesecons, - after_dig_node = function (pos, node) - rules = microc_rules[node.name] - mesecon.receptor_off(pos, rules) - end, -}) -end -end -end -end - -if minetest.get_modpath("mesecons_luacontroller") then - minetest.register_craft({ - type = "shapeless", - output = "mesecons_microcontroller:microcontroller0000", - recipe = {"mesecons_luacontroller:luacontroller0000"}, - }) - minetest.register_craft({ - type = "shapeless", - output = "mesecons_luacontroller:luacontroller0000", - recipe = {"mesecons_microcontroller:microcontroller0000"}, - }) -else - minetest.register_craft({ - output = 'craft "mesecons_microcontroller:microcontroller0000" 2', - recipe = { - {'mesecons_materials:silicon', 'mesecons_materials:silicon', 'group:mesecon_conductor_craftable'}, - {'mesecons_materials:silicon', 'mesecons_materials:silicon', 'group:mesecon_conductor_craftable'}, - {'group:mesecon_conductor_craftable', 'group:mesecon_conductor_craftable', ''}, - } - }) -end - -yc.reset = function(pos) - yc.action(pos, {a=false, b=false, c=false, d=false}) - local meta = minetest.get_meta(pos) - meta:set_int("afterid", 0) - local r = "" - for i=1, EEPROM_SIZE+1 do r=r.."0" end --Generate a string with EEPROM_SIZE*"0" - meta:set_string("eeprom", r) -end - -yc.update = function(pos) - local meta = minetest.get_meta(pos) - - if (mesecon.do_overheat(pos)) then - minetest.remove_node(pos) - minetest.after(0.2, function (pos) - mesecon.receptor_off(pos, mesecon.rules.flat) - end , pos) -- wait for pending parsings - minetest.add_item(pos, "mesecons_microcontroller:microcontroller0000") - end - - local code = meta:get_string("code") - code = yc.code_remove_commentary(code) - code = string.gsub(code, " ", "") --Remove all spaces - code = string.gsub(code, " ", "") --Remove all tabs - if yc.parsecode(code, pos) == nil then - meta:set_string("infotext", "Code not valid!\n"..code) - else - meta:set_string("infotext", "Working Microcontroller\n"..code) - end -end - - ---Code Parsing -yc.code_remove_commentary = function(code) - local is_string = false - for i = 1, #code do - if code:sub(i, i) == '"' then - is_string = not is_string --toggle is_string - elseif code:sub(i, i) == ":" and not is_string then - return code:sub(1, i-1) - end - end - return code -end - -yc.parsecode = function(code, pos) - local meta = minetest.get_meta(pos) - local endi = 1 - local Lreal = yc.get_real_portstates(pos) - local Lvirtual = yc.get_virtual_portstates(pos) - if Lvirtual == nil then return nil end - local c - local eeprom = meta:get_string("eeprom") - while true do - local command, params - command, endi = yc.parse_get_command(code, endi) - if command == nil then return nil end - if command == true then break end --end of code - if command == "if" then - local r - r, endi = yc.command_if(code, endi, yc.merge_portstates(Lreal, Lvirtual), eeprom) - if r == nil then return nil end - if r == true then -- nothing - elseif r == false then - local endi_new = yc.skip_to_else (code, endi) - if endi_new == nil then --else > not found - endi = yc.skip_to_endif(code, endi) - else - endi = endi_new - end - if endi == nil then return nil end - end - else - params, endi = yc.parse_get_params(code, endi) - if not params then return nil end - end - if command == "on" then - L = yc.command_on (params, Lvirtual) - elseif command == "off" then - L = yc.command_off(params, Lvirtual) - elseif command == "print" then - local su = yc.command_print(params, eeprom, yc.merge_portstates(Lreal, Lvirtual)) - if su ~= true then return nil end - elseif command == "after" then - local su = yc.command_after(params, pos) - if su == nil then return nil end - elseif command == "sbi" then - local new_eeprom - new_eeprom, Lvirtual = yc.command_sbi (params, eeprom, yc.merge_portstates(Lreal, Lvirtual), Lvirtual) - if new_eeprom == nil then return nil - else eeprom = new_eeprom end - elseif command == "if" then --nothing - else - return nil - end - if Lvirtual == nil then return nil end - if eeprom == nil then return nil else - minetest.get_meta(pos):set_string("eeprom", eeprom) end - end - yc.action(pos, Lvirtual) - return true -end - -yc.parse_get_command = function(code, starti) - i = starti - local s - while s ~= "" do - s = string.sub(code, i, i) - if s == "(" then - return string.sub(code, starti, i-1), i + 1 -- i: ( i+1 after ( - end - if s == ";" and starti == i then - starti = starti + 1 - i = starti - elseif s == ">" then - starti = yc.skip_to_endif(code, starti) - if starti == nil then return nil end - i = starti - else - i = i + 1 - end - end - - if starti == i-1 then - return true, true - end - return nil, nil -end - -yc.parse_get_params = function(code, starti) - i = starti - local s - local params = {} - local is_string = false - while s ~= "" do - s = string.sub(code, i, i) - if code:sub(i, i) == '"' then - is_string = (is_string==false) --toggle is_string - end - if s == ")" and is_string == false then - table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after ) - return params, i + 1 - end - if s == "," and is_string == false then - table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after ) - starti = i + 1 - end - i = i + 1 - end - return nil, nil -end - -yc.parse_get_eeprom_param = function(cond, starti) - i = starti - local s - local addr - while s ~= "" do - s = string.sub(cond, i, i) - if string.find("0123456789", s) == nil or s == "" then - addr = string.sub(cond, starti, i-1) -- i: last number i+1 after last number - return addr, i - end - if s == "," then return nil, nil end - i = i + 1 - end - return nil, nil -end - -yc.skip_to_endif = function(code, starti) - local i = starti - local s = false - local open_ifs = 1 - while s ~= nil and s~= "" do - s = code:sub(i, i) - if s == "i" and code:sub(i+1, i+1) == "f" then --if in µCScript - open_ifs = open_ifs + 1 - end - if s == ";" then - open_ifs = open_ifs - 1 - end - if open_ifs == 0 then - return i + 1 - end - i = i + 1 - end - return nil -end - -yc.skip_to_else = function(code, starti) - local i = starti - local s = false - local open_ifs = 1 - while s ~= nil and s~= "" do - s = code:sub(i, i) - if s == "i" and code:sub(i+1, i+1) == "f" then --if in µCScript - open_ifs = open_ifs + 1 - end - if s == ";" then - open_ifs = open_ifs - 1 - end - if open_ifs == 1 and s == ">" then - return i + 1 - end - i = i + 1 - end - return nil -end - ---Commands -yc.command_on = function(params, L) - local rules = {} - for i, port in ipairs(params) do - L = yc.set_portstate (port, true, L) - end - return L -end - -yc.command_off = function(params, L) - local rules = {} - for i, port in ipairs(params) do - L = yc.set_portstate (port, false, L) - end - return L -end - -yc.command_print = function(params, eeprom, L) - local s = "" - for i, param in ipairs(params) do - if param:sub(1,1) == '"' and param:sub(#param, #param) == '"' then - s = s..param:sub(2, #param-1) - else - r = yc.command_parsecondition(param, L, eeprom) - if r == "1" or r == "0" then - s = s..r - else return nil end - end - end - print(s) --don't remove - return true -end - -yc.command_sbi = function(params, eeprom, L, Lv) - if params[1]==nil or params[2]==nil or params[3] ~=nil then return nil end - local status = yc.command_parsecondition(params[2], L, eeprom) - - if status == nil then return nil, nil end - - if string.find("ABCD", params[1])~=nil and #params[1]==1 then --is a port - if status == "1" then - Lv = yc.set_portstate (params[1], true, Lv) - else - Lv = yc.set_portstate (params[1], false, Lv) - end - return eeprom, Lv; - end - - --is an eeprom address - local new_eeprom = ""; - for i=1, #eeprom do - if tonumber(params[1])==i then - new_eeprom = new_eeprom..status - else - new_eeprom = new_eeprom..eeprom:sub(i, i) - end - end - return new_eeprom, Lv -end - --- after (delay) -yc.command_after = function(params, pos) - if params[1] == nil or params[2] == nil or params[3] ~= nil then return nil end - - --get time (maximum time is 200) - local time = tonumber(params[1]) - if time == nil or time > 200 then - return nil - end - - --get code in quotes "code" - if string.sub(params[2], 1, 1) ~= '"' or string.sub(params[2], #params[2], #params[2]) ~= '"' then return nil end - local code = string.sub(params[2], 2, #params[2] - 1) - - local afterid = math.random(10000) - local meta = minetest.get_meta(pos) - meta:set_int("afterid", afterid) - minetest.after(time, yc.command_after_execute, {pos = pos, code = code, afterid = afterid}) - return true -end - -yc.command_after_execute = function(params) - local meta = minetest.get_meta(params.pos) - if meta:get_int("afterid") == params.afterid then --make sure the node has not been changed - if yc.parsecode(params.code, params.pos) == nil then - meta:set_string("infotext", "Code in after() not valid!") - else - if code ~= nil then - meta:set_string("infotext", "Working Microcontroller\n"..code) - else - meta:set_string("infotext", "Working Microcontroller") - end - end - end -end - ---If -yc.command_if = function(code, starti, L, eeprom) - local cond, endi = yc.command_if_getcondition(code, starti) - if cond == nil then return nil end - - cond = yc.command_parsecondition(cond, L, eeprom) - - local result - if cond == "0" then result = false - elseif cond == "1" then result = true end - if not result then end - return result, endi --endi from local cond, endi = yc.command_if_getcondition(code, starti) -end - ---Condition parsing -yc.command_if_getcondition = function(code, starti) - i = starti - local s - local brackets = 1 --1 Bracket to close - while s ~= "" do - s = string.sub(code, i, i) - - if s == ")" then - brackets = brackets - 1 - end - - if s == "(" then - brackets = brackets + 1 - end - - if brackets == 0 then - return string.sub(code, starti, i-1), i + 1 -- i: ( i+1 after ( - end - - i = i + 1 - end - return nil, nil -end - -yc.command_parsecondition = function(cond, L, eeprom) - cond = string.gsub(cond, "A", tonumber(L.a and 1 or 0)) - cond = string.gsub(cond, "B", tonumber(L.b and 1 or 0)) - cond = string.gsub(cond, "C", tonumber(L.c and 1 or 0)) - cond = string.gsub(cond, "D", tonumber(L.d and 1 or 0)) - - - local i = 1 - local l = string.len(cond) - while i<=l do - local s = cond:sub(i,i) - if s == "#" then - local addr, endi = yc.parse_get_eeprom_param(cond, i+1) - local buf = yc.eeprom_read(tonumber(addr), eeprom) - if buf == nil then return nil end - local call = cond:sub(i, endi-1) - cond = string.gsub(cond, call, buf) - i = 0 - l = string.len(cond) - end - i = i + 1 - end - - cond = string.gsub(cond, "!0", "1") - cond = string.gsub(cond, "!1", "0") - - local i = 2 - local l = string.len(cond) - while i<=l do - local s = cond:sub(i,i) - local b = tonumber(cond:sub(i-1, i-1)) - local a = tonumber(cond:sub(i+1, i+1)) - if cond:sub(i+1, i+1) == nil then break end - if s == "=" then - if a==nil then return nil end - if b==nil then return nil end - if a == b then buf = "1" end - if a ~= b then buf = "0" end - cond = string.gsub(cond, b..s..a, buf) - i = 1 - l = string.len(cond) - end - i = i + 1 - end - - local i = 2 - local l = string.len(cond) - while i<=l do - local s = cond:sub(i,i) - local b = tonumber(cond:sub(i-1, i-1)) - local a = tonumber(cond:sub(i+1, i+1)) - if cond:sub(i+1, i+1) == nil then break end - if s == "&" then - if a==nil then return nil end - local buf = ((a==1) and (b==1)) - if buf == true then buf = "1" end - if buf == false then buf = "0" end - cond = string.gsub(cond, b..s..a, buf) - i = 1 - l = string.len(cond) - end - if s == "|" then - if a==nil then return nil end - local buf = ((a == 1) or (b == 1)) - if buf == true then buf = "1" end - if buf == false then buf = "0" end - cond = string.gsub(cond, b..s..a, buf) - i = 1 - l = string.len(cond) - end - if s == "~" then - if a==nil then return nil end - local buf = (((a == 1) or (b == 1)) and not((a==1) and (b==1))) - if buf == true then buf = "1" end - if buf == false then buf = "0" end - cond = string.gsub(cond, b..s..a, buf) - i = 1 - l = string.len(cond) - end - i = i + 1 - end - - return cond -end - ---Virtual-Hardware functions -yc.eeprom_read = function(number, eeprom) - if not number then return end - return eeprom:sub(number, number) -end - ---Real I/O functions -yc.action = function(pos, L) --L-->Lvirtual - local Lv = yc.get_virtual_portstates(pos) - local name = "mesecons_microcontroller:microcontroller" - ..tonumber(L.d and 1 or 0) - ..tonumber(L.c and 1 or 0) - ..tonumber(L.b and 1 or 0) - ..tonumber(L.a and 1 or 0) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = name, param2 = node.param2}) - - yc.action_setports(pos, L, Lv) -end - -yc.action_setports = function(pos, L, Lv) - local name = "mesecons_microcontroller:microcontroller" - local rules - if Lv.a ~= L.a then - rules = microc_rules[name.."0001"] - if L.a == true then mesecon.receptor_on(pos, rules) - else mesecon.receptor_off(pos, rules) end - end - if Lv.b ~= L.b then - rules = microc_rules[name.."0010"] - if L.b == true then mesecon.receptor_on(pos, rules) - else mesecon.receptor_off(pos, rules) end - end - if Lv.c ~= L.c then - rules = microc_rules[name.."0100"] - if L.c == true then mesecon.receptor_on(pos, rules) - else mesecon.receptor_off(pos, rules) end - end - if Lv.d ~= L.d then - rules = microc_rules[name.."1000"] - if L.d == true then mesecon.receptor_on(pos, rules) - else mesecon.receptor_off(pos, rules) end - end -end - -yc.set_portstate = function(port, state, L) - if port == "A" then L.a = state - elseif port == "B" then L.b = state - elseif port == "C" then L.c = state - elseif port == "D" then L.d = state - else return nil end - return L -end - -yc.update_real_portstates = function(pos, node, rulename, newstate) - local meta = minetest.get_meta(pos) - if rulename == nil then - meta:set_int("real_portstates", 1) - return - end - local n = meta:get_int("real_portstates") - 1 - local L = {} - for i = 1, 4 do - L[i] = n%2 - n = math.floor(n/2) - end - if rulename.x == nil then - for _, rname in ipairs(rulename) do - local port = ({4, 1, nil, 3, 2})[rname.x+2*rname.z+3] - L[port] = (newstate == "on") and 1 or 0 - end - else - local port = ({4, 1, nil, 3, 2})[rulename.x+2*rulename.z+3] - L[port] = (newstate == "on") and 1 or 0 - end - meta:set_int("real_portstates", 1 + L[1] + 2*L[2] + 4*L[3] + 8*L[4]) -end - -yc.get_real_portstates = function(pos) -- determine if ports are powered (by itself or from outside) - local meta = minetest.get_meta(pos) - local L = {} - local n = meta:get_int("real_portstates") - 1 - for _, index in ipairs({"a", "b", "c", "d"}) do - L[index] = ((n%2) == 1) - n = math.floor(n/2) - end - return L -end - -yc.get_virtual_portstates = function(pos) -- portstates according to the name - local name = minetest.get_node(pos).name - local b, a = string.find(name, ":microcontroller") - if a == nil then return nil end - a = a + 1 - - local Lvirtual = {a=false, b=false, c=false, d=false} - if name:sub(a , a ) == "1" then Lvirtual.d = true end - if name:sub(a+1, a+1) == "1" then Lvirtual.c = true end - if name:sub(a+2, a+2) == "1" then Lvirtual.b = true end - if name:sub(a+3, a+3) == "1" then Lvirtual.a = true end - return Lvirtual -end - -yc.merge_portstates = function(Lreal, Lvirtual) - local L = {a=false, b=false, c=false, d=false} - if Lvirtual.a or Lreal.a then L.a = true end - if Lvirtual.b or Lreal.b then L.b = true end - if Lvirtual.c or Lreal.c then L.c = true end - if Lvirtual.d or Lreal.d then L.d = true end - return L -end diff --git a/mods/ITEMS/mesecons/mesecons_movestones/init.lua b/mods/ITEMS/mesecons/mesecons_movestones/init.lua deleted file mode 100755 index f4b6f58..0000000 --- a/mods/ITEMS/mesecons/mesecons_movestones/init.lua +++ /dev/null @@ -1,156 +0,0 @@ --- MOVESTONE --- Non-sticky: --- Moves along mesecon lines --- Pushes all blocks in front of it --- --- Sticky one --- Moves along mesecon lines --- Pushes all block in front of it --- Pull all blocks in its back - -function mesecon.get_movestone_direction(pos) - local lpos - local rules = { - {x=0, y=1, z=-1}, - {x=0, y=0, z=-1}, - {x=0, y=-1, z=-1}, - {x=0, y=1, z=1}, - {x=0, y=-1, z=1}, - {x=0, y=0, z=1}, - {x=1, y=0, z=0}, - {x=1, y=1, z=0}, - {x=1, y=-1, z=0}, - {x=-1, y=1, z=0}, - {x=-1, y=-1, z=0}, - {x=-1, y=0, z=0}} - - lpos = {x=pos.x+1, y=pos.y, z=pos.z} - for n = 1, 3 do - if mesecon.is_power_on(lpos, rules[n]) then - return {x=0, y=0, z=-1} - end - end - - lpos = {x = pos.x-1, y = pos.y, z = pos.z} - for n=4, 6 do - if mesecon.is_power_on(lpos, rules[n]) then - return {x=0, y=0, z=1} - end - end - - lpos = {x = pos.x, y = pos.y, z = pos.z+1} - for n=7, 9 do - if mesecon.is_power_on(lpos, rules[n]) then - return {x=-1, y=0, z=0} - end - end - - lpos = {x = pos.x, y = pos.y, z = pos.z-1} - for n=10, 12 do - if mesecon.is_power_on(lpos, rules[n]) then - return {x=1, y=0, z=0} - end - end -end - -function mesecon.register_movestone(name, def, is_sticky) - local timer_interval = 1 / mesecon.setting("movestone_speed", 3) - local name_active = name.."_active" - - local function movestone_move (pos) - if minetest.get_node(pos).name ~= name_active then - return - end - - local direction = mesecon.get_movestone_direction(pos) - if not direction then - minetest.set_node(pos, {name = name}) - return - end - local frontpos = vector.add(pos, direction) - local backpos = vector.subtract(pos, direction) - - -- ### Step 1: Push nodes in front ### - local maxpush = mesecon.setting("movestone_max_push", 50) - local maxpull = mesecon.setting("movestone_max_pull", 50) - local success, stack, oldstack = mesecon.mvps_push(frontpos, direction, maxpush) - if success then - mesecon.mvps_process_stack(stack) - mesecon.mvps_move_objects(frontpos, direction, oldstack) - -- Too large stack/stopper in the way: try again very soon - else - minetest.after(0.05, movestone_move, pos) - return - end - - -- ### Step 2: Move the movestone ### - local node = minetest.get_node(pos) - minetest.set_node(frontpos, node) - minetest.remove_node(pos) - mesecon.on_dignode(pos, node) - mesecon.on_placenode(frontpos, node) - minetest.after(timer_interval, movestone_move, frontpos) - - -- ### Step 3: If sticky, pull stack behind ### - if is_sticky then - mesecon.mvps_pull_all(backpos, direction, maxpull) - end - end - - def.mesecons = {effector = { - action_on = function (pos) - if minetest.get_node(pos).name ~= name_active then - minetest.set_node(pos, {name = name_active}) - movestone_move(pos) - end - end, - action_off = function (pos) - minetest.set_node(pos, {name = name}) - end - }} - - def.drop = name - - minetest.register_node(name, def) - - -- active node only - local def_active = table.copy(def) - def_active.groups.not_in_creative_inventory = 1 - minetest.register_node(name_active, def_active) -end - -mesecon.register_movestone("mesecons_movestones:movestone", { - tiles = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_arrows.png", "jeija_movestone_arrows.png"}, - groups = {cracky=3}, - description="Movestone", - sounds = default.node_sound_stone_defaults() -}, false) - -minetest.register_craft({ - output = "mesecons_movestones:movestone 2", - recipe = { - {"default:stone", "default:stone", "default:stone"}, - {"group:mesecon_conductor_craftable", "group:mesecon_conductor_craftable", "group:mesecon_conductor_craftable"}, - {"default:stone", "default:stone", "default:stone"}, - } -}) - --- STICKY_MOVESTONE -mesecon.register_movestone("mesecons_movestones:sticky_movestone", { - tiles = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_sticky_movestone.png", "jeija_sticky_movestone.png"}, - inventory_image = minetest.inventorycube("jeija_sticky_movestone.png", "jeija_movestone_side.png", "jeija_movestone_side.png"), - groups = {cracky=3}, - description="Sticky Movestone", - sounds = default.node_sound_stone_defaults(), -}, true) - -minetest.register_craft({ - output = "mesecons_movestones:sticky_movestone", - recipe = { - {"mesecons_materials:glue", "mesecons_movestones:movestone", "mesecons_materials:glue"}, - } -}) - --- Don't allow pushing movestones while they're active -mesecon.register_mvps_stopper("mesecons_movestones:movestone_active") -mesecon.register_mvps_stopper("mesecons_movestones:sticky_movestone_active") diff --git a/mods/ITEMS/mesecons/mesecons_mvps/init.lua b/mods/ITEMS/mesecons/mesecons_mvps/init.lua deleted file mode 100755 index 08c4785..0000000 --- a/mods/ITEMS/mesecons/mesecons_mvps/init.lua +++ /dev/null @@ -1,257 +0,0 @@ ---register stoppers for movestones/pistons - -mesecon.mvps_stoppers = {} -mesecon.on_mvps_move = {} -mesecon.mvps_unmov = {} - ---- Objects (entities) that cannot be moved -function mesecon.register_mvps_unmov(objectname) - mesecon.mvps_unmov[objectname] = true; -end - -function mesecon.is_mvps_unmov(objectname) - return mesecon.mvps_unmov[objectname] -end - --- Nodes that cannot be pushed / pulled by movestones, pistons -function mesecon.is_mvps_stopper(node, pushdir, stack, stackid) - -- unknown nodes are always stoppers - if not minetest.registered_nodes[node.name] then - return true - end - - local get_stopper = mesecon.mvps_stoppers[node.name] - if type (get_stopper) == "function" then - get_stopper = get_stopper(node, pushdir, stack, stackid) - end - - return get_stopper -end - -function mesecon.register_mvps_stopper(nodename, get_stopper) - if get_stopper == nil then - get_stopper = true - end - mesecon.mvps_stoppers[nodename] = get_stopper -end - --- Functions to be called on mvps movement -function mesecon.register_on_mvps_move(callback) - mesecon.on_mvps_move[#mesecon.on_mvps_move+1] = callback -end - -local function on_mvps_move(moved_nodes) - for _, callback in ipairs(mesecon.on_mvps_move) do - callback(moved_nodes) - end -end - -function mesecon.mvps_process_stack(stack) - -- update mesecons for placed nodes ( has to be done after all nodes have been added ) - for _, n in ipairs(stack) do - mesecon.on_placenode(n.pos, minetest.get_node(n.pos)) - end -end - --- tests if the node can be pushed into, e.g. air, water, grass -local function node_replaceable(name) - if name == "ignore" then return true end - - if minetest.registered_nodes[name] then - return minetest.registered_nodes[name].buildable_to or false - end - - return false -end - -function mesecon.mvps_get_stack(pos, dir, maximum, all_pull_sticky) - -- determine the number of nodes to be pushed - local nodes = {} - local frontiers = {pos} - - while #frontiers > 0 do - local np = frontiers[1] - local nn = minetest.get_node(np) - - if not node_replaceable(nn.name) then - table.insert(nodes, {node = nn, pos = np}) - if #nodes > maximum then return nil end - - -- add connected nodes to frontiers, connected is a vector list - -- the vectors must be absolute positions - local connected = {} - if minetest.registered_nodes[nn.name] - and minetest.registered_nodes[nn.name].mvps_sticky then - connected = minetest.registered_nodes[nn.name].mvps_sticky(np, nn) - end - - table.insert(connected, vector.add(np, dir)) - - -- If adjacent node is sticky block and connects add that - -- position to the connected table - for _, r in ipairs(mesecon.rules.alldirs) do - local adjpos = vector.add(np, r) - local adjnode = minetest.get_node(adjpos) - if minetest.registered_nodes[adjnode.name] - and minetest.registered_nodes[adjnode.name].mvps_sticky then - local sticksto = minetest.registered_nodes[adjnode.name] - .mvps_sticky(adjpos, adjnode) - - -- connects to this position? - for _, link in ipairs(sticksto) do - if vector.equals(link, np) then - table.insert(connected, adjpos) - end - end - end - end - - if all_pull_sticky then - table.insert(connected, vector.subtract(np, dir)) - end - - -- Make sure there are no duplicates in frontiers / nodes before - -- adding nodes in "connected" to frontiers - for _, cp in ipairs(connected) do - local duplicate = false - for _, rp in ipairs(nodes) do - if vector.equals(cp, rp.pos) then - duplicate = true - end - end - for _, fp in ipairs(frontiers) do - if vector.equals(cp, fp) then - duplicate = true - end - end - if not duplicate then - table.insert(frontiers, cp) - end - end - end - table.remove(frontiers, 1) - end - - return nodes -end - -function mesecon.mvps_push(pos, dir, maximum) - return mesecon.mvps_push_or_pull(pos, dir, dir, maximum) -end - -function mesecon.mvps_pull_all(pos, dir, maximum) - return mesecon.mvps_push_or_pull(pos, vector.multiply(dir, -1), dir, maximum, true) -end - -function mesecon.mvps_pull_single(pos, dir, maximum) - return mesecon.mvps_push_or_pull(pos, vector.multiply(dir, -1), dir, maximum) -end - --- pos: pos of mvps; stackdir: direction of building the stack --- movedir: direction of actual movement --- maximum: maximum nodes to be pushed --- all_pull_sticky: All nodes are sticky in the direction that they are pulled from -function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, all_pull_sticky) - local nodes = mesecon.mvps_get_stack(pos, movedir, maximum, all_pull_sticky) - - if not nodes then return end - -- determine if one of the nodes blocks the push / pull - for id, n in ipairs(nodes) do - if mesecon.is_mvps_stopper(n.node, movedir, nodes, id) then - return - end - end - - -- remove all nodes - for _, n in ipairs(nodes) do - n.meta = minetest.get_meta(n.pos):to_table() - local node_timer = minetest.get_node_timer(n.pos) - if node_timer:is_started() then - n.node_timer = {node_timer:get_timeout(), node_timer:get_elapsed()} - end - minetest.remove_node(n.pos) - end - - -- update mesecons for removed nodes ( has to be done after all nodes have been removed ) - for _, n in ipairs(nodes) do - mesecon.on_dignode(n.pos, n.node) - end - - -- add nodes - for _, n in ipairs(nodes) do - local np = vector.add(n.pos, movedir) - - minetest.set_node(np, n.node) - minetest.get_meta(np):from_table(n.meta) - if n.node_timer then - minetest.get_node_timer(np):set(unpack(n.node_timer)) - end - end - - local moved_nodes = {} - local oldstack = mesecon.tablecopy(nodes) - for i in ipairs(nodes) do - moved_nodes[i] = {} - moved_nodes[i].oldpos = nodes[i].pos - nodes[i].pos = vector.add(nodes[i].pos, movedir) - moved_nodes[i].pos = nodes[i].pos - moved_nodes[i].node = nodes[i].node - moved_nodes[i].meta = nodes[i].meta - moved_nodes[i].node_timer = nodes[i].node_timer - end - - on_mvps_move(moved_nodes) - - return true, nodes, oldstack -end - -mesecon.register_on_mvps_move(function(moved_nodes) - for _, n in ipairs(moved_nodes) do - mesecon.on_placenode(n.pos, n.node) - end -end) - -function mesecon.mvps_move_objects(pos, dir, nodestack) - local objects_to_move = {} - - -- Move object at tip of stack, pushpos is position at tip of stack - local pushpos = vector.add(pos, vector.multiply(dir, #nodestack)) - - local objects = minetest.get_objects_inside_radius(pushpos, 1) - for _, obj in ipairs(objects) do - table.insert(objects_to_move, obj) - end - - -- Move objects lying/standing on the stack (before it was pushed - oldstack) - if tonumber(minetest.setting_get("movement_gravity")) > 0 and dir.y == 0 then - -- If gravity positive and dir horizontal, push players standing on the stack - for _, n in ipairs(nodestack) do - local p_above = vector.add(n.pos, {x=0, y=1, z=0}) - local objects = minetest.get_objects_inside_radius(p_above, 1) - for _, obj in ipairs(objects) do - table.insert(objects_to_move, obj) - end - end - end - - for _, obj in ipairs(objects_to_move) do - local entity = obj:get_luaentity() - if not entity or not mesecon.is_mvps_unmov(entity.name) then - local np = vector.add(obj:getpos(), dir) - - --move only if destination is not solid - local nn = minetest.get_node(np) - if not ((not minetest.registered_nodes[nn.name]) - or minetest.registered_nodes[nn.name].walkable) then - obj:setpos(np) - end - end - end -end - -mesecon.register_mvps_stopper("doors:door_steel_b_1") -mesecon.register_mvps_stopper("doors:door_steel_t_1") -mesecon.register_mvps_stopper("doors:door_steel_b_2") -mesecon.register_mvps_stopper("doors:door_steel_t_2") -mesecon.register_mvps_stopper("default:chest_locked") -mesecon.register_on_mvps_move(mesecon.move_hot_nodes) diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/init.lua b/mods/ITEMS/mesecons/mesecons_noteblock/init.lua deleted file mode 100755 index d5e365c..0000000 --- a/mods/ITEMS/mesecons/mesecons_noteblock/init.lua +++ /dev/null @@ -1,69 +0,0 @@ -minetest.register_node("mesecons_noteblock:noteblock", { - description = "Noteblock", - tiles = {"mesecons_noteblock.png"}, - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2}, - on_punch = function(pos, node) -- change sound when punched - node.param2 = (node.param2+1)%12 - mesecon.noteblock_play(pos, node.param2) - minetest.set_node(pos, node) - end, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector = { -- play sound when activated - action_on = function(pos, node) - mesecon.noteblock_play(pos, node.param2) - end - }} -}) - -minetest.register_craft({ - output = "mesecons_noteblock:noteblock 1", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:mesecon_conductor_craftable", "default:steel_ingot", "group:mesecon_conductor_craftable"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -local soundnames = { - [0] = "mesecons_noteblock_csharp", - "mesecons_noteblock_d", - "mesecons_noteblock_dsharp", - "mesecons_noteblock_e", - "mesecons_noteblock_f", - "mesecons_noteblock_fsharp", - "mesecons_noteblock_g", - "mesecons_noteblock_gsharp", - - "mesecons_noteblock_a", - "mesecons_noteblock_asharp", - "mesecons_noteblock_b", - "mesecons_noteblock_c" -} - -local node_sounds = { - ["default:glass"] = "mesecons_noteblock_hihat", - ["default:stone"] = "mesecons_noteblock_kick", - ["default:lava_source"] = "fire_large", - ["default:chest"] = "mesecons_noteblock_snare", - ["default:tree"] = "mesecons_noteblock_crash", - ["default:wood"] = "mesecons_noteblock_litecrash", - ["default:coalblock"] = "tnt_explode", -} - -mesecon.noteblock_play = function(pos, param2) - pos.y = pos.y-1 - local nodeunder = minetest.get_node(pos).name - local soundname = node_sounds[nodeunder] - if not soundname then - soundname = soundnames[param2] - if not soundname then - minetest.log("error", "[mesecons_noteblock] No soundname found, test param2") - return - end - if nodeunder == "default:steelblock" then - soundname = soundname.. 2 - end - end - pos.y = pos.y+1 - minetest.sound_play(soundname, {pos = pos}) -end diff --git a/mods/ITEMS/mesecons/mesecons_pistons/init.lua b/mods/ITEMS/mesecons/mesecons_pistons/init.lua deleted file mode 100755 index a52c802..0000000 --- a/mods/ITEMS/mesecons/mesecons_pistons/init.lua +++ /dev/null @@ -1,770 +0,0 @@ --- Get mesecon rules of pistons -local piston_rules = { - {x=0, y=0, z=1}, --everything apart from z- (pusher side) - {x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=1, y=1, z=0}, - {x=1, y=-1, z=0}, - {x=-1, y=1, z=0}, - {x=-1, y=-1, z=0}, - {x=0, y=1, z=1}, - {x=0, y=-1, z=1} -} - -local piston_up_rules = { - {x=0, y=0, z=-1}, --everything apart from y+ (pusher side) - {x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=0, z=1}, - {x=1, y=-1, z=0}, - {x=-1, y=-1, z=0}, - {x=0, y=-1, z=1}, - {x=0, y=-1, z=-1} -} - -local piston_down_rules = { - {x=0, y=0, z=-1}, --everything apart from y- (pusher side) - {x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=0, z=1}, - {x=1, y=1, z=0}, - {x=-1, y=1, z=0}, - {x=0, y=1, z=1}, - {x=0, y=1, z=-1} -} - -local function piston_get_rules(node) - local rules = piston_rules - for i = 1, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - -local function piston_facedir_direction(node) - local rules = {{x = 0, y = 0, z = -1}} - for i = 1, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules[1] -end - -local function piston_get_direction(dir, node) - if type(dir) == "function" then - return dir(node) - else - return dir - end -end - -local piston_remove_pusher = function(pos, node) - local pistonspec = minetest.registered_nodes[node.name].mesecons_piston - local dir = piston_get_direction(pistonspec.dir, node) - local pusherpos = vector.add(pos, dir) - local pushername = minetest.get_node(pusherpos).name - - -- make sure there actually is a pusher (for compatibility reasons mainly) - if pushername ~= pistonspec.pusher then - return - end - - minetest.remove_node(pusherpos) - minetest.sound_play("piston_retract", { - pos = pos, - max_hear_distance = 20, - gain = 0.3, - }) - nodeupdate(pusherpos) -end - -local piston_on = function(pos, node) - local pistonspec = minetest.registered_nodes[node.name].mesecons_piston - - local dir = piston_get_direction(pistonspec.dir, node) - local np = vector.add(pos, dir) - local maxpush = mesecon.setting("piston_max_push", 15) - local success, stack, oldstack = mesecon.mvps_push(np, dir, maxpush) - if success then - minetest.set_node(pos, {param2 = node.param2, name = pistonspec.onname}) - minetest.set_node(np, {param2 = node.param2, name = pistonspec.pusher}) - minetest.sound_play("piston_extend", { - pos = pos, - max_hear_distance = 20, - gain = 0.3, - }) - mesecon.mvps_process_stack(stack) - mesecon.mvps_move_objects(np, dir, oldstack) - end -end - -local piston_off = function(pos, node) - local pistonspec = minetest.registered_nodes[node.name].mesecons_piston - minetest.set_node(pos, {param2 = node.param2, name = pistonspec.offname}) - piston_remove_pusher(pos, node) - - if pistonspec.sticky then - local maxpull = mesecon.setting("piston_max_pull", 15) - local dir = piston_get_direction(pistonspec.dir, node) - local pullpos = vector.add(pos, vector.multiply(dir, 2)) - local stack = mesecon.mvps_pull_single(pullpos, vector.multiply(dir, -1), maxpull) - mesecon.mvps_process_stack(pos, dir, stack) - end -end - -local piston_orientate = function(pos, placer) - -- not placed by player - if not placer then return end - - -- placer pitch in degrees - local pitch = placer:get_look_pitch() * (180 / math.pi) - - local node = minetest.get_node(pos) - local pistonspec = minetest.registered_nodes[node.name].mesecons_piston - - -- looking upwards (pitch > 55) / looking downwards (pitch < -55) - local nn = nil - if pitch > 55 then nn = {name = pistonspec.piston_down} end - if pitch < -55 then nn = {name = pistonspec.piston_up} end - - if nn then - minetest.set_node(pos, nn) - -- minetest.after, because on_placenode for unoriented piston must be processed first - minetest.after(0, mesecon.on_placenode, pos, nn) - end -end - - --- Horizontal pistons - -local pt = 3/16 -- pusher thickness - -local piston_pusher_box = { - type = "fixed", - fixed = { - {-2/16, -2/16, -.5 + pt, 2/16, 2/16, .5 + pt}, - {-.5 , -.5 , -.5 , .5 , .5 , -.5 + pt}, - } -} - -local piston_on_box = { - type = "fixed", - fixed = { - {-.5, -.5, -.5 + pt, .5, .5, .5} - } -} - - --- Normal (non-sticky) ones: - -local pistonspec_normal = { - offname = "mesecons_pistons:piston_normal_off", - onname = "mesecons_pistons:piston_normal_on", - dir = piston_facedir_direction, - pusher = "mesecons_pistons:piston_pusher_normal", - piston_down = "mesecons_pistons:piston_down_normal_off", - piston_up = "mesecons_pistons:piston_up_normal_off", -} - --- offstate -minetest.register_node("mesecons_pistons:piston_normal_off", { - description = "Piston", - tiles = { - "mesecons_piston_top.png", - "mesecons_piston_bottom.png", - "mesecons_piston_left.png", - "mesecons_piston_right.png", - "mesecons_piston_back.png", - "mesecons_piston_pusher_front.png" - }, - groups = {cracky = 3}, - paramtype2 = "facedir", - after_place_node = piston_orientate, - mesecons_piston = pistonspec_normal, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_on = piston_on, - rules = piston_get_rules - }} -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_normal_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_top.png", - "mesecons_piston_bottom.png", - "mesecons_piston_left.png", - "mesecons_piston_right.png", - "mesecons_piston_back.png", - "mesecons_piston_on_front.png" - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_normal_off", - after_dig_node = piston_remove_pusher, - node_box = piston_on_box, - selection_box = piston_on_box, - mesecons_piston = pistonspec_normal, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_off = piston_off, - rules = piston_get_rules - }} -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_pusher_normal", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_top.png", - "mesecons_piston_pusher_bottom.png", - "mesecons_piston_pusher_left.png", - "mesecons_piston_pusher_right.png", - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_front.png" - }, - paramtype = "light", - paramtype2 = "facedir", - diggable = false, - corresponding_piston = "mesecons_pistons:piston_normal_on", - selection_box = piston_pusher_box, - node_box = piston_pusher_box, -}) - --- Sticky ones - -local pistonspec_sticky = { - offname = "mesecons_pistons:piston_sticky_off", - onname = "mesecons_pistons:piston_sticky_on", - dir = piston_facedir_direction, - pusher = "mesecons_pistons:piston_pusher_sticky", - sticky = true, - piston_down = "mesecons_pistons:piston_down_sticky_off", - piston_up = "mesecons_pistons:piston_up_sticky_off", -} - --- offstate -minetest.register_node("mesecons_pistons:piston_sticky_off", { - description = "Sticky Piston", - tiles = { - "mesecons_piston_top.png", - "mesecons_piston_bottom.png", - "mesecons_piston_left.png", - "mesecons_piston_right.png", - "mesecons_piston_back.png", - "mesecons_piston_pusher_front_sticky.png" - }, - groups = {cracky = 3}, - paramtype2 = "facedir", - after_place_node = piston_orientate, - mesecons_piston = pistonspec_sticky, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_on = piston_on, - rules = piston_get_rules - }} -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_sticky_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_top.png", - "mesecons_piston_bottom.png", - "mesecons_piston_left.png", - "mesecons_piston_right.png", - "mesecons_piston_back.png", - "mesecons_piston_on_front.png" - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_sticky_off", - after_dig_node = piston_remove_pusher, - node_box = piston_on_box, - selection_box = piston_on_box, - mesecons_piston = pistonspec_sticky, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_off = piston_off, - rules = piston_get_rules - }} -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_pusher_sticky", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_top.png", - "mesecons_piston_pusher_bottom.png", - "mesecons_piston_pusher_left.png", - "mesecons_piston_pusher_right.png", - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_front_sticky.png" - }, - paramtype = "light", - paramtype2 = "facedir", - diggable = false, - corresponding_piston = "mesecons_pistons:piston_sticky_on", - selection_box = piston_pusher_box, - node_box = piston_pusher_box, -}) - --- --- --- UP --- --- - -local piston_up_pusher_box = { - type = "fixed", - fixed = { - {-2/16, -.5 - pt, -2/16, 2/16, .5 - pt, 2/16}, - {-.5 , .5 - pt, -.5 , .5 , .5 , .5}, - } -} - -local piston_up_on_box = { - type = "fixed", - fixed = { - {-.5, -.5, -.5 , .5, .5-pt, .5} - } -} - --- Normal - -local pistonspec_normal_up = { - offname = "mesecons_pistons:piston_up_normal_off", - onname = "mesecons_pistons:piston_up_normal_on", - dir = {x = 0, y = 1, z = 0}, - pusher = "mesecons_pistons:piston_up_pusher_normal" -} - --- offstate -minetest.register_node("mesecons_pistons:piston_up_normal_off", { - tiles = { - "mesecons_piston_pusher_front.png", - "mesecons_piston_back.png", - "mesecons_piston_left.png^[transformR270", - "mesecons_piston_right.png^[transformR90", - "mesecons_piston_bottom.png", - "mesecons_piston_top.png^[transformR180", - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_normal_off", - mesecons_piston = pistonspec_normal_up, - mesecons = {effector={ - action_on = piston_on, - rules = piston_up_rules, - }} -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_up_normal_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_on_front.png", - "mesecons_piston_back.png", - "mesecons_piston_left.png^[transformR270", - "mesecons_piston_right.png^[transformR90", - "mesecons_piston_bottom.png", - "mesecons_piston_top.png^[transformR180", - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_normal_off", - after_dig_node = piston_remove_pusher, - node_box = piston_up_on_box, - selection_box = piston_up_on_box, - mesecons_piston = pistonspec_normal_up, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_off = piston_off, - rules = piston_up_rules, - }} -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_up_pusher_normal", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_front.png", - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_left.png^[transformR270", - "mesecons_piston_pusher_right.png^[transformR90", - "mesecons_piston_pusher_bottom.png", - "mesecons_piston_pusher_top.png^[transformR180", - }, - paramtype = "light", - paramtype2 = "facedir", - diggable = false, - corresponding_piston = "mesecons_pistons:piston_up_normal_on", - selection_box = piston_up_pusher_box, - node_box = piston_up_pusher_box, -}) - - - --- Sticky - - -local pistonspec_sticky_up = { - offname = "mesecons_pistons:piston_up_sticky_off", - onname = "mesecons_pistons:piston_up_sticky_on", - dir = {x = 0, y = 1, z = 0}, - pusher = "mesecons_pistons:piston_up_pusher_sticky", - sticky = true -} - --- offstate -minetest.register_node("mesecons_pistons:piston_up_sticky_off", { - tiles = { - "mesecons_piston_pusher_front_sticky.png", - "mesecons_piston_back.png", - "mesecons_piston_left.png^[transformR270", - "mesecons_piston_right.png^[transformR90", - "mesecons_piston_bottom.png", - "mesecons_piston_top.png^[transformR180", - "mesecons_piston_tb.png" - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_sticky_off", - mesecons_piston = pistonspec_sticky_up, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_on = piston_on, - rules = piston_up_rules, - }} -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_up_sticky_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_on_front.png", - "mesecons_piston_back.png", - "mesecons_piston_left.png^[transformR270", - "mesecons_piston_right.png^[transformR90", - "mesecons_piston_bottom.png", - "mesecons_piston_top.png^[transformR180", - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_normal_off", - after_dig_node = piston_remove_pusher, - node_box = piston_up_on_box, - selection_box = piston_up_on_box, - mesecons_piston = pistonspec_sticky_up, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_off = piston_off, - rules = piston_up_rules, - }} -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_up_pusher_sticky", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_front_sticky.png", - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_left.png^[transformR270", - "mesecons_piston_pusher_right.png^[transformR90", - "mesecons_piston_pusher_bottom.png", - "mesecons_piston_pusher_top.png^[transformR180", - }, - paramtype = "light", - paramtype2 = "facedir", - diggable = false, - corresponding_piston = "mesecons_pistons:piston_up_sticky_on", - selection_box = piston_up_pusher_box, - node_box = piston_up_pusher_box, -}) - --- --- --- DOWN --- --- - -local piston_down_pusher_box = { - type = "fixed", - fixed = { - {-2/16, -.5 + pt, -2/16, 2/16, .5 + pt, 2/16}, - {-.5 , -.5 , -.5 , .5 , -.5 + pt, .5}, - } -} - -local piston_down_on_box = { - type = "fixed", - fixed = { - {-.5, -.5+pt, -.5 , .5, .5, .5} - } -} - - - --- Normal - -local pistonspec_normal_down = { - offname = "mesecons_pistons:piston_down_normal_off", - onname = "mesecons_pistons:piston_down_normal_on", - dir = {x = 0, y = -1, z = 0}, - pusher = "mesecons_pistons:piston_down_pusher_normal", -} - --- offstate -minetest.register_node("mesecons_pistons:piston_down_normal_off", { - tiles = { - "mesecons_piston_back.png", - "mesecons_piston_pusher_front.png", - "mesecons_piston_left.png^[transformR90", - "mesecons_piston_right.png^[transformR270", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_top.png", - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_normal_off", - mesecons_piston = pistonspec_normal_down, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_on = piston_on, - rules = piston_down_rules, - }} -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_down_normal_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_back.png", - "mesecons_piston_on_front.png", - "mesecons_piston_left.png^[transformR90", - "mesecons_piston_right.png^[transformR270", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_top.png", - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_normal_off", - after_dig_node = piston_remove_pusher, - node_box = piston_down_on_box, - selection_box = piston_down_on_box, - mesecons_piston = pistonspec_normal_down, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_off = piston_off, - rules = piston_down_rules, - }} -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_down_pusher_normal", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_front.png", - "mesecons_piston_pusher_left.png^[transformR90", - "mesecons_piston_pusher_right.png^[transformR270", - "mesecons_piston_pusher_bottom.png^[transformR180", - "mesecons_piston_pusher_top.png", - }, - paramtype = "light", - paramtype2 = "facedir", - diggable = false, - corresponding_piston = "mesecons_pistons:piston_down_normal_on", - selection_box = piston_down_pusher_box, - node_box = piston_down_pusher_box, -}) - --- Sticky - -local pistonspec_sticky_down = { - onname = "mesecons_pistons:piston_down_sticky_on", - offname = "mesecons_pistons:piston_down_sticky_off", - dir = {x = 0, y = -1, z = 0}, - pusher = "mesecons_pistons:piston_down_pusher_sticky", - sticky = true -} - --- offstate -minetest.register_node("mesecons_pistons:piston_down_sticky_off", { - tiles = { - "mesecons_piston_back.png", - "mesecons_piston_pusher_front_sticky.png", - "mesecons_piston_left.png^[transformR90", - "mesecons_piston_right.png^[transformR270", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_top.png", - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_sticky_off", - mesecons_piston = pistonspec_sticky_down, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_on = piston_on, - rules = piston_down_rules, - }} -}) - --- onstate -minetest.register_node("mesecons_pistons:piston_down_sticky_on", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_back.png", - "mesecons_piston_on_front.png", - "mesecons_piston_left.png^[transformR90", - "mesecons_piston_right.png^[transformR270", - "mesecons_piston_bottom.png^[transformR180", - "mesecons_piston_top.png", - }, - inventory_image = "mesecons_piston_top.png", - wield_image = "mesecons_piston_top.png", - groups = {cracky = 3, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - drop = "mesecons_pistons:piston_sticky_off", - after_dig_node = piston_remove_pusher, - node_box = piston_down_on_box, - selection_box = piston_down_on_box, - mesecons_piston = pistonspec_sticky_down, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector={ - action_off = piston_off, - rules = piston_down_rules, - }} -}) - --- pusher -minetest.register_node("mesecons_pistons:piston_down_pusher_sticky", { - drawtype = "nodebox", - tiles = { - "mesecons_piston_pusher_back.png", - "mesecons_piston_pusher_front_sticky.png", - "mesecons_piston_pusher_left.png^[transformR90", - "mesecons_piston_pusher_right.png^[transformR270", - "mesecons_piston_pusher_bottom.png^[transformR180", - "mesecons_piston_pusher_top.png", - }, - paramtype = "light", - paramtype2 = "facedir", - diggable = false, - corresponding_piston = "mesecons_pistons:piston_down_sticky_on", - selection_box = piston_down_pusher_box, - node_box = piston_down_pusher_box, -}) - - --- Register pushers as stoppers if they would be seperated from the piston -local piston_pusher_get_stopper = function (node, dir, stack, stackid) - if (stack[stackid + 1] - and stack[stackid + 1].node.name == minetest.registered_nodes[node.name].corresponding_piston - and stack[stackid + 1].node.param2 == node.param2) - or (stack[stackid - 1] - and stack[stackid - 1].node.name == minetest.registered_nodes[node.name].corresponding_piston - and stack[stackid - 1].node.param2 == node.param2) then - return false - end - return true -end - -local piston_pusher_up_down_get_stopper = function (node, dir, stack, stackid) - if (stack[stackid + 1] - and stack[stackid + 1].node.name == minetest.registered_nodes[node.name].corresponding_piston) - or (stack[stackid - 1] - and stack[stackid - 1].node.name == minetest.registered_nodes[node.name].corresponding_piston) then - return false - end - return true -end - -mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_normal", piston_pusher_get_stopper) -mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_sticky", piston_pusher_get_stopper) - -mesecon.register_mvps_stopper("mesecons_pistons:piston_up_pusher_normal", piston_pusher_up_down_get_stopper) -mesecon.register_mvps_stopper("mesecons_pistons:piston_up_pusher_sticky", piston_pusher_up_down_get_stopper) - -mesecon.register_mvps_stopper("mesecons_pistons:piston_down_pusher_normal", piston_pusher_up_down_get_stopper) -mesecon.register_mvps_stopper("mesecons_pistons:piston_down_pusher_sticky", piston_pusher_up_down_get_stopper) - - --- Register pistons as stoppers if they would be seperated from the stopper -local piston_up_down_get_stopper = function (node, dir, stack, stackid) - if (stack[stackid + 1] - and stack[stackid + 1].node.name == minetest.registered_nodes[node.name].mesecons_piston.pusher) - or (stack[stackid - 1] - and stack[stackid - 1].node.name == minetest.registered_nodes[node.name].mesecons_piston.pusher) then - return false - end - return true -end - -local piston_get_stopper = function (node, dir, stack, stackid) - pistonspec = minetest.registered_nodes[node.name].mesecons_piston - dir = piston_get_direction(pistonspec.dir, node) - local pusherpos = vector.add(stack[stackid].pos, dir) - local pushernode = minetest.get_node(pusherpos) - - if minetest.registered_nodes[node.name].mesecons_piston.pusher == pushernode.name then - for _, s in ipairs(stack) do - if vector.equals(s.pos, pusherpos) -- pusher is also to be pushed - and s.node.param2 == node.param2 then - return false - end - end - end - return true -end - -mesecon.register_mvps_stopper("mesecons_pistons:piston_normal_on", piston_get_stopper) -mesecon.register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_get_stopper) - -mesecon.register_mvps_stopper("mesecons_pistons:piston_up_normal_on", piston_up_down_get_stopper) -mesecon.register_mvps_stopper("mesecons_pistons:piston_up_sticky_on", piston_up_down_get_stopper) - -mesecon.register_mvps_stopper("mesecons_pistons:piston_down_normal_on", piston_up_down_get_stopper) -mesecon.register_mvps_stopper("mesecons_pistons:piston_down_sticky_on", piston_up_down_get_stopper) - ---craft recipes -minetest.register_craft({ - output = "mesecons_pistons:piston_normal_off 2", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"default:cobble", "default:steel_ingot", "default:cobble"}, - {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"}, - } -}) - -minetest.register_craft({ - output = "mesecons_pistons:piston_sticky_off", - recipe = { - {"mesecons_materials:glue"}, - {"mesecons_pistons:piston_normal_off"}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_powerplant/init.lua b/mods/ITEMS/mesecons/mesecons_powerplant/init.lua deleted file mode 100755 index a5e3327..0000000 --- a/mods/ITEMS/mesecons/mesecons_powerplant/init.lua +++ /dev/null @@ -1,31 +0,0 @@ --- The POWER_PLANT --- Just emits power. always. - -minetest.register_node("mesecons_powerplant:power_plant", { - drawtype = "plantlike", - visual_scale = 1, - tiles = {"jeija_power_plant.png"}, - inventory_image = "jeija_power_plant.png", - paramtype = "light", - walkable = false, - groups = {dig_immediate=3, mesecon = 2}, - light_source = default.LIGHT_MAX-9, - description="Power Plant", - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, -0.5+0.7, 0.3}, - }, - sounds = default.node_sound_leaves_defaults(), - mesecons = {receptor = { - state = mesecon.state.on - }} -}) - -minetest.register_craft({ - output = "mesecons_powerplant:power_plant 1", - recipe = { - {"group:mesecon_conductor_craftable"}, - {"group:mesecon_conductor_craftable"}, - {"group:sapling"}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/init.lua b/mods/ITEMS/mesecons/mesecons_pressureplates/init.lua deleted file mode 100755 index cd4529b..0000000 --- a/mods/ITEMS/mesecons/mesecons_pressureplates/init.lua +++ /dev/null @@ -1,94 +0,0 @@ -local pp_box_off = { - type = "fixed", - fixed = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, -} - -local pp_box_on = { - type = "fixed", - fixed = { -7/16, -8/16, -7/16, 7/16, -7.5/16, 7/16 }, -} - -local function pp_on_timer(pos, elapsed) - local node = minetest.get_node(pos) - local basename = minetest.registered_nodes[node.name].pressureplate_basename - - -- This is a workaround for a strange bug that occurs when the server is started - -- For some reason the first time on_timer is called, the pos is wrong - if not basename then return end - - local objs = minetest.get_objects_inside_radius(pos, 1) - local two_below = vector.add(pos, vector.new(0, -2, 0)) - - if objs[1] == nil and node.name == basename .. "_on" then - minetest.set_node(pos, {name = basename .. "_off"}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - elseif node.name == basename .. "_off" then - for k, obj in pairs(objs) do - local objpos = obj:getpos() - if objpos.y > pos.y-1 and objpos.y < pos.y then - minetest.set_node(pos, {name = basename .. "_on"}) - mesecon.receptor_on(pos, mesecon.rules.pplate ) - end - end - end - return true -end - --- Register a Pressure Plate --- offstate: name of the pressure plate when inactive --- onstate: name of the pressure plate when active --- description: description displayed in the player's inventory --- tiles_off: textures of the pressure plate when inactive --- tiles_on: textures of the pressure plate when active --- image: inventory and wield image of the pressure plate --- recipe: crafting recipe of the pressure plate - -function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe) - mesecon.register_node(basename, { - drawtype = "nodebox", - inventory_image = image_i, - wield_image = image_w, - paramtype = "light", - description = description, - pressureplate_basename = basename, - on_timer = pp_on_timer, - on_construct = function(pos) - minetest.get_node_timer(pos):start(mesecon.setting("pplate_interval", 0.1)) - end, - },{ - mesecons = {receptor = { state = mesecon.state.off, rules = mesecon.rules.pplate }}, - node_box = pp_box_off, - selection_box = pp_box_off, - groups = {snappy = 2, oddly_breakable_by_hand = 3}, - tiles = textures_off - },{ - mesecons = {receptor = { state = mesecon.state.on, rules = mesecon.rules.pplate }}, - node_box = pp_box_on, - selection_box = pp_box_on, - groups = {snappy = 2, oddly_breakable_by_hand = 3, not_in_creative_inventory = 1}, - tiles = textures_on - }) - - minetest.register_craft({ - output = basename .. "_off", - recipe = recipe, - }) -end - -mesecon.register_pressure_plate( - "mesecons_pressureplates:pressure_plate_wood", - "Wooden Pressure Plate", - {"jeija_pressure_plate_wood_off.png","jeija_pressure_plate_wood_off.png","jeija_pressure_plate_wood_off_edges.png"}, - {"jeija_pressure_plate_wood_on.png","jeija_pressure_plate_wood_on.png","jeija_pressure_plate_wood_on_edges.png"}, - "jeija_pressure_plate_wood_wield.png", - "jeija_pressure_plate_wood_inv.png", - {{"group:wood", "group:wood"}}) - -mesecon.register_pressure_plate( - "mesecons_pressureplates:pressure_plate_stone", - "Stone Pressure Plate", - {"jeija_pressure_plate_stone_off.png","jeija_pressure_plate_stone_off.png","jeija_pressure_plate_stone_off_edges.png"}, - {"jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on_edges.png"}, - "jeija_pressure_plate_stone_wield.png", - "jeija_pressure_plate_stone_inv.png", - {{"default:cobble", "default:cobble"}}) diff --git a/mods/ITEMS/mesecons/mesecons_random/init.lua b/mods/ITEMS/mesecons/mesecons_random/init.lua deleted file mode 100755 index 5a6ef24..0000000 --- a/mods/ITEMS/mesecons/mesecons_random/init.lua +++ /dev/null @@ -1,86 +0,0 @@ --- REMOVESTONE - -minetest.register_node("mesecons_random:removestone", { - tiles = {"jeija_removestone.png"}, - inventory_image = minetest.inventorycube("jeija_removestone_inv.png"), - groups = {cracky=3}, - description="Removestone", - sounds = default.node_sound_stone_defaults(), - mesecons = {effector = { - action_on = function (pos, node) - minetest.remove_node(pos) - mesecon.on_dignode(pos, node) - end - }} -}) - -minetest.register_craft({ - output = 'mesecons_random:removestone 4', - recipe = { - {"", "default:cobble", ""}, - {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"}, - {"", "default:cobble", ""}, - } -}) - --- GHOSTSTONE - -minetest.register_node("mesecons_random:ghoststone", { - description="Ghoststone", - tiles = {"jeija_ghoststone.png"}, - is_ground_content = true, - inventory_image = minetest.inventorycube("jeija_ghoststone_inv.png"), - groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), - mesecons = {conductor = { - state = mesecon.state.off, - rules = { --axes - {x = -1, y = 0, z = 0}, - {x = 1, y = 0, z = 0}, - {x = 0, y = -1, z = 0}, - {x = 0, y = 1, z = 0}, - {x = 0, y = 0, z = -1}, - {x = 0, y = 0, z = 1}, - }, - onstate = "mesecons_random:ghoststone_active" - }} -}) - -minetest.register_node("mesecons_random:ghoststone_active", { - drawtype = "airlike", - pointable = false, - walkable = false, - diggable = false, - sunlight_propagates = true, - paramtype = "light", - drop = "mesecons_random:ghoststone", - mesecons = {conductor = { - state = mesecon.state.on, - rules = { - {x = -1, y = 0, z = 0}, - {x = 1, y = 0, z = 0}, - {x = 0, y = -1, z = 0}, - {x = 0, y = 1, z = 0}, - {x = 0, y = 0, z = -1}, - {x = 0, y = 0, z = 1}, - }, - offstate = "mesecons_random:ghoststone" - }}, - on_construct = function(pos) - -- remove shadow - shadowpos = vector.add(pos, vector.new(0, 1, 0)) - if (minetest.get_node(shadowpos).name == "air") then - minetest.dig_node(shadowpos) - end - end -}) - - -minetest.register_craft({ - output = 'mesecons_random:ghoststone 4', - recipe = { - {"default:steel_ingot", "default:cobble", "default:steel_ingot"}, - {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"}, - {"default:steel_ingot", "default:cobble", "default:steel_ingot"}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_receiver/init.lua b/mods/ITEMS/mesecons/mesecons_receiver/init.lua deleted file mode 100755 index a5cf7d5..0000000 --- a/mods/ITEMS/mesecons/mesecons_receiver/init.lua +++ /dev/null @@ -1,259 +0,0 @@ -local rcvboxes = { - { -3/16, -3/16, -8/16 , 3/16, 3/16 , -13/32 }, -- the smaller bump - { -1/32, -1/32, -3/2 , 1/32, 1/32 , -1/2 }, -- the wire through the block - { -2/32, -1/2 , -.5 , 2/32, 0 , -.5002+3/32 }, -- the vertical wire bit - { -2/32, -1/2 , -7/16+0.002 , 2/32, -14/32, 16/32+0.001 } -- the horizontal wire -} - -local down_rcvboxes = { - {-6/16, -8/16, -6/16, 6/16, -7/16, 6/16}, -- Top plate - {-2/16, -6/16, -2/16, 2/16, -7/16, 2/16}, -- Bump - {-1/16, -8/16, -1/16, 1/16, -24/16, 1/16}, -- Wire through the block - {-1/16, -8/16, 6/16, 1/16, -7/16, 8/16}, -- Plate extension (North) - {-1/16, -8/16, -6/16, 1/16, -7/16, -8/16}, -- Plate extension (South) - {-8/16, -8/16, 1/16, -6/16, -7/16, -1/16}, -- Plate extension (West) - {6/16, -8/16, 1/16, 8/16, -7/16, -1/16}, -- Plate extension (East) -} - -local up_rcvboxes = { - {-6/16, -8/16, -6/16, 6/16, -7/16, 6/16}, -- Top plate - {-2/16, -6/16, -2/16, 2/16, -7/16, 2/16}, -- Bump - {-1/16, -6/16, -1/16, 1/16, 24/16, 1/16}, -- Wire through the block - {-1/16, -8/16, 6/16, 1/16, -7/16, 8/16}, -- Plate extension (North) - {-1/16, -8/16, -6/16, 1/16, -7/16, -8/16}, -- Plate extension (South) - {-8/16, -8/16, 1/16, -6/16, -7/16, -1/16}, -- Plate extension (West) - {6/16, -8/16, 1/16, 8/16, -7/16, -1/16}, -- Plate extension (East) -} - -local receiver_get_rules = function (node) - local rules = { {x = 1, y = 0, z = 0}, - {x = -2, y = 0, z = 0}} - if node.param2 == 2 then - rules = mesecon.rotate_rules_left(rules) - elseif node.param2 == 3 then - rules = mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) - elseif node.param2 == 0 then - rules = mesecon.rotate_rules_right(rules) - end - return rules -end - -mesecon.register_node("mesecons_receiver:receiver", { - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = false, - on_rotate = false, - selection_box = { - type = "fixed", - fixed = { -3/16, -8/16, -8/16, 3/16, 3/16, 8/16 } - }, - node_box = { - type = "fixed", - fixed = rcvboxes - }, - groups = {dig_immediate = 3, not_in_creative_inventory = 1}, - drop = "mesecons:wire_00000000_off", -}, { - tiles = { - "receiver_top_off.png", - "receiver_bottom_off.png", - "receiver_lr_off.png", - "receiver_lr_off.png", - "receiver_fb_off.png", - "receiver_fb_off.png", - }, - mesecons = {conductor = { - state = mesecon.state.off, - rules = receiver_get_rules, - onstate = "mesecons_receiver:receiver_on" - }} -}, { - tiles = { - "receiver_top_on.png", - "receiver_bottom_on.png", - "receiver_lr_on.png", - "receiver_lr_on.png", - "receiver_fb_on.png", - "receiver_fb_on.png", - }, - mesecons = {conductor = { - state = mesecon.state.on, - rules = receiver_get_rules, - offstate = "mesecons_receiver:receiver_off" - }} -}) - -mesecon.register_node("mesecons_receiver:receiver_up", { - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = false, - on_rotate = false, - selection_box = { - type = "fixed", - fixed = up_rcvboxes - }, - node_box = { - type = "fixed", - fixed = up_rcvboxes - }, - groups = {dig_immediate = 3, not_in_creative_inventory = 1}, - drop = "mesecons:wire_00000000_off", -}, { - tiles = {"mesecons_wire_off.png"}, - mesecons = {conductor = { - state = mesecon.state.off, - rules = {{x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=0, z=1}, - {x=0, y=0, z=-1}, - {x=0, y=1, z=0}, - {x=0, y=2, z=0}}, - onstate = "mesecons_receiver:receiver_up_on" - }} -}, { - tiles = {"mesecons_wire_on.png"}, - mesecons = {conductor = { - state = mesecon.state.on, - rules = {{x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=0, z=1}, - {x=0, y=0, z=-1}, - {x=0, y=1, z=0}, - {x=0, y=2, z=0}}, - offstate = "mesecons_receiver:receiver_up_off" - }} -}) - -mesecon.register_node("mesecons_receiver:receiver_down", { - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = false, - on_rotate = false, - selection_box = { - type = "fixed", - fixed = down_rcvboxes - }, - node_box = { - type = "fixed", - fixed = down_rcvboxes - }, - groups = {dig_immediate = 3, not_in_creative_inventory = 1}, - drop = "mesecons:wire_00000000_off", -}, { - tiles = {"mesecons_wire_off.png"}, - mesecons = {conductor = { - state = mesecon.state.off, - rules = {{x=1,y=0, z=0}, - {x=-1,y=0, z=0}, - {x=0, y=0, z=1}, - {x=0, y=0, z=-1}, - {x=0, y=-2,z=0}}, - onstate = "mesecons_receiver:receiver_down_on" - }} -}, { - tiles = {"mesecons_wire_on.png"}, - mesecons = {conductor = { - state = mesecon.state.on, - rules = {{x=1,y=0, z=0}, - {x=-1,y=0, z=0}, - {x=0, y=0, z=1}, - {x=0, y=0, z=-1}, - {x=0, y=-2,z=0}}, - offstate = "mesecons_receiver:receiver_down_off" - }} -}) - -function mesecon.receiver_get_pos_from_rcpt(pos, param2) - local rules = {{x = 2, y = 0, z = 0}} - if param2 == nil then param2 = minetest.get_node(pos).param2 end - local rcvtype = "mesecons_receiver:receiver_off" - local dir = minetest.facedir_to_dir(param2) - - if dir.x == 1 then - -- No action needed - elseif dir.z == -1 then - rules = mesecon.rotate_rules_left(rules) - elseif dir.x == -1 then - rules = mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) - elseif dir.z == 1 then - rules = mesecon.rotate_rules_right(rules) - elseif dir.y == -1 then - rules = mesecon.rotate_rules_up(rules) - rcvtype = "mesecons_receiver:receiver_up_off" - elseif dir.y == 1 then - rules = mesecon.rotate_rules_down(rules) - rcvtype = "mesecons_receiver:receiver_down_off" - end - local np = { x = pos.x + rules[1].x, - y = pos.y + rules[1].y, - z = pos.z + rules[1].z} - return np, rcvtype -end - -function mesecon.receiver_place(rcpt_pos) - local node = minetest.get_node(rcpt_pos) - local pos, rcvtype = mesecon.receiver_get_pos_from_rcpt(rcpt_pos, node.param2) - local nn = minetest.get_node(pos) - local param2 = minetest.dir_to_facedir(minetest.facedir_to_dir(node.param2)) - - if string.find(nn.name, "mesecons:wire_") ~= nil then - minetest.dig_node(pos) - minetest.set_node(pos, {name = rcvtype, param2 = param2}) - mesecon.on_placenode(pos, nn) - end -end - -function mesecon.receiver_remove(rcpt_pos, dugnode) - local pos = mesecon.receiver_get_pos_from_rcpt(rcpt_pos, dugnode.param2) - local nn = minetest.get_node(pos) - if string.find(nn.name, "mesecons_receiver:receiver_") ~=nil then - minetest.dig_node(pos) - local node = {name = "mesecons:wire_00000000_off"} - minetest.set_node(pos, node) - mesecon.on_placenode(pos, node) - end -end - -minetest.register_on_placenode(function (pos, node) - if minetest.get_item_group(node.name, "mesecon_needs_receiver") == 1 then - mesecon.receiver_place(pos) - end -end) - -minetest.register_on_dignode(function(pos, node) - if minetest.get_item_group(node.name, "mesecon_needs_receiver") == 1 then - mesecon.receiver_remove(pos, node) - end -end) - -minetest.register_on_placenode(function (pos, node) - if string.find(node.name, "mesecons:wire_") ~= nil then - local rules = { {x = 2, y = 0, z = 0}, - {x =-2, y = 0, z = 0}, - {x = 0, y = 0, z = 2}, - {x = 0, y = 0, z =-2}, - {x = 0, y = 2, z = 0}, - {x = 0, y = -2, z = 0}} - local i = 1 - while rules[i] ~= nil do - local np = { x = pos.x + rules[i].x, - y = pos.y + rules[i].y, - z = pos.z + rules[i].z} - if minetest.get_item_group(minetest.get_node(np).name, "mesecon_needs_receiver") == 1 then - mesecon.receiver_place(np) - end - i = i + 1 - end - end -end) - -function mesecon.buttonlike_onrotate(pos, node) - minetest.after(0, mesecon.receiver_remove, pos, node) - minetest.after(0, mesecon.receiver_place, pos) -end diff --git a/mods/ITEMS/mesecons/mesecons_solarpanel/init.lua b/mods/ITEMS/mesecons/mesecons_solarpanel/init.lua deleted file mode 100755 index bc5a408..0000000 --- a/mods/ITEMS/mesecons/mesecons_solarpanel/init.lua +++ /dev/null @@ -1,95 +0,0 @@ --- Solar Panel -minetest.register_node("mesecons_solarpanel:solar_panel_on", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel.png", }, - inventory_image = "jeija_solar_panel.png", - wield_image = "jeija_solar_panel.png", - paramtype = "light", - paramtype2 = "wallmounted", - walkable = false, - is_ground_content = true, - node_box = { - type = "wallmounted", - wall_bottom = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, - wall_top = { -7/16, 7/16, -7/16, 7/16, 8/16, 7/16 }, - wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 }, - }, - selection_box = { - type = "wallmounted", - wall_bottom = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, - wall_top = { -7/16, 7/16, -7/16, 7/16, 8/16, 7/16 }, - wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 }, - }, - drop = "mesecons_solarpanel:solar_panel_off", - groups = {dig_immediate=3, not_in_creative_inventory = 1}, - sounds = default.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.on - }} -}) - --- Solar Panel -minetest.register_node("mesecons_solarpanel:solar_panel_off", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel.png", }, - inventory_image = "jeija_solar_panel.png", - wield_image = "jeija_solar_panel.png", - paramtype = "light", - paramtype2 = "wallmounted", - walkable = false, - is_ground_content = true, - node_box = { - type = "wallmounted", - wall_bottom = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, - wall_top = { -7/16, 7/16, -7/16, 7/16, 8/16, 7/16 }, - wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 }, - }, - selection_box = { - type = "wallmounted", - wall_bottom = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, - wall_top = { -7/16, 7/16, -7/16, 7/16, 8/16, 7/16 }, - wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 }, - }, - groups = {dig_immediate=3}, - description="Solar Panel", - sounds = default.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.off - }} -}) - -minetest.register_craft({ - output = "mesecons_solarpanel:solar_panel_off 1", - recipe = { - {"mesecons_materials:silicon", "mesecons_materials:silicon"}, - {"mesecons_materials:silicon", "mesecons_materials:silicon"}, - } -}) - -minetest.register_abm( - {nodenames = {"mesecons_solarpanel:solar_panel_off"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local light = minetest.get_node_light(pos, nil) - - if light >= 12 then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_on", param2=node.param2}) - mesecon.receptor_on(pos) - end - end, -}) - -minetest.register_abm( - {nodenames = {"mesecons_solarpanel:solar_panel_on"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local light = minetest.get_node_light(pos, nil) - - if light < 12 then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_off", param2=node.param2}) - mesecon.receptor_off(pos) - end - end, -}) diff --git a/mods/ITEMS/mesecons/mesecons_stickyblocks/init.lua b/mods/ITEMS/mesecons/mesecons_stickyblocks/init.lua deleted file mode 100755 index e124143..0000000 --- a/mods/ITEMS/mesecons/mesecons_stickyblocks/init.lua +++ /dev/null @@ -1,16 +0,0 @@ --- Sticky blocks can be used together with pistons or movestones to push / pull --- structures that are "glued" together using sticky blocks - --- All sides sticky block -minetest.register_node("mesecons_stickyblocks:sticky_block_all", { - description = "All-Sides Sticky Block", - tiles = {"default_grass.png^default_footprint.png"}, - groups = {dig_immediate=2}, - mvps_sticky = function (pos, node) - local connected = {} - for _, r in ipairs(mesecon.rules.alldirs) do - table.insert(connected, vector.add(pos, r)) - end - return connected - end -}) diff --git a/mods/ITEMS/mesecons/mesecons_switch/init.lua b/mods/ITEMS/mesecons/mesecons_switch/init.lua deleted file mode 100755 index 3d59c0a..0000000 --- a/mods/ITEMS/mesecons/mesecons_switch/init.lua +++ /dev/null @@ -1,35 +0,0 @@ --- mesecons_switch - -mesecon.register_node("mesecons_switch:mesecon_switch", { - paramtype2="facedir", - description="Switch", - sounds = default.node_sound_stone_defaults(), - on_rightclick = function (pos, node) - if(mesecon.flipstate(pos, node) == "on") then - mesecon.receptor_on(pos) - else - mesecon.receptor_off(pos) - end - minetest.sound_play("mesecons_switch", {pos=pos}) - end -},{ - groups = {dig_immediate=2}, - tiles = { "mesecons_switch_side.png", "mesecons_switch_side.png", - "mesecons_switch_side.png", "mesecons_switch_side.png", - "mesecons_switch_side.png", "mesecons_switch_off.png"}, - mesecons = {receptor = { state = mesecon.state.off }} -},{ - groups = {dig_immediate=2, not_in_creative_inventory=1}, - tiles = { "mesecons_switch_side.png", "mesecons_switch_side.png", - "mesecons_switch_side.png", "mesecons_switch_side.png", - "mesecons_switch_side.png", "mesecons_switch_on.png"}, - mesecons = {receptor = { state = mesecon.state.on }} -}) - -minetest.register_craft({ - output = "mesecons_switch:mesecon_switch_off 2", - recipe = { - {"default:steel_ingot", "default:cobble", "default:steel_ingot"}, - {"group:mesecon_conductor_craftable","", "group:mesecon_conductor_craftable"}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_torch/depends.txt b/mods/ITEMS/mesecons/mesecons_torch/depends.txt deleted file mode 100755 index acaa924..0000000 --- a/mods/ITEMS/mesecons/mesecons_torch/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mesecons diff --git a/mods/ITEMS/mesecons/mesecons_torch/init.lua b/mods/ITEMS/mesecons/mesecons_torch/init.lua deleted file mode 100755 index 8b1632b..0000000 --- a/mods/ITEMS/mesecons/mesecons_torch/init.lua +++ /dev/null @@ -1,118 +0,0 @@ ---MESECON TORCHES - -local rotate_torch_rules = function (rules, param2) - if param2 == 5 then - return mesecon.rotate_rules_right(rules) - elseif param2 == 2 then - return mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) --180 degrees - elseif param2 == 4 then - return mesecon.rotate_rules_left(rules) - elseif param2 == 1 then - return mesecon.rotate_rules_down(rules) - elseif param2 == 0 then - return mesecon.rotate_rules_up(rules) - else - return rules - end -end - -local torch_get_output_rules = function(node) - local rules = { - {x = 1, y = 0, z = 0}, - {x = 0, y = 0, z = 1}, - {x = 0, y = 0, z =-1}, - {x = 0, y = 1, z = 0}, - {x = 0, y =-1, z = 0}} - - return rotate_torch_rules(rules, node.param2) -end - -local torch_get_input_rules = function(node) - local rules = {{x = -2, y = 0, z = 0}, - {x = -1, y = 1, z = 0}} - - return rotate_torch_rules(rules, node.param2) -end - -minetest.register_craft({ - output = "mesecons_torch:mesecon_torch_on 4", - recipe = { - {"group:mesecon_conductor_craftable"}, - {"default:stick"},} -}) - -local torch_selectionbox = -{ - type = "wallmounted", - wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1}, - wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1}, - wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1}, -} - -minetest.register_node("mesecons_torch:mesecon_torch_off", { - drawtype = "torchlike", - tiles = {"jeija_torches_off.png", "jeija_torches_off_ceiling.png", "jeija_torches_off_side.png"}, - inventory_image = "jeija_torches_off.png", - paramtype = "light", - walkable = false, - paramtype2 = "wallmounted", - selection_box = torch_selectionbox, - groups = {dig_immediate = 3, not_in_creative_inventory = 1}, - drop = "mesecons_torch:mesecon_torch_on", - mesecons = {receptor = { - state = mesecon.state.off, - rules = torch_get_output_rules - }} -}) - -minetest.register_node("mesecons_torch:mesecon_torch_on", { - drawtype = "torchlike", - tiles = {"jeija_torches_on.png", "jeija_torches_on_ceiling.png", "jeija_torches_on_side.png"}, - inventory_image = "jeija_torches_on.png", - wield_image = "jeija_torches_on.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - paramtype2 = "wallmounted", - selection_box = torch_selectionbox, - groups = {dig_immediate=3}, - light_source = default.LIGHT_MAX-5, - description="Mesecon Torch", - mesecons = {receptor = { - state = mesecon.state.on, - rules = torch_get_output_rules - }}, -}) - -minetest.register_abm({ - nodenames = {"mesecons_torch:mesecon_torch_off","mesecons_torch:mesecon_torch_on"}, - interval = 1, - chance = 1, - action = function(pos, node) - local is_powered = false - for _, rule in ipairs(torch_get_input_rules(node)) do - local src = vector.add(pos, rule) - if mesecon.is_power_on(src) then - is_powered = true - end - end - - if is_powered then - if node.name == "mesecons_torch:mesecon_torch_on" then - minetest.swap_node(pos, {name = "mesecons_torch:mesecon_torch_off", param2 = node.param2}) - mesecon.receptor_off(pos, torch_get_output_rules(node)) - end - elseif node.name == "mesecons_torch:mesecon_torch_off" then - minetest.swap_node(pos, {name = "mesecons_torch:mesecon_torch_on", param2 = node.param2}) - mesecon.receptor_on(pos, torch_get_output_rules(node)) - end - end -}) - --- Param2 Table (Block Attached To) --- 5 = z-1 --- 3 = x-1 --- 4 = z+1 --- 2 = x+1 --- 0 = y+1 --- 1 = y-1 diff --git a/mods/ITEMS/mesecons/mesecons_walllever/init.lua b/mods/ITEMS/mesecons/mesecons_walllever/init.lua deleted file mode 100755 index e9454cd..0000000 --- a/mods/ITEMS/mesecons/mesecons_walllever/init.lua +++ /dev/null @@ -1,63 +0,0 @@ --- WALL LEVER --- Basically a switch that can be attached to a wall --- Powers the block 2 nodes behind (using a receiver) -mesecon.register_node("mesecons_walllever:wall_lever", { - description="Lever", - drawtype = "mesh", - inventory_image = "jeija_wall_lever_inv.png", - wield_image = "jeija_wall_lever_inv.png", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, 3/16, 8/16, 8/16, 8/16 }, - }, - sounds = default.node_sound_wood_defaults(), - on_rightclick = function (pos, node) - if(mesecon.flipstate(pos, node) == "on") then - mesecon.receptor_on(pos, mesecon.rules.buttonlike_get(node)) - else - mesecon.receptor_off(pos, mesecon.rules.buttonlike_get(node)) - end - minetest.sound_play("mesecons_lever", {pos=pos}) - end -},{ - tiles = { - "jeija_wall_lever_lever_light_off.png", - "jeija_wall_lever_front.png", - "jeija_wall_lever_front_bump.png", - "jeija_wall_lever_back_edges.png" - }, - mesh="jeija_wall_lever_off.obj", - on_rotate = mesecon.buttonlike_onrotate, - mesecons = {receptor = { - rules = mesecon.rules.buttonlike_get, - state = mesecon.state.off - }}, - groups = {dig_immediate = 2, mesecon_needs_receiver = 1} -},{ - tiles = { - "jeija_wall_lever_lever_light_on.png", - "jeija_wall_lever_front.png", - "jeija_wall_lever_front_bump.png", - "jeija_wall_lever_back_edges.png" - }, - mesh="jeija_wall_lever_on.obj", - on_rotate = false, - mesecons = {receptor = { - rules = mesecon.rules.buttonlike_get, - state = mesecon.state.on - }}, - groups = {dig_immediate = 2, mesecon_needs_receiver = 1, not_in_creative_inventory = 1} -}) - -minetest.register_craft({ - output = "mesecons_walllever:wall_lever_off 2", - recipe = { - {"group:mesecon_conductor_craftable"}, - {"default:stone"}, - {"default:stick"}, - } -}) diff --git a/mods/ITEMS/mesecons/mesecons_wires/depends.txt b/mods/ITEMS/mesecons/mesecons_wires/depends.txt deleted file mode 100755 index acaa924..0000000 --- a/mods/ITEMS/mesecons/mesecons_wires/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mesecons diff --git a/mods/ITEMS/mesecons/mesecons_wires/init.lua b/mods/ITEMS/mesecons/mesecons_wires/init.lua deleted file mode 100755 index 60a8d76..0000000 --- a/mods/ITEMS/mesecons/mesecons_wires/init.lua +++ /dev/null @@ -1,248 +0,0 @@ --- naming scheme: wire:(xp)(zp)(xm)(zm)(xpyp)(zpyp)(xmyp)(zmyp)_on/off --- where x= x direction, z= z direction, y= y direction, p = +1, m = -1, e.g. xpym = {x=1, y=-1, z=0} --- The (xp)/(zpyp)/.. statements shall be replaced by either 0 or 1 --- Where 0 means the wire has no visual connection to that direction and --- 1 means that the wire visually connects to that other node. - --- ####################### --- ## Update wire looks ## --- ####################### - --- self_pos = pos of any mesecon node, from_pos = pos of conductor to getconnect for -local wire_getconnect = function (from_pos, self_pos) - local node = minetest.get_node(self_pos) - if minetest.registered_nodes[node.name] - and minetest.registered_nodes[node.name].mesecons then - -- rules of node to possibly connect to - local rules = {} - if (minetest.registered_nodes[node.name].mesecon_wire) then - rules = mesecon.rules.default - else - rules = mesecon.get_any_rules(node) - end - - for _, r in ipairs(mesecon.flattenrules(rules)) do - if (vector.equals(vector.add(self_pos, r), from_pos)) then - return true - end - end - end - return false -end - --- Update this node -local wire_updateconnect = function (pos) - local connections = {} - - for _, r in ipairs(mesecon.rules.default) do - if wire_getconnect(pos, vector.add(pos, r)) then - table.insert(connections, r) - end - end - - local nid = {} - for _, vec in ipairs(connections) do - -- flat component - if vec.x == 1 then nid[0] = "1" end - if vec.z == 1 then nid[1] = "1" end - if vec.x == -1 then nid[2] = "1" end - if vec.z == -1 then nid[3] = "1" end - - -- slopy component - if vec.y == 1 then - if vec.x == 1 then nid[4] = "1" end - if vec.z == 1 then nid[5] = "1" end - if vec.x == -1 then nid[6] = "1" end - if vec.z == -1 then nid[7] = "1" end - end - end - - local nodeid = (nid[0] or "0")..(nid[1] or "0")..(nid[2] or "0")..(nid[3] or "0") - ..(nid[4] or "0")..(nid[5] or "0")..(nid[6] or "0")..(nid[7] or "0") - - local state_suffix = string.find(minetest.get_node(pos).name, "_off") and "_off" or "_on" - minetest.set_node(pos, {name = "mesecons:wire_"..nodeid..state_suffix}) -end - -local update_on_place_dig = function (pos, node) - -- Update placed node (get_node again as it may have been dug) - local nn = minetest.get_node(pos) - if (minetest.registered_nodes[nn.name]) - and (minetest.registered_nodes[nn.name].mesecon_wire) then - wire_updateconnect(pos) - end - - -- Update nodes around it - local rules = {} - if minetest.registered_nodes[node.name] - and minetest.registered_nodes[node.name].mesecon_wire then - rules = mesecon.rules.default - else - rules = mesecon.get_any_rules(node) - end - if (not rules) then return end - - for _, r in ipairs(mesecon.flattenrules(rules)) do - local np = vector.add(pos, r) - if minetest.registered_nodes[minetest.get_node(np).name] - and minetest.registered_nodes[minetest.get_node(np).name].mesecon_wire then - wire_updateconnect(np) - end - end -end - -mesecon.register_autoconnect_hook("wire", update_on_place_dig) - --- ############################ --- ## Wire node registration ## --- ############################ --- Nodeboxes: -local box_center = {-1/16, -.5, -1/16, 1/16, -.5+1/16, 1/16} -local box_bump1 = { -2/16, -8/16, -2/16, 2/16, -13/32, 2/16 } - -local nbox_nid = -{ - [0] = {1/16, -.5, -1/16, 8/16, -.5+1/16, 1/16}, -- x positive - [1] = {-1/16, -.5, 1/16, 1/16, -.5+1/16, 8/16}, -- z positive - [2] = {-8/16, -.5, -1/16, -1/16, -.5+1/16, 1/16}, -- x negative - [3] = {-1/16, -.5, -8/16, 1/16, -.5+1/16, -1/16}, -- z negative - - [4] = {.5-1/16, -.5+1/16, -1/16, .5, .4999+1/16, 1/16}, -- x positive up - [5] = {-1/16, -.5+1/16, .5-1/16, 1/16, .4999+1/16, .5}, -- z positive up - [6] = {-.5, -.5+1/16, -1/16, -.5+1/16, .4999+1/16, 1/16}, -- x negative up - [7] = {-1/16, -.5+1/16, -.5, 1/16, .4999+1/16, -.5+1/16} -- z negative up -} - -local tiles_off = { "mesecons_wire_off.png" } -local tiles_on = { "mesecons_wire_on.png" } - -local selectionbox = -{ - type = "fixed", - fixed = {-.5, -.5, -.5, .5, -.5+4/16, .5} -} - --- go to the next nodeid (ex.: 01000011 --> 01000100) -local nid_inc = function() end -nid_inc = function (nid) - local i = 0 - while nid[i-1] ~= 1 do - nid[i] = (nid[i] ~= 1) and 1 or 0 - i = i + 1 - end - - -- BUT: Skip impossible nodeids: - if ((nid[0] == 0 and nid[4] == 1) or (nid[1] == 0 and nid[5] == 1) - or (nid[2] == 0 and nid[6] == 1) or (nid[3] == 0 and nid[7] == 1)) then - return nid_inc(nid) - end - - return i <= 8 -end - -local function register_wires() - local nid = {} - while true do - -- Create group specifiction and nodeid string (see note above for details) - local nodeid = (nid[0] or "0")..(nid[1] or "0")..(nid[2] or "0")..(nid[3] or "0") - ..(nid[4] or "0")..(nid[5] or "0")..(nid[6] or "0")..(nid[7] or "0") - - -- Calculate nodebox - local nodebox = {type = "fixed", fixed={box_center}} - for i=0,7 do - if nid[i] == 1 then - table.insert(nodebox.fixed, nbox_nid[i]) - end - end - - -- Add bump to nodebox if curved - if (nid[0] == 1 and nid[1] == 1) or (nid[1] == 1 and nid[2] == 1) - or (nid[2] == 1 and nid[3] == 1) or (nid[3] == 1 and nid[0] == 1) then - table.insert(nodebox.fixed, box_bump1) - end - - -- If nothing to connect to, still make a nodebox of a straight wire - if nodeid == "00000000" then - nodebox.fixed = {-8/16, -.5, -1/16, 8/16, -.5+1/16, 1/16} - end - - local rules = {} - if (nid[0] == 1) then table.insert(rules, vector.new( 1, 0, 0)) end - if (nid[1] == 1) then table.insert(rules, vector.new( 0, 0, 1)) end - if (nid[2] == 1) then table.insert(rules, vector.new(-1, 0, 0)) end - if (nid[3] == 1) then table.insert(rules, vector.new( 0, 0, -1)) end - - if (nid[0] == 1) then table.insert(rules, vector.new( 1, -1, 0)) end - if (nid[1] == 1) then table.insert(rules, vector.new( 0, -1, 1)) end - if (nid[2] == 1) then table.insert(rules, vector.new(-1, -1, 0)) end - if (nid[3] == 1) then table.insert(rules, vector.new( 0, -1, -1)) end - - if (nid[4] == 1) then table.insert(rules, vector.new( 1, 1, 0)) end - if (nid[5] == 1) then table.insert(rules, vector.new( 0, 1, 1)) end - if (nid[6] == 1) then table.insert(rules, vector.new(-1, 1, 0)) end - if (nid[7] == 1) then table.insert(rules, vector.new( 0, 1, -1)) end - - local meseconspec_off = { conductor = { - rules = rules, - state = mesecon.state.off, - onstate = "mesecons:wire_"..nodeid.."_on" - }} - - local meseconspec_on = { conductor = { - rules = rules, - state = mesecon.state.on, - offstate = "mesecons:wire_"..nodeid.."_off" - }} - - local groups_on = {dig_immediate = 3, mesecon_conductor_craftable = 1, - not_in_creative_inventory = 1} - local groups_off = {dig_immediate = 3, mesecon_conductor_craftable = 1} - if nodeid ~= "00000000" then - groups_off["not_in_creative_inventory"] = 1 - end - - mesecon.register_node(":mesecons:wire_"..nodeid, { - description = "Mesecon", - drawtype = "nodebox", - inventory_image = "mesecons_wire_inv.png", - wield_image = "mesecons_wire_inv.png", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - selection_box = selectionbox, - node_box = nodebox, - walkable = false, - drop = "mesecons:wire_00000000_off", - mesecon_wire = true, - on_rotate = false, - }, {tiles = tiles_off, mesecons = meseconspec_off, groups = groups_off}, - {tiles = tiles_on, mesecons = meseconspec_on, groups = groups_on}) - - if (nid_inc(nid) == false) then return end - end -end -register_wires() - --- ############## --- ## Crafting ## --- ############## -minetest.register_craft({ - type = "cooking", - output = "mesecons:wire_00000000_off 2", - recipe = "default:mese_crystal_fragment", - cooktime = 3, -}) - -minetest.register_craft({ - type = "cooking", - output = "mesecons:wire_00000000_off 18", - recipe = "default:mese_crystal", - cooktime = 15, -}) - -minetest.register_craft({ - type = "cooking", - output = "mesecons:wire_00000000_off 162", - recipe = "default:mese", - cooktime = 30, -}) diff --git a/mods/ITEMS/modpack.txt b/mods/ITEMS/modpack.txt deleted file mode 100644 index e69de29..0000000 diff --git a/mods/ITEMS/mushrooms/init.lua b/mods/ITEMS/mushrooms/init.lua deleted file mode 100644 index 9916bc3..0000000 --- a/mods/ITEMS/mushrooms/init.lua +++ /dev/null @@ -1,86 +0,0 @@ ---[[ - Mushrooms ---]] - - --- Namespace for functions - -mushrooms = {} - - --- Mushroom registration - -minetest.register_node("mushrooms:mushroom_red", { - description = "Red Mushroom", - tiles = {"mushrooms_mushroom_red.png"}, - inventory_image = "mushrooms_mushroom_red.png", - wield_image = "mushrooms_mushroom_red.png", - drawtype = "plantlike", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, attached_node = 1, flammable = 1}, - sounds = default.node_sound_leaves_defaults(), - on_use = minetest.item_eat(-5), - selection_box = { - type = "fixed", - fixed = {-4/16, -8/16, -4/16, 4/16, -1/16, 4/16}, - } -}) - -minetest.register_node("mushrooms:mushroom_brown", { - description = "Brown Mushroom", - tiles = {"mushrooms_mushroom_brown.png"}, - inventory_image = "mushrooms_mushroom_brown.png", - wield_image = "mushrooms_mushroom_brown.png", - drawtype = "plantlike", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - buildable_to = true, - groups = {snappy = 3, attached_node = 1, flammable = 1}, - sounds = default.node_sound_leaves_defaults(), - on_use = minetest.item_eat(1), - selection_box = { - type = "fixed", - fixed = {-3/16, -8/16, -3/16, 3/16, -2/16, 3/16}, - } -}) - - --- Mushroom spread and death - -function mushrooms.mushroom_spread(pos, node) - if minetest.get_node_light(pos, nil) == 15 then - minetest.remove_node(pos) - return - end - local positions = minetest.find_nodes_in_area_under_air( - {x = pos.x - 1, y = pos.y - 2, z = pos.z - 1}, - {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, - {"group:soil", "group:tree"}) - if #positions == 0 then - return - end - local pos2 = positions[math.random(#positions)] - pos2.y = pos2.y + 1 - if minetest.get_node_light(pos, 0.5) <= 3 and - minetest.get_node_light(pos2, 0.5) <= 3 then - minetest.set_node(pos2, {name = node.name}) - end -end - -minetest.register_abm({ - label = "Mushroom spread", - nodenames = {"mushrooms:mushroom_brown", "mushrooms:mushroom_red"}, - interval = 11, - chance = 150, - action = function(...) - mushrooms.mushroom_spread(...) - end, -}) - --- Aliases for schematic nodes -minetest.register_alias("flowers:mushroom_brown", "mushrooms:mushroom_brown") -minetest.register_alias("flowers:mushroom_red", "mushrooms:mushroom_red") diff --git a/mods/ITEMS/mushrooms/mod.conf b/mods/ITEMS/mushrooms/mod.conf deleted file mode 100644 index 3d1b196..0000000 --- a/mods/ITEMS/mushrooms/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = mushrooms diff --git a/mods/ITEMS/pipeworks/LICENSE b/mods/ITEMS/pipeworks/LICENSE deleted file mode 100644 index 5c31739..0000000 --- a/mods/ITEMS/pipeworks/LICENSE +++ /dev/null @@ -1,692 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser 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 Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey 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) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - --------------------------------------------------------------------------------- - -Some code in lua_tube.lua is copied from The Mesecons Mod for Minetest: - -License of source code ----------------------- -Copyright (C) 2011-2016 Mesecons Mod Developer Team and contributors - -This program is free software; you can redistribute the Mesecons Mod and/or -modify it under the terms of the GNU Lesser General Public License version 3 -published by the Free Software Foundation. - -This library 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the -Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -Boston, MA 02110-1301, USA. - - -GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 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. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser 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 -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/mods/ITEMS/pipeworks/autocrafter.lua b/mods/ITEMS/pipeworks/autocrafter.lua deleted file mode 100644 index f2edcfb..0000000 --- a/mods/ITEMS/pipeworks/autocrafter.lua +++ /dev/null @@ -1,413 +0,0 @@ -local autocrafterCache = {} -- caches some recipe data to avoid to call the slow function minetest.get_craft_result() every second - -local craft_time = 1 - -local function count_index(invlist) - local index = {} - for _, stack in pairs(invlist) do - if not stack:is_empty() then - local stack_name = stack:get_name() - index[stack_name] = (index[stack_name] or 0) + stack:get_count() - end - end - return index -end - -local function get_item_info(stack) - local name = stack:get_name() - local def = minetest.registered_items[name] - local description = def and def.description or "Unknown item" - return description, name -end - -local function get_craft(pos, inventory, hash) - local hash = hash or minetest.hash_node_position(pos) - local craft = autocrafterCache[hash] - if not craft then - local recipe = inventory:get_list("recipe") - local output, decremented_input = minetest.get_craft_result({method = "normal", width = 3, items = recipe}) - craft = {recipe = recipe, consumption=count_index(recipe), output = output, decremented_input = decremented_input} - autocrafterCache[hash] = craft - end - return craft -end - -local function autocraft(inventory, craft) - if not craft then return false end - local output_item = craft.output.item - - -- check if we have enough room in dst - if not inventory:room_for_item("dst", output_item) then return false end - local consumption = craft.consumption - local inv_index = count_index(inventory:get_list("src")) - -- check if we have enough material available - for itemname, number in pairs(consumption) do - if (not inv_index[itemname]) or inv_index[itemname] < number then return false end - end - -- consume material - for itemname, number in pairs(consumption) do - for i = 1, number do -- We have to do that since remove_item does not work if count > stack_max - inventory:remove_item("src", ItemStack(itemname)) - end - end - - -- craft the result into the dst inventory and add any "replacements" as well - inventory:add_item("dst", output_item) - for i = 1, 9 do - inventory:add_item("dst", craft.decremented_input.items[i]) - end - return true -end - --- returns false to stop the timer, true to continue running --- is started only from start_autocrafter(pos) after sanity checks and cached recipe -local function run_autocrafter(pos, elapsed) - local meta = minetest.get_meta(pos) - local inventory = meta:get_inventory() - local craft = get_craft(pos, inventory) - local output_item = craft.output.item - -- only use crafts that have an actual result - if output_item:is_empty() then - meta:set_string("infotext", "unconfigured Autocrafter: unknown recipe") - return false - end - - for step = 1, math.floor(elapsed/craft_time) do - local continue = autocraft(inventory, craft) - if not continue then return false end - end - return true -end - -local function start_crafter(pos) - local meta = minetest.get_meta(pos) - if meta:get_int("enabled") == 1 then - local timer = minetest.get_node_timer(pos) - if not timer:is_started() then - timer:start(craft_time) - end - end -end - -local function after_inventory_change(pos) - start_crafter(pos) -end - --- note, that this function assumes allready being updated to virtual items --- and doesn't handle recipes with stacksizes > 1 -local function after_recipe_change(pos, inventory) - local meta = minetest.get_meta(pos) - -- if we emptied the grid, there's no point in keeping it running or cached - if inventory:is_empty("recipe") then - minetest.get_node_timer(pos):stop() - autocrafterCache[minetest.hash_node_position(pos)] = nil - meta:set_string("infotext", "unconfigured Autocrafter") - inventory:set_stack("output", 1, "") - return - end - local recipe_changed = false - local recipe = inventory:get_list("recipe") - - local hash = minetest.hash_node_position(pos) - local craft = autocrafterCache[hash] - - if craft then - -- check if it changed - local cached_recipe = craft.recipe - for i = 1, 9 do - if recipe[i]:get_name() ~= cached_recipe[i]:get_name() then - autocrafterCache[hash] = nil -- invalidate recipe - craft = nil - break - end - end - end - - craft = craft or get_craft(pos, inventory, hash) - local output_item = craft.output.item - local description, name = get_item_info(output_item) - meta:set_string("infotext", string.format("'%s' Autocrafter (%s)", description, name)) - inventory:set_stack("output", 1, output_item) - - after_inventory_change(pos) -end - --- clean out unknown items and groups, which would be handled like unknown items in the crafting grid --- if minetest supports query by group one day, this might replace them --- with a canonical version instead -local function normalize(item_list) - for i = 1, #item_list do - local name = item_list[i] - if not minetest.registered_items[name] then - item_list[i] = "" - end - end - return item_list -end - -local function on_output_change(pos, inventory, stack) - if not stack then - inventory:set_list("output", {}) - inventory:set_list("recipe", {}) - else - local input = minetest.get_craft_recipe(stack:get_name()) - if not input.items or input.type ~= "normal" then return end - local items, width = normalize(input.items), input.width - local item_idx, width_idx = 1, 1 - for i = 1, 9 do - if width_idx <= width then - inventory:set_stack("recipe", i, items[item_idx]) - item_idx = item_idx + 1 - else - inventory:set_stack("recipe", i, ItemStack("")) - end - width_idx = (width_idx < 3) and (width_idx + 1) or 1 - end - -- we'll set the output slot in after_recipe_change to the actual result of the new recipe - end - after_recipe_change(pos, inventory) -end - --- returns false if we shouldn't bother attempting to start the timer again after this -local function update_meta(meta, enabled) - local state = enabled and "on" or "off" - meta:set_int("enabled", enabled and 1 or 0) - local fs = "size[8,12]".. - "list[context;recipe;0,0;3,3;]".. - "image[3,1;1,1;gui_hb_bg.png^[colorize:#141318:255]".. - "list[context;output;3,1;1,1;]".. - "image_button[3,2;1,0.6;pipeworks_button_" .. state .. ".png;" .. state .. ";;;false;pipeworks_button_interm.png]" .. - "list[context;src;0,4.5;8,3;]".. - "list[context;dst;4,0;4,3;]".. - init.gui_bg.. - init.gui_bg_img.. - init.gui_slots.. - init.get_hotbar_bg(0,8) .. - "list[current_player;main;0,8;8,4;]" .. - "listring[current_player;main]".. - "listring[context;src]" .. - "listring[current_player;main]".. - "listring[context;dst]" .. - "listring[current_player;main]" - if minetest.get_modpath("digilines") then - fs = fs.."field[1,3.5;4,1;channel;Channel;${channel}]" - fs = fs.."button_exit[5,3.2;2,1;save;Save]" - end - meta:set_string("formspec",fs) - - -- toggling the button doesn't quite call for running a recipe change check - -- so instead we run a minimal version for infotext setting only - -- this might be more written code, but actually executes less - local output = meta:get_inventory():get_stack("output", 1) - if output:is_empty() then -- doesn't matter if paused or not - meta:set_string("infotext", "unconfigured Autocrafter") - return false - end - - local description, name = get_item_info(output) - local infotext = enabled and string.format("'%s' Autocrafter (%s)", description, name) - or string.format("paused '%s' Autocrafter", description) - - meta:set_string("infotext", infotext) - return enabled -end - --- 1st version of the autocrafter had actual items in the crafting grid --- the 2nd replaced these with virtual items, dropped the content on update and set "virtual_items" to string "1" --- the third added an output inventory, changed the formspec and added a button for enabling/disabling --- so we work out way backwards on this history and update each single case to the newest version -local function upgrade_autocrafter(pos, meta) - local meta = meta or minetest.get_meta(pos) - local inv = meta:get_inventory() - - if inv:get_size("output") == 0 then -- we are version 2 or 1 - inv:set_size("output", 1) - -- migrate the old autocrafters into an "enabled" state - update_meta(meta, true) - - if meta:get_string("virtual_items") == "1" then -- we are version 2 - -- we allready dropped stuff, so lets remove the metadatasetting (we are not being called again for this node) - meta:set_string("virtual_items", "") - else -- we are version 1 - local recipe = inv:get_list("recipe") - if not recipe then return end - for idx, stack in ipairs(recipe) do - if not stack:is_empty() then - minetest.add_item(pos, stack) - stack:set_count(1) - stack:set_wear(0) - inv:set_stack("recipe", idx, stack) - end - end - end - - -- update the recipe, cache, and start the crafter - autocrafterCache[minetest.hash_node_position(pos)] = nil - after_recipe_change(pos, inv) - end -end - -minetest.register_node("pipeworks:autocrafter", { - description = "Autocrafter", - drawtype = "normal", - tiles = {"pipeworks_autocrafter.png"}, - groups = {snappy = 3, tubedevice = 1, tubedevice_receiver = 1}, - tube = {insert_object = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local added = inv:add_item("src", stack) - after_inventory_change(pos) - return added - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:room_for_item("src", stack) - end, - input_inventory = "dst", - connect_sides = {left = 1, right = 1, front = 1, back = 1, top = 1, bottom = 1}}, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("src", 3*8) - inv:set_size("recipe", 3*3) - inv:set_size("dst", 4*3) - inv:set_size("output", 1) - update_meta(meta, false) - end, - on_receive_fields = function(pos, formname, fields, sender) - if not pipeworks.may_configure(pos, sender) then return end - local meta = minetest.get_meta(pos) - if fields.on then - update_meta(meta, false) - minetest.get_node_timer(pos):stop() - elseif fields.off then - if update_meta(meta, true) then - start_crafter(pos) - end - elseif fields.save then - meta:set_string("channel",fields.channel) - end - end, - can_dig = function(pos, player) - upgrade_autocrafter(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return (inv:is_empty("src") and inv:is_empty("dst")) - end, - after_place_node = pipeworks.scan_for_tube_objects, - after_dig_node = function(pos) - pipeworks.scan_for_tube_objects(pos) - end, - on_destruct = function(pos) - autocrafterCache[minetest.hash_node_position(pos)] = nil - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if not pipeworks.may_configure(pos, player) then return 0 end - upgrade_autocrafter(pos) - local inv = minetest.get_meta(pos):get_inventory() - if listname == "recipe" then - stack:set_count(1) - inv:set_stack(listname, index, stack) - after_recipe_change(pos, inv) - return 0 - elseif listname == "output" then - on_output_change(pos, inv, stack) - return 0 - end - after_inventory_change(pos) - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if not pipeworks.may_configure(pos, player) then - minetest.log("action", string.format("%s attempted to take from autocrafter at %s", player:get_player_name(), minetest.pos_to_string(pos))) - return 0 - end - upgrade_autocrafter(pos) - local inv = minetest.get_meta(pos):get_inventory() - if listname == "recipe" then - inv:set_stack(listname, index, ItemStack("")) - after_recipe_change(pos, inv) - return 0 - elseif listname == "output" then - on_output_change(pos, inv, nil) - return 0 - end - after_inventory_change(pos) - return stack:get_count() - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - if not pipeworks.may_configure(pos, player) then return 0 end - upgrade_autocrafter(pos) - local inv = minetest.get_meta(pos):get_inventory() - local stack = inv:get_stack(from_list, from_index) - - if to_list == "output" then - on_output_change(pos, inv, stack) - return 0 - elseif from_list == "output" then - on_output_change(pos, inv, nil) - if to_list ~= "recipe" then - return 0 - end -- else fall through to recipe list handling - end - - if from_list == "recipe" or to_list == "recipe" then - if from_list == "recipe" then - inv:set_stack(from_list, from_index, ItemStack("")) - end - if to_list == "recipe" then - stack:set_count(1) - inv:set_stack(to_list, to_index, stack) - end - after_recipe_change(pos, inv) - return 0 - end - - after_inventory_change(pos) - return count - end, - on_timer = run_autocrafter, - digiline = { - receptor = {}, - effector = { - action = function(pos,node,channel,msg) - local meta = minetest.get_meta(pos) - if channel ~= meta:get_string("channel") then return end - if type(msg) == "table" then - if #msg < 3 then return end - local inv = meta:get_inventory() - for y=0,2,1 do - for x=1,3,1 do - local slot = y*3+x - if minetest.registered_items[msg[y+1][x]] then - inv:set_stack("recipe",slot,ItemStack(msg[y+1][x])) - else - inv:set_stack("recipe",slot,ItemStack("")) - end - end - end - after_recipe_change(pos,inv) - elseif msg == "off" then - update_meta(meta, false) - minetest.get_node_timer(pos):stop() - elseif msg == "on" then - if update_meta(meta, true) then - start_crafter(pos) - end - elseif msg == "single" then - run_autocrafter(pos,1) - end - end, - }, - }, -}) - -minetest.register_craft( { - output = "pipeworks:autocrafter 2", - recipe = { - { "default:steel_ingot", "default:mese_crystal", "default:steel_ingot" }, - { "homedecor:plastic_sheeting", "default:steel_ingot", "homedecor:plastic_sheeting" }, - { "default:steel_ingot", "default:mese_crystal", "default:steel_ingot" } - }, -}) diff --git a/mods/ITEMS/pipeworks/autoplace_pipes.lua b/mods/ITEMS/pipeworks/autoplace_pipes.lua deleted file mode 100644 index a3f0b65..0000000 --- a/mods/ITEMS/pipeworks/autoplace_pipes.lua +++ /dev/null @@ -1,214 +0,0 @@ ---[[ - - autorouting for pipes - - To connect pipes to some node, include this in the node def... - - pipe_connections = { - pattern = , -- if supplied, search for this pattern instead of the exact node name - left = , -- true (or 1) if the left side of the node needs to connect to a pipe - right = , -- or from the right side, etc. - top = , - bottom = , - front = , - back = , - left_param2 = , -- the node must have this param2 to connect from the left - right_param2 = , -- or right, etc. - top_param2 = , -- Omit some or all of these to skip checking param2 for those sides - bottom_param2 = , - front_param2 = , - back_param2 = , - }, - - ...then add, pipeworks.scan_for_pipe_objects(pos) - to your node's after_dig_node and after_place_node callbacks. - -]]-- - --- get the axis dir (just 6 faces) of target node, assumes the pipe is the axis - -function pipeworks.get_axis_dir(nodetable, pattern) - local pxm,pxp,pym,pyp,pzm,pzp - - if string.find(nodetable.nxm.name, pattern) - and minetest.facedir_to_dir(nodetable.nxm.param2).x ~= 0 then - pxm=1 - end - - if string.find(nodetable.nxp.name, pattern) - and minetest.facedir_to_dir(nodetable.nxp.param2).x ~= 0 then - pxp=1 - end - - if string.find(nodetable.nzm.name, pattern) - and minetest.facedir_to_dir(nodetable.nzm.param2).z ~= 0 then - pzm=1 - end - - if string.find(nodetable.nzp.name, pattern) - and minetest.facedir_to_dir(nodetable.nzp.param2).z ~= 0 then - pzp=1 - end - - if string.find(nodetable.nym.name, pattern) - and minetest.facedir_to_dir(nodetable.nym.param2).y ~= 0 then - pym=1 - end - - if string.find(nodetable.nyp.name, pattern) - and minetest.facedir_to_dir(nodetable.nyp.param2).y ~= 0 then - pyp=1 - end - local match = pxm or pxp or pym or pyp or pzm or pzp - return match,pxm,pxp,pym,pyp,pzm,pzp -end - -local tube_table = {[0] = 1, 2, 2, 4, 2, 4, 4, 5, 2, 3, 4, 6, 4, 6, 5, 7, 2, 4, 3, 6, 4, 5, 6, 7, 4, 6, 6, 8, 5, 7, 7, 9, 2, 4, 4, 5, 3, 6, 6, 7, 4, 6, 5, 7, 6, 8, 7, 9, 4, 5, 6, 7, 6, 7, 8, 9, 5, 7, 7, 9, 7, 9, 9, 10} -local tube_table_facedirs = {[0] = 0, 0, 5, 0, 3, 4, 3, 0, 2, 0, 2, 0, 6, 4, 3, 0, 7, 12, 5, 12, 7, 4, 5, 5, 18, 20, 16, 0, 7, 4, 7, 0, 1, 8, 1, 1, 1, 13, 1, 1, 10, 8, 2, 2, 17, 4, 3, 6, 9, 9, 9, 9, 21, 13, 1, 1, 10, 10, 11, 2, 19, 4, 3, 0} - -local function autoroute_pipes(pos) - local nctr = minetest.get_node(pos) - local state = "_empty" - if (string.find(nctr.name, "pipeworks:pipe_") == nil) then return end - if (string.find(nctr.name, "_loaded") ~= nil) then state = "_loaded" end - local nsurround = pipeworks.scan_pipe_surroundings(pos) - - if nsurround == 0 then nsurround = 9 end - minetest.swap_node(pos, {name = "pipeworks:pipe_"..tube_table[nsurround]..state, - param2 = tube_table_facedirs[nsurround]}) -end - -function pipeworks.scan_for_pipe_objects(pos) - autoroute_pipes({ x=pos.x-1, y=pos.y , z=pos.z }) - autoroute_pipes({ x=pos.x+1, y=pos.y , z=pos.z }) - autoroute_pipes({ x=pos.x , y=pos.y-1, z=pos.z }) - autoroute_pipes({ x=pos.x , y=pos.y+1, z=pos.z }) - autoroute_pipes({ x=pos.x , y=pos.y , z=pos.z-1 }) - autoroute_pipes({ x=pos.x , y=pos.y , z=pos.z+1 }) - autoroute_pipes(pos) -end - --- auto-rotation code for various devices the pipes attach to - -function pipeworks.scan_pipe_surroundings(pos) - local pxm=0 - local pxp=0 - local pym=0 - local pyp=0 - local pzm=0 - local pzp=0 - - local nxm = minetest.get_node({ x=pos.x-1, y=pos.y , z=pos.z }) - local nxp = minetest.get_node({ x=pos.x+1, y=pos.y , z=pos.z }) - local nym = minetest.get_node({ x=pos.x , y=pos.y-1, z=pos.z }) - local nyp = minetest.get_node({ x=pos.x , y=pos.y+1, z=pos.z }) - local nzm = minetest.get_node({ x=pos.x , y=pos.y , z=pos.z-1 }) - local nzp = minetest.get_node({ x=pos.x , y=pos.y , z=pos.z+1 }) - - local nodetable = { - nxm = nxm, - nxp = nxp, - nym = nym, - nyp = nyp, - nzm = nzm, - nzp = nzp - } - --- standard handling for pipes... - - if string.find(nxm.name, "pipeworks:pipe_") then pxm=1 end - if string.find(nxp.name, "pipeworks:pipe_") then pxp=1 end - if string.find(nym.name, "pipeworks:pipe_") then pym=1 end - if string.find(nyp.name, "pipeworks:pipe_") then pyp=1 end - if string.find(nzm.name, "pipeworks:pipe_") then pzm=1 end - if string.find(nzp.name, "pipeworks:pipe_") then pzp=1 end - --- Special handling for valves... - - local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:valve") - if match then - pxm = a or pxm - pxp = b or pxp - pym = c or pym - pyp = d or pyp - pzm = e or pzm - pzp = f or pzp - end - --- ...flow sensors... - - local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:flow_sensor") - if match then - pxm = a or pxm - pxp = b or pxp - pym = c or pym - pyp = d or pyp - pzm = e or pzm - pzp = f or pzp - end - --- ...sealed pipe entry/exit... - - local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:entry_panel") - if match then - pxm = a or pxm - pxp = b or pxp - pym = c or pym - pyp = d or pyp - pzm = e or pzm - pzp = f or pzp - end - --- ... other nodes - - local def_left = minetest.registered_nodes[nxp.name] -- the node that {pos} is to the left of (not the - local def_right = minetest.registered_nodes[nxm.name] -- ...note that is AT the left!), etc. - local def_bottom = minetest.registered_nodes[nyp.name] - local def_top = minetest.registered_nodes[nym.name] - local def_front = minetest.registered_nodes[nzp.name] - local def_back = minetest.registered_nodes[nzm.name] - - if def_left and def_left.pipe_connections and def_left.pipe_connections.left - and (not def_left.pipe_connections.pattern or string.find(nxp.name, def_left.pipe_connections.pattern)) - and (not def_left.pipe_connections.left_param2 or (nxp.param2 == def_left.pipe_connections.left_param2)) then - pxp = 1 - end - if def_right and def_right.pipe_connections and def_right.pipe_connections.right - and (not def_right.pipe_connections.pattern or string.find(nxm.name, def_right.pipe_connections.pattern)) - and (not def_right.pipe_connections.right_param2 or (nxm.param2 == def_right.pipe_connections.right_param2)) then - pxm = 1 - end - if def_top and def_top.pipe_connections and def_top.pipe_connections.top - and (not def_top.pipe_connections.pattern or string.find(nym.name, def_top.pipe_connections.pattern)) - and (not def_top.pipe_connections.top_param2 or (nym.param2 == def_top.pipe_connections.top_param2)) then - pym = 1 - end - if def_bottom and def_bottom.pipe_connections and def_bottom.pipe_connections.bottom - and (not def_bottom.pipe_connections.pattern or string.find(nyp.name, def_bottom.pipe_connections.pattern)) - and (not def_bottom.pipe_connections.bottom_param2 or (nyp.param2 == def_bottom.pipe_connections.bottom_param2)) then - pyp = 1 - end - if def_front and def_front.pipe_connections and def_front.pipe_connections.front - and (not def_front.pipe_connections.pattern or string.find(nzp.name, def_front.pipe_connections.pattern)) - and (not def_front.pipe_connections.front_param2 or (nzp.param2 == def_front.pipe_connections.front_param2)) then - pzp = 1 - end - if def_back and def_back.pipe_connections and def_back.pipe_connections.back - and (not def_back.pipe_connections.pattern or string.find(nzm.name, def_back.pipe_connections.pattern)) - and (not def_back.pipe_connections.back_param2 or (nzm.param2 == def_back.pipe_connections.back_param2)) then - pzm = 1 - end - - print("stage 2 returns "..pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp.. - " for nodes surrounding "..minetest.get_node(pos).name.." at "..minetest.pos_to_string(pos)) - return pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp -end - -function pipeworks.look_for_stackable_tanks(pos) - local tym = minetest.get_node({ x=pos.x , y=pos.y-1, z=pos.z }) - - if string.find(tym.name, "pipeworks:storage_tank_") ~= nil or - string.find(tym.name, "pipeworks:expansion_tank_") ~= nil then - minetest.add_node(pos, { name = "pipeworks:expansion_tank_0", param2 = tym.param2}) - end -end diff --git a/mods/ITEMS/pipeworks/changelog.txt b/mods/ITEMS/pipeworks/changelog.txt deleted file mode 100644 index 251df29..0000000 --- a/mods/ITEMS/pipeworks/changelog.txt +++ /dev/null @@ -1,93 +0,0 @@ -Changelog ---------- - -2013-01-13: Tubes can transport items now! Namely, I added Novatux/Nore's item -transport mod as a default part of this mod, to make tubes do something useful! -Thanks to Nore and RealBadAngel for the code contributions! - -2013-01-05: made storage tanks connect from top/bottom, made storage tank and -pipe textures use the ^ combine operator so they can show the actual liquid -going through the pipes/tanks. - -2013-01-04 (a bit later): Made pipes able to carry water! It was just a minor -logic error resulting from moving the water flowing code into it's own file -when I originally imported it. Many thanks to Mauvebic for writing it! - -2013-01-04: First stage of integrating Mauvebic's water flowing code. This is -experimental and doesn't move water yet - but at least it doesn't break -anything :-) - -2013-01-01: Various minor tweaks to textures, facedir settings, some other -stuff. Changed crafting recipes to account for revamped pumps, valves, etc. -Now requires the moreores mod and most recent git (for mese crystal fragments) -to craft a pump. Added a "sealed" entry/exit panel (really just a horizontal -pipe with a metal panel overlayed into the middle). Also, tweaked pipes to -always drop the empty ones. Revamped pumps so that now they should sit in/on -liquid and be connected only from the top, relegated grates to decorational- -only, added outlet spigot. Got rid of a few obsolete textures. Got rid of -that whole _x and _z naming thing - now all directional devices (pumps, valves, -spigots, tanks) use facedir. Valves, spigots no longer auto-rotate to find -nearby pipes. - -2012-09-17: Added test object for pneumatic tube autorouting code, made tubes -connect to it and any object that bears groups={tubedevice=1} (connects to any -side) - -2012-09-05: All recipes doubled except for junglegrass -> plastic sheet (since -that is derived from home decor) - -2012-09-02: Fixed plastic sheeting recipe. Added crafting recipes for various -objects, with options: If homedecor is installed, use the plastic sheeting -therein. If not, we define it manually. If the Technic mod is installed, -don't define any recipes at all. Also removed the extra "loaded!" messages and -tweaked the default pipe alias to point to something that is actually visible -:-) - -2012-09-01: flattened wielded pipe segment. - -2012-08-24: Added square-ish pneumatic tubes with their own autoplace code -(does not connect to steel pipes or pipe-oriented devices), then revised their -textures shortly after. Fixed a recursion bug that sometimes caused a stack -overflow. Old pipes were overriding the pipeworks:pipe defintion that belongs -with the new pipes. - -2012-08-22: Added outlet grate, made it participate in autoplace algorithm. -Extended storage tank to show fill level in 10% steps (0% to 100%). Added -"expansion tank" that appears if the user stacks tanks upwards. (Downwards is -not checked). - -2012-08-21: Made storage tank participate in autoplace algorithm. Tuned API a -little to allow for more flexible placement. Re-organized code a bit to allow -for some upcoming rules changes. Made storage tanks' upper/lower fittins and -intake grate participate in autoplace algorithm. - -2012-08-20: Added temporary nodes for storage tank and intake grating, but -without autoplace. - -2012-08-19: Pumps and valves now fully participate in the -auto-rotate/auto-place algorithm. - -2012-08-18: Total rewrite again. All pipes are now nice and round-looking, and -they auto-connect! Also added temporary nodes for pump and valve (each with an -on/off setting - punch to change). No crafting recipes yet and the pipes still -don't do anything useful yet. Soon. - -2012-08-06: Moved this changelog off the forum post and into a separate file. - -2012-08-05 (multiple updates): Rewrote pipeworks to use loops and tables to -create the nodes. Requires far less code now. Added -X, +X, -Y, +Y, -Z, +Z -capped stubs and a short centered horizontal segment. Changed node definitions -so that the aforementioned "short centered" segment is given on dig/drop. -Renamed it to just "pipeworks:pipe" (and pipe_loaded). Added empty/loaded -indicator images to the capped ends, removed some redundant comments. Made the -empty/loaded indication at the capped end more prominent. - -2012-07-21: Added screenshot showing pipes as they look now that nodebox -texture rotation is fixed. - -2012-07-18: Changed the mod name and all internals to 'pipeworks' instead of -'pipes'... after a couple of mistakes :-) - -2012-07-12: moved project to github. - -2012-06-23: Initial release, followed by reworking the textures a bit. diff --git a/mods/ITEMS/pipeworks/compat-chests.lua b/mods/ITEMS/pipeworks/compat-chests.lua deleted file mode 100644 index 3d55719..0000000 --- a/mods/ITEMS/pipeworks/compat-chests.lua +++ /dev/null @@ -1,242 +0,0 @@ --- this bit of code modifies the default chests and furnaces to be compatible --- with pipeworks. --- --- the formspecs found here are basically copies of the ones from minetest_game --- plus bits from pipeworks' sorting tubes - --- Pipeworks Specific -local fs_helpers = pipeworks.fs_helpers -local tube_entry = "^pipeworks_tube_connection_wooden.png" - --- Chest Locals -local open_chests = {} - -local function get_chest_formspec(pos) - local spos = pos.x .. "," .. pos.y .. "," .. pos.z - local formspec = - "size[8,9]" .. - init.gui_bg .. - init.gui_bg_img .. - init.gui_slots .. - "list[nodemeta:" .. spos .. ";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[nodemeta:" .. spos .. ";main]" .. - "listring[current_player;main]" .. - init.get_hotbar_bg(0,4.85) - - -- Pipeworks Switch - formspec = formspec .. - fs_helpers.cycling_button( - minetest.get_meta(pos), - pipeworks.button_base, - "splitstacks", - { - pipeworks.button_off, - pipeworks.button_on - } - )..pipeworks.button_label - - return formspec -end - -local function chest_lid_obstructed(pos) - local above = { x = pos.x, y = pos.y + 1, z = pos.z } - local def = minetest.registered_nodes[minetest.get_node(above).name] - -- allow ladders, signs, wallmounted things and torches to not obstruct - if def.drawtype == "airlike" or - def.drawtype == "signlike" or - def.drawtype == "torchlike" or - (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted") then - return false - end - return true -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname == "pipeworks:chest_formspec" and player then - local pn = player:get_player_name() - if open_chests[pn] then - local pos = open_chests[pn].pos - if fields.quit then - local sound = open_chests[pn].sound - local swap = open_chests[pn].swap - local node = minetest.get_node(pos) - - open_chests[pn] = nil - for k, v in pairs(open_chests) do - if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then - return true - end - end - minetest.after(0.2, function() - minetest.swap_node(pos, { name = "chests:" .. swap, param2 = node.param2 }) - - -- Pipeworks notification - pipeworks.after_place(pos) - end) - minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}) - end - - -- Pipeworks Switch - if pipeworks.may_configure(pos, player) and not fields.quit then - fs_helpers.on_receive_fields(pos, fields) - minetest.show_formspec(player:get_player_name(), "pipeworks:chest_formspec", get_chest_formspec(pos)) - end - return true - end - end -end) - --- Original Definitions -local old_chest_def = table.copy(minetest.registered_items["chests:chest"]) -local old_chest_open_def = table.copy(minetest.registered_items["chests:chest_open"]) -local old_chest_locked_def = table.copy(minetest.registered_items["chests:chest_locked"]) -local old_chest_locked_open_def = table.copy(minetest.registered_items["chests:chest_locked_open"]) - --- Override Construction -local override_protected, override, override_open, override_protected_open -override_protected = { - tiles = { - "chests_chest_top.png"..tube_entry, - "chests_chest_top.png"..tube_entry, - "chests_chest_side.png"..tube_entry, - "chests_chest_side.png"..tube_entry, - "chests_chest_lock.png", - "chests_chest_inside.png" - }, - after_place_node = function(pos, placer) - old_chest_locked_def.after_place_node(pos, placer) - pipeworks.after_place(pos) - end, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - if not default.can_interact_with_node(clicker, pos) then - return itemstack - end - - minetest.sound_play(old_chest_locked_def.sound_open, {gain = 0.3, - pos = pos, max_hear_distance = 10}) - if not chest_lid_obstructed(pos) then - minetest.swap_node(pos, - { name = "chests:" .. "chest_locked" .. "_open", - param2 = node.param2 }) - end - minetest.after(0.2, minetest.show_formspec, - clicker:get_player_name(), - "pipeworks:chest_formspec", get_chest_formspec(pos)) - open_chests[clicker:get_player_name()] = { pos = pos, - sound = old_chest_locked_def.sound_close, swap = "chest_locked" } - end, - groups = table.copy(old_chest_locked_def.groups), - 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() - if meta:get_int("splitstacks") == 1 then - stack = stack:peek_item(1) - end - return inv:room_for_item("main", stack) - end, - input_inventory = "main", - connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} - }, - after_dig_node = pipeworks.after_dig -} -override = { - tiles = { - "chests_chest_top.png"..tube_entry, - "chests_chest_top.png"..tube_entry, - "chests_chest_side.png"..tube_entry, - "chests_chest_side.png"..tube_entry, - "chests_chest_front.png", - "chests_chest_inside.png" - }, - on_rightclick = function(pos, node, clicker) - minetest.sound_play(old_chest_def.sound_open, {gain = 0.3, pos = pos, - max_hear_distance = 10}) - if not chest_lid_obstructed(pos) then - minetest.swap_node(pos, { - name = "chests:" .. "chest" .. "_open", - param2 = node.param2 }) - end - minetest.after(0.2, minetest.show_formspec, - clicker:get_player_name(), - "pipeworks:chest_formspec", get_chest_formspec(pos)) - open_chests[clicker:get_player_name()] = { pos = pos, - sound = old_chest_def.sound_close, swap = "chest" } - end, - groups = table.copy(old_chest_def.groups), - 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() - if meta:get_int("splitstacks") == 1 then - stack = stack:peek_item(1) - end - return inv:room_for_item("main", stack) - end, - input_inventory = "main", - connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} - }, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig -} ---[[local override_common = { - -} -for k,v in pairs(override_common) do - override_protected[k] = v - override[k] = v -end]] - -override_open = table.copy(override) -override_open.groups = table.copy(old_chest_open_def.groups) -override_open.tube = table.copy(override.tube) -override_open.tube.connect_sides = table.copy(override.tube.connect_sides) -override_open.tube.connect_sides.top = nil - -override_protected_open = table.copy(override_protected) -override_protected_open.groups = table.copy(old_chest_locked_open_def.groups) -override_protected_open.tube = table.copy(override_protected.tube) -override_protected_open.tube.connect_sides = table.copy(override_protected.tube.connect_sides) -override_protected_open.tube.connect_sides.top = nil - -override_protected.tiles = { -- Rearranged according to the chest registration in Minetest_Game. - "chests_chest_top.png"..tube_entry, - "chests_chest_top.png"..tube_entry, - "chests_chest_side.png"..tube_entry.."^[transformFX", - "chests_chest_side.png"..tube_entry, - "chests_chest_side.png"..tube_entry, - "chests_chest_lock.png", -} -override.tiles = { - "chests_chest_top.png"..tube_entry, - "chests_chest_top.png"..tube_entry, - "chests_chest_side.png"..tube_entry.."^[transformFX", - "chests_chest_side.png"..tube_entry, - "chests_chest_side.png"..tube_entry, - "chests_chest_front.png", -} - --- Add the extra groups -for i,v in ipairs({override_protected, override, override_open, override_protected_open}) do - v.groups.tubedevice = 1 - v.groups.tubedevice_receiver = 1 -end - --- Override with the new modifications. -minetest.override_item("chests:chest", override) -minetest.override_item("chests:chest_open", override_open) -minetest.override_item("chests:chest_locked", override_protected) -minetest.override_item("chests:chest_locked_open", override_protected_open) - diff --git a/mods/ITEMS/pipeworks/compat-furnaces.lua b/mods/ITEMS/pipeworks/compat-furnaces.lua deleted file mode 100644 index 8bf7ff4..0000000 --- a/mods/ITEMS/pipeworks/compat-furnaces.lua +++ /dev/null @@ -1,433 +0,0 @@ - --- this file is basically a modified copy of --- minetest_game/mods/default/furnaces.lua - -local fs_helpers = pipeworks.fs_helpers - -tube_entry = "^pipeworks_tube_connection_stony.png" - -local function active_formspec(fuel_percent, item_percent, pos, meta) - local formspec = - "size[8,8.5]".. - init.gui_bg.. - init.gui_bg_img.. - init.gui_slots.. - "list[current_name;src;2.75,0.5;1,1;]".. - "list[current_name;fuel;2.75,2.5;1,1;]".. - "image[2.75,1.5;1,1;furnace_furnace_fire_bg.png^[lowpart:".. - (100-fuel_percent)..":furnace_furnace_fire_fg.png]".. - "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:".. - (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. - "list[current_name;dst;4.75,0.96;2,2;]".. - "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]".. - "listring[current_player;main]".. - "listring[current_name;fuel]".. - "listring[current_player;main]".. - init.get_hotbar_bg(0, 4.25) .. - fs_helpers.cycling_button( - meta, - "image_button[0,3.5;1,0.6", - "split_material_stacks", - { - pipeworks.button_off, - pipeworks.button_on - } - ).."label[0.9,3.51;Allow splitting incoming material (not fuel) stacks from tubes]" - return formspec -end - -local function inactive_formspec(pos, meta) - local formspec = "size[8,8.5]".. - init.gui_bg.. - init.gui_bg_img.. - init.gui_slots.. - "list[current_name;src;2.75,0.5;1,1;]".. - "list[current_name;fuel;2.75,2.5;1,1;]".. - "image[2.75,1.5;1,1;furnace_furnace_fire_bg.png]".. - "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. - "list[current_name;dst;4.75,0.96;2,2;]".. - "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]".. - "listring[current_player;main]".. - "listring[current_name;fuel]".. - "listring[current_player;main]".. - init.get_hotbar_bg(0, 4.25) .. - fs_helpers.cycling_button( - meta, - "image_button[0,3.5;1,0.6", - "split_material_stacks", - { - pipeworks.button_off, - pipeworks.button_on - } - ).."label[0.9,3.51;Allow splitting incoming material (not fuel) stacks from tubes]" - return formspec -end - --- --- Node callback functions that are the same for active and inactive furnace --- - -local function can_dig(pos, player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src") -end - -local function allow_metadata_inventory_put(pos, listname, index, stack, player) - if minetest.is_protected(pos, player:get_player_name()) then - return 0 - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if listname == "fuel" then - if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then - if inv:is_empty("src") then - meta:set_string("infotext", "Furnace is empty") - end - return stack:get_count() - else - return 0 - end - elseif listname == "src" then - return stack:get_count() - elseif listname == "dst" then - return 0 - end -end - -local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local stack = inv:get_stack(from_list, from_index) - return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) -end - -local function allow_metadata_inventory_take(pos, listname, index, stack, player) - if minetest.is_protected(pos, player:get_player_name()) then - return 0 - end - return stack:get_count() -end - -local function swap_node(pos, name) - local node = minetest.get_node(pos) - if node.name == name then - return - end - node.name = name - minetest.swap_node(pos, node) -end - -local function furnace_node_timer(pos, elapsed) - -- - -- Inizialize metadata - -- - local meta = minetest.get_meta(pos) - local fuel_time = meta:get_float("fuel_time") or 0 - local src_time = meta:get_float("src_time") or 0 - local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 - - local inv = meta:get_inventory() - local srclist, fuellist - - local cookable, cooked - local fuel - - local update = true - while update do - update = false - - srclist = inv:get_list("src") - fuellist = inv:get_list("fuel") - - -- - -- Cooking - -- - - -- Check if we have cookable content - local aftercooked - cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - cookable = cooked.time ~= 0 - - -- Check if we have enough fuel to burn - if fuel_time < fuel_totaltime then - -- The furnace is currently active and has enough fuel - fuel_time = fuel_time + elapsed - -- If there is a cookable item then check if it is ready yet - if cookable then - src_time = src_time + elapsed - if src_time >= cooked.time then - -- Place result in dst list if possible - if inv:room_for_item("dst", cooked.item) then - inv:add_item("dst", cooked.item) - inv:set_stack("src", 1, aftercooked.items[1]) - src_time = src_time - cooked.time - update = true - end - end - end - else - -- Furnace ran out of fuel - if cookable then - -- We need to get new fuel - local afterfuel - fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) - - if fuel.time == 0 then - -- No valid fuel in fuel list - fuel_totaltime = 0 - src_time = 0 - else - -- Take fuel from fuel list - inv:set_stack("fuel", 1, afterfuel.items[1]) - update = true - fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) - src_time = src_time + elapsed - end - else - -- We don't need to get new fuel since there is no cookable item - fuel_totaltime = 0 - src_time = 0 - end - fuel_time = 0 - end - - elapsed = 0 - end - - if fuel and fuel_totaltime > fuel.time then - fuel_totaltime = fuel.time - end - if srclist[1]:is_empty() then - src_time = 0 - end - - -- - -- Update formspec, infotext and node - -- - local formspec = inactive_formspec(pos, meta) - local item_state - local item_percent = 0 - if cookable then - item_percent = math.floor(src_time / cooked.time * 100) - if item_percent > 100 then - item_state = "100% (output full)" - else - item_state = item_percent .. "%" - end - else - if srclist[1]:is_empty() then - item_state = "Empty" - else - item_state = "Not cookable" - end - end - - local fuel_state = "Empty" - local active = "inactive " - local result = false - - if fuel_totaltime ~= 0 then - active = "active " - local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) - fuel_state = fuel_percent .. "%" - formspec = active_formspec(fuel_percent, item_percent, pos, meta) - swap_node(pos, "furnace:furnace_active") - -- make sure timer restarts automatically - result = true - else - if not fuellist[1]:is_empty() then - fuel_state = "0%" - end - swap_node(pos, "furnace:furnace") - -- stop timer on the inactive furnace - minetest.get_node_timer(pos):stop() - end - - local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")" - - -- - -- Set meta values - -- - meta:set_float("fuel_totaltime", fuel_totaltime) - meta:set_float("fuel_time", fuel_time) - meta:set_float("src_time", src_time) - meta:set_string("formspec", formspec) - meta:set_string("infotext", infotext) - - return result -end - --- --- Node definitions --- - -minetest.register_node(":furnace:furnace", { - description = "Furnace", - tiles = { - "furnace_furnace_top.png"..tube_entry, - "furnace_furnace_bottom.png"..tube_entry, - "furnace_furnace_side.png"..tube_entry, - "furnace_furnace_side.png"..tube_entry, - "furnace_furnace_side.png"..tube_entry, - "furnace_furnace_front.png" - }, - groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1}, - tube = { - insert_object = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local timer = minetest.get_node_timer(pos) - if not timer:is_started() then - timer:start(1.0) - end - if direction.y == 1 then - return inv:add_item("fuel", stack) - else - return inv:add_item("src", stack) - end - end, - can_insert = function(pos,node,stack,direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if direction.y == 1 then - return inv:room_for_item("fuel", stack) - else - if meta:get_int("split_material_stacks") == 1 then - stack = stack:peek_item(1) - end - return inv:room_for_item("src", stack) - end - end, - input_inventory = "dst", - connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} - }, - paramtype2 = "facedir", - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_stone_defaults(), - - can_dig = can_dig, - - on_timer = furnace_node_timer, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", inactive_formspec(pos, meta)) - local inv = meta:get_inventory() - inv:set_size('src', 1) - inv:set_size('fuel', 1) - inv:set_size('dst', 4) - end, - - on_metadata_inventory_move = function(pos) - minetest.get_node_timer(pos):start(1.0) - end, - on_metadata_inventory_put = function(pos) - -- start timer function, it will sort out whether furnace can burn or not. - minetest.get_node_timer(pos):start(1.0) - end, - on_blast = function(pos) - local drops = {} - inventory.get_inventory_drops(pos, "src", drops) - inventory.get_inventory_drops(pos, "fuel", drops) - inventory.get_inventory_drops(pos, "dst", drops) - drops[#drops+1] = "furnace:furnace" - minetest.remove_node(pos) - return drops - 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, - on_receive_fields = function(pos, formname, fields, sender) - if not pipeworks.may_configure(pos, sender) then return end - fs_helpers.on_receive_fields(pos, fields) - local meta = minetest.get_meta(pos) - local formspec = inactive_formspec(pos, meta) - meta:set_string("formspec", formspec) - end, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig -}) - -minetest.register_node(":furnace:furnace_active", { - description = "Furnace", - tiles = { - "furnace_furnace_top.png"..tube_entry, - "furnace_furnace_bottom.png"..tube_entry, - "furnace_furnace_side.png"..tube_entry, - "furnace_furnace_side.png"..tube_entry, - "furnace_furnace_side.png"..tube_entry, - { - image = "furnace_furnace_front_active.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.5 - }, - } - }, - groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1, not_in_creative_inventory = 1}, - tube = { - insert_object = function(pos,node,stack,direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local timer = minetest.get_node_timer(pos) - if not timer:is_started() then - timer:start(1.0) - end - if direction.y == 1 then - return inv:add_item("fuel", stack) - else - return inv:add_item("src", stack) - end - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if direction.y == 1 then - return inv:room_for_item("fuel", stack) - else - if meta:get_int("split_material_stacks") == 1 then - stack = stack:peek_item(1) - end - return inv:room_for_item("src", stack) - end - end, - input_inventory = "dst", - connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} - }, - paramtype2 = "facedir", - light_source = 8, - drop = "furnace:furnace", - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_stone_defaults(), - on_timer = furnace_node_timer, - - can_dig = can_dig, - - allow_metadata_inventory_put = allow_metadata_inventory_put, - allow_metadata_inventory_move = allow_metadata_inventory_move, - allow_metadata_inventory_take = allow_metadata_inventory_take, - on_receive_fields = function(pos, formname, fields, sender) - if not pipeworks.may_configure(pos, sender) then return end - fs_helpers.on_receive_fields(pos, fields) - local meta = minetest.get_meta(pos) - local formspec = active_formspec(0, 0, pos, meta) - meta:set_string("formspec", formspec) - end, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig -}) - diff --git a/mods/ITEMS/pipeworks/crafts.lua b/mods/ITEMS/pipeworks/crafts.lua deleted file mode 100644 index 3bb876a..0000000 --- a/mods/ITEMS/pipeworks/crafts.lua +++ /dev/null @@ -1,151 +0,0 @@ --- Crafting recipes for pipes - -minetest.register_craft( { - output = "pipeworks:pipe_1_empty 12", - recipe = { - { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, - { "", "", "" }, - { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:spigot 3", - recipe = { - { "pipeworks:pipe_1_empty", "" }, - { "", "pipeworks:pipe_1_empty" }, - }, -}) - -minetest.register_craft( { - output = "pipeworks:entry_panel_empty 2", - recipe = { - { "", "default:steel_ingot", "" }, - { "", "pipeworks:pipe_1_empty", "" }, - { "", "default:steel_ingot", "" }, - }, -}) - --- Various ancillary pipe devices - -minetest.register_craft( { - output = "pipeworks:pump_off 2", - recipe = { - { "default:stone", "default:steel_ingot", "default:stone" }, - { "default:copper_ingot", "default:mese_crystal_fragment", "default:copper_ingot" }, - { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:valve_off_empty 2", - recipe = { - { "", "group:stick", "" }, - { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, - { "", "default:steel_ingot", "" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:storage_tank_0 2", - recipe = { - { "", "default:steel_ingot", "default:steel_ingot" }, - { "default:steel_ingot", "default:glass", "default:steel_ingot" }, - { "default:steel_ingot", "default:steel_ingot", "" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:grating 2", - recipe = { - { "default:steel_ingot", "", "default:steel_ingot" }, - { "", "pipeworks:pipe_1_empty", "" }, - { "default:steel_ingot", "", "default:steel_ingot" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:flow_sensor_empty 2", - recipe = { - { "pipeworks:pipe_1_empty", "mesecons:mesecon", "pipeworks:pipe_1_empty" }, - }, -}) - -minetest.register_craft( { - output = "pipeworks:fountainhead 2", - recipe = { - { "pipeworks:pipe_1_empty" }, - { "pipeworks:pipe_1_empty" } - }, -}) - - --- Crafting recipes for pneumatic tubes - --- If homedecor is not installed, we need to register its crafting chain for --- plastic sheeting so that pipeworks remains compatible with it. - -if minetest.get_modpath("homedecor") == nil then - - minetest.register_craftitem(":homedecor:oil_extract", { - description = "Oil extract", - inventory_image = "homedecor_oil_extract.png", - }) - - minetest.register_craftitem(":homedecor:paraffin", { - description = "Unprocessed paraffin", - inventory_image = "homedecor_paraffin.png", - }) - - minetest.register_alias("homedecor:plastic_default", "homedecor:paraffin") - - minetest.register_craftitem(":homedecor:plastic_sheeting", { - description = "Plastic sheet", - inventory_image = "homedecor_plastic_sheeting.png", - }) - - minetest.register_craft({ - type = "shapeless", - output = "homedecor:oil_extract 4", - recipe = { - "group:leaves", - "group:leaves", - "group:leaves", - "group:leaves", - "group:leaves", - "group:leaves" - } - }) - - minetest.register_craft({ - type = "cooking", - output = "homedecor:paraffin", - recipe = "homedecor:oil_extract", - }) - - minetest.register_craft({ - type = "cooking", - output = "homedecor:plastic_sheeting", - recipe = "homedecor:paraffin", - }) - - minetest.register_craft({ - type = "fuel", - recipe = "homedecor:oil_extract", - burntime = 30, - }) - - minetest.register_craft({ - type = "fuel", - recipe = "homedecor:paraffin", - burntime = 30, - }) - - minetest.register_craft({ - type = "fuel", - recipe = "homedecor:plastic_sheeting", - burntime = 30, - }) -end - - diff --git a/mods/ITEMS/pipeworks/default_settings.lua b/mods/ITEMS/pipeworks/default_settings.lua deleted file mode 100644 index 91e511c..0000000 --- a/mods/ITEMS/pipeworks/default_settings.lua +++ /dev/null @@ -1,42 +0,0 @@ --- Various settings - -local prefix = "pipeworks_" - -local settings = { - enable_pipes = true, - enable_autocrafter = true, - enable_deployer = true, - enable_dispenser = true, - enable_node_breaker = true, - enable_teleport_tube = true, - enable_pipe_devices = true, - enable_redefines = true, - enable_mese_tube = true, - enable_detector_tube = true, - enable_digiline_detector_tube = true, - enable_conductor_tube = true, - enable_digiline_conductor_tube = true, - enable_accelerator_tube = true, - enable_crossing_tube = true, - enable_sand_tube = true, - enable_mese_sand_tube = true, - enable_one_way_tube = true, - enable_priority_tube = true, - enable_lua_tube = true, - enable_cyclic_mode = true, - drop_on_routing_fail = false, - - delete_item_on_clearobject = true, -} - -for name, value in pairs(settings) do - local setting_type = type(value) - if setting_type == "boolean" then - pipeworks[name] = minetest.settings:get_bool(prefix..name) - if pipeworks[name] == nil then - pipeworks[name] = value - end - else - pipeworks[name] = value - end -end diff --git a/mods/ITEMS/pipeworks/depends.txt b/mods/ITEMS/pipeworks/depends.txt deleted file mode 100644 index d4a24eb..0000000 --- a/mods/ITEMS/pipeworks/depends.txt +++ /dev/null @@ -1,8 +0,0 @@ -init -inventory -default -chests -tools -mesecons? -mesecons_mvps? -digilines? diff --git a/mods/ITEMS/pipeworks/devices.lua b/mods/ITEMS/pipeworks/devices.lua deleted file mode 100644 index 0121e2f..0000000 --- a/mods/ITEMS/pipeworks/devices.lua +++ /dev/null @@ -1,638 +0,0 @@ - --- rotation handlers - -function pipeworks.fix_after_rotation(pos, node, user, mode, new_param2) - - if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end - - newnode = string.gsub(node.name, "_on", "_off") - minetest.swap_node(pos, { name = newnode, param2 = new_param2 }) - pipeworks.scan_for_pipe_objects(pos) - - return true -end - -function pipeworks.rotate_on_place(itemstack, placer, pointed_thing) - - local playername = placer:get_player_name() - if not minetest.is_protected(pointed_thing.under, playername) - and not minetest.is_protected(pointed_thing.above, playername) then - - local node = minetest.get_node(pointed_thing.under) - - if (not placer:get_player_control().sneak) - and minetest.registered_nodes[node.name] - and minetest.registered_nodes[node.name].on_rightclick then - minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) - else - - local pitch = placer:get_look_pitch() - local above = pointed_thing.above - local under = pointed_thing.under - local fdir = minetest.dir_to_facedir(placer:get_look_dir()) - local undernode = minetest.get_node(under) - local abovenode = minetest.get_node(above) - local uname = undernode.name - local aname = abovenode.name - local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0) - local pos1 = above - - -- check if the object should be turned vertically - if above.x == under.x - and above.z == under.z - and ( - string.find(uname, "pipeworks:pipe_") - or string.find(uname, "pipeworks:storage_") - or string.find(uname, "pipeworks:expansion_") - or ( string.find(uname, "pipeworks:grating") and not isabove ) - or ( string.find(uname, "pipeworks:pump_") and not isabove ) - - or ( - ( string.find(uname, "pipeworks:valve") - or string.find(uname, "pipeworks:entry_panel") - or string.find(uname, "pipeworks:flow_sensor") ) - and minetest.facedir_to_dir(undernode.param2).y ~= 0 ) - ) - then - fdir = 17 - end - - if minetest.registered_nodes[uname] - and minetest.registered_nodes[uname]["buildable_to"] then - pos1 = under - end - - if minetest.registered_nodes[minetest.get_node(pos1).name] - and not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end - - local placednode = string.gsub(itemstack:get_name(), "_loaded", "_empty") - placednode = string.gsub(placednode, "_on", "_off") - - minetest.add_node(pos1, {name = placednode, param2 = fdir }) - pipeworks.scan_for_pipe_objects(pos1) - - if not pipeworks.expect_infinite_stacks then - itemstack:take_item() - end - end - end - return itemstack -end - --- List of devices that should participate in the autoplace algorithm - -local pipereceptor_on = nil -local pipereceptor_off = nil - -if minetest.get_modpath("mesecons") then - pipereceptor_on = { - receptor = { - state = mesecon.state.on, - rules = pipeworks.mesecons_rules - } - } - - pipereceptor_off = { - receptor = { - state = mesecon.state.off, - rules = pipeworks.mesecons_rules - } - } -end - -local pipes_devicelist = { - "pump", - "valve", - "storage_tank_0", - "storage_tank_1", - "storage_tank_2", - "storage_tank_3", - "storage_tank_4", - "storage_tank_5", - "storage_tank_6", - "storage_tank_7", - "storage_tank_8", - "storage_tank_9", - "storage_tank_10" -} - --- Now define the nodes. - -local states = { "on", "off" } -local dgroups = "" - -for s in ipairs(states) do - - if states[s] == "off" then - dgroups = {snappy=3, pipe=1} - else - dgroups = {snappy=3, pipe=1, not_in_creative_inventory=1} - end - - minetest.register_node("pipeworks:pump_"..states[s], { - description = "Pump/Intake Module", - drawtype = "mesh", - mesh = "pipeworks_pump.obj", - tiles = { "pipeworks_pump_"..states[s]..".png" }, - paramtype = "light", - paramtype2 = "facedir", - groups = dgroups, - sounds = default.node_sound_wood_defaults(), - walkable = true, - pipe_connections = { top = 1 }, - after_place_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - drop = "pipeworks:pump_off", - mesecons = {effector = { - action_on = function (pos, node) - minetest.add_node(pos,{name="pipeworks:pump_on", param2 = node.param2}) - end, - action_off = function (pos, node) - minetest.add_node(pos,{name="pipeworks:pump_off", param2 = node.param2}) - end - }}, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local fdir = node.param2 - minetest.add_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir }) - end, - on_rotate = screwdriver.rotate_simple - }) - - minetest.register_node("pipeworks:valve_"..states[s].."_empty", { - description = "Valve", - drawtype = "mesh", - mesh = "pipeworks_valve_"..states[s]..".obj", - tiles = { "pipeworks_valve.png" }, - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "facedir", - selection_box = { - type = "fixed", - fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 } - }, - collision_box = { - type = "fixed", - fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 } - }, - groups = dgroups, - sounds = default.node_sound_wood_defaults(), - walkable = true, - on_place = pipeworks.rotate_on_place, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - drop = "pipeworks:valve_off_empty", - mesecons = {effector = { - action_on = function (pos, node) - minetest.add_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2}) - end, - action_off = function (pos, node) - minetest.add_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2}) - end - }}, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local fdir = node.param2 - minetest.add_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir }) - end, - on_rotate = pipeworks.fix_after_rotation - }) -end - -minetest.register_node("pipeworks:valve_on_loaded", { - description = "Valve", - drawtype = "mesh", - mesh = "pipeworks_valve_on.obj", - tiles = { "pipeworks_valve.png" }, - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "facedir", - selection_box = { - type = "fixed", - fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 } - }, - collision_box = { - type = "fixed", - fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 } - }, - groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - on_place = pipeworks.rotate_on_place, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - drop = "pipeworks:valve_off_empty", - mesecons = {effector = { - action_on = function (pos, node) - minetest.add_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2}) - end, - action_off = function (pos, node) - minetest.add_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2}) - end - }}, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local fdir = node.param2 - minetest.add_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir }) - end, - on_rotate = pipeworks.fix_after_rotation -}) - --- grating - -minetest.register_node("pipeworks:grating", { - description = "Decorative grating", - tiles = { - "pipeworks_grating_top.png", - "pipeworks_grating_sides.png", - "pipeworks_grating_sides.png", - "pipeworks_grating_sides.png", - "pipeworks_grating_sides.png", - "pipeworks_grating_sides.png" - }, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { -0.49, -0.49, -0.49, 0.49, 0.5, 0.49 } - }, - sunlight_propagates = true, - paramtype = "light", - groups = {snappy=3, pipe=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - pipe_connections = { top = 1 }, - after_place_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_rotate = false -}) - --- outlet spigot - -minetest.register_node("pipeworks:spigot", { - description = "Spigot outlet", - drawtype = "mesh", - mesh = "pipeworks_spigot.obj", - tiles = { "pipeworks_spigot.png" }, - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3, pipe=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - pipe_connections = { left=1, right=1, front=1, back=1, - left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 }, - after_place_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - selection_box = { - type = "fixed", - fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 } - }, - collision_box = { - type = "fixed", - fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 } - }, - on_rotate = pipeworks.fix_after_rotation -}) - -minetest.register_node("pipeworks:spigot_pouring", { - description = "Spigot outlet", - drawtype = "mesh", - mesh = "pipeworks_spigot_pouring.obj", - tiles = { - { - name = "default_water_flowing_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 0.8, - }, - }, - { name = "pipeworks_spigot.png" } - }, - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - pipe_connections = { left=1, right=1, front=1, back=1, - left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 }, - after_place_node = function(pos) - minetest.set_node(pos, { name = "pipeworks:spigot", param2 = minetest.get_node(pos).param2 }) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - selection_box = { - type = "fixed", - fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 } - }, - collision_box = { - type = "fixed", - fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 } - }, - drop = "pipeworks:spigot", - on_rotate = pipeworks.fix_after_rotation -}) - --- sealed pipe entry/exit (horizontal pipe passing through a metal --- wall, for use in places where walls should look like they're airtight) - -local panel_cbox = { - type = "fixed", - fixed = { - { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, - { -8/16, -8/16, -1/16, 8/16, 8/16, 1/16 } - } -} - -minetest.register_node("pipeworks:entry_panel_empty", { - description = "Airtight Pipe entry/exit", - drawtype = "mesh", - mesh = "pipeworks_entry_panel.obj", - tiles = { "pipeworks_entry_panel.png" }, - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3, pipe=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - on_place = pipeworks.rotate_on_place, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - selection_box = panel_cbox, - collision_box = panel_cbox, - on_rotate = pipeworks.fix_after_rotation -}) - -minetest.register_node("pipeworks:entry_panel_loaded", { - description = "Airtight Pipe entry/exit", - drawtype = "mesh", - mesh = "pipeworks_entry_panel.obj", - tiles = { "pipeworks_entry_panel.png" }, - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - on_place = pipeworks.rotate_on_place, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - selection_box = panel_cbox, - collision_box = panel_cbox, - drop = "pipeworks:entry_panel_empty", - on_rotate = pipeworks.fix_after_rotation -}) - -minetest.register_node("pipeworks:flow_sensor_empty", { - description = "Flow Sensor", - drawtype = "mesh", - mesh = "pipeworks_flow_sensor.obj", - tiles = { "pipeworks_flow_sensor_off.png" }, - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3, pipe=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - on_place = pipeworks.rotate_on_place, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_construct = function(pos) - if mesecon then - mesecon.receptor_off(pos, rules) - end - end, - selection_box = { - type = "fixed", - fixed = { - { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, - { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 }, - } - }, - collision_box = { - type = "fixed", - fixed = { - { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, - { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 }, - } - }, - mesecons = pipereceptor_off, - on_rotate = pipeworks.fix_after_rotation -}) - -minetest.register_node("pipeworks:flow_sensor_loaded", { - description = "Flow sensor (on)", - drawtype = "mesh", - mesh = "pipeworks_flow_sensor.obj", - tiles = { "pipeworks_flow_sensor_on.png" }, - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - on_place = pipeworks.rotate_on_place, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_construct = function(pos) - if mesecon then - mesecon.receptor_on(pos, rules) - end - end, - selection_box = { - type = "fixed", - fixed = { - { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, - { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 }, - } - }, - collision_box = { - type = "fixed", - fixed = { - { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, - { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 }, - } - }, - drop = "pipeworks:flow_sensor_empty", - mesecons = pipereceptor_on, - on_rotate = pipeworks.fix_after_rotation -}) - --- tanks - -for fill = 0, 10 do - local filldesc="empty" - local sgroups = {snappy=3, pipe=1, tankfill=fill+1} - local image = nil - - if fill ~= 0 then - filldesc=fill.."0% full" - sgroups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1} - image = "pipeworks_storage_tank_fittings.png" - end - - minetest.register_node("pipeworks:expansion_tank_"..fill, { - description = "Expansion Tank ("..filldesc..")... You hacker, you.", - tiles = { - "pipeworks_storage_tank_fittings.png", - "pipeworks_storage_tank_fittings.png", - "pipeworks_storage_tank_back.png", - "pipeworks_storage_tank_back.png", - "pipeworks_storage_tank_back.png", - pipeworks.liquid_texture.."^pipeworks_storage_tank_front_"..fill..".png" - }, - inventory_image = image, - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - drop = "pipeworks:storage_tank_0", - pipe_connections = { top = 1, bottom = 1}, - after_place_node = function(pos) - pipeworks.look_for_stackable_tanks(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_rotate = false - }) - - minetest.register_node("pipeworks:storage_tank_"..fill, { - description = "Fluid Storage Tank ("..filldesc..")", - tiles = { - "pipeworks_storage_tank_fittings.png", - "pipeworks_storage_tank_fittings.png", - "pipeworks_storage_tank_back.png", - "pipeworks_storage_tank_back.png", - "pipeworks_storage_tank_back.png", - pipeworks.liquid_texture.."^pipeworks_storage_tank_front_"..fill..".png" - }, - inventory_image = image, - paramtype = "light", - paramtype2 = "facedir", - groups = sgroups, - sounds = default.node_sound_wood_defaults(), - walkable = true, - drop = "pipeworks:storage_tank_0", - pipe_connections = { top = 1, bottom = 1}, - after_place_node = function(pos) - pipeworks.look_for_stackable_tanks(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_rotate = false - }) -end - --- fountainhead - -minetest.register_node("pipeworks:fountainhead", { - description = "Fountainhead", - drawtype = "mesh", - mesh = "pipeworks_fountainhead.obj", - tiles = { "pipeworks_fountainhead.png" }, - sunlight_propagates = true, - paramtype = "light", - groups = {snappy=3, pipe=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - pipe_connections = { bottom = 1 }, - after_place_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_construct = function(pos) - if mesecon then - mesecon.receptor_on(pos, rules) - end - end, - selection_box = { - type = "fixed", - fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 } - }, - collision_box = { - type = "fixed", - fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 } - }, - on_rotate = false -}) - -minetest.register_node("pipeworks:fountainhead_pouring", { - description = "Fountainhead", - drawtype = "mesh", - mesh = "pipeworks_fountainhead.obj", - tiles = { "pipeworks_fountainhead.png" }, - sunlight_propagates = true, - paramtype = "light", - groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - walkable = true, - pipe_connections = { bottom = 1 }, - after_place_node = function(pos) - minetest.set_node(pos, { name = "pipeworks:fountainhead", param2 = minetest.get_node(pos).param2 }) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_construct = function(pos) - if mesecon then - mesecon.receptor_on(pos, rules) - end - end, - selection_box = { - type = "fixed", - fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 } - }, - collision_box = { - type = "fixed", - fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 } - }, - drop = "pipeworks:fountainhead", - on_rotate = false -}) - -minetest.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty") -minetest.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty") - -minetest.register_lbm({ - name = "pipeworks:rotate_valves_flowsensors", - label = "Flip pipeworks valves and flow sensors around X/Z", - run_at_every_load = false, - nodenames = { - "pipeworks:flow_sensor_empty", - "pipeworks:flow_sensor_loaded", - "pipeworks:valve_off_empty", - "pipeworks:valve_on_empty", - "pipeworks:valve_off_loaded", - }, - action = function(pos, node) - local dir = minetest.facedir_to_dir(node.param2) - local newdir = { x=dir.z, y=dir.y, z=dir.x } - local newfdir = minetest.dir_to_facedir(newdir) - minetest.swap_node(pos, { name = node.name, param2 = newfdir }) - end -}) diff --git a/mods/ITEMS/pipeworks/filter-injector.lua b/mods/ITEMS/pipeworks/filter-injector.lua deleted file mode 100644 index ec1297d..0000000 --- a/mods/ITEMS/pipeworks/filter-injector.lua +++ /dev/null @@ -1,562 +0,0 @@ -local fs_helpers = pipeworks.fs_helpers - -local function delay(x) - return (function() return x end) -end - -local function set_filter_infotext(data, meta) - local infotext = data.wise_desc.." Filter-Injector" - if meta:get_int("slotseq_mode") == 2 then - infotext = infotext .. " (slot #"..meta:get_int("slotseq_index").." next)" - end - meta:set_string("infotext", infotext) -end - -local function set_filter_formspec(data, meta) - local itemname = data.wise_desc.." Filter-Injector" - - local formspec - if data.digiline then - formspec = "size[8,2.7]".. - "item_image[0,0;1,1;pipeworks:"..data.name.."]".. - "label[1,0;"..minetest.formspec_escape(itemname).."]".. - "field[0.3,1.5;8.0,1;channel;Channel;${channel}]".. - fs_helpers.cycling_button(meta, "button[0,2;4,1", "slotseq_mode", - {"Sequence slots by Priority", - "Sequence slots Randomly", - "Sequence slots by Rotation"}).. - fs_helpers.cycling_button(meta, "button[4,2;4,1", "exmatch_mode", - {"Exact match - off", - "Exact match - on "}) - else - local exmatch_button = "" - if data.stackwise then - exmatch_button = - fs_helpers.cycling_button(meta, "button[4,3.5;4,1", "exmatch_mode", - {"Exact match - off", - "Exact match - on "}) - end - - formspec = "size[8,8.5]".. - "item_image[0,0;1,1;pipeworks:"..data.name.."]".. - "label[1,0;"..minetest.formspec_escape(itemname).."]".. - "label[0,1;Prefer item types:]".. - "list[context;main;0,1.5;8,2;]".. - fs_helpers.cycling_button(meta, "button[0,3.5;4,1", "slotseq_mode", - {"Sequence slots by Priority", - "Sequence slots Randomly", - "Sequence slots by Rotation"}).. - exmatch_button.. - "list[current_player;main;0,4.5;8,4;]" .. - "listring[]" - end - meta:set_string("formspec", formspec) -end - --- todo SOON: this function has *way too many* parameters -local function grabAndFire(data,slotseq_mode,exmatch_mode,filtmeta,frominv,frominvname,frompos,fromnode,filterfor,fromtube,fromdef,dir,fakePlayer,all,digiline) - local sposes = {} - if not frominvname or not frominv:get_list(frominvname) then return end - for spos,stack in ipairs(frominv:get_list(frominvname)) do - local matches - if filterfor == "" then - matches = stack:get_name() ~= "" - else - local fname = filterfor.name - local fgroup = filterfor.group - local fwear = filterfor.wear - local fmetadata = filterfor.metadata - matches = (not fname -- If there's a name filter, - or stack:get_name() == fname) -- it must match. - - and (not fgroup -- If there's a group filter, - or (type(fgroup) == "string" -- it must be a string - and minetest.get_item_group( -- and it must match. - stack:get_name(), fgroup) ~= 0)) - - and (not fwear -- If there's a wear filter: - or (type(fwear) == "number" -- If it's a number, - and stack:get_wear() == fwear) -- it must match. - or (type(fwear) == "table" -- If it's a table: - and (not fwear[1] -- If there's a lower bound, - or (type(fwear[1]) == "number" -- it must be a number - and fwear[1] <= stack:get_wear())) -- and it must be <= the actual wear. - and (not fwear[2] -- If there's an upper bound - or (type(fwear[2]) == "number" -- it must be a number - and stack:get_wear() < fwear[2])))) -- and it must be > the actual wear. - -- If the wear filter is of any other type, fail. - -- - and (not fmetadata -- If there's a matadata filter, - or (type(fmetadata) == "string" -- it must be a string - and stack:get_metadata() == fmetadata)) -- and it must match. - end - if matches then table.insert(sposes, spos) end - end - if #sposes == 0 then return false end - if slotseq_mode == 1 then - for i = #sposes, 2, -1 do - local j = math.random(i) - local t = sposes[j] - sposes[j] = sposes[i] - sposes[i] = t - end - elseif slotseq_mode == 2 then - local headpos = filtmeta:get_int("slotseq_index") - table.sort(sposes, function (a, b) - if a >= headpos then - if b < headpos then return true end - else - if b >= headpos then return false end - end - return a < b - end) - end - for _, spos in ipairs(sposes) do - local stack = frominv:get_stack(frominvname, spos) - local doRemove = stack:get_count() - if fromtube.can_remove then - doRemove = fromtube.can_remove(frompos, fromnode, stack, dir) - elseif fromdef.allow_metadata_inventory_take then - doRemove = fromdef.allow_metadata_inventory_take(frompos, frominvname,spos, stack, fakePlayer) - end - -- stupid lack of continue statements grumble - if doRemove > 0 then - if slotseq_mode == 2 then - local nextpos = spos + 1 - if nextpos > frominv:get_size(frominvname) then - nextpos = 1 - end - filtmeta:set_int("slotseq_index", nextpos) - set_filter_infotext(data, filtmeta) - end - local item - local count - if all then - count = math.min(stack:get_count(), doRemove) - if filterfor.count and (filterfor.count > 1 or digiline) then - if exmatch_mode ~= 0 and filterfor.count > count then - return false -- not enough, fail - else - -- limit quantity to filter amount - count = math.min(filterfor.count, count) - end - end - else - count = 1 - end - if fromtube.remove_items then - -- it could be the entire stack... - item = fromtube.remove_items(frompos, fromnode, stack, dir, count) - else - item = stack:take_item(count) - frominv:set_stack(frominvname, spos, stack) - if fromdef.on_metadata_inventory_take then - fromdef.on_metadata_inventory_take(frompos, frominvname, spos, item, fakePlayer) - end - end - local pos = vector.add(frompos, vector.multiply(dir, 1.4)) - local start_pos = vector.add(frompos, dir) - local item1 = pipeworks.tube_inject_item(pos, start_pos, dir, item, fakePlayer:get_player_name()) - return true-- only fire one item, please - end - end - return false -end - -local function punch_filter(data, filtpos, filtnode, msg) - local filtmeta = minetest.get_meta(filtpos) - local filtinv = filtmeta:get_inventory() - local owner = filtmeta:get_string("owner") - local fakePlayer = { - get_player_name = delay(owner), - is_fake_player = ":pipeworks", - get_wielded_item = delay(ItemStack(nil)) - } -- TODO: use a mechanism as the wielder one - local dir = pipeworks.facedir_to_right_dir(filtnode.param2) - local frompos = vector.subtract(filtpos, dir) - local fromnode = minetest.get_node(frompos) - if not fromnode then return end - local fromdef = minetest.registered_nodes[fromnode.name] - if not fromdef then return end - local fromtube = fromdef.tube - local input_special_cases = { - ["technic:mv_furnace"] = "dst", - ["technic:mv_furnace_active"] = "dst", - ["technic:mv_electric_furnace"] = "dst", - ["technic:mv_electric_furnace_active"] = "dst", - ["technic:mv_alloy_furnace"] = "dst", - ["technic:mv_alloy_furnace_active"] = "dst", - ["technic:mv_centrifuge"] = "dst", - ["technic:mv_centrifuge_active"] = "dst", - ["technic:mv_compressor"] = "dst", - ["technic:mv_compressor_active"] = "dst", - ["technic:mv_extractor"] = "dst", - ["technic:mv_extractor_active"] = "dst", - ["technic:mv_grinder"] = "dst", - ["technic:mv_grinder_active"] = "dst", - ["technic:tool_workshop"] = "src", - } - - -- make sure there's something appropriate to inject the item into - local todir = pipeworks.facedir_to_right_dir(filtnode.param2) - local topos = vector.add(filtpos, todir) - local tonode = minetest.get_node(topos) - local todef = minetest.registered_nodes[tonode.name] - - if not todef - or not (minetest.get_item_group(tonode.name, "tube") == 1 - or minetest.get_item_group(tonode.name, "tubedevice") == 1 - or minetest.get_item_group(tonode.name, "tubedevice_receiver") == 1) then - return - end - - if fromtube then fromtube.input_inventory = input_special_cases[fromnode.name] or fromtube.input_inventory end - if not (fromtube and fromtube.input_inventory) then return end - - local slotseq_mode - local exact_match - - local filters = {} - if data.digiline then - local function add_filter(name, group, count, wear, metadata) - table.insert(filters, {name = name, group = group, count = tonumber(count), wear = wear, metadata = metadata}) - end - - local function add_itemstring_filter(filter) - local filterstack = ItemStack(filter) - local filtername = filterstack:get_name() - local filtercount = filterstack:get_count() - local filterwear = string.match(filter, "%S*:%S*%s%d%s(%d)") and filterstack:get_wear() - local filtermetadata = string.match(filter, "%S*:%S*%s%d%s%d(%s.*)") and filterstack:get_metadata() - - add_filter(filtername, nil, filtercount, filterwear, filtermetadata) - end - - local t_msg = type(msg) - if t_msg == "table" then - local slotseq = msg.slotseq - local t_slotseq = type(slotseq) - if t_slotseq == "number" and slotseq >= 0 and slotseq <= 2 then - slotseq_mode = slotseq - elseif t_slotseq == "string" then - slotseq = string.lower(slotseq) - if slotseq == "priority" then - slotseq_mode = 0 - elseif slotseq == "random" then - slotseq_mode = 1 - elseif slotseq == "rotation" then - slotseq_mode = 2 - end - end - - local exmatch = msg.exmatch - local t_exmatch = type(exmatch) - if t_exmatch == "number" and exmatch >= 0 and exmatch <= 1 then - exact_match = exmatch - elseif t_exmatch == "boolean" then - exact_match = exmatch and 1 or 0 - end - - local slotseq_index = msg.slotseq_index - if type(slotseq_index) == "number" then - -- This should allow any valid index, but I'm not completely sure what - -- constitutes a valid index, so I'm only allowing resetting it to 1. - if slotseq_index == 1 then - filtmeta:set_int("slotseq_index", slotseq_index) - set_filter_infotext(data, filtmeta) - end - end - - if slotseq_mode ~= nil then - filtmeta:set_int("slotseq_mode", slotseq_mode) - end - - if exact_match ~= nil then - filtmeta:set_int("exmatch_mode", exact_match) - end - - if slotseq_mode ~= nil or exact_match ~= nil then - set_filter_formspec(data, filtmeta) - end - - if msg.nofire then - return - end - - if msg.name or msg.group or msg.count or msg.wear or msg.metadata then - add_filter(msg.name, msg.group, msg.count, msg.wear, msg.metadata) - else - for _, filter in ipairs(msg) do - local t_filter = type(filter) - if t_filter == "table" then - if filter.name or filter.group or filter.count or filter.wear or filter.metadata then - add_filter(filter.name, filter.group, filter.count, filter.wear, filter.metadata) - end - elseif t_filter == "string" then - add_itemstring_filter(filter) - end - end - end - elseif t_msg == "string" then - add_itemstring_filter(msg) - end - else - for _, filterstack in ipairs(filtinv:get_list("main")) do - local filtername = filterstack:get_name() - local filtercount = filterstack:get_count() - if filtername ~= "" then table.insert(filters, {name = filtername, count = filtercount}) end - end - end - if #filters == 0 then table.insert(filters, "") end - - if slotseq_mode == nil then - slotseq_mode = filtmeta:get_int("slotseq_mode") - end - - if exact_match == nil then - exact_match = filtmeta:get_int("exmatch_mode") - end - - local frominv - if fromtube.return_input_invref then - frominv = fromtube.return_input_invref(frompos, fromnode, dir, owner) - if not frominv then - return - end - else - local frommeta = minetest.get_meta(frompos) - frominv = frommeta:get_inventory() - end - if fromtube.before_filter then fromtube.before_filter(frompos) end - for _, frominvname in ipairs(type(fromtube.input_inventory) == "table" and fromtube.input_inventory or {fromtube.input_inventory}) do - local done = false - for _, filterfor in ipairs(filters) do - if grabAndFire(data, slotseq_mode, exact_match, filtmeta, frominv, frominvname, frompos, fromnode, filterfor, fromtube, fromdef, dir, fakePlayer, data.stackwise, data.digiline) then - done = true - break - end - end - if done then break end - end - if fromtube.after_filter then fromtube.after_filter(frompos) end -end - -for _, data in ipairs({ - { - name = "filter", - wise_desc = "Itemwise", - stackwise = false, - }, - { - name = "mese_filter", - wise_desc = "Stackwise", - stackwise = true, - }, - { -- register even if no digilines - name = "digiline_filter", - wise_desc = "Digiline", - stackwise = true, - digiline = true, - }, -}) do - local node = { - description = data.wise_desc.." Filter-Injector", - tiles = { - "pipeworks_"..data.name.."_top.png", - "pipeworks_"..data.name.."_top.png", - "pipeworks_"..data.name.."_output.png", - "pipeworks_"..data.name.."_input.png", - "pipeworks_"..data.name.."_side.png", - "pipeworks_"..data.name.."_top.png", - }, - paramtype2 = "facedir", - groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, mesecon = 2}, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - set_filter_formspec(data, meta) - set_filter_infotext(data, meta) - local inv = meta:get_inventory() - inv:set_size("main", 8*2) - end, - after_place_node = function (pos, placer) - minetest.get_meta(pos):set_string("owner", placer:get_player_name()) - pipeworks.after_place(pos) - end, - after_dig_node = pipeworks.after_dig, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if not pipeworks.may_configure(pos, player) then - return 0 - end - local inv = minetest.get_meta(pos):get_inventory() - inv:set_stack("main", index, stack) - return 0 - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if not pipeworks.may_configure(pos, player) then - return 0 - end - local inv = minetest.get_meta(pos):get_inventory() - local fake_stack = inv:get_stack("main", index) - fake_stack:take_item(stack:get_count()) - inv:set_stack("main", index, fake_stack) - return 0 - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - if not pipeworks.may_configure(pos, player) then return 0 end - return count - end, - can_dig = function(pos, player) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - tube = {connect_sides = {right = 1}}, - } - - if data.digiline then - node.groups.mesecon = nil - if not minetest.get_modpath("digilines") then - node.groups.not_in_creative_inventory = 1 - end - - node.on_receive_fields = function(pos, formname, fields, sender) - if not pipeworks.may_configure(pos, sender) then return end - fs_helpers.on_receive_fields(pos, fields) - - if fields.channel then - minetest.get_meta(pos):set_string("channel", fields.channel) - end - - local meta = minetest.get_meta(pos) - --meta:set_int("slotseq_index", 1) - set_filter_formspec(data, meta) - set_filter_infotext(data, meta) - end - node.digiline = { - effector = { - action = function(pos, node, channel, msg) - local meta = minetest.get_meta(pos) - local setchan = meta:get_string("channel") - if setchan ~= channel then return end - - punch_filter(data, pos, node, msg) - end, - }, - } - else - node.on_receive_fields = function(pos, formname, fields, sender) - if not pipeworks.may_configure(pos, sender) then return end - fs_helpers.on_receive_fields(pos, fields) - local meta = minetest.get_meta(pos) - meta:set_int("slotseq_index", 1) - set_filter_formspec(data, meta) - set_filter_infotext(data, meta) - end - node.mesecons = { - effector = { - action_on = function(pos, node) - punch_filter(data, pos, node) - end, - }, - } - node.on_punch = function (pos, node, puncher) - punch_filter(data, pos, node) - end - end - - - - minetest.register_node("pipeworks:"..data.name, node) -end - -minetest.register_craft( { - output = "pipeworks:filter 2", - recipe = { - { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }, - { "group:stick", "default:mese_crystal", "homedecor:plastic_sheeting" }, - { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:mese_filter 2", - recipe = { - { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }, - { "group:stick", "default:mese", "homedecor:plastic_sheeting" }, - { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" } - }, -}) - -if minetest.get_modpath("digilines") then - minetest.register_craft( { - output = "pipeworks:digiline_filter 2", - recipe = { - { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }, - { "group:stick", "digilines:wire_std_00000000", "homedecor:plastic_sheeting" }, - { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" } - }, - }) -end - ---[[ -In the past the filter-injectors had real items in their inventories. This code -puts them to the input to the filter-injector if possible. Else the items are -dropped. -]] -local function put_to_inputinv(pos, node, filtmeta, list) - local dir = pipeworks.facedir_to_right_dir(node.param2) - local frompos = vector.subtract(pos, dir) - local fromnode = minetest.get_node(frompos) - local fromdef = minetest.registered_nodes[fromnode.name] - if not fromdef or not fromdef.tube then - return - end - local fromtube = fromdef.tube - local frominv - if fromtube.return_input_invref then - local owner = filtmeta:get_string("owner") - frominv = fromtube.return_input_invref(frompos, fromnode, dir, owner) - if not frominv then - return - end - else - frominv = minetest.get_meta(frompos):get_inventory() - end - local listname = type(fromtube.input_inventory) == "table" and - fromtube.input_inventory[1] or fromtube.input_inventory - if not listname then - return - end - for i = 1, #list do - local item = list[i] - if not item:is_empty() then - local leftover = frominv:add_item(listname, item) - if not leftover:is_empty() then - minetest.add_item(pos, leftover) - end - end - end - return true -end -minetest.register_lbm({ - label = "Give back items of old filters that had real inventories", - name = "pipeworks:give_back_old_filter_items", - nodenames = {"pipeworks:filter", "pipeworks:mese_filter"}, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - local list = meta:get_inventory():get_list("main") - if put_to_inputinv(pos, node, meta, list) then - return - end - pos.y = pos.y + 1 - for i = 1, #list do - local item = list[i] - if not item:is_empty() then - minetest.add_item(pos, item) - end - end - end, -}) \ No newline at end of file diff --git a/mods/ITEMS/pipeworks/flowing_logic.lua b/mods/ITEMS/pipeworks/flowing_logic.lua deleted file mode 100644 index 83b561b..0000000 --- a/mods/ITEMS/pipeworks/flowing_logic.lua +++ /dev/null @@ -1,134 +0,0 @@ --- This file provides the actual flow and pathfinding logic that makes water --- move through the pipes. --- --- Contributed by mauvebic, 2013-01-03, rewritten a bit by Vanessa Ezekowitz --- - -local finitewater = minetest.settings:get_bool("liquid_finite") - -pipeworks.check_for_liquids = function(pos) - local coords = { - {x=pos.x,y=pos.y-1,z=pos.z}, - {x=pos.x,y=pos.y+1,z=pos.z}, - {x=pos.x-1,y=pos.y,z=pos.z}, - {x=pos.x+1,y=pos.y,z=pos.z}, - {x=pos.x,y=pos.y,z=pos.z-1}, - {x=pos.x,y=pos.y,z=pos.z+1}, } - for i =1,6 do - local name = minetest.get_node(coords[i]).name - if name and string.find(name,"water") then - if finitewater then minetest.remove_node(coords[i]) end - return true - end - end - return false -end - -pipeworks.check_for_inflows = function(pos,node) - local coords = { - {x=pos.x,y=pos.y-1,z=pos.z}, - {x=pos.x,y=pos.y+1,z=pos.z}, - {x=pos.x-1,y=pos.y,z=pos.z}, - {x=pos.x+1,y=pos.y,z=pos.z}, - {x=pos.x,y=pos.y,z=pos.z-1}, - {x=pos.x,y=pos.y,z=pos.z+1}, - } - local newnode = false - local source = false - for i = 1, 6 do - if newnode then break end - local testnode = minetest.get_node(coords[i]) - local name = testnode.name - if name and (name == "pipeworks:pump_on" and pipeworks.check_for_liquids(coords[i])) or string.find(name,"_loaded") then - if string.find(name,"_loaded") then - source = minetest.get_meta(coords[i]):get_string("source") - if source == minetest.pos_to_string(pos) then break end - end - if string.find(name, "valve") or string.find(name, "sensor") then - - if ((i == 3 or i == 4) and minetest.facedir_to_dir(testnode.param2).x ~= 0) - or ((i == 5 or i == 6) and minetest.facedir_to_dir(testnode.param2).z ~= 0) - or ((i == 1 or i == 2) and minetest.facedir_to_dir(testnode.param2).y ~= 0) then - - newnode = string.gsub(node.name,"empty","loaded") - source = {x=coords[i].x,y=coords[i].y,z=coords[i].z} - end - else - newnode = string.gsub(node.name,"empty","loaded") - source = {x=coords[i].x,y=coords[i].y,z=coords[i].z} - end - end - end - if newnode then - minetest.add_node(pos,{name=newnode, param2 = node.param2}) - minetest.get_meta(pos):set_string("source",minetest.pos_to_string(source)) - end -end - -pipeworks.check_sources = function(pos,node) - local sourcepos = minetest.string_to_pos(minetest.get_meta(pos):get_string("source")) - if not sourcepos then return end - local source = minetest.get_node(sourcepos).name - local newnode = false - if source and not ((source == "pipeworks:pump_on" and pipeworks.check_for_liquids(sourcepos)) or string.find(source,"_loaded") or source == "ignore" ) then - newnode = string.gsub(node.name,"loaded","empty") - end - - if newnode then - minetest.add_node(pos,{name=newnode, param2 = node.param2}) - minetest.get_meta(pos):set_string("source","") - end -end - -pipeworks.spigot_check = function(pos, node) - local belowname = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name - if belowname and (belowname == "air" or belowname == "default:water_flowing" or belowname == "default:water_source") then - local spigotname = minetest.get_node(pos).name - local fdir=node.param2 % 4 - local check = { - {x=pos.x,y=pos.y,z=pos.z+1}, - {x=pos.x+1,y=pos.y,z=pos.z}, - {x=pos.x,y=pos.y,z=pos.z-1}, - {x=pos.x-1,y=pos.y,z=pos.z} - } - local near_node = minetest.get_node(check[fdir+1]) - if near_node and string.find(near_node.name, "_loaded") then - if spigotname and spigotname == "pipeworks:spigot" then - minetest.add_node(pos,{name = "pipeworks:spigot_pouring", param2 = fdir}) - if finitewater or belowname ~= "default:water_source" then - minetest.add_node({x=pos.x,y=pos.y-1,z=pos.z},{name = "default:water_source"}) - end - end - else - if spigotname == "pipeworks:spigot_pouring" then - minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:spigot", param2 = fdir}) - if belowname == "default:water_source" and not finitewater then - minetest.remove_node({x=pos.x,y=pos.y-1,z=pos.z}) - end - end - end - end -end - -pipeworks.fountainhead_check = function(pos, node) - local abovename = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name - if abovename and (abovename == "air" or abovename == "default:water_flowing" or abovename == "default:water_source") then - local fountainhead_name = minetest.get_node(pos).name - local near_node = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if near_node and string.find(near_node.name, "_loaded") then - if fountainhead_name and fountainhead_name == "pipeworks:fountainhead" then - minetest.add_node(pos,{name = "pipeworks:fountainhead_pouring"}) - if finitewater or abovename ~= "default:water_source" then - minetest.add_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "default:water_source"}) - end - end - else - if fountainhead_name == "pipeworks:fountainhead_pouring" then - minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:fountainhead"}) - if abovename == "default:water_source" and not finitewater then - minetest.remove_node({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - end - end -end diff --git a/mods/ITEMS/pipeworks/init.lua b/mods/ITEMS/pipeworks/init.lua deleted file mode 100644 index 2e05337..0000000 --- a/mods/ITEMS/pipeworks/init.lua +++ /dev/null @@ -1,127 +0,0 @@ --- Pipeworks mod by Vanessa Ezekowitz - 2013-07-13 --- --- This mod supplies various steel pipes and plastic pneumatic tubes --- and devices that they can connect to. --- --- License: WTFPL --- - -pipeworks = {} - -local DEBUG = false - -pipeworks.worldpath = minetest.get_worldpath() -pipeworks.modpath = minetest.get_modpath("pipeworks") - -dofile(pipeworks.modpath.."/default_settings.lua") - --- Read the external config file if it exists. -local worldsettingspath = pipeworks.worldpath.."/pipeworks_settings.txt" -local worldsettingsfile = io.open(worldsettingspath, "r") -if worldsettingsfile then - worldsettingsfile:close() - dofile(worldsettingspath) -end - --- Random variables - -pipeworks.expect_infinite_stacks = true -if minetest.get_modpath("unified_inventory") or not minetest.settings:get_bool("creative_mode") then - pipeworks.expect_infinite_stacks = false -end - -pipeworks.meseadjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}} - -pipeworks.rules_all = {{x=0, y=0, z=1},{x=0, y=0, z=-1},{x=1, y=0, z=0},{x=-1, y=0, z=0}, - {x=0, y=1, z=1},{x=0, y=1, z=-1},{x=1, y=1, z=0},{x=-1, y=1, z=0}, - {x=0, y=-1, z=1},{x=0, y=-1, z=-1},{x=1, y=-1, z=0},{x=-1, y=-1, z=0}, - {x=0, y=1, z=0}, {x=0, y=-1, z=0}} - -pipeworks.mesecons_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=1,z=0},{x=0,y=-1,z=0}} -pipeworks.digilines_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=1,z=0},{x=0,y=-1,z=0}} - -pipeworks.liquid_texture = "default_water.png" - -pipeworks.button_off = {text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"} -pipeworks.button_on = {text="", texture="pipeworks_button_on.png", addopts="false;false;pipeworks_button_interm.png"} -pipeworks.button_base = "image_button[0,4.3;1,0.6" -pipeworks.button_label = "label[0.9,4.31;Allow splitting incoming stacks from tubes]" - --- Helper functions - -function pipeworks.fix_image_names(table, replacement) - local outtable={} - for i in ipairs(table) do - outtable[i]=string.gsub(table[i], "_XXXXX", replacement) - end - - return outtable -end - -function pipeworks.add_node_box(t, b) - if not t or not b then return end - for i in ipairs(b) - do table.insert(t, b[i]) - end -end - -function pipeworks.may_configure(pos, player) - local name = player:get_player_name() - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - - if owner ~= "" then -- wielders and filters - return owner == name - end - return not minetest.is_protected(pos, name) -end - -function pipeworks.replace_name(tbl,tr,name) - local ntbl={} - for key,i in pairs(tbl) do - if type(i)=="string" then - ntbl[key]=string.gsub(i,tr,name) - elseif type(i)=="table" then - ntbl[key]=pipeworks.replace_name(i,tr,name) - else - ntbl[key]=i - end - end - return ntbl -end - -------------------------------------------- --- Load the various other parts of the mod - -dofile(pipeworks.modpath.."/common.lua") -dofile(pipeworks.modpath.."/models.lua") -dofile(pipeworks.modpath.."/autoplace_pipes.lua") -dofile(pipeworks.modpath.."/autoplace_tubes.lua") -dofile(pipeworks.modpath.."/luaentity.lua") -dofile(pipeworks.modpath.."/item_transport.lua") -dofile(pipeworks.modpath.."/flowing_logic.lua") -dofile(pipeworks.modpath.."/crafts.lua") -dofile(pipeworks.modpath.."/tube_registration.lua") -dofile(pipeworks.modpath.."/routing_tubes.lua") -dofile(pipeworks.modpath.."/sorting_tubes.lua") -dofile(pipeworks.modpath.."/vacuum_tubes.lua") -dofile(pipeworks.modpath.."/signal_tubes.lua") -dofile(pipeworks.modpath.."/decorative_tubes.lua") -dofile(pipeworks.modpath.."/filter-injector.lua") -dofile(pipeworks.modpath.."/trashcan.lua") -dofile(pipeworks.modpath.."/wielder.lua") - -if pipeworks.enable_pipes then dofile(pipeworks.modpath.."/pipes.lua") end -if pipeworks.enable_teleport_tube then dofile(pipeworks.modpath.."/teleport_tube.lua") end -if pipeworks.enable_pipe_devices then dofile(pipeworks.modpath.."/devices.lua") end -if pipeworks.enable_redefines then - dofile(pipeworks.modpath.."/compat-chests.lua") - dofile(pipeworks.modpath.."/compat-furnaces.lua") -end -if pipeworks.enable_autocrafter then dofile(pipeworks.modpath.."/autocrafter.lua") end -if pipeworks.enable_lua_tube then dofile(pipeworks.modpath.."/lua_tube.lua") end - -minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty") - -print("Pipeworks loaded!") - diff --git a/mods/ITEMS/pipeworks/item_transport.lua b/mods/ITEMS/pipeworks/item_transport.lua deleted file mode 100644 index 551db07..0000000 --- a/mods/ITEMS/pipeworks/item_transport.lua +++ /dev/null @@ -1,331 +0,0 @@ -local luaentity = pipeworks.luaentity -local enable_max_limit = minetest.settings:get("pipeworks_enable_items_per_tube_limit") -local max_tube_limit = tonumber(minetest.settings:get("pipeworks_max_items_per_tube")) or 30 -if enable_max_limit == nil then enable_max_limit = true end - -function pipeworks.tube_item(pos, item) - error("obsolete pipeworks.tube_item() called; change caller to use pipeworks.tube_inject_item() instead") -end - -function pipeworks.tube_inject_item(pos, start_pos, velocity, item, owner) - -- Take item in any format - local stack = ItemStack(item) - local obj = luaentity.add_entity(pos, "pipeworks:tubed_item") - obj:set_item(stack:to_string()) - obj.start_pos = vector.new(start_pos) - obj:setvelocity(velocity) - obj.owner = owner - --obj:set_color("red") -- todo: this is test-only code - return obj -end - --- adding two tube functions --- can_remove(pos,node,stack,dir) returns the maximum number of items of that stack that can be removed --- remove_items(pos,node,stack,dir,count) removes count items and returns them --- both optional w/ sensible defaults and fallback to normal allow_* function --- XXX: possibly change insert_object to insert_item - -local adjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}} - -function pipeworks.notvel(tbl, vel) - local tbl2={} - for _,val in ipairs(tbl) do - if val.x ~= -vel.x or val.y ~= -vel.y or val.z ~= -vel.z then table.insert(tbl2, val) end - end - return tbl2 -end - -local tube_item_count = {} - -minetest.register_globalstep(function(dtime) - if not luaentity.entities then - return - end - tube_item_count = {} - for id, entity in pairs(luaentity.entities) do - if entity.name == "pipeworks:tubed_item" then - local h = minetest.hash_node_position(vector.round(entity._pos)) - tube_item_count[h] = (tube_item_count[h] or 0) + 1 - end - end -end) - -local function go_next(pos, velocity, stack, owner) - local next_positions = {} - local max_priority = 0 - local cnode = minetest.get_node(pos) - local cmeta = minetest.get_meta(pos) - local can_go - local speed = math.abs(velocity.x + velocity.y + velocity.z) - if speed == 0 then - speed = 1 - end - local vel = {x = velocity.x/speed, y = velocity.y/speed, z = velocity.z/speed,speed=speed} - if speed >= 4.1 then - speed = 4 - elseif speed >= 1.1 then - speed = speed - 0.1 - else - speed = 1 - end - vel.speed = speed - if minetest.registered_nodes[cnode.name] and minetest.registered_nodes[cnode.name].tube and minetest.registered_nodes[cnode.name].tube.can_go then - can_go = minetest.registered_nodes[cnode.name].tube.can_go(pos, cnode, vel, stack) - else - can_go = pipeworks.notvel(adjlist, vel) - end - for _, vect in ipairs(can_go) do - local npos = vector.add(pos, vect) - pipeworks.load_position(npos) - local node = minetest.get_node(npos) - local reg_node = minetest.registered_nodes[node.name] - if reg_node then - local tube_def = reg_node.tube - local tubedevice = minetest.get_item_group(node.name, "tubedevice") - local tube_priority = (tube_def and tube_def.priority) or 100 - if tubedevice > 0 and tube_priority >= max_priority then - if not tube_def or not tube_def.can_insert or - tube_def.can_insert(npos, node, stack, vect, owner) then - if tube_priority > max_priority then - max_priority = tube_priority - next_positions = {} - end - next_positions[#next_positions + 1] = {pos = npos, vect = vect} - end - end - end - end - - if enable_max_limit then - local h = minetest.hash_node_position(pos) - local itemcount = tube_item_count[h] or 0 - if itemcount > max_tube_limit then - cmeta:set_string("the_tube_was", minetest.serialize(cnode)) - print("[Pipeworks] Warning - a tube at "..minetest.pos_to_string(pos).." broke due to too many items ("..itemcount..")") - minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) - pipeworks.scan_for_tube_objects(pos) - end - end - - if not next_positions[1] then - return false, nil - end - - local n = (cmeta:get_int("tubedir") % (#next_positions)) + 1 - if pipeworks.enable_cyclic_mode then - cmeta:set_int("tubedir", n) - end - local new_velocity = vector.multiply(next_positions[n].vect, vel.speed) - return true, new_velocity -end - -minetest.register_entity("pipeworks:tubed_item", { - initial_properties = { - hp_max = 1, - physical = false, - collisionbox = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1}, - visual = "wielditem", - visual_size = {x = 0.15, y = 0.15}, - textures = {""}, - spritediv = {x = 1, y = 1}, - initial_sprite_basepos = {x = 0, y = 0}, - is_visible = false, - }, - - physical_state = false, - - from_data = function(self, itemstring) - local stack = ItemStack(itemstring) - local itemtable = stack:to_table() - local itemname = nil - if itemtable then - itemname = stack:to_table().name - end - local item_texture = nil - local item_type = "" - if minetest.registered_items[itemname] then - item_texture = minetest.registered_items[itemname].inventory_image - item_type = minetest.registered_items[itemname].type - end - self.object:set_properties({ - is_visible = true, - textures = {stack:get_name()} - }) - local def = stack:get_definition() - self.object:setyaw((def and def.type == "node") and 0 or math.pi * 0.25) - end, - - get_staticdata = luaentity.get_staticdata, - on_activate = function(self, staticdata) -- Legacy code, should be replaced later by luaentity.on_activate - if staticdata == "" or staticdata == nil then - return - end - if staticdata == "toremove" then - self.object:remove() - return - end - local item = minetest.deserialize(staticdata) - pipeworks.tube_inject_item(self.object:getpos(), item.start_pos, item.velocity, item.itemstring) - self.object:remove() - end, -}) - -minetest.register_entity("pipeworks:color_entity", { - initial_properties = { - hp_max = 1, - physical = false, - collisionbox = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1}, - visual = "cube", - visual_size = {x = 3.5, y = 3.5, z = 3.5}, -- todo: find correct size - textures = {""}, - is_visible = false, - }, - - physical_state = false, - - from_data = function(self, color) - local t = "pipeworks_color_"..color..".png" - local prop = { - is_visible = true, - visual = "cube", - textures = {t, t, t, t, t, t} -- todo: textures - } - self.object:set_properties(prop) - end, - - get_staticdata = luaentity.get_staticdata, - on_activate = luaentity.on_activate, -}) - -luaentity.register_entity("pipeworks:tubed_item", { - itemstring = '', - item_entity = nil, - color_entity = nil, - color = nil, - start_pos = nil, - - set_item = function(self, item) - local itemstring = ItemStack(item):to_string() -- Accept any input format - if self.itemstring == itemstring then - return - end - if self.item_entity then - self:remove_attached_entity(self.item_entity) - end - self.itemstring = itemstring - self.item_entity = self:add_attached_entity("pipeworks:tubed_item", itemstring) - end, - - set_color = function(self, color) - if self.color == color then - return - end - self.color = color - if self.color_entity then - self:remove_attached_entity(self.color_entity) - end - if color then - self.color_entity = self:add_attached_entity("pipeworks:color_entity", color) - else - self.color_entity = nil - end - end, - - on_step = function(self, dtime) - local pos = self:getpos() - if self.start_pos == nil then - self.start_pos = vector.round(pos) - self:setpos(pos) - end - - local stack = ItemStack(self.itemstring) - - local velocity = self:getvelocity() - - local moved = false - local speed = math.abs(velocity.x + velocity.y + velocity.z) - if speed == 0 then - speed = 1 - moved = true - end - local vel = {x = velocity.x / speed, y = velocity.y / speed, z = velocity.z / speed, speed = speed} - local moved_by = vector.distance(pos, self.start_pos) - - if moved_by >= 1 then - self.start_pos = vector.add(self.start_pos, vel) - moved = true - end - - pipeworks.load_position(self.start_pos) - local node = minetest.get_node(self.start_pos) - if moved and minetest.get_item_group(node.name, "tubedevice_receiver") == 1 then - local leftover - if minetest.registered_nodes[node.name].tube and minetest.registered_nodes[node.name].tube.insert_object then - leftover = minetest.registered_nodes[node.name].tube.insert_object(self.start_pos, node, stack, vel, self.owner) - else - leftover = stack - end - if leftover:is_empty() then - self:remove() - return - end - velocity = vector.multiply(velocity, -1) - self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) - self:setvelocity(velocity) - self:set_item(leftover:to_string()) - return - end - - if moved then - local found_next, new_velocity = go_next(self.start_pos, velocity, stack, self.owner) -- todo: color - local rev_vel = vector.multiply(velocity, -1) - local rev_dir = vector.direction(self.start_pos,vector.add(self.start_pos,rev_vel)) - local rev_node = minetest.get_node(vector.round(vector.add(self.start_pos,rev_dir))) - local tube_present = minetest.get_item_group(rev_node.name,"tubedevice") == 1 - if not found_next then - if pipeworks.drop_on_routing_fail or not tube_present or - minetest.get_item_group(rev_node.name,"tube") ~= 1 then - -- Using add_item instead of item_drop since this makes pipeworks backward - -- compatible with Minetest 0.4.13. - -- Using item_drop here makes Minetest 0.4.13 crash. - local dropped_item = minetest.add_item(self.start_pos, stack) - dropped_item:setvelocity(vector.multiply(velocity, 5)) - self:remove() - return - else - velocity = vector.multiply(velocity, -1) - self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) - self:setvelocity(velocity) - end - end - - if new_velocity and not vector.equals(velocity, new_velocity) then - local nvelr = math.abs(new_velocity.x + new_velocity.y + new_velocity.z) - self:setpos(vector.add(self.start_pos, vector.multiply(new_velocity, (moved_by - 1) / nvelr))) - self:setvelocity(new_velocity) - end - end - end -}) - -if minetest.get_modpath("mesecons_mvps") then - mesecon.register_mvps_unmov("pipeworks:tubed_item") - mesecon.register_mvps_unmov("pipeworks:color_entity") - mesecon.register_on_mvps_move(function(moved_nodes) - local moved = {} - for _, n in ipairs(moved_nodes) do - moved[minetest.hash_node_position(n.oldpos)] = vector.subtract(n.pos, n.oldpos) - end - for id, entity in pairs(luaentity.entities) do - if entity.name == "pipeworks:tubed_item" then - local pos = entity:getpos() - local rpos = vector.round(pos) - local dir = moved[minetest.hash_node_position(rpos)] - if dir then - entity:setpos(vector.add(pos, dir)) - entity.start_pos = vector.add(entity.start_pos, dir) - end - end - end - end) -end diff --git a/mods/ITEMS/pipeworks/legacy.lua b/mods/ITEMS/pipeworks/legacy.lua deleted file mode 100644 index 0b629fa..0000000 --- a/mods/ITEMS/pipeworks/legacy.lua +++ /dev/null @@ -1,59 +0,0 @@ - -if not minetest.get_modpath("auto_tree_tap") and - minetest.get_modpath("technic") then - - minetest.register_abm({ - nodenames = { "auto_tree_tap:off", "auto_tree_tap:on" }, - chance = 1, - interval = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local fdir = node.param2 - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("pick", 1) - inv:set_size("ghost_pick", 1) - inv:set_size("main", 100) - minetest.set_node(pos, {name = "pipeworks:nodebreaker_off", param2 = fdir}) - minetest.registered_nodes["pipeworks:nodebreaker_off"].on_punch(pos, node) - inv:set_stack("pick", 1, ItemStack("technic:treetap")) - end - }) - - minetest.register_node(":auto_tree_tap:off", { - description = "Auto-Tap", - tiles = {"pipeworks_nodebreaker_top_off.png","pipeworks_nodebreaker_bottom_off.png","pipeworks_nodebreaker_side2_off.png","pipeworks_nodebreaker_side1_off.png", - "pipeworks_nodebreaker_back.png","pipeworks_nodebreaker_front_off.png"}, - is_ground_content = true, - paramtype2 = "facedir", - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, not_in_creative_inventory=1 }, - sounds = default.node_sound_stone_defaults(), - tube = {connect_sides={back=1}}, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("pick", 1) - inv:set_stack("pick", 1, ItemStack("tools:pick_mese")) - end, - after_place_node = function (pos, placer) - pipeworks.scan_for_tube_objects(pos, placer) - local placer_pos = placer:getpos() - - --correct for the player's height - if placer:is_player() then placer_pos.y = placer_pos.y + 1.5 end - - --correct for 6d facedir - if placer_pos then - local dir = { - x = pos.x - placer_pos.x, - y = pos.y - placer_pos.y, - z = pos.z - placer_pos.z - } - local node = minetest.get_node(pos) - node.param2 = minetest.dir_to_facedir(dir, true) - minetest.set_node(pos, node) - minetest.log("action", "real (6d) facedir: " .. node.param2) - end - end, - after_dig_node = pipeworks.scan_for_tube_objects, - }) -end diff --git a/mods/ITEMS/pipeworks/lua_tube.lua b/mods/ITEMS/pipeworks/lua_tube.lua deleted file mode 100644 index 51665ae..0000000 --- a/mods/ITEMS/pipeworks/lua_tube.lua +++ /dev/null @@ -1,850 +0,0 @@ --- ______ --- | --- | --- | __ ___ _ __ _ _ --- | | | | | |\ | | |_| | | | | |_ |_| --- |___| |______ |__| | \| | | \ |__| |_ |_ |_ |\ tube --- | --- | --- - --- Reference --- ports = get_real_port_states(pos): gets if inputs are powered from outside --- newport = merge_port_states(state1, state2): just does result = state1 or state2 for every port --- set_port(pos, rule, state): activates/deactivates the mesecons according to the port states --- set_port_states(pos, ports): Applies new port states to a Luacontroller at pos --- run(pos): runs the code in the controller at pos --- reset_meta(pos, code, errmsg): performs a software-reset, installs new code and prints error messages --- resetn(pos): performs a hardware reset, turns off all ports --- --- The Sandbox --- The whole code of the controller runs in a sandbox, --- a very restricted environment. --- Actually the only way to damage the server is to --- use too much memory from the sandbox. --- You can add more functions to the environment --- (see where local env is defined) --- Something nice to play is is appending minetest.env to it. - -local BASENAME = "pipeworks:lua_tube" - -local rules = { - red = {x = -1, y = 0, z = 0, name = "red"}, - blue = {x = 1, y = 0, z = 0, name = "blue"}, - yellow = {x = 0, y = -1, z = 0, name = "yellow"}, - green = {x = 0, y = 1, z = 0, name = "green"}, - black = {x = 0, y = 0, z = -1, name = "black"}, - white = {x = 0, y = 0, z = 1, name = "white"}, -} - - ------------------- --- Action stuff -- ------------------- --- These helpers are required to set the port states of the lua_tube - -local function update_real_port_states(pos, rule_name, new_state) - local meta = minetest.get_meta(pos) - if rule_name == nil then - meta:set_int("real_portstates", 1) - return - end - local n = meta:get_int("real_portstates") - 1 - local L = {} - for i = 1, 6 do - L[i] = n % 2 - n = math.floor(n / 2) - end - -- (0,0,-1) (0,-1,0) (-1,0,0) (1,0,0) (0,1,0) (0,0,1) - local pos_to_side = { 5, 3, 1, nil, 2, 4, 6 } - if rule_name.x == nil then - for _, rname in ipairs(rule_name) do - local port = pos_to_side[rname.x + (2 * rname.y) + (3 * rname.z) + 4] - L[port] = (newstate == "on") and 1 or 0 - end - else - local port = pos_to_side[rule_name.x + (2 * rule_name.y) + (3 * rule_name.z) + 4] - L[port] = (new_state == "on") and 1 or 0 - end - meta:set_int("real_portstates", - 1 + - 1 * L[1] + - 2 * L[2] + - 4 * L[3] + - 8 * L[4] + - 16 * L[5] + - 32 * L[6]) -end - - -local port_names = {"red", "blue", "yellow", "green", "black", "white"} - -local function get_real_port_states(pos) - -- Determine if ports are powered (by itself or from outside) - local meta = minetest.get_meta(pos) - local L = {} - local n = meta:get_int("real_portstates") - 1 - for _, name in ipairs(port_names) do - L[name] = ((n % 2) == 1) - n = math.floor(n / 2) - end - return L -end - - -local function merge_port_states(ports, vports) - return { - red = ports.red or vports.red, - blue = ports.blue or vports.blue, - yellow = ports.yellow or vports.yellow, - green = ports.green or vports.green, - black = ports.black or vports.black, - white = ports.white or vports.white, - } -end - -local function generate_name(ports) - local red = ports.red and 1 or 0 - local blue = ports.blue and 1 or 0 - local yellow = ports.yellow and 1 or 0 - local green = ports.green and 1 or 0 - local black = ports.black and 1 or 0 - local white = ports.white and 1 or 0 - return BASENAME..white..black..green..yellow..blue..red -end - - -local function set_port(pos, rule, state) - if state then - mesecon.receptor_on(pos, {rule}) - else - mesecon.receptor_off(pos, {rule}) - end -end - - -local function clean_port_states(ports) - ports.red = ports.red and true or false - ports.blue = ports.blue and true or false - ports.yellow = ports.yellow and true or false - ports.green = ports.green and true or false - ports.black = ports.black and true or false - ports.white = ports.white and true or false -end - - -local function set_port_states(pos, ports) - local node = minetest.get_node(pos) - local name = node.name - clean_port_states(ports) - local vports = minetest.registered_nodes[name].virtual_portstates - local new_name = generate_name(ports) - - if name ~= new_name and vports then - -- Problem: - -- We need to place the new node first so that when turning - -- off some port, it won't stay on because the rules indicate - -- there is an onstate output port there. - -- When turning the output off then, it will however cause feedback - -- so that the lua_tube will receive an "off" event by turning - -- its output off. - -- Solution / Workaround: - -- Remember which output was turned off and ignore next "off" event. - local meta = minetest.get_meta(pos) - local ign = minetest.deserialize(meta:get_string("ignore_offevents")) or {} - if ports.red and not vports.red and not mesecon.is_powered(pos, rules.red) then ign.red = true end - if ports.blue and not vports.blue and not mesecon.is_powered(pos, rules.blue) then ign.blue = true end - if ports.yellow and not vports.yellow and not mesecon.is_powered(pos, rules.yellow) then ign.yellow = true end - if ports.green and not vports.green and not mesecon.is_powered(pos, rules.green) then ign.green = true end - if ports.black and not vports.black and not mesecon.is_powered(pos, rules.black) then ign.black = true end - if ports.white and not vports.white and not mesecon.is_powered(pos, rules.white) then ign.white = true end - meta:set_string("ignore_offevents", minetest.serialize(ign)) - - minetest.swap_node(pos, {name = new_name, param2 = node.param2}) - - if ports.red ~= vports.red then set_port(pos, rules.red, ports.red) end - if ports.blue ~= vports.blue then set_port(pos, rules.blue, ports.blue) end - if ports.yellow ~= vports.yellow then set_port(pos, rules.yellow, ports.yellow) end - if ports.green ~= vports.green then set_port(pos, rules.green, ports.green) end - if ports.black ~= vports.black then set_port(pos, rules.black, ports.black) end - if ports.white ~= vports.white then set_port(pos, rules.white, ports.white) end - end -end - - ------------------ --- Overheating -- ------------------ -local function burn_controller(pos) - local node = minetest.get_node(pos) - node.name = BASENAME.."_burnt" - minetest.swap_node(pos, node) - minetest.get_meta(pos):set_string("lc_memory", ""); - -- Wait for pending operations - minetest.after(0.2, mesecon.receptor_off, pos, mesecon.rules.flat) -end - -local function overheat(pos, meta) - if mesecon.do_overheat(pos) then -- If too hot - burn_controller(pos) - return true - end -end - ------------------------- --- Ignored off events -- ------------------------- - -local function ignore_event(event, meta) - if event.type ~= "off" then return false end - local ignore_offevents = minetest.deserialize(meta:get_string("ignore_offevents")) or {} - if ignore_offevents[event.pin.name] then - ignore_offevents[event.pin.name] = nil - meta:set_string("ignore_offevents", minetest.serialize(ignore_offevents)) - return true - end -end - -------------------------- --- Parsing and running -- -------------------------- - -local function safe_print(param) - print(dump(param)) -end - -local function safe_date() - return(os.date("*t",os.time())) -end - --- string.rep(str, n) with a high value for n can be used to DoS --- the server. Therefore, limit max. length of generated string. -local function safe_string_rep(str, n) - if #str * n > mesecon.setting("luacontroller_string_rep_max", 64000) then - debug.sethook() -- Clear hook - error("string.rep: string length overflow", 2) - end - - return string.rep(str, n) -end - --- string.find with a pattern can be used to DoS the server. --- Therefore, limit string.find to patternless matching. -local function safe_string_find(...) - if (select(4, ...)) ~= true then - debug.sethook() -- Clear hook - error("string.find: 'plain' (fourth parameter) must always be true in a lua controlled tube") - end - - return string.find(...) -end - -local function remove_functions(x) - local tp = type(x) - if tp == "function" then - return nil - end - - -- Make sure to not serialize the same table multiple times, otherwise - -- writing mem.test = mem in the lua controlled tube will lead to infinite recursion - local seen = {} - - local function rfuncs(x) - if seen[x] then return end - seen[x] = true - if type(x) ~= "table" then return end - - for key, value in pairs(x) do - if type(key) == "function" or type(value) == "function" then - x[key] = nil - else - if type(key) == "table" then - rfuncs(key) - end - if type(value) == "table" then - rfuncs(value) - end - end - end - end - - rfuncs(x) - - return x -end - -local function get_interrupt(pos) - -- iid = interrupt id - local function interrupt(time, iid) - if type(time) ~= "number" then return end - local luac_id = minetest.get_meta(pos):get_int("luac_id") - mesecon.queue:add_action(pos, "pipeworks:lc_tube_interrupt", {luac_id, iid}, time, iid, 1) - end - return interrupt -end - - -local function get_digiline_send(pos) - if not digiline then return end - return function(channel, msg) - -- Make sure channel is string, number or boolean - if (type(channel) ~= "string" and type(channel) ~= "number" and type(channel) ~= "boolean") then - return false - end - - -- It is technically possible to send functions over the wire since - -- the high performance impact of stripping those from the data has - -- been decided to not be worth the added realism. - -- Make sure serialized version of the data is not insanely long to - -- prevent DoS-like attacks - local msg_ser = minetest.serialize(msg) - if #msg_ser > mesecon.setting("luacontroller_digiline_maxlen", 50000) then - return false - end - - minetest.after(0, function() - digilines.receptor_send(pos, digiline.rules.default, channel, msg) - end) - return true - end -end - - -local safe_globals = { - "assert", "error", "ipairs", "next", "pairs", "select", - "tonumber", "tostring", "type", "unpack", "_VERSION" -} - -local function create_environment(pos, mem, event) - -- Gather variables for the environment - local vports = minetest.registered_nodes[minetest.get_node(pos).name].virtual_portstates - local vports_copy = {} - for k, v in pairs(vports) do vports_copy[k] = v end - local rports = get_real_port_states(pos) - - -- Create new library tables on each call to prevent one Luacontroller - -- from breaking a library and messing up other Luacontrollers. - local env = { - pin = merge_port_states(vports, rports), - port = vports_copy, - event = event, - mem = mem, - heat = mesecon.get_heat(pos), - heat_max = mesecon.setting("overheat_max", 20), - print = safe_print, - interrupt = get_interrupt(pos), - digiline_send = get_digiline_send(pos), - string = { - byte = string.byte, - char = string.char, - format = string.format, - len = string.len, - lower = string.lower, - upper = string.upper, - rep = safe_string_rep, - reverse = string.reverse, - sub = string.sub, - find = safe_string_find, - }, - math = { - abs = math.abs, - acos = math.acos, - asin = math.asin, - atan = math.atan, - atan2 = math.atan2, - ceil = math.ceil, - cos = math.cos, - cosh = math.cosh, - deg = math.deg, - exp = math.exp, - floor = math.floor, - fmod = math.fmod, - frexp = math.frexp, - huge = math.huge, - ldexp = math.ldexp, - log = math.log, - log10 = math.log10, - max = math.max, - min = math.min, - modf = math.modf, - pi = math.pi, - pow = math.pow, - rad = math.rad, - random = math.random, - sin = math.sin, - sinh = math.sinh, - sqrt = math.sqrt, - tan = math.tan, - tanh = math.tanh, - }, - table = { - concat = table.concat, - insert = table.insert, - maxn = table.maxn, - remove = table.remove, - sort = table.sort, - }, - os = { - clock = os.clock, - difftime = os.difftime, - time = os.time, - datetable = safe_date, - }, - } - env._G = env - - for _, name in pairs(safe_globals) do - env[name] = _G[name] - end - - return env -end - - -local function timeout() - debug.sethook() -- Clear hook - error("Code timed out!", 2) -end - - -local function create_sandbox(code, env) - if code:byte(1) == 27 then - return nil, "Binary code prohibited." - end - local f, msg = loadstring(code) - if not f then return nil, msg end - setfenv(f, env) - - -- Turn off JIT optimization for user code so that count - -- events are generated when adding debug hooks - if rawget(_G, "jit") then - jit.off(f, true) - end - - return function(...) - -- Use instruction counter to stop execution - -- after luacontroller_maxevents - local maxevents = mesecon.setting("luacontroller_maxevents", 10000) - debug.sethook(timeout, "", maxevents) - local ok, ret = pcall(f, ...) - debug.sethook() -- Clear hook - if not ok then error(ret, 0) end - return ret - end -end - - -local function load_memory(meta) - return minetest.deserialize(meta:get_string("lc_memory")) or {} -end - - -local function save_memory(pos, meta, mem) - local memstring = minetest.serialize(remove_functions(mem)) - local memsize_max = mesecon.setting("luacontroller_memsize", 100000) - - if (#memstring <= memsize_max) then - meta:set_string("lc_memory", memstring) - else - print("Error: lua_tube memory overflow. "..memsize_max.." bytes available, " - ..#memstring.." required. Controller overheats.") - burn_controller(pos) - end -end - - -local function run(pos, event) - local meta = minetest.get_meta(pos) - if overheat(pos) then return end - if ignore_event(event, meta) then return end - - -- Load code & mem from meta - local mem = load_memory(meta) - local code = meta:get_string("code") - - -- Create environment - local env = create_environment(pos, mem, event) - - -- Create the sandbox and execute code - local f, msg = create_sandbox(code, env) - if not f then return false, msg end - local succ, msg = pcall(f) - if not succ then return false, msg end - if type(env.port) ~= "table" then - return false, "Ports set are invalid." - end - - -- Actually set the ports - set_port_states(pos, env.port) - - -- Save memory. This may burn the luacontroller if a memory overflow occurs. - save_memory(pos, meta, env.mem) - - return succ, msg -end - -mesecon.queue:add_function("pipeworks:lc_tube_interrupt", function (pos, luac_id, iid) - -- There is no lua_tube anymore / it has been reprogrammed / replaced / burnt - if (minetest.get_meta(pos):get_int("luac_id") ~= luac_id) then return end - if (minetest.registered_nodes[minetest.get_node(pos).name].is_burnt) then return end - run(pos, {type = "interrupt", iid = iid}) -end) - -local function reset_meta(pos, code, errmsg) - local meta = minetest.get_meta(pos) - meta:set_string("code", code) - code = minetest.formspec_escape(code or "") - errmsg = minetest.formspec_escape(tostring(errmsg or "")) - meta:set_string("formspec", "size[12,10]".. - "background[-0.2,-0.25;12.4,10.75;jeija_luac_background.png]".. - "textarea[0.2,0.2;12.2,9.5;code;;"..code.."]".. - "image_button[4.75,8.75;2.5,1;jeija_luac_runbutton.png;program;]".. - "image_button_exit[11.72,-0.25;0.425,0.4;jeija_close_window.png;exit;]".. - "label[0.1,9;"..errmsg.."]") - meta:set_int("luac_id", math.random(1, 65535)) -end - -local function reset(pos) - set_port_states(pos, {red = false, blue = false, yellow = false, - green = false, black = false, white = false}) -end - - ------------------------ --- Node Registration -- ------------------------ - -local output_rules = {} -local input_rules = {} - -local node_box = { - type = "fixed", - fixed = { - pipeworks.tube_leftstub[1], -- tube segment against -X face - pipeworks.tube_rightstub[1], -- tube segment against +X face - pipeworks.tube_bottomstub[1], -- tube segment against -Y face - pipeworks.tube_topstub[1], -- tube segment against +Y face - pipeworks.tube_frontstub[1], -- tube segment against -Z face - pipeworks.tube_backstub[1], -- tube segment against +Z face - } -} - -local selection_box = { - type = "fixed", - fixed = pipeworks.tube_selectboxes, -} - -local digiline = { - receptor = {}, - effector = { - action = function(pos, node, channel, msg) - run(pos, {type = "digiline", channel = channel, msg = msg}) - end - } -} -local function on_receive_fields(pos, form_name, fields, sender) - if not fields.program then - return - end - local name = sender:get_player_name() - if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, {protection_bypass=true}) then - minetest.record_protection_violation(pos, name) - return - end - reset(pos) - reset_meta(pos, fields.code) - local succ, err = run(pos, {type="program"}) - if not succ then - print(err) - reset_meta(pos, fields.code, err) - end -end - -local function go_back(velocity) - local adjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}} - local speed = math.abs(velocity.x + velocity.y + velocity.z) - if speed == 0 then - speed = 1 - end - local vel = {x = velocity.x/speed, y = velocity.y/speed, z = velocity.z/speed,speed=speed} - if speed >= 4.1 then - speed = 4 - elseif speed >= 1.1 then - speed = speed - 0.1 - else - speed = 1 - end - vel.speed = speed - return pipeworks.notvel(adjlist, vel) -end - -local tiles_base = { - "pipeworks_mese_tube_plain_4.png", "pipeworks_mese_tube_plain_3.png", - "pipeworks_mese_tube_plain_2.png", "pipeworks_mese_tube_plain_1.png", - "pipeworks_mese_tube_plain_6.png", "pipeworks_mese_tube_plain_5.png"} - -for red = 0, 1 do -- 0 = off 1 = on -for blue = 0, 1 do -for yellow = 0, 1 do -for green = 0, 1 do -for black = 0, 1 do -for white = 0, 1 do - local cid = tostring(white)..tostring(black)..tostring(green).. - tostring(yellow)..tostring(blue)..tostring(red) - local node_name = BASENAME..cid - local tiles = table.copy(tiles_base) - if red == 1 then - tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_on.png^[transformR90)" - tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_on.png^[transformR90)" - tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_on.png^[transformR270)" - tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_on.png^[transformR90)" - else - tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_off.png^[transformR90)" - tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_off.png^[transformR90)" - tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_off.png^[transformR270)" - tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_off.png^[transformR90)" - end - if blue == 1 then - tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_on.png^[transformR270)" - tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_on.png^[transformR270)" - tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_on.png^[transformR90)" - tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_on.png^[transformR270)" - else - tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_off.png^[transformR270)" - tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_off.png^[transformR270)" - tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_off.png^[transformR90)" - tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_off.png^[transformR270)" - end - if yellow == 1 then - tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_on.png^[transformR180)" - tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_on.png^[transformR180)" - tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_on.png^[transformR180)" - tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_on.png^[transformR180)" - else - tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_off.png^[transformR180)" - tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_off.png^[transformR180)" - tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_off.png^[transformR180)" - tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_off.png^[transformR180)" - end - if green == 1 then - tiles[3] = tiles[3].."^pipeworks_lua_tube_port_on.png" - tiles[4] = tiles[4].."^pipeworks_lua_tube_port_on.png" - tiles[5] = tiles[5].."^pipeworks_lua_tube_port_on.png" - tiles[6] = tiles[6].."^pipeworks_lua_tube_port_on.png" - else - tiles[3] = tiles[3].."^pipeworks_lua_tube_port_off.png" - tiles[4] = tiles[4].."^pipeworks_lua_tube_port_off.png" - tiles[5] = tiles[5].."^pipeworks_lua_tube_port_off.png" - tiles[6] = tiles[6].."^pipeworks_lua_tube_port_off.png" - end - if black == 1 then - tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_on.png^[transformR180)" - tiles[2] = tiles[2].."^pipeworks_lua_tube_port_on.png" - tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_on.png^[transformR90)" - tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_on.png^[transformR270)" - else - tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_off.png^[transformR180)" - tiles[2] = tiles[2].."^pipeworks_lua_tube_port_off.png" - tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_off.png^[transformR90)" - tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_off.png^[transformR270)" - end - if white == 1 then - tiles[1] = tiles[1].."^pipeworks_lua_tube_port_on.png" - tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_on.png^[transformR180)" - tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_on.png^[transformR270)" - tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_on.png^[transformR90)" - else - tiles[1] = tiles[1].."^pipeworks_lua_tube_port_off.png" - tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_off.png^[transformR180)" - tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_off.png^[transformR270)" - tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_off.png^[transformR90)" - end - - local groups = {snappy = 3, tube = 1, tubedevice = 1, overheat = 1} - if red + blue + yellow + green + black + white ~= 0 then - groups.not_in_creative_inventory = 1 - end - - output_rules[cid] = {} - input_rules[cid] = {} - if red == 1 then table.insert(output_rules[cid], rules.red) end - if blue == 1 then table.insert(output_rules[cid], rules.blue) end - if yellow == 1 then table.insert(output_rules[cid], rules.yellow) end - if green == 1 then table.insert(output_rules[cid], rules.green) end - if black == 1 then table.insert(output_rules[cid], rules.black) end - if white == 1 then table.insert(output_rules[cid], rules.white) end - - if red == 0 then table.insert( input_rules[cid], rules.red) end - if blue == 0 then table.insert( input_rules[cid], rules.blue) end - if yellow == 0 then table.insert( input_rules[cid], rules.yellow) end - if green == 0 then table.insert( input_rules[cid], rules.green) end - if black == 0 then table.insert( input_rules[cid], rules.black) end - if white == 0 then table.insert( input_rules[cid], rules.white) end - - local mesecons = { - effector = { - rules = input_rules[cid], - action_change = function (pos, _, rule_name, new_state) - update_real_port_states(pos, rule_name, new_state) - run(pos, {type=new_state, pin=rule_name}) - end, - }, - receptor = { - state = mesecon.state.on, - rules = output_rules[cid] - } - } - - minetest.register_node(node_name, { - description = "Lua controlled Tube", - drawtype = "nodebox", - tiles = tiles, - paramtype = "light", - groups = groups, - drop = BASENAME.."000000", - sunlight_propagates = true, - selection_box = selection_box, - node_box = node_box, - on_construct = reset_meta, - on_receive_fields = on_receive_fields, - sounds = default.node_sound_wood_defaults(), - mesecons = mesecons, - digiline = digiline, - -- Virtual portstates are the ports that - -- the node shows as powered up (light up). - virtual_portstates = { - red = red == 1, - blue = blue == 1, - yellow = yellow == 1, - green = green == 1, - black = black == 1, - white = white == 1, - }, - after_dig_node = function(pos, node) - mesecon.do_cooldown(pos) - mesecon.receptor_off(pos, output_rules) - pipeworks.after_dig(pos, node) - end, - is_luacontroller = true, - tubelike = 1, - tube = { - connect_sides = {front = 1, back = 1, left = 1, right = 1, top = 1, bottom = 1}, - priority = 50, - can_go = function(pos, node, velocity, stack) - local succ, msg = run(pos, { - type = "item", - itemstring = stack:to_string(), - item = stack:to_table(), - velocity = velocity, - }) - if not succ or type(msg) ~= "string" then - return go_back(velocity) - end - local r = rules[msg] - return r and {r} or go_back(velocity) - end, - }, - after_place_node = pipeworks.after_place, - on_blast = function(pos, intensity) - if not intensity or intensity > 1 + 3^0.5 then - minetest.remove_node(pos) - return {string.format("%s_%s", name, dropname)} - end - minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) - pipeworks.scan_for_tube_objects(pos) - end, - on_blast = function(pos, intensity) - if not intensity or intensity > 1 + 3^0.5 then - minetest.remove_node(pos) - return {string.format("%s_%s", name, dropname)} - end - minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) - pipeworks.scan_for_tube_objects(pos) - end, - }) -end -end -end -end -end -end - ------------------------------------- --- Overheated Lua controlled Tube -- ------------------------------------- - -local tiles_burnt = table.copy(tiles_base) -tiles_burnt[1] = tiles_burnt[1].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" -tiles_burnt[2] = tiles_burnt[2].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" -tiles_burnt[5] = tiles_burnt[5].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" -tiles_burnt[6] = tiles_burnt[6].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" -tiles_burnt[1] = tiles_burnt[1].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" -tiles_burnt[2] = tiles_burnt[2].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" -tiles_burnt[5] = tiles_burnt[5].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" -tiles_burnt[6] = tiles_burnt[6].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" -tiles_burnt[3] = tiles_burnt[3].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" -tiles_burnt[4] = tiles_burnt[4].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" -tiles_burnt[5] = tiles_burnt[5].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" -tiles_burnt[6] = tiles_burnt[6].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" -tiles_burnt[3] = tiles_burnt[3].."^pipeworks_lua_tube_port_burnt.png" -tiles_burnt[4] = tiles_burnt[4].."^pipeworks_lua_tube_port_burnt.png" -tiles_burnt[5] = tiles_burnt[5].."^pipeworks_lua_tube_port_burnt.png" -tiles_burnt[6] = tiles_burnt[6].."^pipeworks_lua_tube_port_burnt.png" -tiles_burnt[1] = tiles_burnt[1].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" -tiles_burnt[2] = tiles_burnt[2].."^pipeworks_lua_tube_port_burnt.png" -tiles_burnt[3] = tiles_burnt[3].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" -tiles_burnt[4] = tiles_burnt[4].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" -tiles_burnt[1] = tiles_burnt[1].."^pipeworks_lua_tube_port_burnt.png" -tiles_burnt[2] = tiles_burnt[2].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" -tiles_burnt[3] = tiles_burnt[3].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" -tiles_burnt[4] = tiles_burnt[4].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" - -minetest.register_node(BASENAME .. "_burnt", { - drawtype = "nodebox", - tiles = tiles_burnt, - is_burnt = true, - paramtype = "light", - groups = {snappy = 3, tube = 1, tubedevice = 1, not_in_creative_inventory=1}, - drop = BASENAME.."000000", - sunlight_propagates = true, - selection_box = selection_box, - node_box = node_box, - on_construct = reset_meta, - on_receive_fields = on_receive_fields, - sounds = default.node_sound_wood_defaults(), - virtual_portstates = {red = false, blue = false, yellow = false, - green = false, black = false, white = false}, - mesecons = { - effector = { - rules = mesecon.rules.alldirs, - action_change = function(pos, _, rule_name, new_state) - update_real_port_states(pos, rule_name, new_state) - end, - }, - }, - tubelike = 1, - tube = { - connect_sides = {front = 1, back = 1, left = 1, right = 1, top = 1, bottom = 1}, - priority = 50, - }, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, - on_blast = function(pos, intensity) - if not intensity or intensity > 1 + 3^0.5 then - minetest.remove_node(pos) - return {string.format("%s_%s", name, dropname)} - end - minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) - pipeworks.scan_for_tube_objects(pos) - end, -}) - ------------------------- --- Craft Registration -- ------------------------- - -minetest.register_craft({ - type = "shapeless", - output = BASENAME.."000000", - recipe = {"pipeworks:mese_tube_000000", "mesecons_luacontroller:luacontroller0000"}, -}) diff --git a/mods/ITEMS/pipeworks/luaentity.lua b/mods/ITEMS/pipeworks/luaentity.lua deleted file mode 100644 index e1bc408..0000000 --- a/mods/ITEMS/pipeworks/luaentity.lua +++ /dev/null @@ -1,374 +0,0 @@ -local max_entity_id = 1000000000000 -- If you need more, there's a problem with your code - -local luaentity = {} -pipeworks.luaentity = luaentity - -luaentity.registered_entities = {} - -local filename = minetest.get_worldpath().."/luaentities" -local function read_file() - local f = io.open(filename, "r") - if f == nil then return {} end - local t = f:read("*all") - f:close() - if t == "" or t == nil then return {} end - return minetest.deserialize(t) or {} -end - -local function write_file(tbl) - local f = io.open(filename, "w") - f:write(minetest.serialize(tbl)) - f:close() -end - -local function read_entities() - local t = read_file() - for _, entity in pairs(t) do - - local x=entity.start_pos.x - local y=entity.start_pos.y - local z=entity.start_pos.z - - x=math.max(-30912,x) - y=math.max(-30912,y) - z=math.max(-30912,z) - x=math.min(30927,x) - y=math.min(30927,y) - z=math.min(30927,z) - - entity.start_pos.x = x - entity.start_pos.y = y - entity.start_pos.z = z - - setmetatable(entity, luaentity.registered_entities[entity.name]) - end - return t -end - -local function write_entities() - for _, entity in pairs(luaentity.entities) do - setmetatable(entity, nil) - for _, attached in pairs(entity._attached_entities) do - if attached.entity then - attached.entity:remove() - attached.entity = nil - end - end - entity._attached_entities_master = nil - end - write_file(luaentity.entities) -end - -minetest.register_on_shutdown(write_entities) -luaentity.entities_index = 0 - -local function get_blockpos(pos) - return {x = math.floor(pos.x / 16), - y = math.floor(pos.y / 16), - z = math.floor(pos.z / 16)} -end - -local active_blocks = {} -- These only contain active blocks near players (i.e., not forceloaded ones) - -local move_entities_globalstep_part1 = function(dtime) - local active_block_range = tonumber(minetest.settings:get("active_block_range")) or 2 - local new_active_blocks = {} - for _, player in ipairs(minetest.get_connected_players()) do - local blockpos = get_blockpos(player:getpos()) - local minp = vector.subtract(blockpos, active_block_range) - local maxp = vector.add(blockpos, active_block_range) - - for x = minp.x, maxp.x do - for y = minp.y, maxp.y do - for z = minp.z, maxp.z do - local pos = {x = x, y = y, z = z} - new_active_blocks[minetest.hash_node_position(pos)] = pos - end - end - end - end - active_blocks = new_active_blocks - -- todo: callbacks on block load/unload -end - -local function is_active(pos) - return active_blocks[minetest.hash_node_position(get_blockpos(pos))] ~= nil -end - -local entitydef_default = { - _attach = function(self, attached, attach_to) - local attached_def = self._attached_entities[attached] - local attach_to_def = self._attached_entities[attach_to] - attached_def.entity:set_attach( - attach_to_def.entity, "", - vector.subtract(attached_def.offset, attach_to_def.offset), -- todo: Does not work because is object space - vector.new(0, 0, 0) - ) - end, - _set_master = function(self, index) - self._attached_entities_master = index - if not index then - return - end - local def = self._attached_entities[index] - if not def.entity then - return - end - def.entity:setpos(vector.add(self._pos, def.offset)) - def.entity:setvelocity(self._velocity) - def.entity:setacceleration(self._acceleration) - end, - _attach_all = function(self) - local master = self._attached_entities_master - if not master then - return - end - for id, entity in pairs(self._attached_entities) do - if id ~= master and entity.entity then - self:_attach(id, master) - end - end - end, - _detach_all = function(self) - local master = self._attached_entities_master - for id, entity in pairs(self._attached_entities) do - if id ~= master and entity.entity then - entity.entity:set_detach() - end - end - end, - _add_attached = function(self, index) - local entity = self._attached_entities[index] - if entity.entity then - return - end - local entity_pos = vector.add(self._pos, entity.offset) - if not is_active(entity_pos) then - return - end - local ent = minetest.add_entity(entity_pos, entity.name):get_luaentity() - ent:from_data(entity.data) - ent.parent_id = self._id - ent.attached_id = index - entity.entity = ent.object - local master = self._attached_entities_master - if master then - self:_attach(index, master) - else - self:_set_master(index) - end - end, - _remove_attached = function(self, index) - local master = self._attached_entities_master - local entity = self._attached_entities[index] - local ent = entity and entity.entity - if entity then entity.entity = nil end - if index == master then - self:_detach_all() - local newmaster - for id, attached in pairs(self._attached_entities) do - if id ~= master and attached.entity then - newmaster = id - break - end - end - self:_set_master(newmaster) - self:_attach_all() - elseif master and ent then - ent:set_detach() - end - if ent then - ent:remove() - end - end, - _add_loaded = function(self) - for id, _ in pairs(self._attached_entities) do - self:_add_attached(id) - end - end, - getid = function(self) - return self._id - end, - getpos = function(self) - return vector.new(self._pos) - end, - setpos = function(self, pos) - self._pos = vector.new(pos) - --for _, entity in pairs(self._attached_entities) do - -- if entity.entity then - -- entity.entity:setpos(vector.add(self._pos, entity.offset)) - -- end - --end - local master = self._attached_entities_master - if master then - local master_def = self._attached_entities[master] - master_def.entity:setpos(vector.add(self._pos, master_def.offset)) - end - end, - getvelocity = function(self) - return vector.new(self._velocity) - end, - setvelocity = function(self, velocity) - self._velocity = vector.new(velocity) - local master = self._attached_entities_master - if master then - self._attached_entities[master].entity:setvelocity(self._velocity) - end - end, - getacceleration = function(self) - return vector.new(self._acceleration) - end, - setacceleration = function(self, acceleration) - self._acceleration = vector.new(acceleration) - local master = self._attached_entities_master - if master then - self._attached_entities[master].entity:setacceleration(self._acceleration) - end - end, - remove = function(self) - self:_detach_all() - for _, entity in pairs(self._attached_entities) do - if entity.entity then - entity.entity:remove() - end - end - luaentity.entities[self._id] = nil - end, - add_attached_entity = function(self, name, data, offset) - local index = #self._attached_entities + 1 - self._attached_entities[index] = { - name = name, - data = data, - offset = vector.new(offset), - } - self:_add_attached(index) - return index - end, - remove_attached_entity = function(self, index) - self:_remove_attached(index) - self._attached_entities[index] = nil - end, -} - -function luaentity.register_entity(name, prototype) - -- name = check_modname_prefix(name) - prototype.name = name - setmetatable(prototype, {__index = entitydef_default}) - prototype.__index = prototype -- Make it possible to use it as metatable - luaentity.registered_entities[name] = prototype -end - --- function luaentity.get_entity_definition(entity) --- return luaentity.registered_entities[entity.name] --- end - -function luaentity.add_entity(pos, name) - if not luaentity.entities then - minetest.after(0, luaentity.add_entity, vector.new(pos), name) - return - end - local index = luaentity.entities_index - while luaentity.entities[index] do - index = index + 1 - if index >= max_entity_id then - index = 0 - end - end - luaentity.entities_index = index - - local entity = { - name = name, - _id = index, - _pos = vector.new(pos), - _velocity = {x = 0, y = 0, z = 0}, - _acceleration = {x = 0, y = 0, z = 0}, - _attached_entities = {}, - } - - local prototype = luaentity.registered_entities[name] - setmetatable(entity, prototype) -- Default to prototype for other methods - luaentity.entities[index] = entity - - if entity.on_activate then - entity:on_activate() - end - return entity -end - --- todo: check if remove in get_staticdata works -function luaentity.get_staticdata(self) - local parent = luaentity.entities[self.parent_id] - if parent and parent._remove_attached then - parent:_remove_attached(self.attached_id) - end - return "toremove" -end - -function luaentity.on_activate(self, staticdata) - if staticdata == "toremove" then - self.object:remove() - end -end - -function luaentity.get_objects_inside_radius(pos, radius) - local objects = {} - local index = 1 - for id, entity in pairs(luaentity.entities) do - if vector.distance(pos, entity:getpos()) <= radius then - objects[index] = entity - index = index + 1 - end - end -end - -local move_entities_globalstep_part2 = function(dtime) - if not luaentity.entities then - luaentity.entities = read_entities() - end - for id, entity in pairs(luaentity.entities) do - local master = entity._attached_entities_master - local master_def = master and entity._attached_entities[master] - local master_entity = master_def and master_def.entity - local master_entity_pos = master_entity and master_entity:getpos() - if master_entity_pos then - entity._pos = vector.subtract(master_entity_pos, master_def.offset) - entity._velocity = master_entity:getvelocity() - entity._acceleration = master_entity:getacceleration() - else - entity._pos = vector.add(vector.add( - entity._pos, - vector.multiply(entity._velocity, dtime)), - vector.multiply(entity._acceleration, 0.5 * dtime * dtime)) - entity._velocity = vector.add( - entity._velocity, - vector.multiply(entity._acceleration, dtime)) - end - if master and not master_entity_pos then -- The entity has somehow been cleared - if pipeworks.delete_item_on_clearobject then - entity:remove() - else - entity:_remove_attached(master) - entity:_add_loaded() - if entity.on_step then - entity:on_step(dtime) - end - end - else - entity:_add_loaded() - if entity.on_step then - entity:on_step(dtime) - end - end - end -end - -local handle_active_blocks_timer = 0.1 - -minetest.register_globalstep(function(dtime) - handle_active_blocks_timer = handle_active_blocks_timer + dtime - if dtime < 0.2 or handle_active_blocks_timer >= (dtime * 3) then - handle_active_blocks_timer = 0.1 - move_entities_globalstep_part1(dtime) - move_entities_globalstep_part2(dtime) - end -end) diff --git a/mods/ITEMS/pipeworks/models/pipeworks_entry_panel.obj b/mods/ITEMS/pipeworks/models/pipeworks_entry_panel.obj deleted file mode 100644 index 27577d7..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_entry_panel.obj +++ /dev/null @@ -1,390 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-entry-panel.blend' -# www.blender.org -o Cube.001 -v 0.030483 -0.153248 -0.468750 -v 0.030483 -0.153248 -0.500000 -v -0.030483 -0.153248 -0.468750 -v -0.030483 -0.153248 -0.500000 -v -0.086808 -0.129917 -0.468750 -v -0.086808 -0.129917 -0.500000 -v -0.129917 -0.086808 -0.468750 -v -0.129917 -0.086808 -0.500000 -v -0.153248 -0.030483 -0.468750 -v -0.153248 -0.030483 -0.500000 -v -0.153248 0.030483 -0.468750 -v -0.153248 0.030483 -0.500000 -v -0.129917 0.086808 -0.468750 -v -0.129917 0.086808 -0.500000 -v -0.086808 0.129917 -0.468750 -v -0.086808 0.129917 -0.500000 -v -0.030483 0.153248 -0.468750 -v -0.030483 0.153247 -0.500000 -v 0.030483 0.153248 -0.468750 -v 0.030483 0.153248 -0.500000 -v 0.086808 0.129917 -0.468750 -v 0.086808 0.129917 -0.500000 -v 0.129917 0.086808 -0.468750 -v 0.129917 0.086808 -0.500000 -v 0.153248 0.030483 -0.468750 -v 0.153248 0.030483 -0.500000 -v 0.153248 -0.030483 -0.468750 -v 0.153248 -0.030483 -0.500000 -v 0.129917 -0.086808 -0.468750 -v 0.129917 -0.086808 -0.500000 -v 0.086808 -0.129917 -0.468750 -v 0.086808 -0.129917 -0.500000 -v 0.024386 -0.122598 -0.468750 -v -0.024386 -0.122598 -0.468750 -v -0.069446 -0.103934 -0.468750 -v -0.103934 -0.069446 -0.468750 -v -0.122598 -0.024386 -0.468750 -v -0.122598 0.024386 -0.468750 -v -0.103934 0.069446 -0.468750 -v -0.069446 0.103934 -0.468750 -v -0.024386 0.122598 -0.468750 -v 0.024386 0.122598 -0.468750 -v 0.069446 0.103934 -0.468750 -v 0.103934 0.069446 -0.468750 -v 0.122598 0.024386 -0.468750 -v 0.122598 -0.024387 -0.468750 -v 0.103934 -0.069447 -0.468750 -v 0.069446 -0.103934 -0.468750 -v 0.000000 -0.000000 -0.468750 -v 0.000000 -0.000000 -0.500000 -v -0.103934 -0.069446 0.468750 -v -0.069447 -0.103933 0.468750 -v -0.024387 -0.122598 0.468750 -v 0.024386 -0.122598 0.468750 -v 0.086808 -0.129917 0.500000 -v 0.086808 -0.129917 0.468750 -v 0.129917 -0.086808 0.500000 -v 0.129917 -0.086808 0.468750 -v 0.153247 -0.030483 0.500000 -v 0.153247 -0.030483 0.468750 -v 0.153247 0.030483 0.500000 -v 0.153247 0.030483 0.468750 -v 0.129917 0.086808 0.500000 -v 0.129917 0.086808 0.468750 -v 0.086808 0.129917 0.500000 -v 0.086808 0.129917 0.468750 -v 0.030483 0.153248 0.500000 -v 0.030483 0.153248 0.468750 -v -0.030483 0.153248 0.500000 -v -0.030483 0.153248 0.468750 -v -0.086808 0.129917 0.500000 -v -0.086808 0.129917 0.468750 -v -0.129917 0.086808 0.500000 -v -0.129917 0.086808 0.468750 -v -0.153248 0.030483 0.500000 -v -0.153248 0.030483 0.468750 -v -0.153248 -0.030483 0.500000 -v -0.153248 -0.030483 0.468750 -v -0.129917 -0.086808 0.500000 -v -0.129917 -0.086808 0.468750 -v -0.086808 -0.129917 0.500000 -v -0.086808 -0.129917 0.468750 -v -0.030483 -0.153247 0.500000 -v -0.030483 -0.153247 0.468750 -v 0.030483 -0.153247 0.500000 -v 0.030483 -0.153247 0.468750 -v -0.122598 -0.024386 0.468750 -v -0.122598 0.024387 0.468750 -v -0.103934 0.069447 0.468750 -v -0.069447 0.103934 0.468750 -v -0.024387 0.122598 0.468750 -v 0.024386 0.122598 0.468750 -v 0.069446 0.103934 0.468750 -v 0.103933 0.069447 0.468750 -v 0.122598 0.024387 0.468750 -v 0.122598 -0.024386 0.468750 -v 0.103933 -0.069446 0.468750 -v 0.069446 -0.103933 0.468750 -v -0.000000 0.000000 0.468750 -v -0.000000 0.000000 0.500000 -v 0.500000 -0.500000 0.062500 -v -0.500000 -0.500000 0.062500 -v -0.500000 -0.500000 -0.062500 -v 0.500000 -0.500000 -0.062500 -v 0.500000 0.500000 0.062500 -v -0.500000 0.500000 0.062500 -v -0.500000 0.500000 -0.062500 -v 0.500000 0.500000 -0.062500 -vt 0.871212 0.265152 -vt 0.840909 0.265152 -vt 0.840909 0.295455 -vt 0.871212 0.295455 -vt 0.810606 0.265152 -vt 0.810606 0.295455 -vt 0.780303 0.265152 -vt 0.780303 0.295455 -vt 0.750000 0.265152 -vt 0.750000 0.295455 -vt 0.719697 0.265152 -vt 0.719697 0.295455 -vt 0.689394 0.265152 -vt 0.689394 0.295455 -vt 0.659091 0.265152 -vt 0.659091 0.295455 -vt 0.628788 0.265152 -vt 0.628788 0.295455 -vt 0.598485 0.265152 -vt 0.598485 0.295455 -vt 0.568182 0.265152 -vt 0.568182 0.295455 -vt 0.537879 0.265152 -vt 0.537879 0.295455 -vt 0.507576 0.265152 -vt 0.507576 0.295455 -vt 0.992424 0.265152 -vt 0.962121 0.265152 -vt 0.962121 0.295455 -vt 0.992424 0.295455 -vt 0.931818 0.265152 -vt 0.931818 0.295455 -vt 0.901515 0.265152 -vt 0.901515 0.295455 -vt 0.613449 0.318703 -vt 0.597693 0.397916 -vt 0.581936 0.318703 -vt 0.765436 0.318703 -vt 0.781192 0.397916 -vt 0.796949 0.318703 -vt 0.826063 0.330762 -vt 0.848346 0.353045 -vt 0.860405 0.382159 -vt 0.860405 0.413672 -vt 0.848346 0.442786 -vt 0.826063 0.465069 -vt 0.796949 0.477128 -vt 0.765436 0.477128 -vt 0.736322 0.465069 -vt 0.714039 0.442786 -vt 0.701980 0.413672 -vt 0.701980 0.382159 -vt 0.714039 0.353045 -vt 0.736322 0.330762 -vt 0.552823 0.330762 -vt 0.530540 0.353045 -vt 0.518480 0.382159 -vt 0.518480 0.413672 -vt 0.530540 0.442786 -vt 0.552822 0.465069 -vt 0.581936 0.477128 -vt 0.613449 0.477128 -vt 0.642563 0.465069 -vt 0.664846 0.442786 -vt 0.676906 0.413672 -vt 0.676906 0.382159 -vt 0.664846 0.353045 -vt 0.642563 0.330762 -vt 0.598485 0.250000 -vt 0.598485 0.007576 -vt 0.628788 0.007576 -vt 0.628788 0.250000 -vt 0.552823 0.330759 -vt 0.581937 0.318699 -vt 0.597694 0.397912 -vt 0.530540 0.353042 -vt 0.518481 0.382156 -vt 0.518481 0.413668 -vt 0.530540 0.442782 -vt 0.552823 0.465065 -vt 0.581937 0.477125 -vt 0.613450 0.477125 -vt 0.642564 0.465065 -vt 0.664847 0.442782 -vt 0.676906 0.413668 -vt 0.676906 0.382156 -vt 0.664847 0.353042 -vt 0.642564 0.330759 -vt 0.613450 0.318699 -vt 0.736320 0.330759 -vt 0.765434 0.318699 -vt 0.781190 0.397912 -vt 0.714037 0.353041 -vt 0.701978 0.382156 -vt 0.701978 0.413668 -vt 0.714037 0.442782 -vt 0.736320 0.465065 -vt 0.765434 0.477125 -vt 0.796947 0.477125 -vt 0.826061 0.465065 -vt 0.848344 0.442782 -vt 0.860403 0.413668 -vt 0.860403 0.382156 -vt 0.848344 0.353041 -vt 0.826061 0.330759 -vt 0.796947 0.318699 -vt 0.931818 0.250000 -vt 0.931818 0.007576 -vt 0.962121 0.007576 -vt 0.962121 0.250000 -vt 0.871212 0.250000 -vt 0.871212 0.007576 -vt 0.901515 0.007576 -vt 0.901515 0.250000 -vt 0.780303 0.250000 -vt 0.780303 0.007576 -vt 0.810606 0.007576 -vt 0.810606 0.250000 -vt 0.840909 0.250000 -vt 0.840909 0.007576 -vt 0.750000 0.250000 -vt 0.750000 0.007576 -vt 0.719697 0.250000 -vt 0.719697 0.007576 -vt 0.689394 0.250000 -vt 0.689394 0.007576 -vt 0.659091 0.250000 -vt 0.659091 0.007576 -vt 0.568182 0.250000 -vt 0.568182 0.007576 -vt 0.537879 0.250000 -vt 0.537879 0.007576 -vt 0.507576 0.250000 -vt 0.507576 0.007576 -vt 0.992424 0.007576 -vt 0.992424 0.250000 -vt 0.507576 0.507576 -vt 0.992424 0.507576 -vt 0.992424 0.992424 -vt 0.507576 0.992424 -vt 0.068182 0.492424 -vt 0.007576 0.492424 -vt 0.007576 0.007576 -vt 0.068182 0.007576 -vt 0.492424 0.992424 -vt 0.007576 0.992424 -vt 0.007576 0.507576 -vt 0.492424 0.507576 -vt 0.295455 0.492424 -vt 0.234848 0.492424 -vt 0.234848 0.007576 -vt 0.295455 0.007576 -vt 0.219697 0.007576 -vt 0.219697 0.492424 -vt 0.159091 0.492424 -vt 0.159091 0.007576 -vt 0.083333 0.492424 -vt 0.083333 0.007576 -vt 0.143939 0.007576 -vt 0.143939 0.492424 -s off -f 1/1 3/2 4/3 2/4 -f 3/2 5/5 6/6 4/3 -f 5/5 7/7 8/8 6/6 -f 7/7 9/9 10/10 8/8 -f 9/9 11/11 12/12 10/10 -f 11/11 13/13 14/14 12/12 -f 13/13 15/15 16/16 14/14 -f 15/15 17/17 18/18 16/16 -f 17/17 19/19 20/20 18/18 -f 19/19 21/21 22/22 20/20 -f 21/21 23/23 24/24 22/22 -f 23/23 25/25 26/26 24/24 -f 25/27 27/28 28/29 26/30 -f 27/28 29/31 30/32 28/29 -f 31/33 1/1 2/4 32/34 -f 29/31 31/33 32/34 30/32 -f 4/35 50/36 2/37 -f 1/38 49/39 3/40 -f 3/40 49/39 5/41 -f 5/41 49/39 7/42 -f 7/42 49/39 9/43 -f 9/43 49/39 11/44 -f 11/44 49/39 13/45 -f 13/45 49/39 15/46 -f 15/46 49/39 17/47 -f 17/47 49/39 19/48 -f 19/48 49/39 21/49 -f 21/49 49/39 23/50 -f 23/50 49/39 25/51 -f 25/51 49/39 27/52 -f 27/52 49/39 29/53 -f 29/53 49/39 31/54 -f 31/54 49/39 1/38 -f 2/37 50/36 32/55 -f 32/55 50/36 30/56 -f 30/56 50/36 28/57 -f 28/57 50/36 26/58 -f 26/58 50/36 24/59 -f 24/59 50/36 22/60 -f 22/60 50/36 20/61 -f 20/61 50/36 18/62 -f 18/62 50/36 16/63 -f 16/63 50/36 14/64 -f 14/64 50/36 12/65 -f 12/65 50/36 10/66 -f 10/66 50/36 8/67 -f 8/67 50/36 6/68 -f 6/68 50/36 4/35 -f 41/69 91/70 92/71 42/72 -f 81/73 83/74 100/75 -f 79/76 81/73 100/75 -f 77/77 79/76 100/75 -f 75/78 77/77 100/75 -f 73/79 75/78 100/75 -f 71/80 73/79 100/75 -f 69/81 71/80 100/75 -f 67/82 69/81 100/75 -f 65/83 67/82 100/75 -f 63/84 65/83 100/75 -f 61/85 63/84 100/75 -f 59/86 61/85 100/75 -f 57/87 59/86 100/75 -f 55/88 57/87 100/75 -f 85/89 55/88 100/75 -f 56/90 86/91 99/92 -f 58/93 56/90 99/92 -f 60/94 58/93 99/92 -f 62/95 60/94 99/92 -f 64/96 62/95 99/92 -f 66/97 64/96 99/92 -f 68/98 66/97 99/92 -f 70/99 68/98 99/92 -f 72/100 70/99 99/92 -f 74/101 72/100 99/92 -f 76/102 74/101 99/92 -f 78/103 76/102 99/92 -f 80/104 78/103 99/92 -f 82/105 80/104 99/92 -f 84/106 82/105 99/92 -f 86/91 84/106 99/92 -f 83/74 85/89 100/75 -f 58/22 57/21 55/19 56/20 -f 56/20 55/19 85/17 86/18 -f 60/24 59/23 57/21 58/22 -f 62/26 61/25 59/23 60/24 -f 64/29 63/28 61/27 62/30 -f 66/32 65/31 63/28 64/29 -f 68/34 67/33 65/31 66/32 -f 70/4 69/1 67/33 68/34 -f 72/3 71/2 69/1 70/4 -f 74/6 73/5 71/2 72/3 -f 76/8 75/7 73/5 74/6 -f 78/10 77/9 75/7 76/8 -f 80/12 79/11 77/9 78/10 -f 82/14 81/13 79/11 80/12 -f 84/16 83/15 81/13 82/14 -f 86/18 85/17 83/15 84/16 -f 36/107 51/108 87/109 37/110 -f 34/111 53/112 52/113 35/114 -f 47/115 97/116 98/117 48/118 -f 33/119 54/120 53/112 34/111 -f 35/114 52/113 51/108 36/107 -f 48/118 98/117 54/120 33/119 -f 46/121 96/122 97/116 47/115 -f 45/123 95/124 96/122 46/121 -f 44/125 94/126 95/124 45/123 -f 43/127 93/128 94/126 44/125 -f 42/72 92/71 93/128 43/127 -f 40/129 90/130 91/70 41/69 -f 39/131 89/132 90/130 40/129 -f 38/133 88/134 89/132 39/131 -f 37/110 87/109 88/135 38/136 -f 105/137 106/138 102/139 101/140 -f 106/141 107/142 103/143 102/144 -f 107/145 108/146 104/147 103/148 -f 108/149 105/150 101/151 104/152 -f 101/153 102/154 103/155 104/156 -f 108/157 107/158 106/159 105/160 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_flow_sensor.obj b/mods/ITEMS/pipeworks/models/pipeworks_flow_sensor.obj deleted file mode 100644 index 56ba370..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_flow_sensor.obj +++ /dev/null @@ -1,380 +0,0 @@ -# Blender v2.72 (sub 0) OBJ File: 'pipe-flow-sensor.blend' -# www.blender.org -o Cube.001 -v -0.030483 -0.153248 0.468750 -v -0.030483 -0.153248 0.500000 -v 0.030483 -0.153248 0.468750 -v 0.030483 -0.153248 0.500000 -v 0.086808 -0.129917 0.468750 -v 0.086808 -0.129917 0.500000 -v 0.129917 -0.086808 0.468750 -v 0.129917 -0.086808 0.500000 -v 0.153248 -0.030483 0.468750 -v 0.153248 -0.030483 0.500000 -v 0.153248 0.030483 0.468750 -v 0.153248 0.030483 0.500000 -v 0.129917 0.086808 0.468750 -v 0.129917 0.086808 0.500000 -v 0.086808 0.129917 0.468750 -v 0.086808 0.129917 0.500000 -v 0.030483 0.153248 0.468750 -v 0.030483 0.153247 0.500000 -v -0.030483 0.153248 0.468750 -v -0.030483 0.153248 0.500000 -v -0.086808 0.129917 0.468750 -v -0.086808 0.129917 0.500000 -v -0.129917 0.086808 0.468750 -v -0.129917 0.086808 0.500000 -v -0.153248 0.030483 0.468750 -v -0.153248 0.030483 0.500000 -v -0.153248 -0.030483 0.468750 -v -0.153248 -0.030483 0.500000 -v -0.129917 -0.086808 0.468750 -v -0.129917 -0.086808 0.500000 -v -0.086808 -0.129917 0.468750 -v -0.086808 -0.129917 0.500000 -v -0.024386 -0.122598 0.468750 -v 0.024386 -0.122598 0.468750 -v 0.069446 -0.103934 0.468750 -v 0.103934 -0.069446 0.468750 -v 0.122598 -0.024386 0.468750 -v 0.122598 0.024386 0.468750 -v 0.103934 0.069446 0.468750 -v 0.069446 0.103934 0.468750 -v 0.024386 0.122598 0.468750 -v -0.024386 0.122598 0.468750 -v -0.069446 0.103934 0.468750 -v -0.103934 0.069446 0.468750 -v -0.122598 0.024386 0.468750 -v -0.122598 -0.024387 0.468750 -v -0.103934 -0.069447 0.468750 -v -0.069446 -0.103934 0.468750 -v -0.000000 -0.000000 0.468750 -v -0.000000 -0.000000 0.500000 -v 0.103934 -0.069446 -0.468750 -v 0.069446 -0.103933 -0.468750 -v 0.024386 -0.122598 -0.468750 -v -0.024386 -0.122598 -0.468750 -v -0.086808 -0.129917 -0.500000 -v -0.086808 -0.129917 -0.468750 -v -0.129917 -0.086808 -0.500000 -v -0.129917 -0.086808 -0.468750 -v -0.153248 -0.030483 -0.500000 -v -0.153248 -0.030483 -0.468750 -v -0.153248 0.030483 -0.500000 -v -0.153248 0.030483 -0.468750 -v -0.129917 0.086808 -0.500000 -v -0.129917 0.086808 -0.468750 -v -0.086808 0.129917 -0.500000 -v -0.086808 0.129917 -0.468750 -v -0.030483 0.153248 -0.500000 -v -0.030483 0.153248 -0.468750 -v 0.030483 0.153248 -0.500000 -v 0.030483 0.153248 -0.468750 -v 0.086808 0.129917 -0.500000 -v 0.086808 0.129917 -0.468750 -v 0.129917 0.086808 -0.500000 -v 0.129917 0.086808 -0.468750 -v 0.153248 0.030483 -0.500000 -v 0.153248 0.030483 -0.468750 -v 0.153248 -0.030483 -0.500000 -v 0.153248 -0.030483 -0.468750 -v 0.129917 -0.086808 -0.500000 -v 0.129917 -0.086808 -0.468750 -v 0.086808 -0.129917 -0.500000 -v 0.086808 -0.129917 -0.468750 -v 0.030483 -0.153247 -0.500000 -v 0.030483 -0.153247 -0.468750 -v -0.030483 -0.153247 -0.500000 -v -0.030483 -0.153247 -0.468750 -v 0.122598 -0.024386 -0.468750 -v 0.122598 0.024387 -0.468750 -v 0.103934 0.069447 -0.468750 -v 0.069446 0.103934 -0.468750 -v 0.024386 0.122598 -0.468750 -v -0.024386 0.122598 -0.468750 -v -0.069446 0.103934 -0.468750 -v -0.103934 0.069447 -0.468750 -v -0.122598 0.024387 -0.468750 -v -0.122598 -0.024386 -0.468750 -v -0.103934 -0.069446 -0.468750 -v -0.069446 -0.103933 -0.468750 -v 0.000000 0.000000 -0.468750 -v 0.000000 0.000000 -0.500000 -v 0.187500 -0.187500 -0.250000 -v 0.187500 -0.187500 0.250000 -v -0.187500 -0.187500 0.250000 -v -0.187500 -0.187500 -0.250000 -v 0.187500 0.187500 -0.250000 -v 0.187500 0.187500 0.250000 -v -0.187500 0.187500 0.250000 -v -0.187500 0.187500 -0.250000 -vt 0.813725 0.460784 -vt 0.774510 0.460784 -vt 0.774510 0.500000 -vt 0.813725 0.500000 -vt 0.735294 0.460784 -vt 0.735294 0.500000 -vt 0.696078 0.460784 -vt 0.696078 0.500000 -vt 0.656863 0.460784 -vt 0.656863 0.500000 -vt 0.617647 0.460784 -vt 0.617647 0.500000 -vt 0.578431 0.460784 -vt 0.578431 0.500000 -vt 0.539216 0.460784 -vt 0.539216 0.500000 -vt 0.500000 0.460784 -vt 0.500000 0.500000 -vt 0.460784 0.460784 -vt 0.460784 0.500000 -vt 0.421569 0.460784 -vt 0.421569 0.500000 -vt 0.382353 0.460784 -vt 0.382353 0.500000 -vt 0.343137 0.460784 -vt 0.343137 0.500000 -vt 0.970588 0.460784 -vt 0.931373 0.460784 -vt 0.931373 0.500000 -vt 0.970588 0.500000 -vt 0.892157 0.460784 -vt 0.892157 0.500000 -vt 0.852941 0.460784 -vt 0.852941 0.500000 -vt 0.480968 0.531171 -vt 0.460590 0.633014 -vt 0.440211 0.531171 -vt 0.677539 0.531171 -vt 0.697917 0.633014 -vt 0.718296 0.531171 -vt 0.755950 0.546676 -vt 0.784770 0.575325 -vt 0.800366 0.612756 -vt 0.800366 0.653272 -vt 0.784770 0.690703 -vt 0.755950 0.719352 -vt 0.718296 0.734857 -vt 0.677539 0.734857 -vt 0.639884 0.719352 -vt 0.611065 0.690703 -vt 0.595468 0.653272 -vt 0.595468 0.612756 -vt 0.611065 0.575325 -vt 0.639885 0.546676 -vt 0.402557 0.546676 -vt 0.373737 0.575325 -vt 0.358140 0.612756 -vt 0.358140 0.653272 -vt 0.373737 0.690703 -vt 0.402557 0.719352 -vt 0.440211 0.734857 -vt 0.480968 0.734857 -vt 0.518622 0.719352 -vt 0.547442 0.690703 -vt 0.563039 0.653272 -vt 0.563039 0.612756 -vt 0.547442 0.575325 -vt 0.518622 0.546676 -vt 0.460784 0.441176 -vt 0.460784 0.127451 -vt 0.500000 0.127451 -vt 0.500000 0.441176 -vt 0.402558 0.719348 -vt 0.518623 0.719348 -vt 0.639882 0.719347 -vt 0.755947 0.719347 -vt 0.755948 0.546671 -vt 0.892157 0.441176 -vt 0.892157 0.127451 -vt 0.931373 0.127451 -vt 0.931373 0.441176 -vt 0.813725 0.441176 -vt 0.813725 0.127451 -vt 0.852941 0.127451 -vt 0.852941 0.441176 -vt 0.696078 0.441176 -vt 0.696078 0.127451 -vt 0.735294 0.127451 -vt 0.735294 0.441176 -vt 0.774510 0.441176 -vt 0.774510 0.127451 -vt 0.656863 0.441176 -vt 0.656863 0.127451 -vt 0.617647 0.441176 -vt 0.617647 0.127451 -vt 0.578431 0.441176 -vt 0.578431 0.127451 -vt 0.539216 0.441176 -vt 0.539216 0.127451 -vt 0.421569 0.441176 -vt 0.421569 0.127451 -vt 0.382353 0.441176 -vt 0.382353 0.127451 -vt 0.343137 0.441176 -vt 0.343137 0.127451 -vt 0.970588 0.127451 -vt 0.970588 0.441176 -vt 0.009804 0.500000 -vt 0.323529 0.500000 -vt 0.323529 0.735294 -vt 0.009804 0.735294 -vt 0.264706 0.990196 -vt 0.264706 0.754902 -vt 0.500000 0.754902 -vt 0.500000 0.990196 -vt 0.519608 0.754902 -vt 0.833333 0.754902 -vt 0.833333 0.990196 -vt 0.519608 0.990196 -vt 0.245098 0.754902 -vt 0.245098 0.990196 -vt 0.009804 0.990196 -vt 0.009804 0.754902 -vt 0.323529 0.245098 -vt 0.009804 0.245098 -vt 0.009804 0.009804 -vt 0.323529 0.009804 -vt 0.009804 0.254902 -vt 0.323529 0.254902 -vt 0.323529 0.490196 -vt 0.009804 0.490196 -vn 0.000000 -1.000000 -0.000000 -vn 0.382700 -0.923900 -0.000000 -vn 0.707100 -0.707100 -0.000000 -vn 0.923900 -0.382700 -0.000000 -vn 1.000000 0.000000 0.000000 -vn 0.923900 0.382700 0.000000 -vn 0.707100 0.707100 0.000000 -vn 0.382700 0.923900 0.000000 -vn 0.000000 1.000000 0.000000 -vn -0.382700 0.923900 0.000000 -vn -0.707100 0.707100 0.000000 -vn -0.923900 0.382700 0.000000 -vn -1.000000 -0.000000 0.000000 -vn -0.923900 -0.382700 -0.000000 -vn -0.382700 -0.923900 -0.000000 -vn -0.707100 -0.707100 -0.000000 -vn 0.000000 -0.000000 1.000000 -vn 0.000000 0.000000 -1.000000 -g Cube.001_Cube.001_None -s off -f 1/1/1 3/2/1 4/3/1 2/4/1 -f 3/2/2 5/5/2 6/6/2 4/3/2 -f 5/5/3 7/7/3 8/8/3 6/6/3 -f 7/7/4 9/9/4 10/10/4 8/8/4 -f 9/9/5 11/11/5 12/12/5 10/10/5 -f 11/11/6 13/13/6 14/14/6 12/12/6 -f 13/13/7 15/15/7 16/16/7 14/14/7 -f 15/15/8 17/17/8 18/18/8 16/16/8 -f 17/17/9 19/19/9 20/20/9 18/18/9 -f 19/19/10 21/21/10 22/22/10 20/20/10 -f 21/21/11 23/23/11 24/24/11 22/22/11 -f 23/23/12 25/25/12 26/26/12 24/24/12 -f 25/27/13 27/28/13 28/29/13 26/30/13 -f 27/28/14 29/31/14 30/32/14 28/29/14 -f 31/33/15 1/1/15 2/4/15 32/34/15 -f 29/31/16 31/33/16 32/34/16 30/32/16 -f 4/35/17 50/36/17 2/37/17 -f 1/38/18 49/39/18 3/40/18 -f 3/40/18 49/39/18 5/41/18 -f 5/41/18 49/39/18 7/42/18 -f 7/42/18 49/39/18 9/43/18 -f 9/43/18 49/39/18 11/44/18 -f 11/44/18 49/39/18 13/45/18 -f 13/45/18 49/39/18 15/46/18 -f 15/46/18 49/39/18 17/47/18 -f 17/47/18 49/39/18 19/48/18 -f 19/48/18 49/39/18 21/49/18 -f 21/49/18 49/39/18 23/50/18 -f 23/50/18 49/39/18 25/51/18 -f 25/51/18 49/39/18 27/52/18 -f 27/52/18 49/39/18 29/53/18 -f 29/53/18 49/39/18 31/54/18 -f 31/54/18 49/39/18 1/38/18 -f 2/37/17 50/36/17 32/55/17 -f 32/55/17 50/36/17 30/56/17 -f 30/56/17 50/36/17 28/57/17 -f 28/57/17 50/36/17 26/58/17 -f 26/58/17 50/36/17 24/59/17 -f 24/59/17 50/36/17 22/60/17 -f 22/60/17 50/36/17 20/61/17 -f 20/61/17 50/36/17 18/62/17 -f 18/62/17 50/36/17 16/63/17 -f 16/63/17 50/36/17 14/64/17 -f 14/64/17 50/36/17 12/65/17 -f 12/65/17 50/36/17 10/66/17 -f 10/66/17 50/36/17 8/67/17 -f 8/67/17 50/36/17 6/68/17 -f 6/68/17 50/36/17 4/35/17 -f 41/69/9 91/70/9 92/71/9 42/72/9 -f 81/55/18 83/37/18 100/36/18 -f 79/56/18 81/55/18 100/36/18 -f 77/57/18 79/56/18 100/36/18 -f 75/58/18 77/57/18 100/36/18 -f 73/59/18 75/58/18 100/36/18 -f 71/73/18 73/59/18 100/36/18 -f 69/61/18 71/73/18 100/36/18 -f 67/62/18 69/61/18 100/36/18 -f 65/74/18 67/62/18 100/36/18 -f 63/64/18 65/74/18 100/36/18 -f 61/65/18 63/64/18 100/36/18 -f 59/66/18 61/65/18 100/36/18 -f 57/67/18 59/66/18 100/36/18 -f 55/68/18 57/67/18 100/36/18 -f 85/35/18 55/68/18 100/36/18 -f 56/54/17 86/38/17 99/39/17 -f 58/53/17 56/54/17 99/39/17 -f 60/52/17 58/53/17 99/39/17 -f 62/51/17 60/52/17 99/39/17 -f 64/50/17 62/51/17 99/39/17 -f 66/75/17 64/50/17 99/39/17 -f 68/48/17 66/75/17 99/39/17 -f 70/47/17 68/48/17 99/39/17 -f 72/76/17 70/47/17 99/39/17 -f 74/45/17 72/76/17 99/39/17 -f 76/44/17 74/45/17 99/39/17 -f 78/43/17 76/44/17 99/39/17 -f 80/42/17 78/43/17 99/39/17 -f 82/77/17 80/42/17 99/39/17 -f 84/40/17 82/77/17 99/39/17 -f 86/38/17 84/40/17 99/39/17 -f 83/37/18 85/35/18 100/36/18 -f 58/22/16 57/21/16 55/19/16 56/20/16 -f 56/20/15 55/19/15 85/17/15 86/18/15 -f 60/24/14 59/23/14 57/21/14 58/22/14 -f 62/26/13 61/25/13 59/23/13 60/24/13 -f 64/29/12 63/28/12 61/27/12 62/30/12 -f 66/32/11 65/31/11 63/28/11 64/29/11 -f 68/34/10 67/33/10 65/31/10 66/32/10 -f 70/4/9 69/1/9 67/33/9 68/34/9 -f 72/3/8 71/2/8 69/1/8 70/4/8 -f 74/6/7 73/5/7 71/2/7 72/3/7 -f 76/8/6 75/7/6 73/5/6 74/6/6 -f 78/10/5 77/9/5 75/7/5 76/8/5 -f 80/12/4 79/11/4 77/9/4 78/10/4 -f 82/14/3 81/13/3 79/11/3 80/12/3 -f 84/16/2 83/15/2 81/13/2 82/14/2 -f 86/18/1 85/17/1 83/15/1 84/16/1 -f 36/78/4 51/79/4 87/80/4 37/81/4 -f 34/82/2 53/83/2 52/84/2 35/85/2 -f 47/86/16 97/87/16 98/88/16 48/89/16 -f 33/90/1 54/91/1 53/83/1 34/82/1 -f 35/85/3 52/84/3 51/79/3 36/78/3 -f 48/89/15 98/88/15 54/91/15 33/90/15 -f 46/92/14 96/93/14 97/87/14 47/86/14 -f 45/94/13 95/95/13 96/93/13 46/92/13 -f 44/96/12 94/97/12 95/95/12 45/94/12 -f 43/98/11 93/99/11 94/97/11 44/96/11 -f 42/72/10 92/71/10 93/99/10 43/98/10 -f 40/100/8 90/101/8 91/70/8 41/69/8 -f 39/102/7 89/103/7 90/101/7 40/100/7 -f 38/104/6 88/105/6 89/103/6 39/102/6 -f 37/81/5 87/80/5 88/106/5 38/107/5 -f 105/108/5 106/109/5 102/110/5 101/111/5 -f 106/112/17 107/113/17 103/114/17 102/115/17 -f 107/116/13 108/117/13 104/118/13 103/119/13 -f 108/120/18 105/121/18 101/122/18 104/123/18 -f 101/124/1 102/125/1 103/126/1 104/127/1 -f 108/128/9 107/129/9 106/130/9 105/131/9 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_fountainhead.obj b/mods/ITEMS/pipeworks/models/pipeworks_fountainhead.obj deleted file mode 100644 index 7685dbf..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_fountainhead.obj +++ /dev/null @@ -1,352 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-fountainhead.blend' -# www.blender.org -o Cube.001 -v 0.153248 -0.468750 -0.030483 -v 0.153248 -0.500000 -0.030483 -v 0.153248 -0.468750 0.030483 -v 0.153248 -0.500000 0.030483 -v 0.129917 -0.468750 0.086808 -v 0.129917 -0.500000 0.086808 -v 0.086808 -0.468750 0.129917 -v 0.086808 -0.500000 0.129917 -v 0.030483 -0.468750 0.153248 -v 0.030483 -0.500000 0.153248 -v -0.030483 -0.468750 0.153248 -v -0.030483 -0.500000 0.153248 -v -0.086808 -0.468750 0.129917 -v -0.086808 -0.500000 0.129917 -v -0.129917 -0.468750 0.086808 -v -0.129917 -0.500000 0.086808 -v -0.153247 -0.468750 0.030483 -v -0.153247 -0.500000 0.030483 -v -0.153247 -0.468750 -0.030483 -v -0.153247 -0.500000 -0.030483 -v -0.129917 -0.468750 -0.086808 -v -0.129917 -0.500000 -0.086808 -v -0.086808 -0.468750 -0.129917 -v -0.086807 -0.500000 -0.129917 -v -0.030482 -0.468750 -0.153248 -v -0.030482 -0.500000 -0.153248 -v 0.030483 -0.468750 -0.153248 -v 0.030483 -0.500000 -0.153248 -v 0.086808 -0.468750 -0.129917 -v 0.086808 -0.500000 -0.129917 -v 0.129918 -0.468750 -0.086808 -v 0.129918 -0.500000 -0.086808 -v 0.122598 -0.468750 -0.024386 -v 0.122598 -0.468750 0.024386 -v 0.103934 -0.468750 0.069446 -v 0.069447 -0.468750 0.103934 -v 0.024387 -0.468750 0.122598 -v -0.024386 -0.468750 0.122598 -v -0.069446 -0.468750 0.103934 -v -0.103933 -0.468750 0.069446 -v -0.122598 -0.468750 0.024386 -v -0.122598 -0.468750 -0.024386 -v -0.103933 -0.468750 -0.069446 -v -0.069446 -0.468750 -0.103934 -v -0.024386 -0.468750 -0.122598 -v 0.024387 -0.468750 -0.122598 -v 0.069447 -0.468750 -0.103934 -v 0.103934 -0.468750 -0.069446 -v 0.000000 -0.468750 0.000000 -v 0.000000 -0.500000 -0.000000 -v 0.069446 0.312500 0.103934 -v 0.103933 0.312500 0.069447 -v 0.122598 0.312500 0.024387 -v 0.122598 0.312500 -0.024386 -v 0.129917 0.500000 -0.086808 -v 0.129917 0.312500 -0.086808 -v 0.086808 0.500000 -0.129917 -v 0.086808 0.312500 -0.129917 -v 0.030483 0.500000 -0.153247 -v 0.030483 0.312500 -0.153248 -v -0.030483 0.500000 -0.153247 -v -0.030483 0.312500 -0.153248 -v -0.086808 0.500000 -0.129917 -v -0.086808 0.312500 -0.129917 -v -0.129918 0.500000 -0.086808 -v -0.129918 0.312500 -0.086808 -v -0.153248 0.500000 -0.030483 -v -0.153248 0.312500 -0.030483 -v -0.153248 0.500000 0.030483 -v -0.153248 0.312500 0.030483 -v -0.129918 0.500000 0.086808 -v -0.129918 0.312500 0.086808 -v -0.086808 0.500000 0.129917 -v -0.086808 0.312500 0.129917 -v -0.030483 0.500000 0.153248 -v -0.030483 0.312500 0.153248 -v 0.030482 0.500000 0.153248 -v 0.030482 0.312500 0.153248 -v 0.086807 0.500000 0.129917 -v 0.086807 0.312500 0.129917 -v 0.129917 0.500000 0.086808 -v 0.129917 0.312500 0.086808 -v 0.153247 0.500000 0.030483 -v 0.153247 0.312500 0.030483 -v 0.153247 0.500000 -0.030483 -v 0.153247 0.312500 -0.030483 -v 0.024386 0.312500 0.122598 -v -0.024387 0.312500 0.122598 -v -0.069447 0.312500 0.103934 -v -0.103934 0.312500 0.069446 -v -0.122599 0.312500 0.024386 -v -0.122599 0.312500 -0.024386 -v -0.103934 0.312500 -0.069446 -v -0.069447 0.312500 -0.103934 -v -0.024387 0.312500 -0.122598 -v 0.024386 0.312500 -0.122598 -v 0.069446 0.312500 -0.103933 -v 0.103933 0.312500 -0.069446 -v -0.000000 0.312500 0.000000 -v -0.000000 0.500000 0.000000 -vt 0.680556 0.486111 -vt 0.625000 0.486111 -vt 0.625000 0.652778 -vt 0.680556 0.652778 -vt 0.569444 0.486111 -vt 0.569444 0.652778 -vt 0.513889 0.486111 -vt 0.513889 0.652778 -vt 0.458333 0.486111 -vt 0.458333 0.652778 -vt 0.402778 0.486111 -vt 0.402778 0.652778 -vt 0.347222 0.486111 -vt 0.347222 0.652778 -vt 0.291667 0.486111 -vt 0.291667 0.652778 -vt 0.236111 0.486111 -vt 0.236111 0.652778 -vt 0.180556 0.486111 -vt 0.180556 0.652778 -vt 0.125000 0.486111 -vt 0.125000 0.652778 -vt 0.069444 0.486111 -vt 0.069444 0.652778 -vt 0.013889 0.486111 -vt 0.013889 0.652778 -vt 0.902778 0.486111 -vt 0.847222 0.486111 -vt 0.847222 0.652778 -vt 0.902778 0.652778 -vt 0.791667 0.486111 -vt 0.791667 0.652778 -vt 0.736111 0.486111 -vt 0.736111 0.652778 -vt 0.194034 0.696809 -vt 0.165430 0.839757 -vt 0.136827 0.696809 -vt 0.469943 0.696809 -vt 0.498546 0.839757 -vt 0.527150 0.696809 -vt 0.580002 0.718572 -vt 0.620453 0.758784 -vt 0.642345 0.811323 -vt 0.642345 0.868191 -vt 0.620453 0.920730 -vt 0.580002 0.960942 -vt 0.527149 0.982704 -vt 0.469943 0.982704 -vt 0.417091 0.960942 -vt 0.376639 0.920730 -vt 0.354747 0.868191 -vt 0.354747 0.811323 -vt 0.376639 0.758784 -vt 0.417091 0.718572 -vt 0.083975 0.718572 -vt 0.043524 0.758784 -vt 0.021631 0.811323 -vt 0.021631 0.868191 -vt 0.043523 0.920730 -vt 0.083975 0.960942 -vt 0.136827 0.982704 -vt 0.194034 0.982704 -vt 0.246886 0.960942 -vt 0.287337 0.920730 -vt 0.309229 0.868191 -vt 0.309229 0.811323 -vt 0.287337 0.758784 -vt 0.246886 0.718572 -vt 0.180556 0.458333 -vt 0.180556 0.013889 -vt 0.236111 0.013889 -vt 0.236111 0.458333 -vt 0.750889 0.718565 -vt 0.803741 0.696803 -vt 0.832345 0.839750 -vt 0.710438 0.758777 -vt 0.688546 0.811316 -vt 0.688546 0.868184 -vt 0.710438 0.920723 -vt 0.750889 0.960935 -vt 0.803741 0.982698 -vt 0.860948 0.982698 -vt 0.913800 0.960935 -vt 0.954251 0.920723 -vt 0.976143 0.868184 -vt 0.976143 0.811316 -vt 0.954251 0.758777 -vt 0.913800 0.718565 -vt 0.860948 0.696803 -vt 0.417087 0.718565 -vt 0.469939 0.696803 -vt 0.498543 0.839750 -vt 0.376636 0.758777 -vt 0.354744 0.811316 -vt 0.354744 0.868184 -vt 0.376636 0.920723 -vt 0.417087 0.960935 -vt 0.469939 0.982698 -vt 0.527146 0.982698 -vt 0.579998 0.960935 -vt 0.620449 0.920723 -vt 0.642341 0.868184 -vt 0.642341 0.811316 -vt 0.620449 0.758777 -vt 0.579998 0.718565 -vt 0.527146 0.696803 -vt 0.791667 0.458333 -vt 0.791667 0.013889 -vt 0.847222 0.013889 -vt 0.847222 0.458333 -vt 0.680556 0.458333 -vt 0.680556 0.013889 -vt 0.736111 0.013889 -vt 0.736111 0.458333 -vt 0.513889 0.458333 -vt 0.513889 0.013889 -vt 0.569444 0.013889 -vt 0.569444 0.458333 -vt 0.625000 0.458333 -vt 0.625000 0.013889 -vt 0.458333 0.458333 -vt 0.458333 0.013889 -vt 0.402778 0.458333 -vt 0.402778 0.013889 -vt 0.347222 0.458333 -vt 0.347222 0.013889 -vt 0.291667 0.458333 -vt 0.291667 0.013889 -vt 0.125000 0.458333 -vt 0.125000 0.013889 -vt 0.069444 0.458333 -vt 0.069444 0.013889 -vt 0.013889 0.458333 -vt 0.013889 0.013889 -vt 0.902778 0.013889 -vt 0.902778 0.458333 -s off -f 1/1 3/2 4/3 2/4 -f 3/2 5/5 6/6 4/3 -f 5/5 7/7 8/8 6/6 -f 7/7 9/9 10/10 8/8 -f 9/9 11/11 12/12 10/10 -f 11/11 13/13 14/14 12/12 -f 13/13 15/15 16/16 14/14 -f 15/15 17/17 18/18 16/16 -f 17/17 19/19 20/20 18/18 -f 19/19 21/21 22/22 20/20 -f 21/21 23/23 24/24 22/22 -f 23/23 25/25 26/26 24/24 -f 25/27 27/28 28/29 26/30 -f 27/28 29/31 30/32 28/29 -f 31/33 1/1 2/4 32/34 -f 29/31 31/33 32/34 30/32 -f 4/35 50/36 2/37 -f 1/38 49/39 3/40 -f 3/40 49/39 5/41 -f 5/41 49/39 7/42 -f 7/42 49/39 9/43 -f 9/43 49/39 11/44 -f 11/44 49/39 13/45 -f 13/45 49/39 15/46 -f 15/46 49/39 17/47 -f 17/47 49/39 19/48 -f 19/48 49/39 21/49 -f 21/49 49/39 23/50 -f 23/50 49/39 25/51 -f 25/51 49/39 27/52 -f 27/52 49/39 29/53 -f 29/53 49/39 31/54 -f 31/54 49/39 1/38 -f 2/37 50/36 32/55 -f 32/55 50/36 30/56 -f 30/56 50/36 28/57 -f 28/57 50/36 26/58 -f 26/58 50/36 24/59 -f 24/59 50/36 22/60 -f 22/60 50/36 20/61 -f 20/61 50/36 18/62 -f 18/62 50/36 16/63 -f 16/63 50/36 14/64 -f 14/64 50/36 12/65 -f 12/65 50/36 10/66 -f 10/66 50/36 8/67 -f 8/67 50/36 6/68 -f 6/68 50/36 4/35 -f 41/69 91/70 92/71 42/72 -f 81/73 83/74 100/75 -f 79/76 81/73 100/75 -f 77/77 79/76 100/75 -f 75/78 77/77 100/75 -f 73/79 75/78 100/75 -f 71/80 73/79 100/75 -f 69/81 71/80 100/75 -f 67/82 69/81 100/75 -f 65/83 67/82 100/75 -f 63/84 65/83 100/75 -f 61/85 63/84 100/75 -f 59/86 61/85 100/75 -f 57/87 59/86 100/75 -f 55/88 57/87 100/75 -f 85/89 55/88 100/75 -f 56/90 86/91 99/92 -f 58/93 56/90 99/92 -f 60/94 58/93 99/92 -f 62/95 60/94 99/92 -f 64/96 62/95 99/92 -f 66/97 64/96 99/92 -f 68/98 66/97 99/92 -f 70/99 68/98 99/92 -f 72/100 70/99 99/92 -f 74/101 72/100 99/92 -f 76/102 74/101 99/92 -f 78/103 76/102 99/92 -f 80/104 78/103 99/92 -f 82/105 80/104 99/92 -f 84/106 82/105 99/92 -f 86/91 84/106 99/92 -f 83/74 85/89 100/75 -f 58/22 57/21 55/19 56/20 -f 56/20 55/19 85/17 86/18 -f 60/24 59/23 57/21 58/22 -f 62/26 61/25 59/23 60/24 -f 64/29 63/28 61/27 62/30 -f 66/32 65/31 63/28 64/29 -f 68/34 67/33 65/31 66/32 -f 70/4 69/1 67/33 68/34 -f 72/3 71/2 69/1 70/4 -f 74/6 73/5 71/2 72/3 -f 76/8 75/7 73/5 74/6 -f 78/10 77/9 75/7 76/8 -f 80/12 79/11 77/9 78/10 -f 82/14 81/13 79/11 80/12 -f 84/16 83/15 81/13 82/14 -f 86/18 85/17 83/15 84/16 -f 36/107 51/108 87/109 37/110 -f 34/111 53/112 52/113 35/114 -f 47/115 97/116 98/117 48/118 -f 33/119 54/120 53/112 34/111 -f 35/114 52/113 51/108 36/107 -f 48/118 98/117 54/120 33/119 -f 46/121 96/122 97/116 47/115 -f 45/123 95/124 96/122 46/121 -f 44/125 94/126 95/124 45/123 -f 43/127 93/128 94/126 44/125 -f 42/72 92/71 93/128 43/127 -f 40/129 90/130 91/70 41/69 -f 39/131 89/132 90/130 40/129 -f 38/133 88/134 89/132 39/131 -f 37/110 87/109 88/135 38/136 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pipe_10.obj b/mods/ITEMS/pipeworks/models/pipeworks_pipe_10.obj deleted file mode 100644 index 9edb938..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pipe_10.obj +++ /dev/null @@ -1,891 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-6way.blend' -# www.blender.org -mtllib pipeworks_pipe_10.mtl -o Cube.000 -v 0.069446 -0.468750 -0.103934 -v 0.103933 -0.468750 -0.069446 -v 0.122598 -0.468750 -0.024386 -v 0.122598 -0.468750 0.024386 -v 0.129917 -0.500000 0.086808 -v 0.129917 -0.468750 0.086808 -v 0.086808 -0.500000 0.129917 -v 0.086808 -0.468750 0.129917 -v 0.030483 -0.500000 0.153247 -v 0.030483 -0.468750 0.153248 -v -0.030483 -0.500000 0.153247 -v -0.030483 -0.468750 0.153248 -v -0.086808 -0.500000 0.129917 -v -0.086808 -0.468750 0.129917 -v -0.129918 -0.500000 0.086808 -v -0.129917 -0.468750 0.086808 -v -0.153248 -0.500000 0.030483 -v -0.153248 -0.468750 0.030483 -v -0.153248 -0.500000 -0.030483 -v -0.153248 -0.468750 -0.030483 -v -0.129918 -0.500000 -0.086808 -v -0.129917 -0.468750 -0.086808 -v -0.086808 -0.500000 -0.129917 -v -0.086808 -0.468750 -0.129917 -v -0.030483 -0.500000 -0.153248 -v -0.030483 -0.468750 -0.153248 -v 0.030482 -0.500000 -0.153248 -v 0.030482 -0.468750 -0.153248 -v 0.086807 -0.500000 -0.129917 -v 0.086807 -0.468750 -0.129917 -v 0.129917 -0.500000 -0.086808 -v 0.129917 -0.468750 -0.086808 -v 0.153247 -0.500000 -0.030483 -v 0.153247 -0.468750 -0.030483 -v 0.153247 -0.500000 0.030483 -v 0.153247 -0.468750 0.030483 -v 0.024386 -0.468750 -0.122598 -v -0.024387 -0.468750 -0.122598 -v -0.069447 -0.468750 -0.103934 -v -0.103934 -0.468750 -0.069446 -v -0.122599 -0.468750 -0.024386 -v -0.122599 -0.468750 0.024386 -v -0.103934 -0.468750 0.069446 -v -0.069447 -0.468750 0.103934 -v -0.024387 -0.468750 0.122598 -v 0.024386 -0.468750 0.122598 -v 0.069446 -0.468750 0.103933 -v 0.103933 -0.468750 0.069446 -v -0.000000 -0.468750 -0.000000 -v -0.000000 -0.500000 -0.000000 -v -0.024386 -0.024391 -0.122598 -v -0.069446 -0.024391 -0.103934 -v -0.103934 -0.024391 -0.069446 -v -0.122598 -0.024391 -0.024386 -v -0.122598 -0.024391 0.024386 -v -0.103934 -0.024391 0.069446 -v -0.069446 -0.024391 0.103934 -v -0.024386 -0.024391 0.122598 -v 0.024386 -0.024391 0.122598 -v 0.103934 -0.024391 0.069446 -v 0.069446 -0.024391 0.103934 -v 0.103934 -0.024391 -0.069446 -v 0.122598 -0.024391 -0.024386 -v 0.122598 -0.024391 0.024386 -v 0.069446 -0.024391 -0.103934 -v 0.024386 -0.024391 -0.122598 -v 0.153248 0.468750 0.030483 -v 0.153248 0.500000 0.030483 -v 0.153248 0.468750 -0.030483 -v 0.153248 0.500000 -0.030483 -v 0.129917 0.468750 -0.086808 -v 0.129917 0.500000 -0.086808 -v 0.086808 0.468750 -0.129917 -v 0.086808 0.500000 -0.129917 -v 0.030483 0.468750 -0.153248 -v 0.030483 0.500000 -0.153248 -v -0.030483 0.468750 -0.153248 -v -0.030483 0.500000 -0.153248 -v -0.086808 0.468750 -0.129917 -v -0.086808 0.500000 -0.129917 -v -0.129917 0.468750 -0.086808 -v -0.129917 0.500000 -0.086808 -v -0.153247 0.468750 -0.030483 -v -0.153247 0.500000 -0.030483 -v -0.153247 0.468750 0.030483 -v -0.153247 0.500000 0.030483 -v -0.129917 0.468750 0.086808 -v -0.129917 0.500000 0.086808 -v -0.086808 0.468750 0.129917 -v -0.086808 0.500000 0.129917 -v -0.030483 0.468750 0.153248 -v -0.030483 0.500000 0.153248 -v 0.030483 0.468750 0.153248 -v 0.030483 0.500000 0.153248 -v 0.086808 0.468750 0.129917 -v 0.086808 0.500000 0.129917 -v 0.129917 0.468750 0.086808 -v 0.129918 0.500000 0.086808 -v 0.122598 0.468750 0.024386 -v 0.122598 0.468750 -0.024386 -v 0.103934 0.468750 -0.069446 -v 0.069447 0.468750 -0.103934 -v 0.024387 0.468750 -0.122598 -v -0.024386 0.468750 -0.122598 -v -0.069446 0.468750 -0.103934 -v -0.103933 0.468750 -0.069446 -v -0.122598 0.468750 -0.024386 -v -0.122598 0.468750 0.024386 -v -0.103933 0.468750 0.069446 -v -0.069446 0.468750 0.103934 -v -0.024386 0.468750 0.122598 -v 0.024387 0.468750 0.122598 -v 0.069447 0.468750 0.103934 -v 0.103934 0.468750 0.069446 -v 0.000000 0.468750 -0.000000 -v 0.000000 0.500000 0.000000 -v -0.024386 0.024390 -0.122598 -v -0.069446 0.024390 -0.103934 -v -0.103934 0.024390 -0.069446 -v -0.122598 0.024390 -0.024386 -v -0.122598 0.024390 0.024386 -v -0.103934 0.024390 0.069446 -v -0.069446 0.024390 0.103934 -v -0.024386 0.024389 0.122598 -v 0.024386 0.024389 0.122598 -v 0.103934 0.024390 0.069446 -v 0.069446 0.024390 0.103934 -v 0.103934 0.024390 -0.069446 -v 0.122598 0.024390 -0.024386 -v 0.122598 0.024390 0.024386 -v 0.069446 0.024390 -0.103934 -v 0.024386 0.024390 -0.122598 -v 0.468750 -0.153248 0.030483 -v 0.500000 -0.153248 0.030483 -v 0.468750 -0.153248 -0.030483 -v 0.500000 -0.153248 -0.030483 -v 0.468750 -0.129917 -0.086808 -v 0.500000 -0.129917 -0.086808 -v 0.468750 -0.086808 -0.129917 -v 0.500000 -0.086808 -0.129917 -v 0.468750 -0.030483 -0.153248 -v 0.500000 -0.030483 -0.153248 -v 0.468750 0.030483 -0.153248 -v 0.500000 0.030483 -0.153248 -v 0.468750 0.086808 -0.129917 -v 0.500000 0.086808 -0.129917 -v 0.468750 0.129917 -0.086808 -v 0.500000 0.129917 -0.086808 -v 0.468750 0.153248 -0.030483 -v 0.500000 0.153247 -0.030483 -v 0.468750 0.153248 0.030483 -v 0.500000 0.153248 0.030483 -v 0.468750 0.129917 0.086808 -v 0.500000 0.129917 0.086808 -v 0.468750 0.086808 0.129917 -v 0.500000 0.086808 0.129917 -v 0.468750 0.030483 0.153248 -v 0.500000 0.030483 0.153248 -v 0.468750 -0.030483 0.153248 -v 0.500000 -0.030483 0.153248 -v 0.468750 -0.086808 0.129917 -v 0.500000 -0.086808 0.129917 -v 0.468750 -0.129917 0.086808 -v 0.500000 -0.129917 0.086808 -v 0.468750 -0.122598 0.024386 -v 0.468750 -0.122598 -0.024386 -v 0.468750 -0.103934 -0.069446 -v 0.468750 -0.069446 -0.103934 -v 0.468750 -0.024386 -0.122598 -v 0.468750 0.024386 -0.122598 -v 0.468750 0.069446 -0.103934 -v 0.468750 0.103934 -0.069446 -v 0.468750 0.122598 -0.024386 -v 0.468750 0.122598 0.024386 -v 0.468750 0.103934 0.069446 -v 0.468750 0.069446 0.103934 -v 0.468750 0.024386 0.122598 -v 0.468750 -0.024387 0.122598 -v 0.468750 -0.069447 0.103934 -v 0.468750 -0.103934 0.069446 -v 0.468750 -0.000000 -0.000000 -v 0.500000 -0.000000 0.000000 -v -0.468750 -0.069446 -0.103934 -v -0.468750 -0.103933 -0.069446 -v -0.468750 -0.122598 -0.024387 -v -0.468750 -0.122598 0.024386 -v -0.500000 -0.129917 0.086808 -v -0.468750 -0.129917 0.086808 -v -0.500000 -0.086808 0.129917 -v -0.468750 -0.086808 0.129917 -v -0.500000 -0.030483 0.153247 -v -0.468750 -0.030483 0.153248 -v -0.500000 0.030483 0.153247 -v -0.468750 0.030483 0.153248 -v -0.500000 0.086808 0.129917 -v -0.468750 0.086808 0.129917 -v -0.500000 0.129917 0.086808 -v -0.468750 0.129917 0.086808 -v -0.500000 0.153248 0.030483 -v -0.468750 0.153248 0.030483 -v -0.500000 0.153248 -0.030483 -v -0.468750 0.153248 -0.030483 -v -0.500000 0.129917 -0.086808 -v -0.468750 0.129917 -0.086808 -v -0.500000 0.086808 -0.129917 -v -0.468750 0.086808 -0.129917 -v -0.500000 0.030483 -0.153248 -v -0.468750 0.030483 -0.153248 -v -0.500000 -0.030483 -0.153248 -v -0.468750 -0.030483 -0.153248 -v -0.500000 -0.086808 -0.129917 -v -0.468750 -0.086808 -0.129917 -v -0.500000 -0.129917 -0.086808 -v -0.468750 -0.129917 -0.086808 -v -0.500000 -0.153247 -0.030483 -v -0.468750 -0.153247 -0.030483 -v -0.500000 -0.153247 0.030483 -v -0.468750 -0.153247 0.030483 -v -0.468750 -0.024386 -0.122598 -v -0.468750 0.024387 -0.122598 -v -0.468750 0.069447 -0.103934 -v -0.468750 0.103934 -0.069446 -v -0.468750 0.122598 -0.024386 -v -0.468750 0.122598 0.024386 -v -0.468750 0.103934 0.069446 -v -0.468750 0.069447 0.103934 -v -0.468750 0.024387 0.122598 -v -0.468750 -0.024386 0.122598 -v -0.468750 -0.069446 0.103933 -v -0.468750 -0.103933 0.069446 -v -0.468750 0.000000 -0.000000 -v -0.500000 0.000000 -0.000000 -v 0.069446 -0.103934 0.468750 -v 0.103933 -0.069447 0.468750 -v 0.122598 -0.024387 0.468750 -v 0.122598 0.024386 0.468750 -v 0.129917 0.086807 0.500000 -v 0.129917 0.086807 0.468750 -v 0.086808 0.129917 0.500000 -v 0.086808 0.129917 0.468750 -v 0.030483 0.153247 0.500000 -v 0.030483 0.153247 0.468750 -v -0.030483 0.153247 0.500000 -v -0.030483 0.153247 0.468750 -v -0.086808 0.129917 0.500000 -v -0.086808 0.129917 0.468750 -v -0.129918 0.086808 0.500000 -v -0.129917 0.086808 0.468750 -v -0.153248 0.030483 0.500000 -v -0.153248 0.030483 0.468750 -v -0.153248 -0.030483 0.500000 -v -0.153248 -0.030483 0.468750 -v -0.129918 -0.086808 0.500000 -v -0.129917 -0.086808 0.468750 -v -0.086808 -0.129917 0.500000 -v -0.086808 -0.129917 0.468750 -v -0.030483 -0.153248 0.500000 -v -0.030483 -0.153248 0.468750 -v 0.030482 -0.153248 0.500000 -v 0.030482 -0.153248 0.468750 -v 0.086807 -0.129917 0.500000 -v 0.086807 -0.129917 0.468750 -v 0.129917 -0.086808 0.500000 -v 0.129917 -0.086808 0.468750 -v 0.153247 -0.030483 0.500000 -v 0.153247 -0.030483 0.468750 -v 0.153247 0.030483 0.500000 -v 0.153247 0.030483 0.468750 -v 0.024386 -0.122598 0.468750 -v -0.024387 -0.122598 0.468750 -v -0.069447 -0.103934 0.468750 -v -0.103934 -0.069447 0.468750 -v -0.122599 -0.024387 0.468750 -v -0.122599 0.024386 0.468750 -v -0.103934 0.069446 0.468750 -v -0.069447 0.103933 0.468750 -v -0.024387 0.122598 0.468750 -v 0.024386 0.122598 0.468750 -v 0.069446 0.103933 0.468750 -v 0.103933 0.069446 0.468750 -v -0.000000 -0.000000 0.468750 -v -0.000000 -0.000000 0.500000 -v -0.024386 -0.122598 0.024391 -v -0.069446 -0.103934 0.024391 -v -0.103934 -0.069446 0.024391 -v -0.122598 -0.024386 0.024391 -v -0.122598 0.024386 0.024391 -v -0.103934 0.069446 0.024391 -v -0.069446 0.103934 0.024391 -v -0.024386 0.122598 0.024391 -v 0.024386 0.122598 0.024391 -v 0.103934 0.069446 0.024391 -v 0.069446 0.103934 0.024391 -v 0.103934 -0.069446 0.024391 -v 0.122598 -0.024386 0.024391 -v 0.122598 0.024386 0.024391 -v 0.069446 -0.103934 0.024391 -v 0.024386 -0.122598 0.024391 -v 0.153248 0.030483 -0.468750 -v 0.153248 0.030483 -0.500000 -v 0.153248 -0.030483 -0.468750 -v 0.153248 -0.030483 -0.500000 -v 0.129917 -0.086808 -0.468750 -v 0.129917 -0.086808 -0.500000 -v 0.086808 -0.129917 -0.468750 -v 0.086808 -0.129917 -0.500000 -v 0.030483 -0.153248 -0.468750 -v 0.030483 -0.153248 -0.500000 -v -0.030483 -0.153248 -0.468750 -v -0.030483 -0.153248 -0.500000 -v -0.086808 -0.129917 -0.468750 -v -0.086808 -0.129917 -0.500000 -v -0.129917 -0.086808 -0.468750 -v -0.129917 -0.086808 -0.500000 -v -0.153247 -0.030483 -0.468750 -v -0.153247 -0.030483 -0.500000 -v -0.153247 0.030483 -0.468750 -v -0.153247 0.030483 -0.500000 -v -0.129917 0.086808 -0.468750 -v -0.129917 0.086808 -0.500000 -v -0.086808 0.129917 -0.468750 -v -0.086808 0.129917 -0.500000 -v -0.030483 0.153248 -0.468750 -v -0.030483 0.153248 -0.500000 -v 0.030483 0.153248 -0.468750 -v 0.030483 0.153248 -0.500000 -v 0.086808 0.129917 -0.468750 -v 0.086808 0.129917 -0.500000 -v 0.129917 0.086808 -0.468750 -v 0.129918 0.086808 -0.500000 -v 0.122598 0.024386 -0.468750 -v 0.122598 -0.024386 -0.468750 -v 0.103934 -0.069446 -0.468750 -v 0.069447 -0.103934 -0.468750 -v 0.024387 -0.122598 -0.468750 -v -0.024386 -0.122598 -0.468750 -v -0.069446 -0.103934 -0.468750 -v -0.103933 -0.069446 -0.468750 -v -0.122598 -0.024386 -0.468750 -v -0.122598 0.024386 -0.468750 -v -0.103933 0.069446 -0.468750 -v -0.069446 0.103934 -0.468750 -v -0.024386 0.122598 -0.468750 -v 0.024387 0.122598 -0.468750 -v 0.069447 0.103934 -0.468750 -v 0.103934 0.069446 -0.468750 -v 0.000000 -0.000000 -0.468750 -v 0.000000 0.000000 -0.500000 -v -0.024386 -0.122598 -0.024390 -v -0.069446 -0.103934 -0.024391 -v -0.103934 -0.069446 -0.024391 -v -0.122598 -0.024386 -0.024391 -v -0.122598 0.024386 -0.024391 -v -0.103934 0.069446 -0.024390 -v -0.069446 0.103934 -0.024390 -v -0.024386 0.122598 -0.024389 -v 0.024386 0.122598 -0.024389 -v 0.103934 0.069446 -0.024390 -v 0.069446 0.103934 -0.024390 -v 0.103934 -0.069446 -0.024390 -v 0.122598 -0.024386 -0.024390 -v 0.122598 0.024386 -0.024390 -v 0.069446 -0.103934 -0.024390 -v 0.024386 -0.122598 -0.024390 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.250000 0.015625 -vt 0.250000 0.265625 -vt 0.093322 0.682190 -vt 0.153370 0.657318 -vt 0.185867 0.820694 -vt 0.047364 0.728149 -vt 0.022491 0.788196 -vt 0.022491 0.853192 -vt 0.047364 0.913239 -vt 0.093322 0.959198 -vt 0.153370 0.984070 -vt 0.218365 0.984070 -vt 0.278413 0.959198 -vt 0.324371 0.913239 -vt 0.349244 0.853192 -vt 0.349244 0.788196 -vt 0.324371 0.728149 -vt 0.278413 0.682190 -vt 0.218365 0.657318 -vt 0.471785 0.682190 -vt 0.531832 0.657318 -vt 0.564330 0.820694 -vt 0.425826 0.728149 -vt 0.400953 0.788196 -vt 0.400953 0.853192 -vt 0.425826 0.913239 -vt 0.471785 0.959198 -vt 0.531832 0.984070 -vt 0.596827 0.984070 -vt 0.656875 0.959198 -vt 0.702834 0.913239 -vt 0.727706 0.853192 -vt 0.727706 0.788196 -vt 0.702834 0.728149 -vt 0.656875 0.682190 -vt 0.596827 0.657318 -vt 0.125000 0.609375 -vt 0.125000 0.546875 -vt 0.187500 0.546875 -vt 0.187500 0.609375 -vt 0.250000 0.546875 -vt 0.250000 0.609375 -vt 0.062500 0.609375 -vt 0.062500 0.546875 -vt 0.000000 0.609375 -vt 0.000000 0.546875 -vt 0.937500 0.609375 -vt 0.937500 0.546875 -vt 1.000000 0.546875 -vt 1.000000 0.609375 -vt 0.875000 0.609375 -vt 0.875000 0.546875 -vt 0.812500 0.609375 -vt 0.812500 0.546875 -vt 0.750000 0.609375 -vt 0.750000 0.546875 -vt 0.687500 0.609375 -vt 0.687500 0.546875 -vt 0.625000 0.609375 -vt 0.625000 0.546875 -vt 0.562500 0.609375 -vt 0.562500 0.546875 -vt 0.500000 0.609375 -vt 0.500000 0.546875 -vt 0.437500 0.609375 -vt 0.437500 0.546875 -vt 0.375000 0.609375 -vt 0.375000 0.546875 -vt 0.312500 0.609375 -vt 0.312500 0.546875 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.812500 0.015625 -vt 0.812500 0.265625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.625000 0.015625 -vt 0.625000 0.265625 -vt 0.687500 0.265625 -vt 0.687500 0.015625 -vt 0.500000 0.265625 -vt 0.500000 0.015625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.125000 0.265625 -vt 0.125000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.218363 0.657325 -vt 0.185866 0.820702 -vt 0.153368 0.657325 -vt 0.531836 0.657325 -vt 0.564334 0.820702 -vt 0.596832 0.657325 -vt 0.656879 0.682198 -vt 0.702838 0.728156 -vt 0.727710 0.788204 -vt 0.727710 0.853199 -vt 0.702838 0.913247 -vt 0.656879 0.959205 -vt 0.596831 0.984078 -vt 0.531836 0.984078 -vt 0.471788 0.959205 -vt 0.425830 0.913247 -vt 0.400957 0.853199 -vt 0.400957 0.788204 -vt 0.425830 0.728156 -vt 0.471789 0.682198 -vt 0.093321 0.682198 -vt 0.047362 0.728156 -vt 0.022489 0.788204 -vt 0.022489 0.853199 -vt 0.047362 0.913247 -vt 0.093320 0.959205 -vt 0.153368 0.984078 -vt 0.218363 0.984078 -vt 0.278411 0.959205 -vt 0.324369 0.913247 -vt 0.349242 0.853199 -vt 0.349242 0.788204 -vt 0.324369 0.728156 -vt 0.278411 0.682198 -vt 0.187500 0.515625 -vt 0.250000 0.515625 -vt 0.875000 0.515625 -vt 0.937500 0.515625 -vt 0.750000 0.515625 -vt 0.812500 0.515625 -vt 0.562500 0.515625 -vt 0.625000 0.515625 -vt 0.687500 0.515625 -vt 0.500000 0.515625 -vt 0.437500 0.515625 -vt 0.375000 0.515625 -vt 0.312500 0.515625 -vt 0.125000 0.515625 -vt 0.062500 0.515625 -vt 0.000000 0.515625 -vt 1.000000 0.515625 -usemtl None -s off -f 54/1 41/2 42/3 55/4 -f 31/5 33/6 50/7 -f 29/8 31/5 50/7 -f 27/9 29/8 50/7 -f 25/10 27/9 50/7 -f 23/11 25/10 50/7 -f 21/12 23/11 50/7 -f 19/13 21/12 50/7 -f 17/14 19/13 50/7 -f 15/15 17/14 50/7 -f 13/16 15/15 50/7 -f 11/17 13/16 50/7 -f 9/18 11/17 50/7 -f 7/19 9/18 50/7 -f 5/20 7/19 50/7 -f 35/21 5/20 50/7 -f 6/22 36/23 49/24 -f 8/25 6/22 49/24 -f 10/26 8/25 49/24 -f 12/27 10/26 49/24 -f 14/28 12/27 49/24 -f 16/29 14/28 49/24 -f 18/30 16/29 49/24 -f 20/31 18/30 49/24 -f 22/32 20/31 49/24 -f 24/33 22/32 49/24 -f 26/34 24/33 49/24 -f 28/35 26/34 49/24 -f 30/36 28/35 49/24 -f 32/37 30/36 49/24 -f 34/38 32/37 49/24 -f 36/23 34/38 49/24 -f 33/6 35/21 50/7 -f 8/39 7/40 5/41 6/42 -f 6/42 5/41 35/43 36/44 -f 10/45 9/46 7/40 8/39 -f 12/47 11/48 9/46 10/45 -f 14/49 13/50 11/51 12/52 -f 16/53 15/54 13/50 14/49 -f 18/55 17/56 15/54 16/53 -f 20/57 19/58 17/56 18/55 -f 22/59 21/60 19/58 20/57 -f 24/61 23/62 21/60 22/59 -f 26/63 25/64 23/62 24/61 -f 28/65 27/66 25/64 26/63 -f 30/67 29/68 27/66 28/65 -f 32/69 31/70 29/68 30/67 -f 34/71 33/72 31/70 32/69 -f 36/44 35/43 33/72 34/71 -f 65/73 1/74 37/75 66/76 -f 63/77 3/78 2/79 62/80 -f 61/81 47/82 48/83 60/84 -f 64/85 4/86 3/78 63/77 -f 62/80 2/79 1/74 65/73 -f 60/84 48/83 4/86 64/85 -f 59/87 46/88 47/82 61/81 -f 58/89 45/90 46/88 59/87 -f 57/91 44/92 45/90 58/89 -f 56/93 43/94 44/92 57/91 -f 55/4 42/3 43/94 56/93 -f 53/95 40/96 41/2 54/1 -f 52/97 39/98 40/96 53/95 -f 51/99 38/100 39/98 52/97 -f 66/76 37/75 38/101 51/102 -f 67/58 69/60 70/59 68/57 -f 69/60 71/62 72/61 70/59 -f 71/62 73/64 74/63 72/61 -f 73/64 75/66 76/65 74/63 -f 75/66 77/68 78/67 76/65 -f 77/68 79/70 80/69 78/67 -f 79/70 81/72 82/71 80/69 -f 81/72 83/43 84/44 82/71 -f 83/43 85/41 86/42 84/44 -f 85/41 87/40 88/39 86/42 -f 87/40 89/46 90/45 88/39 -f 89/46 91/48 92/47 90/45 -f 91/51 93/50 94/49 92/52 -f 93/50 95/54 96/53 94/49 -f 97/56 67/58 68/57 98/55 -f 95/54 97/56 98/55 96/53 -f 70/103 116/104 68/105 -f 67/106 115/107 69/108 -f 69/108 115/107 71/109 -f 71/109 115/107 73/110 -f 73/110 115/107 75/111 -f 75/111 115/107 77/112 -f 77/112 115/107 79/113 -f 79/113 115/107 81/114 -f 81/114 115/107 83/115 -f 83/115 115/107 85/116 -f 85/116 115/107 87/117 -f 87/117 115/107 89/118 -f 89/118 115/107 91/119 -f 91/119 115/107 93/120 -f 93/120 115/107 95/121 -f 95/121 115/107 97/122 -f 97/122 115/107 67/106 -f 68/105 116/104 98/123 -f 98/123 116/104 96/124 -f 96/124 116/104 94/125 -f 94/125 116/104 92/126 -f 92/126 116/104 90/127 -f 90/127 116/104 88/128 -f 88/128 116/104 86/129 -f 86/129 116/104 84/130 -f 84/130 116/104 82/131 -f 82/131 116/104 80/132 -f 80/132 116/104 78/133 -f 78/133 116/104 76/134 -f 76/134 116/104 74/135 -f 74/135 116/104 72/136 -f 72/136 116/104 70/103 -f 107/137 120/1 121/4 108/138 -f 102/139 131/73 132/76 103/140 -f 100/141 129/77 128/80 101/142 -f 113/143 127/81 126/84 114/144 -f 99/145 130/85 129/77 100/141 -f 101/142 128/80 131/73 102/139 -f 114/144 126/84 130/85 99/145 -f 112/146 125/87 127/81 113/143 -f 111/147 124/89 125/87 112/146 -f 110/148 123/91 124/89 111/147 -f 109/149 122/93 123/91 110/148 -f 108/138 121/4 122/93 109/149 -f 106/150 119/95 120/1 107/137 -f 105/151 118/97 119/95 106/150 -f 104/152 117/99 118/97 105/151 -f 103/140 132/76 117/102 104/153 -f 133/58 135/60 136/59 134/57 -f 135/60 137/62 138/61 136/59 -f 137/62 139/64 140/63 138/61 -f 139/64 141/66 142/65 140/63 -f 141/66 143/68 144/67 142/65 -f 143/68 145/70 146/69 144/67 -f 145/70 147/72 148/71 146/69 -f 147/72 149/43 150/44 148/71 -f 149/43 151/41 152/42 150/44 -f 151/41 153/40 154/39 152/42 -f 153/40 155/46 156/45 154/39 -f 155/46 157/48 158/47 156/45 -f 157/51 159/50 160/49 158/52 -f 159/50 161/54 162/53 160/49 -f 163/56 133/58 134/57 164/55 -f 161/54 163/56 164/55 162/53 -f 136/103 182/104 134/105 -f 133/106 181/107 135/108 -f 135/108 181/107 137/109 -f 137/109 181/107 139/110 -f 139/110 181/107 141/111 -f 141/111 181/107 143/112 -f 143/112 181/107 145/113 -f 145/113 181/107 147/114 -f 147/114 181/107 149/115 -f 149/115 181/107 151/116 -f 151/116 181/107 153/117 -f 153/117 181/107 155/118 -f 155/118 181/107 157/119 -f 157/119 181/107 159/120 -f 159/120 181/107 161/121 -f 161/121 181/107 163/122 -f 163/122 181/107 133/106 -f 134/105 182/104 164/123 -f 164/123 182/104 162/124 -f 162/124 182/104 160/125 -f 160/125 182/104 158/126 -f 158/126 182/104 156/127 -f 156/127 182/104 154/128 -f 154/128 182/104 152/129 -f 152/129 182/104 150/130 -f 150/130 182/104 148/131 -f 148/131 182/104 146/132 -f 146/132 182/104 144/133 -f 144/133 182/104 142/134 -f 142/134 182/104 140/135 -f 140/135 182/104 138/136 -f 138/136 182/104 136/103 -f 173/137 223/2 224/3 174/138 -f 213/5 215/6 232/7 -f 211/8 213/5 232/7 -f 209/9 211/8 232/7 -f 207/10 209/9 232/7 -f 205/11 207/10 232/7 -f 203/12 205/11 232/7 -f 201/13 203/12 232/7 -f 199/14 201/13 232/7 -f 197/15 199/14 232/7 -f 195/16 197/15 232/7 -f 193/17 195/16 232/7 -f 191/18 193/17 232/7 -f 189/19 191/18 232/7 -f 187/20 189/19 232/7 -f 217/21 187/20 232/7 -f 188/22 218/23 231/24 -f 190/25 188/22 231/24 -f 192/26 190/25 231/24 -f 194/27 192/26 231/24 -f 196/28 194/27 231/24 -f 198/29 196/28 231/24 -f 200/30 198/29 231/24 -f 202/31 200/30 231/24 -f 204/32 202/31 231/24 -f 206/33 204/32 231/24 -f 208/34 206/33 231/24 -f 210/35 208/34 231/24 -f 212/36 210/35 231/24 -f 214/37 212/36 231/24 -f 216/38 214/37 231/24 -f 218/23 216/38 231/24 -f 215/6 217/21 232/7 -f 190/39 189/40 187/41 188/42 -f 188/42 187/41 217/43 218/44 -f 192/45 191/46 189/40 190/39 -f 194/47 193/48 191/46 192/45 -f 196/49 195/50 193/51 194/52 -f 198/53 197/54 195/50 196/49 -f 200/55 199/56 197/54 198/53 -f 202/57 201/58 199/56 200/55 -f 204/59 203/60 201/58 202/57 -f 206/61 205/62 203/60 204/59 -f 208/63 207/64 205/62 206/61 -f 210/65 209/66 207/64 208/63 -f 212/67 211/68 209/66 210/65 -f 214/69 213/70 211/68 212/67 -f 216/71 215/72 213/70 214/69 -f 218/44 217/43 215/72 216/71 -f 168/139 183/74 219/75 169/140 -f 166/141 185/78 184/79 167/142 -f 179/143 229/82 230/83 180/144 -f 165/145 186/86 185/78 166/141 -f 167/142 184/79 183/74 168/139 -f 180/144 230/83 186/86 165/145 -f 178/146 228/88 229/82 179/143 -f 177/147 227/90 228/88 178/146 -f 176/148 226/92 227/90 177/147 -f 175/149 225/94 226/92 176/148 -f 174/138 224/3 225/94 175/149 -f 172/150 222/96 223/2 173/137 -f 171/151 221/98 222/96 172/150 -f 170/152 220/100 221/98 171/151 -f 169/140 219/75 220/101 170/153 -f 286/1 273/2 274/3 287/4 -f 263/5 265/6 282/7 -f 261/8 263/5 282/7 -f 259/9 261/8 282/7 -f 257/10 259/9 282/7 -f 255/11 257/10 282/7 -f 253/12 255/11 282/7 -f 251/13 253/12 282/7 -f 249/14 251/13 282/7 -f 247/15 249/14 282/7 -f 245/16 247/15 282/7 -f 243/17 245/16 282/7 -f 241/18 243/17 282/7 -f 239/19 241/18 282/7 -f 237/20 239/19 282/7 -f 267/21 237/20 282/7 -f 238/22 268/23 281/24 -f 240/25 238/22 281/24 -f 242/26 240/25 281/24 -f 244/27 242/26 281/24 -f 246/28 244/27 281/24 -f 248/29 246/28 281/24 -f 250/30 248/29 281/24 -f 252/31 250/30 281/24 -f 254/32 252/31 281/24 -f 256/33 254/32 281/24 -f 258/34 256/33 281/24 -f 260/35 258/34 281/24 -f 262/36 260/35 281/24 -f 264/37 262/36 281/24 -f 266/38 264/37 281/24 -f 268/23 266/38 281/24 -f 265/6 267/21 282/7 -f 240/39 239/40 237/41 238/42 -f 238/42 237/41 267/43 268/44 -f 242/45 241/46 239/40 240/39 -f 244/47 243/48 241/46 242/45 -f 246/49 245/50 243/51 244/52 -f 248/53 247/54 245/50 246/49 -f 250/55 249/56 247/54 248/53 -f 252/57 251/58 249/56 250/55 -f 254/59 253/60 251/58 252/57 -f 256/61 255/62 253/60 254/59 -f 258/63 257/64 255/62 256/61 -f 260/65 259/66 257/64 258/63 -f 262/67 261/68 259/66 260/65 -f 264/69 263/70 261/68 262/67 -f 266/71 265/72 263/70 264/69 -f 268/44 267/43 265/72 266/71 -f 297/73 233/74 269/75 298/76 -f 295/77 235/78 234/79 294/80 -f 293/81 279/82 280/83 292/84 -f 296/85 236/86 235/78 295/77 -f 294/80 234/79 233/74 297/73 -f 292/84 280/83 236/86 296/85 -f 291/87 278/88 279/82 293/81 -f 290/89 277/90 278/88 291/87 -f 289/91 276/92 277/90 290/89 -f 288/93 275/94 276/92 289/91 -f 287/4 274/3 275/94 288/93 -f 285/95 272/96 273/2 286/1 -f 284/97 271/98 272/96 285/95 -f 283/99 270/100 271/98 284/97 -f 298/76 269/75 270/101 283/102 -f 299/58 301/60 302/59 300/57 -f 301/60 303/62 304/61 302/59 -f 303/62 305/64 306/63 304/61 -f 305/64 307/66 308/65 306/63 -f 307/66 309/68 310/67 308/65 -f 309/68 311/70 312/69 310/67 -f 311/70 313/72 314/71 312/69 -f 313/72 315/43 316/44 314/71 -f 315/43 317/41 318/42 316/44 -f 317/41 319/40 320/39 318/42 -f 319/40 321/46 322/45 320/39 -f 321/46 323/48 324/47 322/45 -f 323/51 325/50 326/49 324/52 -f 325/50 327/54 328/53 326/49 -f 329/56 299/58 300/57 330/55 -f 327/54 329/56 330/55 328/53 -f 302/103 348/104 300/105 -f 299/106 347/107 301/108 -f 301/108 347/107 303/109 -f 303/109 347/107 305/110 -f 305/110 347/107 307/111 -f 307/111 347/107 309/112 -f 309/112 347/107 311/113 -f 311/113 347/107 313/114 -f 313/114 347/107 315/115 -f 315/115 347/107 317/116 -f 317/116 347/107 319/117 -f 319/117 347/107 321/118 -f 321/118 347/107 323/119 -f 323/119 347/107 325/120 -f 325/120 347/107 327/121 -f 327/121 347/107 329/122 -f 329/122 347/107 299/106 -f 300/105 348/104 330/123 -f 330/123 348/104 328/124 -f 328/124 348/104 326/125 -f 326/125 348/104 324/126 -f 324/126 348/104 322/127 -f 322/127 348/104 320/128 -f 320/128 348/104 318/129 -f 318/129 348/104 316/130 -f 316/130 348/104 314/131 -f 314/131 348/104 312/132 -f 312/132 348/104 310/133 -f 310/133 348/104 308/134 -f 308/134 348/104 306/135 -f 306/135 348/104 304/136 -f 304/136 348/104 302/103 -f 339/137 352/1 353/4 340/138 -f 334/139 363/73 364/76 335/140 -f 332/141 361/77 360/80 333/142 -f 345/143 359/81 358/84 346/144 -f 331/145 362/85 361/77 332/141 -f 333/142 360/80 363/73 334/139 -f 346/144 358/84 362/85 331/145 -f 344/146 357/87 359/81 345/143 -f 343/147 356/89 357/87 344/146 -f 342/148 355/91 356/89 343/147 -f 341/149 354/93 355/91 342/148 -f 340/138 353/4 354/93 341/149 -f 338/150 351/95 352/1 339/137 -f 337/151 350/97 351/95 338/150 -f 336/152 349/99 350/97 337/151 -f 335/140 364/76 349/102 336/153 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pipe_2.obj b/mods/ITEMS/pipeworks/models/pipeworks_pipe_2.obj deleted file mode 100644 index c75bca4..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pipe_2.obj +++ /dev/null @@ -1,392 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-stub-end.blend' -# www.blender.org -o pipe.001_Cylinder.000 -v 0.024386 -0.024391 0.122598 -v 0.024386 -0.024391 -0.122598 -v 0.468750 -0.024387 0.122599 -v 0.468750 0.024386 0.122599 -v 0.024391 0.024386 0.122598 -v 0.500000 -0.086808 -0.129917 -v 0.500000 -0.030483 -0.153247 -v 0.500000 -0.000000 0.000001 -v 0.500000 -0.129917 -0.086807 -v 0.500000 -0.153248 -0.030482 -v 0.500000 -0.153248 0.030483 -v 0.500000 -0.129917 0.086808 -v 0.500000 -0.086808 0.129918 -v 0.500000 -0.030483 0.153248 -v 0.500000 0.030483 0.153248 -v 0.500000 0.086808 0.129918 -v 0.500000 0.129917 0.086808 -v 0.500000 0.153247 0.030483 -v 0.500000 0.153247 -0.030482 -v 0.500000 0.129917 -0.086807 -v 0.500000 0.086808 -0.129917 -v 0.500000 0.030483 -0.153247 -v 0.468750 0.086808 -0.129917 -v 0.468750 0.030483 -0.153247 -v 0.468750 -0.000000 -0.000000 -v 0.468750 0.129917 -0.086807 -v 0.468750 0.153247 -0.030482 -v 0.468750 0.153247 0.030483 -v 0.468750 0.129917 0.086808 -v 0.468750 0.086808 0.129918 -v 0.468750 0.030483 0.153248 -v 0.468750 -0.030483 0.153248 -v 0.468750 -0.086808 0.129918 -v 0.468750 -0.129917 0.086808 -v 0.468750 -0.153248 0.030483 -v 0.468750 -0.153248 -0.030482 -v 0.468750 -0.129917 -0.086807 -v 0.468750 -0.086808 -0.129917 -v 0.468750 -0.030483 -0.153247 -v 0.024391 -0.103934 -0.069446 -v 0.468750 -0.103934 -0.069446 -v 0.468750 -0.122598 -0.024386 -v 0.024391 -0.122598 -0.024386 -v 0.468750 -0.024387 -0.122598 -v 0.468750 -0.069447 -0.103933 -v 0.024391 -0.069446 -0.103934 -v 0.468750 0.103933 -0.069446 -v 0.468750 0.069446 -0.103933 -v 0.024391 0.069446 -0.103934 -v 0.024391 0.024386 -0.122598 -v 0.468750 0.024386 -0.122598 -v 0.024391 0.122598 -0.024386 -v 0.468750 0.122598 -0.024386 -v 0.024391 0.122598 0.024386 -v 0.468750 0.122598 0.024387 -v 0.024391 0.103934 0.069446 -v 0.468750 0.103933 0.069447 -v 0.024391 0.069446 0.103934 -v 0.468750 0.069446 0.103934 -v 0.024391 -0.069446 0.103934 -v 0.468750 -0.069447 0.103934 -v 0.024391 -0.103934 0.069446 -v 0.468750 -0.103934 0.069447 -v 0.024391 -0.122598 0.024386 -v 0.468750 -0.122598 0.024387 -v 0.024390 0.103934 -0.069446 -v -0.042016 -0.000000 0.000000 -v -0.034206 -0.012195 0.061299 -v -0.034203 -0.034723 0.051967 -v -0.034203 -0.061299 0.012193 -v -0.034203 -0.061299 -0.012193 -v -0.034203 -0.051967 -0.034723 -v -0.034203 -0.051967 0.034723 -v -0.034203 -0.034723 -0.051967 -v -0.034206 -0.012196 -0.061299 -v -0.034203 0.012193 -0.061299 -v -0.034203 0.034723 -0.051967 -v -0.034203 0.051967 -0.034723 -v -0.034203 0.061299 -0.012193 -v -0.034203 0.061299 0.012193 -v -0.034203 0.051967 0.034723 -v -0.034203 0.034723 0.051967 -v -0.034203 0.012193 0.061299 -v -0.042017 -0.006098 0.030650 -v -0.042016 -0.017362 0.025984 -v -0.042016 -0.030650 0.006097 -v -0.042016 -0.030650 -0.006096 -v -0.042016 -0.025984 -0.017361 -v -0.014672 -0.077950 0.052085 -v -0.042016 -0.017362 -0.025983 -v -0.042017 -0.006098 -0.030649 -v -0.042016 0.006096 -0.030649 -v -0.042016 0.017361 -0.025983 -v -0.042016 0.025983 -0.017362 -v -0.042016 0.030649 -0.006096 -v -0.042016 0.030649 0.006097 -v -0.042016 0.025983 0.017362 -v -0.042016 0.017361 0.025984 -v -0.042016 0.006096 0.030650 -v -0.014675 -0.018293 0.091949 -v -0.014672 -0.052084 0.077951 -v -0.014672 -0.091948 0.018290 -v -0.014672 -0.091949 -0.018289 -v -0.014672 -0.077951 -0.052084 -v -0.042016 -0.025984 0.017362 -v -0.014672 -0.052085 -0.077950 -v -0.014675 -0.018293 -0.091948 -v -0.014672 0.018289 -0.091948 -v -0.014672 0.052084 -0.077950 -v -0.014672 0.077950 -0.052085 -v -0.014672 0.091948 -0.018289 -v -0.014672 0.091949 0.018290 -v -0.014672 0.077951 0.052085 -v -0.014672 0.052085 0.077951 -v -0.014672 0.018290 0.091949 -vt 0.093322 0.682190 -vt 0.153370 0.657318 -vt 0.185867 0.820694 -vt 0.047364 0.728149 -vt 0.022491 0.788196 -vt 0.022491 0.853192 -vt 0.047364 0.913239 -vt 0.093322 0.959198 -vt 0.153370 0.984070 -vt 0.218365 0.984070 -vt 0.278413 0.959198 -vt 0.324371 0.913239 -vt 0.349244 0.853192 -vt 0.349244 0.788196 -vt 0.324371 0.728149 -vt 0.278413 0.682190 -vt 0.218365 0.657318 -vt 0.471785 0.682190 -vt 0.531832 0.657318 -vt 0.564330 0.820694 -vt 0.425826 0.728149 -vt 0.400953 0.788196 -vt 0.400953 0.853192 -vt 0.425826 0.913239 -vt 0.471785 0.959198 -vt 0.531832 0.984070 -vt 0.596827 0.984070 -vt 0.656875 0.959198 -vt 0.702834 0.913239 -vt 0.727706 0.853192 -vt 0.727706 0.788196 -vt 0.702834 0.728149 -vt 0.656875 0.682190 -vt 0.596827 0.657318 -vt 0.125000 0.609375 -vt 0.125000 0.546875 -vt 0.187500 0.546875 -vt 0.187500 0.609375 -vt 0.250000 0.546875 -vt 0.250000 0.609375 -vt 0.062500 0.609375 -vt 0.062500 0.546875 -vt 0.000000 0.609375 -vt 0.000000 0.546875 -vt 0.937500 0.609375 -vt 0.937500 0.546875 -vt 1.000000 0.546875 -vt 1.000000 0.609375 -vt 0.875000 0.609375 -vt 0.875000 0.546875 -vt 0.812500 0.609375 -vt 0.812500 0.546875 -vt 0.750000 0.609375 -vt 0.750000 0.546875 -vt 0.687500 0.609375 -vt 0.687500 0.546875 -vt 0.625000 0.609375 -vt 0.625000 0.546875 -vt 0.562500 0.609375 -vt 0.562500 0.546875 -vt 0.500000 0.609375 -vt 0.500000 0.546875 -vt 0.437500 0.609375 -vt 0.437500 0.546875 -vt 0.375000 0.609375 -vt 0.375000 0.546875 -vt 0.312500 0.609375 -vt 0.312500 0.546875 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.812500 0.265625 -vt 0.812500 0.015625 -vt 0.625000 0.265625 -vt 0.625000 0.015625 -vt 0.687500 0.015625 -vt 0.687500 0.265625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.500000 0.015625 -vt 0.500000 0.265625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.250000 0.265625 -vt 0.250000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.125000 0.015625 -vt 0.125000 0.265625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.648437 0.265625 -vt 0.414062 0.265625 -vt 0.531250 0.265625 -vt 0.632812 0.265625 -vt 0.617187 0.265625 -vt 0.601562 0.265625 -vt 0.585937 0.265625 -vt 0.570312 0.265625 -vt 0.554687 0.265625 -vt 0.539062 0.265625 -vt 0.523437 0.265625 -vt 0.507812 0.265625 -vt 0.492187 0.265625 -vt 0.476562 0.265625 -vt 0.460937 0.265625 -vt 0.445312 0.265625 -vt 0.429687 0.265625 -vt 0.882812 0.265625 -vt 0.179687 0.265625 -vt 0.296875 0.265625 -vt 0.765625 0.265625 -vt 0.835937 0.265625 -vt 0.734375 0.265625 -vt 0.789062 0.265625 -vt 0.703125 0.265625 -vt 0.742187 0.265625 -vt 0.671875 0.265625 -vt 0.695312 0.265625 -vt 0.640625 0.265625 -vt 0.609375 0.265625 -vt 0.578125 0.265625 -vt 0.546875 0.265625 -vt 0.515625 0.265625 -vt 0.484375 0.265625 -vt 0.453125 0.265625 -vt 0.367187 0.265625 -vt 0.421875 0.265625 -vt 0.320312 0.265625 -vt 0.390625 0.265625 -vt 0.273437 0.265625 -vt 0.359375 0.265625 -vt 0.226562 0.265625 -vt 0.328125 0.265625 -s off -f 6/1 7/2 8/3 -f 9/4 6/1 8/3 -f 10/5 9/4 8/3 -f 11/6 10/5 8/3 -f 12/7 11/6 8/3 -f 13/8 12/7 8/3 -f 14/9 13/8 8/3 -f 15/10 14/9 8/3 -f 16/11 15/10 8/3 -f 17/12 16/11 8/3 -f 18/13 17/12 8/3 -f 19/14 18/13 8/3 -f 20/15 19/14 8/3 -f 21/16 20/15 8/3 -f 22/17 21/16 8/3 -f 23/18 24/19 25/20 -f 26/21 23/18 25/20 -f 27/22 26/21 25/20 -f 28/23 27/22 25/20 -f 29/24 28/23 25/20 -f 30/25 29/24 25/20 -f 31/26 30/25 25/20 -f 32/27 31/26 25/20 -f 33/28 32/27 25/20 -f 34/29 33/28 25/20 -f 35/30 34/29 25/20 -f 36/31 35/30 25/20 -f 37/32 36/31 25/20 -f 38/33 37/32 25/20 -f 39/34 38/33 25/20 -f 24/19 39/34 25/20 -f 7/2 22/17 8/3 -f 26/35 20/36 21/37 23/38 -f 23/38 21/37 22/39 24/40 -f 27/41 19/42 20/36 26/35 -f 28/43 18/44 19/42 27/41 -f 29/45 17/46 18/47 28/48 -f 30/49 16/50 17/46 29/45 -f 31/51 15/52 16/50 30/49 -f 32/53 14/54 15/52 31/51 -f 33/55 13/56 14/54 32/53 -f 34/57 12/58 13/56 33/55 -f 35/59 11/60 12/58 34/57 -f 36/61 10/62 11/60 35/59 -f 37/63 9/64 10/62 36/61 -f 38/65 6/66 9/64 37/63 -f 39/67 7/68 6/66 38/65 -f 24/40 22/39 7/68 39/67 -f 40/69 41/70 42/71 43/72 -f 46/73 45/74 41/70 40/69 -f 49/75 48/76 51/77 50/78 -f 54/79 55/80 53/81 52/82 -f 56/83 57/84 55/80 54/79 -f 58/85 59/86 57/84 56/83 -f 5/87 4/88 59/86 58/85 -f 62/89 63/90 61/91 60/92 -f 64/93 65/94 63/90 62/89 -f 43/72 42/71 65/95 64/96 -f 1/97 3/98 4/88 5/87 -f 2/99 44/100 45/74 46/73 -f 66/101 47/102 48/76 49/75 -f 50/78 51/77 44/100 2/99 -f 52/82 53/81 47/102 66/101 -f 60/92 61/91 3/98 1/97 -f 86/103 105/104 67/105 -f 87/106 86/103 67/105 -f 88/107 87/106 67/105 -f 90/108 88/107 67/105 -f 91/109 90/108 67/105 -f 92/110 91/109 67/105 -f 93/111 92/110 67/105 -f 94/112 93/111 67/105 -f 95/113 94/112 67/105 -f 96/114 95/113 67/105 -f 97/115 96/114 67/105 -f 98/116 97/115 67/105 -f 99/117 98/116 67/105 -f 84/118 99/117 67/105 -f 85/119 84/118 67/105 -f 105/104 85/119 67/105 -f 102/120 89/121 73/122 70/123 -f 103/124 102/120 70/123 71/125 -f 104/126 103/124 71/125 72/127 -f 106/128 104/126 72/127 74/129 -f 107/130 106/128 74/129 75/131 -f 108/103 107/130 75/131 76/132 -f 109/108 108/103 76/132 77/133 -f 110/111 109/108 77/133 78/134 -f 111/114 110/111 78/134 79/135 -f 112/117 111/114 79/135 80/136 -f 113/104 112/117 80/136 81/137 -f 114/138 113/104 81/137 82/139 -f 115/140 114/138 82/139 83/141 -f 100/142 115/140 83/141 68/143 -f 101/144 100/142 68/143 69/145 -f 89/121 101/144 69/145 73/122 -f 70/123 73/122 105/104 86/103 -f 71/125 70/123 86/103 87/106 -f 72/127 71/125 87/106 88/107 -f 74/129 72/127 88/107 90/108 -f 75/131 74/129 90/108 91/109 -f 76/132 75/131 91/109 92/110 -f 77/133 76/132 92/110 93/111 -f 78/134 77/133 93/111 94/112 -f 79/135 78/134 94/112 95/113 -f 80/136 79/135 95/113 96/114 -f 81/137 80/136 96/114 97/115 -f 82/139 81/137 97/115 98/116 -f 83/141 82/139 98/116 99/117 -f 68/143 83/141 99/117 84/118 -f 69/145 68/143 84/118 85/119 -f 73/122 69/145 85/119 105/104 -f 64/96 62/89 89/121 102/120 -f 43/72 64/96 102/120 103/124 -f 40/69 43/72 103/124 104/126 -f 46/73 40/69 104/126 106/128 -f 2/99 46/73 106/128 107/130 -f 50/78 2/99 107/130 108/103 -f 49/75 50/78 108/103 109/108 -f 66/101 49/75 109/108 110/111 -f 52/82 66/101 110/111 111/114 -f 54/79 52/82 111/114 112/117 -f 56/83 54/79 112/117 113/104 -f 58/85 56/83 113/104 114/138 -f 5/87 58/85 114/138 115/140 -f 1/97 5/87 115/140 100/142 -f 60/92 1/97 100/142 101/144 -f 62/89 60/92 101/144 89/121 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pipe_3.obj b/mods/ITEMS/pipeworks/models/pipeworks_pipe_3.obj deleted file mode 100644 index f126551..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pipe_3.obj +++ /dev/null @@ -1,354 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-2way-straight.blend' -# www.blender.org -mtllib pipeworks_pipe_3.mtl -o Cube.001 -v 0.468750 -0.153248 0.030483 -v 0.500000 -0.153248 0.030483 -v 0.468750 -0.153248 -0.030483 -v 0.500000 -0.153248 -0.030483 -v 0.468750 -0.129917 -0.086808 -v 0.500000 -0.129917 -0.086808 -v 0.468750 -0.086808 -0.129917 -v 0.500000 -0.086808 -0.129917 -v 0.468750 -0.030483 -0.153248 -v 0.500000 -0.030483 -0.153248 -v 0.468750 0.030483 -0.153248 -v 0.500000 0.030483 -0.153248 -v 0.468750 0.086808 -0.129917 -v 0.500000 0.086808 -0.129917 -v 0.468750 0.129917 -0.086808 -v 0.500000 0.129917 -0.086808 -v 0.468750 0.153248 -0.030483 -v 0.500000 0.153247 -0.030483 -v 0.468750 0.153248 0.030483 -v 0.500000 0.153248 0.030483 -v 0.468750 0.129917 0.086808 -v 0.500000 0.129917 0.086808 -v 0.468750 0.086808 0.129917 -v 0.500000 0.086808 0.129917 -v 0.468750 0.030483 0.153248 -v 0.500000 0.030483 0.153248 -v 0.468750 -0.030483 0.153248 -v 0.500000 -0.030483 0.153248 -v 0.468750 -0.086808 0.129917 -v 0.500000 -0.086808 0.129917 -v 0.468750 -0.129917 0.086808 -v 0.500000 -0.129917 0.086808 -v 0.468750 -0.122598 0.024386 -v 0.468750 -0.122598 -0.024386 -v 0.468750 -0.103934 -0.069446 -v 0.468750 -0.069446 -0.103934 -v 0.468750 -0.024386 -0.122598 -v 0.468750 0.024386 -0.122598 -v 0.468750 0.069446 -0.103934 -v 0.468750 0.103934 -0.069446 -v 0.468750 0.122598 -0.024386 -v 0.468750 0.122598 0.024386 -v 0.468750 0.103934 0.069446 -v 0.468750 0.069446 0.103934 -v 0.468750 0.024386 0.122598 -v 0.468750 -0.024387 0.122598 -v 0.468750 -0.069447 0.103934 -v 0.468750 -0.103934 0.069446 -v 0.468750 -0.000000 -0.000000 -v 0.500000 -0.000000 0.000000 -v -0.468750 -0.069446 -0.103934 -v -0.468750 -0.103933 -0.069446 -v -0.468750 -0.122598 -0.024387 -v -0.468750 -0.122598 0.024386 -v -0.500000 -0.129917 0.086808 -v -0.468750 -0.129917 0.086808 -v -0.500000 -0.086808 0.129917 -v -0.468750 -0.086808 0.129917 -v -0.500000 -0.030483 0.153247 -v -0.468750 -0.030483 0.153248 -v -0.500000 0.030483 0.153247 -v -0.468750 0.030483 0.153248 -v -0.500000 0.086808 0.129917 -v -0.468750 0.086808 0.129917 -v -0.500000 0.129917 0.086808 -v -0.468750 0.129917 0.086808 -v -0.500000 0.153248 0.030483 -v -0.468750 0.153248 0.030483 -v -0.500000 0.153248 -0.030483 -v -0.468750 0.153248 -0.030483 -v -0.500000 0.129917 -0.086808 -v -0.468750 0.129917 -0.086808 -v -0.500000 0.086808 -0.129917 -v -0.468750 0.086808 -0.129917 -v -0.500000 0.030483 -0.153248 -v -0.468750 0.030483 -0.153248 -v -0.500000 -0.030483 -0.153248 -v -0.468750 -0.030483 -0.153248 -v -0.500000 -0.086808 -0.129917 -v -0.468750 -0.086808 -0.129917 -v -0.500000 -0.129917 -0.086808 -v -0.468750 -0.129917 -0.086808 -v -0.500000 -0.153247 -0.030483 -v -0.468750 -0.153247 -0.030483 -v -0.500000 -0.153247 0.030483 -v -0.468750 -0.153247 0.030483 -v -0.468750 -0.024386 -0.122598 -v -0.468750 0.024387 -0.122598 -v -0.468750 0.069447 -0.103934 -v -0.468750 0.103934 -0.069446 -v -0.468750 0.122598 -0.024386 -v -0.468750 0.122598 0.024386 -v -0.468750 0.103934 0.069446 -v -0.468750 0.069447 0.103934 -v -0.468750 0.024387 0.122598 -v -0.468750 -0.024386 0.122598 -v -0.468750 -0.069446 0.103933 -v -0.468750 -0.103933 0.069446 -v -0.468750 0.000000 -0.000000 -v -0.500000 0.000000 -0.000000 -vt 0.750000 0.546875 -vt 0.687500 0.546875 -vt 0.687500 0.609375 -vt 0.750000 0.609375 -vt 0.625000 0.546875 -vt 0.625000 0.609375 -vt 0.562500 0.546875 -vt 0.562500 0.609375 -vt 0.500000 0.546875 -vt 0.500000 0.609375 -vt 0.437500 0.546875 -vt 0.437500 0.609375 -vt 0.375000 0.546875 -vt 0.375000 0.609375 -vt 0.312500 0.546875 -vt 0.312500 0.609375 -vt 0.250000 0.546875 -vt 0.250000 0.609375 -vt 0.187500 0.546875 -vt 0.187500 0.609375 -vt 0.125000 0.546875 -vt 0.125000 0.609375 -vt 0.062500 0.546875 -vt 0.062500 0.609375 -vt 0.000000 0.546875 -vt 0.000000 0.609375 -vt 1.000000 0.546875 -vt 0.937500 0.546875 -vt 0.937500 0.609375 -vt 1.000000 0.609375 -vt 0.875000 0.546875 -vt 0.875000 0.609375 -vt 0.812500 0.546875 -vt 0.812500 0.609375 -vt 0.218363 0.657325 -vt 0.185866 0.820702 -vt 0.153368 0.657325 -vt 0.531836 0.657325 -vt 0.564334 0.820702 -vt 0.596832 0.657325 -vt 0.656879 0.682198 -vt 0.702838 0.728156 -vt 0.727710 0.788204 -vt 0.727710 0.853199 -vt 0.702838 0.913247 -vt 0.656879 0.959205 -vt 0.596831 0.984078 -vt 0.531836 0.984078 -vt 0.471788 0.959205 -vt 0.425830 0.913247 -vt 0.400957 0.853199 -vt 0.400957 0.788204 -vt 0.425830 0.728156 -vt 0.471789 0.682198 -vt 0.093321 0.682198 -vt 0.047362 0.728156 -vt 0.022489 0.788204 -vt 0.022489 0.853199 -vt 0.047362 0.913247 -vt 0.093320 0.959205 -vt 0.153368 0.984078 -vt 0.218363 0.984078 -vt 0.278411 0.959205 -vt 0.324369 0.913247 -vt 0.349242 0.853199 -vt 0.349242 0.788204 -vt 0.324369 0.728156 -vt 0.278411 0.682198 -vt 0.187500 0.515625 -vt 0.187500 0.015625 -vt 0.250000 0.015625 -vt 0.250000 0.515625 -vt 0.093322 0.682190 -vt 0.153370 0.657318 -vt 0.185867 0.820694 -vt 0.047364 0.728149 -vt 0.022491 0.788196 -vt 0.022491 0.853192 -vt 0.047364 0.913239 -vt 0.093322 0.959198 -vt 0.153370 0.984070 -vt 0.218365 0.984070 -vt 0.278413 0.959198 -vt 0.324371 0.913239 -vt 0.349244 0.853192 -vt 0.349244 0.788196 -vt 0.324371 0.728149 -vt 0.278413 0.682190 -vt 0.218365 0.657318 -vt 0.471785 0.682190 -vt 0.531832 0.657318 -vt 0.564330 0.820694 -vt 0.425826 0.728149 -vt 0.400953 0.788196 -vt 0.400953 0.853192 -vt 0.425826 0.913239 -vt 0.471785 0.959198 -vt 0.531832 0.984070 -vt 0.596827 0.984070 -vt 0.656875 0.959198 -vt 0.702834 0.913239 -vt 0.727706 0.853192 -vt 0.727706 0.788196 -vt 0.702834 0.728149 -vt 0.656875 0.682190 -vt 0.596827 0.657318 -vt 0.875000 0.515625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.515625 -vt 0.750000 0.515625 -vt 0.750000 0.015625 -vt 0.812500 0.015625 -vt 0.812500 0.515625 -vt 0.562500 0.515625 -vt 0.562500 0.015625 -vt 0.625000 0.015625 -vt 0.625000 0.515625 -vt 0.687500 0.515625 -vt 0.687500 0.015625 -vt 0.500000 0.515625 -vt 0.500000 0.015625 -vt 0.437500 0.515625 -vt 0.437500 0.015625 -vt 0.375000 0.515625 -vt 0.375000 0.015625 -vt 0.312500 0.515625 -vt 0.312500 0.015625 -vt 0.125000 0.515625 -vt 0.125000 0.015625 -vt 0.062500 0.515625 -vt 0.062500 0.015625 -vt 0.000000 0.515625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.515625 -usemtl None -s off -f 1/1 3/2 4/3 2/4 -f 3/2 5/5 6/6 4/3 -f 5/5 7/7 8/8 6/6 -f 7/7 9/9 10/10 8/8 -f 9/9 11/11 12/12 10/10 -f 11/11 13/13 14/14 12/12 -f 13/13 15/15 16/16 14/14 -f 15/15 17/17 18/18 16/16 -f 17/17 19/19 20/20 18/18 -f 19/19 21/21 22/22 20/20 -f 21/21 23/23 24/24 22/22 -f 23/23 25/25 26/26 24/24 -f 25/27 27/28 28/29 26/30 -f 27/28 29/31 30/32 28/29 -f 31/33 1/1 2/4 32/34 -f 29/31 31/33 32/34 30/32 -f 4/35 50/36 2/37 -f 1/38 49/39 3/40 -f 3/40 49/39 5/41 -f 5/41 49/39 7/42 -f 7/42 49/39 9/43 -f 9/43 49/39 11/44 -f 11/44 49/39 13/45 -f 13/45 49/39 15/46 -f 15/46 49/39 17/47 -f 17/47 49/39 19/48 -f 19/48 49/39 21/49 -f 21/49 49/39 23/50 -f 23/50 49/39 25/51 -f 25/51 49/39 27/52 -f 27/52 49/39 29/53 -f 29/53 49/39 31/54 -f 31/54 49/39 1/38 -f 2/37 50/36 32/55 -f 32/55 50/36 30/56 -f 30/56 50/36 28/57 -f 28/57 50/36 26/58 -f 26/58 50/36 24/59 -f 24/59 50/36 22/60 -f 22/60 50/36 20/61 -f 20/61 50/36 18/62 -f 18/62 50/36 16/63 -f 16/63 50/36 14/64 -f 14/64 50/36 12/65 -f 12/65 50/36 10/66 -f 10/66 50/36 8/67 -f 8/67 50/36 6/68 -f 6/68 50/36 4/35 -f 41/69 91/70 92/71 42/72 -f 81/73 83/74 100/75 -f 79/76 81/73 100/75 -f 77/77 79/76 100/75 -f 75/78 77/77 100/75 -f 73/79 75/78 100/75 -f 71/80 73/79 100/75 -f 69/81 71/80 100/75 -f 67/82 69/81 100/75 -f 65/83 67/82 100/75 -f 63/84 65/83 100/75 -f 61/85 63/84 100/75 -f 59/86 61/85 100/75 -f 57/87 59/86 100/75 -f 55/88 57/87 100/75 -f 85/89 55/88 100/75 -f 56/90 86/91 99/92 -f 58/93 56/90 99/92 -f 60/94 58/93 99/92 -f 62/95 60/94 99/92 -f 64/96 62/95 99/92 -f 66/97 64/96 99/92 -f 68/98 66/97 99/92 -f 70/99 68/98 99/92 -f 72/100 70/99 99/92 -f 74/101 72/100 99/92 -f 76/102 74/101 99/92 -f 78/103 76/102 99/92 -f 80/104 78/103 99/92 -f 82/105 80/104 99/92 -f 84/106 82/105 99/92 -f 86/91 84/106 99/92 -f 83/74 85/89 100/75 -f 58/22 57/21 55/19 56/20 -f 56/20 55/19 85/17 86/18 -f 60/24 59/23 57/21 58/22 -f 62/26 61/25 59/23 60/24 -f 64/29 63/28 61/27 62/30 -f 66/32 65/31 63/28 64/29 -f 68/34 67/33 65/31 66/32 -f 70/4 69/1 67/33 68/34 -f 72/3 71/2 69/1 70/4 -f 74/6 73/5 71/2 72/3 -f 76/8 75/7 73/5 74/6 -f 78/10 77/9 75/7 76/8 -f 80/12 79/11 77/9 78/10 -f 82/14 81/13 79/11 80/12 -f 84/16 83/15 81/13 82/14 -f 86/18 85/17 83/15 84/16 -f 36/107 51/108 87/109 37/110 -f 34/111 53/112 52/113 35/114 -f 47/115 97/116 98/117 48/118 -f 33/119 54/120 53/112 34/111 -f 35/114 52/113 51/108 36/107 -f 48/118 98/117 54/120 33/119 -f 46/121 96/122 97/116 47/115 -f 45/123 95/124 96/122 46/121 -f 44/125 94/126 95/124 45/123 -f 43/127 93/128 94/126 44/125 -f 42/72 92/71 93/128 43/127 -f 40/129 90/130 91/70 41/69 -f 39/131 89/132 90/130 40/129 -f 38/133 88/134 89/132 39/131 -f 37/110 87/109 88/135 38/136 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pipe_4.obj b/mods/ITEMS/pipeworks/models/pipeworks_pipe_4.obj deleted file mode 100644 index 0ef583f..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pipe_4.obj +++ /dev/null @@ -1,478 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-2way-corner.blend' -# www.blender.org -mtllib pipeworks_pipe_4.mtl -o pipe.001_Cylinder.000 -v -0.024386 -0.024391 0.122598 -v -0.024387 -0.468750 0.122598 -v 0.024386 -0.468750 0.122598 -v 0.024386 -0.024391 0.122598 -v -0.086808 -0.500000 -0.129917 -v -0.030483 -0.500000 -0.153247 -v -0.000000 -0.500000 0.000000 -v -0.129917 -0.500000 -0.086808 -v -0.153248 -0.500000 -0.030483 -v -0.153248 -0.500000 0.030483 -v -0.129917 -0.500000 0.086808 -v -0.086808 -0.500000 0.129917 -v -0.030483 -0.500000 0.153248 -v 0.030483 -0.500000 0.153248 -v 0.086808 -0.500000 0.129917 -v 0.129917 -0.500000 0.086808 -v 0.153247 -0.500000 0.030483 -v 0.153248 -0.500000 -0.030483 -v 0.129917 -0.500000 -0.086808 -v 0.086808 -0.500000 -0.129917 -v 0.030483 -0.500000 -0.153247 -v 0.086808 -0.468750 -0.129917 -v 0.030483 -0.468750 -0.153248 -v -0.000000 -0.468750 0.000000 -v 0.129917 -0.468750 -0.086808 -v 0.153248 -0.468750 -0.030483 -v 0.153247 -0.468750 0.030483 -v 0.129917 -0.468750 0.086808 -v 0.086808 -0.468750 0.129917 -v 0.030483 -0.468750 0.153248 -v -0.030483 -0.468750 0.153248 -v -0.086808 -0.468750 0.129917 -v -0.129917 -0.468750 0.086808 -v -0.153248 -0.468750 0.030483 -v -0.153248 -0.468750 -0.030483 -v -0.129917 -0.468750 -0.086808 -v -0.086808 -0.468750 -0.129917 -v -0.030483 -0.468750 -0.153248 -v -0.103934 -0.024391 -0.069446 -v -0.103934 -0.468750 -0.069446 -v -0.122598 -0.468750 -0.024386 -v -0.122598 -0.024391 -0.024386 -v -0.024386 -0.024391 -0.122598 -v -0.024386 -0.468750 -0.122598 -v -0.069446 -0.468750 -0.103933 -v -0.069446 -0.024391 -0.103934 -v 0.103934 -0.024391 -0.069446 -v 0.103933 -0.468750 -0.069446 -v 0.069446 -0.468750 -0.103934 -v 0.069446 -0.024391 -0.103934 -v 0.024386 -0.024391 -0.122598 -v 0.024386 -0.468750 -0.122598 -v 0.122598 -0.024391 -0.024386 -v 0.122598 -0.468750 -0.024386 -v 0.122598 -0.024391 0.024386 -v 0.122598 -0.468750 0.024386 -v 0.103934 -0.024391 0.069446 -v 0.103933 -0.468750 0.069447 -v 0.069446 -0.024391 0.103934 -v 0.069446 -0.468750 0.103934 -v -0.069446 -0.024391 0.103934 -v -0.069447 -0.468750 0.103934 -v -0.103934 -0.024391 0.069446 -v -0.103934 -0.468750 0.069446 -v -0.122598 -0.024391 0.024386 -v -0.122598 -0.468750 0.024386 -v -0.041924 0.041589 0.103934 -v -0.041925 0.041589 -0.103934 -v -0.010062 0.009727 -0.122598 -v -0.079509 0.079173 -0.024386 -v -0.066311 0.065976 -0.069446 -v -0.024663 0.094826 -0.069446 -v -0.011464 0.062964 0.103934 -v -0.024662 0.094827 0.069446 -v -0.031805 0.112070 0.024386 -v -0.031805 0.112070 -0.024386 -v 0.005779 0.021334 -0.122598 -v -0.011464 0.062964 -0.103934 -v 0.005780 0.021334 0.122598 -v -0.079509 0.079173 0.024386 -v -0.066311 0.065976 0.069446 -v 0.468750 -0.024387 0.122599 -v 0.468750 0.024386 0.122599 -v 0.024391 0.024386 0.122598 -v 0.500000 -0.086808 -0.129917 -v 0.500000 -0.030483 -0.153247 -v 0.500000 -0.000000 0.000001 -v 0.500000 -0.129917 -0.086807 -v 0.500000 -0.153248 -0.030482 -v 0.500000 -0.153248 0.030483 -v 0.500000 -0.129917 0.086808 -v 0.500000 -0.086808 0.129918 -v 0.500000 -0.030483 0.153248 -v 0.500000 0.030483 0.153248 -v 0.500000 0.086808 0.129918 -v 0.500000 0.129917 0.086808 -v 0.500000 0.153247 0.030483 -v 0.500000 0.153247 -0.030482 -v 0.500000 0.129917 -0.086807 -v 0.500000 0.086808 -0.129917 -v 0.500000 0.030483 -0.153247 -v 0.468750 0.086808 -0.129917 -v 0.468750 0.030483 -0.153247 -v 0.468750 -0.000000 -0.000000 -v 0.468750 0.129917 -0.086807 -v 0.468750 0.153247 -0.030482 -v 0.468750 0.153247 0.030483 -v 0.468750 0.129917 0.086808 -v 0.468750 0.086808 0.129918 -v 0.468750 0.030483 0.153248 -v 0.468750 -0.030483 0.153248 -v 0.468750 -0.086808 0.129918 -v 0.468750 -0.129917 0.086808 -v 0.468750 -0.153248 0.030483 -v 0.468750 -0.153248 -0.030482 -v 0.468750 -0.129917 -0.086807 -v 0.468750 -0.086808 -0.129917 -v 0.468750 -0.030483 -0.153247 -v 0.024391 -0.103934 -0.069446 -v 0.468750 -0.103934 -0.069446 -v 0.468750 -0.122598 -0.024386 -v 0.024391 -0.122598 -0.024386 -v 0.468750 -0.024387 -0.122598 -v 0.468750 -0.069447 -0.103933 -v 0.024391 -0.069446 -0.103934 -v 0.468750 0.103933 -0.069446 -v 0.468750 0.069446 -0.103933 -v 0.024391 0.069446 -0.103934 -v 0.024391 0.024386 -0.122598 -v 0.468750 0.024386 -0.122598 -v 0.024391 0.122598 -0.024386 -v 0.468750 0.122598 -0.024386 -v 0.024391 0.122598 0.024386 -v 0.468750 0.122598 0.024387 -v 0.024391 0.103934 0.069446 -v 0.468750 0.103933 0.069447 -v 0.024391 0.069446 0.103934 -v 0.468750 0.069446 0.103934 -v 0.024391 -0.069446 0.103934 -v 0.468750 -0.069447 0.103934 -v 0.024391 -0.103934 0.069446 -v 0.468750 -0.103934 0.069447 -v 0.024391 -0.122598 0.024386 -v 0.468750 -0.122598 0.024387 -v 0.024390 0.103934 -0.069446 -v -0.020763 -0.005780 0.122598 -v -0.111499 0.031804 0.024386 -v -0.094256 0.024662 0.069446 -v -0.062393 0.011464 0.103934 -v -0.062393 0.011464 -0.103934 -v -0.020763 -0.005780 -0.122598 -v -0.111499 0.031804 -0.024386 -v -0.094256 0.024662 -0.069446 -v -0.010062 0.009727 0.122598 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.250000 0.015625 -vt 0.250000 0.265625 -vt 0.093322 0.682190 -vt 0.153370 0.657318 -vt 0.185867 0.820694 -vt 0.047364 0.728149 -vt 0.022491 0.788196 -vt 0.022491 0.853192 -vt 0.047364 0.913239 -vt 0.093322 0.959198 -vt 0.153370 0.984070 -vt 0.218365 0.984070 -vt 0.278413 0.959198 -vt 0.324371 0.913239 -vt 0.349244 0.853192 -vt 0.349244 0.788196 -vt 0.324371 0.728149 -vt 0.278413 0.682190 -vt 0.218365 0.657318 -vt 0.471785 0.682190 -vt 0.531832 0.657318 -vt 0.564330 0.820694 -vt 0.425826 0.728149 -vt 0.400953 0.788196 -vt 0.400953 0.853192 -vt 0.425826 0.913239 -vt 0.471785 0.959198 -vt 0.531832 0.984070 -vt 0.596827 0.984070 -vt 0.656875 0.959198 -vt 0.702834 0.913239 -vt 0.727706 0.853192 -vt 0.727706 0.788196 -vt 0.702834 0.728149 -vt 0.656875 0.682190 -vt 0.596827 0.657318 -vt 0.125000 0.609375 -vt 0.125000 0.546875 -vt 0.187500 0.546875 -vt 0.187500 0.609375 -vt 0.250000 0.546875 -vt 0.250000 0.609375 -vt 0.062500 0.609375 -vt 0.062500 0.546875 -vt 0.000000 0.609375 -vt 0.000000 0.546875 -vt 0.937500 0.609375 -vt 0.937500 0.546875 -vt 1.000000 0.546875 -vt 1.000000 0.609375 -vt 0.875000 0.609375 -vt 0.875000 0.546875 -vt 0.812500 0.609375 -vt 0.812500 0.546875 -vt 0.750000 0.609375 -vt 0.750000 0.546875 -vt 0.687500 0.609375 -vt 0.687500 0.546875 -vt 0.625000 0.609375 -vt 0.625000 0.546875 -vt 0.562500 0.609375 -vt 0.562500 0.546875 -vt 0.500000 0.609375 -vt 0.500000 0.546875 -vt 0.437500 0.609375 -vt 0.437500 0.546875 -vt 0.375000 0.609375 -vt 0.375000 0.546875 -vt 0.312500 0.609375 -vt 0.312500 0.546875 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.812500 0.015625 -vt 0.812500 0.265625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.625000 0.015625 -vt 0.625000 0.265625 -vt 0.687500 0.265625 -vt 0.687500 0.015625 -vt 0.500000 0.265625 -vt 0.500000 0.015625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.125000 0.265625 -vt 0.125000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.201671 0.341280 -vt 0.315528 0.341280 -vt 0.307071 0.384726 -vt 0.531250 0.296875 -vt 0.531250 0.343750 -vt 0.484375 0.343750 -vt 0.484375 0.296875 -vt 0.437500 0.343750 -vt 0.437500 0.296875 -vt 0.390625 0.296875 -vt 0.390625 0.343750 -vt 0.343750 0.343750 -vt 0.343750 0.296875 -vt 0.578125 0.296875 -vt 0.578125 0.343750 -vt 0.625000 0.296875 -vt 0.625000 0.343750 -vt 0.671875 0.296875 -vt 0.671875 0.343750 -vt 0.801371 0.340121 -vt 0.695971 0.383568 -vt 0.687514 0.340121 -vt 0.720953 0.419768 -vt 0.757935 0.446864 -vt 0.801382 0.453989 -vt 0.625000 0.484375 -vt 0.625000 0.437500 -vt 0.671875 0.437500 -vt 0.671875 0.484375 -vt 0.625000 0.390625 -vt 0.671875 0.390625 -vt 0.578125 0.390625 -vt 0.531250 0.390625 -vt 0.484375 0.390625 -vt 0.437500 0.390625 -vt 0.282090 0.420927 -vt 0.245108 0.448023 -vt 0.201660 0.455148 -vt 0.390625 0.390625 -vt 0.343750 0.390625 -vt 0.390625 0.437500 -vt 0.343750 0.437500 -vt 0.343750 0.484375 -vt 0.390625 0.484375 -vt 0.437500 0.437500 -vt 0.437500 0.484375 -vt 0.484375 0.437500 -vt 0.484375 0.484375 -vt 0.531250 0.437500 -vt 0.531250 0.484375 -vt 0.578125 0.484375 -vt 0.578125 0.437500 -usemtl None -s off -f 1/1 2/2 3/3 4/4 -f 5/5 6/6 7/7 -f 8/8 5/5 7/7 -f 9/9 8/8 7/7 -f 10/10 9/9 7/7 -f 11/11 10/10 7/7 -f 12/12 11/11 7/7 -f 13/13 12/12 7/7 -f 14/14 13/13 7/7 -f 15/15 14/14 7/7 -f 16/16 15/15 7/7 -f 17/17 16/16 7/7 -f 18/18 17/17 7/7 -f 19/19 18/18 7/7 -f 20/20 19/19 7/7 -f 21/21 20/20 7/7 -f 22/22 23/23 24/24 -f 25/25 22/22 24/24 -f 26/26 25/25 24/24 -f 27/27 26/26 24/24 -f 28/28 27/27 24/24 -f 29/29 28/28 24/24 -f 30/30 29/29 24/24 -f 31/31 30/30 24/24 -f 32/32 31/31 24/24 -f 33/33 32/32 24/24 -f 34/34 33/33 24/24 -f 35/35 34/34 24/24 -f 36/36 35/35 24/24 -f 37/37 36/36 24/24 -f 38/38 37/37 24/24 -f 23/23 38/38 24/24 -f 6/6 21/21 7/7 -f 25/39 19/40 20/41 22/42 -f 22/42 20/41 21/43 23/44 -f 26/45 18/46 19/40 25/39 -f 27/47 17/48 18/46 26/45 -f 28/49 16/50 17/51 27/52 -f 29/53 15/54 16/50 28/49 -f 30/55 14/56 15/54 29/53 -f 31/57 13/58 14/56 30/55 -f 32/59 12/60 13/58 31/57 -f 33/61 11/62 12/60 32/59 -f 34/63 10/64 11/62 33/61 -f 35/65 9/66 10/64 34/63 -f 36/67 8/68 9/66 35/65 -f 37/69 5/70 8/68 36/67 -f 38/71 6/72 5/70 37/69 -f 23/44 21/43 6/72 38/71 -f 39/73 40/74 41/75 42/76 -f 43/77 44/78 45/79 46/80 -f 47/81 48/82 49/83 50/84 -f 51/85 52/86 44/78 43/77 -f 46/80 45/79 40/74 39/73 -f 50/84 49/83 52/86 51/85 -f 53/87 54/88 48/82 47/81 -f 55/89 56/90 54/88 53/87 -f 57/91 58/92 56/90 55/89 -f 59/93 60/94 58/92 57/91 -f 4/4 3/3 60/94 59/93 -f 2/2 1/1 61/95 62/96 -f 63/97 64/98 62/96 61/95 -f 65/99 66/100 64/98 63/97 -f 42/76 41/75 66/101 65/102 -f 85/5 86/6 87/7 -f 88/8 85/5 87/7 -f 89/9 88/8 87/7 -f 90/10 89/9 87/7 -f 91/11 90/10 87/7 -f 92/12 91/11 87/7 -f 93/13 92/12 87/7 -f 94/14 93/13 87/7 -f 95/15 94/14 87/7 -f 96/16 95/15 87/7 -f 97/17 96/16 87/7 -f 98/18 97/17 87/7 -f 99/19 98/18 87/7 -f 100/20 99/19 87/7 -f 101/21 100/20 87/7 -f 102/22 103/23 104/24 -f 105/25 102/22 104/24 -f 106/26 105/25 104/24 -f 107/27 106/26 104/24 -f 108/28 107/27 104/24 -f 109/29 108/28 104/24 -f 110/30 109/29 104/24 -f 111/31 110/30 104/24 -f 112/32 111/31 104/24 -f 113/33 112/32 104/24 -f 114/34 113/33 104/24 -f 115/35 114/34 104/24 -f 116/36 115/35 104/24 -f 117/37 116/36 104/24 -f 118/38 117/37 104/24 -f 103/23 118/38 104/24 -f 86/6 101/21 87/7 -f 105/39 99/40 100/41 102/42 -f 102/42 100/41 101/43 103/44 -f 106/45 98/46 99/40 105/39 -f 107/47 97/48 98/46 106/45 -f 108/49 96/50 97/51 107/52 -f 109/53 95/54 96/50 108/49 -f 110/55 94/56 95/54 109/53 -f 111/57 93/58 94/56 110/55 -f 112/59 92/60 93/58 111/57 -f 113/61 91/62 92/60 112/59 -f 114/63 90/64 91/62 113/61 -f 115/65 89/66 90/64 114/63 -f 116/67 88/68 89/66 115/65 -f 117/69 85/70 88/68 116/67 -f 118/71 86/72 85/70 117/69 -f 103/44 101/43 86/72 118/71 -f 119/73 120/74 121/75 122/76 -f 125/80 124/79 120/74 119/73 -f 128/84 127/83 130/86 129/85 -f 133/89 134/90 132/88 131/87 -f 135/91 136/92 134/90 133/89 -f 137/93 138/94 136/92 135/91 -f 84/4 83/3 138/94 137/93 -f 141/97 142/98 140/96 139/95 -f 143/99 144/100 142/98 141/97 -f 122/76 121/75 144/101 143/102 -f 4/1 82/2 83/3 84/4 -f 51/77 123/78 124/79 125/80 -f 145/81 126/82 127/83 128/84 -f 129/85 130/86 123/78 51/77 -f 131/87 132/88 126/82 145/81 -f 139/95 140/96 82/2 4/1 -f 51/103 43/104 151/105 -f 65/106 147/107 152/108 42/109 -f 42/109 152/108 153/110 39/111 -f 46/112 39/111 153/110 150/113 -f 46/112 150/113 151/114 43/115 -f 65/106 63/116 148/117 147/107 -f 63/116 61/118 149/119 148/117 -f 61/118 1/120 146/121 149/119 -f 4/122 146/123 1/124 -f 4/122 154/125 146/123 -f 4/122 79/126 154/125 -f 79/126 4/122 84/127 -f 137/128 73/129 79/130 84/131 -f 73/129 67/132 154/133 79/130 -f 149/119 146/121 154/133 67/132 -f 81/134 148/117 149/119 67/132 -f 80/135 147/107 148/117 81/134 -f 80/135 70/136 152/108 147/107 -f 70/136 71/137 153/110 152/108 -f 51/103 151/105 69/138 -f 51/103 69/138 77/139 -f 77/139 129/140 51/103 -f 150/113 68/141 69/142 151/114 -f 78/143 77/144 69/142 68/141 -f 68/141 150/113 153/110 71/137 -f 129/145 77/144 78/143 128/146 -f 78/143 68/141 71/137 72/147 -f 78/143 72/147 145/148 128/146 -f 76/149 72/147 71/137 70/136 -f 76/149 131/150 145/148 72/147 -f 80/135 75/151 76/149 70/136 -f 133/152 131/150 76/149 75/151 -f 135/153 133/152 75/151 74/154 -f 75/151 80/135 81/134 74/154 -f 74/154 81/134 67/132 73/129 -f 137/128 135/153 74/154 73/129 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pipe_5.obj b/mods/ITEMS/pipeworks/models/pipeworks_pipe_5.obj deleted file mode 100644 index abf8b97..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pipe_5.obj +++ /dev/null @@ -1,542 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-3way-corner.blend' -# www.blender.org -o pipe.001_Cylinder.000 -v 0.122598 -0.024391 0.024386 -v 0.122598 -0.468750 0.024387 -v 0.122598 -0.468750 -0.024386 -v 0.122598 -0.024391 -0.024386 -v -0.129917 -0.500000 0.086808 -v -0.153247 -0.500000 0.030483 -v 0.000000 -0.500000 -0.000000 -v -0.086808 -0.500000 0.129917 -v -0.030483 -0.500000 0.153248 -v 0.030483 -0.500000 0.153248 -v 0.086808 -0.500000 0.129917 -v 0.129917 -0.500000 0.086808 -v 0.153248 -0.500000 0.030483 -v 0.153248 -0.500000 -0.030483 -v 0.129917 -0.500000 -0.086808 -v 0.086808 -0.500000 -0.129917 -v 0.030483 -0.500000 -0.153247 -v -0.030483 -0.500000 -0.153248 -v -0.086808 -0.500000 -0.129917 -v -0.129917 -0.500000 -0.086808 -v -0.153247 -0.500000 -0.030483 -v -0.129917 -0.468750 -0.086808 -v -0.153248 -0.468750 -0.030483 -v 0.000000 -0.468750 -0.000000 -v -0.086808 -0.468750 -0.129917 -v -0.030483 -0.468750 -0.153248 -v 0.030483 -0.468750 -0.153247 -v 0.086808 -0.468750 -0.129917 -v 0.129917 -0.468750 -0.086808 -v 0.153248 -0.468750 -0.030483 -v 0.153248 -0.468750 0.030483 -v 0.129917 -0.468750 0.086808 -v 0.086808 -0.468750 0.129917 -v 0.030483 -0.468750 0.153248 -v -0.030483 -0.468750 0.153248 -v -0.086808 -0.468750 0.129917 -v -0.129917 -0.468750 0.086808 -v -0.153248 -0.468750 0.030483 -v -0.069446 -0.024391 0.103934 -v -0.069446 -0.468750 0.103934 -v -0.024386 -0.468750 0.122598 -v -0.024386 -0.024391 0.122598 -v -0.122598 -0.024391 0.024386 -v -0.122598 -0.468750 0.024386 -v -0.103933 -0.468750 0.069446 -v -0.103934 -0.024391 0.069446 -v -0.069446 -0.024391 -0.103934 -v -0.069446 -0.468750 -0.103933 -v -0.103934 -0.468750 -0.069446 -v -0.103934 -0.024391 -0.069446 -v -0.122598 -0.024391 -0.024386 -v -0.122598 -0.468750 -0.024386 -v -0.024386 -0.024391 -0.122598 -v -0.024386 -0.468750 -0.122598 -v 0.024386 -0.024391 -0.122598 -v 0.024386 -0.468750 -0.122598 -v 0.069446 -0.024391 -0.103934 -v 0.069447 -0.468750 -0.103933 -v 0.103934 -0.024391 -0.069446 -v 0.103934 -0.468750 -0.069446 -v 0.103934 -0.024391 0.069446 -v 0.103934 -0.468750 0.069447 -v 0.069446 -0.024391 0.103934 -v 0.069446 -0.468750 0.103934 -v 0.024386 -0.024391 0.122598 -v 0.024386 -0.468750 0.122598 -v 0.468750 0.122598 0.024387 -v 0.468750 0.122598 -0.024386 -v 0.500000 -0.129917 0.086808 -v 0.500000 -0.153248 0.030483 -v 0.500000 0.000000 0.000000 -v 0.500000 -0.086808 0.129917 -v 0.500000 -0.030483 0.153248 -v 0.500000 0.030483 0.153248 -v 0.500000 0.086808 0.129917 -v 0.500000 0.129917 0.086808 -v 0.500000 0.153248 0.030483 -v 0.500000 0.153248 -0.030483 -v 0.500000 0.129917 -0.086808 -v 0.500000 0.086808 -0.129917 -v 0.500000 0.030483 -0.153247 -v 0.500000 -0.030483 -0.153247 -v 0.500000 -0.086808 -0.129917 -v 0.500000 -0.129917 -0.086807 -v 0.500000 -0.153248 -0.030482 -v 0.468750 -0.129917 -0.086807 -v 0.468750 -0.153248 -0.030483 -v 0.468750 -0.000000 0.000000 -v 0.468750 -0.086808 -0.129917 -v 0.468750 -0.030483 -0.153247 -v 0.468750 0.030483 -0.153247 -v 0.468750 0.086808 -0.129917 -v 0.468750 0.129917 -0.086808 -v 0.468750 0.153248 -0.030483 -v 0.468750 0.153248 0.030483 -v 0.468750 0.129917 0.086808 -v 0.468750 0.086808 0.129917 -v 0.468750 0.030483 0.153248 -v 0.468750 -0.030483 0.153248 -v 0.468750 -0.086808 0.129917 -v 0.468750 -0.129917 0.086808 -v 0.468750 -0.153248 0.030483 -v 0.024386 -0.069446 0.103934 -v 0.468750 -0.069446 0.103934 -v 0.468750 -0.024386 0.122598 -v 0.024386 -0.122598 0.024386 -v 0.468750 -0.122598 0.024387 -v 0.468750 -0.103934 0.069447 -v 0.024386 -0.103934 0.069446 -v 0.024386 -0.069446 -0.103934 -v 0.468750 -0.069446 -0.103933 -v 0.468750 -0.103934 -0.069446 -v 0.024386 -0.103934 -0.069446 -v 0.468750 -0.122598 -0.024386 -v 0.468750 -0.024386 -0.122598 -v 0.024386 0.024386 -0.122598 -v 0.468750 0.024386 -0.122598 -v 0.024386 0.069446 -0.103934 -v 0.468750 0.069446 -0.103933 -v 0.024386 0.103934 -0.069446 -v 0.468750 0.103934 -0.069446 -v 0.468750 0.103934 0.069447 -v 0.468750 0.069446 0.103934 -v 0.468750 0.024386 0.122598 -v 0.122599 -0.024387 -0.468750 -v 0.122599 0.024386 -0.468750 -v 0.122598 0.024386 -0.024391 -v -0.129917 -0.086808 -0.500000 -v -0.153247 -0.030483 -0.500000 -v 0.000001 0.000000 -0.500000 -v -0.086807 -0.129917 -0.500000 -v -0.030482 -0.153248 -0.500000 -v 0.030483 -0.153248 -0.500000 -v 0.086808 -0.129917 -0.500000 -v 0.129918 -0.086808 -0.500000 -v 0.153248 -0.030483 -0.500000 -v 0.153248 0.030483 -0.500000 -v 0.129918 0.086808 -0.500000 -v 0.086808 0.129917 -0.500000 -v 0.030483 0.153247 -0.500000 -v -0.030482 0.153247 -0.500000 -v -0.086807 0.129917 -0.500000 -v -0.129917 0.086808 -0.500000 -v -0.153247 0.030483 -0.500000 -v -0.129917 0.086808 -0.468750 -v -0.153247 0.030483 -0.468750 -v 0.000000 0.000000 -0.468750 -v -0.086807 0.129917 -0.468750 -v -0.030482 0.153247 -0.468750 -v 0.030483 0.153247 -0.468750 -v 0.086808 0.129917 -0.468750 -v 0.129918 0.086808 -0.468750 -v 0.153248 0.030483 -0.468750 -v 0.153248 -0.030483 -0.468750 -v 0.129918 -0.086808 -0.468750 -v 0.086808 -0.129917 -0.468750 -v 0.030483 -0.153248 -0.468750 -v -0.030482 -0.153248 -0.468750 -v -0.086807 -0.129917 -0.468750 -v -0.129917 -0.086808 -0.468750 -v -0.153247 -0.030483 -0.468750 -v -0.069446 -0.103934 -0.024391 -v -0.069446 -0.103934 -0.468750 -v -0.024386 -0.122598 -0.468750 -v -0.024386 -0.122598 -0.024391 -v -0.122598 -0.024387 -0.468750 -v -0.103933 -0.069447 -0.468750 -v -0.103934 -0.069446 -0.024391 -v -0.069446 0.103933 -0.468750 -v -0.103933 0.069446 -0.468750 -v -0.103934 0.069446 -0.024391 -v -0.122598 0.024386 -0.024391 -v -0.122598 0.024386 -0.468750 -v -0.024386 0.122598 -0.024391 -v -0.024386 0.122598 -0.468750 -v 0.024386 0.122598 -0.024391 -v 0.024387 0.122598 -0.468750 -v 0.069446 0.103934 -0.024391 -v 0.069447 0.103933 -0.468750 -v 0.103934 0.069446 -0.024391 -v 0.103934 0.069446 -0.468750 -v 0.103934 -0.069446 -0.024391 -v 0.103934 -0.069447 -0.468750 -v 0.069446 -0.103934 -0.024391 -v 0.069447 -0.103934 -0.468750 -v 0.024386 -0.122598 -0.024391 -v 0.024387 -0.122598 -0.468750 -v -0.069446 0.103934 -0.024390 -v 0.024386 0.024386 0.122594 -v 0.024386 0.069446 0.103930 -v 0.024386 0.103933 0.069442 -v 0.024386 0.122598 0.024382 -v -0.028389 0.109793 0.028385 -v -0.109793 0.028389 0.028387 -v -0.028389 0.028389 0.109791 -v -0.073974 0.029365 0.073972 -v -0.073974 0.070067 0.028386 -v -0.028389 0.070067 0.073971 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.250000 0.015625 -vt 0.250000 0.265625 -vt 0.093322 0.682190 -vt 0.153370 0.657318 -vt 0.185867 0.820694 -vt 0.047364 0.728149 -vt 0.022491 0.788196 -vt 0.022491 0.853192 -vt 0.047364 0.913239 -vt 0.093322 0.959198 -vt 0.153370 0.984070 -vt 0.218365 0.984070 -vt 0.278413 0.959198 -vt 0.324371 0.913239 -vt 0.349244 0.853192 -vt 0.349244 0.788196 -vt 0.324371 0.728149 -vt 0.278413 0.682190 -vt 0.218365 0.657318 -vt 0.471785 0.682190 -vt 0.531832 0.657318 -vt 0.564330 0.820694 -vt 0.425826 0.728149 -vt 0.400953 0.788196 -vt 0.400953 0.853192 -vt 0.425826 0.913239 -vt 0.471785 0.959198 -vt 0.531832 0.984070 -vt 0.596827 0.984070 -vt 0.656875 0.959198 -vt 0.702834 0.913239 -vt 0.727706 0.853192 -vt 0.727706 0.788196 -vt 0.702834 0.728149 -vt 0.656875 0.682190 -vt 0.596827 0.657318 -vt 0.125000 0.609375 -vt 0.125000 0.546875 -vt 0.187500 0.546875 -vt 0.187500 0.609375 -vt 0.250000 0.546875 -vt 0.250000 0.609375 -vt 0.062500 0.609375 -vt 0.062500 0.546875 -vt 0.000000 0.609375 -vt 0.000000 0.546875 -vt 0.937500 0.609375 -vt 0.937500 0.546875 -vt 1.000000 0.546875 -vt 1.000000 0.609375 -vt 0.875000 0.609375 -vt 0.875000 0.546875 -vt 0.812500 0.609375 -vt 0.812500 0.546875 -vt 0.750000 0.609375 -vt 0.750000 0.546875 -vt 0.687500 0.609375 -vt 0.687500 0.546875 -vt 0.625000 0.609375 -vt 0.625000 0.546875 -vt 0.562500 0.609375 -vt 0.562500 0.546875 -vt 0.500000 0.609375 -vt 0.500000 0.546875 -vt 0.437500 0.609375 -vt 0.437500 0.546875 -vt 0.375000 0.609375 -vt 0.375000 0.546875 -vt 0.312500 0.609375 -vt 0.312500 0.546875 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.812500 0.015625 -vt 0.812500 0.265625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.625000 0.015625 -vt 0.625000 0.265625 -vt 0.687500 0.265625 -vt 0.687500 0.015625 -vt 0.500000 0.265625 -vt 0.500000 0.015625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.125000 0.265625 -vt 0.125000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.934657 0.863213 -vt 0.901601 0.899049 -vt 0.865820 0.861492 -vt 0.925541 0.762929 -vt 0.899262 0.810455 -vt 0.865821 0.758725 -vt 0.832379 0.810455 -vt 0.806102 0.762929 -vt 0.959958 0.821457 -vt 0.796982 0.863213 -vt 0.973651 0.780138 -vt 0.830039 0.899049 -vt 0.865820 0.923510 -vt 0.757989 0.745545 -vt 0.793772 0.721082 -vt 0.757989 0.780138 -vt 0.937873 0.721082 -vt 0.973654 0.745543 -vt 0.771681 0.821457 -vt 0.840522 0.707845 -vt 0.891124 0.707845 -s off -f 1/1 2/2 3/3 4/4 -f 5/5 6/6 7/7 -f 8/8 5/5 7/7 -f 9/9 8/8 7/7 -f 10/10 9/9 7/7 -f 11/11 10/10 7/7 -f 12/12 11/11 7/7 -f 13/13 12/12 7/7 -f 14/14 13/13 7/7 -f 15/15 14/14 7/7 -f 16/16 15/15 7/7 -f 17/17 16/16 7/7 -f 18/18 17/17 7/7 -f 19/19 18/18 7/7 -f 20/20 19/19 7/7 -f 21/21 20/20 7/7 -f 22/22 23/23 24/24 -f 25/25 22/22 24/24 -f 26/26 25/25 24/24 -f 27/27 26/26 24/24 -f 28/28 27/27 24/24 -f 29/29 28/28 24/24 -f 30/30 29/29 24/24 -f 31/31 30/30 24/24 -f 32/32 31/31 24/24 -f 33/33 32/32 24/24 -f 34/34 33/33 24/24 -f 35/35 34/34 24/24 -f 36/36 35/35 24/24 -f 37/37 36/36 24/24 -f 38/38 37/37 24/24 -f 23/23 38/38 24/24 -f 6/6 21/21 7/7 -f 25/39 19/40 20/41 22/42 -f 22/42 20/41 21/43 23/44 -f 26/45 18/46 19/40 25/39 -f 27/47 17/48 18/46 26/45 -f 28/49 16/50 17/51 27/52 -f 29/53 15/54 16/50 28/49 -f 30/55 14/56 15/54 29/53 -f 31/57 13/58 14/56 30/55 -f 32/59 12/60 13/58 31/57 -f 33/61 11/62 12/60 32/59 -f 34/63 10/64 11/62 33/61 -f 35/65 9/66 10/64 34/63 -f 36/67 8/68 9/66 35/65 -f 37/69 5/70 8/68 36/67 -f 38/71 6/72 5/70 37/69 -f 23/44 21/43 6/72 38/71 -f 39/73 40/74 41/75 42/76 -f 43/77 44/78 45/79 46/80 -f 47/81 48/82 49/83 50/84 -f 51/85 52/86 44/78 43/77 -f 46/80 45/79 40/74 39/73 -f 50/84 49/83 52/86 51/85 -f 53/87 54/88 48/82 47/81 -f 55/89 56/90 54/88 53/87 -f 57/91 58/92 56/90 55/89 -f 59/93 60/94 58/92 57/91 -f 4/4 3/3 60/94 59/93 -f 2/2 1/1 61/95 62/96 -f 63/97 64/98 62/96 61/95 -f 65/99 66/100 64/98 63/97 -f 42/76 41/75 66/101 65/102 -f 69/5 70/6 71/7 -f 72/8 69/5 71/7 -f 73/9 72/8 71/7 -f 74/10 73/9 71/7 -f 75/11 74/10 71/7 -f 76/12 75/11 71/7 -f 77/13 76/12 71/7 -f 78/14 77/13 71/7 -f 79/15 78/14 71/7 -f 80/16 79/15 71/7 -f 81/17 80/16 71/7 -f 82/18 81/17 71/7 -f 83/19 82/18 71/7 -f 84/20 83/19 71/7 -f 85/21 84/20 71/7 -f 86/22 87/23 88/24 -f 89/25 86/22 88/24 -f 90/26 89/25 88/24 -f 91/27 90/26 88/24 -f 92/28 91/27 88/24 -f 93/29 92/28 88/24 -f 94/30 93/29 88/24 -f 95/31 94/30 88/24 -f 96/32 95/31 88/24 -f 97/33 96/32 88/24 -f 98/34 97/33 88/24 -f 99/35 98/34 88/24 -f 100/36 99/35 88/24 -f 101/37 100/36 88/24 -f 102/38 101/37 88/24 -f 87/23 102/38 88/24 -f 70/6 85/21 71/7 -f 89/39 83/40 84/41 86/42 -f 86/42 84/41 85/43 87/44 -f 90/45 82/46 83/40 89/39 -f 91/47 81/48 82/46 90/45 -f 92/49 80/50 81/51 91/52 -f 93/53 79/54 80/50 92/49 -f 94/55 78/56 79/54 93/53 -f 95/57 77/58 78/56 94/55 -f 96/59 76/60 77/58 95/57 -f 97/61 75/62 76/60 96/59 -f 98/63 74/64 75/62 97/61 -f 99/65 73/66 74/64 98/63 -f 100/67 72/68 73/66 99/65 -f 101/69 69/70 72/68 100/67 -f 102/71 70/72 69/70 101/69 -f 87/44 85/43 70/72 102/71 -f 106/77 107/78 108/79 109/80 -f 110/81 111/82 112/83 113/84 -f 109/80 108/79 104/74 103/73 -f 118/91 119/92 117/90 116/89 -f 120/93 121/94 119/92 118/91 -f 128/5 129/6 130/7 -f 131/8 128/5 130/7 -f 132/9 131/8 130/7 -f 133/10 132/9 130/7 -f 134/11 133/10 130/7 -f 135/12 134/11 130/7 -f 136/13 135/12 130/7 -f 137/14 136/13 130/7 -f 138/15 137/14 130/7 -f 139/16 138/15 130/7 -f 140/17 139/16 130/7 -f 141/18 140/17 130/7 -f 142/19 141/18 130/7 -f 143/20 142/19 130/7 -f 144/21 143/20 130/7 -f 145/22 146/23 147/24 -f 148/25 145/22 147/24 -f 149/26 148/25 147/24 -f 150/27 149/26 147/24 -f 151/28 150/27 147/24 -f 152/29 151/28 147/24 -f 153/30 152/29 147/24 -f 154/31 153/30 147/24 -f 155/32 154/31 147/24 -f 156/33 155/32 147/24 -f 157/34 156/33 147/24 -f 158/35 157/34 147/24 -f 159/36 158/35 147/24 -f 160/37 159/36 147/24 -f 161/38 160/37 147/24 -f 146/23 161/38 147/24 -f 129/6 144/21 130/7 -f 148/39 142/40 143/41 145/42 -f 145/42 143/41 144/43 146/44 -f 149/45 141/46 142/40 148/39 -f 150/47 140/48 141/46 149/45 -f 151/49 139/50 140/51 150/52 -f 152/53 138/54 139/50 151/49 -f 153/55 137/56 138/54 152/53 -f 154/57 136/58 137/56 153/55 -f 155/59 135/60 136/58 154/57 -f 156/61 134/62 135/60 155/59 -f 157/63 133/64 134/62 156/61 -f 158/65 132/66 133/64 157/63 -f 159/67 131/68 132/66 158/65 -f 160/69 128/70 131/68 159/67 -f 161/71 129/72 128/70 160/69 -f 146/44 144/43 129/72 161/71 -f 162/73 163/74 164/75 165/76 -f 168/80 167/79 163/74 162/73 -f 171/84 170/83 173/86 172/85 -f 176/89 177/90 175/88 174/87 -f 178/91 179/92 177/90 176/89 -f 180/93 181/94 179/92 178/91 -f 127/4 126/3 181/94 180/93 -f 184/97 185/98 183/96 182/95 -f 186/99 187/100 185/98 184/97 -f 165/76 164/75 187/101 186/102 -f 191/103 192/104 193/105 -f 195/106 198/107 196/108 -f 198/107 193/105 197/109 -f 198/107 197/109 196/108 -f 196/108 197/109 194/110 -f 190/111 191/103 198/107 -f 193/105 188/112 197/109 -f 193/105 198/107 191/103 -f 195/106 190/111 198/107 -f 190/111 195/106 189/113 -f 192/1 67/2 68/3 176/4 -f 103/73 104/74 105/75 65/76 -f 186/85 114/86 107/78 106/77 -f 113/84 112/83 114/86 186/85 -f 55/87 115/88 111/82 110/81 -f 116/89 117/90 115/88 55/87 -f 176/4 68/3 121/94 120/93 -f 191/95 122/96 67/2 192/1 -f 190/97 123/98 122/96 191/95 -f 189/99 124/100 123/98 190/97 -f 65/76 105/75 124/101 189/102 -f 4/1 125/2 126/3 127/4 -f 51/77 166/78 167/79 168/80 -f 188/81 169/82 170/83 171/84 -f 172/85 173/86 166/78 51/77 -f 174/87 175/88 169/82 188/81 -f 182/95 183/96 125/2 4/1 -f 174/114 192/104 176/115 -f 51/116 43/117 172/118 -f 42/119 65/120 189/113 -f 192/104 174/114 193/105 -f 188/112 193/105 174/114 -f 188/112 171/121 197/109 -f 46/122 39/123 196/108 -f 195/106 196/108 39/123 -f 194/110 46/122 196/108 -f 194/110 197/109 171/121 -f 171/121 172/118 194/110 -f 43/117 194/110 172/118 -f 46/122 194/110 43/117 -f 39/123 42/119 195/106 -f 189/113 195/106 42/119 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pipe_6.obj b/mods/ITEMS/pipeworks/models/pipeworks_pipe_6.obj deleted file mode 100644 index 0744c45..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pipe_6.obj +++ /dev/null @@ -1,499 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-3way.blend' -# www.blender.org -o Cube.000 -v -0.069446 -0.468750 0.103934 -v -0.103933 -0.468750 0.069446 -v -0.122598 -0.468750 0.024386 -v -0.122598 -0.468750 -0.024386 -v -0.129917 -0.500000 -0.086808 -v -0.129917 -0.468750 -0.086808 -v -0.086808 -0.500000 -0.129917 -v -0.086808 -0.468750 -0.129917 -v -0.030483 -0.500000 -0.153248 -v -0.030483 -0.468750 -0.153248 -v 0.030483 -0.500000 -0.153247 -v 0.030483 -0.468750 -0.153247 -v 0.086808 -0.500000 -0.129917 -v 0.086808 -0.468750 -0.129917 -v 0.129917 -0.500000 -0.086808 -v 0.129917 -0.468750 -0.086808 -v 0.153248 -0.500000 -0.030483 -v 0.153248 -0.468750 -0.030483 -v 0.153248 -0.500000 0.030483 -v 0.153248 -0.468750 0.030483 -v 0.129917 -0.500000 0.086808 -v 0.129917 -0.468750 0.086808 -v 0.086808 -0.500000 0.129917 -v 0.086808 -0.468750 0.129917 -v 0.030483 -0.500000 0.153248 -v 0.030483 -0.468750 0.153248 -v -0.030483 -0.500000 0.153248 -v -0.030483 -0.468750 0.153248 -v -0.086808 -0.500000 0.129917 -v -0.086808 -0.468750 0.129917 -v -0.129917 -0.500000 0.086808 -v -0.129917 -0.468750 0.086808 -v -0.153247 -0.500000 0.030483 -v -0.153248 -0.468750 0.030483 -v -0.153247 -0.500000 -0.030483 -v -0.153248 -0.468750 -0.030483 -v -0.024386 -0.468750 0.122598 -v 0.024386 -0.468750 0.122598 -v 0.069446 -0.468750 0.103934 -v 0.103934 -0.468750 0.069447 -v 0.122598 -0.468750 0.024387 -v 0.122598 -0.468750 -0.024386 -v 0.103934 -0.468750 -0.069446 -v 0.069447 -0.468750 -0.103933 -v 0.024386 -0.468750 -0.122598 -v -0.024386 -0.468750 -0.122598 -v -0.069446 -0.468750 -0.103933 -v -0.103934 -0.468750 -0.069446 -v 0.000000 -0.468750 0.000000 -v 0.000000 -0.500000 0.000000 -v 0.024386 -0.024391 0.122598 -v 0.069446 -0.024391 0.103934 -v 0.103934 -0.024391 0.069446 -v 0.122598 -0.024391 0.024386 -v 0.122598 -0.024391 -0.024386 -v 0.103934 -0.024391 -0.069446 -v 0.069446 -0.024391 -0.103934 -v 0.024386 -0.024391 -0.122598 -v -0.024386 -0.024391 -0.122598 -v -0.103934 -0.024391 -0.069446 -v -0.069446 -0.024391 -0.103934 -v -0.103934 -0.024391 0.069446 -v -0.122598 -0.024391 0.024386 -v -0.122598 -0.024391 -0.024386 -v -0.069446 -0.024391 0.103934 -v -0.024386 -0.024391 0.122598 -v -0.468750 -0.153248 -0.030483 -v -0.500000 -0.153248 -0.030483 -v -0.468750 -0.153248 0.030483 -v -0.500000 -0.153248 0.030483 -v -0.468750 -0.129917 0.086808 -v -0.500000 -0.129917 0.086808 -v -0.468750 -0.086808 0.129917 -v -0.500000 -0.086808 0.129917 -v -0.468750 -0.030483 0.153248 -v -0.500000 -0.030483 0.153248 -v -0.468750 0.030483 0.153248 -v -0.500000 0.030483 0.153248 -v -0.468750 0.086808 0.129917 -v -0.500000 0.086808 0.129917 -v -0.468750 0.129917 0.086808 -v -0.500000 0.129917 0.086808 -v -0.468750 0.153248 0.030483 -v -0.500000 0.153248 0.030483 -v -0.468750 0.153248 -0.030483 -v -0.500000 0.153248 -0.030483 -v -0.468750 0.129917 -0.086808 -v -0.500000 0.129917 -0.086808 -v -0.468750 0.086808 -0.129917 -v -0.500000 0.086808 -0.129917 -v -0.468750 0.030483 -0.153248 -v -0.500000 0.030483 -0.153248 -v -0.468750 -0.030483 -0.153248 -v -0.500000 -0.030483 -0.153248 -v -0.468750 -0.086808 -0.129917 -v -0.500000 -0.086808 -0.129917 -v -0.468750 -0.129917 -0.086808 -v -0.500000 -0.129917 -0.086808 -v -0.468750 -0.122598 -0.024386 -v -0.468750 -0.122598 0.024386 -v -0.468750 -0.103934 0.069446 -v -0.468750 -0.069446 0.103934 -v -0.468750 -0.024386 0.122598 -v -0.468750 0.024386 0.122598 -v -0.468750 0.069446 0.103934 -v -0.468750 0.103934 0.069446 -v -0.468750 0.122598 0.024386 -v -0.468750 0.122598 -0.024386 -v -0.468750 0.103934 -0.069446 -v -0.468750 0.069446 -0.103934 -v -0.468750 0.024386 -0.122598 -v -0.468750 -0.024386 -0.122598 -v -0.468750 -0.069446 -0.103934 -v -0.468750 -0.103934 -0.069446 -v -0.468750 0.000000 -0.000000 -v -0.500000 -0.000000 -0.000000 -v 0.468750 -0.069446 0.103934 -v 0.468750 -0.103934 0.069447 -v 0.468750 -0.122598 0.024387 -v 0.468750 -0.122598 -0.024386 -v 0.500000 -0.129917 -0.086807 -v 0.468750 -0.129917 -0.086807 -v 0.500000 -0.086808 -0.129917 -v 0.468750 -0.086808 -0.129917 -v 0.500000 -0.030483 -0.153247 -v 0.468750 -0.030483 -0.153247 -v 0.500000 0.030483 -0.153247 -v 0.468750 0.030483 -0.153247 -v 0.500000 0.086808 -0.129917 -v 0.468750 0.086808 -0.129917 -v 0.500000 0.129917 -0.086808 -v 0.468750 0.129917 -0.086808 -v 0.500000 0.153248 -0.030483 -v 0.468750 0.153248 -0.030483 -v 0.500000 0.153248 0.030483 -v 0.468750 0.153248 0.030483 -v 0.500000 0.129917 0.086808 -v 0.468750 0.129917 0.086808 -v 0.500000 0.086808 0.129917 -v 0.468750 0.086808 0.129917 -v 0.500000 0.030483 0.153248 -v 0.468750 0.030483 0.153248 -v 0.500000 -0.030483 0.153248 -v 0.468750 -0.030483 0.153248 -v 0.500000 -0.086808 0.129917 -v 0.468750 -0.086808 0.129917 -v 0.500000 -0.129917 0.086808 -v 0.468750 -0.129917 0.086808 -v 0.500000 -0.153248 0.030483 -v 0.468750 -0.153248 0.030483 -v 0.500000 -0.153248 -0.030482 -v 0.468750 -0.153248 -0.030483 -v 0.468750 -0.024386 0.122598 -v 0.468750 0.024386 0.122598 -v 0.468750 0.069446 0.103934 -v 0.468750 0.103934 0.069447 -v 0.468750 0.122598 0.024387 -v 0.468750 0.122598 -0.024386 -v 0.468750 0.103934 -0.069446 -v 0.468750 0.069446 -0.103933 -v 0.468750 0.024386 -0.122598 -v 0.468750 -0.024386 -0.122598 -v 0.468750 -0.069446 -0.103933 -v 0.468750 -0.103934 -0.069446 -v 0.468750 0.000000 0.000000 -v 0.500000 0.000000 0.000000 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.250000 0.015625 -vt 0.250000 0.265625 -vt 0.093322 0.682190 -vt 0.153370 0.657318 -vt 0.185867 0.820694 -vt 0.047364 0.728149 -vt 0.022491 0.788196 -vt 0.022491 0.853192 -vt 0.047364 0.913239 -vt 0.093322 0.959198 -vt 0.153370 0.984070 -vt 0.218365 0.984070 -vt 0.278413 0.959198 -vt 0.324371 0.913239 -vt 0.349244 0.853192 -vt 0.349244 0.788196 -vt 0.324371 0.728149 -vt 0.278413 0.682190 -vt 0.218365 0.657318 -vt 0.471785 0.682190 -vt 0.531832 0.657318 -vt 0.564330 0.820694 -vt 0.425826 0.728149 -vt 0.400953 0.788196 -vt 0.400953 0.853192 -vt 0.425826 0.913239 -vt 0.471785 0.959198 -vt 0.531832 0.984070 -vt 0.596827 0.984070 -vt 0.656875 0.959198 -vt 0.702834 0.913239 -vt 0.727706 0.853192 -vt 0.727706 0.788196 -vt 0.702834 0.728149 -vt 0.656875 0.682190 -vt 0.596827 0.657318 -vt 0.125000 0.609375 -vt 0.125000 0.546875 -vt 0.187500 0.546875 -vt 0.187500 0.609375 -vt 0.250000 0.546875 -vt 0.250000 0.609375 -vt 0.062500 0.609375 -vt 0.062500 0.546875 -vt 0.000000 0.609375 -vt 0.000000 0.546875 -vt 0.937500 0.609375 -vt 0.937500 0.546875 -vt 1.000000 0.546875 -vt 1.000000 0.609375 -vt 0.875000 0.609375 -vt 0.875000 0.546875 -vt 0.812500 0.609375 -vt 0.812500 0.546875 -vt 0.750000 0.609375 -vt 0.750000 0.546875 -vt 0.687500 0.609375 -vt 0.687500 0.546875 -vt 0.625000 0.609375 -vt 0.625000 0.546875 -vt 0.562500 0.609375 -vt 0.562500 0.546875 -vt 0.500000 0.609375 -vt 0.500000 0.546875 -vt 0.437500 0.609375 -vt 0.437500 0.546875 -vt 0.375000 0.609375 -vt 0.375000 0.546875 -vt 0.312500 0.609375 -vt 0.312500 0.546875 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.812500 0.015625 -vt 0.812500 0.265625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.625000 0.015625 -vt 0.625000 0.265625 -vt 0.687500 0.265625 -vt 0.687500 0.015625 -vt 0.500000 0.265625 -vt 0.500000 0.015625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.125000 0.265625 -vt 0.125000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.218363 0.657325 -vt 0.185866 0.820702 -vt 0.153368 0.657325 -vt 0.531836 0.657325 -vt 0.564334 0.820702 -vt 0.596832 0.657325 -vt 0.656879 0.682198 -vt 0.702838 0.728156 -vt 0.727710 0.788204 -vt 0.727710 0.853199 -vt 0.702838 0.913247 -vt 0.656879 0.959205 -vt 0.596831 0.984078 -vt 0.531836 0.984078 -vt 0.471788 0.959205 -vt 0.425830 0.913247 -vt 0.400957 0.853199 -vt 0.400957 0.788204 -vt 0.425830 0.728156 -vt 0.471789 0.682198 -vt 0.093321 0.682198 -vt 0.047362 0.728156 -vt 0.022489 0.788204 -vt 0.022489 0.853199 -vt 0.047362 0.913247 -vt 0.093320 0.959205 -vt 0.153368 0.984078 -vt 0.218363 0.984078 -vt 0.278411 0.959205 -vt 0.324369 0.913247 -vt 0.349242 0.853199 -vt 0.349242 0.788204 -vt 0.324369 0.728156 -vt 0.278411 0.682198 -vt 0.187500 0.515625 -vt 0.250000 0.515625 -vt 0.875000 0.515625 -vt 0.937500 0.515625 -vt 0.750000 0.515625 -vt 0.812500 0.515625 -vt 0.562500 0.515625 -vt 0.625000 0.515625 -vt 0.687500 0.515625 -vt 0.500000 0.515625 -vt 0.437500 0.515625 -vt 0.375000 0.515625 -vt 0.312500 0.515625 -vt 0.125000 0.515625 -vt 0.062500 0.515625 -vt 0.000000 0.515625 -vt 1.000000 0.515625 -s off -f 54/1 41/2 42/3 55/4 -f 31/5 33/6 50/7 -f 29/8 31/5 50/7 -f 27/9 29/8 50/7 -f 25/10 27/9 50/7 -f 23/11 25/10 50/7 -f 21/12 23/11 50/7 -f 19/13 21/12 50/7 -f 17/14 19/13 50/7 -f 15/15 17/14 50/7 -f 13/16 15/15 50/7 -f 11/17 13/16 50/7 -f 9/18 11/17 50/7 -f 7/19 9/18 50/7 -f 5/20 7/19 50/7 -f 35/21 5/20 50/7 -f 6/22 36/23 49/24 -f 8/25 6/22 49/24 -f 10/26 8/25 49/24 -f 12/27 10/26 49/24 -f 14/28 12/27 49/24 -f 16/29 14/28 49/24 -f 18/30 16/29 49/24 -f 20/31 18/30 49/24 -f 22/32 20/31 49/24 -f 24/33 22/32 49/24 -f 26/34 24/33 49/24 -f 28/35 26/34 49/24 -f 30/36 28/35 49/24 -f 32/37 30/36 49/24 -f 34/38 32/37 49/24 -f 36/23 34/38 49/24 -f 33/6 35/21 50/7 -f 8/39 7/40 5/41 6/42 -f 6/42 5/41 35/43 36/44 -f 10/45 9/46 7/40 8/39 -f 12/47 11/48 9/46 10/45 -f 14/49 13/50 11/51 12/52 -f 16/53 15/54 13/50 14/49 -f 18/55 17/56 15/54 16/53 -f 20/57 19/58 17/56 18/55 -f 22/59 21/60 19/58 20/57 -f 24/61 23/62 21/60 22/59 -f 26/63 25/64 23/62 24/61 -f 28/65 27/66 25/64 26/63 -f 30/67 29/68 27/66 28/65 -f 32/69 31/70 29/68 30/67 -f 34/71 33/72 31/70 32/69 -f 36/44 35/43 33/72 34/71 -f 65/73 1/74 37/75 66/76 -f 63/77 3/78 2/79 62/80 -f 61/81 47/82 48/83 60/84 -f 64/85 4/86 3/78 63/77 -f 62/80 2/79 1/74 65/73 -f 60/84 48/83 4/86 64/85 -f 59/87 46/88 47/82 61/81 -f 58/89 45/90 46/88 59/87 -f 57/91 44/92 45/90 58/89 -f 56/93 43/94 44/92 57/91 -f 55/4 42/3 43/94 56/93 -f 53/95 40/96 41/2 54/1 -f 52/97 39/98 40/96 53/95 -f 51/99 38/100 39/98 52/97 -f 66/76 37/75 38/101 51/102 -f 67/58 69/60 70/59 68/57 -f 69/60 71/62 72/61 70/59 -f 71/62 73/64 74/63 72/61 -f 73/64 75/66 76/65 74/63 -f 75/66 77/68 78/67 76/65 -f 77/68 79/70 80/69 78/67 -f 79/70 81/72 82/71 80/69 -f 81/72 83/43 84/44 82/71 -f 83/43 85/41 86/42 84/44 -f 85/41 87/40 88/39 86/42 -f 87/40 89/46 90/45 88/39 -f 89/46 91/48 92/47 90/45 -f 91/51 93/50 94/49 92/52 -f 93/50 95/54 96/53 94/49 -f 97/56 67/58 68/57 98/55 -f 95/54 97/56 98/55 96/53 -f 70/103 116/104 68/105 -f 67/106 115/107 69/108 -f 69/108 115/107 71/109 -f 71/109 115/107 73/110 -f 73/110 115/107 75/111 -f 75/111 115/107 77/112 -f 77/112 115/107 79/113 -f 79/113 115/107 81/114 -f 81/114 115/107 83/115 -f 83/115 115/107 85/116 -f 85/116 115/107 87/117 -f 87/117 115/107 89/118 -f 89/118 115/107 91/119 -f 91/119 115/107 93/120 -f 93/120 115/107 95/121 -f 95/121 115/107 97/122 -f 97/122 115/107 67/106 -f 68/105 116/104 98/123 -f 98/123 116/104 96/124 -f 96/124 116/104 94/125 -f 94/125 116/104 92/126 -f 92/126 116/104 90/127 -f 90/127 116/104 88/128 -f 88/128 116/104 86/129 -f 86/129 116/104 84/130 -f 84/130 116/104 82/131 -f 82/131 116/104 80/132 -f 80/132 116/104 78/133 -f 78/133 116/104 76/134 -f 76/134 116/104 74/135 -f 74/135 116/104 72/136 -f 72/136 116/104 70/103 -f 107/137 157/2 158/3 108/138 -f 147/5 149/6 166/7 -f 145/8 147/5 166/7 -f 143/9 145/8 166/7 -f 141/10 143/9 166/7 -f 139/11 141/10 166/7 -f 137/12 139/11 166/7 -f 135/13 137/12 166/7 -f 133/14 135/13 166/7 -f 131/15 133/14 166/7 -f 129/16 131/15 166/7 -f 127/17 129/16 166/7 -f 125/18 127/17 166/7 -f 123/19 125/18 166/7 -f 121/20 123/19 166/7 -f 151/21 121/20 166/7 -f 122/22 152/23 165/24 -f 124/25 122/22 165/24 -f 126/26 124/25 165/24 -f 128/27 126/26 165/24 -f 130/28 128/27 165/24 -f 132/29 130/28 165/24 -f 134/30 132/29 165/24 -f 136/31 134/30 165/24 -f 138/32 136/31 165/24 -f 140/33 138/32 165/24 -f 142/34 140/33 165/24 -f 144/35 142/34 165/24 -f 146/36 144/35 165/24 -f 148/37 146/36 165/24 -f 150/38 148/37 165/24 -f 152/23 150/38 165/24 -f 149/6 151/21 166/7 -f 124/39 123/40 121/41 122/42 -f 122/42 121/41 151/43 152/44 -f 126/45 125/46 123/40 124/39 -f 128/47 127/48 125/46 126/45 -f 130/49 129/50 127/51 128/52 -f 132/53 131/54 129/50 130/49 -f 134/55 133/56 131/54 132/53 -f 136/57 135/58 133/56 134/55 -f 138/59 137/60 135/58 136/57 -f 140/61 139/62 137/60 138/59 -f 142/63 141/64 139/62 140/61 -f 144/65 143/66 141/64 142/63 -f 146/67 145/68 143/66 144/65 -f 148/69 147/70 145/68 146/67 -f 150/71 149/72 147/70 148/69 -f 152/44 151/43 149/72 150/71 -f 102/139 117/74 153/75 103/140 -f 100/141 119/78 118/79 101/142 -f 113/143 163/82 164/83 114/144 -f 99/145 120/86 119/78 100/141 -f 101/142 118/79 117/74 102/139 -f 114/144 164/83 120/86 99/145 -f 112/146 162/88 163/82 113/143 -f 111/147 161/90 162/88 112/146 -f 110/148 160/92 161/90 111/147 -f 109/149 159/94 160/92 110/148 -f 108/138 158/3 159/94 109/149 -f 106/150 156/96 157/2 107/137 -f 105/151 155/98 156/96 106/150 -f 104/152 154/100 155/98 105/151 -f 103/140 153/75 154/101 104/153 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pipe_7.obj b/mods/ITEMS/pipeworks/models/pipeworks_pipe_7.obj deleted file mode 100644 index d299361..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pipe_7.obj +++ /dev/null @@ -1,629 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-4way-corner.blend' -# www.blender.org -o Cube.000 -v -0.069446 -0.468750 0.103934 -v -0.103933 -0.468750 0.069446 -v -0.122598 -0.468750 0.024386 -v -0.122598 -0.468750 -0.024386 -v -0.129917 -0.500000 -0.086808 -v -0.129917 -0.468750 -0.086808 -v -0.086808 -0.500000 -0.129917 -v -0.086808 -0.468750 -0.129917 -v -0.030483 -0.500000 -0.153248 -v -0.030483 -0.468750 -0.153248 -v 0.030483 -0.500000 -0.153247 -v 0.030483 -0.468750 -0.153247 -v 0.086808 -0.500000 -0.129917 -v 0.086808 -0.468750 -0.129917 -v 0.129917 -0.500000 -0.086808 -v 0.129917 -0.468750 -0.086808 -v 0.153248 -0.500000 -0.030483 -v 0.153248 -0.468750 -0.030483 -v 0.153248 -0.500000 0.030483 -v 0.153248 -0.468750 0.030483 -v 0.129917 -0.500000 0.086808 -v 0.129917 -0.468750 0.086808 -v 0.086808 -0.500000 0.129917 -v 0.086808 -0.468750 0.129917 -v 0.030483 -0.500000 0.153248 -v 0.030483 -0.468750 0.153248 -v -0.030483 -0.500000 0.153248 -v -0.030483 -0.468750 0.153248 -v -0.086808 -0.500000 0.129917 -v -0.086808 -0.468750 0.129917 -v -0.129917 -0.500000 0.086808 -v -0.129917 -0.468750 0.086808 -v -0.153247 -0.500000 0.030483 -v -0.153248 -0.468750 0.030483 -v -0.153247 -0.500000 -0.030483 -v -0.153248 -0.468750 -0.030483 -v -0.024386 -0.468750 0.122598 -v 0.024386 -0.468750 0.122598 -v 0.069446 -0.468750 0.103934 -v 0.103934 -0.468750 0.069447 -v 0.122598 -0.468750 0.024387 -v 0.122598 -0.468750 -0.024386 -v 0.103934 -0.468750 -0.069446 -v 0.069447 -0.468750 -0.103933 -v 0.024386 -0.468750 -0.122598 -v -0.024386 -0.468750 -0.122598 -v -0.069446 -0.468750 -0.103933 -v -0.103934 -0.468750 -0.069446 -v 0.000000 -0.468750 0.000000 -v 0.000000 -0.500000 0.000000 -v 0.024386 -0.024391 0.122598 -v 0.069446 -0.024391 0.103934 -v 0.103934 -0.024391 0.069446 -v 0.122598 -0.024391 0.024386 -v 0.122598 -0.024391 -0.024386 -v 0.103934 -0.024391 -0.069446 -v 0.069446 -0.024391 -0.103934 -v 0.024386 -0.024391 -0.122598 -v -0.024386 -0.024391 -0.122598 -v -0.103934 -0.024391 -0.069446 -v -0.069446 -0.024391 -0.103934 -v -0.103934 -0.024391 0.069446 -v -0.122598 -0.024391 0.024386 -v -0.122598 -0.024391 -0.024386 -v -0.069446 -0.024391 0.103934 -v -0.024386 -0.024391 0.122598 -v -0.468750 -0.153248 -0.030483 -v -0.500000 -0.153248 -0.030483 -v -0.468750 -0.153248 0.030483 -v -0.500000 -0.153248 0.030483 -v -0.468750 -0.129917 0.086808 -v -0.500000 -0.129917 0.086808 -v -0.468750 -0.086808 0.129917 -v -0.500000 -0.086808 0.129917 -v -0.468750 -0.030483 0.153248 -v -0.500000 -0.030483 0.153248 -v -0.468750 0.030483 0.153248 -v -0.500000 0.030483 0.153248 -v -0.468750 0.086808 0.129917 -v -0.500000 0.086808 0.129917 -v -0.468750 0.129917 0.086808 -v -0.500000 0.129917 0.086808 -v -0.468750 0.153248 0.030483 -v -0.500000 0.153248 0.030483 -v -0.468750 0.153248 -0.030483 -v -0.500000 0.153248 -0.030483 -v -0.468750 0.129917 -0.086808 -v -0.500000 0.129917 -0.086808 -v -0.468750 0.086808 -0.129917 -v -0.500000 0.086808 -0.129917 -v -0.468750 0.030483 -0.153248 -v -0.500000 0.030483 -0.153248 -v -0.468750 -0.030483 -0.153248 -v -0.500000 -0.030483 -0.153248 -v -0.468750 -0.086808 -0.129917 -v -0.500000 -0.086808 -0.129917 -v -0.468750 -0.129917 -0.086808 -v -0.500000 -0.129917 -0.086808 -v -0.468750 -0.122598 -0.024386 -v -0.468750 -0.122598 0.024386 -v -0.468750 -0.103934 0.069446 -v -0.468750 -0.069446 0.103934 -v -0.468750 -0.024386 0.122598 -v -0.468750 0.024386 0.122598 -v -0.468750 0.069446 0.103934 -v -0.468750 0.103934 0.069446 -v -0.468750 0.122598 0.024386 -v -0.468750 0.122598 -0.024386 -v -0.468750 0.103934 -0.069446 -v -0.468750 0.069446 -0.103934 -v -0.468750 0.024386 -0.122598 -v -0.468750 -0.024386 -0.122598 -v -0.468750 -0.069446 -0.103934 -v -0.468750 -0.103934 -0.069446 -v -0.468750 0.000000 -0.000000 -v -0.500000 -0.000000 -0.000000 -v 0.468750 -0.069446 0.103934 -v 0.468750 -0.103934 0.069447 -v 0.468750 -0.122598 0.024387 -v 0.468750 -0.122598 -0.024386 -v 0.500000 -0.129917 -0.086807 -v 0.468750 -0.129917 -0.086807 -v 0.500000 -0.086808 -0.129917 -v 0.468750 -0.086808 -0.129917 -v 0.500000 -0.030483 -0.153247 -v 0.468750 -0.030483 -0.153247 -v 0.500000 0.030483 -0.153247 -v 0.468750 0.030483 -0.153247 -v 0.500000 0.086808 -0.129917 -v 0.468750 0.086808 -0.129917 -v 0.500000 0.129917 -0.086808 -v 0.468750 0.129917 -0.086808 -v 0.500000 0.153248 -0.030483 -v 0.468750 0.153248 -0.030483 -v 0.500000 0.153248 0.030483 -v 0.468750 0.153248 0.030483 -v 0.500000 0.129917 0.086808 -v 0.468750 0.129917 0.086808 -v 0.500000 0.086808 0.129917 -v 0.468750 0.086808 0.129917 -v 0.500000 0.030483 0.153248 -v 0.468750 0.030483 0.153248 -v 0.500000 -0.030483 0.153248 -v 0.468750 -0.030483 0.153248 -v 0.500000 -0.086808 0.129917 -v 0.468750 -0.086808 0.129917 -v 0.500000 -0.129917 0.086808 -v 0.468750 -0.129917 0.086808 -v 0.500000 -0.153248 0.030483 -v 0.468750 -0.153248 0.030483 -v 0.500000 -0.153248 -0.030482 -v 0.468750 -0.153248 -0.030483 -v 0.468750 -0.024386 0.122598 -v 0.468750 0.024386 0.122598 -v 0.468750 0.069446 0.103934 -v 0.468750 0.103934 0.069447 -v 0.468750 0.122598 0.024387 -v 0.468750 0.122598 -0.024386 -v 0.468750 0.103934 -0.069446 -v 0.468750 0.069446 -0.103933 -v 0.468750 0.024386 -0.122598 -v 0.468750 -0.024386 -0.122598 -v 0.468750 -0.069446 -0.103933 -v 0.468750 -0.103934 -0.069446 -v 0.468750 0.000000 0.000000 -v 0.500000 0.000000 0.000000 -v -0.069446 -0.103934 -0.468750 -v -0.103933 -0.069447 -0.468750 -v -0.122598 -0.024387 -0.468750 -v -0.122598 0.024386 -0.468750 -v -0.129917 0.086808 -0.500000 -v -0.129917 0.086808 -0.468750 -v -0.086807 0.129917 -0.500000 -v -0.086807 0.129917 -0.468750 -v -0.030482 0.153247 -0.500000 -v -0.030482 0.153247 -0.468750 -v 0.030483 0.153247 -0.500000 -v 0.030483 0.153247 -0.468750 -v 0.086808 0.129917 -0.500000 -v 0.086808 0.129917 -0.468750 -v 0.129918 0.086808 -0.500000 -v 0.129918 0.086808 -0.468750 -v 0.153248 0.030483 -0.500000 -v 0.153248 0.030483 -0.468750 -v 0.153248 -0.030483 -0.500000 -v 0.153248 -0.030483 -0.468750 -v 0.129918 -0.086808 -0.500000 -v 0.129918 -0.086808 -0.468750 -v 0.086808 -0.129917 -0.500000 -v 0.086808 -0.129917 -0.468750 -v 0.030483 -0.153248 -0.500000 -v 0.030483 -0.153248 -0.468750 -v -0.030482 -0.153248 -0.500000 -v -0.030482 -0.153248 -0.468750 -v -0.086807 -0.129917 -0.500000 -v -0.086807 -0.129917 -0.468750 -v -0.129917 -0.086808 -0.500000 -v -0.129917 -0.086808 -0.468750 -v -0.153247 -0.030483 -0.500000 -v -0.153247 -0.030483 -0.468750 -v -0.153247 0.030483 -0.500000 -v -0.153247 0.030483 -0.468750 -v -0.024386 -0.122598 -0.468750 -v 0.024387 -0.122598 -0.468750 -v 0.069447 -0.103934 -0.468750 -v 0.103934 -0.069447 -0.468750 -v 0.122599 -0.024387 -0.468750 -v 0.122599 0.024386 -0.468750 -v 0.103934 0.069446 -0.468750 -v 0.069447 0.103933 -0.468750 -v 0.024387 0.122598 -0.468750 -v -0.024386 0.122598 -0.468750 -v -0.069446 0.103933 -0.468750 -v -0.103933 0.069446 -0.468750 -v 0.000000 -0.000000 -0.468750 -v 0.000001 -0.000000 -0.500000 -v 0.024386 -0.122598 -0.024391 -v 0.069446 -0.103934 -0.024391 -v 0.103934 -0.069446 -0.024391 -v 0.122598 -0.024386 -0.024391 -v 0.122598 0.024386 -0.024391 -v 0.103934 0.069446 -0.024391 -v 0.069446 0.103934 -0.024391 -v 0.024386 0.122598 -0.024391 -v -0.024386 0.122598 -0.024391 -v -0.103934 0.069446 -0.024391 -v -0.069446 0.103934 -0.024391 -v -0.103934 -0.069446 -0.024391 -v -0.122598 -0.024386 -0.024391 -v -0.122598 0.024386 -0.024391 -v -0.069446 -0.103934 -0.024391 -v -0.024386 -0.122598 -0.024391 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.250000 0.015625 -vt 0.250000 0.265625 -vt 0.093322 0.682190 -vt 0.153370 0.657318 -vt 0.185867 0.820694 -vt 0.047364 0.728149 -vt 0.022491 0.788196 -vt 0.022491 0.853192 -vt 0.047364 0.913239 -vt 0.093322 0.959198 -vt 0.153370 0.984070 -vt 0.218365 0.984070 -vt 0.278413 0.959198 -vt 0.324371 0.913239 -vt 0.349244 0.853192 -vt 0.349244 0.788196 -vt 0.324371 0.728149 -vt 0.278413 0.682190 -vt 0.218365 0.657318 -vt 0.471785 0.682190 -vt 0.531832 0.657318 -vt 0.564330 0.820694 -vt 0.425826 0.728149 -vt 0.400953 0.788196 -vt 0.400953 0.853192 -vt 0.425826 0.913239 -vt 0.471785 0.959198 -vt 0.531832 0.984070 -vt 0.596827 0.984070 -vt 0.656875 0.959198 -vt 0.702834 0.913239 -vt 0.727706 0.853192 -vt 0.727706 0.788196 -vt 0.702834 0.728149 -vt 0.656875 0.682190 -vt 0.596827 0.657318 -vt 0.125000 0.609375 -vt 0.125000 0.546875 -vt 0.187500 0.546875 -vt 0.187500 0.609375 -vt 0.250000 0.546875 -vt 0.250000 0.609375 -vt 0.062500 0.609375 -vt 0.062500 0.546875 -vt 0.000000 0.609375 -vt 0.000000 0.546875 -vt 0.937500 0.609375 -vt 0.937500 0.546875 -vt 1.000000 0.546875 -vt 1.000000 0.609375 -vt 0.875000 0.609375 -vt 0.875000 0.546875 -vt 0.812500 0.609375 -vt 0.812500 0.546875 -vt 0.750000 0.609375 -vt 0.750000 0.546875 -vt 0.687500 0.609375 -vt 0.687500 0.546875 -vt 0.625000 0.609375 -vt 0.625000 0.546875 -vt 0.562500 0.609375 -vt 0.562500 0.546875 -vt 0.500000 0.609375 -vt 0.500000 0.546875 -vt 0.437500 0.609375 -vt 0.437500 0.546875 -vt 0.375000 0.609375 -vt 0.375000 0.546875 -vt 0.312500 0.609375 -vt 0.312500 0.546875 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.812500 0.015625 -vt 0.812500 0.265625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.625000 0.015625 -vt 0.625000 0.265625 -vt 0.687500 0.265625 -vt 0.687500 0.015625 -vt 0.500000 0.265625 -vt 0.500000 0.015625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.125000 0.265625 -vt 0.125000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.218363 0.657325 -vt 0.185866 0.820702 -vt 0.153368 0.657325 -vt 0.531836 0.657325 -vt 0.564334 0.820702 -vt 0.596832 0.657325 -vt 0.656879 0.682198 -vt 0.702838 0.728156 -vt 0.727710 0.788204 -vt 0.727710 0.853199 -vt 0.702838 0.913247 -vt 0.656879 0.959205 -vt 0.596831 0.984078 -vt 0.531836 0.984078 -vt 0.471788 0.959205 -vt 0.425830 0.913247 -vt 0.400957 0.853199 -vt 0.400957 0.788204 -vt 0.425830 0.728156 -vt 0.471789 0.682198 -vt 0.093321 0.682198 -vt 0.047362 0.728156 -vt 0.022489 0.788204 -vt 0.022489 0.853199 -vt 0.047362 0.913247 -vt 0.093320 0.959205 -vt 0.153368 0.984078 -vt 0.218363 0.984078 -vt 0.278411 0.959205 -vt 0.324369 0.913247 -vt 0.349242 0.853199 -vt 0.349242 0.788204 -vt 0.324369 0.728156 -vt 0.278411 0.682198 -vt 0.187500 0.515625 -vt 0.250000 0.515625 -vt 0.875000 0.515625 -vt 0.937500 0.515625 -vt 0.750000 0.515625 -vt 0.812500 0.515625 -vt 0.562500 0.515625 -vt 0.625000 0.515625 -vt 0.687500 0.515625 -vt 0.500000 0.515625 -vt 0.437500 0.515625 -vt 0.375000 0.515625 -vt 0.312500 0.515625 -vt 0.125000 0.515625 -vt 0.062500 0.515625 -vt 0.000000 0.515625 -vt 1.000000 0.515625 -s off -f 54/1 41/2 42/3 55/4 -f 31/5 33/6 50/7 -f 29/8 31/5 50/7 -f 27/9 29/8 50/7 -f 25/10 27/9 50/7 -f 23/11 25/10 50/7 -f 21/12 23/11 50/7 -f 19/13 21/12 50/7 -f 17/14 19/13 50/7 -f 15/15 17/14 50/7 -f 13/16 15/15 50/7 -f 11/17 13/16 50/7 -f 9/18 11/17 50/7 -f 7/19 9/18 50/7 -f 5/20 7/19 50/7 -f 35/21 5/20 50/7 -f 6/22 36/23 49/24 -f 8/25 6/22 49/24 -f 10/26 8/25 49/24 -f 12/27 10/26 49/24 -f 14/28 12/27 49/24 -f 16/29 14/28 49/24 -f 18/30 16/29 49/24 -f 20/31 18/30 49/24 -f 22/32 20/31 49/24 -f 24/33 22/32 49/24 -f 26/34 24/33 49/24 -f 28/35 26/34 49/24 -f 30/36 28/35 49/24 -f 32/37 30/36 49/24 -f 34/38 32/37 49/24 -f 36/23 34/38 49/24 -f 33/6 35/21 50/7 -f 8/39 7/40 5/41 6/42 -f 6/42 5/41 35/43 36/44 -f 10/45 9/46 7/40 8/39 -f 12/47 11/48 9/46 10/45 -f 14/49 13/50 11/51 12/52 -f 16/53 15/54 13/50 14/49 -f 18/55 17/56 15/54 16/53 -f 20/57 19/58 17/56 18/55 -f 22/59 21/60 19/58 20/57 -f 24/61 23/62 21/60 22/59 -f 26/63 25/64 23/62 24/61 -f 28/65 27/66 25/64 26/63 -f 30/67 29/68 27/66 28/65 -f 32/69 31/70 29/68 30/67 -f 34/71 33/72 31/70 32/69 -f 36/44 35/43 33/72 34/71 -f 65/73 1/74 37/75 66/76 -f 63/77 3/78 2/79 62/80 -f 61/81 47/82 48/83 60/84 -f 64/85 4/86 3/78 63/77 -f 62/80 2/79 1/74 65/73 -f 60/84 48/83 4/86 64/85 -f 59/87 46/88 47/82 61/81 -f 58/89 45/90 46/88 59/87 -f 57/91 44/92 45/90 58/89 -f 56/93 43/94 44/92 57/91 -f 55/4 42/3 43/94 56/93 -f 53/95 40/96 41/2 54/1 -f 52/97 39/98 40/96 53/95 -f 51/99 38/100 39/98 52/97 -f 66/76 37/75 38/101 51/102 -f 67/58 69/60 70/59 68/57 -f 69/60 71/62 72/61 70/59 -f 71/62 73/64 74/63 72/61 -f 73/64 75/66 76/65 74/63 -f 75/66 77/68 78/67 76/65 -f 77/68 79/70 80/69 78/67 -f 79/70 81/72 82/71 80/69 -f 81/72 83/43 84/44 82/71 -f 83/43 85/41 86/42 84/44 -f 85/41 87/40 88/39 86/42 -f 87/40 89/46 90/45 88/39 -f 89/46 91/48 92/47 90/45 -f 91/51 93/50 94/49 92/52 -f 93/50 95/54 96/53 94/49 -f 97/56 67/58 68/57 98/55 -f 95/54 97/56 98/55 96/53 -f 70/103 116/104 68/105 -f 67/106 115/107 69/108 -f 69/108 115/107 71/109 -f 71/109 115/107 73/110 -f 73/110 115/107 75/111 -f 75/111 115/107 77/112 -f 77/112 115/107 79/113 -f 79/113 115/107 81/114 -f 81/114 115/107 83/115 -f 83/115 115/107 85/116 -f 85/116 115/107 87/117 -f 87/117 115/107 89/118 -f 89/118 115/107 91/119 -f 91/119 115/107 93/120 -f 93/120 115/107 95/121 -f 95/121 115/107 97/122 -f 97/122 115/107 67/106 -f 68/105 116/104 98/123 -f 98/123 116/104 96/124 -f 96/124 116/104 94/125 -f 94/125 116/104 92/126 -f 92/126 116/104 90/127 -f 90/127 116/104 88/128 -f 88/128 116/104 86/129 -f 86/129 116/104 84/130 -f 84/130 116/104 82/131 -f 82/131 116/104 80/132 -f 80/132 116/104 78/133 -f 78/133 116/104 76/134 -f 76/134 116/104 74/135 -f 74/135 116/104 72/136 -f 72/136 116/104 70/103 -f 107/137 157/2 158/3 108/138 -f 147/5 149/6 166/7 -f 145/8 147/5 166/7 -f 143/9 145/8 166/7 -f 141/10 143/9 166/7 -f 139/11 141/10 166/7 -f 137/12 139/11 166/7 -f 135/13 137/12 166/7 -f 133/14 135/13 166/7 -f 131/15 133/14 166/7 -f 129/16 131/15 166/7 -f 127/17 129/16 166/7 -f 125/18 127/17 166/7 -f 123/19 125/18 166/7 -f 121/20 123/19 166/7 -f 151/21 121/20 166/7 -f 122/22 152/23 165/24 -f 124/25 122/22 165/24 -f 126/26 124/25 165/24 -f 128/27 126/26 165/24 -f 130/28 128/27 165/24 -f 132/29 130/28 165/24 -f 134/30 132/29 165/24 -f 136/31 134/30 165/24 -f 138/32 136/31 165/24 -f 140/33 138/32 165/24 -f 142/34 140/33 165/24 -f 144/35 142/34 165/24 -f 146/36 144/35 165/24 -f 148/37 146/36 165/24 -f 150/38 148/37 165/24 -f 152/23 150/38 165/24 -f 149/6 151/21 166/7 -f 124/39 123/40 121/41 122/42 -f 122/42 121/41 151/43 152/44 -f 126/45 125/46 123/40 124/39 -f 128/47 127/48 125/46 126/45 -f 130/49 129/50 127/51 128/52 -f 132/53 131/54 129/50 130/49 -f 134/55 133/56 131/54 132/53 -f 136/57 135/58 133/56 134/55 -f 138/59 137/60 135/58 136/57 -f 140/61 139/62 137/60 138/59 -f 142/63 141/64 139/62 140/61 -f 144/65 143/66 141/64 142/63 -f 146/67 145/68 143/66 144/65 -f 148/69 147/70 145/68 146/67 -f 150/71 149/72 147/70 148/69 -f 152/44 151/43 149/72 150/71 -f 102/139 117/74 153/75 103/140 -f 100/141 119/78 118/79 101/142 -f 113/143 163/82 164/83 114/144 -f 99/145 120/86 119/78 100/141 -f 101/142 118/79 117/74 102/139 -f 114/144 164/83 120/86 99/145 -f 112/146 162/88 163/82 113/143 -f 111/147 161/90 162/88 112/146 -f 110/148 160/92 161/90 111/147 -f 109/149 159/94 160/92 110/148 -f 108/138 158/3 159/94 109/149 -f 106/150 156/96 157/2 107/137 -f 105/151 155/98 156/96 106/150 -f 104/152 154/100 155/98 105/151 -f 103/140 153/75 154/101 104/153 -f 220/1 207/2 208/3 221/4 -f 197/5 199/6 216/7 -f 195/8 197/5 216/7 -f 193/9 195/8 216/7 -f 191/10 193/9 216/7 -f 189/11 191/10 216/7 -f 187/12 189/11 216/7 -f 185/13 187/12 216/7 -f 183/14 185/13 216/7 -f 181/15 183/14 216/7 -f 179/16 181/15 216/7 -f 177/17 179/16 216/7 -f 175/18 177/17 216/7 -f 173/19 175/18 216/7 -f 171/20 173/19 216/7 -f 201/21 171/20 216/7 -f 172/22 202/23 215/24 -f 174/25 172/22 215/24 -f 176/26 174/25 215/24 -f 178/27 176/26 215/24 -f 180/28 178/27 215/24 -f 182/29 180/28 215/24 -f 184/30 182/29 215/24 -f 186/31 184/30 215/24 -f 188/32 186/31 215/24 -f 190/33 188/32 215/24 -f 192/34 190/33 215/24 -f 194/35 192/34 215/24 -f 196/36 194/35 215/24 -f 198/37 196/36 215/24 -f 200/38 198/37 215/24 -f 202/23 200/38 215/24 -f 199/6 201/21 216/7 -f 174/39 173/40 171/41 172/42 -f 172/42 171/41 201/43 202/44 -f 176/45 175/46 173/40 174/39 -f 178/47 177/48 175/46 176/45 -f 180/49 179/50 177/51 178/52 -f 182/53 181/54 179/50 180/49 -f 184/55 183/56 181/54 182/53 -f 186/57 185/58 183/56 184/55 -f 188/59 187/60 185/58 186/57 -f 190/61 189/62 187/60 188/59 -f 192/63 191/64 189/62 190/61 -f 194/65 193/66 191/64 192/63 -f 196/67 195/68 193/66 194/65 -f 198/69 197/70 195/68 196/67 -f 200/71 199/72 197/70 198/69 -f 202/44 201/43 199/72 200/71 -f 231/73 167/74 203/75 232/76 -f 229/77 169/78 168/79 228/80 -f 227/81 213/82 214/83 226/84 -f 230/85 170/86 169/78 229/77 -f 228/80 168/79 167/74 231/73 -f 226/84 214/83 170/86 230/85 -f 225/87 212/88 213/82 227/81 -f 224/89 211/90 212/88 225/87 -f 223/91 210/92 211/90 224/89 -f 222/93 209/94 210/92 223/91 -f 221/4 208/3 209/94 222/93 -f 219/95 206/96 207/2 220/1 -f 218/97 205/98 206/96 219/95 -f 217/99 204/100 205/98 218/97 -f 232/76 203/75 204/101 217/102 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pipe_8.obj b/mods/ITEMS/pipeworks/models/pipeworks_pipe_8.obj deleted file mode 100644 index 5dc58f9..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pipe_8.obj +++ /dev/null @@ -1,631 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-4way.blend' -# www.blender.org -mtllib pipeworks_pipe_8.mtl -o Cube.000 -v 0.069446 -0.468750 -0.103934 -v 0.103933 -0.468750 -0.069446 -v 0.122598 -0.468750 -0.024386 -v 0.122598 -0.468750 0.024386 -v 0.129917 -0.500000 0.086808 -v 0.129917 -0.468750 0.086808 -v 0.086808 -0.500000 0.129917 -v 0.086808 -0.468750 0.129917 -v 0.030483 -0.500000 0.153247 -v 0.030483 -0.468750 0.153248 -v -0.030483 -0.500000 0.153247 -v -0.030483 -0.468750 0.153248 -v -0.086808 -0.500000 0.129917 -v -0.086808 -0.468750 0.129917 -v -0.129918 -0.500000 0.086808 -v -0.129917 -0.468750 0.086808 -v -0.153248 -0.500000 0.030483 -v -0.153248 -0.468750 0.030483 -v -0.153248 -0.500000 -0.030483 -v -0.153248 -0.468750 -0.030483 -v -0.129918 -0.500000 -0.086808 -v -0.129917 -0.468750 -0.086808 -v -0.086808 -0.500000 -0.129917 -v -0.086808 -0.468750 -0.129917 -v -0.030483 -0.500000 -0.153248 -v -0.030483 -0.468750 -0.153248 -v 0.030482 -0.500000 -0.153248 -v 0.030482 -0.468750 -0.153248 -v 0.086807 -0.500000 -0.129917 -v 0.086807 -0.468750 -0.129917 -v 0.129917 -0.500000 -0.086808 -v 0.129917 -0.468750 -0.086808 -v 0.153247 -0.500000 -0.030483 -v 0.153247 -0.468750 -0.030483 -v 0.153247 -0.500000 0.030483 -v 0.153247 -0.468750 0.030483 -v 0.024386 -0.468750 -0.122598 -v -0.024387 -0.468750 -0.122598 -v -0.069447 -0.468750 -0.103934 -v -0.103934 -0.468750 -0.069446 -v -0.122599 -0.468750 -0.024386 -v -0.122599 -0.468750 0.024386 -v -0.103934 -0.468750 0.069446 -v -0.069447 -0.468750 0.103934 -v -0.024387 -0.468750 0.122598 -v 0.024386 -0.468750 0.122598 -v 0.069446 -0.468750 0.103933 -v 0.103933 -0.468750 0.069446 -v -0.000000 -0.468750 -0.000000 -v -0.000000 -0.500000 -0.000000 -v -0.024386 -0.024391 -0.122598 -v -0.069446 -0.024391 -0.103934 -v -0.103934 -0.024391 -0.069446 -v -0.122598 -0.024391 -0.024386 -v -0.122598 -0.024391 0.024386 -v -0.103934 -0.024391 0.069446 -v -0.069446 -0.024391 0.103934 -v -0.024386 -0.024391 0.122598 -v 0.024386 -0.024391 0.122598 -v 0.103934 -0.024391 0.069446 -v 0.069446 -0.024391 0.103934 -v 0.103934 -0.024391 -0.069446 -v 0.122598 -0.024391 -0.024386 -v 0.122598 -0.024391 0.024386 -v 0.069446 -0.024391 -0.103934 -v 0.024386 -0.024391 -0.122598 -v 0.153248 0.468750 0.030483 -v 0.153248 0.500000 0.030483 -v 0.153248 0.468750 -0.030483 -v 0.153248 0.500000 -0.030483 -v 0.129917 0.468750 -0.086808 -v 0.129917 0.500000 -0.086808 -v 0.086808 0.468750 -0.129917 -v 0.086808 0.500000 -0.129917 -v 0.030483 0.468750 -0.153248 -v 0.030483 0.500000 -0.153248 -v -0.030483 0.468750 -0.153248 -v -0.030483 0.500000 -0.153248 -v -0.086808 0.468750 -0.129917 -v -0.086808 0.500000 -0.129917 -v -0.129917 0.468750 -0.086808 -v -0.129917 0.500000 -0.086808 -v -0.153247 0.468750 -0.030483 -v -0.153247 0.500000 -0.030483 -v -0.153247 0.468750 0.030483 -v -0.153247 0.500000 0.030483 -v -0.129917 0.468750 0.086808 -v -0.129917 0.500000 0.086808 -v -0.086808 0.468750 0.129917 -v -0.086808 0.500000 0.129917 -v -0.030483 0.468750 0.153248 -v -0.030483 0.500000 0.153248 -v 0.030483 0.468750 0.153248 -v 0.030483 0.500000 0.153248 -v 0.086808 0.468750 0.129917 -v 0.086808 0.500000 0.129917 -v 0.129917 0.468750 0.086808 -v 0.129918 0.500000 0.086808 -v 0.122598 0.468750 0.024386 -v 0.122598 0.468750 -0.024386 -v 0.103934 0.468750 -0.069446 -v 0.069447 0.468750 -0.103934 -v 0.024387 0.468750 -0.122598 -v -0.024386 0.468750 -0.122598 -v -0.069446 0.468750 -0.103934 -v -0.103933 0.468750 -0.069446 -v -0.122598 0.468750 -0.024386 -v -0.122598 0.468750 0.024386 -v -0.103933 0.468750 0.069446 -v -0.069446 0.468750 0.103934 -v -0.024386 0.468750 0.122598 -v 0.024387 0.468750 0.122598 -v 0.069447 0.468750 0.103934 -v 0.103934 0.468750 0.069446 -v 0.000000 0.468750 -0.000000 -v 0.000000 0.500000 0.000000 -v -0.024386 0.024390 -0.122598 -v -0.069446 0.024390 -0.103934 -v -0.103934 0.024390 -0.069446 -v -0.122598 0.024390 -0.024386 -v -0.122598 0.024390 0.024386 -v -0.103934 0.024390 0.069446 -v -0.069446 0.024390 0.103934 -v -0.024386 0.024389 0.122598 -v 0.024386 0.024389 0.122598 -v 0.103934 0.024390 0.069446 -v 0.069446 0.024390 0.103934 -v 0.103934 0.024390 -0.069446 -v 0.122598 0.024390 -0.024386 -v 0.122598 0.024390 0.024386 -v 0.069446 0.024390 -0.103934 -v 0.024386 0.024390 -0.122598 -v 0.468750 -0.153248 0.030483 -v 0.500000 -0.153248 0.030483 -v 0.468750 -0.153248 -0.030483 -v 0.500000 -0.153248 -0.030483 -v 0.468750 -0.129917 -0.086808 -v 0.500000 -0.129917 -0.086808 -v 0.468750 -0.086808 -0.129917 -v 0.500000 -0.086808 -0.129917 -v 0.468750 -0.030483 -0.153248 -v 0.500000 -0.030483 -0.153248 -v 0.468750 0.030483 -0.153248 -v 0.500000 0.030483 -0.153248 -v 0.468750 0.086808 -0.129917 -v 0.500000 0.086808 -0.129917 -v 0.468750 0.129917 -0.086808 -v 0.500000 0.129917 -0.086808 -v 0.468750 0.153248 -0.030483 -v 0.500000 0.153247 -0.030483 -v 0.468750 0.153248 0.030483 -v 0.500000 0.153248 0.030483 -v 0.468750 0.129917 0.086808 -v 0.500000 0.129917 0.086808 -v 0.468750 0.086808 0.129917 -v 0.500000 0.086808 0.129917 -v 0.468750 0.030483 0.153248 -v 0.500000 0.030483 0.153248 -v 0.468750 -0.030483 0.153248 -v 0.500000 -0.030483 0.153248 -v 0.468750 -0.086808 0.129917 -v 0.500000 -0.086808 0.129917 -v 0.468750 -0.129917 0.086808 -v 0.500000 -0.129917 0.086808 -v 0.468750 -0.122598 0.024386 -v 0.468750 -0.122598 -0.024386 -v 0.468750 -0.103934 -0.069446 -v 0.468750 -0.069446 -0.103934 -v 0.468750 -0.024386 -0.122598 -v 0.468750 0.024386 -0.122598 -v 0.468750 0.069446 -0.103934 -v 0.468750 0.103934 -0.069446 -v 0.468750 0.122598 -0.024386 -v 0.468750 0.122598 0.024386 -v 0.468750 0.103934 0.069446 -v 0.468750 0.069446 0.103934 -v 0.468750 0.024386 0.122598 -v 0.468750 -0.024387 0.122598 -v 0.468750 -0.069447 0.103934 -v 0.468750 -0.103934 0.069446 -v 0.468750 -0.000000 -0.000000 -v 0.500000 -0.000000 0.000000 -v -0.468750 -0.069446 -0.103934 -v -0.468750 -0.103933 -0.069446 -v -0.468750 -0.122598 -0.024387 -v -0.468750 -0.122598 0.024386 -v -0.500000 -0.129917 0.086808 -v -0.468750 -0.129917 0.086808 -v -0.500000 -0.086808 0.129917 -v -0.468750 -0.086808 0.129917 -v -0.500000 -0.030483 0.153247 -v -0.468750 -0.030483 0.153248 -v -0.500000 0.030483 0.153247 -v -0.468750 0.030483 0.153248 -v -0.500000 0.086808 0.129917 -v -0.468750 0.086808 0.129917 -v -0.500000 0.129917 0.086808 -v -0.468750 0.129917 0.086808 -v -0.500000 0.153248 0.030483 -v -0.468750 0.153248 0.030483 -v -0.500000 0.153248 -0.030483 -v -0.468750 0.153248 -0.030483 -v -0.500000 0.129917 -0.086808 -v -0.468750 0.129917 -0.086808 -v -0.500000 0.086808 -0.129917 -v -0.468750 0.086808 -0.129917 -v -0.500000 0.030483 -0.153248 -v -0.468750 0.030483 -0.153248 -v -0.500000 -0.030483 -0.153248 -v -0.468750 -0.030483 -0.153248 -v -0.500000 -0.086808 -0.129917 -v -0.468750 -0.086808 -0.129917 -v -0.500000 -0.129917 -0.086808 -v -0.468750 -0.129917 -0.086808 -v -0.500000 -0.153247 -0.030483 -v -0.468750 -0.153247 -0.030483 -v -0.500000 -0.153247 0.030483 -v -0.468750 -0.153247 0.030483 -v -0.468750 -0.024386 -0.122598 -v -0.468750 0.024387 -0.122598 -v -0.468750 0.069447 -0.103934 -v -0.468750 0.103934 -0.069446 -v -0.468750 0.122598 -0.024386 -v -0.468750 0.122598 0.024386 -v -0.468750 0.103934 0.069446 -v -0.468750 0.069447 0.103934 -v -0.468750 0.024387 0.122598 -v -0.468750 -0.024386 0.122598 -v -0.468750 -0.069446 0.103933 -v -0.468750 -0.103933 0.069446 -v -0.468750 0.000000 -0.000000 -v -0.500000 0.000000 -0.000000 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.250000 0.015625 -vt 0.250000 0.265625 -vt 0.093322 0.682190 -vt 0.153370 0.657318 -vt 0.185867 0.820694 -vt 0.047364 0.728149 -vt 0.022491 0.788196 -vt 0.022491 0.853192 -vt 0.047364 0.913239 -vt 0.093322 0.959198 -vt 0.153370 0.984070 -vt 0.218365 0.984070 -vt 0.278413 0.959198 -vt 0.324371 0.913239 -vt 0.349244 0.853192 -vt 0.349244 0.788196 -vt 0.324371 0.728149 -vt 0.278413 0.682190 -vt 0.218365 0.657318 -vt 0.471785 0.682190 -vt 0.531832 0.657318 -vt 0.564330 0.820694 -vt 0.425826 0.728149 -vt 0.400953 0.788196 -vt 0.400953 0.853192 -vt 0.425826 0.913239 -vt 0.471785 0.959198 -vt 0.531832 0.984070 -vt 0.596827 0.984070 -vt 0.656875 0.959198 -vt 0.702834 0.913239 -vt 0.727706 0.853192 -vt 0.727706 0.788196 -vt 0.702834 0.728149 -vt 0.656875 0.682190 -vt 0.596827 0.657318 -vt 0.125000 0.609375 -vt 0.125000 0.546875 -vt 0.187500 0.546875 -vt 0.187500 0.609375 -vt 0.250000 0.546875 -vt 0.250000 0.609375 -vt 0.062500 0.609375 -vt 0.062500 0.546875 -vt 0.000000 0.609375 -vt 0.000000 0.546875 -vt 0.937500 0.609375 -vt 0.937500 0.546875 -vt 1.000000 0.546875 -vt 1.000000 0.609375 -vt 0.875000 0.609375 -vt 0.875000 0.546875 -vt 0.812500 0.609375 -vt 0.812500 0.546875 -vt 0.750000 0.609375 -vt 0.750000 0.546875 -vt 0.687500 0.609375 -vt 0.687500 0.546875 -vt 0.625000 0.609375 -vt 0.625000 0.546875 -vt 0.562500 0.609375 -vt 0.562500 0.546875 -vt 0.500000 0.609375 -vt 0.500000 0.546875 -vt 0.437500 0.609375 -vt 0.437500 0.546875 -vt 0.375000 0.609375 -vt 0.375000 0.546875 -vt 0.312500 0.609375 -vt 0.312500 0.546875 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.812500 0.015625 -vt 0.812500 0.265625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.625000 0.015625 -vt 0.625000 0.265625 -vt 0.687500 0.265625 -vt 0.687500 0.015625 -vt 0.500000 0.265625 -vt 0.500000 0.015625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.125000 0.265625 -vt 0.125000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.218363 0.657325 -vt 0.185866 0.820702 -vt 0.153368 0.657325 -vt 0.531836 0.657325 -vt 0.564334 0.820702 -vt 0.596832 0.657325 -vt 0.656879 0.682198 -vt 0.702838 0.728156 -vt 0.727710 0.788204 -vt 0.727710 0.853199 -vt 0.702838 0.913247 -vt 0.656879 0.959205 -vt 0.596831 0.984078 -vt 0.531836 0.984078 -vt 0.471788 0.959205 -vt 0.425830 0.913247 -vt 0.400957 0.853199 -vt 0.400957 0.788204 -vt 0.425830 0.728156 -vt 0.471789 0.682198 -vt 0.093321 0.682198 -vt 0.047362 0.728156 -vt 0.022489 0.788204 -vt 0.022489 0.853199 -vt 0.047362 0.913247 -vt 0.093320 0.959205 -vt 0.153368 0.984078 -vt 0.218363 0.984078 -vt 0.278411 0.959205 -vt 0.324369 0.913247 -vt 0.349242 0.853199 -vt 0.349242 0.788204 -vt 0.324369 0.728156 -vt 0.278411 0.682198 -vt 0.187500 0.515625 -vt 0.250000 0.515625 -vt 0.875000 0.515625 -vt 0.937500 0.515625 -vt 0.750000 0.515625 -vt 0.812500 0.515625 -vt 0.562500 0.515625 -vt 0.625000 0.515625 -vt 0.687500 0.515625 -vt 0.500000 0.515625 -vt 0.437500 0.515625 -vt 0.375000 0.515625 -vt 0.312500 0.515625 -vt 0.125000 0.515625 -vt 0.062500 0.515625 -vt 0.000000 0.515625 -vt 1.000000 0.515625 -usemtl None -s off -f 54/1 41/2 42/3 55/4 -f 31/5 33/6 50/7 -f 29/8 31/5 50/7 -f 27/9 29/8 50/7 -f 25/10 27/9 50/7 -f 23/11 25/10 50/7 -f 21/12 23/11 50/7 -f 19/13 21/12 50/7 -f 17/14 19/13 50/7 -f 15/15 17/14 50/7 -f 13/16 15/15 50/7 -f 11/17 13/16 50/7 -f 9/18 11/17 50/7 -f 7/19 9/18 50/7 -f 5/20 7/19 50/7 -f 35/21 5/20 50/7 -f 6/22 36/23 49/24 -f 8/25 6/22 49/24 -f 10/26 8/25 49/24 -f 12/27 10/26 49/24 -f 14/28 12/27 49/24 -f 16/29 14/28 49/24 -f 18/30 16/29 49/24 -f 20/31 18/30 49/24 -f 22/32 20/31 49/24 -f 24/33 22/32 49/24 -f 26/34 24/33 49/24 -f 28/35 26/34 49/24 -f 30/36 28/35 49/24 -f 32/37 30/36 49/24 -f 34/38 32/37 49/24 -f 36/23 34/38 49/24 -f 33/6 35/21 50/7 -f 8/39 7/40 5/41 6/42 -f 6/42 5/41 35/43 36/44 -f 10/45 9/46 7/40 8/39 -f 12/47 11/48 9/46 10/45 -f 14/49 13/50 11/51 12/52 -f 16/53 15/54 13/50 14/49 -f 18/55 17/56 15/54 16/53 -f 20/57 19/58 17/56 18/55 -f 22/59 21/60 19/58 20/57 -f 24/61 23/62 21/60 22/59 -f 26/63 25/64 23/62 24/61 -f 28/65 27/66 25/64 26/63 -f 30/67 29/68 27/66 28/65 -f 32/69 31/70 29/68 30/67 -f 34/71 33/72 31/70 32/69 -f 36/44 35/43 33/72 34/71 -f 65/73 1/74 37/75 66/76 -f 63/77 3/78 2/79 62/80 -f 61/81 47/82 48/83 60/84 -f 64/85 4/86 3/78 63/77 -f 62/80 2/79 1/74 65/73 -f 60/84 48/83 4/86 64/85 -f 59/87 46/88 47/82 61/81 -f 58/89 45/90 46/88 59/87 -f 57/91 44/92 45/90 58/89 -f 56/93 43/94 44/92 57/91 -f 55/4 42/3 43/94 56/93 -f 53/95 40/96 41/2 54/1 -f 52/97 39/98 40/96 53/95 -f 51/99 38/100 39/98 52/97 -f 66/76 37/75 38/101 51/102 -f 67/58 69/60 70/59 68/57 -f 69/60 71/62 72/61 70/59 -f 71/62 73/64 74/63 72/61 -f 73/64 75/66 76/65 74/63 -f 75/66 77/68 78/67 76/65 -f 77/68 79/70 80/69 78/67 -f 79/70 81/72 82/71 80/69 -f 81/72 83/43 84/44 82/71 -f 83/43 85/41 86/42 84/44 -f 85/41 87/40 88/39 86/42 -f 87/40 89/46 90/45 88/39 -f 89/46 91/48 92/47 90/45 -f 91/51 93/50 94/49 92/52 -f 93/50 95/54 96/53 94/49 -f 97/56 67/58 68/57 98/55 -f 95/54 97/56 98/55 96/53 -f 70/103 116/104 68/105 -f 67/106 115/107 69/108 -f 69/108 115/107 71/109 -f 71/109 115/107 73/110 -f 73/110 115/107 75/111 -f 75/111 115/107 77/112 -f 77/112 115/107 79/113 -f 79/113 115/107 81/114 -f 81/114 115/107 83/115 -f 83/115 115/107 85/116 -f 85/116 115/107 87/117 -f 87/117 115/107 89/118 -f 89/118 115/107 91/119 -f 91/119 115/107 93/120 -f 93/120 115/107 95/121 -f 95/121 115/107 97/122 -f 97/122 115/107 67/106 -f 68/105 116/104 98/123 -f 98/123 116/104 96/124 -f 96/124 116/104 94/125 -f 94/125 116/104 92/126 -f 92/126 116/104 90/127 -f 90/127 116/104 88/128 -f 88/128 116/104 86/129 -f 86/129 116/104 84/130 -f 84/130 116/104 82/131 -f 82/131 116/104 80/132 -f 80/132 116/104 78/133 -f 78/133 116/104 76/134 -f 76/134 116/104 74/135 -f 74/135 116/104 72/136 -f 72/136 116/104 70/103 -f 107/137 120/1 121/4 108/138 -f 102/139 131/73 132/76 103/140 -f 100/141 129/77 128/80 101/142 -f 113/143 127/81 126/84 114/144 -f 99/145 130/85 129/77 100/141 -f 101/142 128/80 131/73 102/139 -f 114/144 126/84 130/85 99/145 -f 112/146 125/87 127/81 113/143 -f 111/147 124/89 125/87 112/146 -f 110/148 123/91 124/89 111/147 -f 109/149 122/93 123/91 110/148 -f 108/138 121/4 122/93 109/149 -f 106/150 119/95 120/1 107/137 -f 105/151 118/97 119/95 106/150 -f 104/152 117/99 118/97 105/151 -f 103/140 132/76 117/102 104/153 -f 133/58 135/60 136/59 134/57 -f 135/60 137/62 138/61 136/59 -f 137/62 139/64 140/63 138/61 -f 139/64 141/66 142/65 140/63 -f 141/66 143/68 144/67 142/65 -f 143/68 145/70 146/69 144/67 -f 145/70 147/72 148/71 146/69 -f 147/72 149/43 150/44 148/71 -f 149/43 151/41 152/42 150/44 -f 151/41 153/40 154/39 152/42 -f 153/40 155/46 156/45 154/39 -f 155/46 157/48 158/47 156/45 -f 157/51 159/50 160/49 158/52 -f 159/50 161/54 162/53 160/49 -f 163/56 133/58 134/57 164/55 -f 161/54 163/56 164/55 162/53 -f 136/103 182/104 134/105 -f 133/106 181/107 135/108 -f 135/108 181/107 137/109 -f 137/109 181/107 139/110 -f 139/110 181/107 141/111 -f 141/111 181/107 143/112 -f 143/112 181/107 145/113 -f 145/113 181/107 147/114 -f 147/114 181/107 149/115 -f 149/115 181/107 151/116 -f 151/116 181/107 153/117 -f 153/117 181/107 155/118 -f 155/118 181/107 157/119 -f 157/119 181/107 159/120 -f 159/120 181/107 161/121 -f 161/121 181/107 163/122 -f 163/122 181/107 133/106 -f 134/105 182/104 164/123 -f 164/123 182/104 162/124 -f 162/124 182/104 160/125 -f 160/125 182/104 158/126 -f 158/126 182/104 156/127 -f 156/127 182/104 154/128 -f 154/128 182/104 152/129 -f 152/129 182/104 150/130 -f 150/130 182/104 148/131 -f 148/131 182/104 146/132 -f 146/132 182/104 144/133 -f 144/133 182/104 142/134 -f 142/134 182/104 140/135 -f 140/135 182/104 138/136 -f 138/136 182/104 136/103 -f 173/137 223/2 224/3 174/138 -f 213/5 215/6 232/7 -f 211/8 213/5 232/7 -f 209/9 211/8 232/7 -f 207/10 209/9 232/7 -f 205/11 207/10 232/7 -f 203/12 205/11 232/7 -f 201/13 203/12 232/7 -f 199/14 201/13 232/7 -f 197/15 199/14 232/7 -f 195/16 197/15 232/7 -f 193/17 195/16 232/7 -f 191/18 193/17 232/7 -f 189/19 191/18 232/7 -f 187/20 189/19 232/7 -f 217/21 187/20 232/7 -f 188/22 218/23 231/24 -f 190/25 188/22 231/24 -f 192/26 190/25 231/24 -f 194/27 192/26 231/24 -f 196/28 194/27 231/24 -f 198/29 196/28 231/24 -f 200/30 198/29 231/24 -f 202/31 200/30 231/24 -f 204/32 202/31 231/24 -f 206/33 204/32 231/24 -f 208/34 206/33 231/24 -f 210/35 208/34 231/24 -f 212/36 210/35 231/24 -f 214/37 212/36 231/24 -f 216/38 214/37 231/24 -f 218/23 216/38 231/24 -f 215/6 217/21 232/7 -f 190/39 189/40 187/41 188/42 -f 188/42 187/41 217/43 218/44 -f 192/45 191/46 189/40 190/39 -f 194/47 193/48 191/46 192/45 -f 196/49 195/50 193/51 194/52 -f 198/53 197/54 195/50 196/49 -f 200/55 199/56 197/54 198/53 -f 202/57 201/58 199/56 200/55 -f 204/59 203/60 201/58 202/57 -f 206/61 205/62 203/60 204/59 -f 208/63 207/64 205/62 206/61 -f 210/65 209/66 207/64 208/63 -f 212/67 211/68 209/66 210/65 -f 214/69 213/70 211/68 212/67 -f 216/71 215/72 213/70 214/69 -f 218/44 217/43 215/72 216/71 -f 168/139 183/74 219/75 169/140 -f 166/141 185/78 184/79 167/142 -f 179/143 229/82 230/83 180/144 -f 165/145 186/86 185/78 166/141 -f 167/142 184/79 183/74 168/139 -f 180/144 230/83 186/86 165/145 -f 178/146 228/88 229/82 179/143 -f 177/147 227/90 228/88 178/146 -f 176/148 226/92 227/90 177/147 -f 175/149 225/94 226/92 176/148 -f 174/138 224/3 225/94 175/149 -f 172/150 222/96 223/2 173/137 -f 171/151 221/98 222/96 172/150 -f 170/152 220/100 221/98 171/151 -f 169/140 219/75 220/101 170/153 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pipe_9.obj b/mods/ITEMS/pipeworks/models/pipeworks_pipe_9.obj deleted file mode 100644 index 8c6e03b..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pipe_9.obj +++ /dev/null @@ -1,759 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-5way.blend' -# www.blender.org -o Cube.000 -v -0.069446 -0.468750 0.103934 -v -0.103933 -0.468750 0.069446 -v -0.122598 -0.468750 0.024386 -v -0.122598 -0.468750 -0.024386 -v -0.129917 -0.500000 -0.086808 -v -0.129917 -0.468750 -0.086808 -v -0.086808 -0.500000 -0.129917 -v -0.086808 -0.468750 -0.129917 -v -0.030483 -0.500000 -0.153248 -v -0.030483 -0.468750 -0.153248 -v 0.030483 -0.500000 -0.153247 -v 0.030483 -0.468750 -0.153247 -v 0.086808 -0.500000 -0.129917 -v 0.086808 -0.468750 -0.129917 -v 0.129917 -0.500000 -0.086808 -v 0.129917 -0.468750 -0.086808 -v 0.153248 -0.500000 -0.030483 -v 0.153248 -0.468750 -0.030483 -v 0.153248 -0.500000 0.030483 -v 0.153248 -0.468750 0.030483 -v 0.129917 -0.500000 0.086808 -v 0.129917 -0.468750 0.086808 -v 0.086808 -0.500000 0.129917 -v 0.086808 -0.468750 0.129917 -v 0.030483 -0.500000 0.153248 -v 0.030483 -0.468750 0.153248 -v -0.030483 -0.500000 0.153248 -v -0.030483 -0.468750 0.153248 -v -0.086808 -0.500000 0.129917 -v -0.086808 -0.468750 0.129917 -v -0.129917 -0.500000 0.086808 -v -0.129917 -0.468750 0.086808 -v -0.153247 -0.500000 0.030483 -v -0.153248 -0.468750 0.030483 -v -0.153247 -0.500000 -0.030483 -v -0.153248 -0.468750 -0.030483 -v -0.024386 -0.468750 0.122598 -v 0.024386 -0.468750 0.122598 -v 0.069446 -0.468750 0.103934 -v 0.103934 -0.468750 0.069447 -v 0.122598 -0.468750 0.024387 -v 0.122598 -0.468750 -0.024386 -v 0.103934 -0.468750 -0.069446 -v 0.069447 -0.468750 -0.103933 -v 0.024386 -0.468750 -0.122598 -v -0.024386 -0.468750 -0.122598 -v -0.069446 -0.468750 -0.103933 -v -0.103934 -0.468750 -0.069446 -v 0.000000 -0.468750 0.000000 -v 0.000000 -0.500000 0.000000 -v 0.024386 -0.024391 0.122598 -v 0.069446 -0.024391 0.103934 -v 0.103934 -0.024391 0.069446 -v 0.122598 -0.024391 0.024386 -v 0.122598 -0.024391 -0.024386 -v 0.103934 -0.024391 -0.069446 -v 0.069446 -0.024391 -0.103934 -v 0.024386 -0.024391 -0.122598 -v -0.024386 -0.024391 -0.122598 -v -0.103934 -0.024391 -0.069446 -v -0.069446 -0.024391 -0.103934 -v -0.103934 -0.024391 0.069446 -v -0.122598 -0.024391 0.024386 -v -0.122598 -0.024391 -0.024386 -v -0.069446 -0.024391 0.103934 -v -0.024386 -0.024391 0.122598 -v -0.153248 0.468750 -0.030483 -v -0.153248 0.500000 -0.030483 -v -0.153248 0.468750 0.030483 -v -0.153248 0.500000 0.030483 -v -0.129917 0.468750 0.086808 -v -0.129917 0.500000 0.086808 -v -0.086808 0.468750 0.129917 -v -0.086808 0.500000 0.129917 -v -0.030483 0.468750 0.153248 -v -0.030483 0.500000 0.153248 -v 0.030483 0.468750 0.153248 -v 0.030483 0.500000 0.153248 -v 0.086808 0.468750 0.129917 -v 0.086808 0.500000 0.129917 -v 0.129917 0.468750 0.086808 -v 0.129917 0.500000 0.086808 -v 0.153248 0.468750 0.030483 -v 0.153248 0.500000 0.030483 -v 0.153248 0.468750 -0.030483 -v 0.153248 0.500000 -0.030483 -v 0.129917 0.468750 -0.086808 -v 0.129917 0.500000 -0.086808 -v 0.086808 0.468750 -0.129917 -v 0.086808 0.500000 -0.129917 -v 0.030483 0.468750 -0.153248 -v 0.030483 0.500000 -0.153248 -v -0.030483 0.468750 -0.153248 -v -0.030483 0.500000 -0.153248 -v -0.086808 0.468750 -0.129917 -v -0.086808 0.500000 -0.129917 -v -0.129917 0.468750 -0.086808 -v -0.129917 0.500000 -0.086808 -v -0.122598 0.468750 -0.024386 -v -0.122598 0.468750 0.024386 -v -0.103934 0.468750 0.069446 -v -0.069446 0.468750 0.103934 -v -0.024386 0.468750 0.122598 -v 0.024386 0.468750 0.122598 -v 0.069446 0.468750 0.103934 -v 0.103934 0.468750 0.069446 -v 0.122598 0.468750 0.024386 -v 0.122598 0.468750 -0.024386 -v 0.103934 0.468750 -0.069446 -v 0.069446 0.468750 -0.103934 -v 0.024386 0.468750 -0.122598 -v -0.024386 0.468750 -0.122598 -v -0.069446 0.468750 -0.103934 -v -0.103934 0.468750 -0.069446 -v -0.000000 0.468750 0.000000 -v -0.000000 0.500000 -0.000000 -v 0.024386 0.024390 0.122598 -v 0.069446 0.024390 0.103934 -v 0.103934 0.024390 0.069446 -v 0.122598 0.024390 0.024386 -v 0.122598 0.024390 -0.024386 -v 0.103934 0.024390 -0.069446 -v 0.069446 0.024390 -0.103934 -v 0.024386 0.024389 -0.122598 -v -0.024386 0.024389 -0.122598 -v -0.103934 0.024390 -0.069446 -v -0.069446 0.024390 -0.103934 -v -0.103934 0.024390 0.069446 -v -0.122598 0.024390 0.024386 -v -0.122598 0.024390 -0.024386 -v -0.069446 0.024390 0.103934 -v -0.024386 0.024390 0.122598 -v -0.468750 -0.153248 -0.030483 -v -0.500000 -0.153248 -0.030483 -v -0.468750 -0.153248 0.030483 -v -0.500000 -0.153248 0.030483 -v -0.468750 -0.129917 0.086808 -v -0.500000 -0.129917 0.086808 -v -0.468750 -0.086808 0.129917 -v -0.500000 -0.086808 0.129917 -v -0.468750 -0.030483 0.153248 -v -0.500000 -0.030483 0.153248 -v -0.468750 0.030483 0.153248 -v -0.500000 0.030483 0.153248 -v -0.468750 0.086808 0.129917 -v -0.500000 0.086808 0.129917 -v -0.468750 0.129917 0.086808 -v -0.500000 0.129917 0.086808 -v -0.468750 0.153248 0.030483 -v -0.500000 0.153248 0.030483 -v -0.468750 0.153248 -0.030483 -v -0.500000 0.153248 -0.030483 -v -0.468750 0.129917 -0.086808 -v -0.500000 0.129917 -0.086808 -v -0.468750 0.086808 -0.129917 -v -0.500000 0.086808 -0.129917 -v -0.468750 0.030483 -0.153248 -v -0.500000 0.030483 -0.153248 -v -0.468750 -0.030483 -0.153248 -v -0.500000 -0.030483 -0.153248 -v -0.468750 -0.086808 -0.129917 -v -0.500000 -0.086808 -0.129917 -v -0.468750 -0.129917 -0.086808 -v -0.500000 -0.129917 -0.086808 -v -0.468750 -0.122598 -0.024386 -v -0.468750 -0.122598 0.024386 -v -0.468750 -0.103934 0.069446 -v -0.468750 -0.069446 0.103934 -v -0.468750 -0.024386 0.122598 -v -0.468750 0.024386 0.122598 -v -0.468750 0.069446 0.103934 -v -0.468750 0.103934 0.069446 -v -0.468750 0.122598 0.024386 -v -0.468750 0.122598 -0.024386 -v -0.468750 0.103934 -0.069446 -v -0.468750 0.069446 -0.103934 -v -0.468750 0.024386 -0.122598 -v -0.468750 -0.024386 -0.122598 -v -0.468750 -0.069446 -0.103934 -v -0.468750 -0.103934 -0.069446 -v -0.468750 0.000000 -0.000000 -v -0.500000 -0.000000 -0.000000 -v 0.468750 -0.069446 0.103934 -v 0.468750 -0.103934 0.069447 -v 0.468750 -0.122598 0.024387 -v 0.468750 -0.122598 -0.024386 -v 0.500000 -0.129917 -0.086807 -v 0.468750 -0.129917 -0.086807 -v 0.500000 -0.086808 -0.129917 -v 0.468750 -0.086808 -0.129917 -v 0.500000 -0.030483 -0.153247 -v 0.468750 -0.030483 -0.153247 -v 0.500000 0.030483 -0.153247 -v 0.468750 0.030483 -0.153247 -v 0.500000 0.086808 -0.129917 -v 0.468750 0.086808 -0.129917 -v 0.500000 0.129917 -0.086808 -v 0.468750 0.129917 -0.086808 -v 0.500000 0.153248 -0.030483 -v 0.468750 0.153248 -0.030483 -v 0.500000 0.153248 0.030483 -v 0.468750 0.153248 0.030483 -v 0.500000 0.129917 0.086808 -v 0.468750 0.129917 0.086808 -v 0.500000 0.086808 0.129917 -v 0.468750 0.086808 0.129917 -v 0.500000 0.030483 0.153248 -v 0.468750 0.030483 0.153248 -v 0.500000 -0.030483 0.153248 -v 0.468750 -0.030483 0.153248 -v 0.500000 -0.086808 0.129917 -v 0.468750 -0.086808 0.129917 -v 0.500000 -0.129917 0.086808 -v 0.468750 -0.129917 0.086808 -v 0.500000 -0.153248 0.030483 -v 0.468750 -0.153248 0.030483 -v 0.500000 -0.153248 -0.030482 -v 0.468750 -0.153248 -0.030483 -v 0.468750 -0.024386 0.122598 -v 0.468750 0.024386 0.122598 -v 0.468750 0.069446 0.103934 -v 0.468750 0.103934 0.069447 -v 0.468750 0.122598 0.024387 -v 0.468750 0.122598 -0.024386 -v 0.468750 0.103934 -0.069446 -v 0.468750 0.069446 -0.103933 -v 0.468750 0.024386 -0.122598 -v 0.468750 -0.024386 -0.122598 -v 0.468750 -0.069446 -0.103933 -v 0.468750 -0.103934 -0.069446 -v 0.468750 0.000000 0.000000 -v 0.500000 0.000000 0.000000 -v -0.069446 -0.103934 -0.468750 -v -0.103933 -0.069447 -0.468750 -v -0.122598 -0.024387 -0.468750 -v -0.122598 0.024386 -0.468750 -v -0.129917 0.086808 -0.500000 -v -0.129917 0.086808 -0.468750 -v -0.086807 0.129917 -0.500000 -v -0.086807 0.129917 -0.468750 -v -0.030482 0.153247 -0.500000 -v -0.030482 0.153247 -0.468750 -v 0.030483 0.153247 -0.500000 -v 0.030483 0.153247 -0.468750 -v 0.086808 0.129917 -0.500000 -v 0.086808 0.129917 -0.468750 -v 0.129918 0.086808 -0.500000 -v 0.129918 0.086808 -0.468750 -v 0.153248 0.030483 -0.500000 -v 0.153248 0.030483 -0.468750 -v 0.153248 -0.030483 -0.500000 -v 0.153248 -0.030483 -0.468750 -v 0.129918 -0.086808 -0.500000 -v 0.129918 -0.086808 -0.468750 -v 0.086808 -0.129917 -0.500000 -v 0.086808 -0.129917 -0.468750 -v 0.030483 -0.153248 -0.500000 -v 0.030483 -0.153248 -0.468750 -v -0.030482 -0.153248 -0.500000 -v -0.030482 -0.153248 -0.468750 -v -0.086807 -0.129917 -0.500000 -v -0.086807 -0.129917 -0.468750 -v -0.129917 -0.086808 -0.500000 -v -0.129917 -0.086808 -0.468750 -v -0.153247 -0.030483 -0.500000 -v -0.153247 -0.030483 -0.468750 -v -0.153247 0.030483 -0.500000 -v -0.153247 0.030483 -0.468750 -v -0.024386 -0.122598 -0.468750 -v 0.024387 -0.122598 -0.468750 -v 0.069447 -0.103934 -0.468750 -v 0.103934 -0.069447 -0.468750 -v 0.122599 -0.024387 -0.468750 -v 0.122599 0.024386 -0.468750 -v 0.103934 0.069446 -0.468750 -v 0.069447 0.103933 -0.468750 -v 0.024387 0.122598 -0.468750 -v -0.024386 0.122598 -0.468750 -v -0.069446 0.103933 -0.468750 -v -0.103933 0.069446 -0.468750 -v 0.000000 -0.000000 -0.468750 -v 0.000001 -0.000000 -0.500000 -v 0.024386 -0.122598 -0.024391 -v 0.069446 -0.103934 -0.024391 -v 0.103934 -0.069446 -0.024391 -v 0.122598 -0.024386 -0.024391 -v 0.122598 0.024386 -0.024391 -v 0.103934 0.069446 -0.024391 -v 0.069446 0.103934 -0.024391 -v 0.024386 0.122598 -0.024391 -v -0.024386 0.122598 -0.024391 -v -0.103934 0.069446 -0.024391 -v -0.069446 0.103934 -0.024391 -v -0.103934 -0.069446 -0.024391 -v -0.122598 -0.024386 -0.024391 -v -0.122598 0.024386 -0.024391 -v -0.069446 -0.103934 -0.024391 -v -0.024386 -0.122598 -0.024391 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.250000 0.015625 -vt 0.250000 0.265625 -vt 0.093322 0.682190 -vt 0.153370 0.657318 -vt 0.185867 0.820694 -vt 0.047364 0.728149 -vt 0.022491 0.788196 -vt 0.022491 0.853192 -vt 0.047364 0.913239 -vt 0.093322 0.959198 -vt 0.153370 0.984070 -vt 0.218365 0.984070 -vt 0.278413 0.959198 -vt 0.324371 0.913239 -vt 0.349244 0.853192 -vt 0.349244 0.788196 -vt 0.324371 0.728149 -vt 0.278413 0.682190 -vt 0.218365 0.657318 -vt 0.471785 0.682190 -vt 0.531832 0.657318 -vt 0.564330 0.820694 -vt 0.425826 0.728149 -vt 0.400953 0.788196 -vt 0.400953 0.853192 -vt 0.425826 0.913239 -vt 0.471785 0.959198 -vt 0.531832 0.984070 -vt 0.596827 0.984070 -vt 0.656875 0.959198 -vt 0.702834 0.913239 -vt 0.727706 0.853192 -vt 0.727706 0.788196 -vt 0.702834 0.728149 -vt 0.656875 0.682190 -vt 0.596827 0.657318 -vt 0.125000 0.609375 -vt 0.125000 0.546875 -vt 0.187500 0.546875 -vt 0.187500 0.609375 -vt 0.250000 0.546875 -vt 0.250000 0.609375 -vt 0.062500 0.609375 -vt 0.062500 0.546875 -vt 0.000000 0.609375 -vt 0.000000 0.546875 -vt 0.937500 0.609375 -vt 0.937500 0.546875 -vt 1.000000 0.546875 -vt 1.000000 0.609375 -vt 0.875000 0.609375 -vt 0.875000 0.546875 -vt 0.812500 0.609375 -vt 0.812500 0.546875 -vt 0.750000 0.609375 -vt 0.750000 0.546875 -vt 0.687500 0.609375 -vt 0.687500 0.546875 -vt 0.625000 0.609375 -vt 0.625000 0.546875 -vt 0.562500 0.609375 -vt 0.562500 0.546875 -vt 0.500000 0.609375 -vt 0.500000 0.546875 -vt 0.437500 0.609375 -vt 0.437500 0.546875 -vt 0.375000 0.609375 -vt 0.375000 0.546875 -vt 0.312500 0.609375 -vt 0.312500 0.546875 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.812500 0.015625 -vt 0.812500 0.265625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.625000 0.015625 -vt 0.625000 0.265625 -vt 0.687500 0.265625 -vt 0.687500 0.015625 -vt 0.500000 0.265625 -vt 0.500000 0.015625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.125000 0.265625 -vt 0.125000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.218363 0.657325 -vt 0.185866 0.820702 -vt 0.153368 0.657325 -vt 0.531836 0.657325 -vt 0.564334 0.820702 -vt 0.596832 0.657325 -vt 0.656879 0.682198 -vt 0.702838 0.728156 -vt 0.727710 0.788204 -vt 0.727710 0.853199 -vt 0.702838 0.913247 -vt 0.656879 0.959205 -vt 0.596831 0.984078 -vt 0.531836 0.984078 -vt 0.471788 0.959205 -vt 0.425830 0.913247 -vt 0.400957 0.853199 -vt 0.400957 0.788204 -vt 0.425830 0.728156 -vt 0.471789 0.682198 -vt 0.093321 0.682198 -vt 0.047362 0.728156 -vt 0.022489 0.788204 -vt 0.022489 0.853199 -vt 0.047362 0.913247 -vt 0.093320 0.959205 -vt 0.153368 0.984078 -vt 0.218363 0.984078 -vt 0.278411 0.959205 -vt 0.324369 0.913247 -vt 0.349242 0.853199 -vt 0.349242 0.788204 -vt 0.324369 0.728156 -vt 0.278411 0.682198 -vt 0.187500 0.515625 -vt 0.250000 0.515625 -vt 0.875000 0.515625 -vt 0.937500 0.515625 -vt 0.750000 0.515625 -vt 0.812500 0.515625 -vt 0.562500 0.515625 -vt 0.625000 0.515625 -vt 0.687500 0.515625 -vt 0.500000 0.515625 -vt 0.437500 0.515625 -vt 0.375000 0.515625 -vt 0.312500 0.515625 -vt 0.125000 0.515625 -vt 0.062500 0.515625 -vt 0.000000 0.515625 -vt 1.000000 0.515625 -s off -f 54/1 41/2 42/3 55/4 -f 31/5 33/6 50/7 -f 29/8 31/5 50/7 -f 27/9 29/8 50/7 -f 25/10 27/9 50/7 -f 23/11 25/10 50/7 -f 21/12 23/11 50/7 -f 19/13 21/12 50/7 -f 17/14 19/13 50/7 -f 15/15 17/14 50/7 -f 13/16 15/15 50/7 -f 11/17 13/16 50/7 -f 9/18 11/17 50/7 -f 7/19 9/18 50/7 -f 5/20 7/19 50/7 -f 35/21 5/20 50/7 -f 6/22 36/23 49/24 -f 8/25 6/22 49/24 -f 10/26 8/25 49/24 -f 12/27 10/26 49/24 -f 14/28 12/27 49/24 -f 16/29 14/28 49/24 -f 18/30 16/29 49/24 -f 20/31 18/30 49/24 -f 22/32 20/31 49/24 -f 24/33 22/32 49/24 -f 26/34 24/33 49/24 -f 28/35 26/34 49/24 -f 30/36 28/35 49/24 -f 32/37 30/36 49/24 -f 34/38 32/37 49/24 -f 36/23 34/38 49/24 -f 33/6 35/21 50/7 -f 8/39 7/40 5/41 6/42 -f 6/42 5/41 35/43 36/44 -f 10/45 9/46 7/40 8/39 -f 12/47 11/48 9/46 10/45 -f 14/49 13/50 11/51 12/52 -f 16/53 15/54 13/50 14/49 -f 18/55 17/56 15/54 16/53 -f 20/57 19/58 17/56 18/55 -f 22/59 21/60 19/58 20/57 -f 24/61 23/62 21/60 22/59 -f 26/63 25/64 23/62 24/61 -f 28/65 27/66 25/64 26/63 -f 30/67 29/68 27/66 28/65 -f 32/69 31/70 29/68 30/67 -f 34/71 33/72 31/70 32/69 -f 36/44 35/43 33/72 34/71 -f 65/73 1/74 37/75 66/76 -f 63/77 3/78 2/79 62/80 -f 61/81 47/82 48/83 60/84 -f 64/85 4/86 3/78 63/77 -f 62/80 2/79 1/74 65/73 -f 60/84 48/83 4/86 64/85 -f 59/87 46/88 47/82 61/81 -f 58/89 45/90 46/88 59/87 -f 57/91 44/92 45/90 58/89 -f 56/93 43/94 44/92 57/91 -f 55/4 42/3 43/94 56/93 -f 53/95 40/96 41/2 54/1 -f 52/97 39/98 40/96 53/95 -f 51/99 38/100 39/98 52/97 -f 66/76 37/75 38/101 51/102 -f 67/58 69/60 70/59 68/57 -f 69/60 71/62 72/61 70/59 -f 71/62 73/64 74/63 72/61 -f 73/64 75/66 76/65 74/63 -f 75/66 77/68 78/67 76/65 -f 77/68 79/70 80/69 78/67 -f 79/70 81/72 82/71 80/69 -f 81/72 83/43 84/44 82/71 -f 83/43 85/41 86/42 84/44 -f 85/41 87/40 88/39 86/42 -f 87/40 89/46 90/45 88/39 -f 89/46 91/48 92/47 90/45 -f 91/51 93/50 94/49 92/52 -f 93/50 95/54 96/53 94/49 -f 97/56 67/58 68/57 98/55 -f 95/54 97/56 98/55 96/53 -f 70/103 116/104 68/105 -f 67/106 115/107 69/108 -f 69/108 115/107 71/109 -f 71/109 115/107 73/110 -f 73/110 115/107 75/111 -f 75/111 115/107 77/112 -f 77/112 115/107 79/113 -f 79/113 115/107 81/114 -f 81/114 115/107 83/115 -f 83/115 115/107 85/116 -f 85/116 115/107 87/117 -f 87/117 115/107 89/118 -f 89/118 115/107 91/119 -f 91/119 115/107 93/120 -f 93/120 115/107 95/121 -f 95/121 115/107 97/122 -f 97/122 115/107 67/106 -f 68/105 116/104 98/123 -f 98/123 116/104 96/124 -f 96/124 116/104 94/125 -f 94/125 116/104 92/126 -f 92/126 116/104 90/127 -f 90/127 116/104 88/128 -f 88/128 116/104 86/129 -f 86/129 116/104 84/130 -f 84/130 116/104 82/131 -f 82/131 116/104 80/132 -f 80/132 116/104 78/133 -f 78/133 116/104 76/134 -f 76/134 116/104 74/135 -f 74/135 116/104 72/136 -f 72/136 116/104 70/103 -f 107/137 120/1 121/4 108/138 -f 102/139 131/73 132/76 103/140 -f 100/141 129/77 128/80 101/142 -f 113/143 127/81 126/84 114/144 -f 99/145 130/85 129/77 100/141 -f 101/142 128/80 131/73 102/139 -f 114/144 126/84 130/85 99/145 -f 112/146 125/87 127/81 113/143 -f 111/147 124/89 125/87 112/146 -f 110/148 123/91 124/89 111/147 -f 109/149 122/93 123/91 110/148 -f 108/138 121/4 122/93 109/149 -f 106/150 119/95 120/1 107/137 -f 105/151 118/97 119/95 106/150 -f 104/152 117/99 118/97 105/151 -f 103/140 132/76 117/102 104/153 -f 133/58 135/60 136/59 134/57 -f 135/60 137/62 138/61 136/59 -f 137/62 139/64 140/63 138/61 -f 139/64 141/66 142/65 140/63 -f 141/66 143/68 144/67 142/65 -f 143/68 145/70 146/69 144/67 -f 145/70 147/72 148/71 146/69 -f 147/72 149/43 150/44 148/71 -f 149/43 151/41 152/42 150/44 -f 151/41 153/40 154/39 152/42 -f 153/40 155/46 156/45 154/39 -f 155/46 157/48 158/47 156/45 -f 157/51 159/50 160/49 158/52 -f 159/50 161/54 162/53 160/49 -f 163/56 133/58 134/57 164/55 -f 161/54 163/56 164/55 162/53 -f 136/103 182/104 134/105 -f 133/106 181/107 135/108 -f 135/108 181/107 137/109 -f 137/109 181/107 139/110 -f 139/110 181/107 141/111 -f 141/111 181/107 143/112 -f 143/112 181/107 145/113 -f 145/113 181/107 147/114 -f 147/114 181/107 149/115 -f 149/115 181/107 151/116 -f 151/116 181/107 153/117 -f 153/117 181/107 155/118 -f 155/118 181/107 157/119 -f 157/119 181/107 159/120 -f 159/120 181/107 161/121 -f 161/121 181/107 163/122 -f 163/122 181/107 133/106 -f 134/105 182/104 164/123 -f 164/123 182/104 162/124 -f 162/124 182/104 160/125 -f 160/125 182/104 158/126 -f 158/126 182/104 156/127 -f 156/127 182/104 154/128 -f 154/128 182/104 152/129 -f 152/129 182/104 150/130 -f 150/130 182/104 148/131 -f 148/131 182/104 146/132 -f 146/132 182/104 144/133 -f 144/133 182/104 142/134 -f 142/134 182/104 140/135 -f 140/135 182/104 138/136 -f 138/136 182/104 136/103 -f 173/137 223/2 224/3 174/138 -f 213/5 215/6 232/7 -f 211/8 213/5 232/7 -f 209/9 211/8 232/7 -f 207/10 209/9 232/7 -f 205/11 207/10 232/7 -f 203/12 205/11 232/7 -f 201/13 203/12 232/7 -f 199/14 201/13 232/7 -f 197/15 199/14 232/7 -f 195/16 197/15 232/7 -f 193/17 195/16 232/7 -f 191/18 193/17 232/7 -f 189/19 191/18 232/7 -f 187/20 189/19 232/7 -f 217/21 187/20 232/7 -f 188/22 218/23 231/24 -f 190/25 188/22 231/24 -f 192/26 190/25 231/24 -f 194/27 192/26 231/24 -f 196/28 194/27 231/24 -f 198/29 196/28 231/24 -f 200/30 198/29 231/24 -f 202/31 200/30 231/24 -f 204/32 202/31 231/24 -f 206/33 204/32 231/24 -f 208/34 206/33 231/24 -f 210/35 208/34 231/24 -f 212/36 210/35 231/24 -f 214/37 212/36 231/24 -f 216/38 214/37 231/24 -f 218/23 216/38 231/24 -f 215/6 217/21 232/7 -f 190/39 189/40 187/41 188/42 -f 188/42 187/41 217/43 218/44 -f 192/45 191/46 189/40 190/39 -f 194/47 193/48 191/46 192/45 -f 196/49 195/50 193/51 194/52 -f 198/53 197/54 195/50 196/49 -f 200/55 199/56 197/54 198/53 -f 202/57 201/58 199/56 200/55 -f 204/59 203/60 201/58 202/57 -f 206/61 205/62 203/60 204/59 -f 208/63 207/64 205/62 206/61 -f 210/65 209/66 207/64 208/63 -f 212/67 211/68 209/66 210/65 -f 214/69 213/70 211/68 212/67 -f 216/71 215/72 213/70 214/69 -f 218/44 217/43 215/72 216/71 -f 168/139 183/74 219/75 169/140 -f 166/141 185/78 184/79 167/142 -f 179/143 229/82 230/83 180/144 -f 165/145 186/86 185/78 166/141 -f 167/142 184/79 183/74 168/139 -f 180/144 230/83 186/86 165/145 -f 178/146 228/88 229/82 179/143 -f 177/147 227/90 228/88 178/146 -f 176/148 226/92 227/90 177/147 -f 175/149 225/94 226/92 176/148 -f 174/138 224/3 225/94 175/149 -f 172/150 222/96 223/2 173/137 -f 171/151 221/98 222/96 172/150 -f 170/152 220/100 221/98 171/151 -f 169/140 219/75 220/101 170/153 -f 286/1 273/2 274/3 287/4 -f 263/5 265/6 282/7 -f 261/8 263/5 282/7 -f 259/9 261/8 282/7 -f 257/10 259/9 282/7 -f 255/11 257/10 282/7 -f 253/12 255/11 282/7 -f 251/13 253/12 282/7 -f 249/14 251/13 282/7 -f 247/15 249/14 282/7 -f 245/16 247/15 282/7 -f 243/17 245/16 282/7 -f 241/18 243/17 282/7 -f 239/19 241/18 282/7 -f 237/20 239/19 282/7 -f 267/21 237/20 282/7 -f 238/22 268/23 281/24 -f 240/25 238/22 281/24 -f 242/26 240/25 281/24 -f 244/27 242/26 281/24 -f 246/28 244/27 281/24 -f 248/29 246/28 281/24 -f 250/30 248/29 281/24 -f 252/31 250/30 281/24 -f 254/32 252/31 281/24 -f 256/33 254/32 281/24 -f 258/34 256/33 281/24 -f 260/35 258/34 281/24 -f 262/36 260/35 281/24 -f 264/37 262/36 281/24 -f 266/38 264/37 281/24 -f 268/23 266/38 281/24 -f 265/6 267/21 282/7 -f 240/39 239/40 237/41 238/42 -f 238/42 237/41 267/43 268/44 -f 242/45 241/46 239/40 240/39 -f 244/47 243/48 241/46 242/45 -f 246/49 245/50 243/51 244/52 -f 248/53 247/54 245/50 246/49 -f 250/55 249/56 247/54 248/53 -f 252/57 251/58 249/56 250/55 -f 254/59 253/60 251/58 252/57 -f 256/61 255/62 253/60 254/59 -f 258/63 257/64 255/62 256/61 -f 260/65 259/66 257/64 258/63 -f 262/67 261/68 259/66 260/65 -f 264/69 263/70 261/68 262/67 -f 266/71 265/72 263/70 264/69 -f 268/44 267/43 265/72 266/71 -f 297/73 233/74 269/75 298/76 -f 295/77 235/78 234/79 294/80 -f 293/81 279/82 280/83 292/84 -f 296/85 236/86 235/78 295/77 -f 294/80 234/79 233/74 297/73 -f 292/84 280/83 236/86 296/85 -f 291/87 278/88 279/82 293/81 -f 290/89 277/90 278/88 291/87 -f 289/91 276/92 277/90 290/89 -f 288/93 275/94 276/92 289/91 -f 287/4 274/3 275/94 288/93 -f 285/95 272/96 273/2 286/1 -f 284/97 271/98 272/96 285/95 -f 283/99 270/100 271/98 284/97 -f 298/76 269/75 270/101 283/102 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_pump.obj b/mods/ITEMS/pipeworks/models/pipeworks_pump.obj deleted file mode 100644 index f05dd02..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_pump.obj +++ /dev/null @@ -1,282 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-pump.blend' -# www.blender.org -mtllib pipeworks_pump.mtl -o Cube -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.375000 0.500000 -v -0.500000 -0.375000 -0.500000 -v 0.500000 -0.375000 -0.500000 -v 0.500000 -0.375000 0.500000 -v -0.437500 -0.375000 0.437500 -v -0.437500 -0.375000 -0.437500 -v 0.437500 -0.375000 -0.437500 -v 0.437500 -0.375000 0.437500 -v -0.437500 0.375000 0.437500 -v -0.437500 0.375000 -0.437500 -v 0.437500 0.375000 -0.437500 -v 0.437500 0.375000 0.437500 -v 0.153248 0.468750 0.030483 -v 0.153248 0.500000 0.030483 -v 0.153248 0.468750 -0.030483 -v 0.153248 0.500000 -0.030483 -v 0.129917 0.468750 -0.086808 -v 0.129917 0.500000 -0.086808 -v 0.086808 0.468750 -0.129917 -v 0.086808 0.500000 -0.129917 -v 0.030483 0.468750 -0.153248 -v 0.030483 0.500000 -0.153248 -v -0.030483 0.468750 -0.153248 -v -0.030483 0.500000 -0.153248 -v -0.086808 0.468750 -0.129917 -v -0.086808 0.500000 -0.129917 -v -0.129917 0.468750 -0.086808 -v -0.129917 0.500000 -0.086808 -v -0.153247 0.468750 -0.030483 -v -0.153247 0.500000 -0.030483 -v -0.153247 0.468750 0.030483 -v -0.153247 0.500000 0.030483 -v -0.129917 0.468750 0.086808 -v -0.129917 0.500000 0.086808 -v -0.086808 0.468750 0.129917 -v -0.086808 0.500000 0.129917 -v -0.030483 0.468750 0.153248 -v -0.030483 0.500000 0.153248 -v 0.030483 0.468750 0.153248 -v 0.030483 0.500000 0.153248 -v 0.086808 0.468750 0.129917 -v 0.086808 0.500000 0.129917 -v 0.129917 0.468750 0.086808 -v 0.129918 0.500000 0.086808 -v 0.122598 0.468750 0.024386 -v 0.122598 0.468750 -0.024386 -v 0.103934 0.468750 -0.069446 -v 0.069447 0.468750 -0.103934 -v 0.024387 0.468750 -0.122598 -v -0.024386 0.468750 -0.122598 -v -0.069446 0.468750 -0.103934 -v -0.103933 0.468750 -0.069446 -v -0.122598 0.468750 -0.024386 -v -0.122598 0.468750 0.024386 -v -0.103933 0.468750 0.069446 -v -0.069446 0.468750 0.103934 -v -0.024386 0.468750 0.122598 -v 0.024387 0.468750 0.122598 -v 0.069447 0.468750 0.103934 -v 0.103934 0.468750 0.069446 -v 0.000000 0.468750 -0.000000 -v 0.000000 0.500000 0.000000 -v 0.122598 0.375003 0.024386 -v 0.122598 0.375003 -0.024386 -v 0.103934 0.375003 -0.069446 -v 0.069446 0.375003 0.103934 -v 0.103934 0.375003 0.069446 -v 0.024386 0.375003 0.122598 -v -0.024386 0.375003 0.122598 -v -0.069446 0.375003 0.103934 -v -0.103934 0.375003 0.069446 -v -0.122598 0.375003 0.024386 -v -0.122598 0.375003 -0.024386 -v -0.103934 0.375003 -0.069446 -v -0.069446 0.375003 -0.103934 -v -0.024386 0.375003 -0.122598 -v 0.069446 0.375003 -0.103934 -v 0.024386 0.375003 -0.122598 -vt 0.714844 0.761719 -vt 0.714844 0.511719 -vt 0.746094 0.511719 -vt 0.746094 0.761719 -vt 0.621094 0.761719 -vt 0.621094 0.511719 -vt 0.652344 0.511719 -vt 0.652344 0.761719 -vt 0.683594 0.761719 -vt 0.683594 0.511719 -vt 0.996094 0.511719 -vt 0.996094 0.761719 -vt 0.996094 0.261719 -vt 0.746094 0.261719 -vt 0.230469 0.261719 -vt 0.449219 0.261719 -vt 0.449219 0.433594 -vt 0.230469 0.433594 -vt 0.222656 0.613281 -vt 0.003906 0.613281 -vt 0.003906 0.441406 -vt 0.222656 0.441406 -vt 0.222656 0.433594 -vt 0.003906 0.433594 -vt 0.003906 0.261719 -vt 0.222656 0.261719 -vt 0.675781 0.433594 -vt 0.457031 0.433594 -vt 0.457031 0.261719 -vt 0.675781 0.261719 -vt 0.230469 0.660156 -vt 0.230469 0.441406 -vt 0.449219 0.441406 -vt 0.449219 0.660156 -vt 0.750000 0.996094 -vt 0.812500 0.996094 -vt 0.812500 0.945313 -vt 0.750000 0.945313 -vt 0.875000 0.996094 -vt 0.875000 0.945313 -vt 0.937500 0.996094 -vt 0.937500 0.945313 -vt 1.000000 0.996094 -vt 1.000000 0.945313 -vt 0.000000 0.996094 -vt 0.062500 0.996094 -vt 0.062500 0.945313 -vt 0.000000 0.945313 -vt 0.125000 0.996094 -vt 0.125000 0.945313 -vt 0.187500 0.996094 -vt 0.187500 0.945313 -vt 0.250000 0.996094 -vt 0.250000 0.945313 -vt 0.312500 0.996094 -vt 0.312500 0.945313 -vt 0.375000 0.996094 -vt 0.375000 0.945313 -vt 0.437500 0.996094 -vt 0.437500 0.945313 -vt 0.500000 0.996094 -vt 0.500000 0.945313 -vt 0.562500 0.996094 -vt 0.562500 0.945313 -vt 0.625000 0.996094 -vt 0.625000 0.945313 -vt 0.687500 0.996094 -vt 0.687500 0.945313 -vt 0.007550 0.738767 -vt 0.046892 0.730976 -vt 0.007550 0.723186 -vt 0.101275 0.738767 -vt 0.140617 0.730976 -vt 0.101275 0.723186 -vt 0.107265 0.708790 -vt 0.118332 0.697773 -vt 0.132792 0.691810 -vt 0.148443 0.691810 -vt 0.162903 0.697773 -vt 0.173970 0.708790 -vt 0.179959 0.723186 -vt 0.179959 0.738767 -vt 0.173970 0.753163 -vt 0.162903 0.764180 -vt 0.148443 0.770143 -vt 0.132792 0.770143 -vt 0.118332 0.764180 -vt 0.107265 0.753163 -vt 0.013540 0.708790 -vt 0.024607 0.697773 -vt 0.039067 0.691810 -vt 0.054718 0.691810 -vt 0.069178 0.697773 -vt 0.080245 0.708790 -vt 0.086234 0.723186 -vt 0.086234 0.738767 -vt 0.080245 0.753162 -vt 0.069178 0.764180 -vt 0.054718 0.770143 -vt 0.039067 0.770143 -vt 0.024607 0.764180 -vt 0.013540 0.753162 -vt 0.250000 0.777344 -vt 0.312500 0.777344 -vt 0.937500 0.777344 -vt 1.000000 0.777344 -vt 0.812500 0.777344 -vt 0.875000 0.777344 -vt 0.625000 0.777344 -vt 0.687500 0.777344 -vt 0.750000 0.777344 -vt 0.562500 0.777344 -vt 0.500000 0.777344 -vt 0.437500 0.777344 -vt 0.375000 0.777344 -vt 0.187500 0.777344 -vt 0.125000 0.777344 -vt 0.062500 0.777344 -vt 0.000000 0.777344 -usemtl None -s off -f 5/1 6/2 2/3 1/4 -f 6/5 7/6 3/7 2/8 -f 7/9 8/10 4/2 3/1 -f 8/10 5/9 1/8 4/7 -f 1/4 2/3 3/11 4/12 -f 8/13 7/11 6/3 5/14 -f 13/15 14/16 10/17 9/18 -f 14/19 15/20 11/21 10/22 -f 15/23 16/24 12/25 11/26 -f 16/27 13/28 9/29 12/30 -f 16/31 15/32 14/33 13/34 -f 17/35 19/36 20/37 18/38 -f 19/36 21/39 22/40 20/37 -f 21/39 23/41 24/42 22/40 -f 23/41 25/43 26/44 24/42 -f 25/45 27/46 28/47 26/48 -f 27/46 29/49 30/50 28/47 -f 29/49 31/51 32/52 30/50 -f 31/51 33/53 34/54 32/52 -f 33/53 35/55 36/56 34/54 -f 35/55 37/57 38/58 36/56 -f 37/57 39/59 40/60 38/58 -f 39/59 41/61 42/62 40/60 -f 41/61 43/63 44/64 42/62 -f 43/63 45/65 46/66 44/64 -f 47/67 17/35 18/38 48/68 -f 45/65 47/67 48/68 46/66 -f 20/69 66/70 18/71 -f 17/72 65/73 19/74 -f 19/74 65/73 21/75 -f 21/75 65/73 23/76 -f 23/76 65/73 25/77 -f 25/77 65/73 27/78 -f 27/78 65/73 29/79 -f 29/79 65/73 31/80 -f 31/80 65/73 33/81 -f 33/81 65/73 35/82 -f 35/82 65/73 37/83 -f 37/83 65/73 39/84 -f 39/84 65/73 41/85 -f 41/85 65/73 43/86 -f 43/86 65/73 45/87 -f 45/87 65/73 47/88 -f 47/88 65/73 17/72 -f 18/71 66/70 48/89 -f 48/89 66/70 46/90 -f 46/90 66/70 44/91 -f 44/91 66/70 42/92 -f 42/92 66/70 40/93 -f 40/93 66/70 38/94 -f 38/94 66/70 36/95 -f 36/95 66/70 34/96 -f 34/96 66/70 32/97 -f 32/97 66/70 30/98 -f 30/98 66/70 28/99 -f 28/99 66/70 26/100 -f 26/100 66/70 24/101 -f 24/101 66/70 22/102 -f 22/102 66/70 20/69 -f 57/54 77/103 76/104 58/56 -f 52/42 81/105 82/106 53/44 -f 50/37 68/107 69/108 51/40 -f 63/66 70/109 71/110 64/68 -f 49/38 67/111 68/107 50/37 -f 51/40 69/108 81/105 52/42 -f 64/68 71/110 67/111 49/38 -f 62/64 72/112 70/109 63/66 -f 61/62 73/113 72/112 62/64 -f 60/60 74/114 73/113 61/62 -f 59/58 75/115 74/114 60/60 -f 58/56 76/104 75/115 59/58 -f 56/52 78/116 77/103 57/54 -f 55/50 79/117 78/116 56/52 -f 54/47 80/118 79/117 55/50 -f 53/48 82/119 80/118 54/47 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_spigot.obj b/mods/ITEMS/pipeworks/models/pipeworks_spigot.obj deleted file mode 100644 index f6e80c9..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_spigot.obj +++ /dev/null @@ -1,512 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-spigot.blend' -# www.blender.org -mtllib pipeworks_spigot.mtl -o pipe.000_Cylinder.001 -v -0.122598 -0.024391 -0.024386 -v -0.122598 -0.024391 0.024386 -v 0.129917 -0.250000 -0.086808 -v 0.153247 -0.250000 -0.030483 -v -0.000000 -0.250000 -0.000000 -v 0.086808 -0.250000 -0.129917 -v 0.030483 -0.250000 -0.153248 -v -0.030483 -0.250000 -0.153248 -v -0.086808 -0.250000 -0.129917 -v -0.129917 -0.250000 -0.086808 -v -0.153248 -0.250000 -0.030483 -v -0.153248 -0.250000 0.030483 -v -0.129917 -0.250000 0.086808 -v -0.086808 -0.250000 0.129917 -v -0.030483 -0.250000 0.153247 -v 0.030483 -0.250000 0.153248 -v 0.086808 -0.250000 0.129917 -v 0.129917 -0.250000 0.086808 -v 0.153247 -0.250000 0.030483 -v 0.129917 -0.187500 0.086808 -v 0.153248 -0.187500 0.030483 -v -0.000000 -0.187500 -0.000000 -v 0.086808 -0.187500 0.129917 -v 0.030483 -0.187500 0.153248 -v -0.030483 -0.187500 0.153247 -v -0.086808 -0.187500 0.129917 -v -0.129917 -0.187500 0.086808 -v -0.153248 -0.187500 0.030483 -v -0.153248 -0.187500 -0.030483 -v -0.129917 -0.187500 -0.086808 -v -0.086808 -0.187500 -0.129917 -v -0.030483 -0.187500 -0.153248 -v 0.030483 -0.187500 -0.153248 -v 0.086808 -0.187500 -0.129917 -v 0.129917 -0.187500 -0.086808 -v 0.153248 -0.187500 -0.030483 -v 0.069446 -0.024391 -0.103934 -v 0.024386 -0.024391 -0.122598 -v 0.122598 -0.024391 -0.024386 -v 0.103934 -0.024391 -0.069446 -v 0.069446 -0.024391 0.103934 -v 0.103934 -0.024391 0.069446 -v 0.122598 -0.024391 0.024386 -v 0.024386 -0.024391 0.122598 -v -0.024386 -0.024391 0.122598 -v -0.069446 -0.024391 0.103934 -v -0.103934 -0.024391 0.069446 -v -0.103934 -0.024391 -0.069446 -v -0.069446 -0.024391 -0.103934 -v -0.024386 -0.024391 -0.122598 -v -0.103934 0.041589 -0.041924 -v 0.103934 0.041589 -0.041925 -v 0.122598 0.009727 -0.010062 -v 0.024386 0.079173 -0.079509 -v 0.069446 0.065976 -0.066311 -v 0.069446 0.094826 -0.024663 -v -0.103934 0.062964 -0.011464 -v -0.069446 0.094827 -0.024662 -v -0.024386 0.112070 -0.031805 -v 0.024386 0.112070 -0.031805 -v 0.122598 0.021334 0.005779 -v 0.103934 0.062964 -0.011464 -v -0.122598 0.021334 0.005780 -v -0.024386 0.079173 -0.079509 -v -0.069446 0.065976 -0.066311 -v -0.122599 -0.024387 0.468750 -v -0.122599 0.024386 0.468750 -v -0.122598 0.024386 0.024391 -v 0.129917 -0.086808 0.500000 -v 0.153247 -0.030483 0.500000 -v -0.000001 0.000000 0.500000 -v 0.086807 -0.129917 0.500000 -v 0.030482 -0.153248 0.500000 -v -0.030483 -0.153248 0.500000 -v -0.086808 -0.129917 0.500000 -v -0.129918 -0.086808 0.500000 -v -0.153248 -0.030483 0.500000 -v -0.153248 0.030483 0.500000 -v -0.129918 0.086808 0.500000 -v -0.086808 0.129917 0.500000 -v -0.030483 0.153247 0.500000 -v 0.030482 0.153247 0.500000 -v 0.086807 0.129917 0.500000 -v 0.129917 0.086808 0.500000 -v 0.153247 0.030483 0.500000 -v 0.129917 0.086808 0.468750 -v 0.153247 0.030483 0.468750 -v 0.000000 0.000000 0.468750 -v 0.086807 0.129917 0.468750 -v 0.030482 0.153247 0.468750 -v -0.030483 0.153247 0.468750 -v -0.086808 0.129917 0.468750 -v -0.129918 0.086808 0.468750 -v -0.153248 0.030483 0.468750 -v -0.153248 -0.030483 0.468750 -v -0.129918 -0.086808 0.468750 -v -0.086808 -0.129917 0.468750 -v -0.030483 -0.153248 0.468750 -v 0.030482 -0.153248 0.468750 -v 0.086807 -0.129917 0.468750 -v 0.129917 -0.086808 0.468750 -v 0.153247 -0.030483 0.468750 -v 0.069446 -0.103934 0.024391 -v 0.069446 -0.103934 0.468750 -v 0.024386 -0.122598 0.468750 -v 0.024386 -0.122598 0.024391 -v 0.122598 -0.024387 0.468750 -v 0.103933 -0.069447 0.468750 -v 0.103934 -0.069446 0.024391 -v 0.069446 0.103933 0.468750 -v 0.103933 0.069446 0.468750 -v 0.103934 0.069446 0.024391 -v 0.122598 0.024386 0.024391 -v 0.122598 0.024386 0.468750 -v 0.024386 0.122598 0.024391 -v 0.024386 0.122598 0.468750 -v -0.024386 0.122598 0.024391 -v -0.024387 0.122598 0.468750 -v -0.069446 0.103934 0.024391 -v -0.069447 0.103933 0.468750 -v -0.103934 0.069446 0.024391 -v -0.103934 0.069446 0.468750 -v -0.103934 -0.069446 0.024391 -v -0.103934 -0.069447 0.468750 -v -0.069446 -0.103934 0.024391 -v -0.069447 -0.103934 0.468750 -v -0.024386 -0.122598 0.024391 -v -0.024387 -0.122598 0.468750 -v 0.069446 0.103934 0.024390 -v -0.122598 -0.005780 -0.020763 -v -0.024386 0.031804 -0.111499 -v -0.069446 0.024662 -0.094256 -v -0.103934 0.011464 -0.062393 -v 0.103934 0.011464 -0.062393 -v 0.122598 -0.005780 -0.020763 -v 0.024386 0.031804 -0.111499 -v 0.069446 0.024662 -0.094256 -v -0.122598 0.009727 -0.010062 -v -0.122598 -0.246570 0.024386 -v -0.103934 -0.246570 0.069446 -v -0.069447 -0.246570 0.103934 -v -0.122598 -0.246570 -0.024386 -v 0.069446 -0.246571 0.103933 -v 0.122598 -0.246571 0.024386 -v 0.103934 -0.246571 0.069446 -v 0.103933 -0.246571 -0.069446 -v -0.024386 -0.246570 0.122598 -v 0.122598 -0.246571 -0.024386 -v -0.024386 -0.246571 -0.122598 -v 0.024386 -0.246571 -0.122598 -v 0.069446 -0.246571 -0.103934 -v -0.103934 -0.246570 -0.069446 -v -0.069446 -0.246570 -0.103934 -v 0.024386 -0.246570 0.122598 -vt 0.139725 0.682190 -vt 0.199773 0.657318 -vt 0.232270 0.820694 -vt 0.093767 0.728149 -vt 0.068894 0.788196 -vt 0.068894 0.853192 -vt 0.093767 0.913239 -vt 0.139725 0.959198 -vt 0.199773 0.984070 -vt 0.264768 0.984070 -vt 0.324816 0.959198 -vt 0.370774 0.913239 -vt 0.395647 0.853192 -vt 0.395647 0.788196 -vt 0.370774 0.728149 -vt 0.324816 0.682190 -vt 0.264768 0.657318 -vt 0.487410 0.682190 -vt 0.547457 0.657318 -vt 0.579955 0.820694 -vt 0.441451 0.728149 -vt 0.416578 0.788196 -vt 0.416578 0.853192 -vt 0.441451 0.913239 -vt 0.487410 0.959198 -vt 0.547457 0.984070 -vt 0.612452 0.984070 -vt 0.672500 0.959198 -vt 0.718459 0.913239 -vt 0.743331 0.853192 -vt 0.743331 0.788196 -vt 0.718459 0.728149 -vt 0.672500 0.682190 -vt 0.612452 0.657318 -vt 0.125000 0.640625 -vt 0.125000 0.578125 -vt 0.187500 0.578125 -vt 0.187500 0.640625 -vt 0.250000 0.578125 -vt 0.250000 0.640625 -vt 0.062500 0.640625 -vt 0.062500 0.578125 -vt 0.000000 0.640625 -vt 0.000000 0.578125 -vt 0.937500 0.640625 -vt 0.937500 0.578125 -vt 1.000000 0.578125 -vt 1.000000 0.640625 -vt 0.875000 0.640625 -vt 0.875000 0.578125 -vt 0.812500 0.640625 -vt 0.812500 0.578125 -vt 0.750000 0.640625 -vt 0.750000 0.578125 -vt 0.687500 0.640625 -vt 0.687500 0.578125 -vt 0.625000 0.640625 -vt 0.625000 0.578125 -vt 0.562500 0.640625 -vt 0.562500 0.578125 -vt 0.500000 0.640625 -vt 0.500000 0.578125 -vt 0.437500 0.640625 -vt 0.437500 0.578125 -vt 0.375000 0.640625 -vt 0.375000 0.578125 -vt 0.312500 0.640625 -vt 0.312500 0.578125 -vt 0.187500 0.453125 -vt 0.125000 0.453125 -vt 0.139892 0.682190 -vt 0.199940 0.657318 -vt 0.232437 0.820694 -vt 0.093934 0.728149 -vt 0.069061 0.788196 -vt 0.069061 0.853192 -vt 0.093934 0.913239 -vt 0.139892 0.959198 -vt 0.199940 0.984070 -vt 0.264935 0.984070 -vt 0.324983 0.959198 -vt 0.370941 0.913239 -vt 0.395814 0.853192 -vt 0.395814 0.788196 -vt 0.370941 0.728149 -vt 0.324983 0.682190 -vt 0.264935 0.657318 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.812500 0.265625 -vt 0.812500 0.015625 -vt 0.625000 0.265625 -vt 0.625000 0.015625 -vt 0.687500 0.015625 -vt 0.687500 0.265625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.500000 0.015625 -vt 0.500000 0.265625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.250000 0.265625 -vt 0.250000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.125000 0.015625 -vt 0.125000 0.265625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.000000 0.999989 -vt 0.000000 0.890943 -vt 0.041611 0.899043 -vt 0.941956 0.794823 -vt 0.941956 0.841698 -vt 0.895081 0.841698 -vt 0.895081 0.794823 -vt 0.848206 0.841698 -vt 0.848206 0.794823 -vt 0.801331 0.794823 -vt 0.801331 0.841698 -vt 0.754456 0.841698 -vt 0.754456 0.794823 -vt 0.988831 0.794823 -vt 0.988831 0.841698 -vt 0.941956 0.701073 -vt 0.941956 0.747948 -vt 0.895081 0.747948 -vt 0.895081 0.701073 -vt 0.041611 0.741571 -vt 0.000000 0.749671 -vt 0.076282 0.717645 -vt 0.102233 0.682226 -vt 0.109057 0.640614 -vt 0.754456 0.747948 -vt 0.801331 0.747948 -vt 0.848206 0.747948 -vt 0.848206 0.701073 -vt 0.941956 0.888573 -vt 0.988831 0.888573 -vt 0.895081 0.888573 -vt 0.848206 0.888573 -vt 0.076282 0.922969 -vt 0.102233 0.958388 -vt 0.109057 1.000000 -vt 0.801331 0.888573 -vt 0.754456 0.888573 -vt 0.801331 0.935448 -vt 0.754456 0.935448 -vt 0.754456 0.982323 -vt 0.801331 0.982323 -vt 0.848206 0.935448 -vt 0.848206 0.982323 -vt 0.895081 0.935448 -vt 0.895081 0.982323 -vt 0.941956 0.935448 -vt 0.941956 0.982323 -vt 0.988831 0.982323 -vt 0.988831 0.935448 -vt 0.801331 0.701073 -vt 0.754456 0.701073 -vt 0.250000 0.453125 -vt 0.875000 0.453125 -vt 0.937500 0.453125 -vt 0.750000 0.453125 -vt 0.812500 0.453125 -vt 0.562500 0.453125 -vt 0.625000 0.453125 -vt 0.687500 0.453125 -vt 0.500000 0.453125 -vt 0.437500 0.453125 -vt 0.375000 0.453125 -vt 0.312500 0.453125 -vt 0.062500 0.453125 -vt 0.000000 0.453125 -vt 1.000000 0.453125 -g pipe.000_Cylinder.001_metal -usemtl metal -s off -f 3/1 4/2 5/3 -f 6/4 3/1 5/3 -f 7/5 6/4 5/3 -f 8/6 7/5 5/3 -f 9/7 8/6 5/3 -f 10/8 9/7 5/3 -f 11/9 10/8 5/3 -f 12/10 11/9 5/3 -f 13/11 12/10 5/3 -f 14/12 13/11 5/3 -f 15/13 14/12 5/3 -f 16/14 15/13 5/3 -f 17/15 16/14 5/3 -f 18/16 17/15 5/3 -f 19/17 18/16 5/3 -f 20/18 21/19 22/20 -f 23/21 20/18 22/20 -f 24/22 23/21 22/20 -f 25/23 24/22 22/20 -f 26/24 25/23 22/20 -f 27/25 26/24 22/20 -f 28/26 27/25 22/20 -f 29/27 28/26 22/20 -f 30/28 29/27 22/20 -f 31/29 30/28 22/20 -f 32/30 31/29 22/20 -f 33/31 32/30 22/20 -f 34/32 33/31 22/20 -f 35/33 34/32 22/20 -f 36/34 35/33 22/20 -f 21/19 36/34 22/20 -f 4/2 19/17 5/3 -f 23/35 17/36 18/37 20/38 -f 20/38 18/37 19/39 21/40 -f 24/41 16/42 17/36 23/35 -f 25/43 15/44 16/42 24/41 -f 26/45 14/46 15/47 25/48 -f 27/49 13/50 14/46 26/45 -f 28/51 12/52 13/50 27/49 -f 29/53 11/54 12/52 28/51 -f 30/55 10/56 11/54 29/53 -f 31/57 9/58 10/56 30/55 -f 32/59 8/60 9/58 31/57 -f 33/61 7/62 8/60 32/59 -f 34/63 6/64 7/62 33/61 -f 35/65 3/66 6/64 34/63 -f 36/67 4/68 3/66 35/65 -f 21/40 19/39 4/68 36/67 -f 142/69 1/37 48/36 152/70 -f 69/71 70/72 71/73 -f 72/74 69/71 71/73 -f 73/75 72/74 71/73 -f 74/76 73/75 71/73 -f 75/77 74/76 71/73 -f 76/78 75/77 71/73 -f 77/79 76/78 71/73 -f 78/80 77/79 71/73 -f 79/81 78/80 71/73 -f 80/82 79/81 71/73 -f 81/83 80/82 71/73 -f 82/84 81/83 71/73 -f 83/85 82/84 71/73 -f 84/86 83/85 71/73 -f 85/87 84/86 71/73 -f 86/18 87/19 88/20 -f 89/21 86/18 88/20 -f 90/22 89/21 88/20 -f 91/23 90/22 88/20 -f 92/24 91/23 88/20 -f 93/25 92/24 88/20 -f 94/26 93/25 88/20 -f 95/27 94/26 88/20 -f 96/28 95/27 88/20 -f 97/29 96/28 88/20 -f 98/30 97/29 88/20 -f 99/31 98/30 88/20 -f 100/32 99/31 88/20 -f 101/33 100/32 88/20 -f 102/34 101/33 88/20 -f 87/19 102/34 88/20 -f 70/72 85/87 71/73 -f 89/35 83/36 84/37 86/38 -f 86/38 84/37 85/39 87/40 -f 90/41 82/42 83/36 89/35 -f 91/43 81/44 82/42 90/41 -f 92/45 80/46 81/47 91/48 -f 93/49 79/50 80/46 92/45 -f 94/51 78/52 79/50 93/49 -f 95/53 77/54 78/52 94/51 -f 96/55 76/56 77/54 95/53 -f 97/57 75/58 76/56 96/55 -f 98/59 74/60 75/58 97/57 -f 99/61 73/62 74/60 98/59 -f 100/63 72/64 73/62 99/61 -f 101/65 69/66 72/64 100/63 -f 102/67 70/68 69/66 101/65 -f 87/40 85/39 70/68 102/67 -f 103/88 104/89 105/90 106/91 -f 109/92 108/93 104/89 103/88 -f 112/94 111/95 114/96 113/97 -f 117/98 118/99 116/100 115/101 -f 119/102 120/103 118/99 117/98 -f 121/104 122/105 120/103 119/102 -f 68/106 67/107 122/105 121/104 -f 125/108 126/109 124/110 123/111 -f 127/112 128/113 126/109 125/108 -f 106/91 105/90 128/114 127/115 -f 2/116 66/117 67/107 68/106 -f 43/118 107/119 108/93 109/92 -f 129/120 110/121 111/95 112/94 -f 113/97 114/96 107/119 43/118 -f 115/101 116/100 110/121 129/120 -f 123/111 124/110 66/117 2/116 -f 43/122 39/123 135/124 -f 50/125 131/126 136/127 38/128 -f 38/128 136/127 137/129 37/130 -f 40/131 37/130 137/129 134/132 -f 40/131 134/132 135/133 39/134 -f 50/125 49/135 132/136 131/126 -f 49/137 48/138 133/139 132/140 -f 48/138 1/125 130/128 133/139 -f 2/43 130/141 1/142 -f 2/43 138/143 130/141 -f 2/43 63/144 138/143 -f 63/144 2/43 68/145 -f 121/146 57/147 63/131 68/134 -f 57/147 51/148 138/130 63/131 -f 133/139 130/128 138/130 51/148 -f 65/149 132/140 133/139 51/148 -f 64/150 131/126 132/136 65/151 -f 64/150 54/152 136/127 131/126 -f 54/152 55/153 137/129 136/127 -f 43/122 135/124 53/154 -f 43/122 53/154 61/155 -f 61/155 113/156 43/122 -f 134/132 52/157 53/158 135/133 -f 62/159 61/160 53/158 52/157 -f 52/157 134/132 137/129 55/153 -f 113/161 61/160 62/159 112/162 -f 62/159 52/157 55/153 56/163 -f 62/159 56/163 129/164 112/162 -f 60/165 56/163 55/153 54/152 -f 60/165 115/166 129/164 56/163 -f 64/150 59/167 60/165 54/152 -f 117/168 115/166 60/165 59/167 -f 119/169 117/168 59/167 58/170 -f 59/167 64/150 65/151 58/170 -f 58/171 65/149 51/148 57/147 -f 121/146 119/172 58/171 57/147 -f 1/37 142/69 139/173 2/39 -f 37/50 151/174 150/175 38/46 -f 39/54 148/176 146/177 40/52 -f 41/60 143/178 145/179 42/58 -f 43/56 144/180 148/176 39/54 -f 40/52 146/177 151/174 37/50 -f 42/58 145/179 144/180 43/56 -f 44/62 154/181 143/178 41/60 -f 45/64 147/182 154/181 44/62 -f 46/66 141/183 147/182 45/64 -f 47/68 140/184 141/183 46/66 -f 2/39 139/173 140/184 47/68 -f 49/42 153/185 152/70 48/36 -f 50/44 149/186 153/185 49/42 -f 38/46 150/175 149/187 50/47 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_spigot_pouring.obj b/mods/ITEMS/pipeworks/models/pipeworks_spigot_pouring.obj deleted file mode 100644 index 50f653c..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_spigot_pouring.obj +++ /dev/null @@ -1,634 +0,0 @@ -# Blender v2.69 (sub 0) OBJ File: 'pipe-spigot-pouring.blend' -# www.blender.org -mtllib pipeworks_spigot_pouring.mtl -o pipe.001_Cylinder.000 -v -0.094401 -0.559070 0.018777 -v -0.080029 -0.559070 0.053473 -v -0.053474 -0.559070 0.080029 -v -0.094401 -0.559070 -0.018778 -v 0.053473 -0.559070 0.080029 -v 0.094400 -0.559070 0.018777 -v 0.080029 -0.559070 0.053473 -v 0.080029 -0.559071 -0.053474 -v -0.018777 -0.559070 0.094400 -v 0.094400 -0.559071 -0.018777 -v -0.018777 -0.559071 -0.094401 -v 0.018777 -0.559071 -0.094401 -v 0.053473 -0.559071 -0.080029 -v -0.080029 -0.559070 -0.053474 -v -0.053474 -0.559070 -0.080029 -v 0.018777 -0.559070 0.094400 -v -0.000000 -0.559070 -0.000000 -v -0.094401 -0.243141 0.018777 -v -0.080029 -0.243141 0.053473 -v -0.053474 -0.243141 0.080029 -v -0.094401 -0.243141 -0.018778 -v 0.053473 -0.243141 0.080029 -v 0.094400 -0.243141 0.018777 -v 0.080029 -0.243141 0.053473 -v 0.080029 -0.243141 -0.053474 -v -0.018777 -0.243141 0.094400 -v 0.094400 -0.243141 -0.018777 -v -0.018777 -0.243141 -0.094401 -v 0.018777 -0.243141 -0.094401 -v 0.053473 -0.243141 -0.080029 -v -0.080029 -0.243141 -0.053474 -v -0.053474 -0.243141 -0.080029 -v 0.018777 -0.243141 0.094400 -vt 0.499995 0.000000 -vt 0.374998 0.000000 -vt 0.375003 1.000000 -vt 0.500001 1.000000 -vt 0.249999 0.000000 -vt 0.250003 1.000000 -vt 0.124999 0.000000 -vt 0.125002 1.000000 -vt 0.874999 0.000000 -vt 0.750001 0.000000 -vt 0.750000 1.000000 -vt 0.874999 1.000000 -vt 0.625002 0.000000 -vt 0.624999 1.000000 -vt 0.500003 0.000000 -vt 0.499998 1.000000 -vt 0.375006 0.000000 -vt 0.375000 1.000000 -vt 0.250008 0.000000 -vt 0.250001 1.000000 -vt 0.125008 0.000000 -vt 0.000010 0.000000 -vt 0.000000 1.000000 -vt 0.125000 1.000000 -vt 0.749993 0.000000 -vt 0.624993 0.000000 -vt 0.625001 1.000000 -vt 0.750002 1.000000 -vt 0.999987 0.000000 -vt 0.874991 0.000000 -vt 0.875002 1.000000 -vt 1.000000 1.000000 -vt 0.999997 0.000000 -vt 0.999998 1.000000 -vt 0.000003 1.000000 -vt 0.000002 0.000000 -vt 0.000000 0.400543 -vt 0.076119 0.216772 -vt 0.500000 0.500000 -vt 0.216773 0.076119 -vt 0.400545 0.000000 -vt 0.599455 0.000000 -vt 0.783226 0.076119 -vt 0.923879 0.216773 -vt 1.000000 0.400544 -vt 1.000000 0.599455 -vt 0.923881 0.783226 -vt 0.783227 0.923879 -vt 0.599455 1.000000 -vt 0.400545 1.000000 -vt 0.216772 0.923879 -vt 0.076119 0.783227 -vt 0.000000 0.599455 -g pipe.001_Cylinder.000_water -usemtl water -s off -f 12/1 11/2 28/3 29/4 -f 11/2 15/5 32/6 28/3 -f 15/5 14/7 31/8 32/6 -f 1/9 2/10 19/11 18/12 -f 2/10 3/13 20/14 19/11 -f 3/13 9/15 26/16 20/14 -f 9/15 16/17 33/18 26/16 -f 16/17 5/19 22/20 33/18 -f 7/21 6/22 23/23 24/24 -f 8/25 13/26 30/27 25/28 -f 6/29 10/30 27/31 23/32 -f 5/19 7/21 24/24 22/20 -f 10/30 8/25 25/28 27/31 -f 13/26 12/1 29/4 30/27 -f 4/33 1/9 18/12 21/34 -f 21/35 31/8 14/7 4/36 -f 4/37 14/38 17/39 -f 14/38 15/40 17/39 -f 15/40 11/41 17/39 -f 11/41 12/42 17/39 -f 12/42 13/43 17/39 -f 13/43 8/44 17/39 -f 8/44 10/45 17/39 -f 10/45 6/46 17/39 -f 6/46 7/47 17/39 -f 7/47 5/48 17/39 -f 5/48 16/49 17/39 -f 16/49 9/50 17/39 -f 9/50 3/51 17/39 -f 3/51 2/52 17/39 -f 2/52 1/53 17/39 -f 1/53 4/37 17/39 -o pipe.000_Cylinder.001 -v -0.122598 -0.024391 -0.024386 -v -0.122598 -0.024391 0.024386 -v 0.129917 -0.250000 -0.086808 -v 0.153247 -0.250000 -0.030483 -v -0.000000 -0.250000 -0.000000 -v 0.086808 -0.250000 -0.129917 -v 0.030483 -0.250000 -0.153248 -v -0.030483 -0.250000 -0.153248 -v -0.086808 -0.250000 -0.129917 -v -0.129917 -0.250000 -0.086808 -v -0.153248 -0.250000 -0.030483 -v -0.153248 -0.250000 0.030483 -v -0.129917 -0.250000 0.086808 -v -0.086808 -0.250000 0.129917 -v -0.030483 -0.250000 0.153247 -v 0.030483 -0.250000 0.153248 -v 0.086808 -0.250000 0.129917 -v 0.129917 -0.250000 0.086808 -v 0.153247 -0.250000 0.030483 -v 0.129917 -0.187500 0.086808 -v 0.153248 -0.187500 0.030483 -v -0.000000 -0.187500 -0.000000 -v 0.086808 -0.187500 0.129917 -v 0.030483 -0.187500 0.153248 -v -0.030483 -0.187500 0.153247 -v -0.086808 -0.187500 0.129917 -v -0.129917 -0.187500 0.086808 -v -0.153248 -0.187500 0.030483 -v -0.153248 -0.187500 -0.030483 -v -0.129917 -0.187500 -0.086808 -v -0.086808 -0.187500 -0.129917 -v -0.030483 -0.187500 -0.153248 -v 0.030483 -0.187500 -0.153248 -v 0.086808 -0.187500 -0.129917 -v 0.129917 -0.187500 -0.086808 -v 0.153248 -0.187500 -0.030483 -v 0.069446 -0.024391 -0.103934 -v 0.024386 -0.024391 -0.122598 -v 0.122598 -0.024391 -0.024386 -v 0.103934 -0.024391 -0.069446 -v 0.069446 -0.024391 0.103934 -v 0.103934 -0.024391 0.069446 -v 0.122598 -0.024391 0.024386 -v 0.024386 -0.024391 0.122598 -v -0.024386 -0.024391 0.122598 -v -0.069446 -0.024391 0.103934 -v -0.103934 -0.024391 0.069446 -v -0.103934 -0.024391 -0.069446 -v -0.069446 -0.024391 -0.103934 -v -0.024386 -0.024391 -0.122598 -v -0.103934 0.041589 -0.041924 -v 0.103934 0.041589 -0.041925 -v 0.122598 0.009727 -0.010062 -v 0.024386 0.079173 -0.079509 -v 0.069446 0.065976 -0.066311 -v 0.069446 0.094826 -0.024663 -v -0.103934 0.062964 -0.011464 -v -0.069446 0.094827 -0.024662 -v -0.024386 0.112070 -0.031805 -v 0.024386 0.112070 -0.031805 -v 0.122598 0.021334 0.005779 -v 0.103934 0.062964 -0.011464 -v -0.122598 0.021334 0.005780 -v -0.024386 0.079173 -0.079509 -v -0.069446 0.065976 -0.066311 -v -0.122599 -0.024387 0.468750 -v -0.122599 0.024386 0.468750 -v -0.122598 0.024386 0.024391 -v 0.129917 -0.086808 0.500000 -v 0.153247 -0.030483 0.500000 -v -0.000001 0.000000 0.500000 -v 0.086807 -0.129917 0.500000 -v 0.030482 -0.153248 0.500000 -v -0.030483 -0.153248 0.500000 -v -0.086808 -0.129917 0.500000 -v -0.129918 -0.086808 0.500000 -v -0.153248 -0.030483 0.500000 -v -0.153248 0.030483 0.500000 -v -0.129918 0.086808 0.500000 -v -0.086808 0.129917 0.500000 -v -0.030483 0.153247 0.500000 -v 0.030482 0.153247 0.500000 -v 0.086807 0.129917 0.500000 -v 0.129917 0.086808 0.500000 -v 0.153247 0.030483 0.500000 -v 0.129917 0.086808 0.468750 -v 0.153247 0.030483 0.468750 -v 0.000000 0.000000 0.468750 -v 0.086807 0.129917 0.468750 -v 0.030482 0.153247 0.468750 -v -0.030483 0.153247 0.468750 -v -0.086808 0.129917 0.468750 -v -0.129918 0.086808 0.468750 -v -0.153248 0.030483 0.468750 -v -0.153248 -0.030483 0.468750 -v -0.129918 -0.086808 0.468750 -v -0.086808 -0.129917 0.468750 -v -0.030483 -0.153248 0.468750 -v 0.030482 -0.153248 0.468750 -v 0.086807 -0.129917 0.468750 -v 0.129917 -0.086808 0.468750 -v 0.153247 -0.030483 0.468750 -v 0.069446 -0.103934 0.024391 -v 0.069446 -0.103934 0.468750 -v 0.024386 -0.122598 0.468750 -v 0.024386 -0.122598 0.024391 -v 0.122598 -0.024387 0.468750 -v 0.103933 -0.069447 0.468750 -v 0.103934 -0.069446 0.024391 -v 0.069446 0.103933 0.468750 -v 0.103933 0.069446 0.468750 -v 0.103934 0.069446 0.024391 -v 0.122598 0.024386 0.024391 -v 0.122598 0.024386 0.468750 -v 0.024386 0.122598 0.024391 -v 0.024386 0.122598 0.468750 -v -0.024386 0.122598 0.024391 -v -0.024387 0.122598 0.468750 -v -0.069446 0.103934 0.024391 -v -0.069447 0.103933 0.468750 -v -0.103934 0.069446 0.024391 -v -0.103934 0.069446 0.468750 -v -0.103934 -0.069446 0.024391 -v -0.103934 -0.069447 0.468750 -v -0.069446 -0.103934 0.024391 -v -0.069447 -0.103934 0.468750 -v -0.024386 -0.122598 0.024391 -v -0.024387 -0.122598 0.468750 -v 0.069446 0.103934 0.024390 -v -0.122598 -0.005780 -0.020763 -v -0.024386 0.031804 -0.111499 -v -0.069446 0.024662 -0.094256 -v -0.103934 0.011464 -0.062393 -v 0.103934 0.011464 -0.062393 -v 0.122598 -0.005780 -0.020763 -v 0.024386 0.031804 -0.111499 -v 0.069446 0.024662 -0.094256 -v -0.122598 0.009727 -0.010062 -v -0.122598 -0.246570 0.024386 -v -0.103934 -0.246570 0.069446 -v -0.069447 -0.246570 0.103934 -v -0.122598 -0.246570 -0.024386 -v 0.069446 -0.246571 0.103933 -v 0.122598 -0.246571 0.024386 -v 0.103934 -0.246571 0.069446 -v 0.103933 -0.246571 -0.069446 -v -0.024386 -0.246570 0.122598 -v 0.122598 -0.246571 -0.024386 -v -0.024386 -0.246571 -0.122598 -v 0.024386 -0.246571 -0.122598 -v 0.069446 -0.246571 -0.103934 -v -0.103934 -0.246570 -0.069446 -v -0.069446 -0.246570 -0.103934 -v 0.024386 -0.246570 0.122598 -vt 0.139725 0.682190 -vt 0.199773 0.657318 -vt 0.232270 0.820694 -vt 0.093767 0.728149 -vt 0.068894 0.788196 -vt 0.068894 0.853192 -vt 0.093767 0.913239 -vt 0.139725 0.959198 -vt 0.199773 0.984070 -vt 0.264768 0.984070 -vt 0.324816 0.959198 -vt 0.370774 0.913239 -vt 0.395647 0.853192 -vt 0.395647 0.788196 -vt 0.370774 0.728149 -vt 0.324816 0.682190 -vt 0.264768 0.657318 -vt 0.487410 0.682190 -vt 0.547457 0.657318 -vt 0.579955 0.820694 -vt 0.441451 0.728149 -vt 0.416578 0.788196 -vt 0.416578 0.853192 -vt 0.441451 0.913239 -vt 0.487410 0.959198 -vt 0.547457 0.984070 -vt 0.612452 0.984070 -vt 0.672500 0.959198 -vt 0.718459 0.913239 -vt 0.743331 0.853192 -vt 0.743331 0.788196 -vt 0.718459 0.728149 -vt 0.672500 0.682190 -vt 0.612452 0.657318 -vt 0.125000 0.640625 -vt 0.125000 0.578125 -vt 0.187500 0.578125 -vt 0.187500 0.640625 -vt 0.250000 0.578125 -vt 0.250000 0.640625 -vt 0.062500 0.640625 -vt 0.062500 0.578125 -vt 0.000000 0.640625 -vt 0.000000 0.578125 -vt 0.937500 0.640625 -vt 0.937500 0.578125 -vt 1.000000 0.578125 -vt 1.000000 0.640625 -vt 0.875000 0.640625 -vt 0.875000 0.578125 -vt 0.812500 0.640625 -vt 0.812500 0.578125 -vt 0.750000 0.640625 -vt 0.750000 0.578125 -vt 0.687500 0.640625 -vt 0.687500 0.578125 -vt 0.625000 0.640625 -vt 0.625000 0.578125 -vt 0.562500 0.640625 -vt 0.562500 0.578125 -vt 0.500000 0.640625 -vt 0.500000 0.578125 -vt 0.437500 0.640625 -vt 0.437500 0.578125 -vt 0.375000 0.640625 -vt 0.375000 0.578125 -vt 0.312500 0.640625 -vt 0.312500 0.578125 -vt 0.187500 0.453125 -vt 0.125000 0.453125 -vt 0.139892 0.682190 -vt 0.199940 0.657318 -vt 0.232437 0.820694 -vt 0.093934 0.728149 -vt 0.069061 0.788196 -vt 0.069061 0.853192 -vt 0.093934 0.913239 -vt 0.139892 0.959198 -vt 0.199940 0.984070 -vt 0.264935 0.984070 -vt 0.324983 0.959198 -vt 0.370941 0.913239 -vt 0.395814 0.853192 -vt 0.395814 0.788196 -vt 0.370941 0.728149 -vt 0.324983 0.682190 -vt 0.264935 0.657318 -vt 0.875000 0.265625 -vt 0.875000 0.015625 -vt 0.937500 0.015625 -vt 0.937500 0.265625 -vt 0.812500 0.265625 -vt 0.812500 0.015625 -vt 0.625000 0.265625 -vt 0.625000 0.015625 -vt 0.687500 0.015625 -vt 0.687500 0.265625 -vt 0.437500 0.265625 -vt 0.437500 0.015625 -vt 0.500000 0.015625 -vt 0.500000 0.265625 -vt 0.375000 0.265625 -vt 0.375000 0.015625 -vt 0.312500 0.265625 -vt 0.312500 0.015625 -vt 0.250000 0.265625 -vt 0.250000 0.015625 -vt 0.062500 0.265625 -vt 0.062500 0.015625 -vt 0.125000 0.015625 -vt 0.125000 0.265625 -vt 0.000000 0.265625 -vt 0.000000 0.015625 -vt 1.000000 0.015625 -vt 1.000000 0.265625 -vt 0.187500 0.265625 -vt 0.187500 0.015625 -vt 0.750000 0.265625 -vt 0.750000 0.015625 -vt 0.562500 0.265625 -vt 0.562500 0.015625 -vt 0.000000 0.999989 -vt 0.000000 0.890943 -vt 0.041611 0.899043 -vt 0.941956 0.794823 -vt 0.941956 0.841698 -vt 0.895081 0.841698 -vt 0.895081 0.794823 -vt 0.848206 0.841698 -vt 0.848206 0.794823 -vt 0.801331 0.794823 -vt 0.801331 0.841698 -vt 0.754456 0.841698 -vt 0.754456 0.794823 -vt 0.988831 0.794823 -vt 0.988831 0.841698 -vt 0.941956 0.701073 -vt 0.941956 0.747948 -vt 0.895081 0.747948 -vt 0.895081 0.701073 -vt 0.041611 0.741571 -vt 0.000000 0.749671 -vt 0.076282 0.717645 -vt 0.102233 0.682226 -vt 0.109057 0.640614 -vt 0.754456 0.747948 -vt 0.801331 0.747948 -vt 0.848206 0.747948 -vt 0.848206 0.701073 -vt 0.941956 0.888573 -vt 0.988831 0.888573 -vt 0.895081 0.888573 -vt 0.848206 0.888573 -vt 0.076282 0.922969 -vt 0.102233 0.958388 -vt 0.109057 1.000000 -vt 0.801331 0.888573 -vt 0.754456 0.888573 -vt 0.801331 0.935448 -vt 0.754456 0.935448 -vt 0.754456 0.982323 -vt 0.801331 0.982323 -vt 0.848206 0.935448 -vt 0.848206 0.982323 -vt 0.895081 0.935448 -vt 0.895081 0.982323 -vt 0.941956 0.935448 -vt 0.941956 0.982323 -vt 0.988831 0.982323 -vt 0.988831 0.935448 -vt 0.801331 0.701073 -vt 0.754456 0.701073 -vt 0.250000 0.453125 -vt 0.875000 0.453125 -vt 0.937500 0.453125 -vt 0.750000 0.453125 -vt 0.812500 0.453125 -vt 0.562500 0.453125 -vt 0.625000 0.453125 -vt 0.687500 0.453125 -vt 0.500000 0.453125 -vt 0.437500 0.453125 -vt 0.375000 0.453125 -vt 0.312500 0.453125 -vt 0.062500 0.453125 -vt 0.000000 0.453125 -vt 1.000000 0.453125 -g pipe.000_Cylinder.001_metal -usemtl metal -s off -f 36/54 37/55 38/56 -f 39/57 36/54 38/56 -f 40/58 39/57 38/56 -f 41/59 40/58 38/56 -f 42/60 41/59 38/56 -f 43/61 42/60 38/56 -f 44/62 43/61 38/56 -f 45/63 44/62 38/56 -f 46/64 45/63 38/56 -f 47/65 46/64 38/56 -f 48/66 47/65 38/56 -f 49/67 48/66 38/56 -f 50/68 49/67 38/56 -f 51/69 50/68 38/56 -f 52/70 51/69 38/56 -f 53/71 54/72 55/73 -f 56/74 53/71 55/73 -f 57/75 56/74 55/73 -f 58/76 57/75 55/73 -f 59/77 58/76 55/73 -f 60/78 59/77 55/73 -f 61/79 60/78 55/73 -f 62/80 61/79 55/73 -f 63/81 62/80 55/73 -f 64/82 63/81 55/73 -f 65/83 64/82 55/73 -f 66/84 65/83 55/73 -f 67/85 66/84 55/73 -f 68/86 67/85 55/73 -f 69/87 68/86 55/73 -f 54/72 69/87 55/73 -f 37/55 52/70 38/56 -f 56/88 50/89 51/90 53/91 -f 53/91 51/90 52/92 54/93 -f 57/94 49/95 50/89 56/88 -f 58/96 48/97 49/95 57/94 -f 59/98 47/99 48/100 58/101 -f 60/102 46/103 47/99 59/98 -f 61/104 45/105 46/103 60/102 -f 62/106 44/107 45/105 61/104 -f 63/108 43/109 44/107 62/106 -f 64/110 42/111 43/109 63/108 -f 65/112 41/113 42/111 64/110 -f 66/114 40/115 41/113 65/112 -f 67/116 39/117 40/115 66/114 -f 68/118 36/119 39/117 67/116 -f 69/120 37/121 36/119 68/118 -f 54/93 52/92 37/121 69/120 -f 175/122 34/90 81/89 185/123 -f 102/124 103/125 104/126 -f 105/127 102/124 104/126 -f 106/128 105/127 104/126 -f 107/129 106/128 104/126 -f 108/130 107/129 104/126 -f 109/131 108/130 104/126 -f 110/132 109/131 104/126 -f 111/133 110/132 104/126 -f 112/134 111/133 104/126 -f 113/135 112/134 104/126 -f 114/136 113/135 104/126 -f 115/137 114/136 104/126 -f 116/138 115/137 104/126 -f 117/139 116/138 104/126 -f 118/140 117/139 104/126 -f 119/71 120/72 121/73 -f 122/74 119/71 121/73 -f 123/75 122/74 121/73 -f 124/76 123/75 121/73 -f 125/77 124/76 121/73 -f 126/78 125/77 121/73 -f 127/79 126/78 121/73 -f 128/80 127/79 121/73 -f 129/81 128/80 121/73 -f 130/82 129/81 121/73 -f 131/83 130/82 121/73 -f 132/84 131/83 121/73 -f 133/85 132/84 121/73 -f 134/86 133/85 121/73 -f 135/87 134/86 121/73 -f 120/72 135/87 121/73 -f 103/125 118/140 104/126 -f 122/88 116/89 117/90 119/91 -f 119/91 117/90 118/92 120/93 -f 123/94 115/95 116/89 122/88 -f 124/96 114/97 115/95 123/94 -f 125/98 113/99 114/100 124/101 -f 126/102 112/103 113/99 125/98 -f 127/104 111/105 112/103 126/102 -f 128/106 110/107 111/105 127/104 -f 129/108 109/109 110/107 128/106 -f 130/110 108/111 109/109 129/108 -f 131/112 107/113 108/111 130/110 -f 132/114 106/115 107/113 131/112 -f 133/116 105/117 106/115 132/114 -f 134/118 102/119 105/117 133/116 -f 135/120 103/121 102/119 134/118 -f 120/93 118/92 103/121 135/120 -f 136/141 137/142 138/143 139/144 -f 142/145 141/146 137/142 136/141 -f 145/147 144/148 147/149 146/150 -f 150/151 151/152 149/153 148/154 -f 152/155 153/156 151/152 150/151 -f 154/157 155/158 153/156 152/155 -f 101/159 100/160 155/158 154/157 -f 158/161 159/162 157/163 156/164 -f 160/165 161/166 159/162 158/161 -f 139/144 138/143 161/167 160/168 -f 35/169 99/170 100/160 101/159 -f 76/171 140/172 141/146 142/145 -f 162/173 143/174 144/148 145/147 -f 146/150 147/149 140/172 76/171 -f 148/154 149/153 143/174 162/173 -f 156/164 157/163 99/170 35/169 -f 76/175 72/176 168/177 -f 83/178 164/179 169/180 71/181 -f 71/181 169/180 170/182 70/183 -f 73/184 70/183 170/182 167/185 -f 73/184 167/185 168/186 72/187 -f 83/178 82/188 165/189 164/179 -f 82/190 81/191 166/192 165/193 -f 81/191 34/178 163/181 166/192 -f 35/96 163/194 34/195 -f 35/96 171/196 163/194 -f 35/96 96/197 171/196 -f 96/197 35/96 101/198 -f 154/199 90/200 96/184 101/187 -f 90/200 84/201 171/183 96/184 -f 166/192 163/181 171/183 84/201 -f 98/202 165/193 166/192 84/201 -f 97/203 164/179 165/189 98/204 -f 97/203 87/205 169/180 164/179 -f 87/205 88/206 170/182 169/180 -f 76/175 168/177 86/207 -f 76/175 86/207 94/208 -f 94/208 146/209 76/175 -f 167/185 85/210 86/211 168/186 -f 95/212 94/213 86/211 85/210 -f 85/210 167/185 170/182 88/206 -f 146/214 94/213 95/212 145/215 -f 95/212 85/210 88/206 89/216 -f 95/212 89/216 162/217 145/215 -f 93/218 89/216 88/206 87/205 -f 93/218 148/219 162/217 89/216 -f 97/203 92/220 93/218 87/205 -f 150/221 148/219 93/218 92/220 -f 152/222 150/221 92/220 91/223 -f 92/220 97/203 98/204 91/223 -f 91/224 98/202 84/201 90/200 -f 154/199 152/225 91/224 90/200 -f 34/90 175/122 172/226 35/92 -f 70/103 184/227 183/228 71/99 -f 72/107 181/229 179/230 73/105 -f 74/113 176/231 178/232 75/111 -f 76/109 177/233 181/229 72/107 -f 73/105 179/230 184/227 70/103 -f 75/111 178/232 177/233 76/109 -f 77/115 187/234 176/231 74/113 -f 78/117 180/235 187/234 77/115 -f 79/119 174/236 180/235 78/117 -f 80/121 173/237 174/236 79/119 -f 35/92 172/226 173/237 80/121 -f 82/95 186/238 185/123 81/89 -f 83/97 182/239 186/238 82/95 -f 71/99 183/228 182/240 83/100 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_valve_off.obj b/mods/ITEMS/pipeworks/models/pipeworks_valve_off.obj deleted file mode 100644 index fef2394..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_valve_off.obj +++ /dev/null @@ -1,441 +0,0 @@ -# Blender v2.72 (sub 0) OBJ File: 'pipe-valve-off.blend' -# www.blender.org -o Cube.003 -v -0.312500 0.281250 -0.062500 -v 0.093750 0.281250 -0.062500 -v 0.093750 0.281250 0.062500 -v -0.312500 0.281250 0.062500 -v -0.312500 0.343750 -0.062500 -v 0.093750 0.343750 -0.062500 -v 0.093750 0.343750 0.062500 -v -0.312500 0.343750 0.062500 -v -0.031250 0.250000 -0.031250 -v 0.031250 0.250000 -0.031250 -v 0.031250 0.250000 0.031250 -v -0.031250 0.250000 0.031250 -v -0.031250 0.281250 -0.031250 -v 0.031250 0.281250 -0.031250 -v 0.031250 0.281250 0.031250 -v -0.031250 0.281250 0.031250 -v -0.250000 -0.250000 -0.250000 -v 0.250000 -0.250000 -0.250000 -v 0.250000 -0.250000 0.250000 -v -0.250000 -0.250000 0.250000 -v -0.250000 0.250000 -0.250000 -v 0.250000 0.250000 -0.250000 -v 0.250000 0.250000 0.250000 -v -0.250000 0.250000 0.250000 -v -0.030483 -0.153248 0.468750 -v -0.030483 -0.153248 0.500000 -v 0.030483 -0.153248 0.468750 -v 0.030483 -0.153248 0.500000 -v 0.086808 -0.129917 0.468750 -v 0.086808 -0.129917 0.500000 -v 0.129917 -0.086808 0.468750 -v 0.129917 -0.086808 0.500000 -v 0.153248 -0.030483 0.468750 -v 0.153248 -0.030483 0.500000 -v 0.153248 0.030483 0.468750 -v 0.153248 0.030483 0.500000 -v 0.129917 0.086808 0.468750 -v 0.129917 0.086808 0.500000 -v 0.086808 0.129917 0.468750 -v 0.086808 0.129917 0.500000 -v 0.030483 0.153248 0.468750 -v 0.030483 0.153247 0.500000 -v -0.030483 0.153248 0.468750 -v -0.030483 0.153248 0.500000 -v -0.086808 0.129917 0.468750 -v -0.086808 0.129917 0.500000 -v -0.129917 0.086808 0.468750 -v -0.129917 0.086808 0.500000 -v -0.153248 0.030483 0.468750 -v -0.153248 0.030483 0.500000 -v -0.153248 -0.030483 0.468750 -v -0.153248 -0.030483 0.500000 -v -0.129917 -0.086808 0.468750 -v -0.129917 -0.086808 0.500000 -v -0.086808 -0.129917 0.468750 -v -0.086808 -0.129917 0.500000 -v -0.024386 -0.122598 0.468750 -v 0.024386 -0.122598 0.468750 -v 0.069446 -0.103934 0.468750 -v 0.103934 -0.069446 0.468750 -v 0.122598 -0.024386 0.468750 -v 0.122598 0.024386 0.468750 -v 0.103934 0.069446 0.468750 -v 0.069446 0.103934 0.468750 -v 0.024386 0.122598 0.468750 -v -0.024386 0.122598 0.468750 -v -0.069446 0.103934 0.468750 -v -0.103934 0.069446 0.468750 -v -0.122598 0.024386 0.468750 -v -0.122598 -0.024387 0.468750 -v -0.103934 -0.069447 0.468750 -v -0.069446 -0.103934 0.468750 -v -0.000000 -0.000000 0.468750 -v -0.000000 -0.000000 0.500000 -v 0.103934 -0.069446 -0.468750 -v 0.069447 -0.103933 -0.468750 -v 0.024387 -0.122598 -0.468750 -v -0.024386 -0.122598 -0.468750 -v -0.086808 -0.129917 -0.500000 -v -0.086808 -0.129917 -0.468750 -v -0.129917 -0.086808 -0.500000 -v -0.129917 -0.086808 -0.468750 -v -0.153247 -0.030483 -0.500000 -v -0.153247 -0.030483 -0.468750 -v -0.153247 0.030483 -0.500000 -v -0.153247 0.030483 -0.468750 -v -0.129917 0.086808 -0.500000 -v -0.129917 0.086808 -0.468750 -v -0.086808 0.129917 -0.500000 -v -0.086808 0.129917 -0.468750 -v -0.030483 0.153248 -0.500000 -v -0.030483 0.153248 -0.468750 -v 0.030483 0.153248 -0.500000 -v 0.030483 0.153248 -0.468750 -v 0.086808 0.129917 -0.500000 -v 0.086808 0.129917 -0.468750 -v 0.129917 0.086808 -0.500000 -v 0.129917 0.086808 -0.468750 -v 0.153248 0.030483 -0.500000 -v 0.153248 0.030483 -0.468750 -v 0.153248 -0.030483 -0.500000 -v 0.153248 -0.030483 -0.468750 -v 0.129917 -0.086807 -0.500000 -v 0.129917 -0.086808 -0.468750 -v 0.086808 -0.129917 -0.500000 -v 0.086808 -0.129917 -0.468750 -v 0.030483 -0.153247 -0.500000 -v 0.030483 -0.153247 -0.468750 -v -0.030483 -0.153247 -0.500000 -v -0.030483 -0.153247 -0.468750 -v 0.122598 -0.024386 -0.468750 -v 0.122598 0.024387 -0.468750 -v 0.103934 0.069447 -0.468750 -v 0.069447 0.103934 -0.468750 -v 0.024387 0.122598 -0.468750 -v -0.024386 0.122598 -0.468750 -v -0.069446 0.103934 -0.468750 -v -0.103933 0.069447 -0.468750 -v -0.122598 0.024387 -0.468750 -v -0.122598 -0.024386 -0.468750 -v -0.103933 -0.069446 -0.468750 -v -0.069446 -0.103933 -0.468750 -v 0.000000 0.000000 -0.468750 -v 0.000000 0.000000 -0.500000 -vt 0.265625 0.234375 -vt 0.468750 0.234375 -vt 0.468750 0.265625 -vt 0.265625 0.265625 -vt 0.265625 0.187500 -vt 0.328125 0.187500 -vt 0.328125 0.218750 -vt 0.265625 0.218750 -vt 0.468750 0.312500 -vt 0.265625 0.312500 -vt 0.265625 0.281250 -vt 0.468750 0.281250 -vt 0.406250 0.218750 -vt 0.343750 0.218750 -vt 0.343750 0.187500 -vt 0.406250 0.187500 -vt 0.468750 0.468750 -vt 0.265625 0.468750 -vt 0.265625 0.406250 -vt 0.468750 0.406250 -vt 0.468750 0.390625 -vt 0.265625 0.390625 -vt 0.265625 0.328125 -vt 0.468750 0.328125 -vt 0.039062 0.203125 -vt 0.007812 0.203125 -vt 0.007812 0.187500 -vt 0.039062 0.187500 -vt 0.085938 0.203125 -vt 0.054688 0.203125 -vt 0.054688 0.187500 -vt 0.085938 0.187500 -vt 0.148438 0.187500 -vt 0.179688 0.187500 -vt 0.179688 0.203125 -vt 0.148438 0.203125 -vt 0.132812 0.203125 -vt 0.101562 0.203125 -vt 0.101562 0.187500 -vt 0.132812 0.187500 -vt 0.515625 0.484375 -vt 0.515625 0.734375 -vt 0.265625 0.734375 -vt 0.265625 0.484375 -vt 0.000000 0.468750 -vt 0.000000 0.218750 -vt 0.250000 0.218750 -vt 0.250000 0.468750 -vt 0.515625 1.000000 -vt 0.265625 1.000000 -vt 0.265625 0.750000 -vt 0.515625 0.750000 -vt 0.250000 0.734375 -vt 0.000000 0.734375 -vt 0.000000 0.484375 -vt 0.250000 0.484375 -vt 0.781250 1.000000 -vt 0.531250 1.000000 -vt 0.531250 0.750000 -vt 0.781250 0.750000 -vt 0.000847 0.750015 -vt 0.250216 0.750015 -vt 0.250216 0.999385 -vt 0.000847 0.999385 -vt 0.867188 0.273438 -vt 0.835938 0.273438 -vt 0.835938 0.304688 -vt 0.867188 0.304688 -vt 0.804688 0.273438 -vt 0.804688 0.304688 -vt 0.773438 0.273438 -vt 0.773438 0.304688 -vt 0.742188 0.273438 -vt 0.742188 0.304688 -vt 0.710938 0.273438 -vt 0.710938 0.304688 -vt 0.679688 0.273438 -vt 0.679688 0.304688 -vt 0.648438 0.273438 -vt 0.648438 0.304688 -vt 0.617188 0.273438 -vt 0.617188 0.304688 -vt 0.585938 0.273438 -vt 0.585938 0.304688 -vt 0.554688 0.273438 -vt 0.554688 0.304688 -vt 0.523438 0.273438 -vt 0.523438 0.304688 -vt 0.492188 0.273438 -vt 0.492188 0.304688 -vt 0.992188 0.273438 -vt 0.960938 0.273438 -vt 0.960938 0.304688 -vt 0.992188 0.304688 -vt 0.929688 0.273438 -vt 0.929688 0.304688 -vt 0.898438 0.273438 -vt 0.898438 0.304688 -vt 0.600936 0.328499 -vt 0.584692 0.410164 -vt 0.568448 0.328499 -vt 0.757628 0.328499 -vt 0.773872 0.410164 -vt 0.790117 0.328499 -vt 0.820132 0.340932 -vt 0.843105 0.363905 -vt 0.855537 0.393920 -vt 0.855537 0.426408 -vt 0.843105 0.456424 -vt 0.820132 0.479396 -vt 0.790117 0.491829 -vt 0.757628 0.491829 -vt 0.727613 0.479396 -vt 0.704640 0.456424 -vt 0.692207 0.426408 -vt 0.692207 0.393920 -vt 0.704640 0.363905 -vt 0.727613 0.340932 -vt 0.538432 0.340932 -vt 0.515460 0.363905 -vt 0.503027 0.393920 -vt 0.503027 0.426408 -vt 0.515460 0.456424 -vt 0.538432 0.479396 -vt 0.568448 0.491829 -vt 0.600936 0.491829 -vt 0.630951 0.479396 -vt 0.653924 0.456424 -vt 0.666357 0.426408 -vt 0.666357 0.393920 -vt 0.653924 0.363905 -vt 0.630951 0.340932 -vt 0.585938 0.257812 -vt 0.585938 0.007812 -vt 0.617188 0.007812 -vt 0.617188 0.257812 -vt 0.929688 0.257812 -vt 0.929688 0.007812 -vt 0.960938 0.007812 -vt 0.960938 0.257812 -vt 0.867188 0.257812 -vt 0.867188 0.007812 -vt 0.898438 0.007812 -vt 0.898438 0.257812 -vt 0.773438 0.257812 -vt 0.773438 0.007812 -vt 0.804688 0.007812 -vt 0.804688 0.257812 -vt 0.835938 0.257812 -vt 0.835938 0.007812 -vt 0.742188 0.257812 -vt 0.742188 0.007812 -vt 0.710938 0.257812 -vt 0.710938 0.007812 -vt 0.679688 0.257812 -vt 0.679688 0.007812 -vt 0.648438 0.257812 -vt 0.648438 0.007812 -vt 0.554688 0.257812 -vt 0.554688 0.007812 -vt 0.523438 0.257812 -vt 0.523438 0.007812 -vt 0.492188 0.257812 -vt 0.492188 0.007812 -vt 0.992188 0.007812 -vt 0.992188 0.257812 -vn 0.000000 0.000000 -1.000000 -vn 1.000000 0.000000 0.000000 -vn -0.000000 0.000000 1.000000 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -vn 0.382700 -0.923900 -0.000000 -vn 0.707100 -0.707100 -0.000000 -vn 0.923900 -0.382700 0.000000 -vn 0.923900 0.382700 0.000000 -vn 0.707100 0.707100 0.000000 -vn 0.382700 0.923900 0.000000 -vn -0.382700 0.923900 0.000000 -vn -0.707100 0.707100 0.000000 -vn -0.923900 0.382700 -0.000000 -vn -0.923900 -0.382700 -0.000000 -vn -0.382700 -0.923900 -0.000000 -vn -0.707100 -0.707100 -0.000000 -g Cube.003_Cube.003_None -s off -f 5/1/1 6/2/1 2/3/1 1/4/1 -f 6/5/2 7/6/2 3/7/2 2/8/2 -f 7/9/3 8/10/3 4/11/3 3/12/3 -f 8/13/4 5/14/4 1/15/4 4/16/4 -f 1/17/5 2/18/5 3/19/5 4/20/5 -f 8/21/6 7/22/6 6/23/6 5/24/6 -f 13/25/1 14/26/1 10/27/1 9/28/1 -f 14/29/2 15/30/2 11/31/2 10/32/2 -f 15/33/3 16/34/3 12/35/3 11/36/3 -f 16/37/4 13/38/4 9/39/4 12/40/4 -f 21/41/1 22/42/1 18/43/1 17/44/1 -f 22/45/2 23/46/2 19/47/2 18/48/2 -f 23/49/3 24/50/3 20/51/3 19/52/3 -f 24/53/4 21/54/4 17/55/4 20/56/4 -f 17/57/5 18/58/5 19/59/5 20/60/5 -f 24/61/6 23/62/6 22/63/6 21/64/6 -f 25/65/5 27/66/5 28/67/5 26/68/5 -f 27/66/7 29/69/7 30/70/7 28/67/7 -f 29/69/8 31/71/8 32/72/8 30/70/8 -f 31/71/9 33/73/9 34/74/9 32/72/9 -f 33/73/2 35/75/2 36/76/2 34/74/2 -f 35/75/10 37/77/10 38/78/10 36/76/10 -f 37/77/11 39/79/11 40/80/11 38/78/11 -f 39/79/12 41/81/12 42/82/12 40/80/12 -f 41/81/6 43/83/6 44/84/6 42/82/6 -f 43/83/13 45/85/13 46/86/13 44/84/13 -f 45/85/14 47/87/14 48/88/14 46/86/14 -f 47/87/15 49/89/15 50/90/15 48/88/15 -f 49/91/4 51/92/4 52/93/4 50/94/4 -f 51/92/16 53/95/16 54/96/16 52/93/16 -f 55/97/17 25/65/17 26/68/17 56/98/17 -f 53/95/18 55/97/18 56/98/18 54/96/18 -f 28/99/3 74/100/3 26/101/3 -f 25/102/1 73/103/1 27/104/1 -f 27/104/1 73/103/1 29/105/1 -f 29/105/1 73/103/1 31/106/1 -f 31/106/1 73/103/1 33/107/1 -f 33/107/1 73/103/1 35/108/1 -f 35/108/1 73/103/1 37/109/1 -f 37/109/1 73/103/1 39/110/1 -f 39/110/1 73/103/1 41/111/1 -f 41/111/1 73/103/1 43/112/1 -f 43/112/1 73/103/1 45/113/1 -f 45/113/1 73/103/1 47/114/1 -f 47/114/1 73/103/1 49/115/1 -f 49/115/1 73/103/1 51/116/1 -f 51/116/1 73/103/1 53/117/1 -f 53/117/1 73/103/1 55/118/1 -f 55/118/1 73/103/1 25/102/1 -f 26/101/3 74/100/3 56/119/3 -f 56/119/3 74/100/3 54/120/3 -f 54/120/3 74/100/3 52/121/3 -f 52/121/3 74/100/3 50/122/3 -f 50/122/3 74/100/3 48/123/3 -f 48/123/3 74/100/3 46/124/3 -f 46/124/3 74/100/3 44/125/3 -f 44/125/3 74/100/3 42/126/3 -f 42/126/3 74/100/3 40/127/3 -f 40/127/3 74/100/3 38/128/3 -f 38/128/3 74/100/3 36/129/3 -f 36/129/3 74/100/3 34/130/3 -f 34/130/3 74/100/3 32/131/3 -f 32/131/3 74/100/3 30/132/3 -f 30/132/3 74/100/3 28/99/3 -f 65/133/6 115/134/6 116/135/6 66/136/6 -f 105/119/1 107/101/1 124/100/1 -f 103/120/1 105/119/1 124/100/1 -f 101/121/1 103/120/1 124/100/1 -f 99/122/1 101/121/1 124/100/1 -f 97/123/1 99/122/1 124/100/1 -f 95/124/1 97/123/1 124/100/1 -f 93/125/1 95/124/1 124/100/1 -f 91/126/1 93/125/1 124/100/1 -f 89/127/1 91/126/1 124/100/1 -f 87/128/1 89/127/1 124/100/1 -f 85/129/1 87/128/1 124/100/1 -f 83/130/1 85/129/1 124/100/1 -f 81/131/1 83/130/1 124/100/1 -f 79/132/1 81/131/1 124/100/1 -f 109/99/1 79/132/1 124/100/1 -f 80/118/3 110/102/3 123/103/3 -f 82/117/3 80/118/3 123/103/3 -f 84/116/3 82/117/3 123/103/3 -f 86/115/3 84/116/3 123/103/3 -f 88/114/3 86/115/3 123/103/3 -f 90/113/3 88/114/3 123/103/3 -f 92/112/3 90/113/3 123/103/3 -f 94/111/3 92/112/3 123/103/3 -f 96/110/3 94/111/3 123/103/3 -f 98/109/3 96/110/3 123/103/3 -f 100/108/3 98/109/3 123/103/3 -f 102/107/3 100/108/3 123/103/3 -f 104/106/3 102/107/3 123/103/3 -f 106/105/3 104/106/3 123/103/3 -f 108/104/3 106/105/3 123/103/3 -f 110/102/3 108/104/3 123/103/3 -f 107/101/1 109/99/1 124/100/1 -f 82/86/18 81/85/18 79/83/18 80/84/18 -f 80/84/17 79/83/17 109/81/17 110/82/17 -f 84/88/16 83/87/16 81/85/16 82/86/16 -f 86/90/4 85/89/4 83/87/4 84/88/4 -f 88/93/15 87/92/15 85/91/15 86/94/15 -f 90/96/14 89/95/14 87/92/14 88/93/14 -f 92/98/13 91/97/13 89/95/13 90/96/13 -f 94/68/6 93/65/6 91/97/6 92/98/6 -f 96/67/12 95/66/12 93/65/12 94/68/12 -f 98/70/11 97/69/11 95/66/11 96/67/11 -f 100/72/10 99/71/10 97/69/10 98/70/10 -f 102/74/2 101/73/2 99/71/2 100/72/2 -f 104/76/9 103/75/9 101/73/9 102/74/9 -f 106/78/8 105/77/8 103/75/8 104/76/8 -f 108/80/7 107/79/7 105/77/7 106/78/7 -f 110/82/5 109/81/5 107/79/5 108/80/5 -f 60/137/9 75/138/9 111/139/9 61/140/9 -f 58/141/7 77/142/7 76/143/7 59/144/7 -f 71/145/18 121/146/18 122/147/18 72/148/18 -f 57/149/5 78/150/5 77/142/5 58/141/5 -f 59/144/8 76/143/8 75/138/8 60/137/8 -f 72/148/17 122/147/17 78/150/17 57/149/17 -f 70/151/16 120/152/16 121/146/16 71/145/16 -f 69/153/4 119/154/4 120/152/4 70/151/4 -f 68/155/15 118/156/15 119/154/15 69/153/15 -f 67/157/14 117/158/14 118/156/14 68/155/14 -f 66/136/13 116/135/13 117/158/13 67/157/13 -f 64/159/12 114/160/12 115/134/12 65/133/12 -f 63/161/11 113/162/11 114/160/11 64/159/11 -f 62/163/10 112/164/10 113/162/10 63/161/10 -f 61/140/2 111/139/2 112/165/2 62/166/2 diff --git a/mods/ITEMS/pipeworks/models/pipeworks_valve_on.obj b/mods/ITEMS/pipeworks/models/pipeworks_valve_on.obj deleted file mode 100644 index 0c8f8b0..0000000 --- a/mods/ITEMS/pipeworks/models/pipeworks_valve_on.obj +++ /dev/null @@ -1,441 +0,0 @@ -# Blender v2.72 (sub 0) OBJ File: 'pipe-valve-on.blend' -# www.blender.org -o Cube.003 -v 0.062500 0.281250 -0.312500 -v 0.062500 0.281250 0.093750 -v -0.062500 0.281250 0.093750 -v -0.062500 0.281250 -0.312500 -v 0.062500 0.343750 -0.312500 -v 0.062500 0.343750 0.093750 -v -0.062500 0.343750 0.093750 -v -0.062500 0.343750 -0.312500 -v -0.031250 0.250000 -0.031250 -v 0.031250 0.250000 -0.031250 -v 0.031250 0.250000 0.031250 -v -0.031250 0.250000 0.031250 -v -0.031250 0.281250 -0.031250 -v 0.031250 0.281250 -0.031250 -v 0.031250 0.281250 0.031250 -v -0.031250 0.281250 0.031250 -v -0.250000 -0.250000 -0.250000 -v 0.250000 -0.250000 -0.250000 -v 0.250000 -0.250000 0.250000 -v -0.250000 -0.250000 0.250000 -v -0.250000 0.250000 -0.250000 -v 0.250000 0.250000 -0.250000 -v 0.250000 0.250000 0.250000 -v -0.250000 0.250000 0.250000 -v -0.030483 -0.153248 0.468750 -v -0.030483 -0.153248 0.500000 -v 0.030483 -0.153248 0.468750 -v 0.030483 -0.153248 0.500000 -v 0.086808 -0.129917 0.468750 -v 0.086808 -0.129917 0.500000 -v 0.129917 -0.086808 0.468750 -v 0.129917 -0.086808 0.500000 -v 0.153248 -0.030483 0.468750 -v 0.153248 -0.030483 0.500000 -v 0.153248 0.030483 0.468750 -v 0.153248 0.030483 0.500000 -v 0.129917 0.086808 0.468750 -v 0.129917 0.086808 0.500000 -v 0.086808 0.129917 0.468750 -v 0.086808 0.129917 0.500000 -v 0.030483 0.153248 0.468750 -v 0.030483 0.153247 0.500000 -v -0.030483 0.153248 0.468750 -v -0.030483 0.153248 0.500000 -v -0.086808 0.129917 0.468750 -v -0.086808 0.129917 0.500000 -v -0.129917 0.086808 0.468750 -v -0.129917 0.086808 0.500000 -v -0.153248 0.030483 0.468750 -v -0.153248 0.030483 0.500000 -v -0.153248 -0.030483 0.468750 -v -0.153248 -0.030483 0.500000 -v -0.129917 -0.086808 0.468750 -v -0.129917 -0.086808 0.500000 -v -0.086808 -0.129917 0.468750 -v -0.086808 -0.129917 0.500000 -v -0.024386 -0.122598 0.468750 -v 0.024386 -0.122598 0.468750 -v 0.069446 -0.103934 0.468750 -v 0.103934 -0.069446 0.468750 -v 0.122598 -0.024386 0.468750 -v 0.122598 0.024386 0.468750 -v 0.103934 0.069446 0.468750 -v 0.069446 0.103934 0.468750 -v 0.024386 0.122598 0.468750 -v -0.024386 0.122598 0.468750 -v -0.069446 0.103934 0.468750 -v -0.103934 0.069446 0.468750 -v -0.122598 0.024386 0.468750 -v -0.122598 -0.024387 0.468750 -v -0.103934 -0.069447 0.468750 -v -0.069446 -0.103934 0.468750 -v -0.000000 -0.000000 0.468750 -v -0.000000 -0.000000 0.500000 -v 0.103934 -0.069446 -0.468750 -v 0.069447 -0.103933 -0.468750 -v 0.024387 -0.122598 -0.468750 -v -0.024386 -0.122598 -0.468750 -v -0.086808 -0.129917 -0.500000 -v -0.086808 -0.129917 -0.468750 -v -0.129917 -0.086808 -0.500000 -v -0.129917 -0.086808 -0.468750 -v -0.153247 -0.030483 -0.500000 -v -0.153247 -0.030483 -0.468750 -v -0.153247 0.030483 -0.500000 -v -0.153247 0.030483 -0.468750 -v -0.129917 0.086808 -0.500000 -v -0.129917 0.086808 -0.468750 -v -0.086808 0.129917 -0.500000 -v -0.086808 0.129917 -0.468750 -v -0.030483 0.153248 -0.500000 -v -0.030483 0.153248 -0.468750 -v 0.030483 0.153248 -0.500000 -v 0.030483 0.153248 -0.468750 -v 0.086808 0.129917 -0.500000 -v 0.086808 0.129917 -0.468750 -v 0.129917 0.086808 -0.500000 -v 0.129917 0.086808 -0.468750 -v 0.153248 0.030483 -0.500000 -v 0.153248 0.030483 -0.468750 -v 0.153248 -0.030483 -0.500000 -v 0.153248 -0.030483 -0.468750 -v 0.129917 -0.086807 -0.500000 -v 0.129917 -0.086808 -0.468750 -v 0.086808 -0.129917 -0.500000 -v 0.086808 -0.129917 -0.468750 -v 0.030483 -0.153247 -0.500000 -v 0.030483 -0.153247 -0.468750 -v -0.030483 -0.153247 -0.500000 -v -0.030483 -0.153247 -0.468750 -v 0.122598 -0.024386 -0.468750 -v 0.122598 0.024387 -0.468750 -v 0.103934 0.069447 -0.468750 -v 0.069447 0.103934 -0.468750 -v 0.024387 0.122598 -0.468750 -v -0.024386 0.122598 -0.468750 -v -0.069446 0.103934 -0.468750 -v -0.103933 0.069447 -0.468750 -v -0.122598 0.024387 -0.468750 -v -0.122598 -0.024386 -0.468750 -v -0.103933 -0.069446 -0.468750 -v -0.069446 -0.103933 -0.468750 -v 0.000000 0.000000 -0.468750 -v 0.000000 0.000000 -0.500000 -vt 0.265625 0.234375 -vt 0.468750 0.234375 -vt 0.468750 0.265625 -vt 0.265625 0.265625 -vt 0.265625 0.187500 -vt 0.328125 0.187500 -vt 0.328125 0.218750 -vt 0.265625 0.218750 -vt 0.468750 0.312500 -vt 0.265625 0.312500 -vt 0.265625 0.281250 -vt 0.468750 0.281250 -vt 0.406250 0.218750 -vt 0.343750 0.218750 -vt 0.343750 0.187500 -vt 0.406250 0.187500 -vt 0.468750 0.468750 -vt 0.265625 0.468750 -vt 0.265625 0.406250 -vt 0.468750 0.406250 -vt 0.468750 0.390625 -vt 0.265625 0.390625 -vt 0.265625 0.328125 -vt 0.468750 0.328125 -vt 0.039062 0.203125 -vt 0.007812 0.203125 -vt 0.007812 0.187500 -vt 0.039062 0.187500 -vt 0.085938 0.203125 -vt 0.054688 0.203125 -vt 0.054688 0.187500 -vt 0.085938 0.187500 -vt 0.148438 0.187500 -vt 0.179688 0.187500 -vt 0.179688 0.203125 -vt 0.148438 0.203125 -vt 0.132812 0.203125 -vt 0.101562 0.203125 -vt 0.101562 0.187500 -vt 0.132812 0.187500 -vt 0.515625 0.484375 -vt 0.515625 0.734375 -vt 0.265625 0.734375 -vt 0.265625 0.484375 -vt 0.000000 0.468750 -vt 0.000000 0.218750 -vt 0.250000 0.218750 -vt 0.250000 0.468750 -vt 0.515625 1.000000 -vt 0.265625 1.000000 -vt 0.265625 0.750000 -vt 0.515625 0.750000 -vt 0.250000 0.734375 -vt 0.000000 0.734375 -vt 0.000000 0.484375 -vt 0.250000 0.484375 -vt 0.781250 1.000000 -vt 0.531250 1.000000 -vt 0.531250 0.750000 -vt 0.781250 0.750000 -vt 0.000847 0.750015 -vt 0.250216 0.750015 -vt 0.250216 0.999385 -vt 0.000847 0.999385 -vt 0.867188 0.273438 -vt 0.835938 0.273438 -vt 0.835938 0.304688 -vt 0.867188 0.304688 -vt 0.804688 0.273438 -vt 0.804688 0.304688 -vt 0.773438 0.273438 -vt 0.773438 0.304688 -vt 0.742188 0.273438 -vt 0.742188 0.304688 -vt 0.710938 0.273438 -vt 0.710938 0.304688 -vt 0.679688 0.273438 -vt 0.679688 0.304688 -vt 0.648438 0.273438 -vt 0.648438 0.304688 -vt 0.617188 0.273438 -vt 0.617188 0.304688 -vt 0.585938 0.273438 -vt 0.585938 0.304688 -vt 0.554688 0.273438 -vt 0.554688 0.304688 -vt 0.523438 0.273438 -vt 0.523438 0.304688 -vt 0.492188 0.273438 -vt 0.492188 0.304688 -vt 0.992188 0.273438 -vt 0.960938 0.273438 -vt 0.960938 0.304688 -vt 0.992188 0.304688 -vt 0.929688 0.273438 -vt 0.929688 0.304688 -vt 0.898438 0.273438 -vt 0.898438 0.304688 -vt 0.600936 0.328499 -vt 0.584692 0.410164 -vt 0.568448 0.328499 -vt 0.757628 0.328499 -vt 0.773872 0.410164 -vt 0.790117 0.328499 -vt 0.820132 0.340932 -vt 0.843105 0.363905 -vt 0.855537 0.393920 -vt 0.855537 0.426408 -vt 0.843105 0.456424 -vt 0.820132 0.479396 -vt 0.790117 0.491829 -vt 0.757628 0.491829 -vt 0.727613 0.479396 -vt 0.704640 0.456424 -vt 0.692207 0.426408 -vt 0.692207 0.393920 -vt 0.704640 0.363905 -vt 0.727613 0.340932 -vt 0.538432 0.340932 -vt 0.515460 0.363905 -vt 0.503027 0.393920 -vt 0.503027 0.426408 -vt 0.515460 0.456424 -vt 0.538432 0.479396 -vt 0.568448 0.491829 -vt 0.600936 0.491829 -vt 0.630951 0.479396 -vt 0.653924 0.456424 -vt 0.666357 0.426408 -vt 0.666357 0.393920 -vt 0.653924 0.363905 -vt 0.630951 0.340932 -vt 0.585938 0.257812 -vt 0.585938 0.007812 -vt 0.617188 0.007812 -vt 0.617188 0.257812 -vt 0.929688 0.257812 -vt 0.929688 0.007812 -vt 0.960938 0.007812 -vt 0.960938 0.257812 -vt 0.867188 0.257812 -vt 0.867188 0.007812 -vt 0.898438 0.007812 -vt 0.898438 0.257812 -vt 0.773438 0.257812 -vt 0.773438 0.007812 -vt 0.804688 0.007812 -vt 0.804688 0.257812 -vt 0.835938 0.257812 -vt 0.835938 0.007812 -vt 0.742188 0.257812 -vt 0.742188 0.007812 -vt 0.710938 0.257812 -vt 0.710938 0.007812 -vt 0.679688 0.257812 -vt 0.679688 0.007812 -vt 0.648438 0.257812 -vt 0.648438 0.007812 -vt 0.554688 0.257812 -vt 0.554688 0.007812 -vt 0.523438 0.257812 -vt 0.523438 0.007812 -vt 0.492188 0.257812 -vt 0.492188 0.007812 -vt 0.992188 0.007812 -vt 0.992188 0.257812 -vn 1.000000 0.000000 0.000000 -vn -0.000000 0.000000 1.000000 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 -0.000000 -vn 0.000000 1.000000 -0.000000 -vn 0.382700 -0.923900 -0.000000 -vn 0.707100 -0.707100 -0.000000 -vn 0.923900 -0.382700 0.000000 -vn 0.923900 0.382700 0.000000 -vn 0.707100 0.707100 0.000000 -vn 0.382700 0.923900 0.000000 -vn -0.382700 0.923900 0.000000 -vn -0.707100 0.707100 0.000000 -vn -0.923900 0.382700 -0.000000 -vn -0.923900 -0.382700 -0.000000 -vn -0.382700 -0.923900 -0.000000 -vn -0.707100 -0.707100 -0.000000 -g Cube.003_Cube.003_None -s off -f 5/1/1 6/2/1 2/3/1 1/4/1 -f 6/5/2 7/6/2 3/7/2 2/8/2 -f 7/9/3 8/10/3 4/11/3 3/12/3 -f 8/13/4 5/14/4 1/15/4 4/16/4 -f 1/17/5 2/18/5 3/19/5 4/20/5 -f 8/21/6 7/22/6 6/23/6 5/24/6 -f 13/25/4 14/26/4 10/27/4 9/28/4 -f 14/29/1 15/30/1 11/31/1 10/32/1 -f 15/33/2 16/34/2 12/35/2 11/36/2 -f 16/37/3 13/38/3 9/39/3 12/40/3 -f 21/41/4 22/42/4 18/43/4 17/44/4 -f 22/45/1 23/46/1 19/47/1 18/48/1 -f 23/49/2 24/50/2 20/51/2 19/52/2 -f 24/53/3 21/54/3 17/55/3 20/56/3 -f 17/57/5 18/58/5 19/59/5 20/60/5 -f 24/61/6 23/62/6 22/63/6 21/64/6 -f 25/65/5 27/66/5 28/67/5 26/68/5 -f 27/66/7 29/69/7 30/70/7 28/67/7 -f 29/69/8 31/71/8 32/72/8 30/70/8 -f 31/71/9 33/73/9 34/74/9 32/72/9 -f 33/73/1 35/75/1 36/76/1 34/74/1 -f 35/75/10 37/77/10 38/78/10 36/76/10 -f 37/77/11 39/79/11 40/80/11 38/78/11 -f 39/79/12 41/81/12 42/82/12 40/80/12 -f 41/81/6 43/83/6 44/84/6 42/82/6 -f 43/83/13 45/85/13 46/86/13 44/84/13 -f 45/85/14 47/87/14 48/88/14 46/86/14 -f 47/87/15 49/89/15 50/90/15 48/88/15 -f 49/91/3 51/92/3 52/93/3 50/94/3 -f 51/92/16 53/95/16 54/96/16 52/93/16 -f 55/97/17 25/65/17 26/68/17 56/98/17 -f 53/95/18 55/97/18 56/98/18 54/96/18 -f 28/99/2 74/100/2 26/101/2 -f 25/102/4 73/103/4 27/104/4 -f 27/104/4 73/103/4 29/105/4 -f 29/105/4 73/103/4 31/106/4 -f 31/106/4 73/103/4 33/107/4 -f 33/107/4 73/103/4 35/108/4 -f 35/108/4 73/103/4 37/109/4 -f 37/109/4 73/103/4 39/110/4 -f 39/110/4 73/103/4 41/111/4 -f 41/111/4 73/103/4 43/112/4 -f 43/112/4 73/103/4 45/113/4 -f 45/113/4 73/103/4 47/114/4 -f 47/114/4 73/103/4 49/115/4 -f 49/115/4 73/103/4 51/116/4 -f 51/116/4 73/103/4 53/117/4 -f 53/117/4 73/103/4 55/118/4 -f 55/118/4 73/103/4 25/102/4 -f 26/101/2 74/100/2 56/119/2 -f 56/119/2 74/100/2 54/120/2 -f 54/120/2 74/100/2 52/121/2 -f 52/121/2 74/100/2 50/122/2 -f 50/122/2 74/100/2 48/123/2 -f 48/123/2 74/100/2 46/124/2 -f 46/124/2 74/100/2 44/125/2 -f 44/125/2 74/100/2 42/126/2 -f 42/126/2 74/100/2 40/127/2 -f 40/127/2 74/100/2 38/128/2 -f 38/128/2 74/100/2 36/129/2 -f 36/129/2 74/100/2 34/130/2 -f 34/130/2 74/100/2 32/131/2 -f 32/131/2 74/100/2 30/132/2 -f 30/132/2 74/100/2 28/99/2 -f 65/133/6 115/134/6 116/135/6 66/136/6 -f 105/119/4 107/101/4 124/100/4 -f 103/120/4 105/119/4 124/100/4 -f 101/121/4 103/120/4 124/100/4 -f 99/122/4 101/121/4 124/100/4 -f 97/123/4 99/122/4 124/100/4 -f 95/124/4 97/123/4 124/100/4 -f 93/125/4 95/124/4 124/100/4 -f 91/126/4 93/125/4 124/100/4 -f 89/127/4 91/126/4 124/100/4 -f 87/128/4 89/127/4 124/100/4 -f 85/129/4 87/128/4 124/100/4 -f 83/130/4 85/129/4 124/100/4 -f 81/131/4 83/130/4 124/100/4 -f 79/132/4 81/131/4 124/100/4 -f 109/99/4 79/132/4 124/100/4 -f 80/118/2 110/102/2 123/103/2 -f 82/117/2 80/118/2 123/103/2 -f 84/116/2 82/117/2 123/103/2 -f 86/115/2 84/116/2 123/103/2 -f 88/114/2 86/115/2 123/103/2 -f 90/113/2 88/114/2 123/103/2 -f 92/112/2 90/113/2 123/103/2 -f 94/111/2 92/112/2 123/103/2 -f 96/110/2 94/111/2 123/103/2 -f 98/109/2 96/110/2 123/103/2 -f 100/108/2 98/109/2 123/103/2 -f 102/107/2 100/108/2 123/103/2 -f 104/106/2 102/107/2 123/103/2 -f 106/105/2 104/106/2 123/103/2 -f 108/104/2 106/105/2 123/103/2 -f 110/102/2 108/104/2 123/103/2 -f 107/101/4 109/99/4 124/100/4 -f 82/86/18 81/85/18 79/83/18 80/84/18 -f 80/84/17 79/83/17 109/81/17 110/82/17 -f 84/88/16 83/87/16 81/85/16 82/86/16 -f 86/90/3 85/89/3 83/87/3 84/88/3 -f 88/93/15 87/92/15 85/91/15 86/94/15 -f 90/96/14 89/95/14 87/92/14 88/93/14 -f 92/98/13 91/97/13 89/95/13 90/96/13 -f 94/68/6 93/65/6 91/97/6 92/98/6 -f 96/67/12 95/66/12 93/65/12 94/68/12 -f 98/70/11 97/69/11 95/66/11 96/67/11 -f 100/72/10 99/71/10 97/69/10 98/70/10 -f 102/74/1 101/73/1 99/71/1 100/72/1 -f 104/76/9 103/75/9 101/73/9 102/74/9 -f 106/78/8 105/77/8 103/75/8 104/76/8 -f 108/80/7 107/79/7 105/77/7 106/78/7 -f 110/82/5 109/81/5 107/79/5 108/80/5 -f 60/137/9 75/138/9 111/139/9 61/140/9 -f 58/141/7 77/142/7 76/143/7 59/144/7 -f 71/145/18 121/146/18 122/147/18 72/148/18 -f 57/149/5 78/150/5 77/142/5 58/141/5 -f 59/144/8 76/143/8 75/138/8 60/137/8 -f 72/148/17 122/147/17 78/150/17 57/149/17 -f 70/151/16 120/152/16 121/146/16 71/145/16 -f 69/153/3 119/154/3 120/152/3 70/151/3 -f 68/155/15 118/156/15 119/154/15 69/153/15 -f 67/157/14 117/158/14 118/156/14 68/155/14 -f 66/136/13 116/135/13 117/158/13 67/157/13 -f 64/159/12 114/160/12 115/134/12 65/133/12 -f 63/161/11 113/162/11 114/160/11 64/159/11 -f 62/163/10 112/164/10 113/162/10 63/161/10 -f 61/140/1 111/139/1 112/165/1 62/166/1 diff --git a/mods/ITEMS/pipeworks/pipes.lua b/mods/ITEMS/pipeworks/pipes.lua deleted file mode 100644 index 9cd7c00..0000000 --- a/mods/ITEMS/pipeworks/pipes.lua +++ /dev/null @@ -1,228 +0,0 @@ --- This file supplies the steel pipes - -local REGISTER_COMPATIBILITY = true - -local pipes_empty_nodenames = {} -local pipes_full_nodenames = {} - -local vti = {4, 3, 2, 1, 6, 5} -local cconnects = {{}, {1}, {1, 2}, {1, 3}, {1, 3, 5}, {1, 2, 3}, {1, 2, 3, 5}, {1, 2, 3, 4}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5, 6}} -for index, connects in ipairs(cconnects) do - local outsel = {} - local jx = 0 - local jy = 0 - local jz = 0 - for _, v in ipairs(connects) do - if v == 1 or v == 2 then - jx = jx + 1 - elseif v == 3 or v == 4 then - jy = jy + 1 - else - jz = jz + 1 - end - table.insert(outsel, pipeworks.pipe_selectboxes[v]) - end - - if #connects == 1 then - local v = connects[1] - v = v-1 + 2*(v%2) -- Opposite side - end - - local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1} - local pipedesc = "Pipe segement".." "..dump(connects).."... You hacker, you." - local image = nil - - if #connects == 0 then - pgroups = {snappy = 3, tube = 1} - pipedesc = "Pipe segment" - image = "pipeworks_pipe_inv.png" - end - - local outimg_e = { "pipeworks_pipe_plain.png" } - local outimg_l = { "pipeworks_pipe_plain.png" } - - if index == 3 then - outimg_e = { "pipeworks_pipe_3_empty.png" } - outimg_l = { "pipeworks_pipe_3_loaded.png" } - end - - local mesh = "pipeworks_pipe_"..index..".obj" - - if index == 1 then - mesh = "pipeworks_pipe_3.obj" - end - - minetest.register_node("pipeworks:pipe_"..index.."_empty", { - description = pipedesc, - drawtype = "mesh", - mesh = mesh, - tiles = outimg_e, - sunlight_propagates = true, - inventory_image = image, - wield_image = image, - paramtype = "light", - paramtype2 = "facedir", - selection_box = { - type = "fixed", - fixed = outsel - }, - collision_box = { - type = "fixed", - fixed = outsel - }, - groups = pgroups, - sounds = default.node_sound_wood_defaults(), - walkable = true, - drop = "pipeworks:pipe_1_empty", - after_place_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_rotate = false - }) - - local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1} - - minetest.register_node("pipeworks:pipe_"..index.."_loaded", { - description = pipedesc, - drawtype = "mesh", - mesh = mesh, - tiles = outimg_l, - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "facedir", - selection_box = { - type = "fixed", - fixed = outsel - }, - collision_box = { - type = "fixed", - fixed = outsel - }, - groups = pgroups, - sounds = default.node_sound_wood_defaults(), - walkable = true, - drop = "pipeworks:pipe_1_empty", - after_place_node = function(pos) - minetest.set_node(pos, { name = "pipeworks:pipe_"..index.."_empty" }) - pipeworks.scan_for_pipe_objects(pos) - end, - after_dig_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_rotate = false - }) - - table.insert(pipes_empty_nodenames, "pipeworks:pipe_"..index.."_empty") - table.insert(pipes_full_nodenames, "pipeworks:pipe_"..index.."_loaded") -end - - - -if REGISTER_COMPATIBILITY then - local cempty = "pipeworks:pipe_compatibility_empty" - local cloaded = "pipeworks:pipe_compatibility_loaded" - minetest.register_node(cempty, { - drawtype = "airlike", - sunlight_propagates = true, - paramtype = "light", - inventory_image = "pipeworks_pipe_inv.png", - wield_image = "pipeworks_pipe_inv.png", - description = "Pipe Segment (legacy)", - groups = {not_in_creative_inventory = 1, pipe_to_update = 1}, - drop = "pipeworks:pipe_1_empty", - after_place_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_rotate = false - - }) - minetest.register_node(cloaded, { - drawtype = "airlike", - sunlight_propagates = true, - paramtype = "light", - inventory_image = "pipeworks_pipe_inv.png", - groups = {not_in_creative_inventory = 1, pipe_to_update = 1}, - drop = "pipeworks:pipe_1_empty", - after_place_node = function(pos) - pipeworks.scan_for_pipe_objects(pos) - end, - on_rotate = false - - }) - for xm = 0, 1 do - for xp = 0, 1 do - for ym = 0, 1 do - for yp = 0, 1 do - for zm = 0, 1 do - for zp = 0, 1 do - local pname = xm..xp..ym..yp..zm..zp - minetest.register_alias("pipeworks:pipe_"..pname.."_empty", cempty) - minetest.register_alias("pipeworks:pipe_"..pname.."_loaded", cloaded) - end - end - end - end - end - end - minetest.register_abm({ - nodenames = {"group:pipe_to_update"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local minp = {x = pos.x-1, y = pos.y-1, z = pos.z-1} - local maxp = {x = pos.x+1, y = pos.y+1, z = pos.z+1} - if table.getn(minetest.find_nodes_in_area(minp, maxp, "ignore")) == 0 then - pipeworks.scan_for_pipe_objects(pos) - end - end - }) -end - -table.insert(pipes_empty_nodenames,"pipeworks:valve_on_empty") -table.insert(pipes_empty_nodenames,"pipeworks:valve_off_empty") -table.insert(pipes_empty_nodenames,"pipeworks:entry_panel_empty") -table.insert(pipes_empty_nodenames,"pipeworks:flow_sensor_empty") - -table.insert(pipes_full_nodenames,"pipeworks:valve_on_loaded") -table.insert(pipes_full_nodenames,"pipeworks:entry_panel_loaded") -table.insert(pipes_full_nodenames,"pipeworks:flow_sensor_loaded") - -minetest.register_abm({ - nodenames = pipes_empty_nodenames, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - pipeworks.check_for_inflows(pos,node) - end -}) - -minetest.register_abm({ - nodenames = pipes_full_nodenames, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - pipeworks.check_sources(pos,node) - end -}) - -minetest.register_abm({ - nodenames = {"pipeworks:spigot","pipeworks:spigot_pouring"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - pipeworks.spigot_check(pos,node) - end -}) - -minetest.register_abm({ - nodenames = {"pipeworks:fountainhead","pipeworks:fountainhead_pouring"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - pipeworks.fountainhead_check(pos,node) - end -}) - diff --git a/mods/ITEMS/pipeworks/settingtypes.txt b/mods/ITEMS/pipeworks/settingtypes.txt deleted file mode 100644 index d90d88f..0000000 --- a/mods/ITEMS/pipeworks/settingtypes.txt +++ /dev/null @@ -1,77 +0,0 @@ -#Enable pipes. -pipeworks_enable_pipes (Enable Pipes) bool true - -#Enable autocrafter. -pipeworks_enable_autocrafter (Enable Autocrafter) bool true - -#Enable deployer. -pipeworks_enable_deployer (Enable Deployer) bool true - -#Enable dispenser. -pipeworks_enable_dispenser (Enable Dispenser) bool true - -#Enable node breaker. -pipeworks_enable_node_breaker (Enable Node Breaker) bool true - -#Enable teleport tube. -pipeworks_enable_teleport_tube (Enable Teleport Tube) bool true - -#Enable pipe devices. -pipeworks_enable_pipe_devices (Enable Pipe Devices) bool true - -#Enable redefines. -pipeworks_enable_redefines (Enable Node Redefines) bool true - -#Enable sorting tube. -pipeworks_enable_mese_tube (Enable Sorting Tube) bool true - -#Enable detector tube. -pipeworks_enable_detector_tube (Enable Detector Tube) bool true - -#Enable digiline detector tube. -pipeworks_enable_digiline_detector_tube (Enable Digiline Detector Tube) bool true - -#Enable mesecon signal conducting tube. -pipeworks_enable_conductor_tube (Enable Conductor Tube) bool true - -#Enable digiline signal conducting tube. -pipeworks_enable_digiline_conductor_tube (Enable Digiline Conductor Tube) bool true - -#Enable accelerator tube. -pipeworks_enable_accelerator_tube (Enable Accelerator Tube) bool true - -#Enable crossing tube. -#It sends all incoming items to the other side, or if there is no other tube, it sends them back. -pipeworks_enable_crossing_tube (Enable Crossing Tube) bool true - -#Enable vacuum tube. -#It picks up all items that lay around next to it. -pipeworks_enable_sand_tube (Enable Vacuum Tube) bool true - -#Enable mese vacuum tube. -#It's like the normal vacuum tube with the -#differance that you can set the radius up to 8 nodes. -pipeworks_enable_mese_sand_tube (Enable Mese Vacuum Tube) bool true - -#Enable one way tube. -#It sends items only in one direction. -#Use it to drop items out of tubes. -pipeworks_enable_one_way_tube (Enable One Way Tube) bool true - -#Enable high priority tube. -#It has a very high priority and so, on crossings, the items will -#always go to it if there are multible ways. -pipeworks_enable_priority_tube (Enable High Priority Tube) bool true - -#Enable lua controlled tube. -#It is comparable with mesecons luacontroller. -pipeworks_enable_lua_tube (Enable Lua controlled Tube) bool true - -#Enable cyclic mode. -pipeworks_enable_cyclic_mode (Enable Cyclic Mode) bool true - -#Drop on routing fail. -pipeworks_drop_on_routing_fail (Drop On Routing Fail) bool false - -#Delete item on clearobject. -pipeworks_delete_item_on_clearobject (Delete Item On Clearobject) bool true \ No newline at end of file diff --git a/mods/ITEMS/pipeworks/signal_tubes.lua b/mods/ITEMS/pipeworks/signal_tubes.lua deleted file mode 100644 index cc2b4f5..0000000 --- a/mods/ITEMS/pipeworks/signal_tubes.lua +++ /dev/null @@ -1,233 +0,0 @@ -if pipeworks.enable_detector_tube then - local detector_tube_step = 5 * tonumber(minetest.settings:get("dedicated_server_step")) - pipeworks.register_tube("pipeworks:detector_tube_on", { - description = "Detecting Pneumatic Tube Segment on (you hacker you)", - inventory_image = "pipeworks_detector_tube_inv.png", - plain = { "pipeworks_detector_tube_plain.png" }, - node_def = { - tube = {can_go = function(pos, node, velocity, stack) - local meta = minetest.get_meta(pos) - local name = minetest.get_node(pos).name - local nitems = meta:get_int("nitems")+1 - meta:set_int("nitems", nitems) - local saved_pos = vector.new(pos) - minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos) - return pipeworks.notvel(pipeworks.meseadjlist,velocity) - end}, - groups = {mesecon = 2, not_in_creative_inventory = 1}, - drop = "pipeworks:detector_tube_off_1", - mesecons = {receptor = {state = "on", rules = pipeworks.mesecons_rules}}, - item_exit = function(pos) - local meta = minetest.get_meta(pos) - local nitems = meta:get_int("nitems")-1 - local node = minetest.get_node(pos) - local name = node.name - local fdir = node.param2 - if nitems == 0 then - minetest.set_node(pos, {name = string.gsub(name, "on", "off"), param2 = fdir}) - mesecon.receptor_off(pos, pipeworks.mesecons_rules) - else - meta:set_int("nitems", nitems) - end - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_int("nitems", 1) - local name = minetest.get_node(pos).name - local saved_pos = vector.new(pos) - minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos) - end, - }, - }) - pipeworks.register_tube("pipeworks:detector_tube_off", { - description = "Detecting Pneumatic Tube Segment", - inventory_image = "pipeworks_detector_tube_inv.png", - plain = { "pipeworks_detector_tube_plain.png" }, - node_def = { - tube = {can_go = function(pos, node, velocity, stack) - local node = minetest.get_node(pos) - local name = node.name - local fdir = node.param2 - minetest.set_node(pos,{name = string.gsub(name, "off", "on"), param2 = fdir}) - mesecon.receptor_on(pos, pipeworks.mesecons_rules) - return pipeworks.notvel(pipeworks.meseadjlist, velocity) - end}, - groups = {mesecon = 2}, - mesecons = {receptor = {state = "off", rules = pipeworks.mesecons_rules }}, - }, - }) - - minetest.register_craft( { - output = "pipeworks:detector_tube_off_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "mesecons:mesecon", "mesecons_materials:silicon", "mesecons:mesecon" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, - }) -end - -local digiline_enabled = minetest.get_modpath("digilines") ~= nil - -if digiline_enabled and pipeworks.enable_digiline_detector_tube then - pipeworks.register_tube("pipeworks:digiline_detector_tube", { - description = "Digiline Detecting Pneumatic Tube Segment", - inventory_image = "pipeworks_digiline_detector_tube_inv.png", - plain = { "pipeworks_digiline_detector_tube_plain.png" }, - node_def = { - tube = {can_go = function(pos, node, velocity, stack) - local meta = minetest.get_meta(pos) - - local setchan = meta:get_string("channel") - - digiline:receptor_send(pos, digiline.rules.default, setchan, stack:to_string()) - - return pipeworks.notvel(pipeworks.meseadjlist, velocity) - end}, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[8.6,2.2]".. - "field[0.6,0.6;8,1;channel;Channel:;${channel}]".. - "image[0.3,1.3;1,1;pipeworks_digiline_detector_tube_inv.png]".. - "label[1.6,1.2;Digiline Detecting Tube]" - ) - end, - on_receive_fields = function(pos, formname, fields, sender) - if fields.channel then - minetest.get_meta(pos):set_string("channel", fields.channel) - end - end, - groups = {}, - digiline = { - receptor = {}, - effector = { - action = function(pos,node,channel,msg) end - } - }, - }, - }) - - minetest.register_craft( { - output = "pipeworks:digiline_detector_tube_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "digilines:wire_std_00000000", "mesecons_materials:silicon", "digilines:wire_std_00000000" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, - }) -end - -if pipeworks.enable_conductor_tube then - pipeworks.register_tube("pipeworks:conductor_tube_off", { - description = "Conducting Pneumatic Tube Segment", - inventory_image = "pipeworks_conductor_tube_inv.png", - short = "pipeworks_conductor_tube_short.png", - plain = { "pipeworks_conductor_tube_plain.png" }, - noctr = { "pipeworks_conductor_tube_noctr.png" }, - ends = { "pipeworks_conductor_tube_end.png" }, - node_def = { - groups = {mesecon = 2}, - mesecons = {conductor = {state = "off", - rules = pipeworks.mesecons_rules, - onstate = "pipeworks:conductor_tube_on_#id"}} - }, - }) - pipeworks.register_tube("pipeworks:conductor_tube_on", { - description = "Conducting Pneumatic Tube Segment on (you hacker you)", - inventory_image = "pipeworks_conductor_tube_inv.png", - short = "pipeworks_conductor_tube_short.png", - plain = { "pipeworks_conductor_tube_on_plain.png" }, - noctr = { "pipeworks_conductor_tube_on_noctr.png" }, - ends = { "pipeworks_conductor_tube_on_end.png" }, - node_def = { - groups = {mesecon = 2, not_in_creative_inventory = 1}, - drop = "pipeworks:conductor_tube_off_1", - mesecons = {conductor = {state = "on", - rules = pipeworks.mesecons_rules, - offstate = "pipeworks:conductor_tube_off_#id"}} - }, - }) - - minetest.register_craft({ - type = "shapeless", - output = "pipeworks:conductor_tube_off_1", - recipe = {"pipeworks:tube_1", "mesecons:mesecon"} - }) -end - -if digiline_enabled and pipeworks.enable_digiline_conductor_tube then - pipeworks.register_tube("pipeworks:digiline_conductor_tube", { - description = "Digiline Conducting Pneumatic Tube Segment", - inventory_image = "pipeworks_tube_inv.png^pipeworks_digiline_conductor_tube_inv.png", - short = "pipeworks_tube_short.png^pipeworks_digiline_conductor_tube_short.png", - plain = {"pipeworks_tube_plain.png^pipeworks_digiline_conductor_tube_plain.png"}, - noctr = {"pipeworks_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"}, - ends = {"pipeworks_tube_end.png^pipeworks_digiline_conductor_tube_end.png"}, - node_def = {digiline = {wire = {rules = pipeworks.digilines_rules}}}, - }) - minetest.register_craft({ - type = "shapeless", - output = "pipeworks:digiline_conductor_tube_1", - recipe = {"pipeworks:tube_1", "digilines:wire_std_00000000"} - }) -end - -if digiline_enabled and pipeworks.enable_digiline_conductor_tube and - pipeworks.enable_conductor_tube then - pipeworks.register_tube("pipeworks:mesecon_and_digiline_conductor_tube_off", { - description = "Mesecon and Digiline Conducting Pneumatic Tube Segment", - inventory_image = "pipeworks_conductor_tube_inv.png^pipeworks_digiline_conductor_tube_inv.png", - short = "pipeworks_conductor_tube_short.png^pipeworks_digiline_conductor_tube_short.png", - plain = {"pipeworks_conductor_tube_plain.png^pipeworks_digiline_conductor_tube_plain.png"}, - noctr = {"pipeworks_conductor_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"}, - ends = {"pipeworks_conductor_tube_end.png^pipeworks_digiline_conductor_tube_end.png"}, - node_def = { - digiline = {wire = {rules = pipeworks.digilines_rules}}, - groups = {mesecon = 2}, - mesecons = {conductor = { - state = "off", - rules = pipeworks.mesecons_rules, - onstate = "pipeworks:mesecon_and_digiline_conductor_tube_on_#id" - }}, - }, - }) - - pipeworks.register_tube("pipeworks:mesecon_and_digiline_conductor_tube_on", { - description = "Mesecon and Digiline Conducting Pneumatic Tube Segment on (you hacker you)", - inventory_image = "pipeworks_conductor_tube_inv.png^pipeworks_digiline_conductor_tube_inv.png", - short = "pipeworks_conductor_tube_short.png^pipeworks_digiline_conductor_tube_short.png", - plain = {"pipeworks_conductor_tube_on_plain.png^pipeworks_digiline_conductor_tube_plain.png"}, - noctr = {"pipeworks_conductor_tube_on_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"}, - ends = {"pipeworks_conductor_tube_on_end.png^pipeworks_digiline_conductor_tube_end.png"}, - node_def = { - digiline = {wire = {rules = pipeworks.digilines_rules}}, - groups = {mesecon = 2, not_in_creative_inventory = 1}, - drop = "pipeworks:mesecon_and_digiline_conductor_tube_off_1", - mesecons = {conductor = { - state = "on", - rules = pipeworks.mesecons_rules, - offstate = "pipeworks:mesecon_and_digiline_conductor_tube_off_#id"} - }, - }, - }) - - minetest.register_craft({ - type = "shapeless", - output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1", - recipe = {"pipeworks:tube_1", "mesecons:mesecon", "digilines:wire_std_00000000"} - }) - - minetest.register_craft({ - type = "shapeless", - output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1", - recipe = {"pipeworks:conductor_tube_off_1", "digilines:wire_std_00000000"} - }) - - minetest.register_craft({ - type = "shapeless", - output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1", - recipe = {"pipeworks:digiline_conductor_tube_1", "mesecons:mesecon"} - }) -end - diff --git a/mods/ITEMS/pipeworks/teleport_tube.lua b/mods/ITEMS/pipeworks/teleport_tube.lua deleted file mode 100644 index 1f7ac0c..0000000 --- a/mods/ITEMS/pipeworks/teleport_tube.lua +++ /dev/null @@ -1,241 +0,0 @@ -local filename=minetest.get_worldpath() .. "/teleport_tubes" - -local tp_tube_db = nil -- nil forces a read -local tp_tube_db_version = 2.0 - -local function hash(pos) - return string.format("%d", minetest.hash_node_position(pos)) -end - -local function save_tube_db() - local file, err = io.open(filename, "w") - if file then - tp_tube_db.version = tp_tube_db_version - file:write(minetest.serialize(tp_tube_db)) - tp_tube_db.version = nil - io.close(file) - else - error(err) - end -end - -local function migrate_tube_db() - local tmp_db = {} - tp_tube_db.version = nil - for key, val in pairs(tp_tube_db) do - if(val.channel ~= "") then -- skip unconfigured tubes - tmp_db[hash(val)] = val - end - end - tp_tube_db = tmp_db - save_tube_db() -end - -local function read_tube_db() - local file = io.open(filename, "r") - if file ~= nil then - local file_content = file:read("*all") - io.close(file) - - if file_content and file_content ~= "" then - tp_tube_db = minetest.deserialize(file_content) - if(not tp_tube_db.version or tonumber(tp_tube_db.version) < tp_tube_db_version) then - migrate_tube_db() - end - tp_tube_db.version = nil -- we add it back when saving - return tp_tube_db -- we read sucessfully - end - end - tp_tube_db = {} - return tp_tube_db -end - --- updates or adds a tube -local function set_tube(pos, channel, can_receive) - local tubes = tp_tube_db or read_tube_db() - local hash = hash(pos) - local tube = tubes[hash] - if tube then - tube.channel = channel - tube.cr = can_receive - save_tube_db() - return - end - - -- we haven't found any tp tube to update, so lets add it - tp_tube_db[hash] = {x=pos.x,y=pos.y,z=pos.z,channel=channel,cr=can_receive} - save_tube_db() -end - -local function remove_tube(pos) - local tubes = tp_tube_db or read_tube_db() - tubes[hash(pos)] = nil - save_tube_db() -end - -local function read_node_with_vm(pos) - local vm = VoxelManip() - local MinEdge, MaxEdge = vm:read_from_map(pos, pos) - local data = vm:get_data() - local area = VoxelArea:new({MinEdge = MinEdge, MaxEdge = MaxEdge}) - return minetest.get_name_from_content_id(data[area:index(pos.x, pos.y, pos.z)]) -end - -local function get_receivers(pos, channel) - local tubes = tp_tube_db or read_tube_db() - local receivers = {} - local dirty = false - for key, val in pairs(tubes) do - -- skip all non-receivers and the tube that it came from as early as possible, as this is called often - if (val.cr == 1 and val.channel == channel and (val.x ~= pos.x or val.y ~= pos.y or val.z ~= pos.z)) then - local is_loaded = (minetest.get_node_or_nil(val) ~= nil) - local node_name = is_loaded and minetest.get_node(pos).name or read_node_with_vm(val) - - if minetest.registered_nodes[node_name] and minetest.registered_nodes[node_name].is_teleport_tube then - table.insert(receivers, val) - else - tp_tube_db[key] = nil - dirty = true - end - end - end - if dirty then - save_tube_db() - end - return receivers -end - -local function update_meta(meta, can_receive) - meta:set_int("can_receive", can_receive and 1 or 0) - local cr_state = can_receive and "on" or "off" - meta:set_string("formspec","size[8.6,2.2]".. - "field[0.6,0.6;7,1;channel;Channel:;${channel}]".. - "label[7.3,0;Receive]".. - "image_button[7.3,0.3;1,0.6;pipeworks_button_" .. cr_state .. ".png;cr" .. (can_receive and 0 or 1) .. ";;;false;pipeworks_button_interm.png]".. - "image[0.3,1.3;1,1;pipeworks_teleport_tube_inv.png]".. - "label[1.6,1.2;channels are public by default]" .. - "label[1.6,1.5;use : for fully private channels]" .. - "label[1.6,1.8;use \\; for private receivers]" .. - init.gui_bg.. - init.gui_bg_img) -end - -pipeworks.register_tube("pipeworks:teleport_tube", { - description = "Teleporting Pneumatic Tube Segment", - inventory_image = "pipeworks_teleport_tube_inv.png", - noctr = { "pipeworks_teleport_tube_noctr.png" }, - plain = { "pipeworks_teleport_tube_plain.png" }, - ends = { "pipeworks_teleport_tube_end.png" }, - short = "pipeworks_teleport_tube_short.png", - node_def = { - is_teleport_tube = true, - tube = { - can_go = function(pos,node,velocity,stack) - velocity.x = 0 - velocity.y = 0 - velocity.z = 0 - - local channel = minetest.get_meta(pos):get_string("channel") - if channel == "" then return {} end - - local target = get_receivers(pos, channel) - if target[1] == nil then return {} end - - local d = math.random(1,#target) - pos.x = target[d].x - pos.y = target[d].y - pos.z = target[d].z - return pipeworks.meseadjlist - end - }, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - update_meta(meta, true) - meta:set_string("infotext", "unconfigured Teleportation Tube") - end, - on_receive_fields = function(pos,formname,fields,sender) - if not fields.channel -- ignore escaping or clientside manipulation of the form - or not pipeworks.may_configure(pos, sender) then - return - end - local new_channel = tostring(fields.channel):trim() - - local meta = minetest.get_meta(pos) - local can_receive = meta:get_int("can_receive") - - -- check for private channels each time before actually changing anything - -- to not even allow switching between can_receive states of private channels - if new_channel ~= "" then - local sender_name = sender:get_player_name() - local name, mode = new_channel:match("^([^:;]+)([:;])") - if name and mode and name ~= sender_name then - --channels starting with '[name]:' can only be used by the named player - if mode == ":" then - minetest.chat_send_player(sender_name, "Sorry, channel '"..new_channel.."' is reserved for exclusive use by "..name) - return - --channels starting with '[name];' can be used by other players, but cannot be received from - elseif mode == ";" and (fields.cr1 or (can_receive ~= 0 and not fields.cr0)) then - minetest.chat_send_player(sender_name, "Sorry, receiving from channel '"..new_channel.."' is reserved for "..name) - return - end - end - end - - local dirty = false - - -- was the channel changed? - local channel = meta:get_string("channel") - if new_channel ~= channel then - channel = new_channel - meta:set_string("channel", channel) - dirty = true - end - - -- test if a can_receive button was pressed - if fields.cr0 and can_receive ~= 0 then - can_receive = 0 - update_meta(meta, false) - dirty = true - elseif fields.cr1 and can_receive ~= 1 then - can_receive = 1 - update_meta(meta, true) - dirty = true - end - - -- save if we changed something, handle the empty channel while we're at it - if dirty then - if channel ~= "" then - set_tube(pos, channel, can_receive) - local cr_description = (can_receive == 1) and "sending and receiving" or "sending" - meta:set_string("infotext", string.format("Teleportation Tube %s on '%s'", cr_description, channel)) - else - -- remove empty channel tubes, to not have to search through them - remove_tube(pos) - meta:set_string("infotext", "unconfigured Teleportation Tube") - end - end - end, - on_destruct = function(pos) - remove_tube(pos) - end - }, -}) -minetest.register_craft( { - output = "pipeworks:teleport_tube_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "technic:granite", "default:mese", "technic:granite" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -if minetest.get_modpath("mesecons_mvps") ~= nil then - mesecon.register_on_mvps_move(function(moved_nodes) - for _, n in ipairs(moved_nodes) do - if string.find(n.node.name, "pipeworks:teleport_tube") ~= nil then - local meta = minetest.get_meta(n.pos) - set_tube(n.pos, meta:get_string("channel"), meta:get_int("can_receive")) - end - end - end) -end diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_end.png b/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_end.png deleted file mode 100644 index 8531fbf..0000000 --- a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_end.png +++ /dev/null @@ -1,830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pipeworks/pipeworks_digiline_conductor_tube_end.png at 05c0a8670baec2a8baacbac1a3aead556d26a822 · minetest-mods/pipeworks - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - - - - - - - - - - - -
- -
- -
-
- - - -
-
-
- - - - - - - - -
-
- -
    -
  • -
    - -
    - - - -
    -
    -
    - - Notifications -
    - - - -
    -
    -
    -
    -
  • - -
  • - -
    -
    - - -
    -
    - - -
    - -
  • - -
  • -
    - -
    - -
  • -
- -

- - /pipeworks - -

- -
- -
- -
-
- - - Permalink - - - -
- -
- - -
- -
-
- - Switch branches/tags -
- -
-
- -
-
- -
-
- - - -
- - -
Nothing to show
-
- -
-
-
- -
- - Find file - - -
- -
- - - -
- - - 05c0a86 - - Sep 26, 2017 - - - -
- - -
- - -
- - -
-
-
- - - - - - -
- -
- 174 Bytes -
-
- - - -
-
- pipeworks_digiline_conductor_tube_end.png -
-
- -
- - - - -
- -
- -
-
- -
- - - - - - -
- - - You can't perform that action at this time. -
- - - - - - - - - - -
- - You signed in with another tab or window. Reload to refresh your session. - You signed out in another tab or window. Reload to refresh your session. -
- - - - - - diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_inv.png b/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_inv.png deleted file mode 100644 index 3ee15f1..0000000 --- a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_inv.png +++ /dev/null @@ -1,795 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pipeworks/pipeworks_digiline_conductor_tube_inv.png at 05c0a8670baec2a8baacbac1a3aead556d26a822 · minetest-mods/pipeworks - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - - - - - - - - - - - -
- -
- -
-
- - - -
-
-
- - - - - - - - -
-
- -
    -
  • -
    - -
    - - - -
    -
    -
    - - Notifications -
    - - - -
    -
    -
    -
    -
  • - -
  • - -
    -
    - - -
    -
    - - -
    - -
  • - -
  • -
    - -
    - -
  • -
- -

- - /pipeworks - -

- -
- -
- -
-
- - - Permalink - - - -
- -
- - -
- -
-
- - Switch branches/tags -
- -
-
- -
-
- -
-
- - - -
- - -
Nothing to show
-
- -
-
-
- -
- - Find file - - -
- -
- - - -
- Fetching contributors… -
- -
- - Cannot retrieve contributors at this time -
-
- -
-
-
- - - - - - -
- -
- 337 Bytes -
-
- - - -
-
- pipeworks_digiline_conductor_tube_inv.png -
-
- -
- - - - -
- -
- -
-
- -
- - - - - - -
- - - You can't perform that action at this time. -
- - - - - - - - - - -
- - You signed in with another tab or window. Reload to refresh your session. - You signed out in another tab or window. Reload to refresh your session. -
- - - - - - diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_noctr.png b/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_noctr.png deleted file mode 100644 index 6930360..0000000 --- a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_noctr.png +++ /dev/null @@ -1,795 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pipeworks/pipeworks_digiline_conductor_tube_noctr.png at 05c0a8670baec2a8baacbac1a3aead556d26a822 · minetest-mods/pipeworks - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - - - - - - - - - - - -
- -
- -
-
- - - -
-
-
- - - - - - - - -
-
- -
    -
  • -
    - -
    - - - -
    -
    -
    - - Notifications -
    - - - -
    -
    -
    -
    -
  • - -
  • - -
    -
    - - -
    -
    - - -
    - -
  • - -
  • -
    - -
    - -
  • -
- -

- - /pipeworks - -

- -
- -
- -
-
- - - Permalink - - - -
- -
- - -
- -
-
- - Switch branches/tags -
- -
-
- -
-
- -
-
- - - -
- - -
Nothing to show
-
- -
-
-
- -
- - Find file - - -
- -
- - - -
- Fetching contributors… -
- -
- - Cannot retrieve contributors at this time -
-
- -
-
-
- - - - - - -
- -
- 179 Bytes -
-
- - - -
-
- pipeworks_digiline_conductor_tube_noctr.png -
-
- -
- - - - -
- -
- -
-
- -
- - - - - - -
- - - You can't perform that action at this time. -
- - - - - - - - - - -
- - You signed in with another tab or window. Reload to refresh your session. - You signed out in another tab or window. Reload to refresh your session. -
- - - - - - diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_plain.png b/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_plain.png deleted file mode 100644 index dc0b1b9..0000000 --- a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_plain.png +++ /dev/null @@ -1,795 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pipeworks/pipeworks_digiline_conductor_tube_plain.png at 05c0a8670baec2a8baacbac1a3aead556d26a822 · minetest-mods/pipeworks - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - - - - - - - - - - - -
- -
- -
-
- - - -
-
-
- - - - - - - - -
-
- -
    -
  • -
    - -
    - - - -
    -
    -
    - - Notifications -
    - - - -
    -
    -
    -
    -
  • - -
  • - -
    -
    - - -
    -
    - - -
    - -
  • - -
  • -
    - -
    - -
  • -
- -

- - /pipeworks - -

- -
- -
- -
-
- - - Permalink - - - -
- -
- - -
- -
-
- - Switch branches/tags -
- -
-
- -
-
- -
-
- - - -
- - -
Nothing to show
-
- -
-
-
- -
- - Find file - - -
- -
- - - -
- Fetching contributors… -
- -
- - Cannot retrieve contributors at this time -
-
- -
-
-
- - - - - - -
- -
- 169 Bytes -
-
- - - -
-
- pipeworks_digiline_conductor_tube_plain.png -
-
- -
- - - - -
- -
- -
-
- -
- - - - - - -
- - - You can't perform that action at this time. -
- - - - - - - - - - -
- - You signed in with another tab or window. Reload to refresh your session. - You signed out in another tab or window. Reload to refresh your session. -
- - - - - - diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_short.png b/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_short.png deleted file mode 100644 index 247e7cd..0000000 --- a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_conductor_tube_short.png +++ /dev/null @@ -1,795 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pipeworks/pipeworks_digiline_conductor_tube_short.png at 05c0a8670baec2a8baacbac1a3aead556d26a822 · minetest-mods/pipeworks - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - - - - - - - - - - - -
- -
- -
-
- - - -
-
-
- - - - - - - - -
-
- -
    -
  • -
    - -
    - - - -
    -
    -
    - - Notifications -
    - - - -
    -
    -
    -
    -
  • - -
  • - -
    -
    - - -
    -
    - - -
    - -
  • - -
  • -
    - -
    - -
  • -
- -

- - /pipeworks - -

- -
- -
- -
-
- - - Permalink - - - -
- -
- - -
- -
-
- - Switch branches/tags -
- -
-
- -
-
- -
-
- - - -
- - -
Nothing to show
-
- -
-
-
- -
- - Find file - - -
- -
- - - -
- Fetching contributors… -
- -
- - Cannot retrieve contributors at this time -
-
- -
-
-
- - - - - - -
- -
- 162 Bytes -
-
- - - -
-
- pipeworks_digiline_conductor_tube_short.png -
-
- -
- - - - -
- -
- -
-
- -
- - - - - - -
- - - You can't perform that action at this time. -
- - - - - - - - - - -
- - You signed in with another tab or window. Reload to refresh your session. - You signed out in another tab or window. Reload to refresh your session. -
- - - - - - diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_flow_sensor_off.png b/mods/ITEMS/pipeworks/textures/pipeworks_flow_sensor_off.png deleted file mode 100644 index 10c6846..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_flow_sensor_off.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_flow_sensor_on.png b/mods/ITEMS/pipeworks/textures/pipeworks_flow_sensor_on.png deleted file mode 100644 index 03e054a..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_flow_sensor_on.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_front_off.png b/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_front_off.png deleted file mode 100644 index 36a5a50..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_front_off.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_front_on.png b/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_front_on.png deleted file mode 100644 index 2b3a4a3..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_front_on.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side1_off.png b/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side1_off.png deleted file mode 100644 index 30769fa..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side1_off.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side2_off.png b/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side2_off.png deleted file mode 100644 index babb681..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side2_off.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_pipe_3_empty.png b/mods/ITEMS/pipeworks/textures/pipeworks_pipe_3_empty.png deleted file mode 100644 index d13ec77..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_pipe_3_empty.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_pipe_3_loaded.png b/mods/ITEMS/pipeworks/textures/pipeworks_pipe_3_loaded.png deleted file mode 100644 index c086e19..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_pipe_3_loaded.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_pipe_inv.png b/mods/ITEMS/pipeworks/textures/pipeworks_pipe_inv.png deleted file mode 100644 index 0a17d0c..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_pipe_inv.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_pump_off.png b/mods/ITEMS/pipeworks/textures/pipeworks_pump_off.png deleted file mode 100644 index 28d2311..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_pump_off.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_pump_on.png b/mods/ITEMS/pipeworks/textures/pipeworks_pump_on.png deleted file mode 100644 index 50a8bbf..0000000 Binary files a/mods/ITEMS/pipeworks/textures/pipeworks_pump_on.png and /dev/null differ diff --git a/mods/ITEMS/pipeworks/trashcan.lua b/mods/ITEMS/pipeworks/trashcan.lua deleted file mode 100644 index bea9b29..0000000 --- a/mods/ITEMS/pipeworks/trashcan.lua +++ /dev/null @@ -1,50 +0,0 @@ -minetest.register_node("pipeworks:trashcan", { - description = "Trash Can", - drawtype = "normal", - tiles = { - "pipeworks_trashcan_bottom.png", - "pipeworks_trashcan_bottom.png", - "pipeworks_trashcan_side.png", - "pipeworks_trashcan_side.png", - "pipeworks_trashcan_side.png", - "pipeworks_trashcan_side.png", - }, - groups = {snappy = 3, tubedevice = 1, tubedevice_receiver = 1}, - tube = { - insert_object = function(pos, node, stack, direction) - return ItemStack("") - end, - connect_sides = {left = 1, right = 1, front = 1, back = 1, top = 1, bottom = 1}, - priority = 1, -- Lower than anything else - }, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[8,7]".. - "item_image[0,0;1,1;pipeworks:trashcan]".. - "label[1,0;Trash Can]".. - "list[context;trash;3.5,1;1,1;]".. - init.gui_bg.. - init.gui_bg_img.. - init.gui_slots.. - init.get_hotbar_bg(0,3) .. - "list[current_player;main;0,3;8,4;]" .. - "listring[]") - meta:set_string("infotext", "Trash Can") - meta:get_inventory():set_size("trash", 1) - end, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.get_meta(pos):get_inventory():set_stack(listname, index, ItemStack("")) - end, -}) - -minetest.register_craft({ - output = "pipeworks:trashcan", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "default:steel_ingot", "", "default:steel_ingot" }, - { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, - }, -}) diff --git a/mods/ITEMS/pipeworks/vacuum_tubes.lua b/mods/ITEMS/pipeworks/vacuum_tubes.lua deleted file mode 100644 index c41c9d6..0000000 --- a/mods/ITEMS/pipeworks/vacuum_tubes.lua +++ /dev/null @@ -1,118 +0,0 @@ -if pipeworks.enable_sand_tube then - pipeworks.register_tube("pipeworks:sand_tube", { - description = "Vacuuming Pneumatic Tube Segment", - inventory_image = "pipeworks_sand_tube_inv.png", - short = "pipeworks_sand_tube_short.png", - noctr = {"pipeworks_sand_tube_noctr.png"}, - plain = {"pipeworks_sand_tube_plain.png"}, - ends = {"pipeworks_sand_tube_end.png"}, - node_def = {groups = {vacuum_tube = 1}}, - }) - - minetest.register_craft( { - output = "pipeworks:sand_tube_1 2", - recipe = { - {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting"}, - {"group:sand", "group:sand", "group:sand"}, - {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting"} - }, - }) - - minetest.register_craft( { - output = "pipeworks:sand_tube_1", - recipe = { - {"group:sand", "pipeworks:tube_1", "group:sand"}, - }, - }) -end - -if pipeworks.enable_mese_sand_tube then - pipeworks.register_tube("pipeworks:mese_sand_tube", { - description = "Adjustable Vacuuming Pneumatic Tube Segment", - inventory_image = "pipeworks_mese_sand_tube_inv.png", - short = "pipeworks_mese_sand_tube_short.png", - noctr = {"pipeworks_mese_sand_tube_noctr.png"}, - plain = {"pipeworks_mese_sand_tube_plain.png"}, - ends = {"pipeworks_mese_sand_tube_end.png"}, - node_def = { - groups = {vacuum_tube = 1}, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_int("dist", 0) - meta:set_string("formspec", "size[2.1,0.8]".. - "image[0,0;1,1;pipeworks_mese_sand_tube_inv.png]".. - "field[1.3,0.4;1,1;dist;radius;${dist}]".. - init.gui_bg.. - init.gui_bg_img) - meta:set_string("infotext", "Adjustable Vacuuming Pneumatic Tube Segment") - end, - on_receive_fields = function(pos,formname,fields,sender) - if not pipeworks.may_configure(pos, sender) then return end - local meta = minetest.get_meta(pos) - local dist = tonumber(fields.dist) - if dist then - dist = math.max(0, dist) - dist = math.min(8, dist) - meta:set_int("dist", dist) - meta:set_string("infotext", ("Adjustable Vacuuming Pneumatic Tube Segment (%dm)"):format(dist)) - end - end, - }, - }) - - minetest.register_craft( { - output = "pipeworks:mese_sand_tube_1 2", - recipe = { - {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - {"group:sand", "default:mese_crystal", "group:sand" }, - {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, - }) - - minetest.register_craft( { - type = "shapeless", - output = "pipeworks:mese_sand_tube_1", - recipe = { - "pipeworks:sand_tube_1", - "default:mese_crystal_fragment", - "default:mese_crystal_fragment", - "default:mese_crystal_fragment", - "default:mese_crystal_fragment" - }, - }) -end - -local function vacuum(pos, radius) - radius = radius + 0.5 - for _, object in pairs(minetest.get_objects_inside_radius(pos, math.sqrt(3) * radius)) do - local lua_entity = object:get_luaentity() - if not object:is_player() and lua_entity and lua_entity.name == "__builtin:item" then - local obj_pos = object:getpos() - local minpos = vector.subtract(pos, radius) - local maxpos = vector.add(pos, radius) - if obj_pos.x >= minpos.x and obj_pos.x <= maxpos.x - and obj_pos.y >= minpos.y and obj_pos.y <= maxpos.y - and obj_pos.z >= minpos.z and obj_pos.z <= maxpos.z then - if lua_entity.itemstring ~= "" then - pipeworks.tube_inject_item(pos, pos, vector.new(0, 0, 0), lua_entity.itemstring) - lua_entity.itemstring = "" - end - object:remove() - end - end - end -end - -minetest.register_abm({nodenames = {"group:vacuum_tube"}, - interval = 1, - chance = 1, - label = "Vacuum tubes", - action = function(pos, node, active_object_count, active_object_count_wider) - if node.name:find("pipeworks:sand_tube") then - vacuum(pos, 2) - else - local radius = minetest.get_meta(pos):get_int("dist") - vacuum(pos, radius) - end - end -}) diff --git a/mods/ITEMS/pipeworks/wielder.lua b/mods/ITEMS/pipeworks/wielder.lua deleted file mode 100644 index 813d686..0000000 --- a/mods/ITEMS/pipeworks/wielder.lua +++ /dev/null @@ -1,457 +0,0 @@ -local assumed_eye_pos = vector.new(0, 1.5, 0) - -local function vector_copy(v) - return { x = v.x, y = v.y, z = v.z } -end - -local function delay(x) - return (function() return x end) -end - -local function set_wielder_formspec(data, meta) - meta:set_string("formspec", - "invsize[8,"..(6+data.wield_inv_height)..";]".. - "item_image[0,0;1,1;"..data.name_base.."_off]".. - "label[1,0;"..minetest.formspec_escape(data.description).."]".. - "list[current_name;"..minetest.formspec_escape(data.wield_inv_name)..";"..((8-data.wield_inv_width)*0.5)..",1;"..data.wield_inv_width..","..data.wield_inv_height..";]".. - "list[current_player;main;0,"..(2+data.wield_inv_height)..";8,4;]" .. - "listring[]") - meta:set_string("infotext", data.description) -end - -local function wielder_on(data, wielder_pos, wielder_node) - data.fixup_node(wielder_pos, wielder_node) - if wielder_node.name ~= data.name_base.."_off" then return end - wielder_node.name = data.name_base.."_on" - minetest.swap_node(wielder_pos, wielder_node) - minetest.check_for_falling(wielder_pos) - local wielder_meta = minetest.get_meta(wielder_pos) - local inv = wielder_meta:get_inventory() - local wield_inv_name = data.wield_inv_name - local wieldindex, wieldstack - for i, stack in ipairs(inv:get_list(wield_inv_name)) do - if not stack:is_empty() then - wieldindex = i - wieldstack = stack - break - end - end - if not wieldindex then - if not data.ghost_inv_name then return end - wield_inv_name = data.ghost_inv_name - inv:set_stack(wield_inv_name, 1, ItemStack(data.ghost_tool)) - wieldindex = 1 - wieldstack = inv:get_stack(wield_inv_name, 1) - end - local dir = minetest.facedir_to_dir(wielder_node.param2) - -- under/above is currently intentionally left switched - -- even though this causes some problems with deployers and e.g. seeds - -- as there are some issues related to nodebreakers otherwise breaking 2 nodes afar. - -- solidity would have to be checked as well, - -- but would open a whole can of worms related to difference in nodebreaker/deployer behavior - -- and the problems of wielders acting on themselves if below is solid - local under_pos = vector.subtract(wielder_pos, dir) - local above_pos = vector.subtract(under_pos, dir) - local pitch - local yaw - if dir.z < 0 then - yaw = 0 - pitch = 0 - elseif dir.z > 0 then - yaw = math.pi - pitch = 0 - elseif dir.x < 0 then - yaw = 3*math.pi/2 - pitch = 0 - elseif dir.x > 0 then - yaw = math.pi/2 - pitch = 0 - elseif dir.y > 0 then - yaw = 0 - pitch = -math.pi/2 - else - yaw = 0 - pitch = math.pi/2 - end - local virtplayer = { - get_inventory_formspec = delay(wielder_meta:get_string("formspec")), - get_look_dir = delay(vector.multiply(dir, -1)), - get_look_pitch = delay(pitch), - get_look_yaw = delay(yaw), - get_player_control = delay({ jump=false, right=false, left=false, LMB=false, RMB=false, sneak=data.sneak, aux1=false, down=false, up=false }), - get_player_control_bits = delay(data.sneak and 64 or 0), - get_player_name = delay(data.masquerade_as_owner and wielder_meta:get_string("owner") or ":pipeworks:"..minetest.pos_to_string(wielder_pos)), - is_player = delay(true), - is_fake_player = true, - set_inventory_formspec = delay(), - getpos = delay(vector.subtract(wielder_pos, assumed_eye_pos)), - get_hp = delay(20), - get_inventory = delay(inv), - get_wielded_item = delay(wieldstack), - get_wield_index = delay(wieldindex), - get_wield_list = delay(wield_inv_name), - moveto = delay(), - punch = delay(), - remove = delay(), - right_click = delay(), - setpos = delay(), - set_hp = delay(), - set_properties = delay(), - set_wielded_item = function(self, item) - wieldstack = item - inv:set_stack(wield_inv_name, wieldindex, item) - end, - set_animation = delay(), - set_attach = delay(), - set_detach = delay(), - set_bone_position = delay(), - hud_change = delay(), - get_breath = delay(11), - -- TODO "implement" all these - -- set_armor_groups - -- get_armor_groups - -- get_animation - -- get_attach - -- get_bone_position - -- get_properties - -- get_player_velocity - -- set_look_pitch - -- set_look_yaw - -- set_breath - -- set_physics_override - -- get_physics_override - -- hud_add - -- hud_remove - -- hud_get - -- hud_set_flags - -- hud_get_flags - -- hud_set_hotbar_itemcount - -- hud_get_hotbar_itemcount - -- hud_set_hotbar_image - -- hud_get_hotbar_image - -- hud_set_hotbar_selected_image - -- hud_get_hotbar_selected_image - -- hud_replace_builtin - -- set_sky - -- get_sky - -- override_day_night_ratio - -- get_day_night_ratio - -- set_local_animation - } - local pointed_thing = { type="node", under=under_pos, above=above_pos } - data.act(virtplayer, pointed_thing) - if data.eject_drops then - for i, stack in ipairs(inv:get_list("main")) do - if not stack:is_empty() then - pipeworks.tube_inject_item(wielder_pos, wielder_pos, dir, stack) - inv:set_stack("main", i, ItemStack("")) - end - end - end -end - -local function wielder_off(data, pos, node) - if node.name == data.name_base.."_on" then - node.name = data.name_base.."_off" - minetest.swap_node(pos, node) - minetest.check_for_falling(pos) - end -end - -local function register_wielder(data) - data.fixup_node = data.fixup_node or function (pos, node) end - data.fixup_oldmetadata = data.fixup_oldmetadata or function (m) return m end - for _, state in ipairs({ "off", "on" }) do - local groups = { snappy=2, choppy=2, oddly_breakable_by_hand=2, mesecon=2, tubedevice=1, tubedevice_receiver=1 } - if state == "on" then groups.not_in_creative_inventory = 1 end - local tile_images = {} - for _, face in ipairs({ "top", "bottom", "side2", "side1", "back", "front" }) do - table.insert(tile_images, data.texture_base.."_"..face..(data.texture_stateful[face] and "_"..state or "")..".png") - end - minetest.register_node(data.name_base.."_"..state, { - description = data.description, - tiles = tile_images, - mesecons = { - effector = { - rules = pipeworks.rules_all, - action_on = function (pos, node) - wielder_on(data, pos, node) - end, - action_off = function (pos, node) - wielder_off(data, pos, node) - end, - }, - }, - tube = { - can_insert = function(pos, node, stack, tubedir) - if not data.tube_permit_anteroposterior_insert then - local nodedir = minetest.facedir_to_dir(node.param2) - if vector.equals(tubedir, nodedir) or vector.equals(tubedir, vector.multiply(nodedir, -1)) then - return false - end - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:room_for_item(data.wield_inv_name, stack) - end, - insert_object = function(pos, node, stack, tubedir) - if not data.tube_permit_anteroposterior_insert then - local nodedir = minetest.facedir_to_dir(node.param2) - if vector.equals(tubedir, nodedir) or vector.equals(tubedir, vector.multiply(nodedir, -1)) then - return stack - end - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:add_item(data.wield_inv_name, stack) - end, - input_inventory = data.wield_inv_name, - connect_sides = data.tube_connect_sides, - can_remove = function(pos, node, stack, tubedir) - return stack:get_count() - end, - }, - is_ground_content = true, - paramtype2 = "facedir", - tubelike = 1, - groups = groups, - sounds = default.node_sound_stone_defaults(), - drop = data.name_base.."_off", - on_construct = function(pos) - local meta = minetest.get_meta(pos) - set_wielder_formspec(data, meta) - local inv = meta:get_inventory() - inv:set_size(data.wield_inv_name, data.wield_inv_width*data.wield_inv_height) - if data.ghost_inv_name then - inv:set_size(data.ghost_inv_name, 1) - end - if data.eject_drops then - inv:set_size("main", 100) - end - end, - after_place_node = function (pos, placer) - pipeworks.scan_for_tube_objects(pos) - local placer_pos = placer:getpos() - if placer_pos and placer:is_player() then placer_pos = vector.add(placer_pos, assumed_eye_pos) end - if placer_pos then - local dir = vector.subtract(pos, placer_pos) - local node = minetest.get_node(pos) - node.param2 = minetest.dir_to_facedir(dir, true) - minetest.set_node(pos, node) - minetest.log("action", "real (6d) facedir: " .. node.param2) - end - minetest.get_meta(pos):set_string("owner", placer:get_player_name()) - end, - can_dig = (data.can_dig_nonempty_wield_inv and delay(true) or function(pos, player) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:is_empty(data.wield_inv_name) - end), - after_dig_node = function(pos, oldnode, oldmetadata, digger) - -- The legacy-node fixup is done here in a - -- different form from the standard fixup, - -- rather than relying on a standard fixup - -- in an on_dig callback, because some - -- non-standard diggers (such as technic's - -- mining drill) don't respect on_dig. - oldmetadata = data.fixup_oldmetadata(oldmetadata) - for _, stack in ipairs(oldmetadata.inventory[data.wield_inv_name] or {}) do - if not stack:is_empty() then - minetest.add_item(pos, stack) - end - end - pipeworks.scan_for_tube_objects(pos) - end, - on_punch = data.fixup_node, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if not pipeworks.may_configure(pos, player) then return 0 end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if not pipeworks.may_configure(pos, player) then return 0 end - return stack:get_count() - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - if not pipeworks.may_configure(pos, player) then return 0 end - return count - end - }) - end -end - -if pipeworks.enable_node_breaker then - local data - data = { - name_base = "pipeworks:nodebreaker", - description = "Node Breaker", - texture_base = "pipeworks_nodebreaker", - texture_stateful = { top = true, bottom = true, side2 = true, side1 = true, front = true }, - tube_connect_sides = { top=1, bottom=1, left=1, right=1, back=1 }, - tube_permit_anteroposterior_insert = false, - wield_inv_name = "pick", - wield_inv_width = 1, - wield_inv_height = 1, - can_dig_nonempty_wield_inv = true, - ghost_inv_name = "ghost_pick", - ghost_tool = "tools:pick_mese", - fixup_node = function (pos, node) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - -- Node breakers predating the visible pick slot - -- may have been partially updated. This code - -- fully updates them. Some have been observed - -- to have no pick slot at all; first add one. - if inv:get_size("pick") ~= 1 then - inv:set_size("pick", 1) - end - -- Originally, they had a ghost pick in a "pick" - -- inventory, no other inventory, and no form. - -- The partial update of early with-form node - -- breaker code gives them "ghost_pick" and "main" - -- inventories, but leaves the old ghost pick in - -- the "pick" inventory, and doesn't add a form. - -- First perform that partial update. - if inv:get_size("ghost_pick") ~= 1 then - inv:set_size("ghost_pick", 1) - inv:set_size("main", 100) - end - -- If the node breaker predates the visible pick - -- slot, which we can detect by it not having a - -- form, then the pick slot needs to be cleared - -- of the old ghost pick. - if (meta:get_string("formspec") or "") == "" then - inv:set_stack("pick", 1, ItemStack("")) - end - -- Finally, unconditionally set the formspec - -- and infotext. This not only makes the - -- pick slot visible for node breakers where - -- it wasn't before; it also updates the form - -- for node breakers that had an older version - -- of the form, and sets infotext where it was - -- missing for early with-form node breakers. - set_wielder_formspec(data, meta) - end, - fixup_oldmetadata = function (oldmetadata) - -- Node breakers predating the visible pick slot, - -- with node form, kept their ghost pick in an - -- inventory named "pick", the same name as the - -- later visible pick slot. The pick must be - -- removed to avoid spilling it. - if not oldmetadata.fields.formspec then - return { inventory = { pick = {} }, fields = oldmetadata.fields } - else - return oldmetadata - end - end, - masquerade_as_owner = true, - sneak = false, - act = function(virtplayer, pointed_thing) - local wieldstack = virtplayer:get_wielded_item() - local oldwieldstack = ItemStack(wieldstack) - local on_use = (minetest.registered_items[wieldstack:get_name()] or {}).on_use - if on_use then - wieldstack = on_use(wieldstack, virtplayer, pointed_thing) or wieldstack - virtplayer:set_wielded_item(wieldstack) - else - local under_node = minetest.get_node(pointed_thing.under) - local on_dig = (minetest.registered_nodes[under_node.name] or {on_dig=minetest.node_dig}).on_dig - on_dig(pointed_thing.under, under_node, virtplayer) - wieldstack = virtplayer:get_wielded_item() - end - local wieldname = wieldstack:get_name() - if wieldname == oldwieldstack:get_name() then - -- don't mechanically wear out tool - if wieldstack:get_count() == oldwieldstack:get_count() and - wieldstack:get_metadata() == oldwieldstack:get_metadata() and - ((minetest.registered_items[wieldstack:get_name()] or {}).wear_represents or "mechanical_wear") == "mechanical_wear" then - virtplayer:set_wielded_item(oldwieldstack) - end - elseif wieldname ~= "" then - -- tool got replaced by something else: - -- treat it as a drop - virtplayer:get_inventory():add_item("main", wieldstack) - virtplayer:set_wielded_item(ItemStack("")) - end - end, - eject_drops = true, - } - register_wielder(data) - minetest.register_craft({ - output = "pipeworks:nodebreaker_off", - recipe = { - { "group:wood", "tools:pick_mese", "group:wood" }, - { "default:stone", "mesecons:piston", "default:stone" }, - { "default:stone", "mesecons:mesecon", "default:stone" }, - } - }) - -- aliases for when someone had technic installed, but then uninstalled it but not pipeworks - minetest.register_alias("technic:nodebreaker_off", "pipeworks:nodebreaker_off") - minetest.register_alias("technic:nodebreaker_on", "pipeworks:nodebreaker_on") - minetest.register_alias("technic:node_breaker_off", "pipeworks:nodebreaker_off") - minetest.register_alias("technic:node_breaker_on", "pipeworks:nodebreaker_on") - -- turn legacy auto-tree-taps into node breakers - dofile(pipeworks.modpath.."/legacy.lua") -end - -if pipeworks.enable_deployer then - register_wielder({ - name_base = "pipeworks:deployer", - description = "Deployer", - texture_base = "pipeworks_deployer", - texture_stateful = { front = true }, - tube_connect_sides = { back=1 }, - tube_permit_anteroposterior_insert = true, - wield_inv_name = "main", - wield_inv_width = 3, - wield_inv_height = 3, - can_dig_nonempty_wield_inv = false, - masquerade_as_owner = true, - sneak = false, - act = function(virtplayer, pointed_thing) - local wieldstack = virtplayer:get_wielded_item() - virtplayer:set_wielded_item((minetest.registered_items[wieldstack:get_name()] or {on_place=minetest.item_place}).on_place(wieldstack, virtplayer, pointed_thing) or wieldstack) - end, - eject_drops = false, - }) - minetest.register_craft({ - output = "pipeworks:deployer_off", - recipe = { - { "group:wood", "chests:chest", "group:wood" }, - { "default:stone", "mesecons:piston", "default:stone" }, - { "default:stone", "mesecons:mesecon", "default:stone" }, - } - }) - -- aliases for when someone had technic installed, but then uninstalled it but not pipeworks - minetest.register_alias("technic:deployer_off", "pipeworks:deployer_off") - minetest.register_alias("technic:deployer_on", "pipeworks:deployer_on") -end - -if pipeworks.enable_dispenser then - register_wielder({ - name_base = "pipeworks:dispenser", - description = "Dispenser", - texture_base = "pipeworks_dispenser", - texture_stateful = { front = true }, - tube_connect_sides = { back=1 }, - tube_permit_anteroposterior_insert = true, - wield_inv_name = "main", - wield_inv_width = 3, - wield_inv_height = 3, - can_dig_nonempty_wield_inv = false, - masquerade_as_owner = false, - sneak = true, - act = function(virtplayer, pointed_thing) - local wieldstack = virtplayer:get_wielded_item() - virtplayer:set_wielded_item((minetest.registered_items[wieldstack:get_name()] or {on_drop=minetest.item_drop}).on_drop(wieldstack, virtplayer, virtplayer:getpos()) or wieldstack) - end, - eject_drops = false, - }) - minetest.register_craft({ - output = "pipeworks:dispenser_off", - recipe = { - { "default:desert_sand", "chests:chest", "default:desert_sand" }, - { "default:stone", "mesecons:piston", "default:stone" }, - { "default:stone", "mesecons:mesecon", "default:stone" }, - } - }) -end diff --git a/mods/ITEMS/screwdriver/init.lua b/mods/ITEMS/screwdriver/init.lua deleted file mode 100644 index e76f054..0000000 --- a/mods/ITEMS/screwdriver/init.lua +++ /dev/null @@ -1,170 +0,0 @@ -screwdriver = {} - -screwdriver.ROTATE_FACE = 1 -screwdriver.ROTATE_AXIS = 2 -screwdriver.disallow = function(pos, node, user, mode, new_param2) - return false -end -screwdriver.rotate_simple = function(pos, node, user, mode, new_param2) - if mode ~= screwdriver.ROTATE_FACE then - return false - end -end - --- For attached wallmounted nodes: returns true if rotation is valid --- simplified version of minetest:builtin/game/falling.lua#L148. -local function check_attached_node(pos, rotation) - local d = minetest.wallmounted_to_dir(rotation) - local p2 = vector.add(pos, d) - local n = minetest.get_node(p2).name - local def2 = minetest.registered_nodes[n] - if def2 and not def2.walkable then - return false - end - return true -end - -screwdriver.rotate = {} - -local facedir_tbl = { - [screwdriver.ROTATE_FACE] = { - [0] = 1, [1] = 2, [2] = 3, [3] = 0, - [4] = 5, [5] = 6, [6] = 7, [7] = 4, - [8] = 9, [9] = 10, [10] = 11, [11] = 8, - [12] = 13, [13] = 14, [14] = 15, [15] = 12, - [16] = 17, [17] = 18, [18] = 19, [19] = 16, - [20] = 21, [21] = 22, [22] = 23, [23] = 20, - }, - [screwdriver.ROTATE_AXIS] = { - [0] = 4, [1] = 4, [2] = 4, [3] = 4, - [4] = 8, [5] = 8, [6] = 8, [7] = 8, - [8] = 12, [9] = 12, [10] = 12, [11] = 12, - [12] = 16, [13] = 16, [14] = 16, [15] = 16, - [16] = 20, [17] = 20, [18] = 20, [19] = 20, - [20] = 0, [21] = 0, [22] = 0, [23] = 0, - }, -} - -screwdriver.rotate.facedir = function(pos, node, mode) - local rotation = node.param2 % 32 -- get first 5 bits - local other = node.param2 - rotation - rotation = facedir_tbl[mode][rotation] or 0 - return rotation + other -end - -screwdriver.rotate.colorfacedir = screwdriver.rotate.facedir - -local wallmounted_tbl = { - [screwdriver.ROTATE_FACE] = {[2] = 5, [3] = 4, [4] = 2, [5] = 3, [1] = 0, [0] = 1}, - [screwdriver.ROTATE_AXIS] = {[2] = 5, [3] = 4, [4] = 2, [5] = 1, [1] = 0, [0] = 3} -} - -screwdriver.rotate.wallmounted = function(pos, node, mode) - local rotation = node.param2 % 8 -- get first 3 bits - local other = node.param2 - rotation - rotation = wallmounted_tbl[mode][rotation] or 0 - if minetest.get_item_group(node.name, "attached_node") ~= 0 then - -- find an acceptable orientation - for i = 1, 5 do - if not check_attached_node(pos, rotation) then - rotation = wallmounted_tbl[mode][rotation] or 0 - else - break - end - end - end - return rotation + other -end - -screwdriver.rotate.colorwallmounted = screwdriver.rotate.wallmounted - --- Handles rotation -screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) - if pointed_thing.type ~= "node" then - return - end - - local pos = pointed_thing.under - - if minetest.is_protected(pos, user:get_player_name()) then - minetest.record_protection_violation(pos, user:get_player_name()) - return - end - - local node = minetest.get_node(pos) - local ndef = minetest.registered_nodes[node.name] - if not ndef then - return itemstack - end - -- can we rotate this paramtype2? - local fn = screwdriver.rotate[ndef.paramtype2] - if not fn and not ndef.on_rotate then - return itemstack - end - - local should_rotate = true - local new_param2 - if fn then - new_param2 = fn(pos, node, mode) - else - new_param2 = node.param2 - end - - -- Node provides a handler, so let the handler decide instead if the node can be rotated - if ndef.on_rotate then - -- Copy pos and node because callback can modify it - local result = ndef.on_rotate(vector.new(pos), - {name = node.name, param1 = node.param1, param2 = node.param2}, - user, mode, new_param2) - if result == false then -- Disallow rotation - return itemstack - elseif result == true then - should_rotate = false - end - elseif ndef.on_rotate == false then - return itemstack - elseif ndef.can_dig and not ndef.can_dig(pos, user) then - return itemstack - end - - if should_rotate and new_param2 ~= node.param2 then - node.param2 = new_param2 - minetest.swap_node(pos, node) - minetest.check_for_falling(pos) - end - - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(user:get_player_name())) then - itemstack:add_wear(65535 / ((uses or 200) - 1)) - end - - return itemstack -end - --- Screwdriver -minetest.register_tool("screwdriver:screwdriver", { - description = "Screwdriver (left-click rotates face, right-click rotates axis)", - inventory_image = "screwdriver.png", - on_use = function(itemstack, user, pointed_thing) - screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, 200) - return itemstack - end, - on_place = function(itemstack, user, pointed_thing) - screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, 200) - return itemstack - end, -}) - - -minetest.register_craft({ - output = "screwdriver:screwdriver", - recipe = { - {"default:steel_ingot"}, - {"group:stick"} - } -}) - -minetest.register_alias("screwdriver:screwdriver1", "screwdriver:screwdriver") -minetest.register_alias("screwdriver:screwdriver2", "screwdriver:screwdriver") -minetest.register_alias("screwdriver:screwdriver3", "screwdriver:screwdriver") -minetest.register_alias("screwdriver:screwdriver4", "screwdriver:screwdriver") diff --git a/mods/ITEMS/sea/depends.txt b/mods/ITEMS/sea/depends.txt deleted file mode 100644 index 1e82165..0000000 --- a/mods/ITEMS/sea/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -australia diff --git a/mods/ITEMS/sea/init.lua b/mods/ITEMS/sea/init.lua deleted file mode 100644 index 775fc6b..0000000 --- a/mods/ITEMS/sea/init.lua +++ /dev/null @@ -1,953 +0,0 @@ ---[[ - Sea ---]] - - -sea = {} - --- Localize math routines for performance. -local math_random = math.random - - --- --- Corals --- - -minetest.register_node("sea:coral_brown", { - description = "Brown Coral", - tiles = {"sea_coral_brown.png"}, - groups = {cracky = 3}, - drop = "sea:coral_skeleton", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("sea:coral_orange", { - description = "Orange Coral", - tiles = {"sea_coral_orange.png"}, - groups = {cracky = 3}, - drop = "sea:coral_skeleton", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("sea:coral_skeleton", { - description = "Coral Skeleton", - tiles = {"sea_coral_skeleton.png"}, - groups = {cracky = 3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_alias("default:coral_brown", "sea:coral_brown") -minetest.register_alias("default:coral_orange", "sea:coral_orange") -minetest.register_alias("default:coral_skeleton", "sea:coral_skeleton") - --- --- Coral death near air --- - -minetest.register_abm({ - nodenames = {"sea:coral_brown", "sea:coral_orange"}, - neighbors = {"air"}, - interval = 17, - chance = 5, - catch_up = false, - action = function(pos, node) - minetest.set_node(pos, {name = "sea:coral_skeleton"}) - end, -}) - - --- Coral -minetest.register_decoration({ - deco_type = "schematic", - place_on = {"default:sand"}, - noise_params = { - offset = -0.015, - scale = 0.1, - spread = {x = 100, y = 100, z = 100}, - seed = 7013, - octaves = 3, - persist = 1, - }, - biomes = {"great_barrier_reef"}, - y_min = -12, - y_max = -2, - schematic = minetest.get_modpath("sea") .. "/schematics/corals.mts", - flags = "place_center_x, place_center_z", - rotation = "random", -}) - - -minetest.register_node("sea:woodship", { - description = "Sand", - tiles = {"default_sand.png"}, - is_ground_content = true, - groups = {crumbly = 3, falling_node = 1, sand = 1, soil = 1, not_in_creative_inventory = 1}, - sounds = default.node_sound_sand_defaults(), -}) - -minetest.register_node("sea:submarine", { - description = "Dirt", - tiles = {"default_dirt.png"}, - is_ground_content = true, - groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1}, - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("sea:woodshipchest", { - description = "Wooden Ship Chest", - tiles = {"chests_chest_top.png", "chests_chest_top.png", "chests_chest_side.png", - "chests_chest_side.png", "chests_chest_side.png", "chests_chest_front.png"}, - paramtype2 = "facedir", - groups = {choppy = 2, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1}, - drop = "chests:chest", - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[8,9]".. - "list[current_name;main;0,0;8,4;]".. - "list[current_player;main;0,5;8,4;]") - meta:set_string("infotext", "Wooden Ship Chest") - local inv = meta:get_inventory() - inv:set_size("main", 8 * 4) - local contents = {} - if math_random(1, 100) <= 25 then - contents = {main = {[1] = "default:coal_lump 36"}} - elseif math_random(1, 100) >= 26 or math_random(1, 100) <= 40 then - contents = {main = {[1] = "default:iron_lump 24"}} - elseif math_random(1, 100) >= 41 or math_random(1, 100) <= 45 then - contents = {main = {[1] = "default:gold_lump 24"}} - elseif math_random(1, 100) >= 46 or math_random(1, 100) <= 50 then - contents = {main = {[1] = "default:diamond 24"}} - elseif math_random(1, 100) >= 51 or math_random(1, 100) <= 60 then - contents = {main = {[1] = "australia:huon_pine_tree 18"}} - elseif math_random(1, 100) >= 61 or math_random(1, 100) <= 70 then - contents = {main = {[1] = "australia:jarrah_tree 18"}} - elseif math_random(1, 100) >= 71 or math_random(1, 100) <= 80 then - contents = {main = {[1] = "australia:marri_tree 18"}} - elseif math_random(1, 100) >= 81 or math_random(1, 100) <= 90 then - contents = {main = {[1] = "australia:merbau_tree 18"}} - else - contents = {main = {[1] = "australia:river_red_gum_tree 18"}} - end - meta:from_table({ - inventory = contents, - fields = { - formspec = "size[8,9;]list[context;main;0,0;8,4;]list[current_player;main;0,5;8,4;]", - infotext = "Normal chest" - } - }) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, - to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to 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 chest at "..minetest.pos_to_string(pos)) - end, -}) - -minetest.register_node("sea:submarinechest", { - description = "Submarine Chest", - tiles = {"chests_chest_top.png", "chests_chest_top.png", "chests_chest_side.png", - "chests_chest_side.png", "chests_chest_side.png", "chests_chest_front.png"}, - paramtype2 = "facedir", - groups = {choppy = 2, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1}, - drop = "chests:chest", - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[8,9]".. - "list[current_name;main;0,0;8,4;]".. - "list[current_player;main;0,5;8,4;]") - meta:set_string("infotext", "Submarine Chest") - local inv = meta:get_inventory() - inv:set_size("main", 8 * 4) - local contents = {} - if math_random(1, 2) == 1 and minetest.get_modpath("technic_worldgen") then - contents = {main = {[1] = "technic:mineral_uranium 18", [2] = "default:sword_steel 2"}} - else - contents = {main = {[1] = "tnt:tnt 3", [2] = "default:sword_steel 2"}} - end - meta:from_table({ - inventory = contents, - fields = { - formspec = "size[8,9;]list[context;main;0,0;8,4;]list[current_player;main;0,5;8,4;]", - infotext = "Normal chest" - } - }) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, - to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to 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 chest at "..minetest.pos_to_string(pos)) - end, -}) - -function sea.place_woodship(pos) - minetest.add_node(pos, {name = "default:sand"}) - - pos.y = pos.y + 1 - pos.x = pos.x - 6 - for a = 1, 11 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:tree"}) - end - - pos.z = pos.z + 1 - pos.x = pos.x - 10 - for a = 1, 9 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:tree"}) - end - - pos.z = pos.z - 2 - pos.x = pos.x - 9 - for a = 1, 9 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:tree"}) - end - - pos.y = pos.y + 1 - pos.x = pos.x - 8 - pos.z = pos.z - 1 - for a = 1, 7 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:tree"}) - end - - pos.z = pos.z + 4 - pos.x = pos.x - 7 - for a = 1, 7 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:tree"}) - end - - pos.z = pos.z - 1 - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:wood"}) - - pos.z = pos.z - 1 - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:wood"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:tree"}) - - pos.z = pos.z - 1 - pos.x = pos.x - 2 - minetest.add_node(pos, {name = "default:tree"}) - - pos.z = pos.z + 2 - pos.x = pos.x - 8 - minetest.add_node(pos, {name = "default:tree"}) - - pos.z = pos.z - 1 - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:tree"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:tree"}) - - pos.z = pos.z - 1 - pos.x = pos.x + 2 - minetest.add_node(pos, {name = "default:tree"}) - - - pos.y = pos.y + 1 - pos.z = pos.z - 1 - for a = 1, 7 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:wood"}) - end - - pos.z = pos.z + 4 - pos.x = pos.x - 7 - for a = 1, 7 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:wood"}) - end - - pos.z = pos.z - 1 - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:wood"}) - - pos.z = pos.z - 1 - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:wood"}) - - pos.z = pos.z - 1 - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:wood"}) - - pos.z = pos.z + 2 - pos.x = pos.x - 8 - minetest.add_node(pos, {name = "default:wood"}) - - pos.z = pos.z - 1 - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:wood"}) - for a = 1, 3 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:wood"}) - end - - pos.z = pos.z - 1 - pos.x = pos.x + 4 - minetest.add_node(pos, {name = "default:wood"}) - - pos.z = pos.z + 1 - pos.x = pos.x + 3 - minetest.add_node(pos, {name = "default:wood"}) - - pos.y = pos.y + 1 - minetest.add_node(pos, {name = "default:wood"}) - - pos.y = pos.y - 2 - minetest.add_node(pos, {name = "default:wood"}) - - pos.y = pos.y + 3 - pos.z = pos.z - 4 - for a = 1, 7 do - pos.z = pos.z + 1 - minetest.add_node(pos, {name = "default:wood"}) - end - - pos.z = pos.z - 3 - for a = 1, 2 do - pos.y = pos.y + 1 - minetest.add_node(pos, {name = "default:wood"}) - end - - pos.y = pos.y + 1 - pos.z = pos.z - 3 - for a = 1, 5 do - pos.z = pos.z + 1 - minetest.add_node(pos, {name = "default:wood"}) - end - - pos.y = pos.y + 1 - pos.z = pos.z - 2 - minetest.add_node(pos, {name = "default:wood"}) - - pos.y = pos.y - 7 - pos.z = pos.z + 1 - pos.x = pos.x - 2 - minetest.add_node(pos, {name = "sea:woodshipchest"}) -end - -function sea.place_submarine(pos) - minetest.add_node(pos, {name = "default:dirt"}) - - pos.y = pos.y + 1 - pos.x = pos.x - 15 - for a = 1, 31 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z + 1 - pos.x = pos.x + 1 - for a = 1, 31 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z + 1 - pos.x = pos.x +1 - for a = 1, 27 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z - 3 - pos.x = pos.x + 1 - for a = 1, 27 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z - 1 - pos.x = pos.x + 2 - for a = 1, 21 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z + 5 - pos.x = pos.x + 1 - for a = 1, 21 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.y = pos.y + 1 - pos.z = pos.z + 1 - pos.x = pos.x - 1 - for a = 1, 21 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z - 7 - pos.x = pos.x + 1 - for a = 1, 21 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z + 1 - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 24 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z + 5 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 22 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z - 1 - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 29 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z - 3 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 28 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z + 1 - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 32 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 32 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.y = pos.y + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 32 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.z = pos.z - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x - 32 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.z = pos.z - 1 - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 28 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.z = pos.z + 3 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x - 28 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.z = pos.z + 1 - pos.x = pos.x + 2 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 22 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.z = pos.z + 1 - pos.x = pos.x - 2 - for a = 1, 3 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - for a = 1, 3 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - for a = 1, 3 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - for a = 1, 9 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.z = pos.z - 6 - pos.x = pos.x - 3 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 22 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - - pos.z = pos.z - 1 - pos.x = pos.x - 2 - for a = 1, 3 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - for a = 1, 3 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - for a = 1, 3 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:obsidian_glass"}) - for a = 1, 9 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.y = pos.y + 1 - pos.z = pos.z + 7 - pos.x = pos.x - 1 - for a = 1, 21 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z - 7 - pos.x = pos.x + 1 - for a = 1, 21 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z + 1 - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 24 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z + 5 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 22 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z - 1 - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 29 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z - 3 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 28 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z + 1 - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 32 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 32 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.y = pos.y + 1 - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 28 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 28 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z - 1 - pos.x = pos.x + 2 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 22 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z + 3 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 22 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - - pos.z = pos.z + 1 - pos.x = pos.x + 2 - for a = 1, 21 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z - 5 - pos.x = pos.x + 1 - for a = 1, 21 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.y = pos.y + 1 - pos.z = pos.z + 2 - pos.x = pos.x - 4 - for a = 1, 3 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.x = pos.x + 21 - for a = 1, 3 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z + 1 - pos.x = pos.x + 1 - for a = 1, 3 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.x = pos.x - 21 - for a = 1, 3 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z + 2 - pos.x = pos.x + 3 - for a = 1, 4 do - pos.z = pos.z - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z - 1 - pos.x = pos.x + 1 - for a = 1, 4 do - pos.z = pos.z + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.x = pos.x + 6 - for a = 1, 13 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z - 3 - pos.x = pos.x + 1 - for a = 1, 13 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:copperblock"}) - end - - pos.z = pos.z + 1 - pos.x = pos.x - 1 - for a = 1, 13 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:bronzeblock"}) - end - - pos.z = pos.z + 1 - pos.x = pos.x + 1 - for a = 1, 13 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:bronzeblock"}) - end - - pos.z = pos.z - 3 - for a = 1, 6 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.z = pos.z + 5 - pos.x = pos.x - 1 - for a = 1, 6 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.y = pos.y + 1 - for a = 1, 4 do - pos.z = pos.z - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x - 5 - pos.z = pos.z - 1 - for a = 1, 4 do - pos.z = pos.z + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - for a = 1, 4 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x + 1 - pos.z = pos.z - 3 - for a = 1, 4 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.y = pos.y + 1 - pos.x = pos.x - 1 - pos.z = pos.z - 1 - for a = 1, 4 do - pos.z = pos.z + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x + 5 - pos.z = pos.z + 1 - for a = 1, 4 do - pos.z = pos.z - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - for a = 1, 4 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x - 1 - pos.z = pos.z + 3 - for a = 1, 4 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.y = pos.y + 1 - pos.x = pos.x - 1 - pos.z = pos.z - 1 - for a = 1, 2 do - pos.x = pos.x - 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.x = pos.x - 1 - pos.z = pos.z - 1 - for a = 1, 2 do - pos.x = pos.x + 1 - minetest.add_node(pos, {name = "default:steelblock"}) - end - - pos.y = pos.y - 7 - pos.x = pos.x + 16 - pos.z = pos.z + 3 - minetest.add_node(pos, {name = "sea:submarinechest"}) -end - diff --git a/mods/ITEMS/sea/mod.conf b/mods/ITEMS/sea/mod.conf deleted file mode 100644 index 736b807..0000000 --- a/mods/ITEMS/sea/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = sea diff --git a/mods/ITEMS/signs/init.lua b/mods/ITEMS/signs/init.lua deleted file mode 100644 index 42ddb16..0000000 --- a/mods/ITEMS/signs/init.lua +++ /dev/null @@ -1,84 +0,0 @@ ---[[ - Signs ---]] - - -local function register_sign(material, desc, def) - minetest.register_node("signs:sign_wall_" .. material, { - description = desc .. " Sign", - drawtype = "nodebox", - tiles = {"signs_sign_wall_" .. material .. ".png"}, - inventory_image = "signs_sign_" .. material .. ".png", - wield_image = "signs_sign_" .. material .. ".png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - node_box = { - type = "wallmounted", - 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}, - }, - groups = def.groups, - legacy_wallmounted = true, - sounds = def.sounds, - - on_construct = function(pos) - --local n = minetest.get_node(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", "field[text;;${text}]") - end, - on_receive_fields = function(pos, formname, fields, sender) - --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields)) - local player_name = sender:get_player_name() - if minetest.is_protected(pos, player_name) then - minetest.record_protection_violation(pos, player_name) - return - end - local meta = minetest.get_meta(pos) - if not fields.text then return end - minetest.log("action", (player_name or "") .. " wrote \"" .. - fields.text .. "\" to sign at " .. minetest.pos_to_string(pos)) - meta:set_string("text", fields.text) - meta:set_string("infotext", '"' .. fields.text .. '"') - end, - }) -end - -register_sign("wood", "Wooden", { - sounds = default.node_sound_wood_defaults(), - groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3} -}) - -register_sign("steel", "Steel", { - sounds = default.node_sound_metal_defaults(), - groups = {cracky = 2, attached_node = 1} -}) - - -minetest.register_craft({ - output = 'signs:sign_wall_steel 3', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'', 'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'signs:sign_wall_wood 3', - recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, - {'', 'group:stick', ''}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "signs:sign_wall_wood", - burntime = 10, -}) - diff --git a/mods/ITEMS/signs/mod.conf b/mods/ITEMS/signs/mod.conf deleted file mode 100644 index af9ff07..0000000 --- a/mods/ITEMS/signs/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = signs diff --git a/mods/ITEMS/stairs/README.txt b/mods/ITEMS/stairs/README.txt deleted file mode 100644 index d32cd71..0000000 --- a/mods/ITEMS/stairs/README.txt +++ /dev/null @@ -1,16 +0,0 @@ -Minetest Game mod: stairs -========================= -See license.txt for license information. - -Authors of source code ----------------------- -Originally by Kahrl (LGPL 2.1) and -celeron55, Perttu Ahola (LGPL 2.1) -Various Minetest developers and contributors (LGPL 2.1) - -Authors of media (models) -------------------------- -Jean-Patrick G. (kilbith) (CC BY-SA 3.0): - stairs_stair.obj - - diff --git a/mods/ITEMS/stairs/depends.txt b/mods/ITEMS/stairs/depends.txt deleted file mode 100644 index c6fb71f..0000000 --- a/mods/ITEMS/stairs/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -default -farming -australia diff --git a/mods/ITEMS/stairs/init.lua b/mods/ITEMS/stairs/init.lua deleted file mode 100644 index 04b65e3..0000000 --- a/mods/ITEMS/stairs/init.lua +++ /dev/null @@ -1,838 +0,0 @@ --- Minetest 0.4 mod: stairs --- See README.txt for licensing and other information. - - --- Global namespace for functions - -stairs = {} - - --- Register aliases for new pine node names - -minetest.register_alias("stairs:stair_pinewood", "stairs:stair_pine_wood") -minetest.register_alias("stairs:slab_pinewood", "stairs:slab_pine_wood") - - --- Get setting for replace ABM - -local replace = minetest.settings:get_bool("enable_stairs_replace_abm") - -local function rotate_and_place(itemstack, placer, pointed_thing) - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local param2 = 0 - - local placer_pos = placer:getpos() - if placer_pos then - param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) - end - - local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) - local fpos = finepos.y % 1 - - if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) - or (fpos < -0.5 and fpos > -0.999999999) then - param2 = param2 + 20 - if param2 == 21 then - param2 = 23 - elseif param2 == 23 then - param2 = 21 - end - end - return minetest.item_place(itemstack, placer, pointed_thing, param2) -end - --- Register stairs. --- Node will be called stairs:stair_ - -function stairs.register_stair(subname, recipeitem, groups, images, description, sounds) - groups.stair = 1 - minetest.register_node(":stairs:stair_" .. subname, { - description = description, - drawtype = "mesh", - mesh = "stairs_stair.obj", - tiles = images, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - groups = groups, - sounds = sounds, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.5, 0.5}, - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.5, 0.5}, - }, - }, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - return rotate_and_place(itemstack, placer, pointed_thing) - end, - }) - - -- for replace ABM - if replace then - minetest.register_node(":stairs:stair_" .. subname .. "upside_down", { - replace_name = "stairs:stair_" .. subname, - groups = {slabs_replace = 1}, - }) - end - - if recipeitem then - minetest.register_craft({ - output = 'stairs:stair_' .. subname .. ' 8', - recipe = { - {recipeitem, "", ""}, - {recipeitem, recipeitem, ""}, - {recipeitem, recipeitem, recipeitem}, - }, - }) - - -- Flipped recipe for the silly minecrafters - minetest.register_craft({ - output = 'stairs:stair_' .. subname .. ' 8', - recipe = { - {"", "", recipeitem}, - {"", recipeitem, recipeitem}, - {recipeitem, recipeitem, recipeitem}, - }, - }) - - -- Fuel - local baseburntime = minetest.get_craft_result({ - method = "fuel", - width = 1, - items = {recipeitem} - }).time - if baseburntime > 0 then - minetest.register_craft({ - type = "fuel", - recipe = 'stairs:stair_' .. subname, - burntime = math.floor(baseburntime * 0.75), - }) - end - end -end - - --- Slab facedir to placement 6d matching table -local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} - --- Register slabs. --- Node will be called stairs:slab_ - -function stairs.register_slab(subname, recipeitem, groups, images, description, sounds) - groups.slab = 1 - minetest.register_node(":stairs:slab_" .. subname, { - description = description, - drawtype = "nodebox", - tiles = images, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - groups = groups, - sounds = sounds, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - }, - on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) - local wield_item = itemstack:get_name() - local creative_enabled = (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) - - if under and under.name:find("stairs:slab_") then - -- place slab using under node orientation - local dir = minetest.dir_to_facedir(vector.subtract( - pointed_thing.above, pointed_thing.under), true) - - local p2 = under.param2 - - -- combine two slabs if possible - if slab_trans_dir[math.floor(p2 / 4)] == dir - and wield_item == under.name then - - if not recipeitem then - return itemstack - end - local player_name = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, player_name) and not - minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(pointed_thing.under, - player_name) - return - end - minetest.set_node(pointed_thing.under, {name = recipeitem, param2 = p2}) - if not creative_enabled then - itemstack:take_item() - end - return itemstack - end - - -- Placing a slab on an upside down slab should make it right-side up. - if p2 >= 20 and dir == 8 then - p2 = p2 - 20 - -- same for the opposite case: slab below normal slab - elseif p2 <= 3 and dir == 4 then - p2 = p2 + 20 - end - - -- else attempt to place node with proper param2 - minetest.item_place_node(ItemStack(wield_item), placer, pointed_thing, p2) - if not creative_enabled then - itemstack:take_item() - end - return itemstack - else - return rotate_and_place(itemstack, placer, pointed_thing) - end - end, - }) - - -- for replace ABM - if replace then - minetest.register_node(":stairs:slab_" .. subname .. "upside_down", { - replace_name = "stairs:slab_".. subname, - groups = {slabs_replace = 1}, - }) - end - - if recipeitem then - minetest.register_craft({ - output = 'stairs:slab_' .. subname .. ' 6', - recipe = { - {recipeitem, recipeitem, recipeitem}, - }, - }) - - -- Fuel - local baseburntime = minetest.get_craft_result({ - method = "fuel", - width = 1, - items = {recipeitem} - }).time - if baseburntime > 0 then - minetest.register_craft({ - type = "fuel", - recipe = 'stairs:slab_' .. subname, - burntime = math.floor(baseburntime * 0.5), - }) - end - end -end - - --- Optionally replace old "upside_down" nodes with new param2 versions. --- Disabled by default. - -if replace then - minetest.register_abm({ - label = "Slab replace", - nodenames = {"group:slabs_replace"}, - interval = 16, - chance = 1, - action = function(pos, node) - node.name = minetest.registered_nodes[node.name].replace_name - node.param2 = node.param2 + 20 - if node.param2 == 21 then - node.param2 = 23 - elseif node.param2 == 23 then - node.param2 = 21 - end - minetest.set_node(pos, node) - end, - }) -end - - --- Stair/slab registration function. --- Nodes will be called stairs:{stair,slab}_ - -function stairs.register_stair_and_slab(subname, recipeitem, - groups, images, desc_stair, desc_slab, sounds) - stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds) - stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds) -end - - --- Register default stairs and slabs - -stairs.register_stair_and_slab( - "wood", - "default:wood", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"default_wood.png"}, - "Wooden Stair", - "Wooden Slab", - default.node_sound_wood_defaults() -) - -stairs.register_stair_and_slab( - "junglewood", - "default:junglewood", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"default_junglewood.png"}, - "Jungle Wood Stair", - "Jungle Wood Slab", - default.node_sound_wood_defaults() -) - -stairs.register_stair_and_slab( - "pine_wood", - "default:pine_wood", - {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, - {"default_pine_wood.png"}, - "Pine Wood Stair", - "Pine Wood Slab", - default.node_sound_wood_defaults() -) - -stairs.register_stair_and_slab( - "acacia_wood", - "default:acacia_wood", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"default_acacia_wood.png"}, - "Acacia Wood Stair", - "Acacia Wood Slab", - default.node_sound_wood_defaults() -) - -stairs.register_stair_and_slab( - "aspen_wood", - "default:aspen_wood", - {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, - {"default_aspen_wood.png"}, - "Aspen Wood Stair", - "Aspen Wood Slab", - default.node_sound_wood_defaults() -) - -stairs.register_stair_and_slab( - "stone", - "default:stone", - {cracky = 3}, - {"default_stone.png"}, - "Stone Stair", - "Stone Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "cobble", - "default:cobble", - {cracky = 3}, - {"default_cobble.png"}, - "Cobblestone Stair", - "Cobblestone Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "mossycobble", - nil, - {cracky = 3}, - {"default_mossycobble.png"}, - "Mossy Cobblestone Stair", - "Mossy Cobblestone Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "stonebrick", - "default:stonebrick", - {cracky = 2}, - {"default_stone_brick.png"}, - "Stone Brick Stair", - "Stone Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "stone_block", - "default:stone_block", - {cracky = 2}, - {"default_stone_block.png"}, - "Stone Block Stair", - "Stone Block Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "basalt", - "australia:basalt", - {cracky = 2}, - {"aus_basalt.png"}, - "Basalt Stair", - "Basalt Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "basalt_brick", - "australia:basalt_brick", - {cracky = 2}, - {"aus_basalt_brick.png"}, - "Basalt Brick Stair", - "Basalt Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "basalt_cobble", - "australia:basalt_cobble", - {cracky = 2}, - {"aus_basalt_cobble.png"}, - "Basalt Cobble Stair", - "Basalt Cobble Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "diorite", - "australia:diorite", - {cracky = 2}, - {"aus_diorite.png"}, - "Diorite Stair", - "Diorite Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "diorite_brick", - "australia:diorite_brick", - {cracky = 2}, - {"aus_diorite.png"}, - "Diorite Brick Stair", - "Diorite Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "diorite_cobble", - "australia:diorite_cobble", - {cracky = 2}, - {"aus_diorite_cobble.png"}, - "Diorite Cobble Stair", - "Diorite Cobble Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "granite", - "technic:granite", - {cracky = 2}, - {"technic_granite.png"}, - "Granite Stair", - "Granite Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "granite_brick", - "technic:granite_brick", - {cracky = 2}, - {"technic_granite_brick.png"}, - "Granite Brick Stair", - "Granite Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "granite_cobble", - "technic:granite_cobble", - {cracky = 2}, - {"technic_granite_cobble.png"}, - "Granite Cobble Stair", - "Granite Cobble Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "limestone", - "australia:limestone", - {cracky = 2}, - {"aus_limestone.png"}, - "Limestone Stair", - "Limestone Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "limestone_cobble", - "australia:limestone_cobble", - {cracky = 2}, - {"aus_limestone_cobble.png"}, - "Limestone Cobble Stair", - "Limestone Cobble Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "marble", - "australia:marble", - {cracky = 2}, - {"aus_marble.png"}, - "Marble Stair", - "Marble Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "marble_tile", - "australia:marble_tile", - {cracky = 2}, - {"aus_marble_tile.png"}, - "Marble Tile Stair", - "Marble Tile Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "sandstone", - "default:sandstone", - {crumbly = 1, cracky = 3}, - {"default_sandstone.png"}, - "Sandstone Stair", - "Sandstone Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "sandstonebrick", - "default:sandstonebrick", - {cracky = 2}, - {"default_sandstone_brick.png"}, - "Sandstone Brick Stair", - "Sandstone Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "sandstone_block", - "default:sandstone_block", - {cracky = 2}, - {"default_sandstone_block.png"}, - "Sandstone Block Stair", - "Sandstone Block Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "slate", - "australia:sate", - {cracky = 2}, - {"aus_slate.png"}, - "Slate Stair", - "Slate Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "desert_sandstone", - "default:desert_sandstone", - {crumbly = 1, cracky = 3}, - {"default_desert_sandstone.png"}, - "Desert Sandstone Stair", - "Desert Sandstone Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "desert_sandstone_brick", - "default:desert_sandstone_brick", - {cracky = 2}, - {"default_desert_sandstone_brick.png"}, - "Desert Sandstone Brick Stair", - "Desert Sandstone Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "desert_sandstone_block", - "default:desert_sandstone_block", - {cracky = 2}, - {"default_desert_sandstone_block.png"}, - "Desert Sandstone Block Stair", - "Desert Sandstone Block Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "obsidian", - "default:obsidian", - {cracky = 1, level = 2}, - {"default_obsidian.png"}, - "Obsidian Stair", - "Obsidian Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "obsidianbrick", - "default:obsidianbrick", - {cracky = 1, level = 2}, - {"default_obsidian_brick.png"}, - "Obsidian Brick Stair", - "Obsidian Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "obsidian_block", - "default:obsidian_block", - {cracky = 1, level = 2}, - {"default_obsidian_block.png"}, - "Obsidian Block Stair", - "Obsidian Block Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "brick", - "default:brick", - {cracky = 3}, - {"default_brick.png"}, - "Brick Stair", - "Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "straw", - "farming:straw", - {snappy = 3, flammable = 4}, - {"farming_straw.png"}, - "Straw Stair", - "Straw Slab", - default.node_sound_leaves_defaults() -) - -stairs.register_stair_and_slab( - "steelblock", - "default:steelblock", - {cracky = 1, level = 2}, - {"default_steel_block.png"}, - "Steel Block Stair", - "Steel Block Slab", - default.node_sound_metal_defaults() -) - -stairs.register_stair_and_slab( - "copperblock", - "default:copperblock", - {cracky = 1, level = 2}, - {"default_copper_block.png"}, - "Copper Block Stair", - "Copper Block Slab", - default.node_sound_metal_defaults() -) - -stairs.register_stair_and_slab( - "bronzeblock", - "default:bronzeblock", - {cracky = 1, level = 2}, - {"default_bronze_block.png"}, - "Bronze Block Stair", - "Bronze Block Slab", - default.node_sound_metal_defaults() -) - -stairs.register_stair_and_slab( - "goldblock", - "default:goldblock", - {cracky = 1}, - {"default_gold_block.png"}, - "Gold Block Stair", - "Gold Block Slab", - default.node_sound_metal_defaults() -) - -stairs.register_stair_and_slab( - "ice", - "default:ice", - {cracky = 3, puts_out_fire = 1, cools_lava = 1}, - {"default_ice.png"}, - "Ice Stair", - "Ice Slab", - default.node_sound_glass_defaults() -) - -stairs.register_stair_and_slab( - "snowblock", - "default:snowblock", - {crumbly = 3, puts_out_fire = 1, cools_lava = 1, snowy = 1}, - {"default_snow.png"}, - "Snow Block Stair", - "Snow Block Slab", - default.node_sound_dirt_defaults({ - footstep = {name = "default_snow_footstep", gain = 0.15}, - dug = {name = "default_snow_footstep", gain = 0.2}, - dig = {name = "default_snow_footstep", gain = 0.2} - }) -) - --- Eucalyptus Wood -stairs.register_stair_and_slab( - "eucalyptus_wood", - "australia:eucalyptus_wood", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_eucalyptus_wood.png"}, - "Eucalyptus Wood Stair", - "Eucalyptus Wood Slab", - default.node_sound_wood_defaults() -) - --- Blackwood -stairs.register_stair_and_slab( - "blackwood", - "australia:blackwood", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_blackwood.png"}, - "Blackwood Stair", - "Blackwood Slab", - default.node_sound_wood_defaults() -) - --- Blue Gum -stairs.register_stair_and_slab( - "blue_gum", - "australia:blue_gum", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_blue_gum.png"}, - "Blue Gum Stair", - "Blue Gum Slab", - default.node_sound_wood_defaults() -) - --- Celery-top Pine -stairs.register_stair_and_slab( - "celery_top_pine", - "australia:celery_top_pine", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, - {"aus_celery_top_pine.png"}, - "Celery-top Pine Stair", - "Celery-top Pine Slab", - default.node_sound_wood_defaults() -) - --- Red Mahogany -stairs.register_stair_and_slab( - "red_mahogany", - "australia:red_mahogany", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_red_mahogany.png"}, - "Red Mahogany Stair", - "Red Mahogany Slab", - default.node_sound_wood_defaults() -) - --- Huon Pine -stairs.register_stair_and_slab( - "huon_pine", - "australia:huon_pine", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, - {"aus_huon_pine.png"}, - "Huon Pine Stair", - "Huon Pine Slab", - default.node_sound_wood_defaults() -) - --- Jarrah -stairs.register_stair_and_slab( - "jarrah", - "australia:jarrah", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_jarrah.png"}, - "Jarrah Stair", - "Jarrah Slab", - default.node_sound_wood_defaults() -) - --- Karri -stairs.register_stair_and_slab( - "karri", - "australia:karri", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_karri.png"}, - "Karri Stair", - "Karri Slab", - default.node_sound_wood_defaults() -) - --- Marri -stairs.register_stair_and_slab( - "marri", - "australia:marri", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_marri.png"}, - "Marri Stair", - "Marri Slab", - default.node_sound_wood_defaults() -) - --- Merbau -stairs.register_stair_and_slab( - "merbau", - "australia:merbau", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_merbau.png"}, - "Merbau Stair", - "Merbau Slab", - default.node_sound_wood_defaults() -) - --- Red Gum -stairs.register_stair_and_slab( - "red_gum", - "australia:red_gum", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_red_gum.png"}, - "Red Gum Stair", - "Red Gum Slab", - default.node_sound_wood_defaults() -) - --- Southern Sassafras -stairs.register_stair_and_slab( - "southern_sassafras", - "australia:southern_sassafras", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_southern_sassafras.png"}, - "Southern Sassafras Stair", - "Southern Sassafras Slab", - default.node_sound_wood_defaults() -) - --- Tasmanian Oak -stairs.register_stair_and_slab( - "tasmanian_oak", - "australia:tasmanian_oak", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, - {"aus_tasmanian_oak.png"}, - "Tasmanian Oak Stair", - "Tasmanian Oak Slab", - default.node_sound_wood_defaults() -) - --- Tasmanian Myrtle -stairs.register_stair_and_slab( - "tasmanian_myrtle", - "australia:tasmanian_myrtle", - {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - {"aus_tasmanian_myrtle.png"}, - "Tasmanian Myrtle Stair", - "Tasmanian Myrtle Slab", - default.node_sound_wood_defaults() -) - diff --git a/mods/ITEMS/stairs/license.txt b/mods/ITEMS/stairs/license.txt deleted file mode 100644 index 8f16bbd..0000000 --- a/mods/ITEMS/stairs/license.txt +++ /dev/null @@ -1,51 +0,0 @@ -License of source code ----------------------- - -GNU Lesser General Public License, version 2.1 -Copyright (C) 2011-2016 Kahrl -Copyright (C) 2011-2016 celeron55, Perttu Ahola -Copyright (C) 2012-2016 Various Minetest developers and contributors - -This program is free software; you can redistribute it and/or modify it under the terms -of the GNU Lesser General Public License as published by the Free Software Foundation; -either version 2.1 of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -See the GNU Lesser General Public License for more details: -https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - - -Licenses of media (models) --------------------------- - -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/ITEMS/stairs/models/stairs_stair.obj b/mods/ITEMS/stairs/models/stairs_stair.obj deleted file mode 100644 index 198edf6..0000000 --- a/mods/ITEMS/stairs/models/stairs_stair.obj +++ /dev/null @@ -1,115 +0,0 @@ -# Blender v2.72 (sub 0) OBJ File: '' -# www.blender.org -mtllib stairs.mtl -o stairs_top -v -0.500000 0.000000 -0.500000 -v -0.500000 0.000000 0.000000 -v 0.500000 0.000000 0.000000 -v 0.500000 0.000000 -0.500000 -v -0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.000000 -v -0.500000 0.500000 0.500000 -v 0.500000 0.500000 0.500000 -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 -vn 0.000000 1.000000 0.000000 -g stairs_top -usemtl None -s off -f 4/1/1 1/2/1 2/3/1 3/4/1 -f 7/5/1 8/6/1 6/4/1 5/3/1 -o stairs_bottom -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 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn 0.000000 -1.000000 -0.000000 -g stairs_bottom -usemtl None -s off -f 11/7/2 9/8/2 10/9/2 12/10/2 -o stairs_right -v -0.500000 0.000000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v -0.500000 0.000000 0.000000 -v -0.500000 -0.500000 0.500000 -v -0.500000 0.500000 0.000000 -v -0.500000 0.500000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 0.500000 0.500000 -vt 1.000000 1.000000 -vt 0.500000 1.000000 -vt 1.000000 0.000000 -vn -1.000000 0.000000 0.000000 -g stairs_right -usemtl None -s off -f 13/11/3 14/12/3 15/13/3 -f 15/13/3 18/14/3 17/15/3 -f 14/12/3 16/16/3 15/13/3 -f 16/16/3 18/14/3 15/13/3 -o stairs_left -v 0.500000 0.000000 0.000000 -v 0.500000 -0.500000 -0.500000 -v 0.500000 0.000000 -0.500000 -v 0.500000 -0.500000 0.500000 -v 0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.500000 -vt 0.500000 0.500000 -vt 1.000000 0.000000 -vt 1.000000 0.500000 -vt 0.500000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn 1.000000 0.000000 0.000000 -g stairs_left -usemtl None -s off -f 19/17/4 20/18/4 21/19/4 -f 19/17/4 23/20/4 24/21/4 -f 20/18/4 19/17/4 22/22/4 -f 19/17/4 24/21/4 22/22/4 -o stairs_back -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 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn 0.000000 -0.000000 1.000000 -g stairs_back -usemtl None -s off -f 26/23/5 28/24/5 27/25/5 25/26/5 -o stairs_front -v -0.500000 0.000000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v -0.500000 0.000000 0.000000 -v 0.500000 0.000000 0.000000 -v 0.500000 -0.500000 -0.500000 -v 0.500000 0.000000 -0.500000 -v -0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 0.000000 0.000000 -1.000000 -g stairs_front -usemtl None -s off -f 30/27/6 29/28/6 34/29/6 33/30/6 -f 31/28/6 35/31/6 36/32/6 32/29/6 diff --git a/mods/ITEMS/technic/concrete/depends.txt b/mods/ITEMS/technic/concrete/depends.txt deleted file mode 100755 index 9207dab..0000000 --- a/mods/ITEMS/technic/concrete/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -intllib? diff --git a/mods/ITEMS/technic/concrete/init.lua b/mods/ITEMS/technic/concrete/init.lua deleted file mode 100755 index b7891c5..0000000 --- a/mods/ITEMS/technic/concrete/init.lua +++ /dev/null @@ -1,156 +0,0 @@ ---Minetest 0.4.7 mod: concrete ---(c) 2013 by RealBadAngel - -local technic = rawget(_G, "technic") or {} -technic.concrete_posts = {} - --- Boilerplate to support localized strings if intllib mod is installed. -local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end - -for i = 0, 31 do - minetest.register_alias("technic:concrete_post"..i, - "technic:concrete_post") -end -for i = 32, 63 do - minetest.register_alias("technic:concrete_post"..i, - "technic:concrete_post_with_platform") -end - -local steel_ingot -if minetest.get_modpath("technic_worldgen") then - steel_ingot = "technic:carbon_steel_ingot" -else - steel_ingot = "default:steel_ingot" -end - -minetest.register_craft({ - output = 'technic:rebar 6', - recipe = { - {'','', steel_ingot}, - {'',steel_ingot,''}, - {steel_ingot, '', ''}, - } -}) - -minetest.register_craft({ - output = 'technic:concrete 5', - recipe = { - {'default:stone','technic:rebar','default:stone'}, - {'technic:rebar','default:stone','technic:rebar'}, - {'default:stone','technic:rebar','default:stone'}, - } -}) - -minetest.register_craft({ - output = 'technic:concrete_post_platform 6', - recipe = { - {'technic:concrete','technic:concrete_post','technic:concrete'}, - } -}) - -minetest.register_craft({ - output = 'technic:concrete_post 12', - recipe = { - {'default:stone','technic:rebar','default:stone'}, - {'default:stone','technic:rebar','default:stone'}, - {'default:stone','technic:rebar','default:stone'}, - } -}) - -minetest.register_craft({ - output = 'technic:blast_resistant_concrete 5', - recipe = { - {'technic:concrete','technic:composite_plate','technic:concrete'}, - {'technic:composite_plate','technic:concrete','technic:composite_plate'}, - {'technic:concrete','technic:composite_plate','technic:concrete'}, - } -}) - -minetest.register_craftitem(":technic:rebar", { - description = S("Rebar"), - inventory_image = "technic_rebar.png", -}) - -minetest.register_node(":technic:concrete", { - description = S("Concrete Block"), - tiles = {"technic_concrete_block.png",}, - groups = {cracky=1, level=2, concrete=1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node(":technic:blast_resistant_concrete", { - description = S("Blast-resistant Concrete Block"), - tiles = {"technic_blast_resistant_concrete_block.png",}, - groups = {cracky=1, level=3, concrete=1}, - sounds = default.node_sound_stone_defaults(), - on_blast = function(pos, intensity) - if intensity > 9 then - minetest.remove_node(pos) - return {"technic:blast_resistant_concrete"} - end - end, -}) - - -local box_platform = {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5} -local box_post = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15} -local box_front = {-0.1, -0.3, -0.5, 0.1, 0.3, 0} -local box_back = {-0.1, -0.3, 0, 0.1, 0.3, 0.5} -local box_left = {-0.5, -0.3, -0.1, 0, 0.3, 0.1} -local box_right = {0, -0.3, -0.1, 0.5, 0.3, 0.1} - -minetest.register_node(":technic:concrete_post_platform", { - description = S("Concrete Post Platform"), - tiles = {"technic_concrete_block.png",}, - groups={cracky=1, level=2}, - sounds = default.node_sound_stone_defaults(), - paramtype = "light", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {box_platform} - }, - on_place = function (itemstack, placer, pointed_thing) - local node = minetest.get_node(pointed_thing.under) - if node.name ~= "technic:concrete_post" then - return minetest.item_place_node(itemstack, placer, pointed_thing) - end - minetest.set_node(pointed_thing.under, {name="technic:concrete_post_with_platform"}) - itemstack:take_item() - placer:set_wielded_item(itemstack) - return itemstack - end, -}) - -for platform = 0, 1 do - local after_dig_node = nil - if platform == 1 then - after_dig_node = function(pos, old_node) - old_node.name = "technic:concrete_post" - minetest.set_node(pos, old_node) - end - end - - minetest.register_node(":technic:concrete_post"..(platform == 1 and "_with_platform" or ""), { - description = S("Concrete Post"), - tiles = {"technic_concrete_block.png"}, - groups = {cracky=1, level=2, concrete_post=1, not_in_creative_inventory=platform}, - sounds = default.node_sound_stone_defaults(), - drop = (platform == 1 and "technic:concrete_post_platform" or - "technic:concrete_post"), - paramtype = "light", - sunlight_propagates = true, - drawtype = "nodebox", - connects_to = {"group:concrete", "group:concrete_post"}, - node_box = { - type = "connected", - fixed = {box_post, (platform == 1 and box_platform or nil)}, - connect_front = box_front, - connect_back = box_back, - connect_left = box_left, - connect_right = box_right, - }, - after_dig_node = after_dig_node, - }) -end - diff --git a/mods/ITEMS/technic/extranodes/depends.txt b/mods/ITEMS/technic/extranodes/depends.txt deleted file mode 100755 index 1437d5b..0000000 --- a/mods/ITEMS/technic/extranodes/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -default -fences -technic_worldgen -concrete -unifieddyes? -intllib? -moreblocks? diff --git a/mods/ITEMS/technic/extranodes/init.lua b/mods/ITEMS/technic/extranodes/init.lua deleted file mode 100755 index 9f7116d..0000000 --- a/mods/ITEMS/technic/extranodes/init.lua +++ /dev/null @@ -1,187 +0,0 @@ --- Minetest 0.4.6 mod: extranodes --- namespace: technic --- Boilerplate to support localized strings if intllib mod is installed. -local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end - -if minetest.get_modpath("moreblocks") then - - -- register stairsplus/circular_saw nodes - -- we skip blast resistant concrete and uranium intentionally - -- chrome seems to be too hard of a metal to be actually sawable - - stairsplus:register_all("technic", "marble", "technic:marble", { - description=S("Marble"), - groups={cracky=3, not_in_creative_inventory=1}, - tiles={"technic_marble.png"}, - }) - - stairsplus:register_all("technic", "marble_bricks", "technic:marble_bricks", { - description=S("Marble Bricks"), - groups={cracky=3, not_in_creative_inventory=1}, - tiles={"technic_marble_bricks.png"}, - }) - - stairsplus:register_all("technic", "granite", "technic:granite", { - description=S("Granite"), - groups={cracky=1, not_in_creative_inventory=1}, - tiles={"technic_granite.png"}, - }) - - stairsplus:register_all("technic", "concrete", "technic:concrete", { - description=S("Concrete"), - groups={cracky=3, not_in_creative_inventory=1}, - tiles={"technic_concrete_block.png"}, - }) - - stairsplus:register_all("technic", "zinc_block", "technic:zinc_block", { - description=S("Zinc Block"), - groups={cracky=1, not_in_creative_inventory=1}, - tiles={"technic_zinc_block.png"}, - }) - - stairsplus:register_all("technic", "cast_iron_block", "technic:cast_iron_block", { - description=S("Cast Iron Block"), - groups={cracky=1, not_in_creative_inventory=1}, - tiles={"technic_cast_iron_block.png"}, - }) - - stairsplus:register_all("technic", "carbon_steel_block", "technic:carbon_steel_block", { - description=S("Carbon Steel Block"), - groups={cracky=1, not_in_creative_inventory=1}, - tiles={"technic_carbon_steel_block.png"}, - }) - - stairsplus:register_all("technic", "stainless_steel_block", "technic:stainless_steel_block", { - description=S("Stainless Steel Block"), - groups={cracky=1, not_in_creative_inventory=1}, - tiles={"technic_stainless_steel_block.png"}, - }) - - stairsplus:register_all("technic", "brass_block", "technic:brass_block", { - description=S("Brass Block"), - groups={cracky=1, not_in_creative_inventory=1}, - tiles={"technic_brass_block.png"}, - }) - - function register_technic_stairs_alias(modname, origname, newmod, newname) - minetest.register_alias(modname .. ":slab_" .. origname, newmod..":slab_" .. newname) - minetest.register_alias(modname .. ":slab_" .. origname .. "_inverted", newmod..":slab_" .. newname .. "_inverted") - minetest.register_alias(modname .. ":slab_" .. origname .. "_wall", newmod..":slab_" .. newname .. "_wall") - minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter", newmod..":slab_" .. newname .. "_quarter") - minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_inverted", newmod..":slab_" .. newname .. "_quarter_inverted") - minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_wall", newmod..":slab_" .. newname .. "_quarter_wall") - minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter", newmod..":slab_" .. newname .. "_three_quarter") - minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_inverted", newmod..":slab_" .. newname .. "_three_quarter_inverted") - minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_wall", newmod..":slab_" .. newname .. "_three_quarter_wall") - minetest.register_alias(modname .. ":stair_" .. origname, newmod..":stair_" .. newname) - minetest.register_alias(modname .. ":stair_" .. origname .. "_inverted", newmod..":stair_" .. newname .. "_inverted") - minetest.register_alias(modname .. ":stair_" .. origname .. "_wall", newmod..":stair_" .. newname .. "_wall") - minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half") - minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted") - minetest.register_alias(modname .. ":stair_" .. origname .. "_half", newmod..":stair_" .. newname .. "_half") - minetest.register_alias(modname .. ":stair_" .. origname .. "_half_inverted", newmod..":stair_" .. newname .. "_half_inverted") - minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half", newmod..":stair_" .. newname .. "_right_half") - minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half_inverted", newmod..":stair_" .. newname .. "_right_half_inverted") - minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half") - minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted") - minetest.register_alias(modname .. ":stair_" .. origname .. "_inner", newmod..":stair_" .. newname .. "_inner") - minetest.register_alias(modname .. ":stair_" .. origname .. "_inner_inverted", newmod..":stair_" .. newname .. "_inner_inverted") - minetest.register_alias(modname .. ":stair_" .. origname .. "_outer", newmod..":stair_" .. newname .. "_outer") - minetest.register_alias(modname .. ":stair_" .. origname .. "_outer_inverted", newmod..":stair_" .. newname .. "_outer_inverted") - minetest.register_alias(modname .. ":panel_" .. origname .. "_bottom", newmod..":panel_" .. newname .. "_bottom") - minetest.register_alias(modname .. ":panel_" .. origname .. "_top", newmod..":panel_" .. newname .. "_top") - minetest.register_alias(modname .. ":panel_" .. origname .. "_vertical", newmod..":panel_" .. newname .. "_vertical") - minetest.register_alias(modname .. ":micro_" .. origname .. "_bottom", newmod..":micro_" .. newname .. "_bottom") - minetest.register_alias(modname .. ":micro_" .. origname .. "_top", newmod..":micro_" .. newname .. "_top") - end - - register_technic_stairs_alias("stairsplus", "concrete", "technic", "concrete") - register_technic_stairs_alias("stairsplus", "marble", "technic", "marble") - register_technic_stairs_alias("stairsplus", "granite", "technic", "granite") - register_technic_stairs_alias("stairsplus", "marble_bricks", "technic", "marble_bricks") - -end - -local iclip_def = { - description = "Insulator/cable clip", - drawtype = "mesh", - mesh = "technic_insulator_clip.obj", - tiles = {"technic_insulator_clip.png"}, - is_ground_content = false, - groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1 }, - sounds = default.node_sound_stone_defaults(), -} - -local iclipfence_def = { - description = "Insulator/cable clip", - tiles = {"technic_insulator_clip.png"}, - is_ground_content = false, - paramtype = "light", - drawtype = "nodebox", - node_box = { - type = "connected", - fixed = { - { -0.25, 0.75, -0.25, 0.25, 1.25, 0.25 }, -- the clip on top - { -0.125, 0.6875, -0.125, 0.125, 0.75, 0.125 }, - { -0.1875, 0.625, -0.1875, 0.1875, 0.6875, 0.1875 }, - { -0.125, 0.5625, -0.125, 0.125, 0.625, 0.125 }, - { -0.1875, 0.5, -0.1875, 0.1875, 0.5625, 0.1875 }, - { -0.125, 0.4375, -0.125, 0.125, 0.5, 0.125 }, - { -0.1875, 0.375, -0.1875, 0.1875, 0.4375, 0.1875 }, - { -0.125, -0.5, -0.125, 0.125, 0.375, 0.125 }, -- the post, slightly short - }, - -- connect_top = - -- connect_bottom = - connect_front = {{-1/16,3/16,-1/2,1/16,5/16,-1/8}, - {-1/16,-5/16,-1/2,1/16,-3/16,-1/8}}, - connect_left = {{-1/2,3/16,-1/16,-1/8,5/16,1/16}, - {-1/2,-5/16,-1/16,-1/8,-3/16,1/16}}, - connect_back = {{-1/16,3/16,1/8,1/16,5/16,1/2}, - {-1/16,-5/16,1/8,1/16,-3/16,1/2}}, - connect_right = {{1/8,3/16,-1/16,1/2,5/16,1/16}, - {1/8,-5/16,-1/16,1/2,-3/16,1/16}}, - }, - connects_to = {"group:fence", "group:wood", "group:tree"}, - groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1 }, - sounds = default.node_sound_stone_defaults(), -} - -if minetest.get_modpath("unifieddyes") then - iclip_def.paramtype2 = "colorwallmounted" - iclip_def.palette = "unifieddyes_palette_colorwallmounted.png" - iclip_def.after_place_node = function(pos, placer, itemstack, pointed_thing) - unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing) - unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing) - end - iclip_def.after_dig_node = unifieddyes.after_dig_node - iclip_def.groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1} - - iclipfence_def.paramtype2 = "color" - iclipfence_def.palette = "unifieddyes_palette_extended.png" - iclipfence_def.on_construct = unifieddyes.on_construct - iclipfence_def.after_place_node = unifieddyes.recolor_on_place - iclipfence_def.after_dig_node = unifieddyes.after_dig_node - iclipfence_def.groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1} - iclipfence_def.place_param2 = 171 -- medium amber, low saturation, closest color to default:wood -end - -minetest.register_node(":technic:insulator_clip", iclip_def) -minetest.register_node(":technic:insulator_clip_fencepost", iclipfence_def) - -minetest.register_craft({ - output = "technic:insulator_clip", - recipe = { - { "", "dye:white", ""}, - { "", "technic:raw_latex", ""}, - { "technic:raw_latex", "default:stone", "technic:raw_latex"}, - } -}) - -minetest.register_craft({ - output = "technic:insulator_clip_fencepost 2", - recipe = { - { "", "dye:white", ""}, - { "", "technic:raw_latex", ""}, - { "technic:raw_latex", "fences:fence_wood", "technic:raw_latex"}, - } -}) diff --git a/mods/ITEMS/technic/technic/depends.txt b/mods/ITEMS/technic/technic/depends.txt deleted file mode 100755 index d1721a8..0000000 --- a/mods/ITEMS/technic/technic/depends.txt +++ /dev/null @@ -1,16 +0,0 @@ -default -pipeworks -technic_worldgen -australia -bucket? -chests? -dye? -furnace? -screwdriver? -mesecons? -mesecons_mvps? -digilines? -digiline_remote? -intllib? -unified_inventory? -vector_extras? diff --git a/mods/ITEMS/technic/technic/init.lua b/mods/ITEMS/technic/technic/init.lua deleted file mode 100755 index 370c71b..0000000 --- a/mods/ITEMS/technic/technic/init.lua +++ /dev/null @@ -1,53 +0,0 @@ --- Minetest 0.4.7 mod: technic --- namespace: technic --- (c) 2012-2013 by RealBadAngel - -local load_start = os.clock() - -technic = rawget(_G, "technic") or {} -technic.creative_mode = minetest.settings:get_bool("creative_mode") - - -local modpath = minetest.get_modpath("technic") -technic.modpath = modpath - - --- Boilerplate to support intllib -if rawget(_G, "intllib") then - technic.getter = intllib.Getter() -else - technic.getter = function(s,a,...)if a==nil then return s end a={a,...}return s:gsub("(@?)@(%(?)(%d+)(%)?)",function(e,o,n,c)if e==""then return a[tonumber(n)]..(o==""and c or"")else return"@"..o..n..c end end) end -end -local S = technic.getter - --- Read configuration file -dofile(modpath.."/config.lua") - --- Helper functions -dofile(modpath.."/helpers.lua") - --- Items -dofile(modpath.."/items.lua") - --- Craft recipes for items -dofile(modpath.."/crafts.lua") - --- Register functions -dofile(modpath.."/register.lua") - --- Radiation -dofile(modpath.."/radiation.lua") - --- Machines -dofile(modpath.."/machines/init.lua") - --- Tools -dofile(modpath.."/tools/init.lua") - --- Aliases for legacy node/item names -dofile(modpath.."/legacy.lua") - -if minetest.settings:get_bool("log_mods") then - print(S("[Technic] Loaded in %f seconds"):format(os.clock() - load_start)) -end - diff --git a/mods/ITEMS/technic/technic/items.lua b/mods/ITEMS/technic/technic/items.lua deleted file mode 100755 index affb8ad..0000000 --- a/mods/ITEMS/technic/technic/items.lua +++ /dev/null @@ -1,224 +0,0 @@ - -local S = technic.getter - -minetest.register_craftitem("technic:silicon_wafer", { - description = S("Silicon Wafer"), - inventory_image = "technic_silicon_wafer.png", -}) - -minetest.register_craftitem( "technic:doped_silicon_wafer", { - description = S("Doped Silicon Wafer"), - inventory_image = "technic_doped_silicon_wafer.png", -}) - -minetest.register_craftitem("technic:uranium_fuel", { - description = S("Uranium Fuel"), - inventory_image = "technic_uranium_fuel.png", -}) - -minetest.register_craftitem( "technic:diamond_drill_head", { - description = S("Diamond Drill Head"), - inventory_image = "technic_diamond_drill_head.png", -}) - -minetest.register_tool("technic:blue_energy_crystal", { - description = S("Blue Energy Crystal"), - inventory_image = minetest.inventorycube( - "technic_diamond_block_blue.png", - "technic_diamond_block_blue.png", - "technic_diamond_block_blue.png"), - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - tool_capabilities = { - max_drop_level = 0, - groupcaps = { - fleshy = {times={}, uses=10000, maxlevel=0} - } - } -}) - -minetest.register_tool("technic:green_energy_crystal", { - description = S("Green Energy Crystal"), - inventory_image = minetest.inventorycube( - "technic_diamond_block_green.png", - "technic_diamond_block_green.png", - "technic_diamond_block_green.png"), - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - tool_capabilities = { - max_drop_level = 0, - groupcaps = { - fleshy = {times={}, uses=10000, maxlevel=0} - } - } -}) - -minetest.register_tool("technic:red_energy_crystal", { - description = S("Red Energy Crystal"), - inventory_image = minetest.inventorycube( - "technic_diamond_block_red.png", - "technic_diamond_block_red.png", - "technic_diamond_block_red.png"), - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - tool_capabilities = { - max_drop_level = 0, - groupcaps = { - fleshy = {times={}, uses=10000, maxlevel=0} - } - } -}) - - -minetest.register_craftitem("technic:fine_copper_wire", { - description = S("Fine Copper Wire"), - inventory_image = "technic_fine_copper_wire.png", -}) - -minetest.register_craftitem("technic:fine_gold_wire", { - description = S("Fine Gold Wire"), - inventory_image = "technic_fine_gold_wire.png", -}) - -minetest.register_craftitem("technic:fine_silver_wire", { - description = S("Fine Silver Wire"), - inventory_image = "technic_fine_silver_wire.png", -}) - -minetest.register_craftitem("technic:copper_coil", { - description = S("Copper Coil"), - inventory_image = "technic_copper_coil.png", -}) - -minetest.register_craftitem("technic:motor", { - description = S("Electric Motor"), - inventory_image = "technic_motor.png", -}) - -minetest.register_craftitem("technic:lv_transformer", { - description = S("Low Voltage Transformer"), - inventory_image = "technic_lv_transformer.png", -}) - -minetest.register_craftitem("technic:mv_transformer", { - description = S("Medium Voltage Transformer"), - inventory_image = "technic_mv_transformer.png", -}) - -minetest.register_craftitem( "technic:hv_transformer", { - description = S("High Voltage Transformer"), - inventory_image = "technic_hv_transformer.png", -}) - -minetest.register_craftitem( "technic:control_logic_unit", { - description = S("Control Logic Unit"), - inventory_image = "technic_control_logic_unit.png", -}) - -minetest.register_craftitem("technic:mixed_metal_ingot", { - description = S("Mixed Metal Ingot"), - inventory_image = "technic_mixed_metal_ingot.png", -}) - -minetest.register_craftitem("technic:composite_plate", { - description = S("Composite Plate"), - inventory_image = "technic_composite_plate.png", -}) - -minetest.register_craftitem("technic:copper_plate", { - description = S("Copper Plate"), - inventory_image = "technic_copper_plate.png", -}) - -minetest.register_craftitem("technic:carbon_plate", { - description = S("Carbon Plate"), - inventory_image = "technic_carbon_plate.png", -}) - -minetest.register_craftitem("technic:graphite", { - description = S("Graphite"), - inventory_image = "technic_graphite.png", -}) - -minetest.register_craftitem("technic:carbon_cloth", { - description = S("Carbon Cloth"), - inventory_image = "technic_carbon_cloth.png", -}) - -minetest.register_node("technic:machine_casing", { - description = S("Machine Casing"), - groups = {cracky=2}, - sunlight_propagates = true, - paramtype = "light", - drawtype = "allfaces", - tiles = {"technic_machine_casing.png"}, - sounds = default.node_sound_stone_defaults(), -}) - -for p = 0, 35 do - local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil - local psuffix = p == 7 and "" or p - local ingot = "technic:uranium"..psuffix.."_ingot" - local block = "technic:uranium"..psuffix.."_block" - local ov = p == 7 and minetest.override_item or nil; - (ov or minetest.register_craftitem)(ingot, { - description = string.format(S("%.1f%%-Fissile Uranium Ingot"), p/10), - inventory_image = "technic_uranium_ingot.png", - groups = {uranium_ingot=1, not_in_creative_inventory=nici}, - }); - -- Note on radioactivity of blocks: - -- Source: - -- The baseline radioactivity of an isotope is not especially - -- correlated with whether it's fissile (i.e., suitable as - -- reactor fuel). Natural uranium consists mainly of fissile - -- U-235 and non-fissile U-238, and both U-235 and U-238 are - -- significantly radioactive. U-235's massic activity is - -- about 80.0 MBq/kg, and U-238's is about 12.4 MBq/kg, which - -- superficially suggests that 3.5%-fissile uranium should have - -- only 1.19 times the activity of fully-depleted uranium. - -- But a third isotope affects the result hugely: U-234 has - -- massic activity of 231 GBq/kg. Natural uranium has massic - -- composition of 99.2837% U-238, 0.711% U-235, and 0.0053% U-234, - -- so its activity comes roughly 49% each from U-234 and U-238 - -- and only 2% from U-235. During enrichment via centrifuge, - -- the U-234 fraction is concentrated along with the U-235, with - -- the U-234:U-235 ratio remaining close to its original value. - -- (Actually the U-234 gets separated from U-238 slightly more - -- than the U-235 is, so the U-234:U-235 ratio is slightly - -- higher in enriched uranium.) A typical massic composition - -- for 3.5%-fissile uranium is 96.47116% U-238, 3.5% U-235, and - -- 0.02884% U-234. This gives 3.5%-fissile uranium about 6.55 - -- times the activity of fully-depleted uranium. The values we - -- compute here for the "radioactive" group value are based on - -- linear interpolation of activity along that scale, rooted at - -- a natural (0.7%-fissile) uranium block having the activity of - -- 9 uranium ore blocks (due to 9 ingots per block). The group - -- value is proportional to the square root of the activity, and - -- uranium ore has radioactive=1. This yields radioactive=1.0 - -- for a fully-depleted uranium block and radioactive=2.6 for - -- a 3.5%-fissile uranium block. - local radioactivity = math.floor(math.sqrt((1+5.55*p/35) * 18 / (1+5.55*7/35)) + 0.5); - (ov or minetest.register_node)(block, { - description = string.format(S("%.1f%%-Fissile Uranium Block"), p/10), - tiles = {"technic_uranium_block.png"}, - is_ground_content = true, - groups = {uranium_block=1, not_in_creative_inventory=nici, - cracky=1, level=2, radioactive=radioactivity}, - sounds = default.node_sound_stone_defaults(), - }); - if not ov then - minetest.register_craft({ - output = block, - recipe = { - {ingot, ingot, ingot}, - {ingot, ingot, ingot}, - {ingot, ingot, ingot}, - }, - }) - minetest.register_craft({ - output = ingot.." 9", - recipe = {{block}}, - }) - end -end - diff --git a/mods/ITEMS/technic/technic/machines/HV/cables.lua b/mods/ITEMS/technic/technic/machines/HV/cables.lua deleted file mode 100755 index e084cf0..0000000 --- a/mods/ITEMS/technic/technic/machines/HV/cables.lua +++ /dev/null @@ -1,12 +0,0 @@ - -minetest.register_craft({ - output = 'technic:hv_cable 3', - recipe = { - {'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting'}, - {'technic:mv_cable', 'technic:mv_cable', 'technic:mv_cable'}, - {'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting'}, - } -}) - -technic.register_cable("HV", 3/16) - diff --git a/mods/ITEMS/technic/technic/machines/HV/nuclear_reactor.lua b/mods/ITEMS/technic/technic/machines/HV/nuclear_reactor.lua deleted file mode 100755 index 42e227e..0000000 --- a/mods/ITEMS/technic/technic/machines/HV/nuclear_reactor.lua +++ /dev/null @@ -1,484 +0,0 @@ ---[[ - The enriched uranium rod driven EU generator. -A very large and advanced machine providing vast amounts of power. -Very efficient but also expensive to run as it needs uranium. -Provides 10000 HV EUs for one week (only counted when loaded). - -The nuclear reactor core requires a casing of water and a protective -shield to work. This is checked now and then and if the casing is not -intact the reactor will melt down! ---]] - -local burn_ticks = 7 * 24 * 60 * 60 -- Seconds -local power_supply = 100000 -- EUs -local fuel_type = "technic:uranium_fuel" -- The reactor burns this -local digiline_meltdown = technic.config:get_bool("enable_nuclear_reactor_digiline_selfdestruct") -local digiline_remote_path = minetest.get_modpath("digiline_remote") - -local S = technic.getter - -local reactor_desc = S("@1 Nuclear Reactor Core", S("HV")) -local cable_entry = "^technic_cable_connection_overlay.png" - --- FIXME: Recipe should make more sense like a rod recepticle, steam chamber, HV generator? -minetest.register_craft({ - output = 'technic:hv_nuclear_reactor_core', - recipe = { - {'technic:carbon_plate', 'default:obsidian_glass', 'technic:carbon_plate'}, - {'technic:composite_plate', 'technic:machine_casing', 'technic:composite_plate'}, - {'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'}, - } -}) - -local function make_reactor_formspec(meta) - local f = "size[8,9]".. - "label[0,0;"..S("Nuclear Reactor Rod Compartment").."]".. - "list[current_name;src;2,1;3,2;]".. - "list[current_player;main;0,5;8,4;]".. - "listring[]".. - "button[5.5,1.5;2,1;start;Start]".. - "checkbox[5.5,2.5;autostart;automatic Start;"..meta:get_string("autostart").."]" - if not digiline_remote_path then - return f - end - local digiline_enabled = meta:get_string("enable_digiline") - f = f.."checkbox[0.5,2.8;enable_digiline;Enable Digiline;"..digiline_enabled.."]" - if digiline_enabled ~= "true" then - return f - end - return f.. - "button_exit[4.6,3.69;2,1;save;Save]".. - "field[1,4;4,1;remote_channel;Digiline Remote Channel;${remote_channel}]" -end - -local SS_OFF = 0 -local SS_DANGER = 1 -local SS_CLEAR = 2 - -local reactor_siren = {} -local function siren_set_state(pos, state) - local hpos = minetest.hash_node_position(pos) - local siren = reactor_siren[hpos] - if not siren then - if state == SS_OFF then return end - siren = {state=SS_OFF} - reactor_siren[hpos] = siren - end - if state == SS_DANGER and siren.state ~= SS_DANGER then - if siren.handle then minetest.sound_stop(siren.handle) end - siren.handle = minetest.sound_play("technic_hv_nuclear_reactor_siren_danger_loop", - {pos=pos, gain=1.5, loop=true, max_hear_distance=48}) - siren.state = SS_DANGER - elseif state == SS_CLEAR then - if siren.handle then minetest.sound_stop(siren.handle) end - local clear_handle = minetest.sound_play("technic_hv_nuclear_reactor_siren_clear", - {pos=pos, gain=1.5, loop=false, max_hear_distance=48}) - siren.handle = clear_handle - siren.state = SS_CLEAR - minetest.after(10, function() - if siren.handle ~= clear_handle then return end - minetest.sound_stop(clear_handle) - if reactor_siren[hpos] == siren then - reactor_siren[hpos] = nil - end - end) - elseif state == SS_OFF and siren.state ~= SS_OFF then - if siren.handle then minetest.sound_stop(siren.handle) end - reactor_siren[hpos] = nil - end -end - -local function siren_danger(pos, meta) - meta:set_int("siren", 1) - siren_set_state(pos, SS_DANGER) -end - -local function siren_clear(pos, meta) - if meta:get_int("siren") ~= 0 then - siren_set_state(pos, SS_CLEAR) - meta:set_int("siren", 0) - end -end - ---[[ -The standard reactor structure consists of a 9x9x9 cube. A cross -section through the middle: - - CCCC CCCC - CBBB BBBC - CBLL LLBC - CBLWWWLBC - CBLW#WLBC - CBLW|WLBC - CBLL|LLBC - CBBB|BBBC - CCCC|CCCC - C = Concrete, B = Blast-resistant concrete, L = Lead, - W = water node, # = reactor core, | = HV cable - -The man-hole is optional (but necessary for refueling). - -For the reactor to operate and not melt down, it insists on the inner -7x7x7 portion (from the core out to the blast-resistant concrete) -being intact. Intactness only depends on the number of nodes of the -right type in each layer. The water layer must have water in all but -at most one node; the steel and blast-resistant concrete layers must -have the right material in all but at most two nodes. The permitted -gaps are meant for the cable and man-hole, but can actually be anywhere -and contain anything. For the reactor to be useful, a cable must -connect to the core, but it can go in any direction. - -The outer concrete layer of the standard structure is not required -for the reactor to operate. It is noted here because it used to -be mandatory, and for historical reasons (that it predates the -implementation of radiation) it needs to continue being adequate -shielding of legacy reactors. If it ever ceases to be adequate -shielding for new reactors, legacy ones should be grandfathered. - -For legacy reasons, if the reactor has a stainless steel layer instead -of a lead layer it will be converted to a lead layer. ---]] -local function reactor_structure_badness(pos) - local vm = VoxelManip() - local pos1 = vector.subtract(pos, 3) - local pos2 = vector.add(pos, 3) - local MinEdge, MaxEdge = vm:read_from_map(pos1, pos2) - local data = vm:get_data() - local area = VoxelArea:new({MinEdge=MinEdge, MaxEdge=MaxEdge}) - - local c_blast_concrete = minetest.get_content_id("technic:blast_resistant_concrete") - local c_lead = minetest.get_content_id("technic:lead_block") - local c_steel = minetest.get_content_id("technic:stainless_steel_block") - local c_water_source = minetest.get_content_id("default:water_source") - local c_water_flowing = minetest.get_content_id("default:water_flowing") - - local blast_layer, steel_layer, lead_layer, water_layer = 0, 0, 0, 0 - - for z = pos1.z, pos2.z do - for y = pos1.y, pos2.y do - for x = pos1.x, pos2.x do - local cid = data[area:index(x, y, z)] - if x == pos1.x or x == pos2.x or - y == pos1.y or y == pos2.y or - z == pos1.z or z == pos2.z then - if cid == c_blast_concrete then - blast_layer = blast_layer + 1 - end - elseif x == pos1.x+1 or x == pos2.x-1 or - y == pos1.y+1 or y == pos2.y-1 or - z == pos1.z+1 or z == pos2.z-1 then - if cid == c_lead then - lead_layer = lead_layer + 1 - elseif cid == c_steel then - steel_layer = steel_layer + 1 - end - elseif x == pos1.x+2 or x == pos2.x-2 or - y == pos1.y+2 or y == pos2.y-2 or - z == pos1.z+2 or z == pos2.z-2 then - if cid == c_water_source or cid == c_water_flowing then - water_layer = water_layer + 1 - end - end - end - end - end - - if steel_layer >= 96 then - for z = pos1.z+1, pos2.z-1 do - for y = pos1.y+1, pos2.y-1 do - for x = pos1.x+1, pos2.x-1 do - local vi = area:index(x, y, z) - if x == pos1.x+1 or x == pos2.x-1 or - y == pos1.y+1 or y == pos2.y-1 or - z == pos1.z+1 or z == pos2.z-1 then - if data[vi] == c_steel then - data[vi] = c_lead - end - end - end - end - end - vm:set_data(data) - vm:write_to_map() - lead_layer = steel_layer - end - - if water_layer > 25 then water_layer = 25 end - if lead_layer > 96 then lead_layer = 96 end - if blast_layer > 216 then blast_layer = 216 end - return (25 - water_layer) + (96 - lead_layer) + (216 - blast_layer) -end - - -local function melt_down_reactor(pos) - minetest.log("action", "A reactor melted down at "..minetest.pos_to_string(pos)) - minetest.set_node(pos, {name = "technic:corium_source"}) -end - - -local function start_reactor(pos, meta) - if minetest.get_node(pos).name ~= "technic:hv_nuclear_reactor_core" then - return false - end - local inv = meta:get_inventory() - if inv:is_empty("src") then - return false - end - local src_list = inv:get_list("src") - local correct_fuel_count = 0 - for _, src_stack in pairs(src_list) do - if src_stack and src_stack:get_name() == fuel_type then - correct_fuel_count = correct_fuel_count + 1 - end - end - -- Check that the reactor is complete and has the correct fuel - if correct_fuel_count ~= 6 or reactor_structure_badness(pos) ~= 0 then - return false - end - meta:set_int("burn_time", 1) - technic.swap_node(pos, "technic:hv_nuclear_reactor_core_active") - meta:set_int("HV_EU_supply", power_supply) - for idx, src_stack in pairs(src_list) do - src_stack:take_item() - inv:set_stack("src", idx, src_stack) - end - return true -end - - -minetest.register_abm({ - label = "Machines: reactor melt-down check", - nodenames = {"technic:hv_nuclear_reactor_core_active"}, - interval = 4, - chance = 1, - action = function (pos, node) - local meta = minetest.get_meta(pos) - local badness = reactor_structure_badness(pos) - local accum_badness = meta:get_int("structure_accumulated_badness") - if badness == 0 then - if accum_badness ~= 0 then - meta:set_int("structure_accumulated_badness", math.max(accum_badness - 4, 0)) - siren_clear(pos, meta) - end - else - siren_danger(pos, meta) - accum_badness = accum_badness + badness - if accum_badness >= 25 then - melt_down_reactor(pos) - else - meta:set_int("structure_accumulated_badness", accum_badness) - end - end - end, -}) - -local function run(pos, node) - local meta = minetest.get_meta(pos) - local burn_time = meta:get_int("burn_time") or 0 - if burn_time >= burn_ticks or burn_time == 0 then - if digiline_remote_path and meta:get_int("HV_EU_supply") == power_supply then - digiline_remote.send_to_node(pos, meta:get_string("remote_channel"), - "fuel used", 6, true) - end - if meta:get_string("autostart") == "true" then - if start_reactor(pos, meta) then - return - end - end - meta:set_int("HV_EU_supply", 0) - meta:set_int("burn_time", 0) - meta:set_string("infotext", S("%s Idle"):format(reactor_desc)) - technic.swap_node(pos, "technic:hv_nuclear_reactor_core") - meta:set_int("structure_accumulated_badness", 0) - siren_clear(pos, meta) - elseif burn_time > 0 then - burn_time = burn_time + 1 - meta:set_int("burn_time", burn_time) - local percent = math.floor(burn_time / burn_ticks * 100) - meta:set_string("infotext", reactor_desc.." ("..percent.."%)") - meta:set_int("HV_EU_supply", power_supply) - end -end - -local nuclear_reactor_receive_fields = function(pos, formname, fields, sender) - local player_name = sender:get_player_name() - if minetest.is_protected(pos, player_name) then - minetest.chat_send_player(player_name, "You are not allowed to edit this!") - minetest.record_protection_violation(pos, player_name) - return - end - local meta = minetest.get_meta(pos) - local update_formspec = false - if fields.remote_channel then - meta:set_string("remote_channel", fields.remote_channel) - end - if fields.start then - local b = start_reactor(pos, meta) - if b then - minetest.chat_send_player(player_name, "Start successful") - else - minetest.chat_send_player(player_name, "Error") - end - end - if fields.autostart then - meta:set_string("autostart", fields.autostart) - update_formspec = true - end - if fields.enable_digiline then - meta:set_string("enable_digiline", fields.enable_digiline) - update_formspec = true - end - if update_formspec then - meta:set_string("formspec", make_reactor_formspec(meta)) - end -end - -local digiline_remote_def = function(pos, channel, msg) - local meta = minetest.get_meta(pos) - if meta:get_string("enable_digiline") ~= "true" or - channel ~= meta:get_string("remote_channel") then - return - end - -- Convert string messages to tables: - local msgt = type(msg) - if msgt == "string" then - local smsg = msg:lower() - msg = {} - if smsg == "get" then - msg.command = "get" - elseif smsg:sub(1, 13) == "self_destruct" then - msg.command = "self_destruct" - msg.timer = tonumber(smsg:sub(15)) or 0 - elseif smsg == "start" then - msg.command = "start" - end - elseif msgt ~= "table" then - return - end - - if msg.command == "get" then - local inv = meta:get_inventory() - local invtable = {} - for i = 1, 6 do - local stack = inv:get_stack("src", i) - if stack:is_empty() then - invtable[i] = 0 - elseif stack:get_name() == fuel_type then - invtable[i] = stack:get_count() - else - invtable[i] = -stack:get_count() - end - end - digiline_remote.send_to_node(pos, channel, { - burn_time = meta:get_int("burn_time"), - enabled = meta:get_int("HV_EU_supply") == power_supply, - siren = meta:get_int("siren") == 1, - structure_accumulated_badness = meta:get_int("structure_accumulated_badness"), - rods = invtable - }, 6, true) - elseif digiline_meltdown and msg.command == "self_destruct" and - minetest.get_node(pos).name == "technic:hv_nuclear_reactor_core_active" then - if msg.timer ~= 0 and type(msg.timer) == "number" then - siren_danger(pos, meta) - minetest.after(msg.timer, melt_down_reactor, pos) - else - melt_down_reactor(pos) - end - elseif msg.command == "start" then - local b = start_reactor(pos, meta) - if b then - digiline_remote.send_to_node(pos, channel, "Start successful", 6, true) - else - digiline_remote.send_to_node(pos, channel, "Error", 6, true) - end - end -end - -minetest.register_node("technic:hv_nuclear_reactor_core", { - description = reactor_desc, - tiles = { - "technic_hv_nuclear_reactor_core.png", - "technic_hv_nuclear_reactor_core.png"..cable_entry - }, - drawtype = "mesh", - mesh = "technic_reactor.obj", - groups = {cracky = 1, technic_machine = 1, technic_hv = 1, digiline_remote_receive = 1}, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - paramtype = "light", - paramtype2 = "facedir", - stack_max = 1, - on_receive_fields = nuclear_reactor_receive_fields, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", reactor_desc) - meta:set_string("formspec", make_reactor_formspec(meta)) - if digiline_remote_path then - meta:set_string("remote_channel", - "nucelear_reactor"..minetest.pos_to_string(pos)) - end - local inv = meta:get_inventory() - inv:set_size("src", 6) - end, - _on_digiline_remote_receive = digiline_remote_def, - can_dig = technic.machine_can_dig, - on_destruct = function(pos) siren_set_state(pos, SS_OFF) end, - allow_metadata_inventory_put = technic.machine_inventory_put, - allow_metadata_inventory_take = technic.machine_inventory_take, - allow_metadata_inventory_move = technic.machine_inventory_move, - technic_run = run, -}) - -minetest.register_node("technic:hv_nuclear_reactor_core_active", { - tiles = { - "technic_hv_nuclear_reactor_core.png", - "technic_hv_nuclear_reactor_core.png"..cable_entry - }, - drawtype = "mesh", - mesh = "technic_reactor.obj", - groups = {cracky = 1, technic_machine = 1, technic_hv = 1, radioactive = 4, - not_in_creative_inventory = 1, digiline_remote_receive = 1}, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - drop = "technic:hv_nuclear_reactor_core", - light_source = default.LIGHT_MAX, - paramtype = "light", - paramtype2 = "facedir", - on_receive_fields = nuclear_reactor_receive_fields, - _on_digiline_remote_receive = digiline_remote_def, - can_dig = technic.machine_can_dig, - after_dig_node = melt_down_reactor, - on_destruct = function(pos) siren_set_state(pos, SS_OFF) end, - allow_metadata_inventory_put = technic.machine_inventory_put, - allow_metadata_inventory_take = technic.machine_inventory_take, - allow_metadata_inventory_move = technic.machine_inventory_move, - technic_run = run, - technic_on_disable = function(pos, node) - local timer = minetest.get_node_timer(pos) - timer:start(1) - end, - on_timer = function(pos, node) - local meta = minetest.get_meta(pos) - - -- Connected back? - if meta:get_int("HV_EU_timeout") > 0 then return false end - - local burn_time = meta:get_int("burn_time") or 0 - - if burn_time >= burn_ticks or burn_time == 0 then - meta:set_int("HV_EU_supply", 0) - meta:set_int("burn_time", 0) - technic.swap_node(pos, "technic:hv_nuclear_reactor_core") - meta:set_int("structure_accumulated_badness", 0) - siren_clear(pos, meta) - return false - end - - meta:set_int("burn_time", burn_time + 1) - return true - end, -}) - -technic.register_machine("HV", "technic:hv_nuclear_reactor_core", technic.producer) -technic.register_machine("HV", "technic:hv_nuclear_reactor_core_active", technic.producer) - diff --git a/mods/ITEMS/technic/technic/machines/HV/quarry.lua b/mods/ITEMS/technic/technic/machines/HV/quarry.lua deleted file mode 100755 index 6b540ff..0000000 --- a/mods/ITEMS/technic/technic/machines/HV/quarry.lua +++ /dev/null @@ -1,268 +0,0 @@ - -local S = technic.getter - -local tube_entry = "^pipeworks_tube_connection_metallic.png" -local cable_entry = "^technic_cable_connection_overlay.png" - -minetest.register_craft({ - recipe = { - {"technic:carbon_plate", "pipeworks:filter", "technic:composite_plate"}, - {"technic:motor", "technic:machine_casing", "technic:diamond_drill_head"}, - {"technic:carbon_steel_block", "technic:hv_cable", "technic:carbon_steel_block"}}, - output = "technic:quarry", -}) - -local quarry_dig_above_nodes = 3 -- How far above the quarry we will dig nodes -local quarry_max_depth = 100 -local quarry_demand = 10000 -local quarry_eject_dir = vector.new(0, 1, 0) - -local function set_quarry_formspec(meta) - local radius = meta:get_int("size") - local formspec = "size[6,4.3]".. - "list[context;cache;0,1;4,3;]".. - "item_image[4.8,0;1,1;technic:quarry]".. - "label[0,0.2;"..S("%s Quarry"):format("HV").."]".. - "field[4.3,3.5;2,1;size;"..S("Radius:")..";"..radius.."]" - if meta:get_int("enabled") == 0 then - formspec = formspec.."button[4,1;2,1;enable;"..S("Disabled").."]" - else - formspec = formspec.."button[4,1;2,1;disable;"..S("Enabled").."]" - end - local diameter = radius*2 + 1 - local nd = meta:get_int("dug") - local rel_y = quarry_dig_above_nodes - math.floor(nd / (diameter*diameter)) - formspec = formspec.."label[0,4;"..minetest.formspec_escape( - nd == 0 and S("Digging not started") or - (rel_y < -quarry_max_depth and S("Digging finished") or - (meta:get_int("purge_on") == 1 and S("Purging cache") or - S("Digging %d m "..(rel_y > 0 and "above" or "below").." machine") - :format(math.abs(rel_y)))) - ).."]" - formspec = formspec.."button[4,2;2,1;restart;"..S("Restart").."]" - meta:set_string("formspec", formspec) -end - -local function set_quarry_demand(meta) - local radius = meta:get_int("size") - local diameter = radius*2 + 1 - local machine_name = S("%s Quarry"):format("HV") - if meta:get_int("enabled") == 0 or meta:get_int("purge_on") == 1 then - meta:set_string("infotext", S(meta:get_int("purge_on") == 1 and "%s purging cache" or "%s Disabled"):format(machine_name)) - meta:set_int("HV_EU_demand", 0) - elseif meta:get_int("dug") == diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) then - meta:set_string("infotext", S("%s Finished"):format(machine_name)) - meta:set_int("HV_EU_demand", 0) - else - meta:set_string("infotext", S(meta:get_int("HV_EU_input") >= quarry_demand and "%s Active" or "%s Unpowered"):format(machine_name)) - meta:set_int("HV_EU_demand", quarry_demand) - end -end - -local function quarry_receive_fields(pos, formname, fields, sender) - local meta = minetest.get_meta(pos) - if fields.size and string.find(fields.size, "^[0-9]+$") then - local size = tonumber(fields.size) - if size >= 2 and size <= 8 and size ~= meta:get_int("size") then - meta:set_int("size", size) - meta:set_int("dug", 0) - end - end - if fields.enable then meta:set_int("enabled", 1) end - if fields.disable then meta:set_int("enabled", 0) end - if fields.restart then - meta:set_int("dug", 0) - meta:set_int("purge_on", 1) - end - set_quarry_formspec(meta) - set_quarry_demand(meta) -end - -local function quarry_handle_purge(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local i = 0 - for _,stack in ipairs(inv:get_list("cache")) do - i = i + 1 - if stack then - local item = stack:to_table() - if item then - technic.tube_inject_item(pos, pos, quarry_eject_dir, item) - stack:clear() - inv:set_stack("cache", i, stack) - break - end - end - end - if inv:is_empty("cache") then - meta:set_int("purge_on", 0) - end -end - -local function quarry_run(pos, node) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - -- initialize cache for the case we load an older world - inv:set_size("cache", 12) - -- toss a coin whether we do an automatic purge. Chance 1:200 - local purge_rand = math.random() - if purge_rand <= 0.005 then - meta:set_int("purge_on", 1) - end - - if meta:get_int("enabled") and meta:get_int("HV_EU_input") >= quarry_demand and meta:get_int("purge_on") == 0 then - local pdir = minetest.facedir_to_dir(node.param2) - local qdir = pdir.x == 1 and vector.new(0,0,-1) or - (pdir.z == -1 and vector.new(-1,0,0) or - (pdir.x == -1 and vector.new(0,0,1) or - vector.new(1,0,0))) - local radius = meta:get_int("size") - local diameter = radius*2 + 1 - local startpos = vector.add(vector.add(vector.add(pos, - vector.new(0, quarry_dig_above_nodes, 0)), - pdir), - vector.multiply(qdir, -radius)) - local endpos = vector.add(vector.add(vector.add(startpos, - vector.new(0, -quarry_dig_above_nodes-quarry_max_depth, 0)), - vector.multiply(pdir, diameter-1)), - vector.multiply(qdir, diameter-1)) - local vm = VoxelManip() - local minpos, maxpos = vm:read_from_map(startpos, endpos) - local area = VoxelArea:new({MinEdge=minpos, MaxEdge=maxpos}) - local data = vm:get_data() - local c_air = minetest.get_content_id("air") - local owner = meta:get_string("owner") - local nd = meta:get_int("dug") - while nd ~= diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) do - local ry = math.floor(nd / (diameter*diameter)) - local ndl = nd % (diameter*diameter) - if ry % 2 == 1 then - ndl = diameter*diameter - 1 - ndl - end - local rq = math.floor(ndl / diameter) - local rp = ndl % diameter - if rq % 2 == 1 then rp = diameter - 1 - rp end - local digpos = vector.add(vector.add(vector.add(startpos, - vector.new(0, -ry, 0)), - vector.multiply(pdir, rp)), - vector.multiply(qdir, rq)) - local can_dig = true - if can_dig and minetest.is_protected and minetest.is_protected(digpos, owner) then - can_dig = false - end - local dignode - if can_dig then - dignode = technic.get_or_load_node(digpos) or minetest.get_node(digpos) - local dignodedef = minetest.registered_nodes[dignode.name] or {diggable=false} - if not dignodedef.diggable or (dignodedef.can_dig and not dignodedef.can_dig(digpos, nil)) then - can_dig = false - end - end - - if can_dig then - for ay = startpos.y, digpos.y+1, -1 do - local checkpos = {x=digpos.x, y=ay, z=digpos.z} - local checknode = technic.get_or_load_node(checkpos) or minetest.get_node(checkpos) - if checknode.name ~= "air" then - can_dig = false - break - end - end - end - nd = nd + 1 - if can_dig then - minetest.remove_node(digpos) - local drops = minetest.get_node_drops(dignode.name, "") - for _, dropped_item in ipairs(drops) do - local left = inv:add_item("cache", dropped_item) - while not left:is_empty() do - meta:set_int("purge_on", 1) - quarry_handle_purge(pos) - left = inv:add_item("cache", left) - end - end - break - end - end - if nd == diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) then - -- if a quarry is finished, we enable purge mode - meta:set_int("purge_on", 1) - end - meta:set_int("dug", nd) - else - -- if a quarry is disabled or has no power, we enable purge mode - meta:set_int("purge_on", 1) - end - -- if something triggered a purge, we handle it - if meta:get_int("purge_on") == 1 then - quarry_handle_purge(pos) - end - set_quarry_formspec(meta) - set_quarry_demand(meta) -end - -local function send_move_error(player) - minetest.chat_send_player(player:get_player_name(), - S("Manually taking/removing from cache by hand is not possible. ".. - "If you can't wait, restart or disable the quarry to start automatic purge.")) - return 0 -end - -minetest.register_node("technic:quarry", { - description = S("%s Quarry"):format("HV"), - tiles = { - "technic_carbon_steel_block.png"..tube_entry, - "technic_carbon_steel_block.png"..cable_entry, - "technic_carbon_steel_block.png"..cable_entry, - "technic_carbon_steel_block.png"..cable_entry, - "technic_carbon_steel_block.png^tools_diamondpick.png", - "technic_carbon_steel_block.png"..cable_entry - }, - paramtype2 = "facedir", - groups = {cracky=2, tubedevice=1, technic_machine=1, technic_hv=1}, - connect_sides = {"bottom", "front", "left", "right"}, - tube = { - connect_sides = {top = 1}, - -- lower priority than other tubes, so that quarries will prefer any - -- other tube to another quarry, which could lead to server freezes - -- in certain quarry placements (2x2 for example would never eject) - priority = 10, - can_go = function(pos, node, velocity, stack) - -- always eject the same, even if items came in another way - -- this further mitigates loops and generally avoids random sideway movement - -- that can be expected in certain quarry placements - return { quarry_eject_dir } - end - }, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("%s Quarry"):format("HV")) - meta:set_int("size", 4) - set_quarry_formspec(meta) - set_quarry_demand(meta) - end, - after_place_node = function(pos, placer, itemstack) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name()) - pipeworks.scan_for_tube_objects(pos) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("cache") - end, - after_dig_node = pipeworks.scan_for_tube_objects, - on_receive_fields = quarry_receive_fields, - technic_run = quarry_run, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - return send_move_error(player) - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - return send_move_error(player) - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - return send_move_error(player) - end -}) - -technic.register_machine("HV", "technic:quarry", technic.receiver) diff --git a/mods/ITEMS/technic/technic/machines/LV/cables.lua b/mods/ITEMS/technic/technic/machines/LV/cables.lua deleted file mode 100755 index 69c0a24..0000000 --- a/mods/ITEMS/technic/technic/machines/LV/cables.lua +++ /dev/null @@ -1,14 +0,0 @@ - -minetest.register_alias("lv_cable", "technic:lv_cable") - -minetest.register_craft({ - output = 'technic:lv_cable 6', - recipe = { - {'default:paper', 'default:paper', 'default:paper'}, - {'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'}, - {'default:paper', 'default:paper', 'default:paper'}, - } -}) - -technic.register_cable("LV", 2/16) - diff --git a/mods/ITEMS/technic/technic/machines/LV/cnc_api.lua b/mods/ITEMS/technic/technic/machines/LV/cnc_api.lua deleted file mode 100755 index aa85e17..0000000 --- a/mods/ITEMS/technic/technic/machines/LV/cnc_api.lua +++ /dev/null @@ -1,368 +0,0 @@ --- API for the technic CNC machine --- Again code is adapted from the NonCubic Blocks MOD v1.4 by yves_de_beck - -local S = technic.getter - -technic.cnc = {} - --- REGISTER NONCUBIC FORMS, CREATE MODELS AND RECIPES: ------------------------------------------------------- - --- Define slope boxes for the various nodes -------------------------------------------- -technic.cnc.programs = { - { suffix = "technic_cnc_stick", - model = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}, - desc = S("Stick") - }, - - { suffix = "technic_cnc_element_end_double", - model = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5}, - desc = S("Element End Double") - }, - - { suffix = "technic_cnc_element_cross_double", - model = { - {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}, - {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, - {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, - desc = S("Element Cross Double") - }, - - { suffix = "technic_cnc_element_t_double", - model = { - {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, - {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}, - {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}}, - desc = S("Element T Double") - }, - - { suffix = "technic_cnc_element_edge_double", - model = { - {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, - {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, - desc = S("Element Edge Double") - }, - - { suffix = "technic_cnc_element_straight_double", - model = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, - desc = S("Element Straight Double") - }, - - { suffix = "technic_cnc_element_end", - model = {-0.3, -0.5, -0.3, 0.3, 0, 0.5}, - desc = S("Element End") - }, - - { suffix = "technic_cnc_element_cross", - model = { - {0.3, -0.5, -0.3, 0.5, 0, 0.3}, - {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, - {-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, - desc = S("Element Cross") - }, - - { suffix = "technic_cnc_element_t", - model = { - {-0.3, -0.5, -0.5, 0.3, 0, 0.3}, - {-0.5, -0.5, -0.3, -0.3, 0, 0.3}, - {0.3, -0.5, -0.3, 0.5, 0, 0.3}}, - desc = S("Element T") - }, - - { suffix = "technic_cnc_element_edge", - model = { - {-0.3, -0.5, -0.5, 0.3, 0, 0.3}, - {-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, - desc = S("Element Edge") - }, - - { suffix = "technic_cnc_element_straight", - model = {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, - desc = S("Element Straight") - }, - - { suffix = "technic_cnc_oblate_spheroid", - model = "technic_oblate_spheroid.obj", - desc = S("Oblate spheroid"), - cbox = { - type = "fixed", - fixed = { - { -6/16, 4/16, -6/16, 6/16, 8/16, 6/16 }, - { -8/16, -4/16, -8/16, 8/16, 4/16, 8/16 }, - { -6/16, -8/16, -6/16, 6/16, -4/16, 6/16 } - } - } - }, - - { suffix = "technic_cnc_sphere", - model = "technic_sphere.obj", - desc = S("Sphere") - }, - - { suffix = "technic_cnc_cylinder_horizontal", - model = "technic_cylinder_horizontal.obj", - desc = S("Horizontal Cylinder") - }, - - { suffix = "technic_cnc_cylinder", - model = "technic_cylinder.obj", - desc = S("Cylinder") - }, - - { suffix = "technic_cnc_twocurvededge", - model = "technic_two_curved_edge.obj", - desc = S("Two Curved Edge/Corner Block") - }, - - { suffix = "technic_cnc_onecurvededge", - model = "technic_one_curved_edge.obj", - desc = S("One Curved Edge Block") - }, - - { suffix = "technic_cnc_spike", - model = "technic_pyramid_spike.obj", - desc = S("Spike"), - cbox = { - type = "fixed", - fixed = { - { -2/16, 4/16, -2/16, 2/16, 8/16, 2/16 }, - { -4/16, 0, -4/16, 4/16, 4/16, 4/16 }, - { -6/16, -4/16, -6/16, 6/16, 0, 6/16 }, - { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } - } - } - }, - - { suffix = "technic_cnc_pyramid", - model = "technic_pyramid.obj", - desc = S("Pyramid"), - cbox = { - type = "fixed", - fixed = { - { -2/16, -2/16, -2/16, 2/16, 0, 2/16 }, - { -4/16, -4/16, -4/16, 4/16, -2/16, 4/16 }, - { -6/16, -6/16, -6/16, 6/16, -4/16, 6/16 }, - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 } - } - } - }, - - { suffix = "technic_cnc_slope_inner_edge_upsdown", - model = "technic_innercorner_upsdown.obj", - desc = S("Slope Upside Down Inner Edge/Corner"), - sbox = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } - }, - cbox = { - type = "fixed", - fixed = { - { 0.25, -0.25, -0.5, 0.5, -0.5, 0.5 }, - { -0.5, -0.25, 0.25, 0.5, -0.5, 0.5 }, - { 0, 0, -0.5, 0.5, -0.25, 0.5 }, - { -0.5, 0, 0, 0.5, -0.25, 0.5 }, - { -0.25, 0.25, -0.5, 0.5, 0, -0.25 }, - { -0.5, 0.25, -0.25, 0.5, 0, 0.5 }, - { -0.5, 0.5, -0.5, 0.5, 0.25, 0.5 } - } - } - }, - - { suffix = "technic_cnc_slope_edge_upsdown", - model = "technic_outercorner_upsdown.obj", - desc = S("Slope Upside Down Outer Edge/Corner"), - cbox = { - type = "fixed", - fixed = { - { -8/16, 8/16, -8/16, 8/16, 4/16, 8/16 }, - { -4/16, 4/16, -4/16, 8/16, 0, 8/16 }, - { 0, 0, 0, 8/16, -4/16, 8/16 }, - { 4/16, -4/16, 4/16, 8/16, -8/16, 8/16 } - } - } - }, - - { suffix = "technic_cnc_slope_inner_edge", - model = "technic_innercorner.obj", - desc = S("Slope Inner Edge/Corner"), - sbox = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } - }, - cbox = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 }, - { -0.5, -0.25, -0.25, 0.5, 0, 0.5 }, - { -0.25, -0.25, -0.5, 0.5, 0, -0.25 }, - { -0.5, 0, 0, 0.5, 0.25, 0.5 }, - { 0, 0, -0.5, 0.5, 0.25, 0.5 }, - { -0.5, 0.25, 0.25, 0.5, 0.5, 0.5 }, - { 0.25, 0.25, -0.5, 0.5, 0.5, 0.5 } - } - } - }, - - { suffix = "technic_cnc_slope_edge", - model = "technic_outercorner.obj", - desc = S("Slope Outer Edge/Corner"), - cbox = { - type = "fixed", - fixed = { - { 4/16, 4/16, 4/16, 8/16, 8/16, 8/16 }, - { 0, 0, 0, 8/16, 4/16, 8/16 }, - { -4/16, -4/16, -4/16, 8/16, 0, 8/16 }, - { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } - } - } - }, - - { suffix = "technic_cnc_slope_upsdown", - model = "technic_slope_upsdown.obj", - desc = S("Slope Upside Down"), - cbox = { - type = "fixed", - fixed = { - { -8/16, 8/16, -8/16, 8/16, 4/16, 8/16 }, - { -8/16, 4/16, -4/16, 8/16, 0, 8/16 }, - { -8/16, 0, 0, 8/16, -4/16, 8/16 }, - { -8/16, -4/16, 4/16, 8/16, -8/16, 8/16 } - } - } - }, - - { suffix = "technic_cnc_slope_lying", - model = "technic_slope_horizontal.obj", - desc = S("Slope Lying"), - cbox = { - type = "fixed", - fixed = { - { 4/16, -8/16, 4/16, 8/16, 8/16, 8/16 }, - { 0, -8/16, 0, 4/16, 8/16, 8/16 }, - { -4/16, -8/16, -4/16, 0, 8/16, 8/16 }, - { -8/16, -8/16, -8/16, -4/16, 8/16, 8/16 } - } - } - }, - - { suffix = "technic_cnc_slope", - model = "technic_slope.obj", - desc = S("Slope"), - cbox = { - type = "fixed", - fixed = { - { -8/16, 4/16, 4/16, 8/16, 8/16, 8/16 }, - { -8/16, 0, 0, 8/16, 4/16, 8/16 }, - { -8/16, -4/16, -4/16, 8/16, 0, 8/16 }, - { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } - } - } - }, -} - --- Allow disabling certain programs for some node. Default is allowing all types for all nodes -technic.cnc.programs_disable = { - -- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick - -- ... - ["default:dirt"] = {"technic_cnc_oblate_spheroid", "technic_cnc_slope_upsdown", "technic_cnc_edge", - "technic_cnc_inner_edge", "technic_cnc_slope_edge_upsdown", - "technic_cnc_slope_inner_edge_upsdown", "technic_cnc_stick", - "technic_cnc_cylinder_horizontal"} -} - --- Generic function for registering all the different node types -function technic.cnc.register_program(recipeitem, suffix, model, groups, images, description, cbox, sbox) - - local dtype - local nodeboxdef - local meshdef - - if type(model) ~= "string" then -- assume a nodebox if it's a table or function call - dtype = "nodebox" - nodeboxdef = { - type = "fixed", - fixed = model - } - else - dtype = "mesh" - meshdef = model - end - - if cbox and not sbox then sbox = cbox end - - minetest.register_node(":"..recipeitem.."_"..suffix, { - description = description, - drawtype = dtype, - node_box = nodeboxdef, - mesh = meshdef, - tiles = images, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - groups = groups, - selection_box = sbox, - collision_box = cbox - }) -end - --- function to iterate over all the programs the CNC machine knows -function technic.cnc.register_all(recipeitem, groups, images, description) - for _, data in ipairs(technic.cnc.programs) do - -- Disable node creation for disabled node types for some material - local do_register = true - if technic.cnc.programs_disable[recipeitem] ~= nil then - for __, disable in ipairs(technic.cnc.programs_disable[recipeitem]) do - if disable == data.suffix then - do_register = false - end - end - end - -- Create the node if it passes the test - if do_register then - technic.cnc.register_program(recipeitem, data.suffix, data.model, - groups, images, description.." "..data.desc, data.cbox, data.sbox) - end - end -end - - --- REGISTER NEW TECHNIC_CNC_API's PART 2: technic.cnc..register_element_end(subname, recipeitem, groups, images, desc_element_xyz) ------------------------------------------------------------------------------------------------------------------------ -function technic.cnc.register_slope_edge_etc(recipeitem, groups, images, desc_slope, desc_slope_lying, desc_slope_upsdown, desc_slope_edge, desc_slope_inner_edge, desc_slope_upsdwn_edge, desc_slope_upsdwn_inner_edge, desc_pyramid, desc_spike, desc_onecurvededge, desc_twocurvededge, desc_cylinder, desc_cylinder_horizontal, desc_spheroid, desc_element_straight, desc_element_edge, desc_element_t, desc_element_cross, desc_element_end) - - technic.cnc.register_slope(recipeitem, groups, images, desc_slope) - technic.cnc.register_slope_lying(recipeitem, groups, images, desc_slope_lying) - technic.cnc.register_slope_upsdown(recipeitem, groups, images, desc_slope_upsdown) - technic.cnc.register_slope_edge(recipeitem, groups, images, desc_slope_edge) - technic.cnc.register_slope_inner_edge(recipeitem, groups, images, desc_slope_inner_edge) - technic.cnc.register_slope_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_edge) - technic.cnc.register_slope_inner_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_inner_edge) - technic.cnc.register_pyramid(recipeitem, groups, images, desc_pyramid) - technic.cnc.register_spike(recipeitem, groups, images, desc_spike) - technic.cnc.register_onecurvededge(recipeitem, groups, images, desc_onecurvededge) - technic.cnc.register_twocurvededge(recipeitem, groups, images, desc_twocurvededge) - technic.cnc.register_cylinder(recipeitem, groups, images, desc_cylinder) - technic.cnc.register_cylinder_horizontal(recipeitem, groups, images, desc_cylinder_horizontal) - technic.cnc.register_spheroid(recipeitem, groups, images, desc_spheroid) - technic.cnc.register_element_straight(recipeitem, groups, images, desc_element_straight) - technic.cnc.register_element_edge(recipeitem, groups, images, desc_element_edge) - technic.cnc.register_element_t(recipeitem, groups, images, desc_element_t) - technic.cnc.register_element_cross(recipeitem, groups, images, desc_element_cross) - technic.cnc.register_element_end(recipeitem, groups, images, desc_element_end) -end - --- REGISTER STICKS: noncubic.register_xyz(recipeitem, groups, images, desc_element_xyz) ------------------------------------------------------------------------------------------------------------- -function technic.cnc.register_stick_etc(recipeitem, groups, images, desc_stick) - technic.cnc.register_stick(recipeitem, groups, images, desc_stick) -end - -function technic.cnc.register_elements(recipeitem, groups, images, desc_element_straight_double, desc_element_edge_double, desc_element_t_double, desc_element_cross_double, desc_element_end_double) - technic.cnc.register_element_straight_double(recipeitem, groups, images, desc_element_straight_double) - technic.cnc.register_element_edge_double(recipeitem, groups, images, desc_element_edge_double) - technic.cnc.register_element_t_double(recipeitem, groups, images, desc_element_t_double) - technic.cnc.register_element_cross_double(recipeitem, groups, images, desc_element_cross_double) - technic.cnc.register_element_end_double(recipeitem, groups, images, desc_element_end_double) -end - diff --git a/mods/ITEMS/technic/technic/machines/LV/generator.lua b/mods/ITEMS/technic/technic/machines/LV/generator.lua deleted file mode 100755 index 7b72998..0000000 --- a/mods/ITEMS/technic/technic/machines/LV/generator.lua +++ /dev/null @@ -1,18 +0,0 @@ --- The electric generator. --- A simple device to get started on the electric machines. --- Inefficient and expensive in fuel (200EU per tick) --- Also only allows for LV machinery to run. - -minetest.register_alias("lv_generator", "technic:lv_generator") - -minetest.register_craft({ - output = 'technic:lv_generator', - recipe = { - {'default:stone', 'furnace:furnace', 'default:stone'}, - {'default:stone', 'technic:machine_casing', 'default:stone'}, - {'default:stone', 'technic:lv_cable', 'default:stone'}, - } -}) - -technic.register_generator({tier="LV", supply=200}) - diff --git a/mods/ITEMS/technic/technic/machines/LV/geothermal.lua b/mods/ITEMS/technic/technic/machines/LV/geothermal.lua deleted file mode 100755 index e21fa5c..0000000 --- a/mods/ITEMS/technic/technic/machines/LV/geothermal.lua +++ /dev/null @@ -1,113 +0,0 @@ --- A geothermal EU generator --- Using hot lava and water this device can create energy from steam --- The machine is only producing LV EUs and can thus not drive more advanced equipment --- The output is a little more than the coal burning generator (max 300EUs) - -minetest.register_alias("geothermal", "technic:geothermal") - -local S = technic.getter - -minetest.register_craft({ - output = 'technic:geothermal', - recipe = { - {'technic:granite', 'default:diamond', 'technic:granite'}, - {'technic:fine_copper_wire', 'technic:machine_casing', 'technic:fine_copper_wire'}, - {'technic:granite', 'technic:lv_cable', 'technic:granite'}, - } -}) - -minetest.register_craftitem("technic:geothermal", { - description = S("Geothermal %s Generator"):format("LV"), -}) - -local check_node_around = function(pos) - local node = minetest.get_node(pos) - if node.name == "default:water_source" or node.name == "default:water_flowing" then return 1 end - if node.name == "default:lava_source" or node.name == "default:lava_flowing" then return 2 end - return 0 -end - -local run = function(pos, node) - local meta = minetest.get_meta(pos) - local water_nodes = 0 - local lava_nodes = 0 - local production_level = 0 - local eu_supply = 0 - - -- Correct positioning is water on one side and lava on the other. - -- The two cannot be adjacent because the lava the turns into obsidian or rock. - -- To get to 100% production stack the water and lava one extra block down as well: - -- WGL (W=Water, L=Lava, G=the generator, |=an LV cable) - -- W|L - - local positions = { - {x=pos.x+1, y=pos.y, z=pos.z}, - {x=pos.x+1, y=pos.y-1, z=pos.z}, - {x=pos.x-1, y=pos.y, z=pos.z}, - {x=pos.x-1, y=pos.y-1, z=pos.z}, - {x=pos.x, y=pos.y, z=pos.z+1}, - {x=pos.x, y=pos.y-1, z=pos.z+1}, - {x=pos.x, y=pos.y, z=pos.z-1}, - {x=pos.x, y=pos.y-1, z=pos.z-1}, - } - for _, p in pairs(positions) do - local check = check_node_around(p) - if check == 1 then water_nodes = water_nodes + 1 end - if check == 2 then lava_nodes = lava_nodes + 1 end - end - - if water_nodes == 1 and lava_nodes == 1 then production_level = 25; eu_supply = 50 end - if water_nodes == 2 and lava_nodes == 1 then production_level = 50; eu_supply = 100 end - if water_nodes == 1 and lava_nodes == 2 then production_level = 75; eu_supply = 200 end - if water_nodes == 2 and lava_nodes == 2 then production_level = 100; eu_supply = 300 end - - if production_level > 0 then - meta:set_int("LV_EU_supply", eu_supply) - end - - meta:set_string("infotext", - S("Geothermal %s Generator"):format("LV").." ("..production_level.."%)") - - if production_level > 0 and minetest.get_node(pos).name == "technic:geothermal" then - technic.swap_node (pos, "technic:geothermal_active") - return - end - if production_level == 0 then - technic.swap_node(pos, "technic:geothermal") - meta:set_int("LV_EU_supply", 0) - end -end - -minetest.register_node("technic:geothermal", { - description = S("Geothermal %s Generator"):format("LV"), - tiles = {"technic_geothermal_top.png", "technic_machine_bottom.png", "technic_geothermal_side.png", - "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"}, - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, - technic_machine=1, technic_lv=1}, - paramtype2 = "facedir", - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("Geothermal %s Generator"):format("LV")) - meta:set_int("LV_EU_supply", 0) - end, - technic_run = run, -}) - -minetest.register_node("technic:geothermal_active", { - description = S("Geothermal %s Generator"):format("LV"), - tiles = {"technic_geothermal_top_active.png", "technic_machine_bottom.png", "technic_geothermal_side.png", - "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"}, - paramtype2 = "facedir", - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, - technic_machine=1, technic_lv=1, not_in_creative_inventory=1}, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - drop = "technic:geothermal", - technic_run = run, -}) - -technic.register_machine("LV", "technic:geothermal", technic.producer) -technic.register_machine("LV", "technic:geothermal_active", technic.producer) - diff --git a/mods/ITEMS/technic/technic/machines/LV/solar_panel.lua b/mods/ITEMS/technic/technic/machines/LV/solar_panel.lua deleted file mode 100755 index 7eac066..0000000 --- a/mods/ITEMS/technic/technic/machines/LV/solar_panel.lua +++ /dev/null @@ -1,71 +0,0 @@ --- Solar panels are the building blocks of LV solar arrays --- They can however also be used separately but with reduced efficiency due to the missing transformer. --- Individual panels are less efficient than when the panels are combined into full arrays. - -local S = technic.getter - - -minetest.register_craft({ - output = 'technic:solar_panel', - recipe = { - {'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer'}, - {'technic:fine_silver_wire', 'technic:lv_cable', 'mesecons_materials:glue'}, - - } -}) - - -local run = function(pos, node) - -- The action here is to make the solar panel prodice power - -- Power is dependent on the light level and the height above ground - -- There are many ways to cheat by using other light sources like lamps. - -- As there is no way to determine if light is sunlight that is just a shame. - -- To take care of some of it solar panels do not work outside daylight hours or if - -- built below 0m - local pos1 = {x=pos.x, y=pos.y+1, z=pos.z} - local machine_name = S("Small Solar %s Generator"):format("LV") - - local light = minetest.get_node_light(pos1, nil) - local time_of_day = minetest.get_timeofday() - local meta = minetest.get_meta(pos) - if light == nil then light = 0 end - -- turn on panel only during day time and if sufficient light - -- I know this is counter intuitive when cheating by using other light sources underground. - if light >= 12 and time_of_day >= 0.24 and time_of_day <= 0.76 and pos.y > -10 then - local charge_to_give = math.floor((light + pos1.y) * 3) - charge_to_give = math.max(charge_to_give, 0) - charge_to_give = math.min(charge_to_give, 200) - meta:set_string("infotext", S("@1 Active (@2 EU)", machine_name, technic.pretty_num(charge_to_give))) - meta:set_int("LV_EU_supply", charge_to_give) - else - meta:set_string("infotext", S("%s Idle"):format(machine_name)) - meta:set_int("LV_EU_supply", 0) - end -end - -minetest.register_node("technic:solar_panel", { - tiles = {"technic_solar_panel_top.png", "technic_solar_panel_bottom.png", "technic_solar_panel_side.png", - "technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"}, - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, - technic_machine=1, technic_lv=1}, - connect_sides = {"bottom"}, - sounds = default.node_sound_wood_defaults(), - description = S("Small Solar %s Generator"):format("LV"), - active = false, - drawtype = "nodebox", - paramtype = "light", - is_ground_content = true, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - }, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_int("LV_EU_supply", 0) - meta:set_string("infotext", S("Small Solar %s Generator"):format("LV")) - end, - technic_run = run, -}) - -technic.register_machine("LV", "technic:solar_panel", technic.producer) - diff --git a/mods/ITEMS/technic/technic/machines/MV/cables.lua b/mods/ITEMS/technic/technic/machines/MV/cables.lua deleted file mode 100755 index 7d63dfd..0000000 --- a/mods/ITEMS/technic/technic/machines/MV/cables.lua +++ /dev/null @@ -1,14 +0,0 @@ - -minetest.register_alias("mv_cable", "technic:mv_cable") - -minetest.register_craft({ - output = 'technic:mv_cable 3', - recipe ={ - {'technic:rubber', 'technic:rubber', 'technic:rubber'}, - {'technic:lv_cable', 'technic:lv_cable', 'technic:lv_cable'}, - {'technic:rubber', 'technic:rubber', 'technic:rubber'}, - } -}) - -technic.register_cable("MV", 2.5/16) - diff --git a/mods/ITEMS/technic/technic/machines/MV/lighting.lua b/mods/ITEMS/technic/technic/machines/MV/lighting.lua deleted file mode 100755 index f70c332..0000000 --- a/mods/ITEMS/technic/technic/machines/MV/lighting.lua +++ /dev/null @@ -1,590 +0,0 @@ --- NOTE: The code is takes directly from VanessaE's homedecor mod. --- I just made it the lights into indictive appliances for this mod. - --- This file supplies electric powered glowlights - --- Boilerplate to support localized strings if intllib mod is installed. -local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function (s) return s end -end - -function technic_homedecor_node_is_owned(pos, placer) - local ownername = false - if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod - if HasOwner(pos, placer) then - if not IsPlayerNodeOwner(pos, placer:get_player_name()) then - if type(getLastOwner) == "function" then -- ...is an old version - ownername = getLastOwner(pos) - elseif type(GetNodeOwnerName) == "function" then -- ...is a recent version - ownername = GetNodeOwnerName(pos) - else - ownername = S("someone") - end - end - end - - elseif type(isprotect) == "function" then -- glomie's protection mod - if not isprotect(5, pos, placer) then - ownername = S("someone") - end - elseif type(protector) == "table" and type(protector.can_dig) == "function" then -- Zeg9's protection mod - if not protector.can_dig(5, pos, placer) then - ownername = S("someone") - end - end - - if ownername ~= false then - minetest.chat_send_player(placer:get_player_name(), S("Sorry, %s owns that spot."):format(ownername) ) - return true - else - return false - end -end - -local dirs1 = {20, 23, 22, 21} -local dirs2 = {9, 18, 7, 12} - -local technic_homedecor_rotate_and_place = function(itemstack, placer, pointed_thing) - if not technic_homedecor_node_is_owned(pointed_thing.under, placer) - and not technic_homedecor_node_is_owned(pointed_thing.above, placer) then - local node = minetest.get_node(pointed_thing.under) - if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then - - local above = pointed_thing.above - local under = pointed_thing.under - local pitch = placer:get_look_pitch() - local pname = minetest.get_node(under).name - local node = minetest.get_node(above) - local fdir = minetest.dir_to_facedir(placer:get_look_dir()) - local wield_name = itemstack:get_name() - - if not minetest.registered_nodes[pname] - or not minetest.registered_nodes[pname].on_rightclick then - - local iswall = (above.x ~= under.x) or (above.z ~= under.z) - local isceiling = (above.x == under.x) and (above.z == under.z) and (pitch > 0) - local pos1 = above - - if minetest.registered_nodes[pname]["buildable_to"] then - pos1 = under - iswall = false - end - - if not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end - - if iswall then - minetest.add_node(pos1, {name = wield_name, param2 = dirs2[fdir+1] }) -- place wall variant - elseif isceiling then - minetest.add_node(pos1, {name = wield_name, param2 = 20 }) -- place upside down variant - else - minetest.add_node(pos1, {name = wield_name, param2 = 0 }) -- place right side up - end - - if not homedecor_expect_infinite_stacks then - itemstack:take_item() - return itemstack - end - end - else - minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) - end - end -end - --- Yellow -- Half node -minetest.register_node('technic:homedecor_glowlight_half_yellow', { - description = S("Yellow Glowlight (thick)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_yellow_tb.png', - 'technic_homedecor_glowlight_yellow_tb.png', - 'technic_homedecor_glowlight_thick_yellow_sides.png', - 'technic_homedecor_glowlight_thick_yellow_sides.png', - 'technic_homedecor_glowlight_thick_yellow_sides.png', - 'technic_homedecor_glowlight_thick_yellow_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } - }, - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3 }, - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 100, "Yellow Glowlight (thick)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_off(pos, 100, "technic:homedecor_glowlight_half_yellow_active") - end -}) - -minetest.register_node('technic:homedecor_glowlight_half_yellow_active', { - description = S("Yellow Glowlight (thick)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_yellow_tb.png', - 'technic_homedecor_glowlight_yellow_tb.png', - 'technic_homedecor_glowlight_thick_yellow_sides.png', - 'technic_homedecor_glowlight_thick_yellow_sides.png', - 'technic_homedecor_glowlight_thick_yellow_sides.png', - 'technic_homedecor_glowlight_thick_yellow_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } - }, - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - light_source = default.LIGHT_MAX, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3, not_in_creative_inventory=1}, - drop="technic:homedecor_glowlight_half_yellow", - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 100, "Yellow Glowlight (thick)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_half_yellow") - end -}) - --- Yellow -- Quarter node -minetest.register_node('technic:homedecor_glowlight_quarter_yellow', { - description = S("Yellow Glowlight (thin)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_yellow_tb.png', - 'technic_homedecor_glowlight_yellow_tb.png', - 'technic_homedecor_glowlight_thin_yellow_sides.png', - 'technic_homedecor_glowlight_thin_yellow_sides.png', - 'technic_homedecor_glowlight_thin_yellow_sides.png', - 'technic_homedecor_glowlight_thin_yellow_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } - }, - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3 }, - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 100, "Yellow Glowlight (thin)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_off(pos, 100, "technic:homedecor_glowlight_quarter_yellow_active") - end -}) - -minetest.register_node('technic:homedecor_glowlight_quarter_yellow_active', { - description = S("Yellow Glowlight (thin)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_yellow_tb.png', - 'technic_homedecor_glowlight_yellow_tb.png', - 'technic_homedecor_glowlight_thin_yellow_sides.png', - 'technic_homedecor_glowlight_thin_yellow_sides.png', - 'technic_homedecor_glowlight_thin_yellow_sides.png', - 'technic_homedecor_glowlight_thin_yellow_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } - }, - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - light_source = default.LIGHT_MAX - 1, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3, not_in_creative_inventory=1}, - drop="technic:homedecor_glowlight_quarter_yellow", - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 100, "Yellow Glowlight (thin)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_quarter_yellow") - end -}) - - --- White -- half node -minetest.register_node('technic:homedecor_glowlight_half_white', { - description = S("White Glowlight (thick)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_white_tb.png', - 'technic_homedecor_glowlight_white_tb.png', - 'technic_homedecor_glowlight_thick_white_sides.png', - 'technic_homedecor_glowlight_thick_white_sides.png', - 'technic_homedecor_glowlight_thick_white_sides.png', - 'technic_homedecor_glowlight_thick_white_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } - }, - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3 }, - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 100, "White Glowlight (thick)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_off(pos, 100, "technic:homedecor_glowlight_half_white_active") - end -}) - -minetest.register_node('technic:homedecor_glowlight_half_white_active', { - description = S("White Glowlight (thick)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_white_tb.png', - 'technic_homedecor_glowlight_white_tb.png', - 'technic_homedecor_glowlight_thick_white_sides.png', - 'technic_homedecor_glowlight_thick_white_sides.png', - 'technic_homedecor_glowlight_thick_white_sides.png', - 'technic_homedecor_glowlight_thick_white_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } - }, - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - light_source = default.LIGHT_MAX, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3, not_in_creative_inventory=1}, - drop="technic:homedecor_glowlight_half_white", - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 100, "White Glowlight (thick)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_half_white") - end -}) - --- White -- Quarter node -minetest.register_node('technic:homedecor_glowlight_quarter_white', { - description = S("White Glowlight (thin)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_white_tb.png', - 'technic_homedecor_glowlight_white_tb.png', - 'technic_homedecor_glowlight_thin_white_sides.png', - 'technic_homedecor_glowlight_thin_white_sides.png', - 'technic_homedecor_glowlight_thin_white_sides.png', - 'technic_homedecor_glowlight_thin_white_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } - }, - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3 }, - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 100, "White Glowlight (thin)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_off(pos, 100, "technic:homedecor_glowlight_quarter_white_active") - end -}) - -minetest.register_node('technic:homedecor_glowlight_quarter_white_active', { - description = S("White Glowlight (thin)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_white_tb.png', - 'technic_homedecor_glowlight_white_tb.png', - 'technic_homedecor_glowlight_thin_white_sides.png', - 'technic_homedecor_glowlight_thin_white_sides.png', - 'technic_homedecor_glowlight_thin_white_sides.png', - 'technic_homedecor_glowlight_thin_white_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } - }, - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - light_source = default.LIGHT_MAX - 1, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3, not_in_creative_inventory=1}, - drop="technic:homedecor_glowlight_quarter_white", - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 100, "White Glowlight (thin)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_quarter_white") - end -}) - --- Glowlight "cubes" - yellow -minetest.register_node('technic:homedecor_glowlight_small_cube_yellow', { - description = S("Yellow Glowlight (small cube)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_cube_yellow_tb.png', - 'technic_homedecor_glowlight_cube_yellow_tb.png', - 'technic_homedecor_glowlight_cube_yellow_sides.png', - 'technic_homedecor_glowlight_cube_yellow_sides.png', - 'technic_homedecor_glowlight_cube_yellow_sides.png', - 'technic_homedecor_glowlight_cube_yellow_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } - }, - node_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3 }, - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 50, "Yellow Glowlight (small cube)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_off(pos, 50, "technic:homedecor_glowlight_small_cube_yellow_active") - end -}) - -minetest.register_node('technic:homedecor_glowlight_small_cube_yellow_active', { - description = S("Yellow Glowlight (small cube)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_cube_yellow_tb.png', - 'technic_homedecor_glowlight_cube_yellow_tb.png', - 'technic_homedecor_glowlight_cube_yellow_sides.png', - 'technic_homedecor_glowlight_cube_yellow_sides.png', - 'technic_homedecor_glowlight_cube_yellow_sides.png', - 'technic_homedecor_glowlight_cube_yellow_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } - }, - node_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - light_source = default.LIGHT_MAX - 1, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3, not_in_creative_inventory=1}, - drop="technic:homedecor_glowlight_small_cube_yellow", - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 50, "Yellow Glowlight (small cube)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_small_cube_yellow") - end -}) - --- Glowlight "cubes" - white -minetest.register_node('technic:homedecor_glowlight_small_cube_white', { - description = S("White Glowlight (small cube)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_cube_white_tb.png', - 'technic_homedecor_glowlight_cube_white_tb.png', - 'technic_homedecor_glowlight_cube_white_sides.png', - 'technic_homedecor_glowlight_cube_white_sides.png', - 'technic_homedecor_glowlight_cube_white_sides.png', - 'technic_homedecor_glowlight_cube_white_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } - }, - node_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3 }, - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 50, "White Glowlight (small cube)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_off(pos, 50, "technic:homedecor_glowlight_small_cube_white_active") - end -}) - -minetest.register_node('technic:homedecor_glowlight_small_cube_white_active', { - description = S("White Glowlight (small cube)"), - drawtype = "nodebox", - tiles = { - 'technic_homedecor_glowlight_cube_white_tb.png', - 'technic_homedecor_glowlight_cube_white_tb.png', - 'technic_homedecor_glowlight_cube_white_sides.png', - 'technic_homedecor_glowlight_cube_white_sides.png', - 'technic_homedecor_glowlight_cube_white_sides.png', - 'technic_homedecor_glowlight_cube_white_sides.png' - }, - selection_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } - }, - node_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } - }, - - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - light_source = default.LIGHT_MAX - 1, - sounds = default.node_sound_wood_defaults(), - - groups = { snappy = 3, not_in_creative_inventory=1}, - drop="technic:homedecor_glowlight_small_cube_white", - on_place = function(itemstack, placer, pointed_thing) - technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) - return itemstack - end, - on_construct = function(pos) - technic.inductive_on_construct(pos, 50, "White Glowlight (small cube)") - end, - on_punch = function(pos, node, puncher) - technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_small_cube_white") - end -}) - -technic.register_inductive_machine("technic:homedecor_glowlight_half_yellow") -technic.register_inductive_machine("technic:homedecor_glowlight_half_white") -technic.register_inductive_machine("technic:homedecor_glowlight_quarter_yellow") -technic.register_inductive_machine("technic:homedecor_glowlight_quarter_white") -technic.register_inductive_machine("technic:homedecor_glowlight_small_cube_yellow") -technic.register_inductive_machine("technic:homedecor_glowlight_small_cube_white") diff --git a/mods/ITEMS/technic/technic/machines/MV/tool_workshop.lua b/mods/ITEMS/technic/technic/machines/MV/tool_workshop.lua deleted file mode 100755 index 1c63812..0000000 --- a/mods/ITEMS/technic/technic/machines/MV/tool_workshop.lua +++ /dev/null @@ -1,127 +0,0 @@ --- Tool workshop --- This machine repairs tools. - -minetest.register_alias("tool_workshop", "technic:tool_workshop") - -local S = technic.getter - -local tube_entry = "^pipeworks_tube_connection_wooden.png" - -minetest.register_craft({ - output = 'technic:tool_workshop', - recipe = { - {'group:wood', 'default:diamond', 'group:wood'}, - {'mesecons_pistons:piston_sticky_off', 'technic:machine_casing', 'technic:carbon_cloth'}, - {'default:obsidian', 'technic:mv_cable', 'default:obsidian'}, - } -}) - -local workshop_demand = {5000, 3500, 2000} - -local workshop_formspec = - "invsize[8,9;]".. - "list[current_name;src;3,1;1,1;]".. - "label[0,0;"..S("%s Tool Workshop"):format("MV").."]".. - "list[current_name;upgrade1;1,3;1,1;]".. - "list[current_name;upgrade2;2,3;1,1;]".. - "label[1,4;"..S("Upgrade Slots").."]".. - "list[current_player;main;0,5;8,4;]".. - "listring[current_player;main]".. - "listring[current_name;src]".. - "listring[current_player;main]".. - "listring[current_name;upgrade1]".. - "listring[current_player;main]".. - "listring[current_name;upgrade2]".. - "listring[current_player;main]" - -local run = function(pos, node) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local eu_input = meta:get_int("MV_EU_input") - local machine_name = S("%s Tool Workshop"):format("MV") - local machine_node = "technic:tool_workshop" - - -- Setup meta data if it does not exist. - if not eu_input then - meta:set_int("MV_EU_demand", workshop_demand[1]) - meta:set_int("MV_EU_input", 0) - return - end - - local EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) - - local repairable = false - local srcstack = inv:get_stack("src", 1) - if not srcstack:is_empty() then - local itemdef = minetest.registered_items[srcstack:get_name()] - if itemdef and - (not itemdef.wear_represents or - itemdef.wear_represents == "mechanical_wear") and - srcstack:get_wear() ~= 0 then - repairable = true - end - end - technic.handle_machine_pipeworks(pos, tube_upgrade, function (pos, x_velocity, z_velocity) - if not repairable then - technic.send_items(pos, x_velocity, z_velocity, "src") - end - end) - if not repairable then - meta:set_string("infotext", S("%s Idle"):format(machine_name)) - meta:set_int("MV_EU_demand", 0) - return - end - - if eu_input < workshop_demand[EU_upgrade+1] then - meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) - elseif eu_input >= workshop_demand[EU_upgrade+1] then - meta:set_string("infotext", S("%s Active"):format(machine_name)) - srcstack:add_wear(-1000) - inv:set_stack("src", 1, srcstack) - end - meta:set_int("MV_EU_demand", workshop_demand[EU_upgrade+1]) -end - -minetest.register_node("technic:tool_workshop", { - description = S("%s Tool Workshop"):format("MV"), - paramtype2 = "facedir", - tiles = { - "technic_workshop_top.png"..tube_entry, - "technic_machine_bottom.png"..tube_entry, - "technic_workshop_side.png"..tube_entry, - "technic_workshop_side.png"..tube_entry, - "technic_workshop_side.png"..tube_entry, - "technic_workshop_side.png" - }, - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, - technic_machine=1, technic_mv=1, tubedevice=1, tubedevice_receiver=1}, - connect_sides = {"bottom", "back", "left", "right"}, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("%s Tool Workshop"):format("MV")) - meta:set_string("formspec", workshop_formspec) - local inv = meta:get_inventory() - inv:set_size("src", 1) - inv:set_size("upgrade1", 1) - inv:set_size("upgrade2", 1) - end, - can_dig = technic.machine_can_dig, - allow_metadata_inventory_put = technic.machine_inventory_put, - allow_metadata_inventory_take = technic.machine_inventory_take, - tube = { - can_insert = function (pos, node, stack, direction) - return minetest.get_meta(pos):get_inventory():room_for_item("src", stack) - end, - insert_object = function (pos, node, stack, direction) - return minetest.get_meta(pos):get_inventory():add_item("src", stack) - end, - connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1}, - }, - technic_run = run, - after_place_node = pipeworks.after_place, - after_dig_node = technic.machine_after_dig_node -}) - -technic.register_machine("MV", "technic:tool_workshop", technic.receiver) - diff --git a/mods/ITEMS/technic/technic/machines/other/coal_alloy_furnace.lua b/mods/ITEMS/technic/technic/machines/other/coal_alloy_furnace.lua deleted file mode 100755 index 008a3fe..0000000 --- a/mods/ITEMS/technic/technic/machines/other/coal_alloy_furnace.lua +++ /dev/null @@ -1,178 +0,0 @@ - --- Fuel driven alloy furnace. This uses no EUs: - -local S = technic.getter - -minetest.register_craft({ - output = 'technic:coal_alloy_furnace', - recipe = { - {'default:brick', 'default:brick', 'default:brick'}, - {'default:brick', '', 'default:brick'}, - {'default:brick', 'default:brick', 'default:brick'}, - } -}) - -local machine_name = S("Fuel-Fired Alloy Furnace") -local formspec = - "size[8,9]".. - "label[0,0;"..machine_name.."]".. - "image[2,2;1,1;furnace_furnace_fire_bg.png]".. - "list[current_name;fuel;2,3;1,1;]".. - "list[current_name;src;2,1;2,1;]".. - "list[current_name;dst;5,1;2,2;]".. - "list[current_player;main;0,5;8,4;]".. - "listring[current_name;dst]".. - "listring[current_player;main]".. - "listring[current_name;src]".. - "listring[current_player;main]".. - "listring[current_name;fuel]".. - "listring[current_player;main]" - -minetest.register_node("technic:coal_alloy_furnace", { - description = machine_name, - tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", - "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", - "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front.png"}, - paramtype2 = "facedir", - groups = {cracky=2}, - legacy_facedir_simple = true, - sounds = default.node_sound_stone_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec) - meta:set_string("infotext", machine_name) - local inv = meta:get_inventory() - inv:set_size("fuel", 1) - inv:set_size("src", 2) - inv:set_size("dst", 4) - end, - can_dig = technic.machine_can_dig, - allow_metadata_inventory_put = technic.machine_inventory_put, - allow_metadata_inventory_take = technic.machine_inventory_take, - allow_metadata_inventory_move = technic.machine_inventory_move, -}) - -minetest.register_node("technic:coal_alloy_furnace_active", { - description = machine_name, - tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", - "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", - "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front_active.png"}, - paramtype2 = "facedir", - light_source = 8, - drop = "technic:coal_alloy_furnace", - groups = {cracky=2, not_in_creative_inventory=1}, - legacy_facedir_simple = true, - sounds = default.node_sound_stone_defaults(), - can_dig = technic.machine_can_dig, - allow_metadata_inventory_put = technic.machine_inventory_put, - allow_metadata_inventory_take = technic.machine_inventory_take, - allow_metadata_inventory_move = technic.machine_inventory_move, -}) - -minetest.register_abm({ - label = "Machines: run coal alloy furnace", - nodenames = {"technic:coal_alloy_furnace", "technic:coal_alloy_furnace_active"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - - if inv:get_size("src") == 1 then -- Old furnace -> convert it - inv:set_size("src", 2) - inv:set_stack("src", 2, inv:get_stack("src2", 1)) - inv:set_size("src2", 0) - end - - local recipe = nil - - for i, name in pairs({ - "fuel_totaltime", - "fuel_time", - "src_totaltime", - "src_time"}) do - if not meta:get_float(name) then - meta:set_float(name, 0.0) - end - end - - -- Get what to cook if anything - local result = technic.get_recipe("alloy", inv:get_list("src")) - - local was_active = false - - if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then - was_active = true - meta:set_int("fuel_time", meta:get_int("fuel_time") + 1) - if result then - meta:set_int("src_time", meta:get_int("src_time") + 1) - if meta:get_int("src_time") >= result.time then - meta:set_int("src_time", 0) - local result_stack = ItemStack(result.output) - if inv:room_for_item("dst", result_stack) then - inv:set_list("src", result.new_input) - inv:add_item("dst", result_stack) - end - end - else - meta:set_int("src_time", 0) - end - end - - if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then - local percent = math.floor(meta:get_float("fuel_time") / - meta:get_float("fuel_totaltime") * 100) - meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..percent.."%)") - technic.swap_node(pos, "technic:coal_alloy_furnace_active") - meta:set_string("formspec", - "size[8,9]".. - "label[0,0;"..machine_name.."]".. - "image[2,2;1,1;furnace_furnace_fire_bg.png^[lowpart:".. - (100 - percent)..":furnace_furnace_fire_fg.png]".. - "list[current_name;fuel;2,3;1,1;]".. - "list[current_name;src;2,1;2,1;]".. - "list[current_name;dst;5,1;2,2;]".. - "list[current_player;main;0,5;8,4;]".. - "listring[current_name;dst]".. - "listring[current_player;main]".. - "listring[current_name;src]".. - "listring[current_player;main]".. - "listring[current_name;fuel]".. - "listring[current_player;main]") - return - end - - local recipe = technic.get_recipe("alloy", inv:get_list("src")) - - if not recipe then - if was_active then - meta:set_string("infotext", S("%s is empty"):format(machine_name)) - technic.swap_node(pos, "technic:coal_alloy_furnace") - meta:set_string("formspec", formspec) - end - return - end - - -- Next take a hard look at the fuel situation - local fuel = nil - local afterfuel - local fuellist = inv:get_list("fuel") - - if fuellist then - fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) - end - - if fuel.time <= 0 then - meta:set_string("infotext", S("%s Out Of Fuel"):format(machine_name)) - technic.swap_node(pos, "technic:coal_alloy_furnace") - meta:set_string("formspec", formspec) - return - end - - meta:set_string("fuel_totaltime", fuel.time) - meta:set_string("fuel_time", 0) - - inv:set_stack("fuel", 1, afterfuel.items[1]) - end, -}) - diff --git a/mods/ITEMS/technic/technic/machines/other/coal_furnace.lua b/mods/ITEMS/technic/technic/machines/other/coal_furnace.lua deleted file mode 100755 index 818086d..0000000 --- a/mods/ITEMS/technic/technic/machines/other/coal_furnace.lua +++ /dev/null @@ -1,5 +0,0 @@ -local S = technic.getter - -if minetest.registered_nodes["furnace:furnace"].description == "Furnace" then - minetest.override_item("furnace:furnace", { description = S("Fuel-Fired Furnace") }) -end diff --git a/mods/ITEMS/technic/technic/machines/other/frames.lua b/mods/ITEMS/technic/technic/machines/other/frames.lua deleted file mode 100755 index 4e4bf0e..0000000 --- a/mods/ITEMS/technic/technic/machines/other/frames.lua +++ /dev/null @@ -1,928 +0,0 @@ - -local S = technic.getter - -frames = {} - -local infinite_stacks = minetest.settings:get_bool("creative_mode") and minetest.get_modpath("unified_inventory") == nil - -local frames_pos = {} - --- Helpers - -local function get_face(pos,ppos,pvect) - -- Raytracer to get which face has been clicked - ppos={x=ppos.x-pos.x,y=ppos.y-pos.y+1.5,z=ppos.z-pos.z} - if pvect.x>0 then - local t=(-0.5-ppos.x)/pvect.x - local y_int=ppos.y+t*pvect.y - local z_int=ppos.z+t*pvect.z - if y_int>-0.45 and y_int<0.45 and z_int>-0.45 and z_int<0.45 then return 1 end - elseif pvect.x<0 then - local t=(0.5-ppos.x)/pvect.x - local y_int=ppos.y+t*pvect.y - local z_int=ppos.z+t*pvect.z - if y_int>-0.45 and y_int<0.45 and z_int>-0.45 and z_int<0.45 then return 2 end - end - if pvect.y>0 then - local t=(-0.5-ppos.y)/pvect.y - local x_int=ppos.x+t*pvect.x - local z_int=ppos.z+t*pvect.z - if x_int>-0.45 and x_int<0.45 and z_int>-0.45 and z_int<0.45 then return 3 end - elseif pvect.y<0 then - local t=(0.5-ppos.y)/pvect.y - local x_int=ppos.x+t*pvect.x - local z_int=ppos.z+t*pvect.z - if x_int>-0.45 and x_int<0.45 and z_int>-0.45 and z_int<0.45 then return 4 end - end - if pvect.z>0 then - local t=(-0.5-ppos.z)/pvect.z - local x_int=ppos.x+t*pvect.x - local y_int=ppos.y+t*pvect.y - if x_int>-0.45 and x_int<0.45 and y_int>-0.45 and y_int<0.45 then return 5 end - elseif pvect.z<0 then - local t=(0.5-ppos.z)/pvect.z - local x_int=ppos.x+t*pvect.x - local y_int=ppos.y+t*pvect.y - if x_int>-0.45 and x_int<0.45 and y_int>-0.45 and y_int<0.45 then return 6 end - end -end - -local function lines(str) - local t = {} - local function helper(line) table.insert(t, line) return "" end - helper((str:gsub("(.-)\r?\n", helper))) - return t -end - -local function pos_to_string(pos) - if pos.x == 0 then pos.x = 0 end -- Fix for signed 0 - if pos.y == 0 then pos.y = 0 end -- Fix for signed 0 - if pos.z == 0 then pos.z = 0 end -- Fix for signed 0 - return tostring(pos.x).."\n"..tostring(pos.y).."\n"..tostring(pos.z) -end - -local function pos_from_string(str) - local l = lines(str) - return {x = tonumber(l[1]), y = tonumber(l[2]), z = tonumber(l[3])} -end - -local function pos_in_list(l,pos) - for _,p in ipairs(l) do - if p.x==pos.x and p.y==pos.y and p.z==pos.z then return true end - end - return false -end - -local function table_empty(table) - for _, __ in pairs(table) do - return false - end - return true -end - -local function add_table(table,toadd) - local i = 1 - while true do - o = table[i] - if o == toadd then return end - if o == nil then break end - i = i+1 - end - table[i] = toadd -end - -local function move_nodes_vect(poslist,vect,must_not_move,owner) - if minetest.is_protected then - for _,pos in ipairs(poslist) do - local npos=vector.add(pos,vect) - if minetest.is_protected(pos, owner) or minetest.is_protected(npos, owner) then - return - end - end - end - for _,pos in ipairs(poslist) do - local npos=vector.add(pos,vect) - local name = minetest.get_node(npos).name - if ((name~="air" and minetest.registered_nodes[name].liquidtype=="none") or frames_pos[pos_to_string(npos)]) and not(pos_in_list(poslist,npos)) then - return - end - --[[if pos.x==must_not_move.x and pos.y==must_not_move.y and pos.z==must_not_move.z then - return - end]] - end - local nodelist = {} - for _, pos in ipairs(poslist) do - local node = minetest.get_node(pos) - local meta = minetest.get_meta(pos):to_table() - nodelist[#(nodelist)+1] = {oldpos = pos, pos = vector.add(pos, vect), node = node, meta = meta} - end - local objects = {} - for _, pos in ipairs(poslist) do - for _,object in ipairs(minetest.get_objects_inside_radius(pos, 1)) do - local entity = object:get_luaentity() - if not entity or not mesecon.is_mvps_unmov(entity.name) then - add_table(objects, object) - end - end - end - for _, obj in ipairs(objects) do - obj:setpos(vector.add(obj:getpos(), vect)) - end - for _,n in ipairs(nodelist) do - local npos = n.pos - minetest.set_node(npos, n.node) - local meta = minetest.get_meta(npos) - meta:from_table(n.meta) - for __,pos in ipairs(poslist) do - if npos.x == pos.x and npos.y == pos.y and npos.z == pos.z then - table.remove(poslist, __) - break - end - end - end - for __, pos in ipairs(poslist) do - minetest.remove_node(pos) - end - for _, callback in ipairs(mesecon.on_mvps_move) do - callback(nodelist) - end -end - -local function is_supported_node(name) - return ((string.find(name, "tube") ~= nil) and (string.find(name, "pipeworks") ~= nil)) -end - - --- Frames -for xm=0,1 do -for xp=0,1 do -for ym=0,1 do -for yp=0,1 do -for zm=0,1 do -for zp=0,1 do - -local a=8/16 -local b=7/16 -local nodeboxes= { - { -a, -a, -a, -b, a, -b }, - { -a, -a, b, -b, a, a }, - { b, -a, b, a, a, a }, - { b, -a, -a, a, a, -b }, - - { -b, b, -a, b, a, -b }, - { -b, -a, -a, b, -b, -b }, - - { -b, b, b, b, a, a }, - { -b, -a, b, b, -b, a }, - - { b, b, -b, a, a, b }, - { b, -a, -b, a, -b, b }, - - { -a, b, -b, -b, a, b }, - { -a, -a, -b, -b, -b, b }, - } - - if yp==0 then - table.insert(nodeboxes, {-b,b,-b, b,a,b}) - end - if ym==0 then - table.insert(nodeboxes, {-b,-a,-b, b,-b,b}) - end - if xp==0 then - table.insert(nodeboxes, {b,b,b,a,-b,-b}) - end - if xm==0 then - table.insert(nodeboxes, {-a,-b,-b,-b,b,b}) - end - if zp==0 then - table.insert(nodeboxes, {-b,-b,b, b,b,a}) - end - if zm==0 then - table.insert(nodeboxes, {-b,-b,-a, b,b,-b}) - end - - local nameext=tostring(xm)..tostring(xp)..tostring(ym)..tostring(yp)..tostring(zm)..tostring(zp) - local groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2} - if nameext~="111111" then groups.not_in_creative_inventory=1 end - - - minetest.register_node("technic:frame_"..nameext,{ - description = S("Frame"), - tiles = {"technic_frame.png"}, - groups=groups, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed=nodeboxes, - }, - selection_box = { - type="fixed", - fixed={-0.5,-0.5,-0.5,0.5,0.5,0.5} - }, - paramtype = "light", - frame=1, - drop="technic:frame_111111", - sunlight_propagates = true, - frame_connect_all=function(nodename) - l2={} - l1={{x=-1,y=0,z=0},{x=1,y=0,z=0},{x=0,y=-1,z=0},{x=0,y=1,z=0},{x=0,y=0,z=-1},{x=0,y=0,z=1}} - for i,dir in ipairs(l1) do - if string.sub(nodename,-7+i,-7+i)=="1" then - l2[#(l2)+1]=dir - end - end - return l2 - end, - on_punch=function(pos,node,puncher) - local ppos=puncher:getpos() - local pvect=puncher:get_look_dir() - local pface=get_face(pos,ppos,pvect) - if pface==nil then return end - local nodename=node.name - local newstate=tostring(1-tonumber(string.sub(nodename,-7+pface,-7+pface))) - if pface<=5 then - nodename=string.sub(nodename,1,-7+pface-1)..newstate..string.sub(nodename,-7+pface+1) - else - nodename=string.sub(nodename,1,-2)..newstate - end - node.name=nodename - minetest.set_node(pos,node) - end, - on_place = function(itemstack, placer, pointed_thing) - local pos = pointed_thing.above - if minetest.is_protected(pos, placer:get_player_name()) then - minetest.log("action", placer:get_player_name() - .. " tried to place " .. itemstack:get_name() - .. " at protected position " - .. minetest.pos_to_string(pos)) - minetest.record_protection_violation(pos, placer:get_player_name()) - return itemstack - end - if pos == nil then return end - local node = minetest.get_node(pos) - if node.name ~= "air" then - if is_supported_node(node.name) then - obj = minetest.add_entity(pos, "technic:frame_entity") - obj:get_luaentity():set_node({name=itemstack:get_name()}) - end - else - minetest.set_node(pos, {name = itemstack:get_name()}) - end - if not infinite_stacks then - itemstack:take_item() - end - return itemstack - end, - on_rightclick = function(pos, node, placer, itemstack, pointed_thing) - if is_supported_node(itemstack:get_name()) then - if minetest.is_protected(pos, placer:get_player_name()) then - minetest.log("action", placer:get_player_name() - .. " tried to place " .. itemstack:get_name() - .. " at protected position " - .. minetest.pos_to_string(pos)) - minetest.record_protection_violation(pos, placer:get_player_name()) - return itemstack - end - - minetest.set_node(pos, {name = itemstack:get_name()}) - - local take_item = true - local def = minetest.registered_items[itemstack:get_name()] - -- Run callback - if def.after_place_node then - -- Copy place_to because callback can modify it - local pos_copy = {x=pos.x, y=pos.y, z=pos.z} - if def.after_place_node(pos_copy, placer, itemstack) then - take_item = false - end - end - - -- Run script hook - local _, callback - for _, callback in ipairs(minetest.registered_on_placenodes) do - -- Copy pos and node because callback can modify them - local pos_copy = {x=pos.x, y=pos.y, z=pos.z} - local newnode_copy = {name=def.name, param1=0, param2=0} - local oldnode_copy = {name="air", param1=0, param2=0} - if callback(pos_copy, newnode_copy, placer, oldnode_copy, itemstack) then - take_item = false - end - end - - if take_item then - itemstack:take_item() - end - - obj = minetest.add_entity(pos, "technic:frame_entity") - obj:get_luaentity():set_node({name=node.name}) - - return itemstack - else - --local pointed_thing = {type = "node", under = pos} - if pointed_thing then - return minetest.item_place_node(itemstack, placer, pointed_thing) - end - end - end, - }) - -end -end -end -end -end -end - -minetest.register_entity("technic:frame_entity", { - initial_properties = { - physical = true, - collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, - visual = "wielditem", - textures = {}, - visual_size = {x=0.667, y=0.667}, - }, - - node = {}, - - set_node = function(self, node) - self.node = node - local pos = self.object:getpos() - pos = {x = math.floor(pos.x+0.5), y = math.floor(pos.y+0.5), z = math.floor(pos.z+0.5)} - frames_pos[pos_to_string(pos)] = node.name - local stack = ItemStack(node.name) - local itemtable = stack:to_table() - local itemname = nil - if itemtable then - itemname = stack:to_table().name - end - local item_texture = nil - local item_type = "" - if minetest.registered_items[itemname] then - item_texture = minetest.registered_items[itemname].inventory_image - item_type = minetest.registered_items[itemname].type - end - prop = { - is_visible = true, - textures = {node.name}, - } - self.object:set_properties(prop) - end, - - get_staticdata = function(self) - return self.node.name - end, - - on_activate = function(self, staticdata) - self.object:set_armor_groups({immortal=1}) - self:set_node({name=staticdata}) - end, - - dig = function(self) - minetest.handle_node_drops(self.object:getpos(), {ItemStack("technic:frame_111111")}, self.last_puncher) - local pos = self.object:getpos() - pos = {x = math.floor(pos.x+0.5), y = math.floor(pos.y+0.5), z = math.floor(pos.z+0.5)} - frames_pos[pos_to_string(pos)] = nil - self.object:remove() - end, - - on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir) - local pos = self.object:getpos() - if self.damage_object == nil then - self.damage_object = minetest.add_entity(pos, "technic:damage_entity") - self.damage_object:get_luaentity().remaining_time = 0.25 - self.damage_object:get_luaentity().frame_object = self - self.damage_object:get_luaentity().texture_index = 0 - self.damage_object:get_luaentity().texture_change_time = 0.15 - else - self.damage_object:get_luaentity().remaining_time = 0.25 - end - self.last_puncher = puncher - local ppos = puncher:getpos() - local pvect = puncher:get_look_dir() - local pface = get_face(pos,ppos,pvect) - if pface == nil then return end - local nodename = self.node.name - local newstate = tostring(1-tonumber(string.sub(nodename, -7+pface, -7+pface))) - if pface <= 5 then - nodename = string.sub(nodename, 1, -7+pface-1)..newstate..string.sub(nodename, -7+pface+1) - else - nodename = string.sub(nodename, 1, -2)..newstate - end - self.node.name = nodename - self:set_node(self.node) - end, - - on_rightclick = function(self, clicker) - local pos = self.object:getpos() - local ppos = clicker:getpos() - local pvect = clicker:get_look_dir() - local pface = get_face(pos, ppos, pvect) - if pface == nil then return end - local pos_under = {x = math.floor(pos.x+0.5), y = math.floor(pos.y+0.5), z = math.floor(pos.z+0.5)} - local pos_above = {x = pos_under.x, y = pos_under.y, z = pos_under.z} - local index = ({"x", "y", "z"})[math.floor((pface+1)/2)] - pos_above[index] = pos_above[index] + 2*((pface+1)%2) - 1 - local pointed_thing = {type = "node", under = pos_under, above = pos_above} - local itemstack = clicker:get_wielded_item() - local itemdef = minetest.registered_items[itemstack:get_name()] - if itemdef ~= nil then - itemdef.on_place(itemstack, clicker, pointed_thing) - end - end, -}) - -local crack = "crack_anylength.png^[verticalframe:5:0" -minetest.register_entity("technic:damage_entity", { - initial_properties = { - visual = "cube", - visual_size = {x=1.01, y=1.01}, - textures = {crack, crack, crack, crack, crack, crack}, - collisionbox = {0, 0, 0, 0, 0, 0}, - physical = false, - }, - on_step = function(self, dtime) - if self.remaining_time == nil then - self.object:remove() - self.frame_object.damage_object = nil - end - self.remaining_time = self.remaining_time - dtime - if self.remaining_time < 0 then - self.object:remove() - self.frame_object.damage_object = nil - end - self.texture_change_time = self.texture_change_time - dtime - if self.texture_change_time < 0 then - self.texture_change_time = self.texture_change_time + 0.15 - self.texture_index = self.texture_index + 1 - if self.texture_index == 5 then - self.object:remove() - self.frame_object.damage_object = nil - self.frame_object:dig() - end - local ct = "crack_anylength.png^[verticalframe:5:"..self.texture_index - self.object:set_properties({textures = {ct, ct, ct, ct, ct, ct}}) - end - end, -}) - -mesecon.register_mvps_unmov("technic:frame_entity") -mesecon.register_mvps_unmov("technic:damage_entity") -mesecon.register_on_mvps_move(function(moved_nodes) - local to_move = {} - for _, n in ipairs(moved_nodes) do - if frames_pos[pos_to_string(n.oldpos)] ~= nil then - to_move[#to_move+1] = {pos = n.pos, oldpos = n.oldpos, name = frames_pos[pos_to_string(n.oldpos)]} - frames_pos[pos_to_string(n.oldpos)] = nil - end - end - if #to_move > 0 then - for _, t in ipairs(to_move) do - frames_pos[pos_to_string(t.pos)] = t.name - local objects = minetest.get_objects_inside_radius(t.oldpos, 0.1) - for _, obj in ipairs(objects) do - local entity = obj:get_luaentity() - if entity and (entity.name == "technic:frame_entity" or entity.name == "technic:damage_entity") then - obj:setpos(t.pos) - end - end - end - end -end) - -minetest.register_on_dignode(function(pos, node) - if frames_pos[pos_to_string(pos)] ~= nil then - minetest.set_node(pos, {name = frames_pos[pos_to_string(pos)]}) - frames_pos[pos_to_string(pos)] = nil - local objects = minetest.get_objects_inside_radius(pos, 0.1) - for _, obj in ipairs(objects) do - local entity = obj:get_luaentity() - if entity and (entity.name == "technic:frame_entity" or entity.name == "technic:damage_entity") then - obj:remove() - end - end - end -end) - --- Frame motor -local function connected(pos,c,adj) - for _,vect in ipairs(adj) do - local pos1=vector.add(pos,vect) - local nodename=minetest.get_node(pos1).name - if frames_pos[pos_to_string(pos1)] then - nodename = frames_pos[pos_to_string(pos1)] - end - if not(pos_in_list(c,pos1)) and nodename~="air" and - (minetest.registered_nodes[nodename].frames_can_connect==nil or - minetest.registered_nodes[nodename].frames_can_connect(pos1,vect)) then - c[#(c)+1]=pos1 - if minetest.registered_nodes[nodename].frame==1 then - local adj=minetest.registered_nodes[nodename].frame_connect_all(nodename) - connected(pos1,c,adj) - end - end - end -end - -local function get_connected_nodes(pos) - c={pos} - local nodename=minetest.get_node(pos).name - if frames_pos[pos_to_string(pos)] then - nodename = frames_pos[pos_to_string(pos)] - end - connected(pos,c,minetest.registered_nodes[nodename].frame_connect_all(nodename)) - return c -end - -local function frame_motor_on(pos, node) - local dirs = {{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}} - local nnodepos = vector.add(pos, dirs[math.floor(node.param2/4)+1]) - local dir = minetest.facedir_to_dir(node.param2) - local nnode=minetest.get_node(nnodepos) - if frames_pos[pos_to_string(nnodepos)] then - nnode.name = frames_pos[pos_to_string(nnodepos)] - end - local meta = minetest.get_meta(pos) - if meta:get_int("last_moved") == minetest.get_gametime() then - return - end - local owner = meta:get_string("owner") - if minetest.registered_nodes[nnode.name].frame==1 then - local connected_nodes=get_connected_nodes(nnodepos) - move_nodes_vect(connected_nodes,dir,pos,owner) - end - minetest.get_meta(vector.add(pos, dir)):set_int("last_moved", minetest.get_gametime()) -end - -minetest.register_node("technic:frame_motor",{ - description = S("Frame Motor"), - tiles = {"pipeworks_filter_top.png^[transformR90", "technic_lv_cable.png", "technic_lv_cable.png", - "technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"}, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2}, - paramtype2 = "facedir", - mesecons={effector={action_on=frame_motor_on}}, - after_place_node = function(pos, placer, itemstack) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name()) - end, - frames_can_connect=function(pos,dir) - local node = minetest.get_node(pos) - local dir2 = ({{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}})[math.floor(node.param2/4)+1] - return dir2.x~=-dir.x or dir2.y~=-dir.y or dir2.z~=-dir.z - end -}) - - - --- Templates -local function template_connected(pos,c,connectors) - for _,vect in ipairs({{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}}) do - local pos1=vector.add(pos,vect) - local nodename=minetest.get_node(pos1).name - if not(pos_in_list(c,pos1)) and (nodename=="technic:template" or nodename == "technic:template_connector")then - local meta = minetest.get_meta(pos1) - if meta:get_string("connected") == "" then - c[#(c)+1]=pos1 - template_connected(pos1,c,connectors) - if nodename == "technic:template_connector" then - connectors[#connectors+1] = pos1 - end - end - end - end -end - -local function get_templates(pos) - local c = {pos} - local connectors - if minetest.get_node(pos).name == "technic:template_connector" then - connectors = {pos} - else - connectors = {} - end - template_connected(pos,c,connectors) - return c, connectors -end - -local function swap_template(pos, new) - local meta = minetest.get_meta(pos) - local saved_node = meta:get_string("saved_node") - meta:set_string("saved_node", "") - technic.swap_node(pos, new) - local meta = minetest.get_meta(pos) - meta:set_string("saved_node", saved_node) -end - -local function save_node(pos) - local node = minetest.get_node(pos) - if node.name == "air" then - minetest.set_node(pos, {name="technic:template"}) - return - end - if node.name == "technic:template" then - swap_template(pos, "technic:template_connector") - local meta = minetest.get_meta(pos) - meta:set_string("connected", "") - return - end - local meta = minetest.get_meta(pos) - local meta0 = meta:to_table() - for _, list in pairs(meta0.inventory) do - for key, stack in pairs(list) do - list[key] = stack:to_string() - end - end - node.meta = meta0 - minetest.set_node(pos, {name="technic:template"}) - return node -end - -local function restore_node(pos, node) - minetest.set_node(pos, node) - local meta = minetest.get_meta(pos) - for _, list in pairs(node.meta.inventory) do - for key, stack in pairs(list) do - list[key] = ItemStack(stack) - end - end - meta:from_table(node.meta) -end - -local function expand_template(pos) - local meta = minetest.get_meta(pos) - local c = meta:get_string("connected") - if c == "" then return end - c = minetest.deserialize(c) - for _, vect in ipairs(c) do - local pos1 = vector.add(pos, vect) - local saved_node = save_node(pos1) - local meta1 = minetest.get_meta(pos1) - if saved_node ~= nil then - meta1:set_string("saved_node", minetest.serialize(saved_node)) - else - --meta1:set_string("saved_node", "") - end - end -end - -local function compress_templates(pos) - local templates, connectors = get_templates(pos) - if #connectors == 0 then - connectors = {pos} - end - for _, cn in ipairs(connectors) do - local meta = minetest.get_meta(cn) - local c = {} - for _,p in ipairs(templates) do - local np = vector.subtract(p, cn) - if not pos_in_list(c,np) then - c[#c+1] = np - end - end - local cc = {} - for _,p in ipairs(connectors) do - local np = vector.subtract(p, cn) - if (np.x ~= 0 or np.y ~= 0 or np.z ~= 0) then - cc[pos_to_string(np)] = true - end - end - swap_template(cn, "technic:template") - meta:set_string("connected", minetest.serialize(c)) - meta:set_string("connectors_connected", minetest.serialize(cc)) - end - - for _,p in ipairs(templates) do - if not pos_in_list(connectors, p) then - minetest.set_node(p, {name = "air"}) - end - end -end - -local function template_drops(pos, node, oldmeta, digger) - local c = oldmeta.fields.connected - local cc = oldmeta.fields.connectors_connected - local drops - if c == "" or c == nil then - drops = {"technic:template 1"} - else - if cc == "" or cc == nil then - drops = {"technic:template 1"} - else - local dcc = minetest.deserialize(cc) - if not table_empty(dcc) then - drops = {} - for sp, _ in pairs(dcc) do - local ssp = pos_from_string(sp) - local p = vector.add(ssp, pos) - local meta = minetest.get_meta(p) - local d = minetest.deserialize(meta:get_string("connectors_connected")) - if d ~= nil then - d[pos_to_string({x=-ssp.x, y=-ssp.y, z=-ssp.z})] = nil - meta:set_string("connectors_connected", minetest.serialize(d)) - end - end - else - local stack_max = 99 - local num = #(minetest.deserialize(c)) - drops = {} - while num > stack_max do - drops[#drops+1] = "technic:template "..stack_max - num = num - stack_max - end - drops[#drops+1] = "technic:template "..num - end - end - end - minetest.handle_node_drops(pos, drops, digger) -end - -local function template_on_destruct(pos, node) - local meta = minetest.get_meta(pos) - local saved_node = meta:get_string("saved_node") - if saved_node ~= "" then - local nnode = minetest.deserialize(saved_node) - minetest.after(0, restore_node, pos, nnode) - end -end - -minetest.register_node("technic:template",{ - description = S("Template"), - tiles = {"technic_mv_cable.png"}, - drop = "", - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - on_destruct = template_on_destruct, - after_dig_node = template_drops, - on_punch = function(pos,node,puncher) - swap_template(pos, "technic:template_disabled") - end -}) - -minetest.register_node("technic:template_disabled",{ - description = S("Template"), - tiles = {"technic_hv_cable.png"}, - drop = "", - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1}, - on_destruct = template_on_destruct, - after_dig_node = template_drops, - on_punch = function(pos,node,puncher) - local meta = minetest.get_meta(pos) - swap_template(pos, "technic:template_connector") - end -}) - -minetest.register_node("technic:template_connector",{ - description = S("Template"), - tiles = {"technic_lv_cable.png"}, - drop = "", - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1}, - on_destruct = template_on_destruct, - after_dig_node = template_drops, - on_punch = function(pos,node,puncher) - swap_template(pos, "technic:template") - end -}) - -minetest.register_craftitem("technic:template_replacer",{ - description = S("Template (replacing)"), - inventory_image = "technic_template_replacer.png", - on_place = function(itemstack, placer, pointed_thing) - local p = pointed_thing.under - if minetest.is_protected and minetest.is_protected(p, placer:get_player_name()) then - return nil - end - local node = minetest.get_node(p) - if node.name == "technic:template" then return end - local saved_node = save_node(p) - itemstack:take_item() - if saved_node ~= nil then - local meta = minetest.get_meta(p) - meta:set_string("saved_node", minetest.serialize(saved_node)) - end - return itemstack - end -}) - -minetest.register_tool("technic:template_tool",{ - description = S("Template Tool"), - inventory_image = "technic_template_tool.png", - on_use = function(itemstack, puncher, pointed_thing) - local pos = pointed_thing.under - if pos == nil or (minetest.is_protected and minetest.is_protected(pos, puncher:get_player_name())) then - return nil - end - local node = minetest.get_node(pos) - if node.name ~= "technic:template" and node.name ~= "technic:template_connector" then return end - local meta = minetest.get_meta(pos) - local c2 = meta:get_string("connected") - if c2 ~= "" then - expand_template(pos) - else - compress_templates(pos) - end - - end -}) - - - --- Template motor -local function get_template_nodes(pos) - local meta = minetest.get_meta(pos) - local connected = meta:get_string("connected") - if connected == "" then return {} end - local adj = minetest.deserialize(connected) - local c = {} - for _,vect in ipairs(adj) do - local pos1=vector.add(pos,vect) - local nodename=minetest.get_node(pos1).name - if not(pos_in_list(c,pos1)) and nodename~="air" then - c[#(c)+1]=pos1 - end - end - return c -end - -local function template_motor_on(pos, node) - local dirs = {{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}} - local nnodepos = vector.add(pos, dirs[math.floor(node.param2/4)+1]) - local dir = minetest.facedir_to_dir(node.param2) - local nnode=minetest.get_node(nnodepos) - local meta = minetest.get_meta(pos) - if meta:get_int("last_moved") == minetest.get_gametime() then - return - end - local owner = meta:get_string("owner") - if nnode.name == "technic:template" then - local connected_nodes=get_template_nodes(nnodepos) - move_nodes_vect(connected_nodes,dir,pos,owner) - end - minetest.get_meta(vector.add(pos, dir)):set_int("last_moved", minetest.get_gametime()) -end - -minetest.register_node("technic:template_motor",{ - description = S("Template Motor"), - tiles = {"pipeworks_filter_top.png^[transformR90", "technic_lv_cable.png", "technic_lv_cable.png", - "technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"}, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2}, - paramtype2 = "facedir", - mesecons={effector={action_on=template_motor_on}}, - after_place_node = function(pos, placer, itemstack) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name()) - end, -}) - --- Crafts -minetest.register_craft({ - output = 'technic:frame_111111', - recipe = { - {'', 'default:stick', ''}, - {'default:stick', 'technic:brass_ingot', 'default:stick'}, - {'', 'default:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'technic:frame_motor', - recipe = { - {'', 'technic:frame_111111', ''}, - {'group:mesecon_conductor_craftable', 'technic:motor', 'group:mesecon_conductor_craftable'}, - {'', 'technic:frame_111111', ''}, - } -}) - -minetest.register_craft({ - output = 'technic:template 10', - recipe = { - {'', 'technic:brass_ingot', ''}, - {'technic:brass_ingot', 'default:mese_crystal', 'technic:brass_ingot'}, - {'', 'technic:brass_ingot', ''}, - } -}) - -minetest.register_craft({ - output = 'technic:template_replacer', - recipe = {{'technic:template'}} -}) - -minetest.register_craft({ - output = 'technic:template', - recipe = {{'technic:template_replacer'}} -}) - -minetest.register_craft({ - output = 'technic:template_motor', - recipe = { - {'', 'technic:template', ''}, - {'group:mesecon_conductor_craftable', 'technic:motor', 'group:mesecon_conductor_craftable'}, - {'', 'technic:template', ''}, - } -}) - -minetest.register_craft({ - output = 'technic:template_tool', - recipe = { - {'', 'technic:template', ''}, - {'default:mese_crystal', 'default:stick', 'default:mese_crystal'}, - {'', 'default:stick', ''}, - } -}) diff --git a/mods/ITEMS/technic/technic/machines/other/injector.lua b/mods/ITEMS/technic/technic/machines/other/injector.lua deleted file mode 100755 index 74be547..0000000 --- a/mods/ITEMS/technic/technic/machines/other/injector.lua +++ /dev/null @@ -1,150 +0,0 @@ - -local S = technic.getter - -local fs_helpers = pipeworks.fs_helpers - -local tube_entry = "^pipeworks_tube_connection_metallic.png" - -local function inject_items (pos) - local meta=minetest.get_meta(pos) - local inv = meta:get_inventory() - local mode=meta:get_string("mode") - if mode=="single items" then - local i=0 - for _,stack in ipairs(inv:get_list("main")) do - i=i+1 - if stack then - local item0=stack:to_table() - if item0 then - item0["count"] = "1" - technic.tube_inject_item(pos, pos, vector.new(0, -1, 0), item0) - stack:take_item(1) - inv:set_stack("main", i, stack) - return - end - end - end - end - if mode=="whole stacks" then - local i=0 - for _,stack in ipairs(inv:get_list("main")) do - i=i+1 - if stack then - local item0=stack:to_table() - if item0 then - technic.tube_inject_item(pos, pos, vector.new(0, -1, 0), item0) - stack:clear() - inv:set_stack("main", i, stack) - return - end - end - end - end -end - -minetest.register_craft({ - output = 'technic:injector 1', - recipe = { - {'', 'technic:control_logic_unit',''}, - {'', 'chests:chest',''}, - {'', 'pipeworks:tube_1',''}, - } -}) - -local function set_injector_formspec(meta) - local is_stack = meta:get_string("mode") == "whole stacks" - meta:set_string("formspec", - "invsize[8,9;]".. - "item_image[0,0;1,1;technic:injector]".. - "label[1,0;"..S("Self-Contained Injector").."]".. - (is_stack and - "button[0,1;2,1;mode_item;"..S("Stackwise").."]" or - "button[0,1;2,1;mode_stack;"..S("Itemwise").."]").. - "list[current_name;main;0,2;8,2;]".. - "list[current_player;main;0,5;8,4;]".. - "listring[]".. - fs_helpers.cycling_button( - meta, - pipeworks.button_base, - "splitstacks", - { - pipeworks.button_off, - pipeworks.button_on - } - )..pipeworks.button_label - ) -end - -minetest.register_node("technic:injector", { - description = S("Self-Contained Injector"), - tiles = { - "technic_injector_top.png"..tube_entry, - "technic_injector_bottom.png", - "technic_injector_side.png"..tube_entry, - "technic_injector_side.png"..tube_entry, - "technic_injector_side.png"..tube_entry, - "technic_injector_side.png" - }, - paramtype2 = "facedir", - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice=1, tubedevice_receiver=1}, - tube = { - can_insert = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if meta:get_int("splitstacks") == 1 then - stack = stack:peek_item(1) - end - return meta:get_inventory():room_for_item("main", stack) - end, - insert_object = function(pos, node, stack, direction) - return minetest.get_meta(pos):get_inventory():add_item("main", stack) - end, - connect_sides = {left=1, right=1, back=1, top=1, bottom=1}, - }, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("Self-Contained Injector")) - local inv = meta:get_inventory() - inv:set_size("main", 8*2) - meta:set_string("mode","single items") - set_injector_formspec(meta) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - on_receive_fields = function(pos, formanme, fields, sender) - local meta = minetest.get_meta(pos) - if fields.mode_item then meta:set_string("mode", "single items") end - if fields.mode_stack then meta:set_string("mode", "whole stacks") end - - if fields["fs_helpers_cycling:0:splitstacks"] - or fields["fs_helpers_cycling:1:splitstacks"] then - if not pipeworks.may_configure(pos, sender) then return end - fs_helpers.on_receive_fields(pos, fields) - end - set_injector_formspec(meta) - end, - allow_metadata_inventory_put = technic.machine_inventory_put, - allow_metadata_inventory_take = technic.machine_inventory_take, - allow_metadata_inventory_move = technic.machine_inventory_move, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig -}) - -minetest.register_abm({ - label = "Machines: run injector", - nodenames = {"technic:injector"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local pos1 = vector.add(pos, vector.new(0, -1, 0)) - local node1 = minetest.get_node(pos1) - if minetest.get_item_group(node1.name, "tubedevice") > 0 then - inject_items(pos) - end - end, -}) - diff --git a/mods/ITEMS/technic/technic/machines/register/alloy_recipes.lua b/mods/ITEMS/technic/technic/machines/register/alloy_recipes.lua deleted file mode 100755 index 9376478..0000000 --- a/mods/ITEMS/technic/technic/machines/register/alloy_recipes.lua +++ /dev/null @@ -1,35 +0,0 @@ - -local S = technic.getter - -technic.register_recipe_type("alloy", { - description = S("Alloying"), - input_size = 2, -}) - -function technic.register_alloy_recipe(data) - data.time = data.time or 6 - technic.register_recipe("alloy", data) -end - -local recipes = { - {"technic:copper_dust 3", "technic:tin_dust", "technic:bronze_dust 4"}, - {"default:copper_ingot 3", "default:tin_ingot", "default:bronze_ingot 4"}, - {"technic:wrought_iron_dust", "technic:coal_dust", "technic:carbon_steel_dust", 3}, - {"technic:wrought_iron_ingot", "technic:coal_dust", "technic:carbon_steel_ingot", 3}, - {"technic:carbon_steel_dust", "technic:coal_dust", "technic:cast_iron_dust", 3}, - {"technic:carbon_steel_ingot", "technic:coal_dust", "technic:cast_iron_ingot", 3}, - {"technic:carbon_steel_dust 3", "technic:chromium_dust", "technic:stainless_steel_dust 4"}, - {"technic:carbon_steel_ingot 3", "technic:chromium_ingot", "technic:stainless_steel_ingot 4"}, - {"technic:copper_dust 2", "technic:zinc_dust", "technic:brass_dust 3"}, - {"default:copper_ingot 2", "technic:zinc_ingot", "technic:brass_ingot 3"}, - {"default:sand 2", "technic:coal_dust 2", "technic:silicon_wafer"}, - {"technic:silicon_wafer", "technic:gold_dust", "technic:doped_silicon_wafer"}, - -- from https://en.wikipedia.org/wiki/Carbon_black - -- The highest volume use of carbon black is as a reinforcing filler in rubber products, especially tires. - -- "[Compounding a] pure gum vulcanizate … with 50% of its weight of carbon black improves its tensile strength and wear resistance …" - {"technic:raw_latex 4", "technic:coal_dust 2", "technic:rubber 6", 2}, -} - -for _, data in pairs(recipes) do - technic.register_alloy_recipe({input = {data[1], data[2]}, output = data[3], time = data[4]}) -end diff --git a/mods/ITEMS/technic/technic/machines/register/battery_box.lua b/mods/ITEMS/technic/technic/machines/register/battery_box.lua deleted file mode 100755 index b45a47d..0000000 --- a/mods/ITEMS/technic/technic/machines/register/battery_box.lua +++ /dev/null @@ -1,439 +0,0 @@ - -local digilines_path = minetest.get_modpath("digilines") - -local S = technic.getter -local tube_entry = "^pipeworks_tube_connection_metallic.png" -local cable_entry = "^technic_cable_connection_overlay.png" - -local fs_helpers = pipeworks.fs_helpers - -technic.register_power_tool("technic:battery", 10000) -technic.register_power_tool("technic:red_energy_crystal", 50000) -technic.register_power_tool("technic:green_energy_crystal", 150000) -technic.register_power_tool("technic:blue_energy_crystal", 450000) - --- Battery recipe: -minetest.register_craft({ - output = "technic:battery", - recipe = { - {"group:wood", "australia:nickel_ingot", "group:wood"}, - {"group:wood", "australia:aluminium_ingot", "group:wood"}, - {"group:wood", "australia:nickel_ingot", "group:wood"}, - } -}) - - -minetest.register_tool("technic:battery", { - description = S("RE Battery"), - inventory_image = "technic_battery.png", - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - tool_capabilities = { - charge = 0, - max_drop_level = 0, - groupcaps = { - fleshy = {times={}, uses=10000, maxlevel=0} - } - } -}) - --- x+2 + (z+2)*2 -local dirtab = { - [4] = 2, - [5] = 3, - [7] = 1, - [8] = 0 -} - -local tube = { - insert_object = function(pos, node, stack, direction) - print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2) - if direction.y == 1 - or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then - return stack - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if direction.y == 0 then - return inv:add_item("src", stack) - else - return inv:add_item("dst", stack) - end - end, - can_insert = function(pos, node, stack, direction) - print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2) - if direction.y == 1 - or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then - return false - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if direction.y == 0 then - if meta:get_int("split_src_stacks") == 1 then - stack = stack:peek_item(1) - end - return inv:room_for_item("src", stack) - else - if meta:get_int("split_dst_stacks") == 1 then - stack = stack:peek_item(1) - end - return inv:room_for_item("dst", stack) - end - end, - connect_sides = {left=1, right=1, back=1, top=1}, -} - -local function add_on_off_buttons(meta, ltier, charge_percent) - local formspec = "" - if ltier == "mv" or ltier == "hv" then - formspec = "image[1,1;1,2;technic_power_meter_bg.png" - .."^[lowpart:"..charge_percent - ..":technic_power_meter_fg.png]".. - fs_helpers.cycling_button( - meta, - "image_button[3,2.0;1,0.6", - "split_src_stacks", - { - pipeworks.button_off, - pipeworks.button_on - } - ).."label[3.9,2.01;Allow splitting incoming 'charge' stacks from tubes]".. - fs_helpers.cycling_button( - meta, - "image_button[3,2.5;1,0.6", - "split_dst_stacks", - { - pipeworks.button_off, - pipeworks.button_on - } - ).."label[3.9,2.51;Allow splitting incoming 'discharge' stacks]" - end - return formspec -end - -function technic.register_battery_box(data) - local tier = data.tier - local ltier = string.lower(tier) - - local formspec = - "size[8,9]".. - "image[1,1;1,2;technic_power_meter_bg.png]".. - "list[context;src;3,1;1,1;]".. - "image[4,1;1,1;technic_battery_reload.png]".. - "list[context;dst;5,1;1,1;]".. - "label[0,0;"..S("%s Battery Box"):format(tier).."]".. - "label[3,0;"..S("Charge").."]".. - "label[5,0;"..S("Discharge").."]".. - "label[1,3;"..S("Power level").."]".. - "list[current_player;main;0,5;8,4;]".. - "listring[context;dst]".. - "listring[current_player;main]".. - "listring[context;src]".. - "listring[current_player;main]" - - if digilines_path then - formspec = formspec.."button[0.6,3.7;2,1;edit_channel;edit Channel]" - end - - if data.upgrade then - formspec = formspec.. - "list[context;upgrade1;3.5,3;1,1;]".. - "list[context;upgrade2;4.5,3;1,1;]".. - "label[3.5,4;"..S("Upgrade Slots").."]".. - "listring[context;upgrade1]".. - "listring[current_player;main]".. - "listring[context;upgrade2]".. - "listring[current_player;main]" - end - - local run = function(pos, node) - local below = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) - local meta = minetest.get_meta(pos) - - if not technic.is_tier_cable(below.name, tier) then - meta:set_string("infotext", S("%s Battery Box Has No Network"):format(tier)) - return - end - - local eu_input = meta:get_int(tier.."_EU_input") - local current_charge = meta:get_int("internal_EU_charge") - - local EU_upgrade, tube_upgrade = 0, 0 - if data.upgrade then - EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) - end - local max_charge = data.max_charge * (1 + EU_upgrade / 10) - - -- Charge/discharge the battery with the input EUs - if eu_input >= 0 then - current_charge = math.min(current_charge + eu_input, max_charge) - else - current_charge = math.max(current_charge + eu_input, 0) - end - - -- Charging/discharging tools here - local tool_full, tool_empty - current_charge, tool_full = technic.charge_tools(meta, - current_charge, data.charge_step) - current_charge, tool_empty = technic.discharge_tools(meta, - current_charge, data.discharge_step, - max_charge) - - if data.tube then - local inv = meta:get_inventory() - technic.handle_machine_pipeworks(pos, tube_upgrade, - function(pos, x_velocity, z_velocity) - if tool_full and not inv:is_empty("src") then - technic.send_items(pos, x_velocity, z_velocity, "src") - elseif tool_empty and not inv:is_empty("dst") then - technic.send_items(pos, x_velocity, z_velocity, "dst") - end - end) - end - - -- We allow batteries to charge on less than the demand - meta:set_int(tier.."_EU_demand", - math.min(data.charge_rate, max_charge - current_charge)) - meta:set_int(tier.."_EU_supply", - math.min(data.discharge_rate, current_charge)) - meta:set_int("internal_EU_charge", current_charge) - - -- Select node textures - local charge_count = math.ceil((current_charge / max_charge) * 8) - charge_count = math.min(charge_count, 8) - charge_count = math.max(charge_count, 0) - local last_count = meta:get_float("last_side_shown") - if charge_count ~= last_count then - technic.swap_node(pos,"technic:"..ltier.."_battery_box"..charge_count) - meta:set_float("last_side_shown", charge_count) - end - - local charge_percent = math.floor(current_charge / max_charge * 100) - meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, charge_percent)) - local infotext = S("@1 Battery Box: @2/@3", tier, - technic.pretty_num(current_charge), technic.pretty_num(max_charge)) - if eu_input == 0 then - infotext = S("%s Idle"):format(infotext) - end - meta:set_string("infotext", infotext) - end - - for i = 0, 8 do - local groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, - technic_machine=1, ["technic_"..ltier]=1} - if i ~= 0 then - groups.not_in_creative_inventory = 1 - end - - if data.tube then - groups.tubedevice = 1 - groups.tubedevice_receiver = 1 - end - - local top_tex = "technic_"..ltier.."_battery_box_top.png"..tube_entry - local front_tex = "technic_"..ltier.."_battery_box_front.png^technic_power_meter"..i..".png" - local side_tex = "technic_"..ltier.."_battery_box_side.png"..tube_entry - local bottom_tex = "technic_"..ltier.."_battery_box_bottom.png"..cable_entry - - if ltier == "lv" then - top_tex = "technic_"..ltier.."_battery_box_top.png" - front_tex = "technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png" - side_tex = "technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png" - end - - minetest.register_node("technic:"..ltier.."_battery_box"..i, { - description = S("%s Battery Box"):format(tier), - tiles = { - top_tex, - bottom_tex, - side_tex, - side_tex, - side_tex, - front_tex}, - groups = groups, - connect_sides = {"bottom"}, - tube = data.tube and tube or nil, - paramtype2 = "facedir", - sounds = default.node_sound_wood_defaults(), - drop = "technic:"..ltier.."_battery_box0", - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local EU_upgrade, tube_upgrade = 0, 0 - if data.upgrade then - EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) - end - local max_charge = data.max_charge * (1 + EU_upgrade / 10) - local charge = meta:get_int("internal_EU_charge") - local cpercent = math.floor(charge / max_charge * 100) - local inv = meta:get_inventory() - local node = minetest.get_node(pos) - meta:set_string("infotext", S("%s Battery Box"):format(tier)) - meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, cpercent)) - meta:set_string("channel", ltier.."_battery_box"..minetest.pos_to_string(pos)) - meta:set_int(tier.."_EU_demand", 0) - meta:set_int(tier.."_EU_supply", 0) - meta:set_int(tier.."_EU_input", 0) - meta:set_float("internal_EU_charge", 0) - inv:set_size("src", 1) - inv:set_size("dst", 1) - inv:set_size("upgrade1", 1) - inv:set_size("upgrade2", 1) - end, - can_dig = technic.machine_can_dig, - allow_metadata_inventory_put = technic.machine_inventory_put, - allow_metadata_inventory_take = technic.machine_inventory_take, - allow_metadata_inventory_move = technic.machine_inventory_move, - technic_run = run, - on_rotate = screwdriver.rotate_simple, - after_place_node = data.tube and pipeworks.after_place, - after_dig_node = technic.machine_after_dig_node, - on_receive_fields = function(pos, formname, fields, sender) - local meta = minetest.get_meta(pos) - local nodename = minetest.get_node(pos).name - if fields.edit_channel then - minetest.show_formspec(sender:get_player_name(), - "technic:battery_box_edit_channel"..minetest.pos_to_string(pos), - "field[channel;Digiline Channel;"..meta:get_string("channel").."]") - elseif fields["fs_helpers_cycling:0:split_src_stacks"] - or fields["fs_helpers_cycling:0:split_dst_stacks"] - or fields["fs_helpers_cycling:1:split_src_stacks"] - or fields["fs_helpers_cycling:1:split_dst_stacks"] then - local meta = minetest.get_meta(pos) - if not pipeworks.may_configure(pos, sender) then return end - fs_helpers.on_receive_fields(pos, fields) - local EU_upgrade, tube_upgrade = 0, 0 - if data.upgrade then - EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) - end - local max_charge = data.max_charge * (1 + EU_upgrade / 10) - local charge = meta:get_int("internal_EU_charge") - local cpercent = math.floor(charge / max_charge * 100) - meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, cpercent)) - end - end, - digiline = { - receptor = {action = function() end}, - effector = { - action = function(pos, node, channel, msg) - if msg ~= "GET" and msg ~= "get" then - return - end - local meta = minetest.get_meta(pos) - if channel ~= meta:get_string("channel") then - return - end - local inv = meta:get_inventory() - digilines.receptor_send(pos, digilines.rules.default, channel, { - demand = meta:get_int(tier.."_EU_demand"), - supply = meta:get_int(tier.."_EU_supply"), - input = meta:get_int(tier.."_EU_input"), - charge = meta:get_int("internal_EU_charge"), - max_charge = data.max_charge * (1 + technic.handle_machine_upgrades(meta) / 10), - src = inv:get_stack("src", 1):to_table(), - dst = inv:get_stack("dst", 1):to_table(), - upgrade1 = inv:get_stack("upgrade1", 1):to_table(), - upgrade2 = inv:get_stack("upgrade2", 1):to_table() - }) - end - }, - }, - }) - end - - -- Register as a battery type - -- Battery type machines function as power reservoirs and can both receive and give back power - for i = 0, 8 do - technic.register_machine(tier, "technic:"..ltier.."_battery_box"..i, technic.battery) - end - -end -- End registration - -minetest.register_on_player_receive_fields( - function(player, formname, fields) - if formname:sub(1, 32) ~= "technic:battery_box_edit_channel" or - not fields.channel then - return - end - local pos = minetest.string_to_pos(formname:sub(33)) - local plname = player:get_player_name() - if minetest.is_protected(pos, plname) then - minetest.record_protection_violation(pos, plname) - return - end - local meta = minetest.get_meta(pos) - meta:set_string("channel", fields.channel) - end -) - -function technic.charge_tools(meta, batt_charge, charge_step) - local inv = meta:get_inventory() - if inv:is_empty("src") then - return batt_charge, false - end - local src_stack = inv:get_stack("src", 1) - - local tool_name = src_stack:get_name() - if not technic.power_tools[tool_name] then - return batt_charge, false - end - -- Set meta data for the tool if it didn't do it itself - local src_meta = minetest.deserialize(src_stack:get_metadata()) or {} - if not src_meta.charge then - src_meta.charge = 0 - end - -- Do the charging - local item_max_charge = technic.power_tools[tool_name] - local tool_charge = src_meta.charge - if tool_charge >= item_max_charge then - return batt_charge, true - elseif batt_charge <= 0 then - return batt_charge, false - end - charge_step = math.min(charge_step, batt_charge) - charge_step = math.min(charge_step, item_max_charge - tool_charge) - tool_charge = tool_charge + charge_step - batt_charge = batt_charge - charge_step - technic.set_RE_wear(src_stack, tool_charge, item_max_charge) - src_meta.charge = tool_charge - src_stack:set_metadata(minetest.serialize(src_meta)) - inv:set_stack("src", 1, src_stack) - return batt_charge, (tool_charge == item_max_charge) -end - - -function technic.discharge_tools(meta, batt_charge, charge_step, max_charge) - local inv = meta:get_inventory() - if inv:is_empty("dst") then - return batt_charge, false - end - srcstack = inv:get_stack("dst", 1) - local toolname = srcstack:get_name() - if technic.power_tools[toolname] == nil then - return batt_charge, false - end - -- Set meta data for the tool if it didn't do it itself :-( - local src_meta = minetest.deserialize(srcstack:get_metadata()) - src_meta = src_meta or {} - if not src_meta.charge then - src_meta.charge = 0 - end - - -- Do the discharging - local item_max_charge = technic.power_tools[toolname] - local tool_charge = src_meta.charge - if tool_charge <= 0 then - return batt_charge, true - elseif batt_charge >= max_charge then - return batt_charge, false - end - charge_step = math.min(charge_step, max_charge - batt_charge) - charge_step = math.min(charge_step, tool_charge) - tool_charge = tool_charge - charge_step - batt_charge = batt_charge + charge_step - technic.set_RE_wear(srcstack, tool_charge, item_max_charge) - src_meta.charge = tool_charge - srcstack:set_metadata(minetest.serialize(src_meta)) - inv:set_stack("dst", 1, srcstack) - return batt_charge, (tool_charge == 0) -end - diff --git a/mods/ITEMS/technic/technic/machines/register/common.lua b/mods/ITEMS/technic/technic/machines/register/common.lua deleted file mode 100755 index 51f526e..0000000 --- a/mods/ITEMS/technic/technic/machines/register/common.lua +++ /dev/null @@ -1,214 +0,0 @@ - -local S = technic.getter - --- handles the machine upgrades every tick -function technic.handle_machine_upgrades(meta) - -- Get the names of the upgrades - local inv = meta:get_inventory() - - local srcstack = inv:get_stack("upgrade1", 1) - local upg_item1 = srcstack and srcstack:get_name() - - srcstack = inv:get_stack("upgrade2", 1) - local upg_item2 = srcstack and srcstack:get_name() - - -- Save some power by installing battery upgrades. - -- Tube loading speed can be upgraded using control logic units. - local EU_upgrade = 0 - local tube_upgrade = 0 - - if upg_item1 == "technic:control_logic_unit" then - tube_upgrade = tube_upgrade + 1 - elseif upg_item1 == "technic:battery" then - EU_upgrade = EU_upgrade + 1 - end - - if upg_item2 == "technic:control_logic_unit" then - tube_upgrade = tube_upgrade + 1 - elseif upg_item2 == "technic:battery" then - EU_upgrade = EU_upgrade + 1 - end - - return EU_upgrade, tube_upgrade -end - --- handles the machine upgrades when set or removed -local function on_machine_upgrade(meta, stack) - local stack_name = stack:get_name() - if stack_name == "chests:chest" then - meta:set_int("public", 1) - return 1 - elseif stack_name ~= "technic:control_logic_unit" - and stack_name ~= "technic:battery" then - return 0 - end - return 1 -end - --- something is about to be removed -local function on_machine_downgrade(meta, stack, list) - if stack:get_name() == "chests:chest" then - local inv = meta:get_inventory() - local upg1, upg2 = inv:get_stack("upgrade1", 1), inv:get_stack("upgrade2", 1) - - -- only set 0 if theres not a nother chest in the other list too - if (not upg1 or not upg2 or upg1:get_name() ~= upg2:get_name()) then - meta:set_int("public", 0) - end - end - return 1 -end - - -function technic.send_items(pos, x_velocity, z_velocity, output_name) - -- Send items on their way in the pipe system. - if output_name == nil then - output_name = "dst" - end - - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local i = 0 - for _, stack in ipairs(inv:get_list(output_name)) do - i = i + 1 - if stack then - local item0 = stack:to_table() - if item0 then - item0["count"] = "1" - technic.tube_inject_item(pos, pos, vector.new(x_velocity, 0, z_velocity), item0) - stack:take_item(1) - inv:set_stack(output_name, i, stack) - return - end - end - end -end - - -function technic.smelt_item(meta, result, speed) - local inv = meta:get_inventory() - meta:set_int("cook_time", meta:get_int("cook_time") + 1) - if meta:get_int("cook_time") < result.time / speed then - return - end - local result - local afterfuel - result, afterfuel = minetest.get_craft_result({method = "cooking", width = 1, items = inv:get_list("src")}) - - if result and result.item then - meta:set_int("cook_time", 0) - -- check if there's room for output in "dst" list - if inv:room_for_item("dst", result.item) then - inv:set_stack("src", 1, afterfuel.items[1]) - inv:add_item("dst", result.item) - end - end -end - -function technic.handle_machine_pipeworks(pos, tube_upgrade, send_function) - if send_function == nil then - send_function = technic.send_items - end - - local node = minetest.get_node(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local pos1 = vector.new(pos) - local x_velocity = 0 - local z_velocity = 0 - - -- Output is on the left side of the furnace - if node.param2 == 3 then pos1.z = pos1.z - 1 z_velocity = -1 end - if node.param2 == 2 then pos1.x = pos1.x - 1 x_velocity = -1 end - if node.param2 == 1 then pos1.z = pos1.z + 1 z_velocity = 1 end - if node.param2 == 0 then pos1.x = pos1.x + 1 x_velocity = 1 end - - local output_tube_connected = false - local node1 = minetest.get_node(pos1) - if minetest.get_item_group(node1.name, "tubedevice") > 0 then - output_tube_connected = true - end - local tube_time = meta:get_int("tube_time") + tube_upgrade - if tube_time >= 2 then - tube_time = 0 - if output_tube_connected then - send_function(pos, x_velocity, z_velocity) - end - end - meta:set_int("tube_time", tube_time) -end - -function technic.machine_can_dig(pos, player) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if not inv:is_empty("src") or not inv:is_empty("dst") then - if player then - minetest.chat_send_player(player:get_player_name(), - S("Machine cannot be removed because it is not empty")) - end - return false - end - - return true -end - -function technic.machine_after_dig_node(pos, oldnode, oldmetadata, player) - if oldmetadata.inventory then - if oldmetadata.inventory.upgrade1 and oldmetadata.inventory.upgrade1[1] then - local stack = ItemStack(oldmetadata.inventory.upgrade1[1]) - if not stack:is_empty() then - minetest.add_item(pos, stack) - end - end - if oldmetadata.inventory.upgrade2 and oldmetadata.inventory.upgrade2[1] then - local stack = ItemStack(oldmetadata.inventory.upgrade2[1]) - if not stack:is_empty() then - minetest.add_item(pos, stack) - end - end - end - - if minetest.registered_nodes[oldnode.name].tube then - pipeworks.after_dig(pos, oldnode, oldmetadata, player) - end -end - -local function inv_change(pos, player, count, from_list, to_list, stack) - local playername = player:get_player_name() - local meta = minetest.get_meta(pos); - local public = (meta:get_int("public") == 1) - local to_upgrade = to_list == "upgrade1" or to_list == "upgrade2" - local from_upgrade = from_list == "upgrade1" or from_list == "upgrade2" - - if (not public or to_upgrade or from_upgrade) and minetest.is_protected(pos, playername) then - minetest.chat_send_player(playername, S("Inventory move disallowed due to protection")) - return 0 - end - if to_upgrade then - -- only place a single item into it, if it's empty - local empty = meta:get_inventory():is_empty(to_list) - if empty then - return on_machine_upgrade(meta, stack) - end - return 0 - elseif from_upgrade then - -- only called on take (not move) - on_machine_downgrade(meta, stack, from_list) - end - return count -end - -function technic.machine_inventory_put(pos, listname, index, stack, player) - return inv_change(pos, player, stack:get_count(), nil, listname, stack) -end - -function technic.machine_inventory_take(pos, listname, index, stack, player) - return inv_change(pos, player, stack:get_count(), listname, nil, stack) -end - -function technic.machine_inventory_move(pos, from_list, from_index, - to_list, to_index, count, player) - local stack = minetest.get_meta(pos):get_inventory():get_stack(from_list, from_index) - return inv_change(pos, player, count, from_list, to_list, stack) -end - diff --git a/mods/ITEMS/technic/technic/machines/register/generator.lua b/mods/ITEMS/technic/technic/machines/register/generator.lua deleted file mode 100755 index 34fd177..0000000 --- a/mods/ITEMS/technic/technic/machines/register/generator.lua +++ /dev/null @@ -1,293 +0,0 @@ -local S = technic.getter - -local fs_helpers = pipeworks.fs_helpers -local tube_entry = "^pipeworks_tube_connection_metallic.png" - -local tube = { - insert_object = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:add_item("src", stack) - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if meta:get_int("splitstacks") == 1 then - stack = stack:peek_item(1) - end - return inv:room_for_item("src", stack) - end, - connect_sides = {left=1, right=1, back=1, top=1, bottom=1}, -} - -function technic.register_generator(data) - - local tier = data.tier - local ltier = string.lower(tier) - - local groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, - technic_machine=1, ["technic_"..ltier]=1} - if data.tube then - groups.tubedevice = 1 - groups.tubedevice_receiver = 1 - end - local active_groups = {not_in_creative_inventory = 1} - for k, v in pairs(groups) do active_groups[k] = v end - - local generator_formspec = - "invsize[8,9;]".. - "label[0,0;"..S("Fuel-Fired %s Generator"):format(tier).."]".. - "list[current_name;src;3,1;1,1;]".. - "image[4,1;1,1;furnace_furnace_fire_bg.png]".. - "list[current_player;main;0,5;8,4;]".. - "listring[]" - - local desc = S("Fuel-Fired %s Generator"):format(tier) - - local run = function(pos, node) - local meta = minetest.get_meta(pos) - local burn_time = meta:get_int("burn_time") - local burn_totaltime = meta:get_int("burn_totaltime") - -- If more to burn and the energy produced was used: produce some more - if burn_time > 0 then - meta:set_int(tier.."_EU_supply", data.supply) - burn_time = burn_time - 1 - meta:set_int("burn_time", burn_time) - end - -- Burn another piece of fuel - if burn_time == 0 then - local inv = meta:get_inventory() - if not inv:is_empty("src") then - local fuellist = inv:get_list("src") - local fuel - local afterfuel - fuel, afterfuel = minetest.get_craft_result( - {method = "fuel", width = 1, - items = fuellist}) - if not fuel or fuel.time == 0 then - meta:set_string("infotext", S("%s Out Of Fuel"):format(desc)) - technic.swap_node(pos, "technic:"..ltier.."_generator") - meta:set_int(tier.."_EU_supply", 0) - return - end - meta:set_int("burn_time", fuel.time) - meta:set_int("burn_totaltime", fuel.time) - inv:set_stack("src", 1, afterfuel.items[1]) - technic.swap_node(pos, "technic:"..ltier.."_generator_active") - meta:set_int(tier.."_EU_supply", data.supply) - else - technic.swap_node(pos, "technic:"..ltier.."_generator") - meta:set_int(tier.."_EU_supply", 0) - end - end - if burn_totaltime == 0 then burn_totaltime = 1 end - local percent = math.floor((burn_time / burn_totaltime) * 100) - meta:set_string("infotext", desc.." ("..percent.."%)") - - local form_buttons = "" - if ltier ~= "lv" then - form_buttons = fs_helpers.cycling_button( - meta, - pipeworks.button_base, - "splitstacks", - { - pipeworks.button_off, - pipeworks.button_on - } - )..pipeworks.button_label - end - meta:set_string("formspec", - "size[8, 9]".. - "label[0, 0;"..minetest.formspec_escape(desc).."]".. - "list[current_name;src;3, 1;1, 1;]".. - "image[4, 1;1, 1;furnace_furnace_fire_bg.png^[lowpart:".. - (percent)..":furnace_furnace_fire_fg.png]".. - "list[current_player;main;0, 5;8, 4;]".. - "listring[]".. - form_buttons - ) - end - - local tentry = tube_entry - if ltier == "lv" then tentry = "" end - - minetest.register_node("technic:"..ltier.."_generator", { - description = desc, - tiles = { - "technic_"..ltier.."_generator_top.png"..tentry, - "technic_machine_bottom.png"..tentry, - "technic_"..ltier.."_generator_side.png"..tentry, - "technic_"..ltier.."_generator_side.png"..tentry, - "technic_"..ltier.."_generator_side.png"..tentry, - "technic_"..ltier.."_generator_front.png" - }, - paramtype2 = "facedir", - groups = groups, - connect_sides = {"bottom", "back", "left", "right"}, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - tube = data.tube and tube or nil, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - meta:set_string("infotext", desc) - meta:set_int(data.tier.."_EU_supply", 0) - meta:set_int("burn_time", 0) - meta:set_int("tube_time", 0) - local form_buttons = "" - if not string.find(node.name, ":lv_") then - form_buttons = fs_helpers.cycling_button( - meta, - pipeworks.button_base, - "splitstacks", - { - pipeworks.button_off, - pipeworks.button_on - } - )..pipeworks.button_label - end - meta:set_string("formspec", generator_formspec..form_buttons) - local inv = meta:get_inventory() - inv:set_size("src", 1) - end, - can_dig = technic.machine_can_dig, - allow_metadata_inventory_put = technic.machine_inventory_put, - allow_metadata_inventory_take = technic.machine_inventory_take, - allow_metadata_inventory_move = technic.machine_inventory_move, - technic_run = run, - after_place_node = data.tube and pipeworks.after_place, - after_dig_node = technic.machine_after_dig_node, - on_receive_fields = function(pos, formname, fields, sender) - if not pipeworks.may_configure(pos, sender) then return end - fs_helpers.on_receive_fields(pos, fields) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - local form = generator_formspec - local form_buttons = "" - if not string.find(node.name, ":lv_") then - form_buttons = fs_helpers.cycling_button( - meta, - pipeworks.button_base, - "splitstacks", - { - pipeworks.button_off, - pipeworks.button_on - } - )..pipeworks.button_label - end - meta:set_string("formspec", generator_formspec..form_buttons) - end, - }) - - minetest.register_node("technic:"..ltier.."_generator_active", { - description = desc, - tiles = { - "technic_"..ltier.."_generator_top.png"..tube_entry, - "technic_machine_bottom.png"..tube_entry, - "technic_"..ltier.."_generator_side.png"..tube_entry, - "technic_"..ltier.."_generator_side.png"..tube_entry, - "technic_"..ltier.."_generator_side.png"..tube_entry, - "technic_"..ltier.."_generator_front_active.png" - }, - paramtype2 = "facedir", - groups = active_groups, - connect_sides = {"bottom"}, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - tube = data.tube and tube or nil, - drop = "technic:"..ltier.."_generator", - can_dig = technic.machine_can_dig, - after_dig_node = technic.machine_after_dig_node, - allow_metadata_inventory_put = technic.machine_inventory_put, - allow_metadata_inventory_take = technic.machine_inventory_take, - allow_metadata_inventory_move = technic.machine_inventory_move, - technic_run = run, - technic_on_disable = function(pos, node) - local timer = minetest.get_node_timer(pos) - timer:start(1) - end, - on_timer = function(pos, node) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - - -- Connected back? - if meta:get_int(tier.."_EU_timeout") > 0 then return false end - - local burn_time = meta:get_int("burn_time") or 0 - - if burn_time <= 0 then - meta:set_int(tier.."_EU_supply", 0) - meta:set_int("burn_time", 0) - technic.swap_node(pos, "technic:"..ltier.."_generator") - return false - end - - local burn_totaltime = meta:get_int("burn_totaltime") or 0 - if burn_totaltime == 0 then burn_totaltime = 1 end - burn_time = burn_time - 1 - meta:set_int("burn_time", burn_time) - local percent = math.floor(burn_time / burn_totaltime * 100) - - local form_buttons = "" - if not string.find(node.name, ":lv_") then - form_buttons = fs_helpers.cycling_button( - meta, - pipeworks.button_base, - "splitstacks", - { - pipeworks.button_off, - pipeworks.button_on - } - )..pipeworks.button_label - end - meta:set_string("formspec", - "size[8, 9]".. - "label[0, 0;"..minetest.formspec_escape(desc).."]".. - "list[current_name;src;3, 1;1, 1;]".. - "image[4, 1;1, 1;furnace_furnace_fire_bg.png^[lowpart:".. - (percent)..":furnace_furnace_fire_fg.png]".. - "list[current_player;main;0, 5;8, 4;]".. - "listring[]".. - form_buttons - ) - return true - end, - on_receive_fields = function(pos, formname, fields, sender) - if not pipeworks.may_configure(pos, sender) then return end - fs_helpers.on_receive_fields(pos, fields) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - local form_buttons = "" - if not string.find(node.name, ":lv_") then - form_buttons = fs_helpers.cycling_button( - meta, - pipeworks.button_base, - "splitstacks", - { - pipeworks.button_off, - pipeworks.button_on - } - )..pipeworks.button_label - end - - local burn_totaltime = meta:get_int("burn_totaltime") or 0 - local burn_time = meta:get_int("burn_time") - local percent = math.floor(burn_time / burn_totaltime * 100) - - meta:set_string("formspec", - "size[8, 9]".. - "label[0, 0;"..minetest.formspec_escape(desc).."]".. - "list[current_name;src;3, 1;1, 1;]".. - "image[4, 1;1, 1;furnace_furnace_fire_bg.png^[lowpart:".. - (percent)..":furnace_furnace_fire_fg.png]".. - "list[current_player;main;0, 5;8, 4;]".. - "listring[]".. - form_buttons - ) - end, - }) - - technic.register_machine(tier, "technic:"..ltier.."_generator", technic.producer) - technic.register_machine(tier, "technic:"..ltier.."_generator_active", technic.producer) -end - diff --git a/mods/ITEMS/technic/technic/machines/register/grinder_recipes.lua b/mods/ITEMS/technic/technic/machines/register/grinder_recipes.lua deleted file mode 100755 index 65d15da..0000000 --- a/mods/ITEMS/technic/technic/machines/register/grinder_recipes.lua +++ /dev/null @@ -1,157 +0,0 @@ - -local S = technic.getter - -technic.register_recipe_type("grinding", { description = S("Grinding") }) - -function technic.register_grinder_recipe(data) - data.time = data.time or 3 - technic.register_recipe("grinding", data) -end - -local recipes = { - -- Dusts - {"default:coal_lump", "technic:coal_dust 2"}, - {"default:copper_lump", "technic:copper_dust 2"}, - {"default:desert_stone", "default:desert_sand"}, - {"default:gold_lump", "technic:gold_dust 2"}, - {"default:iron_lump", "technic:wrought_iron_dust 2"}, - {"technic:chromium_lump", "technic:chromium_dust 2"}, - {"technic:uranium_lump", "technic:uranium_dust 2"}, - {"technic:zinc_lump", "technic:zinc_dust 2"}, - {"technic:lead_lump", "technic:lead_dust 2"}, - {"technic:sulfur_lump", "technic:sulfur_dust 2"}, - {"default:stone", "technic:stone_dust"}, - {"default:sand", "technic:stone_dust"}, - - -- Other - {"default:cobble", "default:gravel"}, - {"default:gravel", "default:sand"}, - {"default:sandstone", "default:sand 2"}, -- reverse recipe can be found in the compressor -} - --- defuse the sandstone -> 4 sand recipe to avoid infinite sand bugs (also consult the inverse compressor recipe) -minetest.clear_craft({ - recipe = { - {'default:sandstone'} - }, -}) - -if minetest.get_modpath("farming") then - table.insert(recipes, {"farming:seed_wheat", "farming:flour 1"}) -end - -if minetest.get_modpath("moreores") then - table.insert(recipes, {"moreores:mithril_lump", "technic:mithril_dust 2"}) - table.insert(recipes, {"moreores:silver_lump", "technic:silver_dust 2"}) - table.insert(recipes, {"moreores:tin_lump", "technic:tin_dust 2"}) -end - -if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then - table.insert(recipes, {"gloopores:alatro_lump", "technic:alatro_dust 2"}) - table.insert(recipes, {"gloopores:kalite_lump", "technic:kalite_dust 2"}) - table.insert(recipes, {"gloopores:arol_lump", "technic:arol_dust 2"}) - table.insert(recipes, {"gloopores:talinite_lump", "technic:talinite_dust 2"}) - table.insert(recipes, {"gloopores:akalin_lump", "technic:akalin_dust 2"}) -end - -if minetest.get_modpath("homedecor") then - table.insert(recipes, {"home_decor:brass_ingot", "technic:brass_dust 1"}) -end - -for _, data in pairs(recipes) do - technic.register_grinder_recipe({input = {data[1]}, output = data[2]}) -end - --- dusts -local function register_dust(name, ingot) - local lname = string.lower(name) - lname = string.gsub(lname, ' ', '_') - minetest.register_craftitem("technic:"..lname.."_dust", { - description = S("%s Dust"):format(S(name)), - inventory_image = "technic_"..lname.."_dust.png", - }) - if ingot then - minetest.register_craft({ - type = "cooking", - recipe = "technic:"..lname.."_dust", - output = ingot, - }) - technic.register_grinder_recipe({ input = {ingot}, output = "technic:"..lname.."_dust 1" }) - end -end - --- Sorted alphibeticaly -register_dust("Brass", "technic:brass_ingot") -register_dust("Bronze", "default:bronze_ingot") -register_dust("Carbon Steel", "technic:carbon_steel_ingot") -register_dust("Cast Iron", "technic:cast_iron_ingot") -register_dust("Chernobylite", "technic:chernobylite_block") -register_dust("Chromium", "technic:chromium_ingot") -register_dust("Coal", nil) -register_dust("Copper", "default:copper_ingot") -register_dust("Lead", "technic:lead_ingot") -register_dust("Gold", "default:gold_ingot") -register_dust("Mithril", "moreores:mithril_ingot") -register_dust("Silver", "moreores:silver_ingot") -register_dust("Stainless Steel", "technic:stainless_steel_ingot") -register_dust("Stone", "default:stone") -register_dust("Sulfur", nil) -register_dust("Tin", "moreores:tin_ingot") -register_dust("Wrought Iron", "technic:wrought_iron_ingot") -register_dust("Zinc", "technic:zinc_ingot") -if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then - register_dust("Akalin", "glooptest:akalin_ingot") - register_dust("Alatro", "glooptest:alatro_ingot") - register_dust("Arol", "glooptest:arol_ingot") - register_dust("Kalite", nil) - register_dust("Talinite", "glooptest:talinite_ingot") -end - -for p = 0, 35 do - local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil - local psuffix = p == 7 and "" or p - local ingot = "technic:uranium"..psuffix.."_ingot" - local dust = "technic:uranium"..psuffix.."_dust" - minetest.register_craftitem(dust, { - description = S("%s Dust"):format(string.format(S("%.1f%%-Fissile Uranium"), p/10)), - inventory_image = "technic_uranium_dust.png", - on_place_on_ground = minetest.craftitem_place_item, - groups = {uranium_dust=1, not_in_creative_inventory=nici}, - }) - minetest.register_craft({ - type = "cooking", - recipe = dust, - output = ingot, - }) - technic.register_grinder_recipe({ input = {ingot}, output = dust }) -end - -local function uranium_dust(p) - return "technic:uranium"..(p == 7 and "" or p).."_dust" -end -for pa = 0, 34 do - for pb = pa+1, 35 do - local pc = (pa+pb)/2 - if pc == math.floor(pc) then - minetest.register_craft({ - type = "shapeless", - recipe = { uranium_dust(pa), uranium_dust(pb) }, - output = uranium_dust(pc).." 2", - }) - end - end -end - -minetest.register_craft({ - type = "fuel", - recipe = "technic:coal_dust", - burntime = 50, -}) - -if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then - minetest.register_craft({ - type = "fuel", - recipe = "technic:kalite_dust", - burntime = 37.5, - }) -end diff --git a/mods/ITEMS/technic/technic/machines/register/recipes.lua b/mods/ITEMS/technic/technic/machines/register/recipes.lua deleted file mode 100755 index 89941cc..0000000 --- a/mods/ITEMS/technic/technic/machines/register/recipes.lua +++ /dev/null @@ -1,107 +0,0 @@ -local have_ui = minetest.get_modpath("unified_inventory") - -technic.recipes = { cooking = { input_size = 1, output_size = 1 } } -function technic.register_recipe_type(typename, origdata) - local data = {} - for k, v in pairs(origdata) do data[k] = v end - data.input_size = data.input_size or 1 - data.output_size = data.output_size or 1 - if have_ui and unified_inventory.register_craft_type and data.output_size == 1 then - unified_inventory.register_craft_type(typename, { - description = data.description, - width = data.input_size, - height = 1, - }) - end - data.recipes = {} - technic.recipes[typename] = data -end - -local function get_recipe_index(items) - if not items or type(items) ~= "table" then return false end - local l = {} - for i, stack in ipairs(items) do - l[i] = ItemStack(stack):get_name() - end - table.sort(l) - return table.concat(l, "/") -end - -local function register_recipe(typename, data) - -- Handle aliases - for i, stack in ipairs(data.input) do - data.input[i] = ItemStack(stack):to_string() - end - if type(data.output) == "table" then - for i, v in ipairs(data.output) do - data.output[i] = ItemStack(data.output[i]):to_string() - end - else - data.output = ItemStack(data.output):to_string() - end - - local recipe = {time = data.time, input = {}, output = data.output} - local index = get_recipe_index(data.input) - if not index then - print("[Technic] ignored registration of garbage recipe!") - return - end - for _, stack in ipairs(data.input) do - recipe.input[ItemStack(stack):get_name()] = ItemStack(stack):get_count() - end - - technic.recipes[typename].recipes[index] = recipe - if unified_inventory and technic.recipes[typename].output_size == 1 then - unified_inventory.register_craft({ - type = typename, - output = data.output, - items = data.input, - width = 0, - }) - end -end - -function technic.register_recipe(typename, data) - minetest.after(0.01, register_recipe, typename, data) -- Handle aliases -end - -function technic.get_recipe(typename, items) - if typename == "cooking" then -- Already builtin in Minetest, so use that - local result, new_input = minetest.get_craft_result({ - method = "cooking", - width = 1, - items = items}) - -- Compatibility layer - if not result or result.time == 0 then - return nil - else - return {time = result.time, - new_input = new_input.items, - output = result.item} - end - end - local index = get_recipe_index(items) - if not index then - print("[Technic] ignored registration of garbage recipe!") - return - end - local recipe = technic.recipes[typename].recipes[index] - if recipe then - local new_input = {} - for i, stack in ipairs(items) do - if stack:get_count() < recipe.input[stack:get_name()] then - return nil - else - new_input[i] = ItemStack(stack) - new_input[i]:take_item(recipe.input[stack:get_name()]) - end - end - return {time = recipe.time, - new_input = new_input, - output = recipe.output} - else - return nil - end -end - - diff --git a/mods/ITEMS/technic/technic/machines/supply_converter.lua b/mods/ITEMS/technic/technic/machines/supply_converter.lua deleted file mode 100755 index aa41791..0000000 --- a/mods/ITEMS/technic/technic/machines/supply_converter.lua +++ /dev/null @@ -1,206 +0,0 @@ --- The supply converter is a generic device which can convert from --- LV to MV and back, and HV to MV and back. --- The machine is configured by the wiring below and above it. --- --- It works like this: --- The top side is setup as the receiver side, the bottom as the producer side. --- Once the receiver side is powered it will deliver power to the other side. --- Unused power is wasted just like any other producer! - -local digilines_path = minetest.get_modpath("digilines") - -local S = technic.getter - -local cable_entry = "^technic_cable_connection_overlay.png" - -local function set_supply_converter_formspec(meta) - local formspec = "size[5,2.25]".. - "field[0.3,0.5;2,1;power;"..S("Input Power")..";"..meta:get_int("power").."]" - if digilines_path then - formspec = formspec.. - "field[2.3,0.5;3,1;channel;Digiline Channel;"..meta:get_string("channel").."]" - end - -- The names for these toggle buttons are explicit about which - -- state they'll switch to, so that multiple presses (arising - -- from the ambiguity between lag and a missed press) only make - -- the single change that the user expects. - if meta:get_int("mesecon_mode") == 0 then - formspec = formspec.."button[0,1;5,1;mesecon_mode_1;"..S("Ignoring Mesecon Signal").."]" - else - formspec = formspec.."button[0,1;5,1;mesecon_mode_0;"..S("Controlled by Mesecon Signal").."]" - end - if meta:get_int("enabled") == 0 then - formspec = formspec.."button[0,1.75;5,1;enable;"..S("%s Disabled"):format(S("Supply Converter")).."]" - else - formspec = formspec.."button[0,1.75;5,1;disable;"..S("%s Enabled"):format(S("Supply Converter")).."]" - end - meta:set_string("formspec", formspec) -end - -local supply_converter_receive_fields = function(pos, formname, fields, sender) - local meta = minetest.get_meta(pos) - local power = nil - if fields.power then - power = tonumber(fields.power) or 0 - power = math.max(power, 0) - power = math.min(power, 10000) - power = 100 * math.floor(power / 100) - if power == meta:get_int("power") then power = nil end - end - if power then meta:set_int("power", power) end - if fields.channel then meta:set_string("channel", fields.channel) end - if fields.enable then meta:set_int("enabled", 1) end - if fields.disable then meta:set_int("enabled", 0) end - if fields.mesecon_mode_0 then meta:set_int("mesecon_mode", 0) end - if fields.mesecon_mode_1 then meta:set_int("mesecon_mode", 1) end - set_supply_converter_formspec(meta) -end - -local mesecons = { - effector = { - action_on = function(pos, node) - minetest.get_meta(pos):set_int("mesecon_effect", 1) - end, - action_off = function(pos, node) - minetest.get_meta(pos):set_int("mesecon_effect", 0) - end - } -} - - -local digiline_def = { - receptor = {action = function() end}, - effector = { - action = function(pos, node, channel, msg) - local meta = minetest.get_meta(pos) - if channel ~= meta:get_string("channel") then - return - end - msg = msg:lower() - if msg == "get" then - digilines.receptor_send(pos, digilines.rules.default, channel, { - enabled = meta:get_int("enabled"), - power = meta:get_int("power"), - mesecon_mode = meta:get_int("mesecon_mode") - }) - return - elseif msg == "off" then - meta:set_int("enabled", 0) - elseif msg == "on" then - meta:set_int("enabled", 1) - elseif msg == "toggle" then - local onn = meta:get_int("enabled") - onn = -(onn-1) -- Mirror onn with pivot 0.5, so switch between 1 and 0. - meta:set_int("enabled", onn) - elseif msg:sub(1, 5) == "power" then - local power = tonumber(msg:sub(7)) - if not power then - return - end - power = math.max(power, 0) - power = math.min(power, 10000) - power = 100 * math.floor(power / 100) - meta:set_int("power", power) - elseif msg:sub(1, 12) == "mesecon_mode" then - meta:set_int("mesecon_mode", tonumber(msg:sub(14))) - end - set_supply_converter_formspec(meta) - end - }, -} - -local run = function(pos, node, run_stage) - -- run only in producer stage. - if run_stage == technic.receiver then - return - end - - local remain = 0.9 - -- Machine information - local machine_name = S("Supply Converter") - local meta = minetest.get_meta(pos) - local enabled = meta:get_string("enabled") - if enabled == "" then - -- Backwards compatibility - minetest.registered_nodes["technic:supply_converter"].on_construct(pos) - enabled = true - else - enabled = enabled == "1" - end - enabled = enabled and (meta:get_int("mesecon_mode") == 0 or meta:get_int("mesecon_effect") ~= 0) - local demand = enabled and meta:get_int("power") or 0 - - local pos_up = {x=pos.x, y=pos.y+1, z=pos.z} - local pos_down = {x=pos.x, y=pos.y-1, z=pos.z} - local name_up = minetest.get_node(pos_up).name - local name_down = minetest.get_node(pos_down).name - - local from = technic.get_cable_tier(name_up) - local to = technic.get_cable_tier(name_down) - - if from and to then - local input = meta:get_int(from.."_EU_input") - meta:set_int(from.."_EU_demand", demand) - meta:set_int(from.."_EU_supply", 0) - meta:set_int(to.."_EU_demand", 0) - meta:set_int(to.."_EU_supply", input * remain) - meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name, technic.pretty_num(input), from, technic.pretty_num(input * remain), to)) - else - meta:set_string("infotext", S("%s Has Bad Cabling"):format(machine_name)) - if to then - meta:set_int(to.."_EU_supply", 0) - end - if from then - meta:set_int(from.."_EU_demand", 0) - end - return - end - -end - -minetest.register_node("technic:supply_converter", { - description = S("Supply Converter"), - tiles = { - "technic_supply_converter_tb.png"..cable_entry, - "technic_supply_converter_tb.png"..cable_entry, - "technic_supply_converter_side.png", - "technic_supply_converter_side.png", - "technic_supply_converter_side.png", - "technic_supply_converter_side.png" - }, - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, - technic_machine=1, technic_all_tiers=1}, - connect_sides = {"top", "bottom"}, - sounds = default.node_sound_wood_defaults(), - on_receive_fields = supply_converter_receive_fields, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("Supply Converter")) - if digilines_path then - meta:set_string("channel", "supply_converter"..minetest.pos_to_string(pos)) - end - meta:set_int("power", 10000) - meta:set_int("enabled", 1) - meta:set_int("mesecon_mode", 0) - meta:set_int("mesecon_effect", 0) - set_supply_converter_formspec(meta) - end, - mesecons = mesecons, - digiline = digiline_def, - technic_run = run, - technic_on_disable = run, -}) - -minetest.register_craft({ - output = 'technic:supply_converter 1', - recipe = { - {'technic:fine_gold_wire', 'technic:rubber', 'technic:doped_silicon_wafer'}, - {'technic:mv_transformer', 'technic:machine_casing', 'technic:lv_transformer'}, - {'technic:mv_cable', 'technic:rubber', 'technic:lv_cable'}, - } -}) - -for tier, machines in pairs(technic.machines) do - technic.register_machine(tier, "technic:supply_converter", technic.producer_receiver) -end - diff --git a/mods/ITEMS/technic/technic/machines/switching_station.lua b/mods/ITEMS/technic/technic/machines/switching_station.lua deleted file mode 100755 index dcc0520..0000000 --- a/mods/ITEMS/technic/technic/machines/switching_station.lua +++ /dev/null @@ -1,494 +0,0 @@ --- See also technic/doc/api.md - -technic.networks = {} -technic.cables = {} -technic.redundant_warn = {} - -local mesecons_path = minetest.get_modpath("mesecons") -local digilines_path = minetest.get_modpath("digilines") - -local S = technic.getter - -local cable_entry = "^technic_cable_connection_overlay.png" - -minetest.register_craft({ - output = "technic:switching_station", - recipe = { - {"", "technic:lv_transformer", ""}, - {"default:copper_ingot", "technic:machine_casing", "default:copper_ingot"}, - {"technic:lv_cable", "technic:lv_cable", "technic:lv_cable"} - } -}) - -local mesecon_def -if mesecons_path then - mesecon_def = {effector = { - rules = mesecon.rules.default, - }} -end - -minetest.register_node("technic:switching_station",{ - description = S("Switching Station"), - tiles = { - "technic_water_mill_top_active.png", - "technic_water_mill_top_active.png"..cable_entry, - "technic_water_mill_top_active.png", - "technic_water_mill_top_active.png", - "technic_water_mill_top_active.png", - "technic_water_mill_top_active.png"}, - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, technic_all_tiers=1}, - connect_sides = {"bottom"}, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("Switching Station")) - meta:set_string("active", 1) - meta:set_string("channel", "switching_station"..minetest.pos_to_string(pos)) - meta:set_string("formspec", "field[channel;Channel;${channel}]") - local poshash = minetest.hash_node_position(pos) - technic.redundant_warn.poshash = nil - end, - after_dig_node = function(pos) - minetest.forceload_free_block(pos) - pos.y = pos.y - 1 - minetest.forceload_free_block(pos) - local poshash = minetest.hash_node_position(pos) - technic.redundant_warn.poshash = nil - end, - on_receive_fields = function(pos, formname, fields, sender) - if not fields.channel then - return - end - local plname = sender:get_player_name() - if minetest.is_protected(pos, plname) then - minetest.record_protection_violation(pos, plname) - return - end - local meta = minetest.get_meta(pos) - meta:set_string("channel", fields.channel) - end, - mesecons = mesecon_def, - digiline = { - receptor = {action = function() end}, - effector = { - action = function(pos, node, channel, msg) - if msg ~= "GET" and msg ~= "get" then - return - end - local meta = minetest.get_meta(pos) - if channel ~= meta:get_string("channel") then - return - end - digilines.receptor_send(pos, digilines.rules.default, channel, { - supply = meta:get_int("supply"), - demand = meta:get_int("demand") - }) - end - }, - }, -}) - --------------------------------------------------- --- Functions to traverse the electrical network --------------------------------------------------- - --- Add a wire node to the LV/MV/HV network -local add_new_cable_node = function(nodes, pos, network_id) - technic.cables[minetest.hash_node_position(pos)] = network_id - -- Ignore if the node has already been added - for i = 1, #nodes do - if pos.x == nodes[i].x and - pos.y == nodes[i].y and - pos.z == nodes[i].z then - return false - end - end - table.insert(nodes, {x=pos.x, y=pos.y, z=pos.z, visited=1}) - return true -end - --- Generic function to add found connected nodes to the right classification array -local check_node_subp = function(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, pos, machines, tier, sw_pos, from_below, network_id) - technic.get_or_load_node(pos) - local meta = minetest.get_meta(pos) - local name = minetest.get_node(pos).name - - if technic.is_tier_cable(name, tier) then - add_new_cable_node(all_nodes, pos,network_id) - elseif machines[name] then - --dprint(name.." is a "..machines[name]) - meta:set_string(tier.."_network",minetest.pos_to_string(sw_pos)) - if machines[name] == technic.producer then - add_new_cable_node(PR_nodes, pos, network_id) - elseif machines[name] == technic.receiver then - add_new_cable_node(RE_nodes, pos, network_id) - elseif machines[name] == technic.producer_receiver then - add_new_cable_node(PR_nodes, pos, network_id) - add_new_cable_node(RE_nodes, pos, network_id) - elseif machines[name] == "SPECIAL" and - (pos.x ~= sw_pos.x or pos.y ~= sw_pos.y or pos.z ~= sw_pos.z) and - from_below then - -- Another switching station -> disable it - add_new_cable_node(SP_nodes, pos, network_id) - meta:set_int("active", 0) - elseif machines[name] == technic.battery then - add_new_cable_node(BA_nodes, pos, network_id) - end - - meta:set_int(tier.."_EU_timeout", 2) -- Touch node - end -end - --- Traverse a network given a list of machines and a cable type name -local traverse_network = function(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, i, machines, tier, sw_pos, network_id) - local pos = all_nodes[i] - local positions = { - {x=pos.x+1, y=pos.y, z=pos.z}, - {x=pos.x-1, y=pos.y, z=pos.z}, - {x=pos.x, y=pos.y+1, z=pos.z}, - {x=pos.x, y=pos.y-1, z=pos.z}, - {x=pos.x, y=pos.y, z=pos.z+1}, - {x=pos.x, y=pos.y, z=pos.z-1}} - --print("ON") - for i, cur_pos in pairs(positions) do - check_node_subp(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, cur_pos, machines, tier, sw_pos, i == 3, network_id) - end -end - -local touch_nodes = function(list, tier) - for _, pos in ipairs(list) do - local meta = minetest.get_meta(pos) - meta:set_int(tier.."_EU_timeout", 2) -- Touch node - end -end - -local get_network = function(sw_pos, pos1, tier) - local cached = technic.networks[minetest.hash_node_position(pos1)] - if cached and cached.tier == tier then - touch_nodes(cached.PR_nodes, tier) - touch_nodes(cached.BA_nodes, tier) - touch_nodes(cached.RE_nodes, tier) - for _, pos in ipairs(cached.SP_nodes) do - local meta = minetest.get_meta(pos) - meta:set_int("active", 0) - meta:set_string("active_pos", minetest.serialize(sw_pos)) - end - return cached.PR_nodes, cached.BA_nodes, cached.RE_nodes - end - local i = 1 - local PR_nodes = {} - local BA_nodes = {} - local RE_nodes = {} - local SP_nodes = {} - local all_nodes = {pos1} - repeat - traverse_network(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, - i, technic.machines[tier], tier, sw_pos, minetest.hash_node_position(pos1)) - i = i + 1 - until all_nodes[i] == nil - technic.networks[minetest.hash_node_position(pos1)] = {tier = tier, PR_nodes = PR_nodes, - RE_nodes = RE_nodes, BA_nodes = BA_nodes, SP_nodes = SP_nodes, all_nodes = all_nodes} - return PR_nodes, BA_nodes, RE_nodes -end - ------------------------------------------------ --- The action code for the switching station -- ------------------------------------------------ - -technic.powerctrl_state = true - -minetest.register_chatcommand("powerctrl", { - params = "state", - description = "Enables or disables technic's switching station ABM", - privs = { basic_privs = true }, - func = function(name, state) - if state == "on" then - technic.powerctrl_state = true - else - technic.powerctrl_state = false - end - end -}) - -minetest.register_abm({ - nodenames = {"technic:switching_station"}, - label = "Switching Station", -- allows the mtt profiler to profile this abm individually - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if not technic.powerctrl_state then return end - local meta = minetest.get_meta(pos) - local meta1 = nil - local pos1 = {} - local PR_EU = 0 -- EUs from PR nodes - local BA_PR_EU = 0 -- EUs from BA nodes (discharching) - local BA_RE_EU = 0 -- EUs to BA nodes (charging) - local RE_EU = 0 -- EUs to RE nodes - - local tier = "" - local PR_nodes - local BA_nodes - local RE_nodes - local machine_name = S("Switching Station") - - -- Which kind of network are we on: - pos1 = {x=pos.x, y=pos.y-1, z=pos.z} - - --Disable if necessary - if meta:get_int("active") ~= 1 then - minetest.forceload_free_block(pos) - minetest.forceload_free_block(pos1) - meta:set_string("infotext",S("%s Already Present"):format(machine_name)) - - local poshash = minetest.hash_node_position(pos) - - if not technic.redundant_warn.poshash then - technic.redundant_warn.poshash = true - print("[TECHNIC] Warning: redundant switching station found near "..minetest.pos_to_string(pos)) - end - return - end - - local name = minetest.get_node(pos1).name - local tier = technic.get_cable_tier(name) - if tier then - -- Forceload switching station - minetest.forceload_block(pos) - minetest.forceload_block(pos1) - PR_nodes, BA_nodes, RE_nodes = get_network(pos, pos1, tier) - else - --dprint("Not connected to a network") - meta:set_string("infotext", S("%s Has No Network"):format(machine_name)) - minetest.forceload_free_block(pos) - minetest.forceload_free_block(pos1) - return - end - - -- Run all the nodes - local function run_nodes(list, run_stage) - for _, pos2 in ipairs(list) do - technic.get_or_load_node(pos2) - local node2 = minetest.get_node(pos2) - local nodedef - if node2 and node2.name then - nodedef = minetest.registered_nodes[node2.name] - end - if nodedef and nodedef.technic_run then - nodedef.technic_run(pos2, node2, run_stage) - end - end - end - - run_nodes(PR_nodes, technic.producer) - run_nodes(RE_nodes, technic.receiver) - run_nodes(BA_nodes, technic.battery) - - -- Strings for the meta data - local eu_demand_str = tier.."_EU_demand" - local eu_input_str = tier.."_EU_input" - local eu_supply_str = tier.."_EU_supply" - - -- Distribute charge equally across multiple batteries. - local charge_total = 0 - local battery_count = 0 - - for n, pos1 in pairs(BA_nodes) do - meta1 = minetest.get_meta(pos1) - local charge = meta1:get_int("internal_EU_charge") - - if (meta1:get_int(eu_demand_str) ~= 0) then - charge_total = charge_total + charge - battery_count = battery_count + 1 - end - end - - local charge_distributed = math.floor(charge_total / battery_count) - - for n, pos1 in pairs(BA_nodes) do - meta1 = minetest.get_meta(pos1) - - if (meta1:get_int(eu_demand_str) ~= 0) then - meta1:set_int("internal_EU_charge", charge_distributed) - end - end - - -- Get all the power from the PR nodes - local PR_eu_supply = 0 -- Total power - for _, pos1 in pairs(PR_nodes) do - meta1 = minetest.get_meta(pos1) - PR_eu_supply = PR_eu_supply + meta1:get_int(eu_supply_str) - end - --dprint("Total PR supply:"..PR_eu_supply) - - -- Get all the demand from the RE nodes - local RE_eu_demand = 0 - for _, pos1 in pairs(RE_nodes) do - meta1 = minetest.get_meta(pos1) - RE_eu_demand = RE_eu_demand + meta1:get_int(eu_demand_str) - end - --dprint("Total RE demand:"..RE_eu_demand) - - -- Get all the power from the BA nodes - local BA_eu_supply = 0 - for _, pos1 in pairs(BA_nodes) do - meta1 = minetest.get_meta(pos1) - BA_eu_supply = BA_eu_supply + meta1:get_int(eu_supply_str) - end - --dprint("Total BA supply:"..BA_eu_supply) - - -- Get all the demand from the BA nodes - local BA_eu_demand = 0 - for _, pos1 in pairs(BA_nodes) do - meta1 = minetest.get_meta(pos1) - BA_eu_demand = BA_eu_demand + meta1:get_int(eu_demand_str) - end - --dprint("Total BA demand:"..BA_eu_demand) - - meta:set_string("infotext", - S("@1. Supply: @2 Demand: @3", - machine_name, technic.pretty_num(PR_eu_supply), technic.pretty_num(RE_eu_demand))) - - -- If mesecon signal and power supply or demand changed then - -- send them via digilines. - if mesecons_path and digilines_path and mesecon.is_powered(pos) then - if PR_eu_supply ~= meta:get_int("supply") or - RE_eu_demand ~= meta:get_int("demand") then - local channel = meta:get_string("channel") - digilines.receptor_send(pos, digilines.rules.default, channel, { - supply = PR_eu_supply, - demand = RE_eu_demand - }) - end - end - - -- Data that will be used by the power monitor - meta:set_int("supply",PR_eu_supply) - meta:set_int("demand",RE_eu_demand) - - -- If the PR supply is enough for the RE demand supply them all - if PR_eu_supply >= RE_eu_demand then - --dprint("PR_eu_supply"..PR_eu_supply.." >= RE_eu_demand"..RE_eu_demand) - for _, pos1 in pairs(RE_nodes) do - meta1 = minetest.get_meta(pos1) - local eu_demand = meta1:get_int(eu_demand_str) - meta1:set_int(eu_input_str, eu_demand) - end - -- We have a surplus, so distribute the rest equally to the BA nodes - -- Let's calculate the factor of the demand - PR_eu_supply = PR_eu_supply - RE_eu_demand - local charge_factor = 0 -- Assume all batteries fully charged - if BA_eu_demand > 0 then - charge_factor = PR_eu_supply / BA_eu_demand - end - for n, pos1 in pairs(BA_nodes) do - meta1 = minetest.get_meta(pos1) - local eu_demand = meta1:get_int(eu_demand_str) - meta1:set_int(eu_input_str, math.floor(eu_demand * charge_factor)) - --dprint("Charging battery:"..math.floor(eu_demand*charge_factor)) - end - return - end - - -- If the PR supply is not enough for the RE demand we will discharge the batteries too - if PR_eu_supply + BA_eu_supply >= RE_eu_demand then - --dprint("PR_eu_supply "..PR_eu_supply.."+BA_eu_supply "..BA_eu_supply.." >= RE_eu_demand"..RE_eu_demand) - for _, pos1 in pairs(RE_nodes) do - meta1 = minetest.get_meta(pos1) - local eu_demand = meta1:get_int(eu_demand_str) - meta1:set_int(eu_input_str, eu_demand) - end - -- We have a deficit, so distribute to the BA nodes - -- Let's calculate the factor of the supply - local charge_factor = 0 -- Assume all batteries depleted - if BA_eu_supply > 0 then - charge_factor = (PR_eu_supply - RE_eu_demand) / BA_eu_supply - end - for n,pos1 in pairs(BA_nodes) do - meta1 = minetest.get_meta(pos1) - local eu_supply = meta1:get_int(eu_supply_str) - meta1:set_int(eu_input_str, math.floor(eu_supply * charge_factor)) - --dprint("Discharging battery:"..math.floor(eu_supply*charge_factor)) - end - return - end - - -- If the PR+BA supply is not enough for the RE demand: Power only the batteries - local charge_factor = 0 -- Assume all batteries fully charged - if BA_eu_demand > 0 then - charge_factor = PR_eu_supply / BA_eu_demand - end - for n, pos1 in pairs(BA_nodes) do - meta1 = minetest.get_meta(pos1) - local eu_demand = meta1:get_int(eu_demand_str) - meta1:set_int(eu_input_str, math.floor(eu_demand * charge_factor)) - end - for n, pos1 in pairs(RE_nodes) do - meta1 = minetest.get_meta(pos1) - meta1:set_int(eu_input_str, 0) - end - - end, -}) - --- Timeout ABM --- Timeout for a node in case it was disconnected from the network --- A node must be touched by the station continuously in order to function -local function switching_station_timeout_count(pos, tier) - local meta = minetest.get_meta(pos) - local timeout = meta:get_int(tier.."_EU_timeout") - if timeout <= 0 then - meta:set_int(tier.."_EU_input", 0) -- Not needed anymore <-- actually, it is for supply converter - return true - else - meta:set_int(tier.."_EU_timeout", timeout - 1) - return false - end -end -minetest.register_abm({ - label = "Machines: timeout check", - nodenames = {"group:technic_machine"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - for tier, machines in pairs(technic.machines) do - if machines[node.name] and switching_station_timeout_count(pos, tier) then - local nodedef = minetest.registered_nodes[node.name] - if nodedef and nodedef.technic_disabled_machine_name then - node.name = nodedef.technic_disabled_machine_name - minetest.swap_node(pos, node) - elseif nodedef and nodedef.technic_on_disable then - nodedef.technic_on_disable(pos, node) - end - if nodedef then - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("%s Has No Network"):format(nodedef.description)) - end - end - end - end, -}) - ---Re-enable disabled switching station if necessary, similar to the timeout above -minetest.register_abm({ - label = "Machines: re-enable check", - nodenames = {"technic:switching_station"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - local pos1 = {x=pos.x,y=pos.y-1,z=pos.z} - local tier = technic.get_cable_tier(minetest.get_node(pos1).name) - if not tier then return end - if switching_station_timeout_count(pos, tier) then - local meta = minetest.get_meta(pos) - meta:set_int("active",1) - end - end, -}) - -for tier, machines in pairs(technic.machines) do - -- SPECIAL will not be traversed - technic.register_machine(tier, "technic:switching_station", "SPECIAL") -end - diff --git a/mods/ITEMS/technic/technic/radiation.lua b/mods/ITEMS/technic/technic/radiation.lua deleted file mode 100755 index b76c6c8..0000000 --- a/mods/ITEMS/technic/technic/radiation.lua +++ /dev/null @@ -1,516 +0,0 @@ ---[[ -Radioactivity - -Radiation resistance represents the extent to which a material -attenuates radiation passing through it; i.e., how good a radiation -shield it is. This is identified per node type. For materials that -exist in real life, the radiation resistance value that this system -uses for a node type consisting of a solid cube of that material is the -(approximate) number of halvings of ionising radiation that is achieved -by a meter of the material in real life. This is approximately -proportional to density, which provides a good way to estimate it. -Homogeneous mixtures of materials have radiation resistance computed -by a simple weighted mean. Note that the amount of attenuation that -a material achieves in-game is not required to be (and is not) the -same as the attenuation achieved in real life. - -Radiation resistance for a node type may be specified in the node -definition, under the key "radiation_resistance". As an interim -measure, until node definitions widely include this, this code -knows a bunch of values for particular node types in several mods, -and values for groups of node types. The node definition takes -precedence if it specifies a value. Nodes for which no value at -all is known are taken to provide no radiation resistance at all; -this is appropriate for the majority of node types. Only node types -consisting of a fairly homogeneous mass of material should report -non-zero radiation resistance; anything with non-uniform geometry -or complex internal structure should show no radiation resistance. -Fractional resistance values are permitted. ---]] - -local S = technic.getter - -local rad_resistance_node = { - ["default:brick"] = 13, - ["default:bronzeblock"] = 45, - ["default:clay"] = 15, - ["default:coalblock"] = 9.6, - ["default:cobble"] = 15, - ["default:copperblock"] = 46, - ["default:desert_cobble"] = 15, - ["default:desert_sand"] = 10, - ["default:desert_stone"] = 17, - ["default:desert_stonebrick"] = 17, - ["default:diamondblock"] = 24, - ["default:dirt"] = 8.2, - ["default:dirt_with_grass"] = 8.2, - ["default:dirt_with_grass_footsteps"] = 8.2, - ["default:dirt_with_snow"] = 8.2, - ["default:glass"] = 17, - ["default:goldblock"] = 170, - ["default:gravel"] = 10, - ["default:ice"] = 5.6, - ["default:lava_flowing"] = 8.5, - ["default:lava_source"] = 17, - ["default:mese"] = 21, - ["default:mossycobble"] = 15, - ["pbj_pup:pbj_pup"] = 10000, - ["pbj_pup:pbj_pup_candies"] = 10000, - ["gloopblocks:rainbow_block_diagonal"] = 5000, - ["gloopblocks:rainbow_block_horizontal"] = 10000, - ["default:nyancat"] = 10000, - ["default:nyancat_rainbow"] = 10000, - ["nyancat:nyancat"] = 10000, - ["nyancat:nyancat_rainbow"] = 10000, - ["default:obsidian"] = 18, - ["default:obsidian_glass"] = 18, - ["default:sand"] = 10, - ["default:sandstone"] = 15, - ["default:sandstonebrick"] = 15, - ["default:snowblock"] = 1.7, - ["default:steelblock"] = 40, - ["default:stone"] = 17, - ["default:stone_with_coal"] = 16, - ["default:stone_with_copper"] = 20, - ["default:stone_with_diamond"] = 18, - ["default:stone_with_gold"] = 34, - ["default:stone_with_iron"] = 20, - ["default:stone_with_mese"] = 17, - ["default:stonebrick"] = 17, - ["default:water_flowing"] = 2.8, - ["default:water_source"] = 5.6, - ["farming:desert_sand_soil"] = 10, - ["farming:desert_sand_soil_wet"] = 10, - ["farming:soil"] = 8.2, - ["farming:soil_wet"] = 8.2, - ["glooptest:akalin_crystal_glass"] = 21, - ["glooptest:akalinblock"] = 40, - ["glooptest:alatro_crystal_glass"] = 21, - ["glooptest:alatroblock"] = 40, - ["glooptest:amethystblock"] = 18, - ["glooptest:arol_crystal_glass"] = 21, - ["glooptest:crystal_glass"] = 21, - ["glooptest:emeraldblock"] = 19, - ["glooptest:heavy_crystal_glass"] = 21, - ["glooptest:mineral_akalin"] = 20, - ["glooptest:mineral_alatro"] = 20, - ["glooptest:mineral_amethyst"] = 17, - ["glooptest:mineral_arol"] = 20, - ["glooptest:mineral_desert_coal"] = 16, - ["glooptest:mineral_desert_iron"] = 20, - ["glooptest:mineral_emerald"] = 17, - ["glooptest:mineral_kalite"] = 20, - ["glooptest:mineral_ruby"] = 18, - ["glooptest:mineral_sapphire"] = 18, - ["glooptest:mineral_talinite"] = 20, - ["glooptest:mineral_topaz"] = 18, - ["glooptest:reinforced_crystal_glass"] = 21, - ["glooptest:rubyblock"] = 27, - ["glooptest:sapphireblock"] = 27, - ["glooptest:talinite_crystal_glass"] = 21, - ["glooptest:taliniteblock"] = 40, - ["glooptest:topazblock"] = 24, - ["mesecons_extrawires:mese_powered"] = 21, - ["moreblocks:cactus_brick"] = 13, - ["moreblocks:cactus_checker"] = 8.5, - ["moreblocks:circle_stone_bricks"] = 17, - ["moreblocks:clean_glass"] = 17, - ["moreblocks:coal_checker"] = 9.0, - ["moreblocks:coal_glass"] = 17, - ["moreblocks:coal_stone"] = 17, - ["moreblocks:coal_stone_bricks"] = 17, - ["moreblocks:glow_glass"] = 17, - ["moreblocks:grey_bricks"] = 15, - ["moreblocks:iron_checker"] = 11, - ["moreblocks:iron_glass"] = 17, - ["moreblocks:iron_stone"] = 17, - ["moreblocks:iron_stone_bricks"] = 17, - ["moreblocks:plankstone"] = 9.3, - ["moreblocks:split_stone_tile"] = 15, - ["moreblocks:split_stone_tile_alt"] = 15, - ["moreblocks:stone_tile"] = 15, - ["moreblocks:super_glow_glass"] = 17, - ["moreblocks:tar"] = 7.0, - ["moreblocks:wood_tile"] = 1.7, - ["moreblocks:wood_tile_center"] = 1.7, - ["moreblocks:wood_tile_down"] = 1.7, - ["moreblocks:wood_tile_flipped"] = 1.7, - ["moreblocks:wood_tile_full"] = 1.7, - ["moreblocks:wood_tile_left"] = 1.7, - ["moreblocks:wood_tile_right"] = 1.7, - ["moreblocks:wood_tile_up"] = 1.7, - ["moreores:mineral_mithril"] = 18, - ["moreores:mineral_silver"] = 21, - ["moreores:mineral_tin"] = 19, - ["moreores:mithril_block"] = 26, - ["moreores:silver_block"] = 53, - ["moreores:tin_block"] = 37, - ["snow:snow_brick"] = 2.8, - ["technic:brass_block"] = 43, - ["technic:carbon_steel_block"] = 40, - ["technic:cast_iron_block"] = 40, - ["technic:chernobylite_block"] = 40, - ["technic:chromium_block"] = 37, - ["technic:corium_flowing"] = 40, - ["technic:corium_source"] = 80, - ["technic:granite"] = 18, - ["technic:lead_block"] = 80, - ["technic:marble"] = 18, - ["technic:marble_bricks"] = 18, - ["technic:mineral_chromium"] = 19, - ["technic:mineral_uranium"] = 71, - ["technic:mineral_zinc"] = 19, - ["technic:stainless_steel_block"] = 40, - ["technic:zinc_block"] = 36, - ["tnt:tnt"] = 11, - ["tnt:tnt_burning"] = 11, -} -local rad_resistance_group = { - concrete = 16, - tree = 3.4, - uranium_block = 500, - wood = 1.7, -} -local cache_radiation_resistance = {} -local function node_radiation_resistance(node_name) - local resistance = cache_radiation_resistance[node_name] - if resistance then - return resistance - end - local def = minetest.registered_nodes[node_name] - if not def then - cache_radiation_resistance[node_name] = 0 - return 0 - end - resistance = def.radiation_resistance or - rad_resistance_node[node_name] - if not resistance then - resistance = 0 - for g, v in pairs(def.groups) do - if v > 0 and rad_resistance_group[g] then - resistance = resistance + rad_resistance_group[g] - end - end - end - resistance = math.sqrt(resistance) - cache_radiation_resistance[node_name] = resistance - return resistance -end - - ---[[ -Radioactive nodes cause damage to nearby players. The damage -effect depends on the intrinsic strength of the radiation source, -the distance between the source and the player, and the shielding -effect of the intervening material. These determine a rate of damage; -total damage caused is the integral of this over time. - -In the absence of effective shielding, for a specific source the -damage rate varies realistically in inverse proportion to the square -of the distance. (Distance is measured to the player's abdomen, -not to the nominal player position which corresponds to the foot.) -However, if the player is inside a non-walkable (liquid or gaseous) -radioactive node, the nominal distance could go to zero, yielding -infinite damage. In that case, the player's body is displacing the -radioactive material, so the effective distance should remain non-zero. -We therefore apply a lower distance bound of sqrt(0.75), which is -the maximum distance one can get from the node center within the node. - -A radioactive node is identified by being in the "radioactive" group, -and the group value signifies the strength of the radiation source. -The group value is the distance from a node at which an unshielded -player will be damaged by 1 HP/s. Or, equivalently, it is the square -root of the damage rate in HP/s that an unshielded player one node -away will take. - -Shielding is assessed by adding the shielding values of all nodes -between the source node and the player, ignoring the source node itself. -As in reality, shielding causes exponential attenuation of radiation. -However, the effect is scaled down relative to real life. A node with -radiation resistance value R yields attenuation of sqrt(R) * 0.1 nepers. -(In real life it would be about R * 0.69 nepers, by the definition -of the radiation resistance values.) The sqrt part of this formula -scales down the differences between shielding types, reflecting the -game's simplification of making expensive materials such as gold -readily available in cubes. The multiplicative factor in the -formula scales down the difference between shielded and unshielded -safe distances, avoiding the latter becoming impractically large. - -Damage is processed at rates down to 0.2 HP/s, which in the absence of -shielding is attained at the distance specified by the "radioactive" -group value. Computed damage rates below 0.2 HP/s result in no -damage at all to the player. This gives the player an opportunity -to be safe, and limits the range at which source/player interactions -need to be considered. ---]] -local abdomen_offset = 1 -local cache_scaled_shielding = {} -local rad_dmg_cutoff = 0.2 -local radiated_players = {} - -local armor_enabled = technic.config:get_bool("enable_radiation_protection") -local entity_damage = technic.config:get_bool("enable_entity_radiation_damage") -local longterm_damage = technic.config:get_bool("enable_longterm_radiation_damage") - -local function apply_fractional_damage(o, dmg) - local dmg_int = math.floor(dmg) - -- The closer you are to getting one more damage point, - -- the more likely it will be added. - if math.random() < dmg - dmg_int then - dmg_int = dmg_int + 1 - end - if dmg_int > 0 then - local new_hp = math.max(o:get_hp() - dmg_int, 0) - o:set_hp(new_hp) - return new_hp == 0 - end - return false -end - -local function calculate_default_damage(node_pos, object_pos, strength) - local shielding = 0 - local dist = vector.distance(node_pos, object_pos) - - for ray_pos in technic.trace_node_ray(node_pos, - vector.direction(node_pos, object_pos), dist) do - local shield_name = minetest.get_node(ray_pos).name - shielding = shielding + node_radiation_resistance(shield_name) * 0.025 - end - - local dmg = (strength * strength) / - (math.max(0.75, dist * dist) * math.exp(shielding)) - - if dmg < rad_dmg_cutoff then return end - return dmg -end - -local function calculate_damage_multiplier(object) - local ag = object.get_armor_groups and object:get_armor_groups() - if not ag then - return 0 - end - if ag.immortal then - return 0 - end - if ag.radiation then - return 0.01 * ag.radiation - end - if ag.fleshy then - return math.sqrt(0.01 * ag.fleshy) - end - return 0 -end - -local function calculate_object_center(object) - if object:is_player() then - return {x=0, y=abdomen_offset, z=0} - end - return {x=0, y=0, z=0} -end - -local function dmg_object(pos, object, strength) - local obj_pos = vector.add(object:getpos(), calculate_object_center(object)) - local mul - if armor_enabled or entity_damage then - -- we need to check may the object be damaged even if armor is disabled - mul = calculate_damage_multiplier(object) - if mul == 0 then - return - end - end - local dmg = calculate_default_damage(pos, obj_pos, strength) - if not dmg then - return - end - if armor_enabled then - dmg = dmg * mul - end - apply_fractional_damage(object, dmg) - if longterm_damage and object:is_player() then - local pn = object:get_player_name() - radiated_players[pn] = (radiated_players[pn] or 0) + dmg - end -end - -local rad_dmg_mult_sqrt = math.sqrt(1 / rad_dmg_cutoff) -local function dmg_abm(pos, node) - local strength = minetest.get_item_group(node.name, "radioactive") - local max_dist = strength * rad_dmg_mult_sqrt - for _, o in pairs(minetest.get_objects_inside_radius(pos, - max_dist + abdomen_offset)) do - if entity_damage or o:is_player() then - dmg_object(pos, o, strength) - end - end -end - -if minetest.settings:get_bool("enable_damage") then - minetest.register_abm({ - label = "Radiation damage", - nodenames = {"group:radioactive"}, - interval = 1, - chance = 1, - action = dmg_abm, - }) - - if longterm_damage then - minetest.register_globalstep(function(dtime) - for pn, dmg in pairs(radiated_players) do - dmg = dmg - (dtime / 8) - local player = minetest.get_player_by_name(pn) - local killed - if player and dmg > rad_dmg_cutoff then - killed = apply_fractional_damage(player, (dmg * dtime) / 8) - else - dmg = nil - end - -- on_dieplayer will have already set this if the player died - if not killed then - radiated_players[pn] = dmg - end - end - end) - - minetest.register_on_dieplayer(function(player) - radiated_players[player:get_player_name()] = nil - end) - end -end - --- Radioactive materials that can result from destroying a reactor -local griefing = technic.config:get_bool("enable_corium_griefing") - -for _, state in pairs({"flowing", "source"}) do - minetest.register_node("technic:corium_"..state, { - description = S(state == "source" and "Corium Source" or "Flowing Corium"), - drawtype = (state == "source" and "liquid" or "flowingliquid"), - tiles = {{ - name = "technic_corium_"..state.."_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0, - }, - }}, - special_tiles = { - { - name = "technic_corium_"..state.."_animated.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0, - }, - }, - { - name = "technic_corium_"..state.."_animated.png", - backface_culling = true, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0, - }, - }, - }, - paramtype = "light", - paramtype2 = (state == "flowing" and "flowingliquid" or nil), - light_source = (state == "source" and 8 or 5), - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 1, - liquidtype = state, - liquid_alternative_flowing = "technic:corium_flowing", - liquid_alternative_source = "technic:corium_source", - liquid_viscosity = LAVA_VISC, - liquid_renewable = false, - damage_per_second = 6, - post_effect_color = {a=192, r=80, g=160, b=80}, - groups = { - liquid = 2, - hot = 3, - igniter = (griefing and 1 or 0), - radioactive = (state == "source" and 12 or 6), - not_in_creative_inventory = (state == "flowing" and 1 or nil), - }, - }) -end - -if rawget(_G, "bucket") and bucket.register_liquid then - bucket.register_liquid( - "technic:corium_source", - "technic:corium_flowing", - "technic:bucket_corium", - "technic_bucket_corium.png", - "Corium Bucket" - ) -end - -minetest.register_node("technic:chernobylite_block", { - description = S("Chernobylite Block"), - tiles = {"technic_chernobylite_block.png"}, - is_ground_content = true, - groups = {cracky=1, radioactive=4, level=2}, - sounds = default.node_sound_stone_defaults(), - light_source = 2, -}) - -minetest.register_abm({ - label = "Corium: boil-off water (sources)", - nodenames = {"group:water"}, - neighbors = {"technic:corium_source"}, - interval = 1, - chance = 1, - action = function(pos, node) - minetest.remove_node(pos) - end, -}) - -minetest.register_abm({ - label = "Corium: boil-off water (flowing)", - nodenames = {"technic:corium_flowing"}, - neighbors = {"group:water"}, - interval = 1, - chance = 1, - action = function(pos, node) - minetest.set_node(pos, {name="technic:chernobylite_block"}) - end, -}) - -minetest.register_abm({ - label = "Corium: become chernobylite", - nodenames = {"technic:corium_flowing"}, - interval = 5, - chance = (griefing and 10 or 1), - action = function(pos, node) - minetest.set_node(pos, {name="technic:chernobylite_block"}) - end, -}) - -if griefing then - minetest.register_abm({ - label = "Corium: griefing", - nodenames = {"technic:corium_source", "technic:corium_flowing"}, - interval = 4, - chance = 4, - action = function(pos, node) - for _, offset in ipairs({ - vector.new(1,0,0), - vector.new(-1,0,0), - vector.new(0,0,1), - vector.new(0,0,-1), - vector.new(0,-1,0), - }) do - if math.random(8) == 1 then - minetest.dig_node(vector.add(pos, offset)) - end - end - end, - }) -end - diff --git a/mods/ITEMS/technic/technic/tools/chainsaw.lua b/mods/ITEMS/technic/technic/tools/chainsaw.lua deleted file mode 100755 index 7ce58ff..0000000 --- a/mods/ITEMS/technic/technic/tools/chainsaw.lua +++ /dev/null @@ -1,370 +0,0 @@ --- Configuration - -local chainsaw_max_charge = 30000 -- Maximum charge of the saw --- Gives 2500 nodes on a single charge (about 50 complete normal trees) -local chainsaw_charge_per_node = 12 --- Cut down tree leaves. Leaf decay may cause slowness on large trees --- if this is disabled. -local chainsaw_leaves = true - --- The base trees -local timber_nodenames = { - ["default:acacia_tree"] = true, - ["default:aspen_tree"] = true, - ["default:jungletree"] = true, - ["default:papyrus"] = true, - ["default:cactus"] = true, - ["default:tree"] = true, - ["default:apple"] = true, - ["default:pine_tree"] = true, -} - -if chainsaw_leaves then - timber_nodenames["default:acacia_leaves"] = true - timber_nodenames["default:aspen_leaves"] = true - timber_nodenames["default:leaves"] = true - timber_nodenames["default:jungleleaves"] = true - timber_nodenames["default:pine_needles"] = true -end - --- technic_worldgen defines rubber trees if moretrees isn't installed -if minetest.get_modpath("technic_worldgen") or - minetest.get_modpath("moretrees") then - timber_nodenames["moretrees:rubber_tree_trunk_empty"] = true - timber_nodenames["moretrees:rubber_tree_trunk"] = true - if chainsaw_leaves then - timber_nodenames["moretrees:rubber_tree_leaves"] = true - end -end - --- Support moretrees if it is there -if minetest.get_modpath("moretrees") then - timber_nodenames["moretrees:acacia_trunk"] = true - timber_nodenames["moretrees:apple_tree_trunk"] = true - timber_nodenames["moretrees:beech_trunk"] = true - timber_nodenames["moretrees:birch_trunk"] = true - timber_nodenames["moretrees:fir_trunk"] = true - timber_nodenames["moretrees:oak_trunk"] = true - timber_nodenames["moretrees:palm_trunk"] = true - timber_nodenames["moretrees:pine_trunk"] = true - timber_nodenames["moretrees:sequoia_trunk"] = true - timber_nodenames["moretrees:spruce_trunk"] = true - timber_nodenames["moretrees:willow_trunk"] = true - timber_nodenames["moretrees:jungletree_trunk"] = true - - if chainsaw_leaves then - timber_nodenames["moretrees:acacia_leaves"] = true - timber_nodenames["moretrees:apple_tree_leaves"] = true - timber_nodenames["moretrees:oak_leaves"] = true - timber_nodenames["moretrees:fir_leaves"] = true - timber_nodenames["moretrees:fir_leaves_bright"] = true - timber_nodenames["moretrees:sequoia_leaves"] = true - timber_nodenames["moretrees:birch_leaves"] = true - timber_nodenames["moretrees:birch_leaves"] = true - timber_nodenames["moretrees:palm_leaves"] = true - timber_nodenames["moretrees:spruce_leaves"] = true - timber_nodenames["moretrees:spruce_leaves"] = true - timber_nodenames["moretrees:pine_leaves"] = true - timber_nodenames["moretrees:willow_leaves"] = true - timber_nodenames["moretrees:jungletree_leaves_green"] = true - timber_nodenames["moretrees:jungletree_leaves_yellow"] = true - timber_nodenames["moretrees:jungletree_leaves_red"] = true - timber_nodenames["moretrees:acorn"] = true - timber_nodenames["moretrees:coconut"] = true - timber_nodenames["moretrees:spruce_cone"] = true - timber_nodenames["moretrees:pine_cone"] = true - timber_nodenames["moretrees:fir_cone"] = true - timber_nodenames["moretrees:apple_blossoms"] = true - end -end - --- Support growing_trees -if minetest.get_modpath("growing_trees") then - timber_nodenames["growing_trees:trunk"] = true - timber_nodenames["growing_trees:medium_trunk"] = true - timber_nodenames["growing_trees:big_trunk"] = true - timber_nodenames["growing_trees:trunk_top"] = true - timber_nodenames["growing_trees:trunk_sprout"] = true - timber_nodenames["growing_trees:branch_sprout"] = true - timber_nodenames["growing_trees:branch"] = true - timber_nodenames["growing_trees:branch_xmzm"] = true - timber_nodenames["growing_trees:branch_xpzm"] = true - timber_nodenames["growing_trees:branch_xmzp"] = true - timber_nodenames["growing_trees:branch_xpzp"] = true - timber_nodenames["growing_trees:branch_zz"] = true - timber_nodenames["growing_trees:branch_xx"] = true - - if chainsaw_leaves then - timber_nodenames["growing_trees:leaves"] = true - end -end - --- Support growing_cactus -if minetest.get_modpath("growing_cactus") then - timber_nodenames["growing_cactus:sprout"] = true - timber_nodenames["growing_cactus:branch_sprout_vertical"] = true - timber_nodenames["growing_cactus:branch_sprout_vertical_fixed"] = true - timber_nodenames["growing_cactus:branch_sprout_xp"] = true - timber_nodenames["growing_cactus:branch_sprout_xm"] = true - timber_nodenames["growing_cactus:branch_sprout_zp"] = true - timber_nodenames["growing_cactus:branch_sprout_zm"] = true - timber_nodenames["growing_cactus:trunk"] = true - timber_nodenames["growing_cactus:branch_trunk"] = true - timber_nodenames["growing_cactus:branch"] = true - timber_nodenames["growing_cactus:branch_xp"] = true - timber_nodenames["growing_cactus:branch_xm"] = true - timber_nodenames["growing_cactus:branch_zp"] = true - timber_nodenames["growing_cactus:branch_zm"] = true - timber_nodenames["growing_cactus:branch_zz"] = true - timber_nodenames["growing_cactus:branch_xx"] = true -end - --- Support farming_plus -if minetest.get_modpath("farming_plus") then - if chainsaw_leaves then - timber_nodenames["farming_plus:banana_leaves"] = true - timber_nodenames["farming_plus:banana"] = true - timber_nodenames["farming_plus:cocoa_leaves"] = true - timber_nodenames["farming_plus:cocoa"] = true - end -end - --- Support nature -if minetest.get_modpath("nature") then - if chainsaw_leaves then - timber_nodenames["nature:blossom"] = true - end -end - --- Support snow -if minetest.get_modpath("snow") then - if chainsaw_leaves then - timber_nodenames["snow:needles"] = true - timber_nodenames["snow:needles_decorated"] = true - timber_nodenames["snow:star"] = true - end -end - --- Support vines (also generated by moretrees if available) -if minetest.get_modpath("vines") then - if chainsaw_leaves then - timber_nodenames["vines:vines"] = true - end -end - -if minetest.get_modpath("trunks") then - if chainsaw_leaves then - timber_nodenames["trunks:moss"] = true - timber_nodenames["trunks:moss_fungus"] = true - timber_nodenames["trunks:treeroot"] = true - end -end - -local S = technic.getter - -technic.register_power_tool("technic:chainsaw", chainsaw_max_charge) - --- Table for saving what was sawed down -local produced = {} - --- Save the items sawed down so that we can drop them in a nice single stack -local function handle_drops(drops) - for _, item in ipairs(drops) do - local stack = ItemStack(item) - local name = stack:get_name() - local p = produced[name] - if not p then - produced[name] = stack - else - p:set_count(p:get_count() + stack:get_count()) - end - end -end - ---- Iterator over positions to try to saw around a sawed node. --- This returns positions in a 3x1x3 area around the position, plus the --- position above it. This does not return the bottom position to prevent --- the chainsaw from cutting down nodes below the cutting position. --- @param pos Sawing position. -local function iterSawTries(pos) - -- Copy position to prevent mangling it - local pos = vector.new(pos) - local i = 0 - - return function() - i = i + 1 - -- Given a (top view) area like so (where 5 is the starting position): - -- X --> - -- Z 123 - -- | 456 - -- V 789 - -- This will return positions 1, 4, 7, 2, 8 (skip 5), 3, 6, 9, - -- and the position above 5. - if i == 1 then - -- Move to starting position - pos.x = pos.x - 1 - pos.z = pos.z - 1 - elseif i == 4 or i == 7 then - -- Move to next X and back to start of Z when we reach - -- the end of a Z line. - pos.x = pos.x + 1 - pos.z = pos.z - 2 - elseif i == 5 then - -- Skip the middle position (we've already run on it) - -- and double-increment the counter. - pos.z = pos.z + 2 - i = i + 1 - elseif i <= 9 then - -- Go to next Z. - pos.z = pos.z + 1 - elseif i == 10 then - -- Move back to center and up. - -- The Y+ position must be last so that we don't dig - -- straight upward and not come down (since the Y- - -- position isn't checked). - pos.x = pos.x - 1 - pos.z = pos.z - 1 - pos.y = pos.y + 1 - else - return nil - end - return pos - end -end - --- This function does all the hard work. Recursively we dig the node at hand --- if it is in the table and then search the surroundings for more stuff to dig. -local function recursive_dig(pos, remaining_charge) - if remaining_charge < chainsaw_charge_per_node then - return remaining_charge - end - local node = minetest.get_node(pos) - - if not timber_nodenames[node.name] then - return remaining_charge - end - - -- Wood found - cut it - handle_drops(minetest.get_node_drops(node.name, "")) - minetest.remove_node(pos) - remaining_charge = remaining_charge - chainsaw_charge_per_node - - -- Check surroundings and run recursively if any charge left - for npos in iterSawTries(pos) do - if remaining_charge < chainsaw_charge_per_node then - break - end - if timber_nodenames[minetest.get_node(npos).name] then - remaining_charge = recursive_dig(npos, remaining_charge) - end - end - return remaining_charge -end - --- Function to randomize positions for new node drops -local function get_drop_pos(pos) - local drop_pos = {} - - for i = 0, 8 do - -- Randomize position for a new drop - drop_pos.x = pos.x + math.random(-3, 3) - drop_pos.y = pos.y - 1 - drop_pos.z = pos.z + math.random(-3, 3) - - -- Move the randomized position upwards until - -- the node is air or unloaded. - for y = drop_pos.y, drop_pos.y + 5 do - drop_pos.y = y - local node = minetest.get_node_or_nil(drop_pos) - - if not node then - -- If the node is not loaded yet simply drop - -- the item at the original digging position. - return pos - elseif node.name == "air" then - -- Add variation to the entity drop position, - -- but don't let drops get too close to the edge - drop_pos.x = drop_pos.x + (math.random() * 0.8) - 0.5 - drop_pos.z = drop_pos.z + (math.random() * 0.8) - 0.5 - return drop_pos - end - end - end - - -- Return the original position if this takes too long - return pos -end - --- Chainsaw entry point -local function chainsaw_dig(pos, current_charge) - -- Start sawing things down - local remaining_charge = recursive_dig(pos, current_charge) - minetest.sound_play("chainsaw", {pos = pos, gain = 1.0, - max_hear_distance = 10}) - - -- Now drop items for the player - for name, stack in pairs(produced) do - -- Drop stacks of stack max or less - local count, max = stack:get_count(), stack:get_stack_max() - stack:set_count(max) - while count > max do - minetest.add_item(get_drop_pos(pos), stack) - count = count - max - end - stack:set_count(count) - minetest.add_item(get_drop_pos(pos), stack) - end - - -- Clean up - produced = {} - - return remaining_charge -end - - -minetest.register_tool("technic:chainsaw", { - description = S("Chainsaw"), - inventory_image = "technic_chainsaw.png", - stack_max = 1, - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - on_use = function(itemstack, user, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - local meta = minetest.deserialize(itemstack:get_metadata()) - if not meta or not meta.charge or - meta.charge < chainsaw_charge_per_node then - return - end - - local name = user:get_player_name() - if minetest.is_protected(pointed_thing.under, name) then - minetest.record_protection_violation(pointed_thing.under, name) - return - end - - -- Send current charge to digging function so that the - -- chainsaw will stop after digging a number of nodes - meta.charge = chainsaw_dig(pointed_thing.under, meta.charge) - if not technic.creative_mode then - technic.set_RE_wear(itemstack, meta.charge, chainsaw_max_charge) - itemstack:set_metadata(minetest.serialize(meta)) - end - return itemstack - end, -}) - -local mesecons_button = minetest.get_modpath("mesecons_button") -local trigger = mesecons_button and "mesecons_button:button_off" or "default:mese_crystal_fragment" - -minetest.register_craft({ - output = "technic:chainsaw", - recipe = { - {"technic:stainless_steel_ingot", trigger, "technic:battery"}, - {"technic:fine_copper_wire", "technic:motor", "technic:battery"}, - {"", "", "technic:stainless_steel_ingot"}, - } -}) - diff --git a/mods/ITEMS/technic/technic/tools/flashlight.lua b/mods/ITEMS/technic/technic/tools/flashlight.lua deleted file mode 100755 index 3211269..0000000 --- a/mods/ITEMS/technic/technic/tools/flashlight.lua +++ /dev/null @@ -1,123 +0,0 @@ --- Original code comes from walkin_light mod by Echo --- http://minetest.net/forum/viewtopic.php?id=2621 - -local flashlight_max_charge = 30000 - -local S = technic.getter - -technic.register_power_tool("technic:flashlight", flashlight_max_charge) - -minetest.register_alias("technic:light_off", "air") - -minetest.register_tool("technic:flashlight", { - description = S("Flashlight"), - inventory_image = "technic_flashlight.png", - stack_max = 1, - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, -}) - -minetest.register_craft({ - output = "technic:flashlight", - recipe = { - {"technic:rubber", "default:glass", "technic:rubber"}, - {"technic:stainless_steel_ingot", "technic:battery", "technic:stainless_steel_ingot"}, - {"", "technic:battery", ""} - } -}) - - -local player_positions = {} -local was_wielding = {} - -local function check_for_flashlight(player) - if player == nil then - return false - end - local inv = player:get_inventory() - local hotbar = inv:get_list("main") - for i = 1, 8 do - if hotbar[i]:get_name() == "technic:flashlight" then - local meta = minetest.deserialize(hotbar[i]:get_metadata()) - if meta and meta.charge and meta.charge >= 2 then - if not technic.creative_mode then - meta.charge = meta.charge - 2; - technic.set_RE_wear(hotbar[i], meta.charge, flashlight_max_charge) - hotbar[i]:set_metadata(minetest.serialize(meta)) - inv:set_stack("main", i, hotbar[i]) - end - return true - end - end - end - return false -end - -minetest.register_on_joinplayer(function(player) - local player_name = player:get_player_name() - local pos = player:getpos() - local rounded_pos = vector.round(pos) - rounded_pos.y = rounded_pos.y + 1 - player_positions[player_name] = rounded_pos - was_wielding[player_name] = true -end) - - -minetest.register_on_leaveplayer(function(player) - local player_name = player:get_player_name() - local pos = player_positions[player_name] - local nodename = minetest.get_node(pos).name - if nodename == "technic:light" then - minetest.remove_node(pos) - end - player_positions[player_name] = nil -end) - -minetest.register_globalstep(function(dtime) - for i, player in pairs(minetest.get_connected_players()) do - local player_name = player:get_player_name() - local flashlight_weared = check_for_flashlight(player) - local pos = player:getpos() - local rounded_pos = vector.round(pos) - rounded_pos.y = rounded_pos.y + 1 - local old_pos = player_positions[player_name] - local player_moved = old_pos and not vector.equals(old_pos, rounded_pos) - if not old_pos then - old_pos = rounded_pos - player_moved = true - end - - -- Remove light, flashlight weared out or was removed from hotbar - if was_wielding[player_name] and not flashlight_weared then - was_wielding[player_name] = false - local node = minetest.get_node_or_nil(old_pos) - if node and node.name == "technic:light" then - minetest.remove_node(old_pos) - end - elseif (player_moved or not was_wielding[player_name]) and flashlight_weared then - local node = minetest.get_node_or_nil(rounded_pos) - if node and node.name == "air" then - minetest.set_node(rounded_pos, {name="technic:light"}) - end - local node = minetest.get_node_or_nil(old_pos) - if node and node.name == "technic:light" then - minetest.remove_node(old_pos) - end - player_positions[player_name] = rounded_pos - was_wielding[player_name] = true - end - end -end) - -minetest.register_node("technic:light", { - drawtype = "glasslike", - tiles = {"technic_light.png"}, - paramtype = "light", - groups = {not_in_creative_inventory=1}, - drop = "", - walkable = false, - buildable_to = true, - sunlight_propagates = true, - light_source = default.LIGHT_MAX, - pointable = false, -}) diff --git a/mods/ITEMS/technic/technic/tools/mining_drill.lua b/mods/ITEMS/technic/technic/tools/mining_drill.lua deleted file mode 100755 index ad6c8bb..0000000 --- a/mods/ITEMS/technic/technic/tools/mining_drill.lua +++ /dev/null @@ -1,419 +0,0 @@ -local max_charge = {50000, 200000, 650000} -local power_usage_per_node = {200, 500, 800} - -local S = technic.getter - -minetest.register_craft({ - output = 'technic:mining_drill', - recipe = { - {'moreores:tin_ingot', 'technic:diamond_drill_head', 'moreores:tin_ingot'}, - {'technic:stainless_steel_ingot', 'technic:motor', 'technic:stainless_steel_ingot'}, - {'', 'technic:red_energy_crystal', 'default:copper_ingot'}, - } -}) -minetest.register_craft({ - output = 'technic:mining_drill_mk2', - recipe = { - {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'}, - {'technic:stainless_steel_ingot', 'technic:mining_drill', 'technic:stainless_steel_ingot'}, - {'', 'technic:green_energy_crystal', ''}, - } -}) -minetest.register_craft({ - output = 'technic:mining_drill_mk3', - recipe = { - {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'}, - {'technic:stainless_steel_ingot', 'technic:mining_drill_mk2', 'technic:stainless_steel_ingot'}, - {'', 'technic:blue_energy_crystal', ''}, - } -}) -for i = 1, 4 do - minetest.register_craft({ - output = 'technic:mining_drill_mk3', - recipe = { - {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'}, - {'technic:stainless_steel_ingot', 'technic:mining_drill_mk2_'..i, 'technic:stainless_steel_ingot'}, - {'', 'technic:blue_energy_crystal', ''}, - } - }) -end - -local mining_drill_mode_text = { - {S("Single node.")}, - {S("3 nodes deep.")}, - {S("3 nodes wide.")}, - {S("3 nodes tall.")}, - {S("3x3 nodes.")}, -} - -local function drill_dig_it0 (pos,player) - if minetest.is_protected(pos, player:get_player_name()) then - minetest.record_protection_violation(pos, player:get_player_name()) - return - end - local node=minetest.get_node(pos) - if node.name == "air" or node.name == "ignore" then return end - if node.name == "default:lava_source" then return end - if node.name == "default:lava_flowing" then return end - if node.name == "default:water_source" then minetest.remove_node(pos) return end - if node.name == "default:water_flowing" then minetest.remove_node(pos) return end - minetest.node_dig(pos,node,player) -end - -local function drill_dig_it1 (player) - local dir=player:get_look_dir() - if math.abs(dir.x)>math.abs(dir.z) then - if dir.x>0 then return 0 end - return 1 - end - if dir.z>0 then return 2 end - return 3 -end - -local function drill_dig_it2 (pos,player) - pos.y=pos.y+1 - drill_dig_it0 (pos,player) - pos.z=pos.z+1 - drill_dig_it0 (pos,player) - pos.z=pos.z-2 - drill_dig_it0 (pos,player) - pos.z=pos.z+1 - pos.y=pos.y-1 - drill_dig_it0 (pos,player) - pos.z=pos.z+1 - drill_dig_it0 (pos,player) - pos.z=pos.z-2 - drill_dig_it0 (pos,player) - pos.z=pos.z+1 - pos.y=pos.y-1 - drill_dig_it0 (pos,player) - pos.z=pos.z+1 - drill_dig_it0 (pos,player) - pos.z=pos.z-2 - drill_dig_it0 (pos,player) -end - -local function drill_dig_it3 (pos,player) - pos.y=pos.y+1 - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - drill_dig_it0 (pos,player) - pos.x=pos.x-2 - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - pos.y=pos.y-1 - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - drill_dig_it0 (pos,player) - pos.x=pos.x-2 - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - pos.y=pos.y-1 - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - drill_dig_it0 (pos,player) - pos.x=pos.x-2 - drill_dig_it0 (pos,player) -end - -local function drill_dig_it4 (pos,player) - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - drill_dig_it0 (pos,player) - pos.x=pos.x-2 - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - pos.z=pos.z+1 - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - drill_dig_it0 (pos,player) - pos.x=pos.x-2 - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - pos.z=pos.z-2 - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - drill_dig_it0 (pos,player) - pos.x=pos.x-2 - drill_dig_it0 (pos,player) -end - -local function cost_to_use(drill_type, mode) - local mult - if mode == 1 then - mult = 1 - elseif mode <= 4 then - mult = 3 - else - mult = 9 - end - return power_usage_per_node[drill_type] * mult -end - -local function drill_dig_it(pos, player, mode) - if mode == 1 then - drill_dig_it0(pos, player) - end - - if mode == 2 then -- 3 deep - dir = drill_dig_it1(player) - if dir == 0 then -- x+ - drill_dig_it0(pos, player) - pos.x = pos.x + 1 - drill_dig_it0(pos, player) - pos.x = pos.x + 1 - drill_dig_it0(pos, player) - end - if dir == 1 then -- x- - drill_dig_it0(pos, player) - pos.x=pos.x-1 - drill_dig_it0 (pos,player) - pos.x=pos.x-1 - drill_dig_it0 (pos,player) - end - if dir==2 then -- z+ - drill_dig_it0 (pos,player) - pos.z=pos.z+1 - drill_dig_it0 (pos,player) - pos.z=pos.z+1 - drill_dig_it0 (pos,player) - end - if dir==3 then -- z- - drill_dig_it0 (pos,player) - pos.z=pos.z-1 - drill_dig_it0 (pos,player) - pos.z=pos.z-1 - drill_dig_it0 (pos,player) - end - end - - if mode==3 then -- 3 wide - dir=drill_dig_it1(player) - if dir==0 or dir==1 then -- x - drill_dig_it0 (pos,player) - pos.z=pos.z+1 - drill_dig_it0 (pos,player) - pos.z=pos.z-2 - drill_dig_it0 (pos,player) - end - if dir==2 or dir==3 then -- z - drill_dig_it0 (pos,player) - pos.x=pos.x+1 - drill_dig_it0 (pos,player) - pos.x=pos.x-2 - drill_dig_it0 (pos,player) - end - end - - if mode==4 then -- 3 tall, selected in the middle - drill_dig_it0 (pos,player) - pos.y=pos.y-1 - drill_dig_it0 (pos,player) - pos.y=pos.y-1 - drill_dig_it0 (pos,player) - end - - if mode==5 then -- 3 x 3 - local dir=player:get_look_dir() - if math.abs(dir.y)<0.5 then - dir=drill_dig_it1(player) - if dir==0 or dir==1 then -- x - drill_dig_it2(pos,player) - end - if dir==2 or dir==3 then -- z - drill_dig_it3(pos,player) - end - else - drill_dig_it4(pos,player) - end - end - - minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,}) -end - -local function pos_is_pointable(pos) - local node = minetest.get_node(pos) - local nodedef = minetest.registered_nodes[node.name] - return nodedef and nodedef.pointable -end - -local function mining_drill_mk2_setmode(user,itemstack) - local player_name=user:get_player_name() - local item=itemstack:to_table() - local meta=minetest.deserialize(item["metadata"]) - if meta==nil then - meta={} - mode=0 - end - if meta["mode"]==nil then - minetest.chat_send_player(player_name, S("Use while sneaking to change Mining Drill Mk%d modes."):format(2)) - meta["mode"]=0 - mode=0 - end - mode=(meta["mode"]) - mode=mode+1 - if mode>=5 then mode=1 end - minetest.chat_send_player(player_name, S("Mining Drill Mk%d Mode %d"):format(2, mode)..": "..mining_drill_mode_text[mode][1]) - itemstack:set_name("technic:mining_drill_mk2_"..mode); - meta["mode"]=mode - itemstack:set_metadata(minetest.serialize(meta)) - return itemstack -end - -local function mining_drill_mk3_setmode(user,itemstack) - local player_name=user:get_player_name() - local item=itemstack:to_table() - local meta=minetest.deserialize(item["metadata"]) - if meta==nil then - meta={} - mode=0 - end - if meta["mode"]==nil then - minetest.chat_send_player(player_name, S("Use while sneaking to change Mining Drill Mk%d modes."):format(3)) - meta["mode"]=0 - mode=0 - end - mode=(meta["mode"]) - mode=mode+1 - if mode>=6 then mode=1 end - minetest.chat_send_player(player_name, S("Mining Drill Mk%d Mode %d"):format(3, mode)..": "..mining_drill_mode_text[mode][1]) - itemstack:set_name("technic:mining_drill_mk3_"..mode); - meta["mode"]=mode - itemstack:set_metadata(minetest.serialize(meta)) - return itemstack -end - - -local function mining_drill_mk2_handler(itemstack, user, pointed_thing) - local keys = user:get_player_control() - local player_name = user:get_player_name() - local meta = minetest.deserialize(itemstack:get_metadata()) - if not meta or not meta.mode or keys.sneak then - return mining_drill_mk2_setmode(user, itemstack) - end - if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) or not meta.charge then - return - end - local charge_to_take = cost_to_use(2, meta.mode) - if meta.charge >= charge_to_take then - local pos = minetest.get_pointed_thing_position(pointed_thing, false) - drill_dig_it(pos, user, meta.mode) - if not technic.creative_mode then - meta.charge = meta.charge - charge_to_take - itemstack:set_metadata(minetest.serialize(meta)) - technic.set_RE_wear(itemstack, meta.charge, max_charge[2]) - end - end - return itemstack -end - -local function mining_drill_mk3_handler(itemstack, user, pointed_thing) - local keys = user:get_player_control() - local player_name = user:get_player_name() - local meta = minetest.deserialize(itemstack:get_metadata()) - if not meta or not meta.mode or keys.sneak then - return mining_drill_mk3_setmode(user, itemstack) - end - if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) or not meta.charge then - return - end - local charge_to_take = cost_to_use(3, meta.mode) - if meta.charge >= charge_to_take then - local pos = minetest.get_pointed_thing_position(pointed_thing, false) - drill_dig_it(pos, user, meta.mode) - if not technic.creative_mode then - meta.charge = meta.charge - charge_to_take - itemstack:set_metadata(minetest.serialize(meta)) - technic.set_RE_wear(itemstack, meta.charge, max_charge[3]) - end - end - return itemstack -end - -technic.register_power_tool("technic:mining_drill", max_charge[1]) - -minetest.register_tool("technic:mining_drill", { - description = S("Mining Drill Mk%d"):format(1), - inventory_image = "technic_mining_drill.png", - stack_max = 1, - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - on_use = function(itemstack, user, pointed_thing) - if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) then - return itemstack - end - local meta = minetest.deserialize(itemstack:get_metadata()) - if not meta or not meta.charge then - return - end - local charge_to_take = cost_to_use(1, 1) - if meta.charge >= charge_to_take then - local pos = minetest.get_pointed_thing_position(pointed_thing, false) - drill_dig_it(pos, user, 1) - if not technic.creative_mode then - meta.charge = meta.charge - charge_to_take - itemstack:set_metadata(minetest.serialize(meta)) - technic.set_RE_wear(itemstack, meta.charge, max_charge[1]) - end - end - return itemstack - end, -}) - -minetest.register_tool("technic:mining_drill_mk2", { - description = S("Mining Drill Mk%d"):format(2), - inventory_image = "technic_mining_drill_mk2.png", - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - on_use = function(itemstack, user, pointed_thing) - mining_drill_mk2_handler(itemstack, user, pointed_thing) - return itemstack - end, -}) - -technic.register_power_tool("technic:mining_drill_mk2", max_charge[2]) - -for i = 1, 4 do - technic.register_power_tool("technic:mining_drill_mk2_"..i, max_charge[2]) - minetest.register_tool("technic:mining_drill_mk2_"..i, { - description = S("Mining Drill Mk%d Mode %d"):format(2, i), - inventory_image = "technic_mining_drill_mk2.png^technic_tool_mode"..i..".png", - wield_image = "technic_mining_drill_mk2.png", - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - mining_drill_mk2_handler(itemstack, user, pointed_thing) - return itemstack - end, - }) -end - -minetest.register_tool("technic:mining_drill_mk3", { - description = S("Mining Drill Mk%d"):format(3), - inventory_image = "technic_mining_drill_mk3.png", - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - on_use = function(itemstack, user, pointed_thing) - mining_drill_mk3_handler(itemstack,user,pointed_thing) - return itemstack - end, -}) - -technic.register_power_tool("technic:mining_drill_mk3", max_charge[3]) - -for i=1,5,1 do - technic.register_power_tool("technic:mining_drill_mk3_"..i, max_charge[3]) - minetest.register_tool("technic:mining_drill_mk3_"..i, { - description = S("Mining Drill Mk%d Mode %d"):format(3, i), - inventory_image = "technic_mining_drill_mk3.png^technic_tool_mode"..i..".png", - wield_image = "technic_mining_drill_mk3.png", - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - mining_drill_mk3_handler(itemstack,user,pointed_thing) - return itemstack - end, - }) -end diff --git a/mods/ITEMS/technic/technic/tools/prospector.lua b/mods/ITEMS/technic/technic/tools/prospector.lua deleted file mode 100755 index 20c9449..0000000 --- a/mods/ITEMS/technic/technic/tools/prospector.lua +++ /dev/null @@ -1,128 +0,0 @@ -local S = technic.getter - -technic.register_power_tool("technic:prospector", 300000) - -local function get_metadata(toolstack) - local m = minetest.deserialize(toolstack:get_metadata()) - if not m then m = {} end - if not m.charge then m.charge = 0 end - if not m.target then m.target = "" end - if not m.look_depth then m.look_depth = 7 end - if not m.look_radius then m.look_radius = 1 end - return m -end - -minetest.register_tool("technic:prospector", { - description = S("Prospector"), - inventory_image = "technic_prospector.png", - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - on_use = function(toolstack, user, pointed_thing) - if not user or not user:is_player() or user.is_fake_player then return end - if pointed_thing.type ~= "node" then return end - local toolmeta = get_metadata(toolstack) - local look_diameter = toolmeta.look_radius * 2 + 1 - local charge_to_take = toolmeta.look_depth * (toolmeta.look_depth + 1) * look_diameter * look_diameter - if toolmeta.charge < charge_to_take then return end - if toolmeta.target == "" then - minetest.chat_send_player(user:get_player_name(), "Right-click to set target block type") - return - end - if not technic.creative_mode then - toolmeta.charge = toolmeta.charge - charge_to_take - toolstack:set_metadata(minetest.serialize(toolmeta)) - technic.set_RE_wear(toolstack, toolmeta.charge, technic.power_tools[toolstack:get_name()]) - end - local start_pos = pointed_thing.under - local forward = minetest.facedir_to_dir(minetest.dir_to_facedir(user:get_look_dir(), true)) - local right = forward.x ~= 0 and { x=0, y=1, z=0 } or (forward.y ~= 0 and { x=0, y=0, z=1 } or { x=1, y=0, z=0 }) - local up = forward.x ~= 0 and { x=0, y=0, z=1 } or (forward.y ~= 0 and { x=1, y=0, z=0 } or { x=0, y=1, z=0 }) - local base_pos = vector.add(start_pos, vector.multiply(vector.add(right, up), - toolmeta.look_radius)) - local found = false - for f = 0, toolmeta.look_depth-1 do - for r = 0, look_diameter-1 do - for u = 0, look_diameter-1 do - if minetest.get_node(vector.add(vector.add(vector.add(base_pos, vector.multiply(forward, f)), vector.multiply(right, r)), vector.multiply(up, u))).name == toolmeta.target then found = true end - end - end - end - if math.random() < 0.02 then found = not found end - minetest.chat_send_player(user:get_player_name(), minetest.registered_nodes[toolmeta.target].description.." is "..(found and "present" or "absent").." in "..look_diameter.."x"..look_diameter.."x"..toolmeta.look_depth.." region") - minetest.sound_play("technic_prospector_"..(found and "hit" or "miss"), { pos = vector.add(user:getpos(), { x = 0, y = 1, z = 0 }), gain = 1.0, max_hear_distance = 10 }) - return toolstack - end, - on_place = function(toolstack, user, pointed_thing) - if not user or not user:is_player() or user.is_fake_player then return end - local toolmeta = get_metadata(toolstack) - local pointed - if pointed_thing.type == "node" then - local pname = minetest.get_node(pointed_thing.under).name - local pdef = minetest.registered_nodes[pname] - if pdef and (pdef.groups.not_in_creative_inventory or 0) == 0 and pname ~= toolmeta.target then - pointed = pname - end - end - local look_diameter = toolmeta.look_radius * 2 + 1 - minetest.show_formspec(user:get_player_name(), "technic:prospector_control", - "size[7,8.5]".. - "item_image[0,0;1,1;"..toolstack:get_name().."]".. - "label[1,0;"..minetest.formspec_escape(toolstack:get_definition().description).."]".. - (toolmeta.target ~= "" and - "label[0,1.5;Current target:]".. - "label[0,2;"..minetest.formspec_escape(minetest.registered_nodes[toolmeta.target].description).."]".. - "item_image[0,2.5;1,1;"..toolmeta.target.."]" or - "label[0,1.5;No target set]").. - (pointed and - "label[3.5,1.5;May set new target:]".. - "label[3.5,2;"..minetest.formspec_escape(minetest.registered_nodes[pointed].description).."]".. - "item_image[3.5,2.5;1,1;"..pointed.."]".. - "button_exit[3.5,3.65;2,0.5;target_"..pointed..";Set target]" or - "label[3.5,1.5;No new target available]").. - "label[0,4.5;Region cross section:]".. - "label[0,5;"..look_diameter.."x"..look_diameter.."]".. - "label[3.5,4.5;Set region cross section:]".. - "button_exit[3.5,5.15;1,0.5;look_radius_0;1x1]".. - "button_exit[4.5,5.15;1,0.5;look_radius_1;3x3]".. - "button_exit[5.5,5.15;1,0.5;look_radius_3;7x7]".. - "label[0,6;Region depth:]".. - "label[0,6.5;"..toolmeta.look_depth.."]".. - "label[3.5,6;Set region depth:]".. - "button_exit[3.5,6.65;1,0.5;look_depth_7;7]".. - "button_exit[4.5,6.65;1,0.5;look_depth_14;14]".. - "button_exit[5.5,6.65;1,0.5;look_depth_21;21]".. - "label[0,7.5;Accuracy:]".. - "label[0,8;98%]") - return - end, -}) - -minetest.register_on_player_receive_fields(function(user, formname, fields) - if formname ~= "technic:prospector_control" then return false end - if not user or not user:is_player() or user.is_fake_player then return end - local toolstack = user:get_wielded_item() - if toolstack:get_name() ~= "technic:prospector" then return true end - local toolmeta = get_metadata(toolstack) - for field, value in pairs(fields) do - if field:sub(1, 7) == "target_" then - toolmeta.target = field:sub(8) - end - if field:sub(1, 12) == "look_radius_" then - toolmeta.look_radius = field:sub(13) - end - if field:sub(1, 11) == "look_depth_" then - toolmeta.look_depth = field:sub(12) - end - end - toolstack:set_metadata(minetest.serialize(toolmeta)) - user:set_wielded_item(toolstack) - return true -end) - -minetest.register_craft({ - output = "technic:prospector", - recipe = { - {"moreores:pick_silver", "moreores:mithril_block", "pipeworks:teleport_tube_1"}, - {"technic:brass_ingot", "technic:control_logic_unit", "technic:brass_ingot"}, - {"", "technic:blue_energy_crystal", ""}, - } -}) diff --git a/mods/ITEMS/technic/technic/tools/sonic_screwdriver.lua b/mods/ITEMS/technic/technic/tools/sonic_screwdriver.lua deleted file mode 100755 index 536f47c..0000000 --- a/mods/ITEMS/technic/technic/tools/sonic_screwdriver.lua +++ /dev/null @@ -1,98 +0,0 @@ -local sonic_screwdriver_max_charge = 15000 - -local S = technic.getter - -technic.register_power_tool("technic:sonic_screwdriver", sonic_screwdriver_max_charge) - --- screwdriver handler code reused from minetest/minetest_game screwdriver @a9ac480 -local ROTATE_FACE = 1 -local ROTATE_AXIS = 2 - -local function nextrange(x, max) - x = x + 1 - if x > max then - x = 0 - end - return x -end - --- Handles rotation -local function screwdriver_handler(itemstack, user, pointed_thing, mode) - if pointed_thing.type ~= "node" then - return - end - - local pos = pointed_thing.under - - if minetest.is_protected(pos, user:get_player_name()) then - minetest.record_protection_violation(pos, user:get_player_name()) - return - end - - local node = minetest.get_node(pos) - local ndef = minetest.registered_nodes[node.name] - if not ndef or not ndef.paramtype2 == "facedir" or - (ndef.drawtype == "nodebox" and - not ndef.node_box.type == "fixed") or - node.param2 == nil then - return - end - - -- contrary to the default screwdriver, do not check for can_dig, to allow rotating machines with CLU's in them - -- this is consistent with the previous sonic screwdriver - - local meta1 = minetest.deserialize(itemstack:get_metadata()) - if not meta1 or not meta1.charge or meta1.charge < 100 then - return - end - - minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.3, max_hear_distance = 10}) - - -- Set param2 - local rotationPart = node.param2 % 32 -- get first 4 bits - local preservePart = node.param2 - rotationPart - - local axisdir = math.floor(rotationPart / 4) - local rotation = rotationPart - axisdir * 4 - if mode == ROTATE_FACE then - rotationPart = axisdir * 4 + nextrange(rotation, 3) - elseif mode == ROTATE_AXIS then - rotationPart = nextrange(axisdir, 5) * 4 - end - - node.param2 = preservePart + rotationPart - minetest.swap_node(pos, node) - - if not technic.creative_mode then - meta1.charge = meta1.charge - 100 - itemstack:set_metadata(minetest.serialize(meta1)) - technic.set_RE_wear(itemstack, meta1.charge, sonic_screwdriver_max_charge) - end - - return itemstack -end - -minetest.register_tool("technic:sonic_screwdriver", { - description = S("Sonic Screwdriver (left-click rotates face, right-click rotates axis)"), - inventory_image = "technic_sonic_screwdriver.png", - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - on_use = function(itemstack, user, pointed_thing) - screwdriver_handler(itemstack, user, pointed_thing, ROTATE_FACE) - return itemstack - end, - on_place = function(itemstack, user, pointed_thing) - screwdriver_handler(itemstack, user, pointed_thing, ROTATE_AXIS) - return itemstack - end, -}) - -minetest.register_craft({ - output = "technic:sonic_screwdriver", - recipe = { - {"", "default:diamond", ""}, - {"mesecons_materials:fiber", "technic:battery", "mesecons_materials:fiber"}, - {"mesecons_materials:fiber", "moreores:mithril_ingot", "mesecons_materials:fiber"} - } -}) - diff --git a/mods/ITEMS/technic/technic/tools/vacuum.lua b/mods/ITEMS/technic/technic/tools/vacuum.lua deleted file mode 100755 index d9fa2ca..0000000 --- a/mods/ITEMS/technic/technic/tools/vacuum.lua +++ /dev/null @@ -1,61 +0,0 @@ --- Configuration -local vacuum_max_charge = 10000 -- 10000 - Maximum charge of the vacuum cleaner -local vacuum_charge_per_object = 100 -- 100 - Capable of picking up 50 objects -local vacuum_range = 8 -- 8 - Area in which to pick up objects - -local S = technic.getter - -technic.register_power_tool("technic:vacuum", vacuum_max_charge) - -minetest.register_tool("technic:vacuum", { - description = S("Vacuum Cleaner"), - inventory_image = "technic_vacuum.png", - stack_max = 1, - wear_represents = "technic_RE_charge", - on_refill = technic.refill_RE_charge, - on_use = function(itemstack, user, pointed_thing) - local meta = minetest.deserialize(itemstack:get_metadata()) - if not meta or not meta.charge then - return - end - if meta.charge > vacuum_charge_per_object then - minetest.sound_play("vacuumcleaner", { - to_player = user:get_player_name(), - gain = 0.4, - }) - end - local pos = user:getpos() - local inv = user:get_inventory() - for _, object in ipairs(minetest.get_objects_inside_radius(pos, vacuum_range)) do - local luaentity = object:get_luaentity() - if not object:is_player() and luaentity and luaentity.name == "__builtin:item" and luaentity.itemstring ~= "" then - if inv and inv:room_for_item("main", ItemStack(luaentity.itemstring)) then - meta.charge = meta.charge - vacuum_charge_per_object - if meta.charge < vacuum_charge_per_object then - return - end - inv:add_item("main", ItemStack(luaentity.itemstring)) - minetest.sound_play("item_drop_pickup", { - to_player = user:get_player_name(), - gain = 0.4, - }) - luaentity.itemstring = "" - object:remove() - end - end - end - - technic.set_RE_wear(itemstack, meta.charge, vacuum_max_charge) - itemstack:set_metadata(minetest.serialize(meta)) - return itemstack - end, -}) - -minetest.register_craft({ - output = 'technic:vacuum', - recipe = { - {'pipeworks:tube_1', 'pipeworks:filter', 'technic:battery'}, - {'pipeworks:tube_1', 'technic:motor', 'technic:battery'}, - {'technic:stainless_steel_ingot', '', ''}, - } -}) diff --git a/mods/ITEMS/technic/technic_chests/depends.txt b/mods/ITEMS/technic/technic_chests/depends.txt deleted file mode 100755 index 82ff859..0000000 --- a/mods/ITEMS/technic/technic_chests/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -inventory -default -chests -moreores? -pipeworks? -intllib? -australia? diff --git a/mods/ITEMS/technic/technic_chests/iron_chest.lua b/mods/ITEMS/technic/technic_chests/iron_chest.lua deleted file mode 100755 index 061661a..0000000 --- a/mods/ITEMS/technic/technic_chests/iron_chest.lua +++ /dev/null @@ -1,53 +0,0 @@ -local cast_iron_ingot -if minetest.get_modpath("technic_worldgen") then - cast_iron_ingot = "technic:cast_iron_ingot" -else - cast_iron_ingot = "default:steel_ingot" -end - -minetest.register_craft({ - output = 'technic:iron_chest 1', - recipe = { - {cast_iron_ingot,cast_iron_ingot,cast_iron_ingot}, - {cast_iron_ingot,'chests:chest',cast_iron_ingot}, - {cast_iron_ingot,cast_iron_ingot,cast_iron_ingot}, - } -}) - -minetest.register_craft({ - output = 'technic:iron_locked_chest 1', - recipe = { - {cast_iron_ingot,cast_iron_ingot,cast_iron_ingot}, - {cast_iron_ingot,'chests:chest_locked',cast_iron_ingot}, - {cast_iron_ingot,cast_iron_ingot,cast_iron_ingot}, - } -}) - -minetest.register_craft({ - output = 'technic:iron_locked_chest 1', - recipe = { - {'default:steel_ingot'}, - {'technic:iron_chest'}, - } -}) - -technic.chests:register("Iron", { - width = 9, - height = 5, - sort = true, - autosort = false, - infotext = false, - color = false, - locked = false, -}) - -technic.chests:register("Iron", { - width = 9, - height = 5, - sort = true, - autosort = false, - infotext = false, - color = false, - locked = true, -}) - diff --git a/mods/ITEMS/technic/technic_chests/register.lua b/mods/ITEMS/technic/technic_chests/register.lua deleted file mode 100755 index 7408a67..0000000 --- a/mods/ITEMS/technic/technic_chests/register.lua +++ /dev/null @@ -1,378 +0,0 @@ -local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end - -local pipeworks = rawget(_G, "pipeworks") -local fs_helpers = rawget(_G, "fs_helpers") - -local allow_label = "" -local tube_entry = "" -local shift_edit_field = 0 - -if not minetest.get_modpath("pipeworks") then - -- Pipeworks is not installed. Simulate using a dummy table... - pipeworks = {} - fs_helpers = {} - local pipeworks_meta = {} - setmetatable(pipeworks, pipeworks_meta) - local dummy = function() - end - pipeworks_meta.__index = function(table, key) - print("[technic_chests] WARNING: variable or method '"..key.."' not present in dummy pipeworks table - assuming it is a method...") - pipeworks[key] = dummy - return dummy - end - pipeworks.after_place = dummy - pipeworks.after_dig = dummy - fs_helpers.cycling_button = function() return "" end -else - fs_helpers = pipeworks.fs_helpers - allow_label = "label[0.9,0.36;Allow splitting incoming stacks from tubes]" - shift_edit_field = 3 - tube_entry = "^pipeworks_tube_connection_metallic.png" -end - -local chest_mark_colors = { - {"black", S("Black")}, - {"blue", S("Blue")}, - {"brown", S("Brown")}, - {"cyan", S("Cyan")}, - {"dark_green", S("Dark Green")}, - {"dark_grey", S("Dark Grey")}, - {"green", S("Green")}, - {"grey", S("Grey")}, - {"magenta", S("Magenta")}, - {"orange", S("Orange")}, - {"pink", S("Pink")}, - {"red", S("Red")}, - {"violet", S("Violet")}, - {"white", S("White")}, - {"yellow", S("Yellow")}, -} - - -local function colorid_to_postfix(id) - return chest_mark_colors[id] and "_"..chest_mark_colors[id][1] or "" -end - - -local function get_color_buttons(coleft, lotop) - local buttons_string = "" - for y = 0, 3 do - for x = 0, 3 do - local file_name = "technic_colorbutton"..(y * 4 + x)..".png" - buttons_string = buttons_string.."image_button[" - ..(coleft + 0.1 + x * 0.7)..","..(lotop + 0.1 + y * 0.7) - ..";0.8,0.8;"..file_name..";color_button" - ..(y * 4 + x + 1)..";]" - end - end - return buttons_string -end - - -local function check_color_buttons(pos, meta, chest_name, fields) - for i = 1, 16 do - if fields["color_button"..i] then - local node = minetest.get_node(pos) - node.name = chest_name..colorid_to_postfix(i) - minetest.swap_node(pos, node) - meta:set_string("color", i) - return - end - end -end - -local function set_formspec(pos, data, page) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - local formspec = data.base_formspec - formspec = formspec..fs_helpers.cycling_button( - meta, - "image_button[0,0.35;1,0.6", - "splitstacks", - { - pipeworks.button_off, - pipeworks.button_on - } - )..allow_label - - if data.autosort then - local status = meta:get_int("autosort") - formspec = formspec.."button["..(data.hileft+2)..","..(data.height+1.1)..";3,0.8;autosort_to_"..(1-status)..";"..S("Auto-sort is %s"):format(status == 1 and S("On") or S("Off")).."]" - end - if data.infotext then - local formspec_infotext = minetest.formspec_escape(meta:get_string("infotext")) - if page == "main" then - formspec = formspec.."image_button["..(shift_edit_field+data.hileft+2.1)..",0.1;0.8,0.8;" - .."technic_pencil_icon.png;edit_infotext;]" - .."label["..(shift_edit_field+data.hileft+3)..",0;"..formspec_infotext.."]" - elseif page == "edit_infotext" then - formspec = formspec.."image_button["..(shift_edit_field+data.hileft+2.1)..",0.1;0.8,0.8;" - .."technic_checkmark_icon.png;save_infotext;]" - .."field["..(shift_edit_field+data.hileft+3.3)..",0.2;4.8,1;" - .."infotext_box;"..S("Edit chest description:")..";" - ..formspec_infotext.."]" - end - end - if data.color then - local colorID = meta:get_int("color") - local colorName - if chest_mark_colors[colorID] then - colorName = chest_mark_colors[colorID][2] - else - colorName = S("None") - end - formspec = formspec.."label["..(data.coleft+0.2)..","..(data.lotop+3)..";"..S("Color Filter: %s"):format(colorName).."]" - end - meta:set_string("formspec", formspec) -end - -local function sort_inventory(inv) - local inlist = inv:get_list("main") - local typecnt = {} - local typekeys = {} - for _, st in ipairs(inlist) do - if not st:is_empty() then - local n = st:get_name() - local w = st:get_wear() - local m = st:get_metadata() - local k = string.format("%s %05d %s", n, w, m) - if not typecnt[k] then - typecnt[k] = { - name = n, - wear = w, - metadata = m, - stack_max = st:get_stack_max(), - count = 0, - } - table.insert(typekeys, k) - end - typecnt[k].count = typecnt[k].count + st:get_count() - end - end - table.sort(typekeys) - local outlist = {} - for _, k in ipairs(typekeys) do - local tc = typecnt[k] - while tc.count > 0 do - local c = math.min(tc.count, tc.stack_max) - table.insert(outlist, ItemStack({ - name = tc.name, - wear = tc.wear, - metadata = tc.metadata, - count = c, - })) - tc.count = tc.count - c - end - end - if #outlist > #inlist then return end - while #outlist < #inlist do - table.insert(outlist, ItemStack(nil)) - end - inv:set_list("main", outlist) -end - -local function get_receive_fields(name, data) - local lname = name:lower() - return function(pos, formname, fields, sender) - local meta = minetest.get_meta(pos) - local page = "main" - if fields.sort or (data.autosort and fields.quit and meta:get_int("autosort") == 1) then - sort_inventory(meta:get_inventory()) - end - if fields.edit_infotext then - page = "edit_infotext" - end - if fields.autosort_to_1 then meta:set_int("autosort", 1) end - if fields.autosort_to_0 then meta:set_int("autosort", 0) end - if fields.infotext_box then - meta:set_string("infotext", fields.infotext_box) - end - if data.color then - -- This sets the node - local nn = "technic:"..lname..(data.locked and "_locked" or "").."_chest" - check_color_buttons(pos, meta, nn, fields) - end - if fields["fs_helpers_cycling:0:splitstacks"] - or fields["fs_helpers_cycling:1:splitstacks"] then - if not pipeworks.may_configure(pos, sender) then return end - fs_helpers.on_receive_fields(pos, fields) - end - - meta:get_inventory():set_size("main", data.width * data.height) - set_formspec(pos, data, page) - end -end - -function technic.chests:definition(name, data) - local lname = name:lower() - name = S(name) - local d = {} - for k, v in pairs(data) do d[k] = v end - data = d - - data.lowidth = 8 - data.ovwidth = math.max(data.lowidth, data.width) - data.hileft = (data.ovwidth - data.width) / 2 - data.loleft = (data.ovwidth - data.lowidth) / 2 - if data.color then - if data.lowidth + 3 <= data.ovwidth then - data.coleft = data.ovwidth - 3 - if data.loleft + data.lowidth > data.coleft then - data.loleft = data.coleft - data.lowidth - end - else - data.loleft = 0 - data.coleft = data.lowidth - data.ovwidth = data.lowidth + 3 - end - end - data.lotop = data.height + 2 - data.ovheight = data.lotop + 4 - - local locked_after_place = nil - local front = {"technic_"..lname.."_chest_front.png"} - data.base_formspec = "size["..data.ovwidth..","..data.ovheight.."]".. - "label[0,0;"..S("%s Chest"):format(name).."]".. - "list[context;main;"..data.hileft..",1;"..data.width..","..data.height..";]".. - "list[current_player;main;"..data.loleft..","..data.lotop..";8,4;]".. - "background[-0.19,-0.25;"..(data.ovwidth+0.4)..","..(data.ovheight+0.75)..";technic_chest_form_bg.png]".. - "background["..data.hileft..",1;"..data.width..","..data.height..";technic_"..lname.."_chest_inventory.png]".. - "background["..data.loleft..","..data.lotop..";8,4;technic_main_inventory.png]".. - "listring[]" - - if data.sort then - data.base_formspec = data.base_formspec.."button["..data.hileft..","..(data.height+1.1)..";1,0.8;sort;"..S("Sort").."]" - end - if data.color then - data.base_formspec = data.base_formspec..get_color_buttons(data.coleft, data.lotop) - end - - if data.locked then - locked_after_place = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name() or "") - meta:set_string("infotext", - S("%s Locked Chest (owned by %s)") - :format(name, meta:get_string("owner"))) - pipeworks.after_place(pos) - end - table.insert(front, "technic_"..lname.."_chest_lock_overlay.png") - else - locked_after_place = pipeworks.after_place - end - - local desc - if data.locked then - desc = S("%s Locked Chest"):format(name) - else - desc = S("%s Chest"):format(name) - end - - local tentry = tube_entry - if tube_entry ~= "" then - if lname == "wooden" then - tentry = "^pipeworks_tube_connection_wooden.png" - elseif lname == "mithril" then - tentry = "^pipeworks_tube_connection_stony.png" - end - end - local def = { - description = desc, - tiles = { - "technic_"..lname.."_chest_top.png"..tentry, - "technic_"..lname.."_chest_top.png"..tentry, - "technic_"..lname.."_chest_side.png"..tentry, - "technic_"..lname.."_chest_side.png"..tentry, - "technic_"..lname.."_chest_side.png"..tentry, - table.concat(front, "^") - }, - paramtype2 = "facedir", - groups = self.groups, - tube = self.tube, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - after_place_node = locked_after_place, - after_dig_node = pipeworks.after_dig, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("%s Chest"):format(name)) - set_formspec(pos, data, "main") - local inv = meta:get_inventory() - inv:set_size("main", data.width * data.height) - end, - can_dig = self.can_dig, - on_receive_fields = get_receive_fields(name, data), - on_metadata_inventory_move = self.on_inv_move, - on_metadata_inventory_put = self.on_inv_put, - on_metadata_inventory_take = self.on_inv_take, - on_blast = function(pos) - local drops = {} - inventory.get_inventory_drops(pos, "main", drops) - drops[#drops+1] = "technic:"..name:lower()..(data.locked and "_locked" or "").."_chest" - minetest.remove_node(pos) - return drops - end, - } - if data.locked then - def.allow_metadata_inventory_move = self.inv_move - def.allow_metadata_inventory_put = self.inv_put - def.allow_metadata_inventory_take = self.inv_take - def.on_blast = function() end - def.can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") and default.can_interact_with_node(player, pos) - end - def.on_skeleton_key_use = function(pos, player, newsecret) - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - local name = player:get_player_name() - - -- verify placer is owner of lockable chest - if owner ~= name then - minetest.record_protection_violation(pos, name) - minetest.chat_send_player(name, "You do not own this chest.") - return nil - end - - local secret = meta:get_string("key_lock_secret") - if secret == "" then - secret = newsecret - meta:set_string("key_lock_secret", secret) - end - - return secret, "a locked chest", owner - end - end - return def -end - -function technic.chests:register(name, data) - local def = technic.chests:definition(name, data) - - local nn = "technic:"..name:lower()..(data.locked and "_locked" or "").."_chest" - minetest.register_node(":"..nn, def) - - if data.color then - local mk_front - if string.find(def.tiles[6], "%^") then - mk_front = function (overlay) return def.tiles[6]:gsub("%^", "^"..overlay.."^") end - else - mk_front = function (overlay) return def.tiles[6].."^"..overlay end - end - for i = 1, 15 do - local postfix = colorid_to_postfix(i) - local colordef = {} - for k, v in pairs(def) do - colordef[k] = v - end - colordef.drop = nn - colordef.groups = self.groups_noinv - colordef.tiles = { def.tiles[1], def.tiles[2], def.tiles[3], def.tiles[4], def.tiles[5], mk_front("technic_chest_overlay"..postfix..".png") } - minetest.register_node(":"..nn..postfix, colordef) - end - end - -end - diff --git a/mods/ITEMS/technic/technic_chests/silver_chest.lua b/mods/ITEMS/technic/technic_chests/silver_chest.lua deleted file mode 100755 index 7453dcd..0000000 --- a/mods/ITEMS/technic/technic_chests/silver_chest.lua +++ /dev/null @@ -1,48 +0,0 @@ -if minetest.get_modpath("australia") then - minetest.register_craft({ - output = 'technic:silver_chest', - recipe = { - {'australia:silver_ingot','australia:silver_ingot','australia:silver_ingot'}, - {'australia:silver_ingot','technic:copper_chest','australia:silver_ingot'}, - {'australia:silver_ingot','australia:silver_ingot','australia:silver_ingot'}, - } - }) - - minetest.register_craft({ - output = 'technic:silver_locked_chest', - recipe = { - {'australia:silver_ingot','australia:silver_ingot','australia:silver_ingot'}, - {'australia:silver_ingot','technic:copper_locked_chest','australia:silver_ingot'}, - {'australia:silver_ingot','australia:silver_ingot','australia:silver_ingot'}, - } - }) -end - -minetest.register_craft({ - output = 'technic:silver_locked_chest', - recipe = { - {'default:steel_ingot'}, - {'technic:silver_chest'}, - } -}) - -technic.chests:register("Silver", { - width = 12, - height = 6, - sort = true, - autosort = true, - infotext = true, - color = false, - locked = false, -}) - -technic.chests:register("Silver", { - width = 12, - height = 6, - sort = true, - autosort = true, - infotext = true, - color = false, - locked = true, -}) - diff --git a/mods/ITEMS/technic/technic_worldgen/crafts.lua b/mods/ITEMS/technic/technic_worldgen/crafts.lua deleted file mode 100755 index c0475d4..0000000 --- a/mods/ITEMS/technic/technic_worldgen/crafts.lua +++ /dev/null @@ -1,211 +0,0 @@ - -local S = technic.worldgen.gettext - -minetest.register_craftitem(":technic:uranium_lump", { - description = S("Uranium Lump"), - inventory_image = "technic_uranium_lump.png", -}) -minetest.register_alias("technic:uranium", "technic:uranium_lump") - -minetest.register_craftitem(":technic:uranium_ingot", { - description = S("Uranium Ingot"), - inventory_image = "technic_uranium_ingot.png", - groups = {uranium_ingot=1}, -}) - -minetest.register_craftitem(":technic:chromium_lump", { - description = S("Chromium Lump"), - inventory_image = "technic_chromium_lump.png", -}) - -minetest.register_craftitem(":technic:chromium_ingot", { - description = S("Chromium Ingot"), - inventory_image = "technic_chromium_ingot.png", -}) - -minetest.register_craftitem(":technic:zinc_lump", { - description = S("Zinc Lump"), - inventory_image = "technic_zinc_lump.png", -}) - -minetest.register_craftitem(":technic:zinc_ingot", { - description = S("Zinc Ingot"), - inventory_image = "technic_zinc_ingot.png", -}) - -minetest.register_craftitem(":technic:lead_lump", { - description = S("Lead Lump"), - inventory_image = "technic_lead_lump.png", -}) - -minetest.register_craftitem(":technic:lead_ingot", { - description = S("Lead Ingot"), - inventory_image = "technic_lead_ingot.png", -}) - -minetest.register_craftitem(":technic:sulfur_lump", { - description = S("Sulfur Lump"), - inventory_image = "technic_sulfur_lump.png", -}) - -minetest.register_craftitem(":technic:brass_ingot", { - description = S("Brass Ingot"), - inventory_image = "technic_brass_ingot.png", -}) - -minetest.register_alias("technic:wrought_iron_ingot", "default:steel_ingot") - -minetest.override_item("default:steel_ingot", { - description = S("Wrought Iron Ingot"), - inventory_image = "technic_wrought_iron_ingot.png", -}) - -minetest.register_craftitem(":technic:cast_iron_ingot", { - description = S("Cast Iron Ingot"), - inventory_image = "technic_cast_iron_ingot.png", -}) - -minetest.register_craftitem(":technic:carbon_steel_ingot", { - description = S("Carbon Steel Ingot"), - inventory_image = "technic_carbon_steel_ingot.png", -}) - -minetest.register_craftitem(":technic:stainless_steel_ingot", { - description = S("Stainless Steel Ingot"), - inventory_image = "technic_stainless_steel_ingot.png", -}) - -local function register_block(block, ingot) - minetest.register_craft({ - output = block, - recipe = { - {ingot, ingot, ingot}, - {ingot, ingot, ingot}, - {ingot, ingot, ingot}, - } - }) - - minetest.register_craft({ - output = ingot.." 9", - recipe = { - {block} - } - }) -end - -register_block("technic:uranium_block", "technic:uranium_ingot") -register_block("technic:chromium_block", "technic:chromium_ingot") -register_block("technic:zinc_block", "technic:zinc_ingot") -register_block("technic:lead_block", "technic:lead_ingot") -register_block("technic:brass_block", "technic:brass_ingot") -register_block("technic:cast_iron_block", "technic:cast_iron_ingot") -register_block("technic:carbon_steel_block", "technic:carbon_steel_ingot") -register_block("technic:stainless_steel_block", "technic:stainless_steel_ingot") - -minetest.register_craft({ - type = 'cooking', - recipe = "technic:zinc_lump", - output = "technic:zinc_ingot", -}) - -minetest.register_craft({ - type = 'cooking', - recipe = "technic:chromium_lump", - output = "technic:chromium_ingot", -}) - -minetest.register_craft({ - type = 'cooking', - recipe = "technic:uranium_lump", - output = "technic:uranium_ingot", -}) - -minetest.register_craft({ - type = 'cooking', - recipe = "technic:lead_lump", - output = "technic:lead_ingot", -}) - -minetest.register_craft({ - output = "technic:granite_brick 4", - recipe = { - {"technic:granite", "technic:granite"}, - {"technic:granite", "technic:granite"}, - } -}) - -minetest.register_craft({ - type = "cooking", - output = "technic:granite", - recipe = "technic:granite_cobble", -}) - -minetest.register_craft({ - type = 'cooking', - recipe = minetest.registered_aliases["technic:wrought_iron_ingot"], - output = "technic:cast_iron_ingot", -}) - -minetest.register_craft({ - type = 'cooking', - recipe = "technic:cast_iron_ingot", - cooktime = 2, - output = "technic:wrought_iron_ingot", -}) - -minetest.register_craft({ - type = 'cooking', - recipe = "technic:carbon_steel_ingot", - cooktime = 2, - output = "technic:wrought_iron_ingot", -}) - -local function for_each_registered_item(action) - local already_reg = {} - for k, _ in pairs(minetest.registered_items) do - table.insert(already_reg, k) - end - local really_register_craftitem = minetest.register_craftitem - minetest.register_craftitem = function(name, def) - really_register_craftitem(name, def) - action(string.gsub(name, "^:", "")) - end - local really_register_tool = minetest.register_tool - minetest.register_tool = function(name, def) - really_register_tool(name, def) - action(string.gsub(name, "^:", "")) - end - local really_register_node = minetest.register_node - minetest.register_node = function(name, def) - really_register_node(name, def) - action(string.gsub(name, "^:", "")) - end - for _, name in ipairs(already_reg) do - action(name) - end -end - -local steel_to_iron = {} -for _, i in ipairs({ - "tools:axe_steel", - "tools:pick_steel", - "tools:shovel_steel", - "tools:sword_steel", - "doors:door_steel", - "farming:hoe_steel", - "glooptest:hammer_steel", - "glooptest:handsaw_steel", - "glooptest:reinforced_crystal_glass", - "mesecons_doors:op_door_steel", - "mesecons_doors:sig_door_steel", - "vessels:steel_bottle", -}) do - steel_to_iron[i] = true -end - -for_each_registered_item(function(item_name) - local item_def = minetest.registered_items[item_name] - if steel_to_iron[item_name] and string.find(item_def.description, "Steel") then - minetest.override_item(item_name, { description = string.gsub(item_def.description, "Steel", S("Iron")) }) - end -end) diff --git a/mods/ITEMS/technic/technic_worldgen/depends.txt b/mods/ITEMS/technic/technic_worldgen/depends.txt deleted file mode 100755 index 96ea774..0000000 --- a/mods/ITEMS/technic/technic_worldgen/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -default -tools? -intllib? diff --git a/mods/ITEMS/technic/technic_worldgen/init.lua b/mods/ITEMS/technic/technic_worldgen/init.lua deleted file mode 100755 index 092b602..0000000 --- a/mods/ITEMS/technic/technic_worldgen/init.lua +++ /dev/null @@ -1,20 +0,0 @@ -local modpath = minetest.get_modpath("technic_worldgen") - -technic = rawget(_G, "technic") or {} -technic.worldgen = { - gettext = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end, -} - -dofile(modpath.."/nodes.lua") -dofile(modpath.."/oregen.lua") -dofile(modpath.."/crafts.lua") - --- Rubber trees, moretrees also supplies these -if not minetest.get_modpath("moretrees") then - dofile(modpath.."/rubber.lua") -else - -- older versions of technic provided rubber trees regardless - minetest.register_alias("technic:rubber_sapling", "moretrees:rubber_tree_sapling") - minetest.register_alias("technic:rubber_tree_empty", "moretrees:rubber_tree_trunk_empty") -end - diff --git a/mods/ITEMS/technic/technic_worldgen/nodes.lua b/mods/ITEMS/technic/technic_worldgen/nodes.lua deleted file mode 100755 index 4c151c5..0000000 --- a/mods/ITEMS/technic/technic_worldgen/nodes.lua +++ /dev/null @@ -1,228 +0,0 @@ -local S = technic.worldgen.gettext - -minetest.register_node( ":technic:mineral_uranium", { - description = S("Uranium Ore"), - tiles = { "default_stone.png^technic_mineral_uranium.png" }, - is_ground_content = true, - groups = {cracky=3, radioactive=1}, - sounds = default.node_sound_stone_defaults(), - drop = "technic:uranium_lump", -}) - -minetest.register_node( ":technic:granite_mineral_uranium", { - description = S("Uranium Ore"), - tiles = { "technic_granite.png^technic_mineral_uranium.png" }, - is_ground_content = true, - groups = {cracky=3, radioactive=1}, - sounds = default.node_sound_stone_defaults(), - drop = "technic:uranium_lump", -}) - -minetest.register_node( ":technic:mineral_chromium", { - description = S("Chromium Ore"), - tiles = { "default_stone.png^technic_mineral_chromium.png" }, - is_ground_content = true, - groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), - drop = "technic:chromium_lump", -}) - -minetest.register_node( ":technic:granite_mineral_chromium", { - description = S("Chromium Ore"), - tiles = { "technic_granite.png^technic_mineral_chromium.png" }, - is_ground_content = true, - groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), - drop = "technic:chromium_lump", -}) - -minetest.register_node( ":technic:mineral_zinc", { - description = S("Zinc Ore"), - tiles = { "default_stone.png^technic_mineral_zinc.png" }, - is_ground_content = true, - groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), - drop = "technic:zinc_lump", -}) - -minetest.register_node( ":technic:mineral_lead", { - description = S("Lead Ore"), - tiles = { "default_stone.png^technic_mineral_lead.png" }, - is_ground_content = true, - groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), - drop = "technic:lead_lump", -}) - -minetest.register_node( ":technic:mineral_sulfur", { - description = S("Sulfur Ore"), - tiles = { "default_stone.png^technic_mineral_sulfur.png" }, - is_ground_content = true, - groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), - drop = "technic:sulfur_lump", -}) - -minetest.register_node( ":technic:granite", { - description = S("Granite"), - tiles = { "technic_granite.png" }, - is_ground_content = true, - groups = {cracky = 2, stone = 1}, - drop = 'technic:granite_cobble', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node( ":technic:granite_cobble", { - description = S("Granite Cobble"), - tiles = {"technic_granite_cobble.png"}, - groups = {cracky = 2, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node( ":technic:granite_brick", { - description = S("Granite Brick"), - tiles = {"technic_granite_brick.png"}, - groups = {cracky = 2, stone = 1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node( ":technic:marble", { - description = S("Marble"), - tiles = { "technic_marble.png" }, - is_ground_content = true, - groups = {cracky=3, marble=1}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node( ":technic:marble_bricks", { - description = S("Marble Bricks"), - tiles = { "technic_marble_bricks.png" }, - is_ground_content = true, - groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node(":technic:uranium_block", { - description = S("Uranium Block"), - tiles = { "technic_uranium_block.png" }, - is_ground_content = true, - groups = {uranium_block=1, cracky=1, level=2, radioactive=2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node(":technic:chromium_block", { - description = S("Chromium Block"), - tiles = { "technic_chromium_block.png" }, - is_ground_content = true, - groups = {cracky=1, level=2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node(":technic:zinc_block", { - description = S("Zinc Block"), - tiles = { "technic_zinc_block.png" }, - is_ground_content = true, - groups = {cracky=1, level=2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node(":technic:lead_block", { - description = S("Lead Block"), - tiles = { "technic_lead_block.png" }, - is_ground_content = true, - groups = {cracky=1, level=2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_alias("technic:wrought_iron_block", "default:steelblock") - -minetest.override_item("default:steelblock", { - description = S("Wrought Iron Block"), - tiles = { "technic_wrought_iron_block.png" }, -}) - -minetest.register_node(":technic:cast_iron_block", { - description = S("Cast Iron Block"), - tiles = { "technic_cast_iron_block.png" }, - is_ground_content = true, - groups = {cracky=1, level=2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node(":technic:carbon_steel_block", { - description = S("Carbon Steel Block"), - tiles = { "technic_carbon_steel_block.png" }, - is_ground_content = true, - groups = {cracky=1, level=2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node(":technic:stainless_steel_block", { - description = S("Stainless Steel Block"), - tiles = { "technic_stainless_steel_block.png" }, - is_ground_content = true, - groups = {cracky=1, level=2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_node(":technic:brass_block", { - description = S("Brass Block"), - tiles = { "technic_brass_block.png" }, - is_ground_content = true, - groups = {cracky=1, level=2}, - sounds = default.node_sound_stone_defaults() -}) - -minetest.register_craft({ - output = 'technic:marble_bricks 4', - recipe = { - {'technic:marble','technic:marble'}, - {'technic:marble','technic:marble'} - } -}) - -minetest.register_alias("technic:diamond_block", "default:diamondblock") -minetest.register_alias("technic:diamond", "default:diamond") -minetest.register_alias("technic:mineral_diamond", "default:stone_with_diamond") - -local function for_each_registered_node(action) - local really_register_node = minetest.register_node - minetest.register_node = function(name, def) - really_register_node(name, def) - action(name:gsub("^:", ""), def) - end - for name, def in pairs(minetest.registered_nodes) do - action(name, def) - end -end - -for_each_registered_node(function(node_name, node_def) - if node_name ~= "default:steelblock" and - node_name:find("steelblock", 1, true) and - node_def.description:find("Steel", 1, true) then - minetest.override_item(node_name, { - description = node_def.description:gsub("Steel", S("Wrought Iron")), - }) - end - local tiles = node_def.tiles or node_def.tile_images - if tiles then - local new_tiles = {} - local do_override = false - if type(tiles) == "string" then - tiles = {tiles} - end - for i, t in ipairs(tiles) do - if type(t) == "string" and t == "default_steel_block.png" then - do_override = true - t = "technic_wrought_iron_block.png" - end - table.insert(new_tiles, t) - end - if do_override then - minetest.override_item(node_name, { - tiles = new_tiles - }) - end - end -end) - diff --git a/mods/ITEMS/technic/technic_worldgen/oregen.lua b/mods/ITEMS/technic/technic_worldgen/oregen.lua deleted file mode 100755 index 75ac90d..0000000 --- a/mods/ITEMS/technic/technic_worldgen/oregen.lua +++ /dev/null @@ -1,45 +0,0 @@ - --- Sulfur -local sulfur_buf = {} -local sulfur_noise= nil - -minetest.register_on_generated(function(minp, maxp, seed) - local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - local a = VoxelArea:new{ - MinEdge = {x = emin.x, y = emin.y, z = emin.z}, - MaxEdge = {x = emax.x, y = emax.y, z = emax.z}, - } - local data = vm:get_data(sulfur_buf) - local pr = PseudoRandom(17 * minp.x + 42 * minp.y + 101 * minp.z) - sulfur_noise = sulfur_noise or minetest.get_perlin(9876, 3, 0.5, 100) - - local c_lava = minetest.get_content_id("default:lava_source") - local c_lava_flowing = minetest.get_content_id("default:lava_flowing") - local c_stone = minetest.get_content_id("default:stone") - local c_sulfur = minetest.get_content_id("technic:mineral_sulfur") - - local grid_size = 5 - for x = minp.x + math.floor(grid_size / 2), maxp.x, grid_size do - for y = minp.y + math.floor(grid_size / 2), maxp.y, grid_size do - for z = minp.z + math.floor(grid_size / 2), maxp.z, grid_size do - local c = data[a:index(x, y, z)] - if (c == c_lava or c == c_lava_flowing) and sulfur_noise:get3d({x = x, y = z, z = z}) >= 0.4 then - for xx = math.max(minp.x, x - grid_size), math.min(maxp.x, x + grid_size) do - for yy = math.max(minp.y, y - grid_size), math.min(maxp.y, y + grid_size) do - for zz = math.max(minp.z, z - grid_size), math.min(maxp.z, z + grid_size) do - local i = a:index(xx, yy, zz) - if data[i] == c_stone and pr:next(1, 10) <= 7 then - data[i] = c_sulfur - end - end - end - end - end - end - end - end - - vm:set_data(data) - vm:write_to_map(data) -end) - diff --git a/mods/ITEMS/technic/technic_worldgen/rubber.lua b/mods/ITEMS/technic/technic_worldgen/rubber.lua deleted file mode 100755 index e511c1d..0000000 --- a/mods/ITEMS/technic/technic_worldgen/rubber.lua +++ /dev/null @@ -1,84 +0,0 @@ --- Code of rubber tree by PilzAdam - -local S = technic.worldgen.gettext - -minetest.register_node(":moretrees:rubber_tree_sapling", { - description = S("Rubber Tree Sapling"), - drawtype = "plantlike", - tiles = {"technic_rubber_sapling.png"}, - inventory_image = "technic_rubber_sapling.png", - wield_image = "technic_rubber_sapling.png", - paramtype = "light", - walkable = false, - groups = {dig_immediate=3, flammable=2, sapling=1}, - sounds = default.node_sound_defaults(), -}) - -minetest.register_craft({ - type = "fuel", - recipe = "moretrees:rubber_tree_sapling", - burntime = 10 -}) - -minetest.register_node(":moretrees:rubber_tree_trunk", { - description = S("Rubber Tree"), - tiles = {"default_tree_top.png", "default_tree_top.png", - "technic_rubber_tree_full.png"}, - groups = {tree=1, snappy=1, choppy=2, oddly_breakable_by_hand=1, - flammable=2}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node(":moretrees:rubber_tree_trunk_empty", { - description = S("Rubber Tree"), - tiles = {"default_tree_top.png", "default_tree_top.png", - "technic_rubber_tree_empty.png"}, - groups = {tree=1, snappy=1, choppy=2, oddly_breakable_by_hand=1, - flammable=2, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node(":moretrees:rubber_tree_leaves", { - drawtype = "allfaces_optional", - description = S("Rubber Tree Leaves"), - tiles = {"technic_rubber_leaves.png"}, - paramtype = "light", - groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, - drop = { - max_items = 1, - items = {{ - items = {"moretrees:rubber_tree_sapling"}, - rarity = 20, - }, - { - items = {"moretrees:rubber_tree_leaves"}, - } - } - }, - sounds = default.node_sound_leaves_defaults(), -}) - -technic.rubber_tree_model={ - axiom = "FFFFA", - rules_a = "[&FFBFA]////[&BFFFA]////[&FBFFA]", - rules_b = "[&FFA]////[&FFA]////[&FFA]", - trunk = "moretrees:rubber_tree_trunk", - leaves = "moretrees:rubber_tree_leaves", - angle = 35, - iterations = 3, - random_level = 1, - trunk_type = "double", - thin_branches = true -} - -minetest.register_abm({ - nodenames = {"moretrees:rubber_tree_sapling"}, - label = "Worldgen: grow rubber tree sapling", - interval = 60, - chance = 20, - action = function(pos, node) - minetest.remove_node(pos) - minetest.spawn_tree(pos, technic.rubber_tree_model) - end -}) - diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_granite.png b/mods/ITEMS/technic/technic_worldgen/textures/technic_granite.png deleted file mode 100644 index 1e6e38a..0000000 Binary files a/mods/ITEMS/technic/technic_worldgen/textures/technic_granite.png and /dev/null differ diff --git a/mods/ITEMS/technic/wrench/depends.txt b/mods/ITEMS/technic/wrench/depends.txt deleted file mode 100755 index b40b4af..0000000 --- a/mods/ITEMS/technic/wrench/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -chests? -furnace? -signs? -technic? -technic_chests? -technic_worldgen? -intllib? diff --git a/mods/ITEMS/technic/wrench/support.lua b/mods/ITEMS/technic/wrench/support.lua deleted file mode 100755 index f2f65ef..0000000 --- a/mods/ITEMS/technic/wrench/support.lua +++ /dev/null @@ -1,73 +0,0 @@ ---[[ -supported_nodes -This table stores all nodes that are compatible with the wrench mod. -Syntax: - [] = { - lists = {""}, - metas = {[""] = STRING, - [""] = INT, - [""] = FLOAT}, - owned = true, - store_meta_always = true, - } - owned - nodes that are protected by owner requirements (Ex. locked chests) - store_meta_always - when nodes are broken this ensures metadata and - inventory is always stored (Ex. active state for machines) ---]] - -wrench.META_TYPE_INT = 0 -wrench.META_TYPE_FLOAT = 1 -wrench.META_TYPE_STRING = 2 - -local INT, STRING, FLOAT = - wrench.META_TYPE_INT, - wrench.META_TYPE_STRING, - wrench.META_TYPE_FLOAT - -wrench.registered_nodes = { - ["chests:chest"] = { - lists = {"main"}, - }, - ["chests:chest_locked"] = { - lists = {"main"}, - metas = {owner = STRING, - infotext = STRING}, - owned = true, - }, - ["furnace:furnace"] = { - lists = {"fuel", "src", "dst"}, - metas = {infotext = STRING, - fuel_totaltime = FLOAT, - fuel_time = FLOAT, - src_totaltime = FLOAT, - src_time = FLOAT}, - }, - ["furnace:furnace_active"] = { - lists = {"fuel", "src", "dst"}, - metas = {infotext = STRING, - fuel_totaltime = FLOAT, - fuel_time = FLOAT, - src_totaltime = FLOAT, - src_time = FLOAT}, - store_meta_always = true, - }, - ["signs:sign_wall"] = { - metas = {infotext = STRING, - text = STRING}, - }, -} - -function wrench:original_name(name) - for key, value in pairs(self.registered_nodes) do - if name == value.name then - return key - end - end -end - -function wrench:register_node(name, def) - if minetest.registered_nodes[name] then - self.registered_nodes[name] = def - end -end - diff --git a/mods/ITEMS/technic/wrench/technic.lua b/mods/ITEMS/technic/wrench/technic.lua deleted file mode 100755 index bfd799c..0000000 --- a/mods/ITEMS/technic/wrench/technic.lua +++ /dev/null @@ -1,343 +0,0 @@ - -local INT, STRING, FLOAT = - wrench.META_TYPE_INT, - wrench.META_TYPE_STRING, - wrench.META_TYPE_FLOAT - -wrench:register_node("technic:iron_chest", { - lists = {"main"}, -}) -wrench:register_node("technic:iron_locked_chest", { - lists = {"main"}, - metas = {infotext = STRING, - owner = STRING}, - owned = true, -}) -wrench:register_node("technic:copper_chest", { - lists = {"main"}, -}) -wrench:register_node("technic:copper_locked_chest", { - lists = {"main"}, - metas = {infotext = STRING, - owner = STRING}, - owned = true, -}) -wrench:register_node("technic:silver_chest", { - lists = {"main"}, - metas = {infotext = STRING, - formspec = STRING}, -}) -wrench:register_node("technic:silver_locked_chest", { - lists = {"main"}, - metas = {infotext = STRING, - owner = STRING, - formspec = STRING}, - owned = true, -}) -wrench:register_node("technic:gold_chest", { - lists = {"main"}, - metas = {infotext = STRING, - formspec = STRING}, -}) -wrench:register_node("technic:gold_locked_chest", { - lists = {"main"}, - metas = {infotext = STRING, - owner = STRING, - formspec = STRING}, - owned = true, -}) -wrench:register_node("technic:mithril_chest", { - lists = {"main"}, - metas = {infotext = STRING, - formspec = STRING}, -}) -wrench:register_node("technic:mithril_locked_chest", { - lists = {"main"}, - metas = {infotext = STRING, - owner = STRING, - formspec = STRING}, - owned = true, -}) -wrench:register_node("technic:lv_electric_furnace", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT}, -}) -wrench:register_node("technic:lv_electric_furnace_active", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_electric_furnace", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_electric_furnace_active", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:coal_alloy_furnace", { - lists = {"fuel", "src", "dst"}, - metas = {infotext = STRING, - fuel_totaltime = FLOAT, - fuel_time = FLOAT, - src_totaltime = FLOAT, - src_time = FLOAT}, -}) -wrench:register_node("technic:coal_alloy_furnace_active", { - lists = {"fuel", "src", "dst"}, - metas = {infotext = STRING, - fuel_totaltime = FLOAT, - fuel_time = FLOAT, - src_totaltime = FLOAT, - src_time = FLOAT}, -}) -wrench:register_node("technic:alloy_furnace", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:alloy_furnace_active", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_alloy_furnace", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_alloy_furnace_active", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:tool_workshop", { - lists = {"src", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT}, -}) -wrench:register_node("technic:grinder", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT}, -}) -wrench:register_node("technic:grinder_active", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_grinder", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_grinder_active", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:extractor", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT}, -}) -wrench:register_node("technic:extractor_active", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_extractor", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_extractor_active", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:compressor", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT}, -}) -wrench:register_node("technic:compressor_active", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_compressor", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_compressor_active", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:cnc", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT, - cnc_product = STRING}, -}) -wrench:register_node("technic:cnc_active", { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - LV_EU_demand = INT, - LV_EU_input = INT, - src_time = INT, - cnc_product = STRING}, -}) -wrench:register_node("technic:mv_centrifuge", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) -wrench:register_node("technic:mv_centrifuge_active", { - lists = {"src", "dst", "upgrade1", "upgrade2"}, - metas = {infotext = STRING, - formspec = STRING, - MV_EU_demand = INT, - MV_EU_input = INT, - tube_time = INT, - src_time = INT}, -}) - - -local chest_mark_colors = { - '_black', - '_blue', - '_brown', - '_cyan', - '_dark_green', - '_dark_grey', - '_green', - '_grey', - '_magenta', - '_orange', - '_pink', - '_red', - '_violet', - '_white', - '_yellow', - '', -} - -for i = 1, 15 do - wrench:register_node("technic:gold_chest"..chest_mark_colors[i], { - lists = {"main"}, - metas = {infotext = STRING,formspec = STRING}, - }) - wrench:register_node("technic:gold_locked_chest"..chest_mark_colors[i], { - lists = {"main"}, - metas = {infotext = STRING,owner = STRING,formspec = STRING}, - owned = true, - }) -end - -if minetest.get_modpath("technic") then - for tier, _ in pairs(technic.machines) do - local ltier = tier:lower() - for i = 0, 8 do - wrench:register_node("technic:"..ltier.."_battery_box"..i, { - lists = {"src", "dst"}, - metas = {infotext = STRING, - formspec = STRING, - [tier.."_EU_demand"] = INT, - [tier.."_EU_supply"] = INT, - [tier.."_EU_input"] = INT, - internal_EU_charge = INT, - last_side_shown = INT}, - }) - end - end -end - diff --git a/mods/ITEMS/tnt/README.txt b/mods/ITEMS/tnt/README.txt deleted file mode 100644 index 4e74841..0000000 --- a/mods/ITEMS/tnt/README.txt +++ /dev/null @@ -1,44 +0,0 @@ -Minetest Game mod: tnt -====================== -See license.txt for license information. - -Authors of source code ----------------------- -PilzAdam (MIT) -ShadowNinja (MIT) -sofar (sofar@foo-projects.org) (MIT) -Various Minetest developers and contributors (MIT) - -Authors of media (textures) ---------------------------- -BlockMen (CC BY-SA 3.0): -All textures not mentioned below. - -ShadowNinja (CC BY-SA 3.0): -tnt_smoke.png - -Wuzzy (CC BY-SA 3.0): -All gunpowder textures except tnt_gunpowder_inventory.png. - -sofar (sofar@foo-projects.org) (CC BY-SA 3.0): -tnt_blast.png - -Introduction ------------- -This mod adds TNT to Minetest. TNT is a tool to help the player -in mining. - -How to use the mod: -Craft gunpowder by placing coal and gravel in the crafting area. -The gunpowder can be used to craft TNT or as fuse for TNT. -To craft TNT place items like this: --- wood - gunpowder -- wood - -gunpowder gunpowder gunpowder --- wood - gunpowder -- wood - - -There are different ways to blow up TNT: - 1. Hit it with a torch. - 2. Hit a gunpowder fuse that leads to a TNT block with a torch or flint-and-steel. - 3. Activate it with mesecons (fastest way). - -Be aware of the damage radius of 6 blocks! diff --git a/mods/ITEMS/tnt/depends.txt b/mods/ITEMS/tnt/depends.txt deleted file mode 100644 index 70715c7..0000000 --- a/mods/ITEMS/tnt/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -fire diff --git a/mods/ITEMS/tnt/init.lua b/mods/ITEMS/tnt/init.lua deleted file mode 100644 index 6aad772..0000000 --- a/mods/ITEMS/tnt/init.lua +++ /dev/null @@ -1,645 +0,0 @@ -tnt = {} - --- Default to enabled when in singleplayer -local enable_tnt = minetest.settings:get_bool("enable_tnt") -if enable_tnt == nil then - enable_tnt = minetest.is_singleplayer() -end - --- loss probabilities array (one in X will be lost) -local loss_prob = {} - -loss_prob["default:cobble"] = 3 -loss_prob["default:dirt"] = 4 - -local tnt_radius = tonumber(minetest.settings:get("tnt_radius") or 3) - --- Fill a list with data for content IDs, after all nodes are registered -local cid_data = {} -minetest.after(0, function() - for name, def in pairs(minetest.registered_nodes) do - cid_data[minetest.get_content_id(name)] = { - name = name, - drops = def.drops, - flammable = def.groups.flammable, - on_blast = def.on_blast, - } - end -end) - -local function rand_pos(center, pos, radius) - local def - local reg_nodes = minetest.registered_nodes - local i = 0 - repeat - -- Give up and use the center if this takes too long - if i > 4 then - pos.x, pos.z = center.x, center.z - break - end - pos.x = center.x + math.random(-radius, radius) - pos.z = center.z + math.random(-radius, radius) - def = reg_nodes[minetest.get_node(pos).name] - i = i + 1 - until def and not def.walkable -end - -local function eject_drops(drops, pos, radius) - local drop_pos = vector.new(pos) - for _, item in pairs(drops) do - local count = math.min(item:get_count(), item:get_stack_max()) - while count > 0 do - local take = math.max(1,math.min(radius * radius, - count, - item:get_stack_max())) - rand_pos(pos, drop_pos, radius) - local dropitem = ItemStack(item) - dropitem:set_count(take) - local obj = minetest.add_item(drop_pos, dropitem) - if obj then - obj:get_luaentity().collect = true - obj:setacceleration({x = 0, y = -10, z = 0}) - obj:setvelocity({x = math.random(-3, 3), - y = math.random(0, 10), - z = math.random(-3, 3)}) - end - count = count - take - end - end -end - -local function add_drop(drops, item) - item = ItemStack(item) - local name = item:get_name() - if loss_prob[name] ~= nil and math.random(1, loss_prob[name]) == 1 then - return - end - - local drop = drops[name] - if drop == nil then - drops[name] = item - else - drop:set_count(drop:get_count() + item:get_count()) - end -end - -local basic_flame_on_construct -- cached value -local function destroy(drops, npos, cid, c_air, c_fire, - on_blast_queue, on_construct_queue, - ignore_protection, ignore_on_blast) - if not ignore_protection and minetest.is_protected(npos, "") then - return cid - end - - local def = cid_data[cid] - - if not def then - return c_air - elseif not ignore_on_blast and def.on_blast then - on_blast_queue[#on_blast_queue + 1] = { - pos = vector.new(npos), - on_blast = def.on_blast - } - return cid - elseif def.flammable then - on_construct_queue[#on_construct_queue + 1] = { - fn = basic_flame_on_construct, - pos = vector.new(npos) - } - return c_fire - else - local node_drops = minetest.get_node_drops(def.name, "") - for _, item in pairs(node_drops) do - add_drop(drops, item) - end - return c_air - end -end - -local function calc_velocity(pos1, pos2, old_vel, power) - -- Avoid errors caused by a vector of zero length - if vector.equals(pos1, pos2) then - return old_vel - end - - local vel = vector.direction(pos1, pos2) - vel = vector.normalize(vel) - vel = vector.multiply(vel, power) - - -- Divide by distance - local dist = vector.distance(pos1, pos2) - dist = math.max(dist, 1) - vel = vector.divide(vel, dist) - - -- Add old velocity - vel = vector.add(vel, old_vel) - - -- randomize it a bit - vel = vector.add(vel, { - x = math.random() - 0.5, - y = math.random() - 0.5, - z = math.random() - 0.5, - }) - - -- Limit to terminal velocity - dist = vector.length(vel) - if dist > 250 then - vel = vector.divide(vel, dist / 250) - end - return vel -end - -local function entity_physics(pos, radius, drops) - local objs = minetest.get_objects_inside_radius(pos, radius) - for _, obj in pairs(objs) do - local obj_pos = obj:getpos() - local dist = math.max(1, vector.distance(pos, obj_pos)) - - local damage = (4 / dist) * radius - if obj:is_player() then - -- currently the engine has no method to set - -- player velocity. See #2960 - -- instead, we knock the player back 1.0 node, and slightly upwards - local dir = vector.normalize(vector.subtract(obj_pos, pos)) - local moveoff = vector.multiply(dir, dist + 1.0) - local newpos = vector.add(pos, moveoff) - newpos = vector.add(newpos, {x = 0, y = 0.2, z = 0}) - obj:setpos(newpos) - - obj:set_hp(obj:get_hp() - damage) - else - local do_damage = true - local do_knockback = true - local entity_drops = {} - local luaobj = obj:get_luaentity() - local objdef = minetest.registered_entities[luaobj.name] - - if objdef and objdef.on_blast then - do_damage, do_knockback, entity_drops = objdef.on_blast(luaobj, damage) - end - - if do_knockback then - local obj_vel = obj:getvelocity() - obj:setvelocity(calc_velocity(pos, obj_pos, - obj_vel, radius * 10)) - end - if do_damage then - if not obj:get_armor_groups().immortal then - obj:punch(obj, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, nil) - end - end - for _, item in pairs(entity_drops) do - add_drop(drops, item) - end - end - end -end - -local function add_effects(pos, radius, drops) - minetest.add_particle({ - pos = pos, - velocity = vector.new(), - acceleration = vector.new(), - expirationtime = 0.4, - size = radius * 10, - collisiondetection = false, - vertical = false, - texture = "tnt_boom.png", - }) - minetest.add_particlespawner({ - amount = 64, - time = 0.5, - minpos = vector.subtract(pos, radius / 2), - maxpos = vector.add(pos, radius / 2), - minvel = {x = -10, y = -10, z = -10}, - maxvel = {x = 10, y = 10, z = 10}, - minacc = vector.new(), - maxacc = vector.new(), - minexptime = 1, - maxexptime = 2.5, - minsize = radius * 3, - maxsize = radius * 5, - texture = "tnt_smoke.png", - }) - - -- we just dropped some items. Look at the items entities and pick - -- one of them to use as texture - local texture = "tnt_blast.png" --fallback texture - local most = 0 - for name, stack in pairs(drops) do - local count = stack:get_count() - if count > most then - most = count - local def = minetest.registered_nodes[name] - if def and def.tiles and def.tiles[1] then - texture = def.tiles[1] - end - end - end - - minetest.add_particlespawner({ - amount = 64, - time = 0.1, - minpos = vector.subtract(pos, radius / 2), - maxpos = vector.add(pos, radius / 2), - minvel = {x = -3, y = 0, z = -3}, - maxvel = {x = 3, y = 5, z = 3}, - minacc = {x = 0, y = -10, z = 0}, - maxacc = {x = 0, y = -10, z = 0}, - minexptime = 0.8, - maxexptime = 2.0, - minsize = radius * 0.66, - maxsize = radius * 2, - texture = texture, - collisiondetection = true, - }) -end - -function tnt.burn(pos, nodename) - local name = nodename or minetest.get_node(pos).name - local def = minetest.registered_nodes[name] - if not def then - return - elseif def.on_ignite then - def.on_ignite(pos) - elseif minetest.get_item_group(name, "tnt") > 0 then - minetest.sound_play("tnt_ignite", {pos = pos}) - minetest.set_node(pos, {name = name .. "_burning"}) - minetest.get_node_timer(pos):start(1) - end -end - -local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) - pos = vector.round(pos) - -- scan for adjacent TNT nodes first, and enlarge the explosion - local vm1 = VoxelManip() - local p1 = vector.subtract(pos, 2) - local p2 = vector.add(pos, 2) - local minp, maxp = vm1:read_from_map(p1, p2) - local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm1:get_data() - local count = 0 - local c_tnt = minetest.get_content_id("tnt:tnt") - local c_tnt_burning = minetest.get_content_id("tnt:tnt_burning") - local c_tnt_boom = minetest.get_content_id("tnt:boom") - local c_air = minetest.get_content_id("air") - - for z = pos.z - 2, pos.z + 2 do - for y = pos.y - 2, pos.y + 2 do - local vi = a:index(pos.x - 2, y, z) - for x = pos.x - 2, pos.x + 2 do - local cid = data[vi] - if cid == c_tnt or cid == c_tnt_boom or cid == c_tnt_burning then - count = count + 1 - data[vi] = c_air - end - vi = vi + 1 - end - end - end - - vm1:set_data(data) - vm1:write_to_map() - - -- recalculate new radius - radius = math.floor(radius * math.pow(count, 1/3)) - - -- perform the explosion - local vm = VoxelManip() - local pr = PseudoRandom(os.time()) - p1 = vector.subtract(pos, radius) - p2 = vector.add(pos, radius) - minp, maxp = vm:read_from_map(p1, p2) - a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - data = vm:get_data() - - local drops = {} - local on_blast_queue = {} - local on_construct_queue = {} - basic_flame_on_construct = minetest.registered_nodes["fire:basic_flame"].on_construct - - local c_fire = minetest.get_content_id("fire:basic_flame") - for z = -radius, radius do - for y = -radius, radius do - local vi = a:index(pos.x + (-radius), pos.y + y, pos.z + z) - for x = -radius, radius do - local r = vector.length(vector.new(x, y, z)) - if (radius * radius) / (r * r) >= (pr:next(80, 125) / 100) then - local cid = data[vi] - local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z} - if cid ~= c_air then - data[vi] = destroy(drops, p, cid, c_air, c_fire, - on_blast_queue, on_construct_queue, - ignore_protection, ignore_on_blast) - end - end - vi = vi + 1 - end - end - end - - vm:set_data(data) - vm:write_to_map() - vm:update_map() - vm:update_liquids() - - -- call check_single_for_falling for everything within 1.5x blast radius - for y = -radius * 1.5, radius * 1.5 do - for z = -radius * 1.5, radius * 1.5 do - for x = -radius * 1.5, radius * 1.5 do - local rad = {x = x, y = y, z = z} - local s = vector.add(pos, rad) - local r = vector.length(rad) - if r / radius < 1.4 then - minetest.check_single_for_falling(s) - end - end - end - end - - for _, queued_data in pairs(on_blast_queue) do - local dist = math.max(1, vector.distance(queued_data.pos, pos)) - local intensity = (radius * radius) / (dist * dist) - local node_drops = queued_data.on_blast(queued_data.pos, intensity) - if node_drops then - for _, item in pairs(node_drops) do - add_drop(drops, item) - end - end - end - - for _, queued_data in pairs(on_construct_queue) do - queued_data.fn(queued_data.pos) - end - - return drops, radius -end - -function tnt.boom(pos, def) - minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64}) - minetest.set_node(pos, {name = "tnt:boom"}) - local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, - def.ignore_on_blast) - -- append entity drops - local damage_radius = (radius / def.radius) * def.damage_radius - entity_physics(pos, damage_radius, drops) - if not def.disable_drops then - eject_drops(drops, pos, radius) - end - add_effects(pos, radius, drops) - minetest.log("action", "A TNT explosion occurred at " .. minetest.pos_to_string(pos) .. - " with radius " .. radius) -end - -minetest.register_node("tnt:boom", { - drawtype = "airlike", - light_source = default.LIGHT_MAX, - walkable = false, - drop = "", - groups = {dig_immediate = 3}, - on_construct = function(pos) - minetest.get_node_timer(pos):start(0.4) - end, - on_timer = function(pos, elapsed) - minetest.remove_node(pos) - end, - -- unaffected by explosions - on_blast = function() end, -}) - -minetest.register_node("tnt:gunpowder", { - description = "Gun Powder", - drawtype = "raillike", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - tiles = { - "tnt_gunpowder_straight.png", - "tnt_gunpowder_curved.png", - "tnt_gunpowder_t_junction.png", - "tnt_gunpowder_crossing.png" - }, - inventory_image = "tnt_gunpowder_inventory.png", - wield_image = "tnt_gunpowder_inventory.png", - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - groups = {dig_immediate = 2, attached_node = 1, flammable = 5, - connect_to_raillike = minetest.raillike_group("gunpowder")}, - sounds = default.node_sound_leaves_defaults(), - - on_punch = function(pos, node, puncher) - if puncher:get_wielded_item():get_name() == "torches:torch" then - minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) - minetest.log("action", puncher:get_player_name() .. - " ignites tnt:gunpowder at " .. - minetest.pos_to_string(pos)) - end - end, - on_blast = function(pos, intensity) - minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) - end, - on_burn = function(pos) - minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) - end, - on_ignite = function(pos, igniter) - minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) - end, -}) - -minetest.register_node("tnt:gunpowder_burning", { - drawtype = "raillike", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - light_source = 5, - tiles = {{ - name = "tnt_gunpowder_burning_straight_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1, - } - }, - { - name = "tnt_gunpowder_burning_curved_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1, - } - }, - { - name = "tnt_gunpowder_burning_t_junction_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1, - } - }, - { - name = "tnt_gunpowder_burning_crossing_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1, - } - }}, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - drop = "", - groups = { - dig_immediate = 2, - attached_node = 1, - connect_to_raillike = minetest.raillike_group("gunpowder") - }, - sounds = default.node_sound_leaves_defaults(), - on_timer = function(pos, elapsed) - for dx = -1, 1 do - for dz = -1, 1 do - for dy = -1, 1 do - if not (dx == 0 and dz == 0) then - tnt.burn({ - x = pos.x + dx, - y = pos.y + dy, - z = pos.z + dz, - }) - end - end - end - end - minetest.remove_node(pos) - end, - -- unaffected by explosions - on_blast = function() end, - on_construct = function(pos) - minetest.sound_play("tnt_gunpowder_burning", {pos = pos, gain = 2}) - minetest.get_node_timer(pos):start(1) - end, -}) - -minetest.register_craft({ - output = "tnt:gunpowder 5", - type = "shapeless", - recipe = {"default:coal_lump", "default:gravel"} -}) - -if enable_tnt then - minetest.register_craft({ - output = "tnt:tnt", - recipe = { - {"group:wood", "tnt:gunpowder", "group:wood"}, - {"tnt:gunpowder", "tnt:gunpowder", "tnt:gunpowder"}, - {"group:wood", "tnt:gunpowder", "group:wood"} - } - }) - - minetest.register_abm({ - label = "TNT ignition", - nodenames = {"group:tnt", "tnt:gunpowder"}, - neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing"}, - interval = 4, - chance = 1, - action = function(pos, node) - tnt.burn(pos, node.name) - end, - }) -end - -function tnt.register_tnt(def) - local name - if not def.name:find(':') then - name = "tnt:" .. def.name - else - name = def.name - def.name = def.name:match(":([%w_]+)") - end - if not def.tiles then def.tiles = {} end - local tnt_top = def.tiles.top or def.name .. "_top.png" - local tnt_bottom = def.tiles.bottom or def.name .. "_bottom.png" - local tnt_side = def.tiles.side or def.name .. "_side.png" - local tnt_burning = def.tiles.burning or def.name .. "_top_burning_animated.png" - if not def.damage_radius then def.damage_radius = def.radius * 2 end - - if enable_tnt then - minetest.register_node(":" .. name, { - description = def.description, - tiles = {tnt_top, tnt_bottom, tnt_side}, - is_ground_content = false, - groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, - sounds = default.node_sound_wood_defaults(), - on_punch = function(pos, node, puncher) - if puncher:get_wielded_item():get_name() == "torches:torch" then - minetest.set_node(pos, {name = name .. "_burning"}) - minetest.log("action", puncher:get_player_name() .. - " ignites " .. node.name .. " at " .. - minetest.pos_to_string(pos)) - end - end, - on_blast = function(pos, intensity) - minetest.after(0.1, function() - tnt.boom(pos, def) - end) - end, - mesecons = {effector = - {action_on = - function(pos) - tnt.boom(pos, def) - end - } - }, - on_burn = function(pos) - minetest.set_node(pos, {name = name .. "_burning"}) - end, - on_ignite = function(pos, igniter) - minetest.set_node(pos, {name = name .. "_burning"}) - end, - }) - end - - minetest.register_node(":" .. name .. "_burning", { - tiles = { - { - name = tnt_burning, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1, - } - }, - tnt_bottom, tnt_side - }, - light_source = 5, - drop = "", - sounds = default.node_sound_wood_defaults(), - groups = {falling_node = 1}, - on_timer = function(pos, elapsed) - tnt.boom(pos, def) - end, - -- unaffected by explosions - on_blast = function() end, - on_construct = function(pos) - minetest.sound_play("tnt_ignite", {pos = pos}) - minetest.get_node_timer(pos):start(4) - minetest.check_for_falling(pos) - end, - }) -end - -tnt.register_tnt({ - name = "tnt:tnt", - description = "TNT", - radius = tnt_radius, -}) diff --git a/mods/ITEMS/tnt/license.txt b/mods/ITEMS/tnt/license.txt deleted file mode 100644 index 210f2bd..0000000 --- a/mods/ITEMS/tnt/license.txt +++ /dev/null @@ -1,65 +0,0 @@ -License of source code ----------------------- - -The MIT License (MIT) -Copyright (C) 2014-2016 PilzAdam -Copyright (C) 2014-2016 ShadowNinja -Copyright (C) 2016 sofar (sofar@foo-projects.org) -Copyright (C) 2014-2016 Various Minetest developers and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or -substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -For more details: -https://opensource.org/licenses/MIT - - -Licenses of media (textures) ----------------------------- - -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -Copyright (C) 2014-2016 BlockMen -Copyright (C) 2014-2016 ShadowNinja -Copyright (C) 2015-2016 Wuzzy -Copyright (C) 2016 sofar (sofar@foo-projects.org) - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/ITEMS/tnt/textures/tnt_smoke.png b/mods/ITEMS/tnt/textures/tnt_smoke.png deleted file mode 100644 index 488b50f..0000000 Binary files a/mods/ITEMS/tnt/textures/tnt_smoke.png and /dev/null differ diff --git a/mods/ITEMS/tools/crafting.lua b/mods/ITEMS/tools/crafting.lua deleted file mode 100644 index f8a9c2e..0000000 --- a/mods/ITEMS/tools/crafting.lua +++ /dev/null @@ -1,252 +0,0 @@ --- Tool Repair -minetest.register_craft({ - type = "toolrepair", - additional_wear = -0.02, -}) - -minetest.register_craft({ - output = 'tools:pick_wood', - recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'tools:pick_stone', - recipe = { - {'group:stone', 'group:stone', 'group:stone'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'tools:pick_steel', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'tools:pick_bronze', - recipe = { - {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'tools:pick_diamond', - recipe = { - {'default:diamond', 'default:diamond', 'default:diamond'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'tools:shovel_wood', - recipe = { - {'group:wood'}, - {'group:stick'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:shovel_stone', - recipe = { - {'group:stone'}, - {'group:stick'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:shovel_steel', - recipe = { - {'default:steel_ingot'}, - {'group:stick'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:shovel_bronze', - recipe = { - {'default:bronze_ingot'}, - {'group:stick'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:shovel_diamond', - recipe = { - {'default:diamond'}, - {'group:stick'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_wood', - recipe = { - {'group:wood', 'group:wood'}, - {'group:wood', 'group:stick'}, - {'', 'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_stone', - recipe = { - {'group:stone', 'group:stone'}, - {'group:stone', 'group:stick'}, - {'', 'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_steel', - recipe = { - {'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'group:stick'}, - {'', 'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_bronze', - recipe = { - {'default:bronze_ingot', 'default:bronze_ingot'}, - {'default:bronze_ingot', 'group:stick'}, - {'', 'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_diamond', - recipe = { - {'default:diamond', 'default:diamond'}, - {'default:diamond', 'group:stick'}, - {'', 'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_wood', - recipe = { - {'group:wood', 'group:wood'}, - {'group:stick', 'group:wood'}, - {'group:stick',''}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_stone', - recipe = { - {'group:stone', 'group:stone'}, - {'group:stick', 'group:stone'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_steel', - recipe = { - {'default:steel_ingot', 'default:steel_ingot'}, - {'group:stick', 'default:steel_ingot'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_bronze', - recipe = { - {'default:bronze_ingot', 'default:bronze_ingot'}, - {'group:stick', 'default:bronze_ingot'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'tools:axe_diamond', - recipe = { - {'default:diamond', 'default:diamond'}, - {'group:stick', 'default:diamond'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'tools:sword_wood', - recipe = { - {'group:wood'}, - {'group:wood'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:sword_stone', - recipe = { - {'group:stone'}, - {'group:stone'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:sword_steel', - recipe = { - {'default:steel_ingot'}, - {'default:steel_ingot'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:sword_bronze', - recipe = { - {'default:bronze_ingot'}, - {'default:bronze_ingot'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:sword_diamond', - recipe = { - {'default:diamond'}, - {'default:diamond'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'tools:skeleton_key', - recipe = { - {'default:gold_ingot'}, - } -}) - -minetest.register_craft({ - type = 'cooking', - output = 'default:gold_ingot', - recipe = 'tools:key', - cooktime = 5, -}) - -minetest.register_craft({ - type = 'cooking', - output = 'default:gold_ingot', - recipe = 'tools:skeleton_key', - cooktime = 5, -}) - diff --git a/mods/ITEMS/tools/init.lua b/mods/ITEMS/tools/init.lua deleted file mode 100755 index 854abe6..0000000 --- a/mods/ITEMS/tools/init.lua +++ /dev/null @@ -1,423 +0,0 @@ ---[[ - Tools ---]] - --- The hand -minetest.register_item(":", { - type = "none", - wield_image = "wieldhand.png", - wield_scale = {x=1,y=1,z=2.5}, - tool_capabilities = { - full_punch_interval = 0.9, - max_drop_level = 0, - groupcaps = { - crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1}, - snappy = {times={[3]=0.40}, uses=0, maxlevel=1}, - oddly_breakable_by_hand = {times={[1]=3.50,[2]=2.00,[3]=0.70}, uses=0} - }, - damage_groups = {fleshy=1}, - } -}) - --- --- Picks --- - -minetest.register_tool("tools:pick_wood", { - description = "Wooden Pickaxe", - inventory_image = "tools_woodpick.png", - tool_capabilities = { - full_punch_interval = 1.2, - max_drop_level=0, - groupcaps={ - cracky = {times={[3]=1.60}, uses=10, maxlevel=1}, - }, - damage_groups = {fleshy=2}, - }, - groups = {flammable = 2}, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:pick_stone", { - description = "Stone Pickaxe", - inventory_image = "tools_stonepick.png", - tool_capabilities = { - full_punch_interval = 1.3, - max_drop_level=0, - groupcaps={ - cracky = {times={[2]=2.0, [3]=1.00}, uses=20, maxlevel=1}, - }, - damage_groups = {fleshy=3}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:pick_steel", { - description = "Steel Pickaxe", - inventory_image = "tools_steelpick.png", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=1, - groupcaps={ - cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=20, maxlevel=2}, - }, - damage_groups = {fleshy=4}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:pick_bronze", { - description = "Bronze Pickaxe", - inventory_image = "tools_bronzepick.png", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=1, - groupcaps={ - cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=30, maxlevel=2}, - }, - damage_groups = {fleshy=4}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:pick_diamond", { - description = "Diamond Pickaxe", - inventory_image = "tools_diamondpick.png", - tool_capabilities = { - full_punch_interval = 0.9, - max_drop_level=3, - groupcaps={ - cracky = {times={[1]=2.0, [2]=1.0, [3]=0.50}, uses=30, maxlevel=3}, - }, - damage_groups = {fleshy=5}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - --- --- Shovels --- - -minetest.register_tool("tools:shovel_wood", { - description = "Wooden Shovel", - inventory_image = "tools_woodshovel.png", - wield_image = "tools_woodshovel.png^[transformR90", - tool_capabilities = { - full_punch_interval = 1.2, - max_drop_level=0, - groupcaps={ - crumbly = {times={[1]=3.00, [2]=1.60, [3]=0.60}, uses=10, maxlevel=1}, - }, - damage_groups = {fleshy=2}, - }, - groups = {flammable = 2}, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:shovel_stone", { - description = "Stone Shovel", - inventory_image = "tools_stoneshovel.png", - wield_image = "tools_stoneshovel.png^[transformR90", - tool_capabilities = { - full_punch_interval = 1.4, - max_drop_level=0, - groupcaps={ - crumbly = {times={[1]=1.80, [2]=1.20, [3]=0.50}, uses=20, maxlevel=1}, - }, - damage_groups = {fleshy=2}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:shovel_steel", { - description = "Steel Shovel", - inventory_image = "tools_steelshovel.png", - wield_image = "tools_steelshovel.png^[transformR90", - tool_capabilities = { - full_punch_interval = 1.1, - max_drop_level=1, - groupcaps={ - crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=30, maxlevel=2}, - }, - damage_groups = {fleshy=3}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:shovel_bronze", { - description = "Bronze Shovel", - inventory_image = "tools_bronzeshovel.png", - wield_image = "tools_bronzeshovel.png^[transformR90", - tool_capabilities = { - full_punch_interval = 1.1, - max_drop_level=1, - groupcaps={ - crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=40, maxlevel=2}, - }, - damage_groups = {fleshy=3}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:shovel_diamond", { - description = "Diamond Shovel", - inventory_image = "tools_diamondshovel.png", - wield_image = "tools_diamondshovel.png^[transformR90", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=1, - groupcaps={ - crumbly = {times={[1]=1.10, [2]=0.50, [3]=0.30}, uses=30, maxlevel=3}, - }, - damage_groups = {fleshy=4}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - --- --- Axes --- - -minetest.register_tool("tools:axe_wood", { - description = "Wooden Axe", - inventory_image = "tools_woodaxe.png", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=0, - groupcaps={ - choppy = {times={[2]=3.00, [3]=1.60}, uses=10, maxlevel=1}, - }, - damage_groups = {fleshy=2}, - }, - groups = {flammable = 2}, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:axe_stone", { - description = "Stone Axe", - inventory_image = "tools_stoneaxe.png", - tool_capabilities = { - full_punch_interval = 1.2, - max_drop_level=0, - groupcaps={ - choppy={times={[1]=3.00, [2]=2.00, [3]=1.30}, uses=20, maxlevel=1}, - }, - damage_groups = {fleshy=3}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:axe_steel", { - description = "Steel Axe", - inventory_image = "tools_steelaxe.png", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=1, - groupcaps={ - choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=20, maxlevel=2}, - }, - damage_groups = {fleshy=4}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:axe_bronze", { - description = "Bronze Axe", - inventory_image = "tools_bronzeaxe.png", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=1, - groupcaps={ - choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=30, maxlevel=2}, - }, - damage_groups = {fleshy=4}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:axe_diamond", { - description = "Diamond Axe", - inventory_image = "tools_diamondaxe.png", - tool_capabilities = { - full_punch_interval = 0.9, - max_drop_level=1, - groupcaps={ - choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=2}, - }, - damage_groups = {fleshy=7}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - --- --- Swords --- - -minetest.register_tool("tools:sword_wood", { - description = "Wooden Sword", - inventory_image = "tools_woodsword.png", - tool_capabilities = { - full_punch_interval = 1, - max_drop_level=0, - groupcaps={ - snappy={times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1}, - }, - damage_groups = {fleshy=2}, - }, - groups = {flammable = 2}, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:sword_stone", { - description = "Stone Sword", - inventory_image = "tools_stonesword.png", - tool_capabilities = { - full_punch_interval = 1.2, - max_drop_level=0, - groupcaps={ - snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1}, - }, - damage_groups = {fleshy=4}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:sword_steel", { - description = "Steel Sword", - inventory_image = "tools_steelsword.png", - tool_capabilities = { - full_punch_interval = 0.8, - max_drop_level=1, - groupcaps={ - snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2}, - }, - damage_groups = {fleshy=6}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:sword_bronze", { - description = "Bronze Sword", - inventory_image = "tools_bronzesword.png", - tool_capabilities = { - full_punch_interval = 0.8, - max_drop_level=1, - groupcaps={ - snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=40, maxlevel=2}, - }, - damage_groups = {fleshy=6}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:sword_diamond", { - description = "Diamond Sword", - inventory_image = "tools_diamondsword.png", - tool_capabilities = { - full_punch_interval = 0.7, - max_drop_level=1, - groupcaps={ - snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3}, - }, - damage_groups = {fleshy=8}, - }, - sound = {breaks = "default_tool_breaks"}, -}) - -minetest.register_tool("tools:key", { - description = "Key", - inventory_image = "tools_key.png", - groups = {key = 1, not_in_creative_inventory = 1}, - stack_max = 1, - on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if def and def.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - if pointed_thing.type ~= "node" then - return itemstack - end - - local pos = pointed_thing.under - node = minetest.get_node(pos) - - if not node or node.name == "ignore" then - return itemstack - end - - local ndef = minetest.registered_nodes[node.name] - if not ndef then - return itemstack - end - - local on_key_use = ndef.on_key_use - if on_key_use then - on_key_use(pos, placer) - end - - return nil - end -}) - -minetest.register_craftitem("tools:skeleton_key", { - description = "Skeleton Key", - inventory_image = "tools_key_skeleton.png", - groups = {key = 1}, - on_use = function(itemstack, user, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - local pos = pointed_thing.under - local node = minetest.get_node(pos) - - if not node then - return itemstack - end - - local on_skeleton_key_use = minetest.registered_nodes[node.name].on_skeleton_key_use - if not on_skeleton_key_use then - return itemstack - end - - -- make a new key secret in case the node callback needs it - local random = math.random - local newsecret = string.format( - "%04x%04x%04x%04x", - random(2^16) - 1, random(2^16) - 1, - random(2^16) - 1, random(2^16) - 1) - - local secret, _, _ = on_skeleton_key_use(pos, user, newsecret) - - if secret then - local inv = minetest.get_inventory({type="player", name=user:get_player_name()}) - - -- update original itemstack - itemstack:take_item() - - -- finish and return the new key - local new_stack = ItemStack("tools:key") - local meta = new_stack:get_meta() - meta:set_string("secret", secret) - meta:set_string("description", "Key to "..user:get_player_name().."'s " - ..minetest.registered_nodes[node.name].description) - - if itemstack:get_count() == 0 then - itemstack = new_stack - else - if inv:add_item("main", new_stack):get_count() > 0 then - minetest.add_item(user:getpos(), new_stack) - end -- else: added to inventory successfully - end - - return itemstack - end - end -}) - -dofile(minetest.get_modpath("tools").."/crafting.lua") - diff --git a/mods/ITEMS/tools/mod.conf b/mods/ITEMS/tools/mod.conf deleted file mode 100644 index 5883090..0000000 --- a/mods/ITEMS/tools/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = tools diff --git a/mods/ITEMS/torches/LICENSE.txt b/mods/ITEMS/torches/LICENSE.txt deleted file mode 100644 index 4362b49..0000000 --- a/mods/ITEMS/torches/LICENSE.txt +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser 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 Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey 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) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/mods/ITEMS/torches/README.txt b/mods/ITEMS/torches/README.txt deleted file mode 100644 index a463b56..0000000 --- a/mods/ITEMS/torches/README.txt +++ /dev/null @@ -1,62 +0,0 @@ -Minetest mod "Torches" -====================== - -(c) Copyright BlockMen (2013-2015) -(C) Copyright sofar (2016) - - -About this mod: -~~~~~~~~~~~~~~~ -This mod changes the default torch drawtype from "torchlike" to "mesh", -giving the torch a three dimensional appearance. The mesh contains the -proper pixel mapping to make the animation appear as a particle above -the torch, while in fact the animation is just the texture of the mesh. - -Originally, this mod created in-game alternatives with several -draw styles. The alternatives have been removed and instead of -providing alternate nodes, this mod now directly modifies the existing -nodes. Conversion from the wallmounted style is done through an LBM. - -The wield light part is inspired, but not copied from "walking light", -a mod by "echo". After looking at the code I decided to implement -it from scratch as I found it to be too resource intensive and not -implemented efficiently enough. Still, echo deserves the credit for -the excellent idea. - -Torches is meant for minetest-0.4.14, and does not directly support -older minetest releases. You'll need a recent git, or nightly build. - - -License: -~~~~~~~~ -(c) Copyright BlockMen (2013-2015) - -Textures and Meshes/Models: -CC-BY 3.0 BlockMen -Note that the models were entirely done from scratch by sofar. - -Code: -Licensed under the GNU LGPL version 2.1 or higher. -You can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License -as published by the Free Software Foundation; - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt - - -Github: -~~~~~~~ -https://github.com/BlockMen/torches - -Forum: -~~~~~~ -https://forum.minetest.net/viewtopic.php?id=6099 - - -Changelog: -~~~~~~~~~~ -see changelog.txt diff --git a/mods/ITEMS/torches/changelog.txt b/mods/ITEMS/torches/changelog.txt deleted file mode 100644 index cab14fd..0000000 --- a/mods/ITEMS/torches/changelog.txt +++ /dev/null @@ -1,37 +0,0 @@ -Changelog: ----------- -1.1 - 1.2.x: -- Torches on wall dont fall when node under it is dug -- Torches fall directly when not placed on floor or wall -- fixed different placing bugs - -1.3: -- Torches only show flames when player is near (13 blocks) -- Old torches are converted to new, ceiling torches are dropped - -1.3.1: -- fix dropping torches when digging a block next to it -- all torches attached to a block get droped when dug - -1.3.2: -- fix crashes by unknown nodes - -2.0: -- Use new mesh drawtype to improve wallmounted torches -- Update particle usage -- New textures; flame texture fix by Yepoleb -- Fix for doors, chests, etc (rightclick support) - -2.1 -- Fix wallmounted torch mesh -- Clean up code, use wallmounted paramtype2 -- Fix torches being placeable on ceilings (reported by kilbith) - -3.0 -- Minetest style added and used by default -- style can be changed via settings -- using Minetest style allows ceiling torches via settings -- Minetest style supports all texturepacks (as long torch shaped) - -3.0.1 -- Fix global variable that caused rarely placing issues (thanks to tchncs for pointing out) diff --git a/mods/ITEMS/torches/description.txt b/mods/ITEMS/torches/description.txt deleted file mode 100644 index 1ce04a3..0000000 --- a/mods/ITEMS/torches/description.txt +++ /dev/null @@ -1 +0,0 @@ -Mesh-based torches - three dimensional torches for minetest. diff --git a/mods/ITEMS/torches/init.lua b/mods/ITEMS/torches/init.lua deleted file mode 100644 index d74e91d..0000000 --- a/mods/ITEMS/torches/init.lua +++ /dev/null @@ -1,238 +0,0 @@ - ---[[ - 3d torch part ---]] - -minetest.register_node("torches:torch", { - description = "Torch", - drawtype = "mesh", - mesh = "torches_torch_floor.obj", - inventory_image = "torches_torch_on_floor.png", - wield_image = "torches_torch_on_floor.png", - tiles = {{ - name = "torches_torch_on_floor_animated.png", - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - }}, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = false, - liquids_pointable = false, - light_source = 13, - groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, - drop = "torches:torch", - selection_box = { - type = "wallmounted", - wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8}, - }, - sounds = default.node_sound_wood_defaults(), - on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if def and def.on_rightclick and - ((not placer) or (placer and not placer:get_player_control().sneak)) then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - - local above = pointed_thing.above - local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above)) - local fakestack = itemstack - if wdir == 0 then - fakestack:set_name("torches:torch_ceiling") - elseif wdir == 1 then - fakestack:set_name("torches:torch") - else - fakestack:set_name("torches:torch_wall") - end - - itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) - itemstack:set_name("torches:torch") - - return itemstack - end -}) - -minetest.register_node("torches:torch_wall", { - drawtype = "mesh", - mesh = "torches_torch_wall.obj", - tiles = {{ - name = "torches_torch_on_floor_animated.png", - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - }}, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = false, - light_source = 13, - groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, - drop = "torches:torch", - selection_box = { - type = "wallmounted", - wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8}, - }, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("torches:torch_ceiling", { - drawtype = "mesh", - mesh = "torches_torch_ceiling.obj", - tiles = {{ - name = "torches_torch_on_floor_animated.png", - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - }}, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = false, - light_source = 13, - groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, - drop = "torches:torch", - selection_box = { - type = "wallmounted", - wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8}, - }, - sounds = default.node_sound_wood_defaults(), -}) - - -minetest.register_craft({ - output = 'torches:torch 4', - recipe = { - {'default:coal_lump'}, - {'group:stick'}, - } -}) - - ---[[ - torch wield light ---]] - -if not minetest.is_yes(minetest.setting_get("torches_wieldlight_enable") or true) then - return -end -local torchlight_update_interval = minetest.setting_get("torches_wieldlight_interval") or 0.25 - -minetest.register_node("torches:torchlight", { - drawtype = "airlike", - groups = {not_in_creative_inventory = 1}, - walkable = false, - paramtype = "light", - sunlight_propagates = true, - light_source = 11, - pointable = false, - buildable_to = true, - drops = {}, -}) - --- state tables -local torchlight = {} -local playerlist = {} - -local function wields_torch(player) - if not player then - return false - end - local item = player:get_wielded_item() - if not item then - return false - end - return item:get_name() == "torches:torch" -end - -local function wielded_torch(name) - if not torchlight[name] then - return false - end - return true -end - -local function is_torchlight(pos) - local node = minetest.get_node(pos) - return node.name == "torches:torchlight" -end - -local function remove_torchlight(pos) - if is_torchlight(pos) then - minetest.swap_node(pos, {name = "air"}) - end -end - -local function place_torchlight(pos) - local name = minetest.get_node(pos).name - if name == "torches:torchlight" then - return true - end - if (minetest.get_node_light(pos) or 0) > 11 then - -- no reason to place torch here, so save a bunch - -- of node updates this way - return false - end - if name == "air" then - minetest.swap_node(pos, {name = "torches:torchlight"}) - return true - end - return false -end - -local function get_torchpos(player) - return vector.add({x = 0, y = 1, z = 0}, vector.round(player:getpos())) -end - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - playerlist[name] = true -end) - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - -- don't look at wielded() here, it's likely invalid - if torchlight[name] then - remove_torchlight(torchlight[name]) - torchlight[name] = nil - end - playerlist[name] = nil -end) - -minetest.register_on_shutdown(function() - for i, _ in pairs(torchlight) do - remove_torchlight(torchlight[i]) - end -end) - -local function update_torchlight(dtime) - for name, _ in pairs(playerlist) do - local player = minetest.get_player_by_name(name) - local wielded = wielded_torch(name) - local wields = wields_torch(player) - - if not wielded and wields then - local torchpos = get_torchpos(player) - if place_torchlight(torchpos) then - torchlight[name] = vector.new(torchpos) - end - elseif wielded and not wields then - remove_torchlight(torchlight[name]) - torchlight[name] = nil - elseif wielded and wields then - local torchpos = get_torchpos(player) - if not vector.equals(torchpos, torchlight[name]) or - not is_torchlight(torchpos) then - if place_torchlight(torchpos) then - remove_torchlight(torchlight[name]) - torchlight[name] = vector.new(torchpos) - elseif vector.distance(torchlight[name], torchpos) > 2 then - -- player went into some node - remove_torchlight(torchlight[name]) - torchlight[name] = nil - end - end - end - end - minetest.after(torchlight_update_interval, update_torchlight) -end - -minetest.after(torchlight_update_interval, update_torchlight) - diff --git a/mods/ITEMS/torches/mod.conf b/mods/ITEMS/torches/mod.conf deleted file mode 100644 index b8c44b9..0000000 --- a/mods/ITEMS/torches/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = torches diff --git a/mods/ITEMS/torches/screenshot.png b/mods/ITEMS/torches/screenshot.png deleted file mode 100644 index 5c9f859..0000000 Binary files a/mods/ITEMS/torches/screenshot.png and /dev/null differ diff --git a/mods/ITEMS/torches/settingtypes.txt b/mods/ITEMS/torches/settingtypes.txt deleted file mode 100644 index 260110f..0000000 --- a/mods/ITEMS/torches/settingtypes.txt +++ /dev/null @@ -1,9 +0,0 @@ - -# Enable wielded torches to light the area around it as the player moves. This is -# somewhat resource intensive and may be disabled to reduce lag. -torches_wieldlight_enable (Enable held torch to emit light) bool true - -# How often the wieldlight should be moved if the player moves with a torch in their -# hand. Reducing this makes it feel more laggy, but reduces the amount of network -# packets sent to clients. -torches_wieldlight_interval (Torch light from held torch update interval) float 0.25 diff --git a/mods/ITEMS/trunks/crafting.lua b/mods/ITEMS/trunks/crafting.lua deleted file mode 100644 index 02f3991..0000000 --- a/mods/ITEMS/trunks/crafting.lua +++ /dev/null @@ -1,133 +0,0 @@ --- Code by Mossmanikin ------------------------------------------------------------------------------------------------ --- TWiGS ------------------------------------------------------------------------------------------------ -minetest.register_craft({ -- *leaves --> twigs - output = "trunks:twig_1 2", - recipe = {{"group:leafdecay"}} -}) -if minetest.get_modpath("moretrees") ~= nil then -minetest.register_craft({ -- moretrees_leaves --> twigs - output = "trunks:twig_1 2", - recipe = {{"group:moretrees_leaves"}} -}) -minetest.register_craft({ -- except moretrees:palm_leaves - output = "moretrees:palm_leaves", - recipe = {{"moretrees:palm_leaves"}} -}) -end -if minetest.get_modpath("bushes") ~= nil then -minetest.register_craft({ -- BushLeaves --> twigs - output = "trunks:twig_1 2", - recipe = {{"bushes:BushLeaves1"}} -}) -minetest.register_craft({ - output = "trunks:twig_1 2", - recipe = {{"bushes:BushLeaves2"}} -}) -minetest.register_craft({ -- bushbranches --> twigs - output = "trunks:twig_1 4", - recipe = {{"bushes:bushbranches1"}} -}) -minetest.register_craft({ - output = "trunks:twig_1 4", - recipe = {{"bushes:bushbranches2"}} -}) -minetest.register_craft({ - output = "trunks:twig_1 4", - recipe = {{"bushes:bushbranches2a"}} -}) -minetest.register_craft({ - output = "trunks:twig_1 4", - recipe = {{"bushes:bushbranches3"}} -}) -end -minetest.register_craft({ -- twigs block --> twigs - output = "trunks:twig_1 8", - recipe = {{"trunks:twigs"}} -}) -minetest.register_craft({ -- twigs_slab --> twigs - output = "trunks:twig_1 4", - recipe = {{"trunks:twigs_slab"}} -}) -minetest.register_craft({ -- twigs_roof --> twigs - output = "trunks:twig_1 4", - recipe = {{"trunks:twigs_roof"}} -}) -minetest.register_craft({ -- twigs_roof_corner --> twigs - output = "trunks:twig_1 3", - recipe = {{"trunks:twigs_roof_corner"}} -}) -minetest.register_craft({ -- twigs_roof_corner_2 --> twigs - output = "trunks:twig_1 3", - recipe = {{"trunks:twigs_roof_corner_2"}} -}) ------------------------------------------------------------------------------------------------ --- STiCK ------------------------------------------------------------------------------------------------ -minetest.register_craft({ -- twig --> stick - output = "default:stick", - recipe = {{"trunks:twig_1"}} -}) - ------------------------------------------------------------------------------------------------ --- TWiGS BLoCK ------------------------------------------------------------------------------------------------ -minetest.register_craft({ -- twigs --> twigs block - output = "trunks:twigs", - recipe = { - {"trunks:twig_1","trunks:twig_1","trunks:twig_1"}, - {"trunks:twig_1", "" ,"trunks:twig_1"}, - {"trunks:twig_1","trunks:twig_1","trunks:twig_1"}, - } -}) - ------------------------------------------------------------------------------------------------ --- TWiGS SLaBS ------------------------------------------------------------------------------------------------ -minetest.register_craft({ -- twigs blocks --> twigs_slabs - output = "trunks:twigs_slab 6", - recipe = { - {"trunks:twigs","trunks:twigs","trunks:twigs"}, - } -}) - ------------------------------------------------------------------------------------------------ --- TWiGS RooFS ------------------------------------------------------------------------------------------------ -minetest.register_craft({ -- twigs blocks --> twigs_roofs - output = "trunks:twigs_roof 4", - recipe = { - {"trunks:twigs",""}, - {"","trunks:twigs"}, - } -}) -minetest.register_craft({ - output = "trunks:twigs_roof 4", - recipe = { - {"","trunks:twigs"}, - {"trunks:twigs",""}, - } -}) - ------------------------------------------------------------------------------------------------ --- TWiGS RooF CoRNeRS ------------------------------------------------------------------------------------------------ -minetest.register_craft({ -- twigs blocks --> twigs_roof_corners - output = "trunks:twigs_roof_corner 8", - recipe = { - { "" ,"trunks:twigs", "" }, - {"trunks:twigs", "" ,"trunks:twigs"}, - } -}) - ------------------------------------------------------------------------------------------------ --- TWiGS RooF CoRNeRS 2 ------------------------------------------------------------------------------------------------ -minetest.register_craft({ -- twigs blocks --> twigs_roof_corner_2's - output = "trunks:twigs_roof_corner_2 8", - recipe = { - {"trunks:twigs", "" ,"trunks:twigs"}, - { "" ,"trunks:twigs", "" }, - } -}) \ No newline at end of file diff --git a/mods/ITEMS/trunks/depends.txt b/mods/ITEMS/trunks/depends.txt deleted file mode 100644 index 654b14b..0000000 --- a/mods/ITEMS/trunks/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -biome_lib -plantlife_i18n -default -ferns? -australia? diff --git a/mods/ITEMS/trunks/generating.lua b/mods/ITEMS/trunks/generating.lua deleted file mode 100644 index 09e08b2..0000000 --- a/mods/ITEMS/trunks/generating.lua +++ /dev/null @@ -1,401 +0,0 @@ --- Code by Mossmanikin, Neuromancer, and others - -local function clone_node(name) - local node2 = {} - local node = minetest.registered_nodes[name] - for k,v in pairs(node) do - node2[k]=v - end - return node2 -end - ------------------------------------------------------------------------------------------------ --- TWiGS ------------------------------------------------------------------------------------------------ - -abstract_trunks.place_twig = function(pos) - 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 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.set_node(right_here, {name="trunks:twig_"..math.random(1,4), param2=math.random(0,3)}) - end --- big twigs - if Big_Twigs == true then --- big twig 1 - if twig_size == 17 then - if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z+1}).name].buildable_to - or minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name].buildable_to) then - - if minetest.registered_nodes[node_here.name].buildable_to then - minetest.set_node(right_here, {name="trunks:twig_5"}) - end - if minetest.registered_nodes[node_n_e.name].buildable_to then - minetest.set_node(north_east, {name="trunks:twig_7"}) - end - if minetest.registered_nodes[node_east.name].buildable_to then - minetest.set_node(east, {name="trunks:twig_8"}) - end - end - elseif twig_size == 18 then - if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name].buildable_to - or minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name].buildable_to) then - - if minetest.registered_nodes[node_here.name].buildable_to then - minetest.set_node(right_here, {name="trunks:twig_5", param2=1}) - end - if minetest.registered_nodes[node_s_e.name].buildable_to then - minetest.set_node(south_east, {name="trunks:twig_7", param2=1}) - end - if minetest.registered_nodes[node_south.name].buildable_to then - minetest.set_node(south, {name="trunks:twig_8", param2=1}) - end - end - elseif twig_size == 19 then - if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name].buildable_to - or minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name].buildable_to) then - - if minetest.registered_nodes[node_here.name].buildable_to then - minetest.set_node(right_here, {name="trunks:twig_5", param2=2}) - end - if minetest.registered_nodes[node_s_w.name].buildable_to then - minetest.set_node(south_west, {name="trunks:twig_7", param2=2}) - end - if minetest.registered_nodes[node_west.name].buildable_to then - minetest.set_node(west, {name="trunks:twig_8", param2=2}) - end - end - elseif twig_size == 20 then - if not (minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z+1}).name].buildable_to - or minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name].buildable_to) then - - if minetest.registered_nodes[node_here.name].buildable_to then - minetest.set_node(right_here, {name="trunks:twig_5", param2=3}) - end - if minetest.registered_nodes[node_n_w.name].buildable_to then - minetest.set_node(north_west, {name="trunks:twig_7", param2=3}) - end - if minetest.registered_nodes[node_north.name].buildable_to then - minetest.set_node(north, {name="trunks:twig_8", param2=3}) - end - end --- big twig 2 - elseif twig_size == 21 then - if not (minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name].buildable_to - or minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z+1}).name].buildable_to) then - - if minetest.registered_nodes[node_here.name].buildable_to then - minetest.set_node(right_here, {name="trunks:twig_9"}) - end - if minetest.registered_nodes[node_north.name].buildable_to then - minetest.set_node(north, {name="trunks:twig_10"}) - end - if minetest.registered_nodes[node_n_e.name].buildable_to then - minetest.set_node(north_east, {name="trunks:twig_11"}) - end - end - elseif twig_size == 22 then - if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name].buildable_to - or minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name].buildable_to) then - - if minetest.registered_nodes[node_here.name].buildable_to then - minetest.set_node(right_here, {name="trunks:twig_9", param2=1}) - end - if minetest.registered_nodes[node_east.name].buildable_to then - minetest.set_node(east, {name="trunks:twig_10", param2=1}) - end - if minetest.registered_nodes[node_s_e.name].buildable_to then - minetest.set_node(south_east, {name="trunks:twig_11", param2=1}) - end - end - elseif twig_size == 23 then - if not (minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name].buildable_to - or minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z-1}).name].buildable_to) then - - if minetest.registered_nodes[node_here.name].buildable_to then - minetest.set_node(right_here, {name="trunks:twig_9", param2=2}) - end - if minetest.registered_nodes[node_south.name].buildable_to then - minetest.set_node(south, {name="trunks:twig_10", param2=2}) - end - if minetest.registered_nodes[node_s_w.name].buildable_to then - minetest.set_node(south_west, {name="trunks:twig_11", param2=2}) - end - end - elseif twig_size == 24 then - if not (minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name].buildable_to - or minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z+1}).name].buildable_to) then - - if minetest.registered_nodes[node_here.name].buildable_to then - minetest.set_node(right_here, {name="trunks:twig_9", param2=3}) - end - if minetest.registered_nodes[node_west.name].buildable_to then - minetest.set_node(west, {name="trunks:twig_10", param2=3}) - end - if minetest.registered_nodes[node_n_w.name].buildable_to then - minetest.set_node(north_west, {name="trunks:twig_11", param2=3}) - end - end - elseif twig_size <= 25 then - minetest.set_node(right_here, {name="trunks:twig_"..math.random(12,13), param2=math.random(0,3)}) - end - end -end - -if Twigs_on_ground == true then -biome_lib:register_generate_plant({ - surface = {"default:dirt_with_grass", "default:dirt_with_dry_grass"}, - max_count = Twigs_on_ground_Max_Count, - rarity = Twigs_on_ground_Rarity, - min_elevation = 4, - max_elevation = 40, - near_nodes = { - "australia:black_box_tree", - "australia:blue_gum_tree", - "australia:daintree_stringybark_tree", - "australia:jarrah_tree", - "australia:karri_tree", - "australia:karri_tree", - "australia:river_red_gum_tree", - "australia:swamp_gum_tree", - "australia:white_box_tree" - }, - near_nodes_size = 3, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_trunks.place_twig -) -end - -if Twigs_on_water == true then -biome_lib:register_generate_plant({ - surface = {"default:water_source"}, - max_count = Twigs_on_water_Max_Count, - rarity = Twigs_on_water_Rarity, - min_elevation = 1, - max_elevation = 40, - near_nodes = {"group:tree"}, - near_nodes_size = 3, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_trunks.place_twig -) -end - - - ------------------------------------------------------------------------------------------------ --- MoSS & FuNGuS -- on ground ------------------------------------------------------------------------------------------------ -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) - - if moss_type == 1 then - minetest.set_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3)}) - else - minetest.set_node(on_ground, {name="trunks:moss", param2=math.random(0,3)}) - end - -end - -biome_lib:register_generate_plant({ - surface = {"default:dirt_with_grass"}, - max_count = Moss_on_ground_Max_Count, - rarity = Moss_on_ground_Rarity, - min_elevation = 30, - max_elevation = 110, - near_nodes = { - "australia:celery_top_pine_tree", - "australia:huon_pine_tree", - "australia:southern_sassafras_tree", - "australia:swamp_gum_tree", - "australia:tasmanian_myrtle_tree" - }, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_trunks.grow_moss_on_ground -) -end - ------------------------------------------------------------------------------------------------ --- MoSS & FuNGuS -- on trunks ------------------------------------------------------------------------------------------------ -if Moss_on_trunk == true then -abstract_trunks.grow_moss_on_trunk = function(pos) - local on_ground = {x=pos.x, y=pos.y+1, z=pos.z} - local at_side_n = {x=pos.x, y=pos.y, z=pos.z+1} - local at_side_e = {x=pos.x+1, y=pos.y, z=pos.z} - local at_side_s = {x=pos.x, y=pos.y, z=pos.z-1} - local at_side_w = {x=pos.x-1, y=pos.y, z=pos.z} - local undrneath = {x=pos.x, y=pos.y-1, z=pos.z} - - local node_here = minetest.get_node(on_ground) - local node_north = minetest.get_node(at_side_n) - local node_east = minetest.get_node(at_side_e) - local node_south = minetest.get_node(at_side_s) - local node_west = minetest.get_node(at_side_w) - 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 moss_type == 1 then - minetest.set_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3) --[[1]]}) - elseif moss_type < 22 then - minetest.set_node(on_ground, {name="trunks:moss", param2=math.random(0,3) --[[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 moss_type == 1 then - minetest.set_node(at_side_n, {name="trunks:moss_fungus", param2=math.random(4,7)}) -- 5,4,6,7 - elseif moss_type < 22 then - minetest.set_node(at_side_n, {name="trunks:moss", param2=math.random(4,7)}) - 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 moss_type == 1 then - minetest.set_node(at_side_e, {name="trunks:moss_fungus", param2=math.random(12,15)}) - elseif moss_type < 22 then - minetest.set_node(at_side_e, {name="trunks:moss", param2=math.random(12,15)}) - 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 moss_type == 1 then - minetest.set_node(at_side_s, {name="trunks:moss_fungus", param2=math.random(8,11)}) - elseif moss_type < 22 then - minetest.set_node(at_side_s, {name="trunks:moss", param2=math.random(8,11)}) - 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 moss_type == 1 then - minetest.set_node(at_side_w, {name="trunks:moss_fungus", param2=math.random(16,19)}) - elseif moss_type < 22 then - minetest.set_node(at_side_w, {name="trunks:moss", param2=math.random(16,19)}) - end - end - --end -end - -biome_lib:register_generate_plant({ - surface = { - "australia:celery_top_pine_tree", - "australia:huon_pine_tree", - "australia:southern_sassafras_tree", - "australia:swamp_gum_tree", - "australia:tasmanian_myrtle_tree", - "default:mossycobble" - }, - max_count = Moss_on_trunk_Max_Count, - rarity = Moss_on_trunk_Rarity, - min_elevation = 50, - max_elevation = 70, - plantlife_limit = -0.9, - check_air = false, - }, - "abstract_trunks.grow_moss_on_trunk" -) -end - - - ------------------------------------------------------------------------------------------------ --- BoTTLeBRuSH oRCHiDS ------------------------------------------------------------------------------------------------ -if Bottlebrush_Orchid == true then -abstract_trunks.grow_bottlebrush_orchid = function(pos) - local on_ground = {x=pos.x, y=pos.y+1, z=pos.z} - - minetest.set_node(on_ground, {name="flowers:bottlebrush_orchid", param2=math.random(0,3)}) - -end - -biome_lib:register_generate_plant({ - surface = {"default:dirt_with_grass"}, - max_count = Bottlebrush_Orchid_Max_Count, - rarity = Bottlebrush_Orchid_Rarity, - min_elevation = 5, - max_elevation = 70, - near_nodes = { - "australia:fan_palm_tree", - "australia:merbau_tree" - }, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_trunks.grow_bottlebrush_orchid -) -end - - - ------------------------------------------------------------------------------------------------ --- MuSHRooMS ------------------------------------------------------------------------------------------------ -if Mushrooms == true then -abstract_trunks.grow_mushrooms = function(pos) - local on_ground = {x=pos.x, y=pos.y+1, z=pos.z} - local mushroom_type = math.random(1,4) - - if mushroom_type == 1 then - minetest.set_node(on_ground, {name="flowers:mushroom_red", param2=math.random(0,3)}) - else - minetest.set_node(on_ground, {name="flowers:mushroom_brown", param2=math.random(0,3)}) - end - -end - -biome_lib:register_generate_plant({ - surface = {"default:dirt_with_grass"}, - max_count = Mushrooms_Max_Count, - rarity = Mushrooms_Rarity, - min_elevation = 5, - max_elevation = 120, - near_nodes = { - "australia:celery_top_pine_tree", - "australia:huon_pine_tree", - "australia:swamp_gum_tree", - "australia:tasmanian_myrtle_tree" - }, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -0.9, - }, - abstract_trunks.grow_mushrooms -) -end - diff --git a/mods/ITEMS/trunks/init.lua b/mods/ITEMS/trunks/init.lua deleted file mode 100644 index 899f6a9..0000000 --- a/mods/ITEMS/trunks/init.lua +++ /dev/null @@ -1,20 +0,0 @@ ------------------------------------------------------------------------------------------------ -local title = "Trunks" -local version = "0.1.4" -local mname = "trunks" ------------------------------------------------------------------------------------------------ --- Code by Mossmanikin & Neuromancer - -abstract_trunks = {} - --- support for i18n -local S = plantlife_i18n.gettext - -dofile(minetest.get_modpath("trunks").."/trunks_settings.txt") -dofile(minetest.get_modpath("trunks").."/generating.lua") -dofile(minetest.get_modpath("trunks").."/nodes.lua") -dofile(minetest.get_modpath("trunks").."/crafting.lua") - ------------------------------------------------------------------------------------------------ -print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") ------------------------------------------------------------------------------------------------ diff --git a/mods/ITEMS/trunks/nodes.lua b/mods/ITEMS/trunks/nodes.lua deleted file mode 100644 index 304f865..0000000 --- a/mods/ITEMS/trunks/nodes.lua +++ /dev/null @@ -1,294 +0,0 @@ --- Code by Mossmanikin & Neuromancer --- support for i18n -local S = plantlife_i18n.gettext ------------------------------------------------------------------------------------------------ --- TWiGS ------------------------------------------------------------------------------------------------ --- For compatibility with older stuff -minetest.register_alias("trunks:twig", "trunks:twig_1") - -local flat_stick = {-1/2, -1/2, -1/2, 1/2, -7/16, 1/2} -local NoDe = { {1}, {2}, {3}, {4}, {5}, --[[{6},]] {7}, {8}, {9}, {10}, {11}, {12}, {13} } - - -for i in pairs(NoDe) do - local NR = NoDe[i][1] - local iNV = NR - 1 - minetest.register_node("trunks:twig_"..NR, { - description = S("Twig"), - inventory_image = "trunks_twig_"..NR..".png", - wield_image = "trunks_twig_"..NR..".png", - drawtype = "nodebox", - tiles = { - "trunks_twig_"..NR..".png", - "trunks_twig_"..NR..".png^[transformFY", -- mirror - "trunks_twig_6.png" -- empty - }, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - sunlight_propagates = true, - buildable_to = true, - node_box = {type = "fixed", fixed = flat_stick}, - groups = { - choppy=2, - oddly_breakable_by_hand=2, - flammable=3, - attached_node=1, - not_in_creative_inventory=iNV - }, - drop = "trunks:twig_1", - sounds = default.node_sound_leaves_defaults(), - liquids_pointable = true, - on_place = function(itemstack, placer, pointed_thing) - local pt = pointed_thing - local direction = minetest.dir_to_facedir(placer:get_look_dir()) - if minetest.get_node(pt.above).name=="air" then - minetest.set_node(pt.above, {name="trunks:twig_"..math.random(1,4), param2=direction}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end - end, - }) -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, - buildable_to = 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(), -}) - ------------------------------------------------------------------------------------------------ --- 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, - buildable_to = 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(), -}) - ------------------------------------------------------------------------------------------------ --- TWiGS BLoCK ------------------------------------------------------------------------------------------------ -minetest.register_alias("woodstuff:twigs", "trunks:twigs") - -minetest.register_node("trunks:twigs", { - description = S("Twigs Block"), - paramtype2 = "facedir", - tiles = {"trunks_twigs.png"}, - groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, - sounds = default.node_sound_wood_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- TWiGS SLaB ------------------------------------------------------------------------------------------------ -minetest.register_alias("woodstuff:twigs_slab", "trunks:twigs_slab") - -minetest.register_node("trunks:twigs_slab", { - description = S("Twigs Slab"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"trunks_twigs.png"}, - node_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, - }, - groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, - sounds = default.node_sound_wood_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- TWiGS RooF ------------------------------------------------------------------------------------------------ -minetest.register_alias("woodstuff:twigs_roof", "trunks:twigs_roof") - -minetest.register_node("trunks:twigs_roof", { - description = S("Twigs Roof"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"trunks_twigs.png"}, - node_box = { - type = "fixed", --- { left, bottom, front, right, top, back } - fixed = { - {-1/2, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, -1/2, -1/2, 1/2, 0, 0}, - } - }, - groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, - sounds = default.node_sound_wood_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- TWiGS RooF CoRNeR ------------------------------------------------------------------------------------------------ -minetest.register_alias("woodstuff:twigs_roof_corner", "trunks:twigs_roof_corner") - -minetest.register_node("trunks:twigs_roof_corner", { - description = S("Twigs Roof Corner 1"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = { - "trunks_twigs_corner.png", - "trunks_twigs_corner.png", - "trunks_twigs.png" - }, - node_box = { - type = "fixed", --- { left, bottom, front, right, top, back } - fixed = { - {-1/2, 0, 0, 0, 1/2, 1/2}, - {0, -1/2, 0, 1/2, 0, 1/2}, - {-1/2, -1/2, -1/2, 0, 0, 0}, - } - }, - groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, - sounds = default.node_sound_wood_defaults(), -}) - ------------------------------------------------------------------------------------------------ --- TWiGS RooF CoRNeR 2 ------------------------------------------------------------------------------------------------ -minetest.register_alias("woodstuff:twigs_roof_corner_2", "trunks:twigs_roof_corner_2") - -minetest.register_node("trunks:twigs_roof_corner_2", { - description = S("Twigs Roof Corner 2"), - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = { - "trunks_twigs_corner.png", - "trunks_twigs_corner.png", - "trunks_twigs.png" - }, - node_box = { - type = "fixed", --- { left, bottom, front, right, top, back } - fixed = { - {-1/2, -1/2, 0, 0, 0, 1/2}, - {0, 0, 0, 1/2, 1/2, 1/2}, - {-1/2, 0, -1/2, 0, 1/2, 0}, - } - }, - groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, - sounds = default.node_sound_wood_defaults(), -}) - -if Auto_Roof_Corner == true then - - local roof = "trunks:twigs_roof" - local corner = "trunks:twigs_roof_corner" - local corner_2 = "trunks:twigs_roof_corner_2" - - minetest.register_abm({ - nodenames = {roof}, - interval = 1, - chance = 1, - action = function(pos) - - local node_east = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z }) - local node_west = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z }) - local node_north = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) - local node_south = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) - -- corner 1 - if ((node_west.name == roof and node_west.param2 == 0) - or (node_west.name == corner and node_west.param2 == 1)) - and ((node_north.name == roof and node_north.param2 == 3) - or (node_north.name == corner and node_north.param2 == 3)) - then - minetest.set_node(pos, {name=corner, param2=0}) - end - - if ((node_north.name == roof and node_north.param2 == 1) - or (node_north.name == corner and node_north.param2 == 2)) - and ((node_east.name == roof and node_east.param2 == 0) - or (node_east.name == corner and node_east.param2 == 0)) - then - minetest.set_node(pos, {name=corner, param2=1}) - end - - if ((node_east.name == roof and node_east.param2 == 2) - or (node_east.name == corner and node_east.param2 == 3)) - and ((node_south.name == roof and node_south.param2 == 1) - or (node_south.name == corner and node_south.param2 == 1)) - then - minetest.set_node(pos, {name=corner, param2=2}) - end - - if ((node_south.name == roof and node_south.param2 == 3) - or (node_south.name == corner and node_south.param2 == 0)) - and ((node_west.name == roof and node_west.param2 == 2) - or (node_west.name == corner and node_west.param2 == 2)) - then - minetest.set_node(pos, {name=corner, param2=3}) - end - -- corner 2 - if ((node_west.name == roof and node_west.param2 == 2) - or (node_west.name == corner_2 and node_west.param2 == 1)) - and ((node_north.name == roof and node_north.param2 == 1) - or (node_north.name == corner_2 and node_north.param2 == 3)) - then - minetest.set_node(pos, {name=corner_2, param2=0}) - end - - if ((node_north.name == roof and node_north.param2 == 3) - or (node_north.name == corner_2 and node_north.param2 == 2)) - and ((node_east.name == roof and node_east.param2 == 2) - or (node_east.name == corner_2 and node_east.param2 == 0)) - then - minetest.set_node(pos, {name=corner_2, param2=1}) - end - - if ((node_east.name == roof and node_east.param2 == 0) - or (node_east.name == corner_2 and node_east.param2 == 3)) - and ((node_south.name == roof and node_south.param2 == 3) - or (node_south.name == corner_2 and node_south.param2 == 1)) - then - minetest.set_node(pos, {name=corner_2, param2=2}) - end - - if ((node_south.name == roof and node_south.param2 == 1) - or (node_south.name == corner_2 and node_south.param2 == 0)) - and ((node_west.name == roof and node_west.param2 == 0) - or (node_west.name == corner_2 and node_west.param2 == 2)) - then - minetest.set_node(pos, {name=corner_2, param2=3}) - end - - end, - }) -end - diff --git a/mods/ITEMS/trunks/trunks_settings.txt b/mods/ITEMS/trunks/trunks_settings.txt deleted file mode 100644 index 3d7ba91..0000000 --- a/mods/ITEMS/trunks/trunks_settings.txt +++ /dev/null @@ -1,29 +0,0 @@ --- Settings for generation of stuff (at map-generation time) - - -Big_Twigs = true -- twigs larger than one node -Twigs_on_ground = true -Twigs_on_ground_Max_Count = 640 -- absolute maximum number in an area of 80x80x80 nodes -Twigs_on_ground_Rarity = 66 -- larger values make twigs more rare (100 means chance of 0 %) - -Twigs_on_water = true -Twigs_on_water_Max_Count = 320 -- absolute maximum number in an area of 80x80x80 nodes -Twigs_on_water_Rarity = 33 -- larger values make twigs more rare (100 means chance of 0 %) - -Moss_on_ground = true -Moss_on_ground_Max_Count = 400 -- absolute maximum number in an area of 80x80x80 nodes -Moss_on_ground_Rarity = 79 -- larger values makes moss more rare (100 means chance of 0 %) - -Moss_on_trunk = true -Moss_on_trunk_Max_Count = 640 -- absolute maximum number in an area of 80x80x80 nodes -Moss_on_trunk_Rarity = 24 -- larger values makes moss more rare (100 means chance of 0 %) - -Auto_Roof_Corner = true -- behavior is similar (not the same!) to the one of minecraft stairs - -Bottlebrush_Orchid = true -Bottlebrush_Orchid_Max_Count = 64 -- absolute maximum number in an area of 80x80x80 nodes -Bottlebrush_Orchid_Rarity = 67 -- larger values makes moss more rare (100 means chance of 0 %) - -Mushrooms = true -Mushrooms_Max_Count = 400 -- absolute maximum number in an area of 80x80x80 nodes -Mushrooms_Rarity = 50 -- larger values makes moss more rare (100 means chance of 0 %) diff --git a/mods/ITEMS/vessels/depends.txt b/mods/ITEMS/vessels/depends.txt deleted file mode 100644 index aaeb4b6..0000000 --- a/mods/ITEMS/vessels/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -init -inventory -default diff --git a/mods/ITEMS/vessels/init.lua b/mods/ITEMS/vessels/init.lua deleted file mode 100644 index a31a4e8..0000000 --- a/mods/ITEMS/vessels/init.lua +++ /dev/null @@ -1,218 +0,0 @@ --- Minetest 0.4 mod: vessels --- See README.txt for licensing and other information. - -vessels = {} - -local vessels_shelf_formspec = - "size[8,7;]" .. - init.gui_bg .. - init.gui_bg_img .. - init.gui_slots .. - "list[context;vessels;0,0.3;8,2;]" .. - "list[current_player;main;0,2.85;8,1;]" .. - "list[current_player;main;0,4.08;8,3;8]" .. - "listring[context;vessels]" .. - "listring[current_player;main]" .. - init.get_hotbar_bg(0, 2.85) - -local function get_vessels_shelf_formspec(inv) - local formspec = vessels_shelf_formspec - local invlist = inv and inv:get_list("vessels") - -- Inventory slots overlay - local vx, vy = 0, 0.3 - for i = 1, 16 do - if i == 9 then - vx = 0 - vy = vy + 1 - end - if not invlist or invlist[i]:is_empty() then - formspec = formspec .. - "image[" .. vx .. "," .. vy .. ";1,1;vessels_shelf_slot.png]" - end - vx = vx + 1 - end - return formspec -end - -minetest.register_node("vessels:shelf", { - description = "Vessels Shelf", - tiles = {"default_wood.png", "default_wood.png", "default_wood.png", - "default_wood.png", "vessels_shelf.png", "vessels_shelf.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, - sounds = default.node_sound_wood_defaults(), - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_vessels_shelf_formspec(nil)) - local inv = meta:get_inventory() - inv:set_size("vessels", 8 * 2) - end, - can_dig = function(pos,player) - local inv = minetest.get_meta(pos):get_inventory() - return inv:is_empty("vessels") - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if minetest.get_item_group(stack:get_name(), "vessel") ~= 0 then - return stack:get_count() - end - return 0 - 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 vessels shelf at ".. minetest.pos_to_string(pos)) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory())) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " moves stuff to vessels shelf at ".. minetest.pos_to_string(pos)) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory())) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " takes stuff from vessels shelf at ".. minetest.pos_to_string(pos)) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory())) - end, - on_blast = function(pos) - local drops = {} - inventory.get_inventory_drops(pos, "vessels", drops) - drops[#drops + 1] = "vessels:shelf" - minetest.remove_node(pos) - return drops - end, -}) - -minetest.register_craft({ - output = "vessels:shelf", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:vessel", "group:vessel", "group:vessel"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -minetest.register_node("vessels:glass_bottle", { - description = "Glass Bottle (empty)", - drawtype = "plantlike", - tiles = {"vessels_glass_bottle.png"}, - inventory_image = "vessels_glass_bottle.png", - wield_image = "vessels_glass_bottle.png", - paramtype = "light", - is_ground_content = false, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_craft( { - output = "vessels:glass_bottle 10", - recipe = { - {"default:glass", "", "default:glass"}, - {"default:glass", "", "default:glass"}, - {"", "default:glass", ""} - } -}) - -minetest.register_node("vessels:drinking_glass", { - description = "Drinking Glass (empty)", - drawtype = "plantlike", - tiles = {"vessels_drinking_glass.png"}, - inventory_image = "vessels_drinking_glass_inv.png", - wield_image = "vessels_drinking_glass.png", - paramtype = "light", - is_ground_content = false, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_craft( { - output = "vessels:drinking_glass 14", - recipe = { - {"default:glass", "", "default:glass"}, - {"default:glass", "", "default:glass"}, - {"default:glass", "default:glass", "default:glass"} - } -}) - -minetest.register_node("vessels:steel_bottle", { - description = "Heavy Steel Bottle (empty)", - drawtype = "plantlike", - tiles = {"vessels_steel_bottle.png"}, - inventory_image = "vessels_steel_bottle.png", - wield_image = "vessels_steel_bottle.png", - paramtype = "light", - is_ground_content = false, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} - }, - groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, - sounds = default.node_sound_defaults(), -}) - -minetest.register_craft( { - output = "vessels:steel_bottle 5", - recipe = { - {"default:steel_ingot", "", "default:steel_ingot"}, - {"default:steel_ingot", "", "default:steel_ingot"}, - {"", "default:steel_ingot", ""} - } -}) - - --- Glass and steel recycling - -minetest.register_craftitem("vessels:glass_fragments", { - description = "Pile of Glass Fragments", - inventory_image = "vessels_glass_fragments.png", -}) - -minetest.register_craft( { - type = "shapeless", - output = "vessels:glass_fragments", - recipe = { - "vessels:glass_bottle", - "vessels:glass_bottle", - }, -}) - -minetest.register_craft( { - type = "shapeless", - output = "vessels:glass_fragments", - recipe = { - "vessels:drinking_glass", - "vessels:drinking_glass", - }, -}) - -minetest.register_craft({ - type = "cooking", - output = "default:glass", - recipe = "vessels:glass_fragments", -}) - -minetest.register_craft( { - type = "cooking", - output = "default:steel_ingot", - recipe = "vessels:steel_bottle", -}) - -minetest.register_craft({ - type = "fuel", - recipe = "vessels:shelf", - burntime = 30, -}) diff --git a/mods/ITEMS/walls/depends.txt b/mods/ITEMS/walls/depends.txt deleted file mode 100644 index 1e82165..0000000 --- a/mods/ITEMS/walls/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -australia diff --git a/mods/ITEMS/walls/init.lua b/mods/ITEMS/walls/init.lua deleted file mode 100644 index 9e651c5..0000000 --- a/mods/ITEMS/walls/init.lua +++ /dev/null @@ -1,135 +0,0 @@ ---[[ - Walls ---]] - -walls = {} - -walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sounds) - -- inventory node, and pole-type wall start item - minetest.register_node(wall_name, { - description = wall_desc, - drawtype = "nodebox", - node_box = { - type = "connected", - fixed = {{-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}}, - -- connect_bottom = - connect_front = {{-3/16, -1/2, -1/2, 3/16, 3/8, -1/4}}, - connect_left = {{-1/2, -1/2, -3/16, -1/4, 3/8, 3/16}}, - connect_back = {{-3/16, -1/2, 1/4, 3/16, 3/8, 1/2}}, - connect_right = {{ 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}}, - }, - connects_to = { "group:wall", "group:stone" }, - paramtype = "light", - is_ground_content = false, - tiles = { wall_texture, }, - walkable = true, - groups = { cracky = 3, wall = 1, stone = 2 }, - sounds = wall_sounds, - }) - - -- crafting recipe - minetest.register_craft({ - output = wall_name .. " 6", - recipe = { - { '', '', '' }, - { wall_mat, wall_mat, wall_mat}, - { wall_mat, wall_mat, wall_mat}, - } - }) - -end - - -walls.register("walls:basalt", "Basalt Wall", "aus_basalt.png", - "australia:basalt", default.node_sound_stone_defaults()) - -walls.register("walls:basalt_brick", "Basalt Brick Wall", "aus_basalt_brick.png", - "australia:basalt_brick", default.node_sound_stone_defaults()) - -walls.register("walls:basalt_cobble", "Basalt Cobble Wall", "aus_basalt_cobble.png", - "australia:basalt_cobble", default.node_sound_stone_defaults()) - -walls.register("walls:brick", "Brick Wall", "default_brick.png", - "default:brick", default.node_sound_stone_defaults()) - -walls.register("walls:cobble", "Cobblestone Wall", "default_cobble.png", - "default:cobble", default.node_sound_stone_defaults()) - -walls.register("walls:desert_sandstone", "Desert Sandstone Wall", "default_desert_sandstone.png", - "default:desert_sandstone", default.node_sound_stone_defaults()) - -walls.register("walls:desert_sandstone_brick", "Desert Sandstone Brick Wall", "default_desert_sandstone_brick.png", - "default:desert_sandstonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:diorite", "Diorite Wall", "aus_diorite.png", - "australia:diorite", default.node_sound_stone_defaults()) - -walls.register("walls:diorite_brick", "Diorite Brick Wall", "aus_diorite_brick.png", - "australia:diorite_brick", default.node_sound_stone_defaults()) - -walls.register("walls:diorite_cobble", "Diorite Cobble Wall", "aus_diorite_cobble.png", - "australia:diorite_cobble", default.node_sound_stone_defaults()) - -walls.register("walls:granite", "Granite Wall", "technic_granite.png", - "technic:granite", default.node_sound_stone_defaults()) - -walls.register("walls:granite_brick", "Granite Brick Wall", "technic_granite_brick.png", - "technic:granite_brick", default.node_sound_stone_defaults()) - -walls.register("walls:granite_cobble", "Granite Cobble Wall", "technic_granite_cobble.png", - "technic:granite_cobble", default.node_sound_stone_defaults()) - -walls.register("walls:limestone", "Limestone Wall", "aus_limestone.png", - "australia:limestone", default.node_sound_stone_defaults()) - -walls.register("walls:limestone_brick", "Limestone Brick Wall", "aus_limestone_brick.png", - "australia:limestone_brick", default.node_sound_stone_defaults()) - -walls.register("walls:limestone_cobble", "Limestone Cobble Wall", "aus_limestone_cobble.png", - "australia:limestone_cobble", default.node_sound_stone_defaults()) - -walls.register("walls:marble", "Marble Wall", "aus_marble.png", - "australia:marble", default.node_sound_stone_defaults()) - -walls.register("walls:marble_tile", "Marble Tile Wall", "aus_marble_tile.png", - "australia:marble_tile", default.node_sound_stone_defaults()) - -walls.register("walls:mossycobble", "Mossy Cobblestone Wall", "default_mossycobble.png", - "default:mossycobble", default.node_sound_stone_defaults()) - -walls.register("walls:red_sandstone", "Red Sandstone Wall", "aus_red_sandstone.png", - "australia:red_sandstone", default.node_sound_stone_defaults()) - -walls.register("walls:red_sandstone_brick", "Red Sandstone Brick Wall", "aus_red_sandstone_brick.png", - "australia:red_sandstonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:sandstone", "Sandstone Wall", "default_sandstone.png", - "default:sandstone", default.node_sound_stone_defaults()) - -walls.register("walls:sandstone_brick", "Sandstone Brick Wall", "default_sandstone_brick.png", - "default:sandstonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:sandstone_cobble", "Sandstone Cobble Wall", "aus_sandstone_cobble.png", - "australia:sandstone_cobble", default.node_sound_stone_defaults()) - -walls.register("walls:shale", "Shale Wall", "aus_shale.png", - "australia:shale", default.node_sound_stone_defaults()) - -walls.register("walls:slate", "Slate Wall", "aus_slate.png", - "australia:slate", default.node_sound_stone_defaults()) - -walls.register("walls:slate_brick", "Slate Brick Wall", "aus_slate_brick.png", - "australia:slate_brick", default.node_sound_stone_defaults()) - -walls.register("walls:slate_rubble", "Slate Rubble Wall", "aus_slate_rubble.png", - "australia:slate_rubble", default.node_sound_stone_defaults()) - -walls.register("walls:stone", "Stone Wall", "default_stone.png", - "default:stone", default.node_sound_stone_defaults()) - -walls.register("walls:stonebrick", "Stone Brick Wall", "default_stone_brick.png", - "default:stonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:stone_block", "Stone Block Wall", "default_stone_block.png", - "default:stone_block", default.node_sound_stone_defaults()) - diff --git a/mods/ITEMS/woodsoils/depends.txt b/mods/ITEMS/woodsoils/depends.txt deleted file mode 100644 index 61e2c3c..0000000 --- a/mods/ITEMS/woodsoils/depends.txt +++ /dev/null @@ -1,6 +0,0 @@ -biome_lib -plantlife_i18n -default -ferns? -trunks? -australia? diff --git a/mods/ITEMS/woodsoils/generating.lua b/mods/ITEMS/woodsoils/generating.lua deleted file mode 100644 index f53f1c4..0000000 --- a/mods/ITEMS/woodsoils/generating.lua +++ /dev/null @@ -1,124 +0,0 @@ --- generating of forest soils - -local RaDiuS = { --- WE1 NS1 WE2 NS2 WE3 NS3 - {-1,-2, -2,-2, -2,-3}, - { 0,-2, -3,-1, -3,-2}, - { 1,-2, -3, 0, -4,-1}, - {-2,-1, -3, 1, -4, 0}, - {-1,-1, -2, 2, -4, 1}, - { 0,-1, -1, 3, -3, 2}, - { 1,-1, 0, 3, -2, 3}, - { 2,-1, 1, 3, -1, 4}, - {-2, 0, 2, 2, 0, 4}, - {-1, 0, 3, 1, 1, 4}, - { 0, 0, 3, 0, 2, 3}, - { 1, 0, 3,-1, 3, 2}, - { 2, 0, 2,-2, 4, 1}, - {-2, 1, 1,-3, 4, 0}, - {-1, 1, 0,-3, 4,-1}, - { 0, 1, -1,-3, 3,-2}, - { 1, 1, 0, 0, 2,-3}, - { 2, 1, 0, 0, 1,-4}, - {-1, 2, 0, 0, 0,-4}, - { 0, 2, 0, 0, -1,-4}, - { 1, 2, 0, 0, 0, 0}, -} --- e = + , n = + -abstract_woodsoils.place_soil = function(pos) - if minetest.get_item_group(minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name, "soil") > 0 - or minetest.get_item_group(minetest.get_node({x=pos.x,y=pos.y-2,z=pos.z}).name, "soil") > 0 then - for i in pairs(RaDiuS) do - local WE1 = RaDiuS[i][1] - local NS1 = RaDiuS[i][2] - local WE2 = RaDiuS[i][3] - local NS2 = RaDiuS[i][4] - local WE3 = RaDiuS[i][5] - local NS3 = RaDiuS[i][6] - local radius_1a = {x=pos.x+WE1,y=pos.y-1,z=pos.z+NS1} - local radius_1b = {x=pos.x+WE1,y=pos.y-2,z=pos.z+NS1} - local radius_2a = {x=pos.x+WE2,y=pos.y-1,z=pos.z+NS2} - local radius_2b = {x=pos.x+WE2,y=pos.y-2,z=pos.z+NS2} - local radius_3a = {x=pos.x+WE3,y=pos.y-1,z=pos.z+NS3} - local radius_3b = {x=pos.x+WE3,y=pos.y-2,z=pos.z+NS3} - --local node_1a = minetest.get_node(radius_1a) - --local node_1b = minetest.get_node(radius_1b) - local node_2a = minetest.get_node(radius_2a) - local node_2b = minetest.get_node(radius_2b) - local node_3a = minetest.get_node(radius_3a) - local node_3b = minetest.get_node(radius_3b) - -- Dirt with Leaves 1 - if minetest.get_item_group(minetest.get_node(radius_1a).name, "soil") > 0 then - minetest.set_node(radius_1a, {name="woodsoils:dirt_with_leaves_1"}) - end - if minetest.get_item_group(minetest.get_node(radius_1b).name, "soil") > 0 then - minetest.set_node(radius_1b, {name="woodsoils:dirt_with_leaves_1"}) - end - -- Grass with Leaves 2 - if string.find(node_2a.name, "dirt_with_grass") then - minetest.set_node(radius_2a, {name="woodsoils:grass_with_leaves_2"}) - end - if string.find(node_2b.name, "dirt_with_grass") then - minetest.set_node(radius_2b, {name="woodsoils:grass_with_leaves_2"}) - end - -- Grass with Leaves 1 - if string.find(node_3a.name, "dirt_with_grass") then - minetest.set_node(radius_3a, {name="woodsoils:grass_with_leaves_1"}) - end - if string.find(node_3b.name, "dirt_with_grass") then - minetest.set_node(radius_3b, {name="woodsoils:grass_with_leaves_1"}) - end - end - end -end - -biome_lib:register_generate_plant({ - surface = { - "group:tree" - }, - max_count = 1000, - rarity = 1, - min_elevation = 5, - max_elevation = 150, - near_nodes = { - "australia:celery_top_pine_tree", - "australia:huon_pine_tree", - "australia:jarrah_tree", - "australia:karri_tree", - "australia:marri_tree", - "australia:moreton_bay_fig_tree", - "australia:river_oak_tree", - "australia:swamp_gum_tree", - "australia:tasmanian_myrtle_tree" - }, - near_nodes_size = 2, - near_nodes_vertical = 1, - near_nodes_count = 1, - plantlife_limit = -1, - check_air = false, - }, - "abstract_woodsoils.place_soil" -) - -biome_lib:register_generate_plant({ - surface = { - "australia:celery_top_pine_sapling", - "australia:huon_pine_sapling", - "australia:jarrah_sapling", - "australia:karri_sapling", - "australia:marri_sapling", - "australia:moreton_bay_fig_sapling", - "australia:river_oak_sapling", - "australia:swamp_gum_sapling", - "australia:tasmanian_myrtle_sapling" - }, - max_count = 1000, - rarity = 2, - min_elevation = 5, - max_elevation = 150, - plantlife_limit = -0.9, - check_air = false, - }, - "abstract_woodsoils.place_soil" -) - diff --git a/mods/ITEMS/woodsoils/init.lua b/mods/ITEMS/woodsoils/init.lua deleted file mode 100644 index 19ff61d..0000000 --- a/mods/ITEMS/woodsoils/init.lua +++ /dev/null @@ -1,32 +0,0 @@ ------------------------------------------------------------------------------------------------ -local title = "Wood Soils" -- former "Forest Soils" -local version = "0.0.9" -local mname = "woodsoils" -- former "forestsoils" ------------------------------------------------------------------------------------------------ - -abstract_woodsoils = {} - --- support for i18n -local S = plantlife_i18n.gettext - -dofile(minetest.get_modpath("woodsoils").."/nodes.lua") -dofile(minetest.get_modpath("woodsoils").."/generating.lua") - --- felt like playing a bit :D ---[[print(" _____ __") -print("_/ ____\\___________ ____ _______/ |_") -print("\\ __\\/ _ \\_ __ \\_/ __ \\ / ___/\\ __\\") -print(" | | ( <_> ) | \\/\\ ___/ \\___ \\ | |") -print(" |__| \\____/|__| \\___ >____ > |__|") -print(" \\/ \\/") - -print(" .__.__") -print(" __________ |__| | ______") -print(" / ___/ _ \\| | | / ___/") -print(" \\___ ( <_> ) | |__\\___ \\") -print("/____ >____/|__|____/____ >") -print(" \\/ \\/")]] - ------------------------------------------------------------------------------------------------ -print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") ------------------------------------------------------------------------------------------------ diff --git a/mods/ITEMS/woodsoils/nodes.lua b/mods/ITEMS/woodsoils/nodes.lua deleted file mode 100644 index 69a6074..0000000 --- a/mods/ITEMS/woodsoils/nodes.lua +++ /dev/null @@ -1,77 +0,0 @@ --- support for i18n -local S = plantlife_i18n.gettext - --- nodes - -minetest.register_node("woodsoils:dirt_with_leaves_1", { - description = S("Forest Soil 1"), - tiles = { - "default_dirt.png^woodsoils_ground_cover.png", - "default_dirt.png", - "default_dirt.png^woodsoils_ground_cover_side.png"}, - is_ground_content = true, - groups = { - crumbly=3, - soil=1--, - --not_in_creative_inventory=1 - }, - drop = 'default:dirt', - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.4}, - }), -}) - -minetest.register_node("woodsoils:dirt_with_leaves_2", { - description = S("Forest Soil 2"), - tiles = { - "woodsoils_ground.png", - "default_dirt.png", - "default_dirt.png^woodsoils_ground_side.png"}, - is_ground_content = true, - groups = { - crumbly=3, - soil=1--, - --not_in_creative_inventory=1 - }, - drop = 'default:dirt', - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.4}, - }), -}) - -minetest.register_node("woodsoils:grass_with_leaves_1", { - description = S("Forest Soil 3"), - tiles = { - "default_grass.png^woodsoils_ground_cover2.png", - "default_dirt.png", - "default_dirt.png^default_grass_side.png^woodsoils_ground_cover_side2.png"}, - is_ground_content = true, - groups = { - crumbly=3, - soil=1--, - --not_in_creative_inventory=1 - }, - drop = 'default:dirt', - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.4}, - }), -}) - -minetest.register_node("woodsoils:grass_with_leaves_2", { - description = S("Forest Soil 4"), - tiles = { - "default_grass.png^woodsoils_ground_cover.png", - "default_dirt.png", - "default_dirt.png^default_grass_side.png^woodsoils_ground_cover_side.png"}, - is_ground_content = true, - groups = { - crumbly=3, - soil=1--, - --not_in_creative_inventory=1 - }, - drop = 'default:dirt', - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.4}, - }), -}) - diff --git a/mods/ITEMS/wool/depends.txt b/mods/ITEMS/wool/depends.txt deleted file mode 100644 index 2717bef..0000000 --- a/mods/ITEMS/wool/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -dye diff --git a/mods/ITEMS/xpanes/depends.txt b/mods/ITEMS/xpanes/depends.txt deleted file mode 100644 index 4ad96d5..0000000 --- a/mods/ITEMS/xpanes/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/mods/ITEMS/xpanes/init.lua b/mods/ITEMS/xpanes/init.lua deleted file mode 100644 index 77278a5..0000000 --- a/mods/ITEMS/xpanes/init.lua +++ /dev/null @@ -1,184 +0,0 @@ - -local function is_pane(pos) - return minetest.get_item_group(minetest.get_node(pos).name, "pane") > 0 -end - -local function connects_dir(pos, name, dir) - local aside = vector.add(pos, minetest.facedir_to_dir(dir)) - if is_pane(aside) then - return true - end - - local connects_to = minetest.registered_nodes[name].connects_to - if not connects_to then - return false - end - local list = minetest.find_nodes_in_area(aside, aside, connects_to) - - if #list > 0 then - return true - end - - return false -end - -local function swap(pos, node, name, param2) - if node.name == name and node.param2 == param2 then - return - end - - minetest.set_node(pos, {name = name, param2 = param2}) -end - -local function update_pane(pos) - if not is_pane(pos) then - return - end - local node = minetest.get_node(pos) - local name = node.name - if name:sub(-5) == "_flat" then - name = name:sub(1, -6) - end - - local any = node.param2 - local c = {} - local count = 0 - for dir = 0, 3 do - c[dir] = connects_dir(pos, name, dir) - if c[dir] then - any = dir - count = count + 1 - end - end - - if count == 0 then - swap(pos, node, name .. "_flat", any) - elseif count == 1 then - swap(pos, node, name .. "_flat", (any + 1) % 4) - elseif count == 2 then - if (c[0] and c[2]) or (c[1] and c[3]) then - swap(pos, node, name .. "_flat", (any + 1) % 4) - else - swap(pos, node, name, 0) - end - else - swap(pos, node, name, 0) - end -end - -minetest.register_on_placenode(function(pos, node) - if minetest.get_item_group(node, "pane") then - update_pane(pos) - end - for i = 0, 3 do - local dir = minetest.facedir_to_dir(i) - update_pane(vector.add(pos, dir)) - end -end) - -minetest.register_on_dignode(function(pos) - for i = 0, 3 do - local dir = minetest.facedir_to_dir(i) - update_pane(vector.add(pos, dir)) - end -end) - -xpanes = {} -function xpanes.register_pane(name, def) - for i = 1, 15 do - minetest.register_alias("xpanes:" .. name .. "_" .. i, "xpanes:" .. name .. "_flat") - end - - local flatgroups = table.copy(def.groups) - flatgroups.pane = 1 - minetest.register_node(":xpanes:" .. name .. "_flat", { - description = def.description, - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - inventory_image = def.inventory_image, - wield_image = def.wield_image, - paramtype2 = "facedir", - tiles = {def.textures[3], def.textures[3], def.textures[1]}, - groups = flatgroups, - drop = "xpanes:" .. name .. "_flat", - sounds = def.sounds, - node_box = { - type = "fixed", - fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, - }, - selection_box = { - type = "fixed", - fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, - }, - connect_sides = { "left", "right" }, - }) - - local groups = table.copy(def.groups) - groups.pane = 1 - groups.not_in_creative_inventory = 1 - minetest.register_node(":xpanes:" .. name, { - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - description = def.description, - tiles = {def.textures[3], def.textures[3], def.textures[1]}, - groups = groups, - drop = "xpanes:" .. name .. "_flat", - sounds = def.sounds, - node_box = { - type = "connected", - fixed = {{-1/32, -1/2, -1/32, 1/32, 1/2, 1/32}}, - connect_front = {{-1/32, -1/2, -1/2, 1/32, 1/2, -1/32}}, - connect_left = {{-1/2, -1/2, -1/32, -1/32, 1/2, 1/32}}, - connect_back = {{-1/32, -1/2, 1/32, 1/32, 1/2, 1/2}}, - connect_right = {{1/32, -1/2, -1/32, 1/2, 1/2, 1/32}}, - }, - connects_to = {"group:pane", "group:stone", "group:glass", "group:wood", "group:tree"}, - }) - - minetest.register_craft({ - output = "xpanes:" .. name .. "_flat 16", - recipe = def.recipe - }) -end - -xpanes.register_pane("pane", { - description = "Glass Pane", - textures = {"default_glass.png","xpanes_pane_half.png","xpanes_white.png"}, - inventory_image = "default_glass.png", - wield_image = "default_glass.png", - sounds = default.node_sound_glass_defaults(), - groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3}, - recipe = { - {"default:glass", "default:glass", "default:glass"}, - {"default:glass", "default:glass", "default:glass"} - } -}) - -xpanes.register_pane("bar", { - description = "Iron bar", - textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_bar_top.png"}, - inventory_image = "xpanes_bar.png", - wield_image = "xpanes_bar.png", - groups = {cracky=2}, - sounds = default.node_sound_metal_defaults(), - recipe = { - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"} - } -}) - -minetest.register_lbm({ - name = "xpanes:gen2", - nodenames = {"group:pane"}, - action = function(pos, node) - update_pane(pos) - for i = 0, 3 do - local dir = minetest.facedir_to_dir(i) - update_pane(vector.add(pos, dir)) - end - end -}) diff --git a/mods/ITEMS/xpanes/textures/xpanes_bar_top.png b/mods/ITEMS/xpanes/textures/xpanes_bar_top.png deleted file mode 100644 index 887518a..0000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_bar_top.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_space.png b/mods/ITEMS/xpanes/textures/xpanes_space.png deleted file mode 100644 index 016cb35..0000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_space.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_white.png b/mods/ITEMS/xpanes/textures/xpanes_white.png deleted file mode 100644 index a2f4b63..0000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_white.png and /dev/null differ diff --git a/mods/MAPGEN/biomes/australian_alps.lua b/mods/MAPGEN/biomes/australian_alps.lua deleted file mode 100644 index 85c448e..0000000 --- a/mods/MAPGEN/biomes/australian_alps.lua +++ /dev/null @@ -1,123 +0,0 @@ ---[[ - Australian Alps ---]] - - --- localize math routines for performance -local math_random = math.random - --- australian alps -minetest.register_biome({ - name = "australian_alps", - node_top = "default:snowblock", - depth_top = 2, - node_filler = "default:dirt_with_snow", - depth_filler = 1, - node_stone = "default:stone", - node_river_water = "default:river_water_source", - node_riverbed = "australia:shale", - depth_riverbed = 1, - y_min = 150, - y_max = 31000, - heat_point = 10, - humidity_point = 30, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Basalt -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - clust_scarcity = 3375, - clust_num_ores = 33, - clust_size = 5, - biomes = {"australian_alps"}, - y_min = -31, - y_max = 31000, -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - clust_scarcity = 1000, - clust_num_ores = 58, - clust_size = 7, - biomes = {"australian_alps"}, - y_min = -31, - y_max = 31000, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:snowblock"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"australian_alps"}, - y_min = 150, - y_max = 210, - decoration = "default:grass_"..length, - }) -end - -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - --- Snow -minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:snowblock"}, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"australian_alps"}, - y_min = 150, - y_max = 31000, - decoration = "default:snow", -}) - - ---[[ - Trees ---]] - --- Snow Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:snow_gum_tree", - leaves = "australia:snow_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.005, - priority = 50, - check = function(t, pos) - return pos.y >= 150 and pos.y <= 180 and table.contains({"australian_alps"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) diff --git a/mods/MAPGEN/biomes/central_australia.lua b/mods/MAPGEN/biomes/central_australia.lua deleted file mode 100644 index e3b0a7e..0000000 --- a/mods/MAPGEN/biomes/central_australia.lua +++ /dev/null @@ -1,390 +0,0 @@ ---[[ - Central Australia ---]] - - --- localize math routines for performance -local math_random = math.random - --- central australia -minetest.register_biome({ - name = "central_australia", - node_top = "australia:red_dirt", - depth_top = 1, - node_filler = "australia:red_sandstone", - depth_filler = 2, - node_stone = "technic:granite", - node_river_water = "australia:muddy_water_source", - node_riverbed = "australia:red_dirt", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 38, - humidity_point = 66, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Copper (Olympic Dam) -minetest.register_ore({ - ore_type = "blob", - ore = "australia:granite_with_copper", - wherein = {"technic:granite"}, - clust_scarcity = 85184, - clust_size = 8, - biomes = {"central_australia"}, - y_min = -31, - y_max = 12, - noise_threshold = 1, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 16, y = 16, z = 16}, - seed = 555, - octaves = 3, - persist = 0.6 - }, -}) - --- Opal (Coober Pedy) -minetest.register_ore({ - ore_type = "vein", - ore = "australia:granite_with_opal", - wherein = "technic:granite", - biomes = {"central_australia"}, - y_min = -31, - y_max = 21, - noise_threshold = 1.7, - noise_params = { - offset = 0, - scale = 3, - spread = {x=211, y=211, z=211}, - seed = 3223, - octaves = 3, - persist = 0.5, - flags = "eased", - }, -}) - --- Smoky Quartz (Kalkarindji) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:granite_with_smoky_quartz", - wherein = {"technic:granite"}, - biomes = {"central_australia"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 19, -}) - --- Uranium (Olympic Dam) -minetest.register_ore({ - ore_type = "scatter", - ore = "technic:granite_mineral_uranium", - wherein = "technic:granite", - clust_scarcity = 8000, - clust_num_ores = 8, - clust_size = 5, - biomes = {"central_australia"}, - y_min = -31, - y_max = 12, - noise_threshold = 0.6, - noise_params = { - offset = 0, - scale = 1, - spread = {x = 100, y = 100, z = 100}, - seed = 419, - octaves = 3, - persist = 0.7 - }, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"australia:red_dirt"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"central_australia"}, - y_min = 4, - y_max = 300, - decoration = "default:dry_grass_"..length, - }) -end - -register_dry_grass_decoration(0.05, 0.01, 3) -register_dry_grass_decoration(0.07, -0.01, 2) -register_dry_grass_decoration(0.09, -0.03, 1) - --- Grass near rivers -local function register_dryrivergrass(length) - plants_api.register_plant({ - nodes = {"default:dry_grass_"..length}, - cover = 0.1, - density = 0.33, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 4 and pos.y <= 300 and table.contains({"central_australia"}, t.biome) - end, - }) -end - -register_dryrivergrass(5) -register_dryrivergrass(4) - --- Bush Tomato -plants_api.register_plant({ - nodes = {"australia:tomato_bush"}, - cover = 0.0002, - density = 0.01, - priority = 30, - check = function(t, pos) - return t.valleys > 0.25 and pos.y >= 15 and pos.y <= 153 and table.contains({"central_australia"}, t.biome) - end, -}) - --- Mitchell Grass -plants_api.register_plant({ - nodes = {"australia:mitchell_grass"}, - cover = 0.01, - density = 0.01, - priority = 35, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.2 and pos.y >= 5 and pos.y <= 70 and table.contains({"central_australia"}, t.biome) - end, -}) - --- Pink Mulla Mulla -plants_api.register_plant({ - nodes = {"flowers:pink_mulla_mulla"}, - cover = 0.0015, - density = 0.005, - priority = 30, - check = function(t, pos) - return t.v4 > 0.3 and pos.y >= 5 and pos.y <= 70 and table.contains({"central_australia"}, t.biome) - end, -}) - --- Spinifex -minetest.register_decoration({ - deco_type = "simple", - place_on = {"australia:red_dirt"}, - sidelen = 80, - fill_ratio = 0.02, - biomes = {"central_australia"}, - y_min = 4, - y_max = 41, - decoration = "australia:spinifex", -}) - --- Sturt's Desert Pea -plants_api.register_plant({ - nodes = {"flowers:sturts_desert_pea"}, - cover = 0.001, - density = 0.2, - priority = 30, - check = function(t, pos) - return t.v2 > 0.1 and t.v4 > 0.5 and t.v3 < 40 and pos.y >= 5 and pos.y <= 50 and table.contains({"central_australia"}, t.biome) - end, -}) - --- Small stone rocks -local function register_small_red_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_red_rocks"..number, - sidelen = 80, - place_on = {"australia:red_dirt"}, - fill_ratio = 0.002, - biomes = {"central_australia"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_red_rocks(6) -register_small_red_rocks(5) -register_small_red_rocks(4) -register_small_red_rocks(3) -register_small_red_rocks(2) -register_small_red_rocks(1) - - ---[[ - Trees ---]] - --- Coolabah Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:coolabah_tree", - leaves = "australia:coolabah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.001, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y < 60 and table.contains({"central_australia"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Desert Oak -plants_api.register_plant({ - nodes = { - trunk = "australia:desert_oak_tree", - leaves = "australia:desert_oak_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.005, - priority = 60, - check = function(t, pos) - return pos.y >= 25 and pos.y <= 70 and table.contains({"central_australia"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(4, 8) - local radius = math_random(2, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Quandong -plants_api.register_plant({ - nodes = { - trunk = "australia:quandong_tree", - leaves = "australia:quandong_leaves", - fruit = "australia:quandong", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 10 and pos.y <= 77 and table.contains({"central_australia"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Quandong -plants_api.register_plant({ - nodes = { - trunk = "australia:quandong_tree", - leaves = "australia:quandong_leaves", - fruit = "australia:quandong", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.001, - priority = 50, - check = function(t, pos) - return t.v4 > 0.5 and pos.y >= 10 and pos.y <= 77 and table.contains({"central_australia"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.1 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- River Red Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:river_red_gum_tree", - leaves = "australia:river_red_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.001, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 72 and table.contains({"central_australia"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 15) - local radius = math_random(5, 7) - local limbs = true - aus.make_river_red_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Wirewood -plants_api.register_plant({ - nodes = { - trunk = "australia:wirewood_tree", - leaves = "australia:wirewood_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 55, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.04 and pos.y >= 5 and pos.y <= 75 and table.contains({"central_australia"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Wirewood -plants_api.register_plant({ - nodes = { - trunk = "australia:wirewood_tree", - leaves = "australia:wirewood_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 45, - check = function(t, pos) - return t.v4 > 0.5 and pos.y >= 5 and pos.y <= 75 and table.contains({"central_australia"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) diff --git a/mods/MAPGEN/biomes/deep_underground.lua b/mods/MAPGEN/biomes/deep_underground.lua deleted file mode 100644 index 6e3c00f..0000000 --- a/mods/MAPGEN/biomes/deep_underground.lua +++ /dev/null @@ -1,389 +0,0 @@ ---[[ - Deep Underground ---]] - - --- deep_underground -minetest.register_biome({ - name = "deep_underground", - node_stone = "default:stone", - y_min = -31000, - y_max = -1072, - heat_point = 50, - humidity_point = 50, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Basalt -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 5832, - clust_num_ores = 33, - clust_size = 5, - y_min = -31000, - y_max = -1072, -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 1728, - clust_num_ores = 58, - clust_size = 7, - y_min = -31000, - y_max = -1072, -}) - --- Shale -minetest.register_ore({ - ore_type = "blob", - ore = "australia:shale", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 15625, - clust_num_ores = 6, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - --- Slate -minetest.register_ore({ - ore_type = "blob", - ore = "australia:slate", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 64000, - clust_num_ores = 6, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - --- Chromium -minetest.register_ore({ - ore_type = "scatter", - ore = "technic:mineral_chromium", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 2197, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - --- Coal -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_coal", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 13824, - clust_num_ores = 27, - clust_size = 6, - y_min = -31000, - y_max = -1072, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:diorite_with_coal", - wherein = {"australia:diorite"}, - biomes = {"deep_underground"}, - clust_scarcity = 13824, - clust_num_ores = 27, - clust_size = 6, - y_min = -31000, - y_max = -1072, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_coal", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 512, - clust_num_ores = 8, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:diorite_with_coal", - wherein = {"australia:diorite"}, - biomes = {"deep_underground"}, - clust_scarcity = 512, - clust_num_ores = 8, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - --- Copper -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_copper", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 729, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - --- Diamond -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_diamond", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 4913, - clust_num_ores = 4, - clust_size = 3, - y_min = -1607, - y_max = -1072, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_diamond", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 4, - clust_size = 3, - y_min = -31000, - y_max = -1608, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:basalt_with_diamond", - wherein = {"australia:basalt"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 4, - clust_size = 3, - y_min = -31000, - y_max = -1608, -}) - --- Gold -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_gold", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 2197, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - --- Iron -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_iron", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 343, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:granite_with_iron", - wherein = {"technic:granite"}, - biomes = {"deep_underground"}, - clust_scarcity = 343, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_iron", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 13824, - clust_num_ores = 27, - clust_size = 6, - y_min = -31000, - y_max = -1072, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:granite_with_iron", - wherein = {"technic:granite"}, - biomes = {"deep_underground"}, - clust_scarcity = 13824, - clust_num_ores = 27, - clust_size = 6, - y_min = -31000, - y_max = -1072, -}) - --- Silver -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_silver", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 2197, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - --- Tin -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_tin", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 1000, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:granite_with_tin", - wherein = {"technic:granite"}, - biomes = {"deep_underground"}, - clust_scarcity = 1000, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -1072, -}) - --- Agate -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_agate", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31000, - y_max = -1072, -}) - --- Amethyst -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_amethyst", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31000, - y_max = -1072, -}) - --- Citrine -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_citrine", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31000, - y_max = -1072, -}) - --- Emerald -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_emerald", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31000, - y_max = -1072, -}) - --- Jade -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_jade", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31000, - y_max = -1072, -}) - --- Ruby -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_ruby", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31000, - y_max = -1072, -}) - --- Sapphire -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_sapphire", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31000, - y_max = -1072, -}) - --- Smoky Quartz -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_smoky_quartz", - wherein = {"default:stone"}, - biomes = {"deep_underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31000, - y_max = -1072, -}) - diff --git a/mods/MAPGEN/biomes/depends.txt b/mods/MAPGEN/biomes/depends.txt deleted file mode 100644 index cb79c25..0000000 --- a/mods/MAPGEN/biomes/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -plants_api -default -australia -mapgen_core -technic? -flowers? -sea? diff --git a/mods/MAPGEN/biomes/eastern_coasts.lua b/mods/MAPGEN/biomes/eastern_coasts.lua deleted file mode 100644 index 431c2df..0000000 --- a/mods/MAPGEN/biomes/eastern_coasts.lua +++ /dev/null @@ -1,784 +0,0 @@ ---[[ - Eastern Coasts ---]] - - --- localize math routines for performance -local math_random = math.random - --- eastern coasts -minetest.register_biome({ - name = "eastern_coasts", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:dirt", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 7, - humidity_point = 57, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Basalt -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"eastern_coasts"}, - clust_scarcity = 3375, - clust_num_ores = 33, - clust_size = 5, - y_min = -31, - y_max = 31000, -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"eastern_coasts"}, - clust_scarcity = 1000, - clust_num_ores = 58, - clust_size = 7, - y_min = -31, - y_max = 31000, -}) - --- Shale -minetest.register_ore({ - ore_type = "blob", - ore = "australia:shale", - wherein = {"default:stone"}, - biomes = {"eastern_coasts"}, - clust_scarcity = 15625, - clust_num_ores = 6, - clust_size = 3, - y_min = -31, - y_max = 31000, -}) - --- Coal -minetest.register_ore({ - ore_type = "sheet", - ore = "default:stone_with_coal", - wherein = {"default:stone"}, - column_height_min = 2, - column_height_max = 4, - column_midpoint_factor = 0.5, - biomes = {"eastern_coasts"}, - y_min = -31, - y_max = 70, - noise_threshold = 1.25, - noise_params = { - offset = 0, - scale = 2, - spread = {x = 19, y = 19, z = 11}, - seed = 962, - octaves = 2, - persist = 0.8, - }, -}) - --- Amethyst (Oban River) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_amethyst", - wherein = {"default:stone"}, - biomes = {"eastern_coasts"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 120, -}) - --- Citrine (Oban River) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_citrine", - wherein = {"default:stone"}, - biomes = {"eastern_coasts"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 120, -}) - --- Ruby (Barrington Tops) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_ruby", - wherein = {"default:stone"}, - biomes = {"eastern_coasts"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 129, -}) - --- Sapphire (Kings Plains) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_sapphire", - wherein = {"default:stone"}, - biomes = {"eastern_coasts"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 88, -}) - --- Smoky Quartz (Kingsgate) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_smoky_quartz", - wherein = {"default:stone"}, - biomes = {"eastern_coasts"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 115, -}) - - --- --- Decorations --- - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"eastern_coasts"}, - y_min = 4, - y_max = 200, - decoration = "default:grass_"..length, - }) -end - -register_grass_decoration(-0.03, 0.09, 5) -register_grass_decoration(-0.015, 0.075, 4) -register_grass_decoration(0, 0.06, 3) -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - --- Grass near rivers -local function register_rivergrass(length) - plants_api.register_plant({ - nodes = {"default:grass_"..length}, - cover = 0.33, - density = 0.5, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 4 and pos.y <= 200 and table.contains({"eastern_coasts"}, t.biome) - end, - }) -end - -register_rivergrass(5) -register_rivergrass(4) - --- Waratah -plants_api.register_plant({ - nodes = { - stem = "default:bush_stem", - leaves = "australia:waratah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.025, - priority = 50, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 5 and pos.y <= 35 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = 1 - local radius = math_random(1, 2) - aus.make_bush(pos, data, area, height, radius, nodes.stem, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Waterlily -minetest.register_decoration({ - deco_type = "schematic", - place_on = { - "default:dirt", - "default:sand", - }, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"eastern_coasts"}, - y_min = 0, - y_max = 96, - schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts", - rotation = "random", -}) - --- Snow -minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"eastern_coasts"}, - y_min = 140, - y_max = 31000, - decoration = "default:snow", -}) - --- Small stone rocks -local function register_small_stone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_stone_rocks"..number, - sidelen = 80, - place_on = {"default:dirt_with_grass"}, - fill_ratio = 0.003, - y_min = 16, - biomes = {"eastern_coasts"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_stone_rocks(6) -register_small_stone_rocks(5) -register_small_stone_rocks(4) -register_small_stone_rocks(3) -register_small_stone_rocks(2) -register_small_stone_rocks(1) - - ---[[ - Trees ---]] - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0002, - density = 0.002, - priority = 35, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 50 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(8, 12) - local radius = math_random(4, 5) - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0002, - density = 0.002, - priority = 35, - check = function(t, pos) - return pos.y >= 51 and pos.y <= 125 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 3 - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Australian Cherry -plants_api.register_plant({ - nodes = { - trunk = "australia:cherry_tree", - leaves = "australia:cherry_leaves", - fruit = "australia:cherry", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 30, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 70 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 3 - local limbs = nil - local fruit_chance = 0.2 - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Coast Banksia (big) -plants_api.register_plant({ - nodes = { - trunk = "australia:coast_banksia_tree", - leaves = "australia:coast_banksia_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 40, - check = function(t, pos) - return t.v2 > 0.5 and pos.y >= 16 and pos.y <= 150 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(4, 5) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Coast Banksia (small) -plants_api.register_plant({ - nodes = { - trunk = "australia:coast_banksia_tree", - leaves = "australia:coast_banksia_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 40, - check = function(t, pos) - return pos.y >= 4 and pos.y <= 15 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(2, 3) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Coast Banksia (small and along rivers) -plants_api.register_plant({ - nodes = { - trunk = "australia:coast_banksia_tree", - leaves = "australia:coast_banksia_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 15 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(2, 3) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Coolabah -plants_api.register_plant({ - nodes = { - trunk = "australia:coolabah_tree", - leaves = "australia:coolabah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 60 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Illawarra Flame Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:illawarra_flame_tree", - leaves = "australia:illawarra_flame_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.00025, - density = 0.0005, - priority = 45, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 100 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(8, 10) - local radius = math_random(5, 6) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Lemon Eucalyptus -plants_api.register_plant({ - nodes = { - trunk = "australia:lemon_eucalyptus_tree", - leaves = "australia:lemon_eucalyptus_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.002, - priority = 50, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 110 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 15) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Lemon Eucalyptus (forest) -plants_api.register_plant({ - nodes = { - trunk = "australia:lemon_eucalyptus_tree", - leaves = "australia:lemon_eucalyptus_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.02, - priority = 50, - check = function(t, pos) - return t.v4 > 0.5 and t.v2 > 0.1 and pos.y >= 20 and pos.y <= 60 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 15) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Lemon Myrtle -plants_api.register_plant({ - nodes = { - trunk = "australia:lemon_myrtle_tree", - leaves = "australia:lemon_myrtle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.001, - priority = 45, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 70 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(2, 3) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Lilly Pilly -plants_api.register_plant({ - nodes = { - trunk = "australia:lilly_pilly_tree", - leaves = "australia:lilly_pilly_leaves", - fruit = "australia:lilly_pilly_berries", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.001, - priority = 40, - check = function(t, pos) - return t.valleys > 0 and t.valleys < 0.25 and pos.y >= 5 and pos.y <= 60 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(3, 5) - local limbs = nil - local fruit_chance = 0.3 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Macadamia Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:macadamia_tree", - leaves = "australia:macadamia_leaves", - fruit = "australia:macadamia", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.002, - priority = 40, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 100 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = math_random(3, 4) - local limbs = nil - local fruit_chance = 0.3 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Moreton Bay Fig -plants_api.register_plant({ - nodes = { - trunk = "australia:moreton_bay_fig_tree", - leaves = "australia:moreton_bay_fig_leaves", - fruit = "australia:moreton_bay_fig", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.00001, - priority = 50, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 50 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(12, 16) - local radius = math_random(10, 12) - local limbs = true - local fruit_chance = 0.2 - aus.make_moreton_bay_fig(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Paperbark Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:paperbark_tree", - leaves = "australia:paperbark_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 60, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.025 and pos.y >= 5 and pos.y <= 20 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 8) - local radius = math_random(3, 4) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Paperbark Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:paperbark_tree", - leaves = "australia:paperbark_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.01, - priority = 60, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.3 and t.v4 > 0.5 and pos.y >= 5 and pos.y <= 20 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 8) - local radius = math_random(3, 4) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- River Oak -plants_api.register_plant({ - nodes = { - trunk = "australia:river_oak_tree", - leaves = "australia:river_oak_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.01, - priority = 30, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 120 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 12) - local radius = math_random(3, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- River Red Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:river_red_gum_tree", - leaves = "australia:river_red_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.001, - priority = 70, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 72 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 15) - local radius = math_random(5, 7) - local limbs = true - aus.make_river_red_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Scribbly Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:scribbly_gum_tree", - leaves = "australia:scribbly_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.005, - priority = 65, - check = function(t, pos) - return t.valleys > 0.5 and pos.y >= 5 and pos.y <= 35 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = math_random(3, 4) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Scribbly Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:scribbly_gum_tree", - leaves = "australia:scribbly_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.005, - priority = 65, - check = function(t, pos) - return t.v4 > 0.5 and pos.y >= 5 and pos.y <= 35 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = math_random(3, 4) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Snow Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:snow_gum_tree", - leaves = "australia:snow_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.025, - density = 0.05, - priority = 50, - check = function(t, pos) - return pos.y >= 130 and pos.y <= 180 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Tea Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:tea_tree_tree", - leaves = "australia:tea_tree_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.001, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 5 and pos.y <= 30 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = math_random(2, 3) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Tea Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:tea_tree_tree", - leaves = "australia:tea_tree_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.001, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.3 and t.v4 > 0.5 and pos.y >= 5 and pos.y <= 30 and table.contains({"eastern_coasts"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = math_random(2, 3) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) diff --git a/mods/MAPGEN/biomes/far_north_queensland.lua b/mods/MAPGEN/biomes/far_north_queensland.lua deleted file mode 100644 index cb46079..0000000 --- a/mods/MAPGEN/biomes/far_north_queensland.lua +++ /dev/null @@ -1,435 +0,0 @@ ---[[ - Far North Queensland ---]] - - --- localize math routines for performance -local math_random = math.random - --- far north queensland -minetest.register_biome({ - name = "far_north_queensland", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "default:river_water_source", - node_riverbed = "default:sand", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 88, - humidity_point = 73, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Basalt -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"far_north_queensland"}, - clust_scarcity = 3375, - clust_num_ores = 33, - clust_size = 5, - y_min = -31, - y_max = 31000, -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"far_north_queensland"}, - clust_scarcity = 1000, - clust_num_ores = 58, - clust_size = 7, - y_min = -31, - y_max = 31000, -}) - --- Aluminium (Weipa / Cape York) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_aluminium", - wherein = {"default:stone"}, - biomes = {"far_north_queensland"}, - clust_scarcity = 512, - clust_num_ores = 5, - clust_size = 3, - y_min = -31, - y_max = 5, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"far_north_queensland"}, - y_min = 4, - y_max = 90, - decoration = "default:grass_"..length, - }) -end - -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"far_north_queensland"}, - y_min = 91, - y_max = 300, - decoration = "default:dry_grass_"..length, - }) -end - -register_grass_decoration(-0.03, 0.09, 5) -register_grass_decoration(-0.015, 0.075, 4) -register_grass_decoration(0, 0.06, 3) -register_grass_decoration(0.03, 0.09, 2) -register_grass_decoration(0.06, 0.06, 1) - -register_dry_grass_decoration(0.01, 0.05, 5) -register_dry_grass_decoration(0.03, 0.03, 4) -register_dry_grass_decoration(0, 0.06, 3) -register_dry_grass_decoration(0.03, 0.09, 2) -register_dry_grass_decoration(0.06, 0.06, 1) - --- Grass near rivers -local function register_rivergrass(length) - plants_api.register_plant({ - nodes = {"default:grass_"..length}, - cover = 0.33, - density = 0.5, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 4 and pos.y <= 300 and table.contains({"far_north_queensland"}, t.biome) - end, - }) -end - -register_rivergrass(5) -register_rivergrass(4) - --- Cooktown Orchid -plants_api.register_plant({ - nodes = {"flowers:cooktown_orchid"}, - cover = 0.0015, - density = 0.01, - priority = 35, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 40 and table.contains({"far_north_queensland"}, t.biome) - end, -}) - --- Waterlily -minetest.register_decoration({ - deco_type = "schematic", - place_on = { - "default:dirt", - "default:sand", - }, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"far_north_queensland"}, - y_min = 0, - y_max = 96, - schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts", - rotation = "random", -}) - --- Small stone rocks -local function register_small_stone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_stone_rocks"..number, - sidelen = 80, - place_on = {"default:dirt_with_grass"}, - fill_ratio = 0.001, - y_min = 42, - biomes = {"far_north_queensland"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_stone_rocks(6) -register_small_stone_rocks(5) -register_small_stone_rocks(4) -register_small_stone_rocks(3) -register_small_stone_rocks(2) -register_small_stone_rocks(1) - - ---[[ - Trees ---]] - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.005, - priority = 35, - check = function(t, pos) - return pos.y >= 75 and pos.y <= 125 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 3 - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Daintree Stringybark -plants_api.register_plant({ - nodes = { - trunk = "australia:daintree_stringybark_tree", - leaves = "australia:daintree_stringybark_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.00025, - density = 0.005, - priority = 45, - check = function(t, pos) - return t.valleys > 0.5 and pos.y >= 5 and pos.y <= 76 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(12, 16) - local radius = math_random(6, 8) - local limbs = true - aus.make_tall_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Darwin Woollybutt -plants_api.register_plant({ - nodes = { - trunk = "australia:darwin_woollybutt_tree", - leaves = "australia:darwin_woollybutt_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.001, - priority = 45, - check = function(t, pos) - return t.valleys > 0.5 and pos.y >= 5 and pos.y <= 35 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Fan Palm -plants_api.register_plant({ - nodes = { - trunk = "australia:fan_palm_tree", - leaves = "australia:fan_palm_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.05, - density = 0.025, - priority = 60, - check = function(t, pos) - return t.valleys > 0 and t.valleys < 0.5 and pos.y >= 3 and pos.y <= 80 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 3 - aus.make_fan_palm(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Fan Palm -plants_api.register_plant({ - nodes = { - trunk = "australia:fan_palm_tree", - leaves = "australia:fan_palm_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.025, - density = 0.0125, - priority = 55, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 110 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 3 - aus.make_fan_palm(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Illawarra Flame Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:illawarra_flame_tree", - leaves = "australia:illawarra_flame_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.00025, - density = 0.0005, - priority = 45, - check = function(t, pos) - return t.valleys > 0.5 and pos.y >= 5 and pos.y <= 100 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(8, 10) - local radius = math_random(5, 6) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Lemon Eucalyptus -plants_api.register_plant({ - nodes = { - trunk = "australia:lemon_eucalyptus_tree", - leaves = "australia:lemon_eucalyptus_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.02, - priority = 50, - check = function(t, pos) - return t.valleys > 0.5 and t.v4 > 0.5 and pos.y >= 5 and pos.y <= 110 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 15) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Lilly Pilly -plants_api.register_plant({ - nodes = { - trunk = "australia:lilly_pilly_tree", - leaves = "australia:lilly_pilly_leaves", - fruit = "australia:lilly_pilly_berries", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.0001, - priority = 40, - check = function(t, pos) - return t.valleys > 0.5 and pos.y >= 5 and pos.y <= 60 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(3, 5) - local limbs = nil - local fruit_chance = 0.3 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Merbau -plants_api.register_plant({ - nodes = { - trunk = "australia:merbau_tree", - leaves = "australia:merbau_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.02, - density = 0.01, - priority = 50, - check = function(t, pos) - return t.valleys > 0 and t.valleys < 0.5 and pos.y >= 4 and pos.y <= 60 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(12, 16) - local radius = math_random(4, 5) - aus.make_merbau(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- River Oak -plants_api.register_plant({ - nodes = { - trunk = "australia:river_oak_tree", - leaves = "australia:river_oak_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.00025, - density = 0.0005, - priority = 30, - check = function(t, pos) - return t.valleys > 0.5 and pos.y >= 5 and pos.y <= 120 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 12) - local radius = math_random(3, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- River Oak -plants_api.register_plant({ - nodes = { - trunk = "australia:river_oak_tree", - leaves = "australia:river_oak_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.0025, - priority = 30, - check = function(t, pos) - return t.valleys > 0.5 and t.v2 > 0 and t.v2 < 0.03 and pos.y >= 5 and pos.y <= 120 and table.contains({"far_north_queensland"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 12) - local radius = math_random(3, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) diff --git a/mods/MAPGEN/biomes/flinders_lofty.lua b/mods/MAPGEN/biomes/flinders_lofty.lua deleted file mode 100644 index 2caf44c..0000000 --- a/mods/MAPGEN/biomes/flinders_lofty.lua +++ /dev/null @@ -1,407 +0,0 @@ ---[[ - Flinders / Lofty ---]] - - --- localize math routines for performance -local math_random = math.random - --- flinders / lofty -minetest.register_biome({ - name = "flinders_lofty", - node_top = "default:dirt_with_dry_grass", - depth_top = 1, - node_filler = "australia:red_dirt", - depth_filler = 2, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:dirt", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 40, - humidity_point = 20, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Slate (Adelaide Hills / Mintaro / Spalding) -minetest.register_ore({ - ore_type = "blob", - ore = "australia:slate", - wherein = {"default:stone"}, - biomes = {"flinders_lofty"}, - clust_scarcity = 8000, - clust_num_ores = 10, - clust_size = 4, - y_min = -31, - y_max = 73, -}) - --- Copper (Olympic Dam) -minetest.register_ore({ - ore_type = "vein", - ore = "default:stone_with_copper", - wherein = "default:stone", - biomes = {"flinders_lofty"}, - y_min = -31, - y_max = 34, - noise_threshold = 1.6, - noise_params = { - offset = 0, - scale = 3, - spread = {x=211, y=211, z=211}, - seed = 4825, - octaves = 3, - persist = 0.6, - flags = "eased", - }, -}) - --- Jade (Cowell) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_jade", - wherein = {"default:stone"}, - biomes = {"flinders_lofty"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 2, -}) - --- Marble (Penrice) -minetest.register_ore({ - ore_type = "sheet", - ore = "australia:marble", - wherein = "default:stone", - clust_scarcity = 1, - clust_num_ores = 1, - clust_size = 3, - biomes = {"flinders_lofty"}, - y_min = -31, - y_max = 34, - noise_threshold = 0.4, - noise_params = {offset=0, scale=15, spread={x=150, y=150, z=150}, seed=23, octaves=3, persist=0.70} -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_dry_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"flinders_lofty"}, - y_min = 4, - y_max = 73, - decoration = "default:grass_"..length, - }) -end - -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_dry_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"flinders_lofty"}, - y_min = 68, - y_max = 240, - decoration = "default:dry_grass_"..length, - }) -end - -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - -register_dry_grass_decoration(0.01, 0.05, 5) -register_dry_grass_decoration(0.03, 0.03, 4) -register_dry_grass_decoration(0.05, 0.01, 3) -register_dry_grass_decoration(0.07, -0.01, 2) -register_dry_grass_decoration(0.09, -0.03, 1) - --- Grass near rivers -local function register_rivergrass(length) - plants_api.register_plant({ - nodes = {"default:grass_"..length}, - cover = 0.33, - density = 0.5, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 4 and pos.y <= 240 and table.contains({"flinders_lofty"}, t.biome) - end, - }) -end - -register_rivergrass(5) -register_rivergrass(4) - --- Lavender Grevillea -plants_api.register_plant({ - nodes = { - trunk = "australia:lavender_grevillea", - leaves = "australia:lavender_grevillea", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.025, - priority = 50, - check = function(t, pos) - return t.v2 > 0.1 and t.v4 > 0.5 and t.v3 < 40 and pos.y >= 5 and pos.y <= 73 and table.contains({"flinders_lofty"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(1, 2) - local radius = math_random(1, 2) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Pink Mulla Mulla -plants_api.register_plant({ - nodes = {"flowers:pink_mulla_mulla"}, - cover = 0.0015, - density = 0.01, - priority = 30, - check = function(t, pos) - return t.v4 > 0.3 and pos.y >= 5 and pos.y <= 70 and table.contains({"flinders_lofty"}, t.biome) - end, -}) - --- Sturt's Desert Pea' -plants_api.register_plant({ - nodes = {"flowers:sturts_desert_pea"}, - cover = 0.0025, - density = 0.2, - priority = 30, - check = function(t, pos) - return t.v2 > 0.1 and t.v4 > 0.5 and t.v3 < 40 and pos.y >= 5 and pos.y <= 50 and table.contains({"flinders_lofty"}, t.biome) - end, -}) - --- Small stone rocks -local function register_small_stone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_stone_rocks"..number, - sidelen = 80, - place_on = {"default:dirt_with_dry_grass"}, - fill_ratio = 0.002, - y_min = 24, - biomes = {"flinders_lofty"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_stone_rocks(6) -register_small_stone_rocks(5) -register_small_stone_rocks(4) -register_small_stone_rocks(3) -register_small_stone_rocks(2) -register_small_stone_rocks(1) - - ---[[ - Trees ---]] - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0002, - density = 0.002, - priority = 35, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 50 and table.contains({"flinders_lofty"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(4, 5) - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0002, - density = 0.002, - priority = 35, - check = function(t, pos) - return pos.y >= 51 and pos.y <= 125 and table.contains({"flinders_lofty"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 3 - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Australian Cherry -plants_api.register_plant({ - nodes = { - trunk = "australia:cherry_tree", - leaves = "australia:cherry_leaves", - fruit = "australia:cherry", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 30, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 70 and table.contains({"flinders_lofty"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 3 - local limbs = nil - local fruit_chance = 0.2 - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Coolabah -plants_api.register_plant({ - nodes = { - trunk = "australia:coolabah_tree", - leaves = "australia:coolabah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 60 and table.contains({"flinders_lofty"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Golden Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:golden_wattle_tree", - leaves = "australia:golden_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0002, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.v4 < 0.5 and pos.y >= 5 and pos.y <= 150 and table.contains({"flinders_lofty"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Golden Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:golden_wattle_tree", - leaves = "australia:golden_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 5 and pos.y <= 150 and table.contains({"flinders_lofty"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- River Red Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:river_red_gum_tree", - leaves = "australia:river_red_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.002, - density = 0.005, - priority = 70, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 5 and pos.y <= 72 and table.contains({"flinders_lofty"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 15) - local radius = math_random(5, 7) - local limbs = true - aus.make_river_red_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Sugar Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:sugar_gum_tree", - leaves = "australia:sugar_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.00025, - density = 0.001, - priority = 40, - check = function(t, pos) - return pos.y >= 5 and pos.y < 60 and table.contains({"flinders_lofty"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 11) - local radius = math_random(6, 8) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) diff --git a/mods/MAPGEN/biomes/great_australian_bight.lua b/mods/MAPGEN/biomes/great_australian_bight.lua deleted file mode 100644 index 962a9d7..0000000 --- a/mods/MAPGEN/biomes/great_australian_bight.lua +++ /dev/null @@ -1,107 +0,0 @@ ---[[ - Great Australian Bight ---]] - - --- great australian bight -minetest.register_biome({ - name = "great_australian_bight", - node_top = "australia:limestone", - depth_top = 3, - node_filler = "australia:basalt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "australia:limestone", - depth_riverbed = 1, - y_min = -31, - y_max = 3, - heat_point = 55, - humidity_point = 50, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Oil -minetest.register_ore({ - ore_type = "sheet", - ore = "australia:crude_oil_source", - wherein = {"default:stone"}, - biomes = {"great_australian_bight"}, - column_height_min = 2, - column_height_max = 4, - column_midpoint_factor = 0.5, - y_min = -31, - y_max = -3, - noise_threshold = 1.25, - noise_params = { - offset = 0, - scale = 2, - spread = {x = 24, y = 24, z = 24}, - seed = 812, - octaves = 2, - persist = 0.5, - }, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "sea:submarine", - wherein = "australia:limestone", - clust_scarcity = 512000, - clust_num_ores = 1, - clust_size = 12, - biomes = {"great_australian_bight"}, - y_min = -31, - y_max = -8, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "sea:woodship", - wherein = "australia:limestone", - clust_scarcity = 27000, - clust_num_ores = 1, - clust_size = 12, - biomes = {"great_australian_bight"}, - y_min = -31, - y_max = -6, -}) - - ---[[ - ABM's ---]] - -minetest.register_abm({ - nodenames = {"sea:woodship"}, - interval = 1, - chance = 1, - action = function(pos, node) - local yp = {x = pos.x, y = pos.y + 3, z = pos.z} - if node.name == "sea:woodship" and - minetest.get_node(yp).name == "default:water_source" then - sea.place_woodship(pos) - end - end -}) - -minetest.register_abm({ - nodenames = {"sea:submarine"}, - interval = 1, - chance = 1, - action = function(pos, node) - local yp = {x = pos.x, y = pos.y + 8, z = pos.z} - if node.name == "sea:submarine" and - minetest.get_node(yp).name == "default:water_source" then - sea.place_submarine(pos) - end - end -}) - - diff --git a/mods/MAPGEN/biomes/great_barrier_reef.lua b/mods/MAPGEN/biomes/great_barrier_reef.lua deleted file mode 100644 index 5f66801..0000000 --- a/mods/MAPGEN/biomes/great_barrier_reef.lua +++ /dev/null @@ -1,71 +0,0 @@ ---[[ - Great Barrier Reef ---]] - - --- great barrier reef -minetest.register_biome({ - name = "great_barrier_reef", - node_top = "default:sand", - depth_top = 2, - node_filler = "australia:basalt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "default:river_water_source", - node_riverbed = "default:sand", - depth_riverbed = 1, - y_min = -31, - y_max = 3, - heat_point = 88, - humidity_point = 73, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs. - -minetest.register_ore({ - ore_type = "scatter", - ore = "sea:woodship", - wherein = "default:sand", - clust_scarcity = 27000, - clust_num_ores = 1, - clust_size = 12, - biomes = {"great_barrier_reef"}, - y_min = -31, - y_max = -6, -}) - - ---[[ - Decorations ---]] - - - ---[[ - Trees ---]] - - ---[[ - ABM's ---]] - -minetest.register_abm({ - nodenames = {"sea:woodship"}, - interval = 1, - chance = 1, - action = function(pos, node) - local yp = {x = pos.x, y = pos.y + 3, z = pos.z} - if node.name == "sea:woodship" and - minetest.get_node(yp).name == "default:water_source" then - sea.place_woodship(pos) - end - end -}) - - diff --git a/mods/MAPGEN/biomes/indian_ocean.lua b/mods/MAPGEN/biomes/indian_ocean.lua deleted file mode 100644 index 2192e46..0000000 --- a/mods/MAPGEN/biomes/indian_ocean.lua +++ /dev/null @@ -1,142 +0,0 @@ ---[[ - Indian Ocean ---]] - - --- localize math routines for performance -local math_random = math.random - --- indian ocean -minetest.register_biome({ - name = "indian_ocean", - node_top = "default:sand", - depth_top = 2, - node_filler = "australia:basalt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:sand", - depth_riverbed = 1, - y_min = -31, - y_max = 3, - heat_point = 70, - humidity_point = 35, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - -minetest.register_ore({ - ore_type = "scatter", - ore = "sea:woodship", - wherein = "default:sand", - clust_scarcity = 27000, - clust_num_ores = 1, - clust_size = 12, - biomes = {"indian_ocean"}, - y_min = -31, - y_max = -6, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:sand"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"indian_ocean"}, - y_min = 3, - y_max = 3, - decoration = "default:grass_"..length, - }) -end - -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:sand"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"indian_ocean"}, - y_min = 3, - y_max = 3, - decoration = "default:dry_grass_"..length, - }) -end - -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - -register_dry_grass_decoration(0.01, 0.05, 5) -register_dry_grass_decoration(0.03, 0.03, 4) -register_dry_grass_decoration(0.05, 0.01, 3) - - ---[[ - Trees ---]] - --- Rottnest Island Pine -plants_api.register_plant({ - nodes = { - trunk = "australia:rottnest_island_pine_tree", - leaves = "australia:rottnest_island_pine_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.05, - priority = 60, - check = function(t, pos) - return pos.y >= 3 and table.contains({"indian_ocean"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 3 - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - - ---[[ - ABM's ---]] - -minetest.register_abm({ - nodenames = {"sea:woodship"}, - interval = 1, - chance = 1, - action = function(pos, node) - local yp = {x = pos.x, y = pos.y + 3, z = pos.z} - if node.name == "sea:woodship" and - minetest.get_node(yp).name == "default:water_source" then - sea.place_woodship(pos) - end - end -}) - - diff --git a/mods/MAPGEN/biomes/init.lua b/mods/MAPGEN/biomes/init.lua deleted file mode 100644 index f199a6f..0000000 --- a/mods/MAPGEN/biomes/init.lua +++ /dev/null @@ -1,68 +0,0 @@ ---[[ - Biomes ---]] - - -biomes = {} - -biomes.path = minetest.get_modpath("biomes") - -minetest.clear_registered_biomes() - - --- Set the following variables to true to enable each biome -biomes.deep_underground = true -biomes.underground = true -biomes.mangroves = true -biomes.tasman_sea = true -biomes.great_australian_bight = true -biomes.indian_ocean = true -biomes.great_barrier_reef = true -biomes.timor_sea = true -biomes.tasmania = true -biomes.victoria = true -biomes.jarrah_karri_forests = true -biomes.eastern_coasts = true -biomes.flinders_lofty = true -biomes.murray_darling_basin = true -biomes.nullabor_plains = true -biomes.mulga_lands = true -biomes.far_north_queensland = true -biomes.central_australia = true -biomes.top_end = true -biomes.pilbara = true -biomes.simpson_desert = true -biomes.australian_alps = true - - --- Underground -if biomes.deep_underground then dofile(biomes.path.."/deep_underground.lua") end -if biomes.underground then dofile(biomes.path.."/underground.lua") end - --- Coast/Ocean -if biomes.mangroves then dofile(biomes.path.."/mangroves.lua") end -if biomes.tasman_sea then dofile(biomes.path.."/tasman_sea.lua") end -if biomes.great_australian_bight then dofile(biomes.path.."/great_australian_bight.lua") end -if biomes.indian_ocean then dofile(biomes.path.."/indian_ocean.lua") end -if biomes.great_barrier_reef then dofile(biomes.path.."/great_barrier_reef.lua") end -if biomes.timor_sea then dofile(biomes.path.."/timor_sea.lua") end - --- Mainland -if biomes.tasmania then dofile(biomes.path.."/tasmania.lua") end -if biomes.victoria then dofile(biomes.path.."/victoria.lua") end -if biomes.jarrah_karri_forests then dofile(biomes.path.."/jarrah_karri_forests.lua") end -if biomes.eastern_coasts then dofile(biomes.path.."/eastern_coasts.lua") end -if biomes.flinders_lofty then dofile(biomes.path.."/flinders_lofty.lua") end -if biomes.murray_darling_basin then dofile(biomes.path.."/murray_darling_basin.lua") end -if biomes.nullabor_plains then dofile(biomes.path.."/nullabor_plains.lua") end -if biomes.mulga_lands then dofile(biomes.path.."/mulga_lands.lua") end -if biomes.far_north_queensland then dofile(biomes.path.."/far_north_queensland.lua") end -if biomes.central_australia then dofile(biomes.path.."/central_australia.lua") end -if biomes.top_end then dofile(biomes.path.."/top_end.lua") end -if biomes.pilbara then dofile(biomes.path.."/pilbara.lua") end -if biomes.simpson_desert then dofile(biomes.path.."/simpson_desert.lua") end - --- Alpine -if biomes.australian_alps then dofile(biomes.path.."/australian_alps.lua") end - - diff --git a/mods/MAPGEN/biomes/jarrah_karri_forests.lua b/mods/MAPGEN/biomes/jarrah_karri_forests.lua deleted file mode 100644 index 1a236a1..0000000 --- a/mods/MAPGEN/biomes/jarrah_karri_forests.lua +++ /dev/null @@ -1,380 +0,0 @@ ---[[ - Jarrah / Karri Forests ---]] - - --- localize math routines for performance -local math_random = math.random - --- jarrah / karri forests -minetest.register_biome({ - name = "jarrah_karri_forests", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:dirt", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 6, - humidity_point = 91, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Aluminium (Darling Scarp) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_aluminium", - wherein = {"default:stone"}, - biomes = {"jarrah_karri_forests"}, - clust_scarcity = 1728, - clust_num_ores = 8, - clust_size = 4, - y_min = -31, - y_max = 58, -}) - --- Gold (Boddington) -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_gold", - wherein = {"default:stone"}, - biomes = {"jarrah_karri_forests"}, - clust_scarcity = 2197, - clust_num_ores = 5, - clust_size = 3, - y_min = -31, - y_max = 27, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"jarrah_karri_forests"}, - y_min = 4, - y_max = 50, - decoration = "default:grass_"..length, - }) -end - -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"jarrah_karri_forests"}, - y_min = 40, - y_max = 240, - decoration = "default:dry_grass_"..length, - }) -end - -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - -register_dry_grass_decoration(0.01, 0.05, 5) -register_dry_grass_decoration(0.03, 0.03, 4) -register_dry_grass_decoration(0.05, 0.01, 3) -register_dry_grass_decoration(0.07, -0.01, 2) -register_dry_grass_decoration(0.09, -0.03, 1) - --- Grass near rivers -local function register_rivergrass(length) - plants_api.register_plant({ - nodes = {"default:grass_"..length}, - cover = 0.1, - density = 0.33, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 4 and pos.y <= 240 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - }) -end - -register_rivergrass(5) -register_rivergrass(4) - --- Couch Honeypot -plants_api.register_plant({ - nodes = {"flowers:couch_honeypot"}, - cover = 0.0015, - density = 0.01, - priority = 35, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 4 and pos.y <= 30 and table.contains({"jarrah_karri_forests"}, t.biome) - end, -}) - --- Flame Grevillea -plants_api.register_plant({ - nodes = { - stem = "default:acacia_bush_stem", - leaves = "australia:flame_grevillea_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0004, - density = 0.002, - priority = 35, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 40 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = 1 - local radius = math_random(2, 3) - aus.make_bush(pos, data, area, height, radius, nodes.stem, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Kangaroo Paw -plants_api.register_plant({ - nodes = {"flowers:kangaroo_paw"}, - cover = 0.0015, - density = 0.01, - priority = 30, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 4 and pos.y <= 30 and table.contains({"jarrah_karri_forests"}, t.biome) - end, -}) - -plants_api.register_plant({ - nodes = {"flowers:kangaroo_paw"}, - cover = 0.0015, - density = 0.01, - priority = 30, - check = function(t, pos) - return t.v4 > 0.3 and pos.y >= 4 and pos.y <= 30 and table.contains({"jarrah_karri_forests"}, t.biome) - end, -}) - --- Small stone rocks -local function register_small_stone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_stone_rocks"..number, - sidelen = 80, - place_on = {"default:dirt_with_grass"}, - fill_ratio = 0.001, - y_min = 24, - biomes = {"jarrah_karri_forests"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_stone_rocks(6) -register_small_stone_rocks(5) -register_small_stone_rocks(4) -register_small_stone_rocks(3) -register_small_stone_rocks(2) -register_small_stone_rocks(1) - - ---[[ - Trees ---]] - --- Bull Banksia -plants_api.register_plant({ - nodes = { - trunk = "australia:bull_banksia_tree", - leaves = "australia:bull_banksia_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.0025, - priority = 40, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 15 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(2, 3) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Coolabah -plants_api.register_plant({ - nodes = { - trunk = "australia:coolabah_tree", - leaves = "australia:coolabah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.025, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 60 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Jarrah -plants_api.register_plant({ - nodes = { - trunk = "australia:jarrah_tree", - leaves = "australia:jarrah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.004, - density = 0.002, - priority = 55, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 5 and pos.y <= 35 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(12, 16) - local radius = math_random(7, 8) - local limbs = true - aus.make_jarrah(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Karri -plants_api.register_plant({ - nodes = { - trunk = "australia:karri_tree", - leaves = "australia:karri_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.003, - density = 0.001, - priority = 50, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 5 and pos.y <= 35 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(15, 20) - local radius = math_random(7, 8) - local limbs = true - aus.make_karri(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Marri -plants_api.register_plant({ - nodes = { - trunk = "australia:marri_tree", - leaves = "australia:marri_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.002, - density = 0.001, - priority = 45, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 5 and pos.y <= 35 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(12, 16) - local radius = math_random(6, 8) - local limbs = true - aus.make_marri(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Rottnest Island Pine -plants_api.register_plant({ - nodes = { - trunk = "australia:rottnest_island_pine_tree", - leaves = "australia:rottnest_island_pine_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.05, - priority = 60, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 4 and pos.y <= 67 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 3 - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Swamp Paperbark -plants_api.register_plant({ - nodes = { - trunk = "australia:swamp_paperbark_tree", - leaves = "australia:swamp_paperbark_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.025, - density = 0.05, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 5 and pos.y <= 30 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Swamp Paperbark -plants_api.register_plant({ - nodes = { - trunk = "australia:swamp_paperbark_tree", - leaves = "australia:swamp_paperbark_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.005, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.3 and t.v4 > 0.5 and pos.y >= 5 and pos.y <= 30 and table.contains({"jarrah_karri_forests"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) diff --git a/mods/MAPGEN/biomes/mangroves.lua b/mods/MAPGEN/biomes/mangroves.lua deleted file mode 100644 index e905eac..0000000 --- a/mods/MAPGEN/biomes/mangroves.lua +++ /dev/null @@ -1,195 +0,0 @@ ---[[ - Mangroves ---]] - - --- localize math routines for performance -local math_random = math.random - --- mangroves -minetest.register_biome({ - name = "mangroves", - node_top = "australia:mangrove_mud", - depth_top = 3, - node_filler = "default:clay", - depth_filler = 1, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:dirt", - depth_riverbed = 1, - y_min = -2, - y_max = 3, - heat_point = 80, - humidity_point = 80, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - - ---[[ - Decorations ---]] - --- Mangrove Fern -minetest.register_decoration({ - deco_type = "simple", - place_on = { - "australia:mangrove_mud", - "default:sand", - "default:dirt", - "default:dirt_with_grass" - }, - sidelen = 80, - fill_ratio = 0.2, - biomes = {"mangroves"}, - y_min = 2, - y_max = 3, - decoration = "australia:mangrove_fern", -}) - --- Mangrove Lily -minetest.register_decoration({ - deco_type = "simple", - place_on = { - "australia:mangrove_mud", - "default:sand", - "default:dirt", - "default:dirt_with_grass" - }, - sidelen = 80, - fill_ratio = 0.1, - biomes = {"mangroves"}, - y_min = 2, - y_max = 3, - decoration = "flowers:mangrove_lily", -}) - --- Nipa Palm -minetest.register_decoration({ - deco_type = "schematic", - place_on = { - "australia:mangrove_mud", - "default:sand", - "default:dirt", - }, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"mangroves"}, - y_min = 1, - y_max = 3, - schematic = { - size = {x = 1, y = 4, z = 1}, - data = { - {name = "ignore", param1 = 0, param2 = 0}, - {name = "australia:mangrove_palm_trunk", param1 = 255, param2 = 0}, - {name = "australia:mangrove_palm_leaf_bot", param1 = 255, param2 = 0}, - {name = "australia:mangrove_palm_leaf_top", param1 = 255, param2 = 0}, - }, - }, - flags = "force_placement", -}) - --- Waterlily -minetest.register_decoration({ - deco_type = "schematic", - place_on = { - "default:dirt", - "australia:mangrove_mud", - "default:sand", - }, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"mangroves"}, - y_min = 0, - y_max = 0, - schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts", - rotation = "random", -}) - - ---[[ - Trees ---]] - --- Grey Mangrove -aus.schematics.grey_mangrove = {} -local max_ht = 6 -local tree = "australia:grey_mangrove_tree" -local leaves = "australia:grey_mangrove_leaves" -for h = 4, max_ht do - local schem = aus.generate_mangrove_tree_schematic(3, tree, leaves) - aus.push(aus.schematics.grey_mangrove, schem) - minetest.register_decoration({ - deco_type = "schematic", - sidelen = 80, - place_on = { - "australia:mangrove_mud", - "default:sand", - "default:dirt", - "default:dirt_with_grass", - }, - fill_ratio = 0.005, - biomes = {"mangroves"}, - y_min = -1, - y_max = 3, - schematic = schem, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - --- Mangrove Apple -plants_api.register_plant({ - nodes = { - trunk = "australia:mangrove_apple_tree", - leaves = "australia:mangrove_apple_leaves", - fruit = "australia:mangrove_apple", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.005, - priority = 45, - check = function(t, pos) - return pos.y >= 0 and pos.y <= 3 and table.contains({"mangroves"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(6,8) - local radius = math_random(3,4) - local limbs = nil - local fruit_chance = 0.2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Stilted Mangrove -aus.schematics.stilted_mangrove = {} -local max_ht = 6 -local tree = "australia:stilted_mangrove_tree" -local leaves = "australia:stilted_mangrove_leaves" -for h = 4, max_ht do - local schem = aus.generate_mangrove_tree_schematic(3, tree, leaves) - aus.push(aus.schematics.stilted_mangrove, schem) - minetest.register_decoration({ - deco_type = "schematic", - sidelen = 80, - place_on = { - "australia:mangrove_mud", - "default:sand", - "default:dirt", - "default:dirt_with_grass", - }, - fill_ratio = 0.003, - biomes = {"mangroves"}, - y_min = -1, - y_max = 3, - schematic = schem, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end diff --git a/mods/MAPGEN/biomes/mod.conf b/mods/MAPGEN/biomes/mod.conf deleted file mode 100644 index 0028f11..0000000 --- a/mods/MAPGEN/biomes/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = biomes diff --git a/mods/MAPGEN/biomes/mulga_lands.lua b/mods/MAPGEN/biomes/mulga_lands.lua deleted file mode 100644 index 01cdf40..0000000 --- a/mods/MAPGEN/biomes/mulga_lands.lua +++ /dev/null @@ -1,388 +0,0 @@ ---[[ - Mulga Lands ---]] - - --- localize math routines for performance -local math_random = math.random - --- mulga lands -minetest.register_biome({ - name = "mulga_lands", - node_top = "default:dirt_with_dry_grass", - depth_top = 1, - node_filler = "australia:red_dirt", - depth_filler = 2, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:dirt", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 62, - humidity_point = 75, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Copper (Mount Isa) -minetest.register_ore({ - ore_type = "blob", - ore = "default:stone_with_copper", - wherein = {"default:stone"}, - clust_scarcity = 85184, - clust_size = 8, - biomes = {"mulga_lands"}, - y_min = -31, - y_max = 36, - noise_threshold = 1.3, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 16, y = 16, z = 16}, - seed = 555, - octaves = 3, - persist = 0.6 - }, -}) - --- Lead (Mount Isa) -minetest.register_ore({ - ore_type = "blob", - ore = "technic:mineral_lead", - wherein = {"default:stone"}, - clust_scarcity = 85184, - clust_size = 8, - biomes = {"mulga_lands"}, - y_min = -31, - y_max = 36, - noise_threshold = 1, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 16, y = 16, z = 16}, - seed = 556, - octaves = 3, - persist = 0.6 - }, -}) - --- Silver (Mount Isa) -minetest.register_ore({ - ore_type = "blob", - ore = "australia:stone_with_silver", - wherein = {"default:stone"}, - clust_scarcity = 85184, - clust_size = 8, - biomes = {"mulga_lands"}, - y_min = -31, - y_max = 36, - noise_threshold = 1, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 16, y = 16, z = 16}, - seed = 557, - octaves = 3, - persist = 0.6 - }, -}) - --- Zinc (Mount Isa) -minetest.register_ore({ - ore_type = "blob", - ore = "technic:mineral_zinc", - wherein = {"default:stone"}, - clust_scarcity = 85184, - clust_size = 8, - biomes = {"mulga_lands"}, - y_min = -31, - y_max = 36, - noise_threshold = 1, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 16, y = 16, z = 16}, - seed = 558, - octaves = 3, - persist = 0.6 - }, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_dry_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"mulga_lands"}, - y_min = 4, - y_max = 240, - decoration = "default:dry_grass_"..length, - }) -end - -register_dry_grass_decoration(0.01, 0.2, 5) -register_dry_grass_decoration(0.03, 0.06, 4) -register_dry_grass_decoration(0.05, 0.02, 3) -register_dry_grass_decoration(0.07, -0.01, 2) -register_dry_grass_decoration(0.09, -0.03, 1) - --- Grass near rivers -local function register_rivergrass(length) - plants_api.register_plant({ - nodes = {"default:grass_"..length}, - cover = 0.33, - density = 0.5, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 4 and pos.y <= 240 and table.contains({"mulga_lands"}, t.biome) - end, - }) -end - -register_rivergrass(5) -register_rivergrass(4) - --- Bush Tomato -plants_api.register_plant({ - nodes = {"australia:tomato_bush"}, - cover = 0.0003, - density = 0.01, - priority = 30, - check = function(t, pos) - return t.valleys > 0.25 and pos.y >= 15 and pos.y <= 153 and table.contains({"mulga_lands"}, t.biome) - end, -}) - --- Mitchell Grass -plants_api.register_plant({ - nodes = {"australia:mitchell_grass"}, - cover = 0.01, - density = 0.01, - priority = 35, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.2 and pos.y >= 5 and pos.y <= 70 and table.contains({"mulga_lands"}, t.biome) - end, -}) - --- Small stone rocks -local function register_small_stone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_stone_rocks"..number, - sidelen = 80, - place_on = {"default:dirt_with_dry_grass"}, - fill_ratio = 0.001, - y_min = 24, - biomes = {"mulga_lands"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_stone_rocks(6) -register_small_stone_rocks(5) -register_small_stone_rocks(4) -register_small_stone_rocks(3) -register_small_stone_rocks(2) -register_small_stone_rocks(1) - - ---[[ - Trees ---]] - --- Coolabah Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:coolabah_tree", - leaves = "australia:coolabah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.001, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y < 60 and table.contains({"mulga_lands"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Mulga Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:mulga_tree", - leaves = "australia:mulga_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.01, - density = 0.1, - priority = 80, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 30 and table.contains({"mulga_lands"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(4, 6) - local radius = math_random(2, 3) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Quandong -plants_api.register_plant({ - nodes = { - trunk = "australia:quandong_tree", - leaves = "australia:quandong_leaves", - fruit = "australia:quandong", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 10 and pos.y <= 77 and table.contains({"mulga_lands"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Quandong -plants_api.register_plant({ - nodes = { - trunk = "australia:quandong_tree", - leaves = "australia:quandong_leaves", - fruit = "australia:quandong", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.001, - priority = 50, - check = function(t, pos) - return t.v4 > 0.5 and pos.y >= 10 and pos.y <= 77 and table.contains({"mulga_lands"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.1 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- River Oak -plants_api.register_plant({ - nodes = { - trunk = "australia:river_oak_tree", - leaves = "australia:river_oak_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.0025, - priority = 30, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.05 and pos.y >= 40 and pos.y <= 120 and table.contains({"mulga_lands"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 12) - local radius = math_random(3, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- River Red Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:river_red_gum_tree", - leaves = "australia:river_red_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 72 and table.contains({"mulga_lands"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 15) - local radius = math_random(5, 7) - local limbs = true - aus.make_river_red_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Shoestring Acacia -plants_api.register_plant({ - nodes = { - trunk = "australia:shoestring_acacia_tree", - leaves = "australia:shoestring_acacia_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.005, - priority = 60, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.05 and pos.y >= 5 and pos.y <= 50 and table.contains({"mulga_lands"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(3, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Shoestring Acacia -plants_api.register_plant({ - nodes = { - trunk = "australia:shoestring_acacia_tree", - leaves = "australia:shoestring_acacia_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.005, - priority = 60, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.2 and t.v4 > 0.5 and pos.y >= 5 and pos.y <= 50 and table.contains({"mulga_lands"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(3, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) diff --git a/mods/MAPGEN/biomes/murray_darling_basin.lua b/mods/MAPGEN/biomes/murray_darling_basin.lua deleted file mode 100644 index 1bafe09..0000000 --- a/mods/MAPGEN/biomes/murray_darling_basin.lua +++ /dev/null @@ -1,475 +0,0 @@ ---[[ - Murray-Darling Basin ---]] - - --- localize math routines for performance -local math_random = math.random - --- murray-darling basin -minetest.register_biome({ - name = "murray_darling_basin", - node_top = "default:dirt_with_dry_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:dirt", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 64, - humidity_point = 48, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Zinc (Broken Hill) -minetest.register_ore({ - ore_type = "blob", - ore = "technic:mineral_zinc", - wherein = {"default:stone"}, - clust_scarcity = 85184, - clust_size = 5, - biomes = {"murray_darling_basin"}, - y_min = -31, - y_max = 33, - noise_threshold = 1.5, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 16, y = 16, z = 16}, - seed = 557, - octaves = 3, - persist = 0.6 - }, -}) - --- Amethyst (Broken Hill) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_amethyst", - wherein = {"default:stone"}, - biomes = {"murray_darling_basin"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 33, -}) - ---Copper (Cadia) -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_copper", - wherein = {"default:stone"}, - biomes = {"murray_darling_basin"}, - clust_scarcity = 1728, - clust_num_ores = 4, - clust_size = 3, - y_min = -31, - y_max = 69, -}) - --- Gold (Cadia) -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_gold", - wherein = {"default:stone"}, - biomes = {"murray_darling_basin"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 69, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_dry_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"murray_darling_basin"}, - y_min = 4, - y_max = 15, - decoration = "default:grass_"..length, - }) -end - -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_dry_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"murray_darling_basin"}, - y_min = 9, - y_max = 240, - decoration = "default:dry_grass_"..length, - }) -end - -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - -register_dry_grass_decoration(0.01, 0.1, 5) -register_dry_grass_decoration(0.03, 0.06, 4) -register_dry_grass_decoration(0.05, 0.02, 3) -register_dry_grass_decoration(0.07, -0.01, 2) -register_dry_grass_decoration(0.09, -0.03, 1) - --- Grass near rivers -local function register_rivergrass(length) - plants_api.register_plant({ - nodes = {"default:grass_"..length}, - cover = 0.33, - density = 0.5, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 4 and pos.y <= 240 and table.contains({"murray_darling_basin"}, t.biome) - end, - }) -end - -register_rivergrass(5) -register_rivergrass(4) - --- Darling Lily -plants_api.register_plant({ - nodes = {"flowers:darling_lily"}, - cover = 0.01, - density = 0.1, - priority = 30, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 5 and pos.y <= 70 and table.contains({"murray_darling_basin"}, t.biome) - end, -}) - --- Darling Lily -plants_api.register_plant({ - nodes = {"flowers:darling_lily"}, - cover = 0.005, - density = 0.01, - priority = 30, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.3 and t.v4 > 0.5 and pos.y >= 5 and pos.y <= 70 and table.contains({"murray_darling_basin"}, t.biome) - end, -}) - --- Saltbush -plants_api.register_plant({ - nodes = {"australia:saltbush"}, - cover = 0.005, - density = 0.01, - priority = 35, - check = function(t, pos) - return t.v4 > 0.3 and pos.y >= 5 and pos.y <= 40 and table.contains({"murray_darling_basin"}, t.biome) - end, -}) - --- Silver Daisy -plants_api.register_plant({ - nodes = {"flowers:silver_daisy"}, - cover = 0.005, - density = 0.001, - priority = 35, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 5 and pos.y <= 117 and table.contains({"murray_darling_basin"}, t.biome) - end, -}) - --- Small stone rocks -local function register_small_stone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_stone_rocks"..number, - sidelen = 80, - place_on = {"default:dirt_with_dry_grass"}, - fill_ratio = 0.001, - y_min = 24, - biomes = {"murray_darling_basin"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_stone_rocks(6) -register_small_stone_rocks(5) -register_small_stone_rocks(4) -register_small_stone_rocks(3) -register_small_stone_rocks(2) -register_small_stone_rocks(1) - - ---[[ - Trees ---]] - --- Black Box -plants_api.register_plant({ - nodes = { - trunk = "australia:black_box_tree", - leaves = "australia:black_box_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.003, - density = 0.005, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 5 and pos.y <= 45 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 9) - local radius = math_random(4, 6) - local limbs = true - aus.make_black_box(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Black Box -plants_api.register_plant({ - nodes = { - trunk = "australia:black_box_tree", - leaves = "australia:black_box_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.003, - density = 0.005, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.3 and t.v4 > 0.5 and pos.y >= 5 and pos.y <= 45 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 9) - local radius = math_random(4, 6) - local limbs = true - aus.make_black_box(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Coolabah Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:coolabah_tree", - leaves = "australia:coolabah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.002, - density = 0.005, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 60 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Golden Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:golden_wattle_tree", - leaves = "australia:golden_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.v4 < 0.5 and pos.y >= 5 and pos.y <= 150 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Golden Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:golden_wattle_tree", - leaves = "australia:golden_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 5 and pos.y <= 150 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Quandong -plants_api.register_plant({ - nodes = { - trunk = "australia:quandong_tree", - leaves = "australia:quandong_leaves", - fruit = "australia:quandong", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 10 and pos.y <= 77 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Quandong -plants_api.register_plant({ - nodes = { - trunk = "australia:quandong_tree", - leaves = "australia:quandong_leaves", - fruit = "australia:quandong", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.001, - priority = 50, - check = function(t, pos) - return t.v4 > 0.5 and pos.y >= 10 and pos.y <= 77 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- River Red Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:river_red_gum_tree", - leaves = "australia:river_red_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.2, - density = 0.0025, - priority = 70, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.05 and pos.y >= 5 and pos.y <= 72 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 15) - local radius = math_random(5, 7) - local limbs = true - aus.make_river_red_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Shoestring Acacia -plants_api.register_plant({ - nodes = { - trunk = "australia:shoestring_acacia_tree", - leaves = "australia:shoestring_acacia_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 60, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.05 and pos.y >= 5 and pos.y <= 50 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(3, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Shoestring Acacia -plants_api.register_plant({ - nodes = { - trunk = "australia:shoestring_acacia_tree", - leaves = "australia:shoestring_acacia_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 60, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.2 and t.v4 > 0.5 and pos.y >= 5 and pos.y <= 50 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(3, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- White Box -plants_api.register_plant({ - nodes = { - trunk = "australia:white_box_tree", - leaves = "australia:white_box_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0003, - density = 0.003, - priority = 75, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 65 and pos.y <= 145 and table.contains({"murray_darling_basin"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(6, 10) - local radius = math_random(5, 7) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) diff --git a/mods/MAPGEN/biomes/nullabor_plains.lua b/mods/MAPGEN/biomes/nullabor_plains.lua deleted file mode 100644 index 120b57b..0000000 --- a/mods/MAPGEN/biomes/nullabor_plains.lua +++ /dev/null @@ -1,170 +0,0 @@ ---[[ - Nullabor Plains ---]] - - --- localize math routines for performance -local math_random = math.random - --- nullabor plains -minetest.register_biome({ - name = "nullabor_plains", - node_top = "default:desert_sand", - depth_top = 1, - node_filler = "default:sandstone", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "default:dirt_with_dry_grass", - node_riverbed = "default:sandstone", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 65, - humidity_point = 13, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Gold (Kalgoorlie / Boulder) -minetest.register_ore({ - ore_type = "vein", - ore = "default:stone_with_gold", - wherein = {"default:stone"}, - biomes = {"nullabor_plains"}, - y_min = -31, - y_max = 38, - random_factor = 0.23, - noise_threshold = 0.97, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 73, y = 251, z = 73}, - seed = 891, - octaves = 4, - persist = 0.5, - flags = "eased", - }, -}) - --- Nickel (Mount Margaret / Ravensthorpe) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_nickel", - wherein = {"default:stone"}, - biomes = {"nullabor_plains"}, - clust_scarcity = 512, - clust_num_ores = 5, - clust_size = 3, - y_min = -31, - y_max = 44, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:desert_sand"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"nullabor_plains"}, - y_min = 4, - y_max = 240, - decoration = "default:dry_grass_"..length, - }) -end - -register_dry_grass_decoration(0.01, 0.05, 5) -register_dry_grass_decoration(0.03, 0.03, 4) -register_dry_grass_decoration(0.05, 0.01, 3) -register_dry_grass_decoration(0.07, -0.01, 2) -register_dry_grass_decoration(0.09, -0.03, 1) - --- Spinifex -minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:desert_sand"}, - sidelen = 80, - fill_ratio = 0.03, - biomes = {"nullabor_plains"}, - y_min = 4, - y_max = 41, - decoration = "australia:spinifex", -}) - --- Sturt's Desert Pea -plants_api.register_plant({ - nodes = {"flowers:sturts_desert_pea"}, - cover = 0.001, - density = 0.2, - priority = 30, - check = function(t, pos) - return t.v2 > 0.1 and t.v4 > 0.5 and t.v3 < 40 and pos.y >= 5 and pos.y <= 50 and table.contains({"nullabor_plains"}, t.biome) - end, -}) - --- Small sandstone rocks -local function register_small_sandstone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_sandstone_rocks"..number, - sidelen = 80, - place_on = {"default:desert_sand"}, - fill_ratio = 0.002, - biomes = {"nullabor_plains"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_sandstone_rocks(6) -register_small_sandstone_rocks(5) -register_small_sandstone_rocks(4) -register_small_sandstone_rocks(3) -register_small_sandstone_rocks(2) -register_small_sandstone_rocks(1) - - ---[[ - Trees ---]] - --- Quandong -plants_api.register_plant({ - nodes = { - trunk = "australia:quandong_tree", - leaves = "australia:quandong_leaves", - fruit = "australia:quandong", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.01 and pos.y >= 10 and pos.y <= 77 and table.contains({"nullabor_plains"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.1 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) diff --git a/mods/MAPGEN/biomes/pilbara.lua b/mods/MAPGEN/biomes/pilbara.lua deleted file mode 100644 index af960dc..0000000 --- a/mods/MAPGEN/biomes/pilbara.lua +++ /dev/null @@ -1,269 +0,0 @@ ---[[ - Pilbara ---]] - - --- localize math routines for performance -local math_random = math.random - --- pilbara -minetest.register_biome({ - name = "pilbara", - node_top = "australia:red_gravel", - depth_top = 1, - node_filler = "australia:red_sandstone", - depth_filler = 2, - node_stone = "technic:granite", - node_river_water = "australia:muddy_water_source", - node_riverbed = "australia:red_gravel", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 90, - humidity_point = 39, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Iron (Newman / Pannawonica / Tom Price / Paraburdoo) -minetest.register_ore({ - ore_type = "blob", - ore = "australia:granite_with_iron", - wherein = {"technic:granite"}, - clust_scarcity = 4096, - clust_size = 6, - biomes = {"pilbara"}, - y_min = -31, - y_max = 54, - noise_threshold = 1, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 16, y = 16, z = 16}, - seed = 895, - octaves = 3, - persist = 0.6 - }, -}) - --- Marble (Maroonah) -minetest.register_ore({ - ore_type = "sheet", - ore = "australia:marble", - wherein = {"technic:granite"}, - clust_scarcity = 1, - clust_num_ores = 1, - clust_size = 3, - biomes = {"pilbara"}, - y_min = -31, - y_max = 24, - noise_threshold = 0.4, - noise_params = {offset=0, scale=15, spread={x=150, y=150, z=150}, seed=23, octaves=3, persist=0.70} -}) - --- Chromium (Coobina) -minetest.register_ore({ - ore_type = "scatter", - ore = "technic:granite_mineral_chromium", - wherein = {"technic:granite"}, - biomes = {"pilbara"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 55, -}) - --- Amethyst (Ashburton River) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:granite_with_amethyst", - wherein = {"technic:granite"}, - biomes = {"pilbara"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 50, -}) - --- Emerald (Poona) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:granite_with_emerald", - wherein = {"technic:granite"}, - biomes = {"pilbara"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 47, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"australia:red_gravel"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"pilbara"}, - y_min = 4, - y_max = 300, - decoration = "default:dry_grass_"..length, - }) -end - -register_dry_grass_decoration(0.07, -0.01, 2) -register_dry_grass_decoration(0.09, -0.03, 1) - --- Mitchell Grass -plants_api.register_plant({ - nodes = {"australia:mitchell_grass"}, - cover = 0.001, - density = 0.001, - priority = 35, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.1 and pos.y >= 5 and pos.y <= 70 and table.contains({"pilbara"}, t.biome) - end, -}) - --- Pink Mulla Mulla -plants_api.register_plant({ - nodes = {"flowers:pink_mulla_mulla"}, - cover = 0.0015, - density = 0.001, - priority = 30, - check = function(t, pos) - return t.v4 > 0.3 and pos.y >= 5 and pos.y <= 70 and table.contains({"pilbara"}, t.biome) - end, -}) - --- Spinifex -minetest.register_decoration({ - deco_type = "simple", - place_on = {"australia:red_gravel"}, - sidelen = 80, - fill_ratio = 0.02, - biomes = {"pilbara"}, - y_min = 4, - y_max = 41, - decoration = "australia:spinifex", -}) - --- Sturt's Desert Pea -plants_api.register_plant({ - nodes = {"flowers:sturts_desert_pea"}, - cover = 0.001, - density = 0.2, - priority = 30, - check = function(t, pos) - return t.v2 > 0.1 and t.v4 > 0.5 and t.v3 < 40 and pos.y >= 5 and pos.y <= 50 and table.contains({"pilbara"}, t.biome) - end, -}) - --- Small red rocks -local function register_small_red_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_red_rocks"..number, - sidelen = 80, - place_on = {"australia:red_gravel"}, - fill_ratio = 0.003, - biomes = {"pilbara"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_red_rocks(6) -register_small_red_rocks(5) -register_small_red_rocks(4) -register_small_red_rocks(3) -register_small_red_rocks(2) -register_small_red_rocks(1) - - ---[[ - Trees ---]] - --- Desert Oak -plants_api.register_plant({ - nodes = { - trunk = "australia:desert_oak_tree", - leaves = "australia:desert_oak_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.001, - priority = 50, - check = function(t, pos) - return pos.y >= 25 and pos.y <= 70 and table.contains({"pilbara"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(4, 8) - local radius = math_random(2, 4) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Wirewood -plants_api.register_plant({ - nodes = { - trunk = "australia:wirewood_tree", - leaves = "australia:wirewood_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 55, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 75 and table.contains({"pilbara"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Wirewood -plants_api.register_plant({ - nodes = { - trunk = "australia:wirewood_tree", - leaves = "australia:wirewood_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 45, - check = function(t, pos) - return t.v4 > 0.5 and pos.y >= 5 and pos.y <= 75 and table.contains({"pilbara"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) diff --git a/mods/MAPGEN/biomes/simpson_desert.lua b/mods/MAPGEN/biomes/simpson_desert.lua deleted file mode 100644 index c37105e..0000000 --- a/mods/MAPGEN/biomes/simpson_desert.lua +++ /dev/null @@ -1,126 +0,0 @@ ---[[ - Simpson Desert ---]] - - --- localize math routines for performance -local math_random = math.random - --- simpson desert -minetest.register_biome({ - name = "simpson_desert", - node_top = "australia:red_sand", - depth_top = 3, - node_filler = "australia:red_sandstone", - depth_filler = 2, - node_stone = "technic:granite", - node_river_water = "australia:muddy_water_source", - node_riverbed = "australia:red_gravel", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 90, - humidity_point = 10, -}) - - ---[[ - Decorations ---]] - --- Small red rocks -local function register_small_red_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_red_rocks"..number, - sidelen = 80, - place_on = {"australia:red_sand"}, - fill_ratio = 0.001, - y_min = 18, - biomes = {"simpson_desert"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_red_rocks(6) -register_small_red_rocks(5) -register_small_red_rocks(4) -register_small_red_rocks(3) -register_small_red_rocks(2) -register_small_red_rocks(1) - - ---[[ - Trees ---]] - --- Coolabah Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:coolabah_tree", - leaves = "australia:coolabah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.01, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.01 and pos.y >= 5 and pos.y <= 60 and table.contains({"simpson_desert"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Quandong -plants_api.register_plant({ - nodes = { - trunk = "australia:quandong_tree", - leaves = "australia:quandong_leaves", - fruit = "australia:quandong", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 10 and pos.y <= 77 and table.contains({"simpson_desert"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- Quandong -plants_api.register_plant({ - nodes = { - trunk = "australia:quandong_tree", - leaves = "australia:quandong_leaves", - fruit = "australia:quandong", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.001, - priority = 50, - check = function(t, pos) - return t.v4 > 0.5 and pos.y >= 10 and pos.y <= 77 and table.contains({"simpson_desert"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 3) - local radius = 2 - local limbs = nil - local fruit_chance = 0.1 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) diff --git a/mods/MAPGEN/biomes/tasman_sea.lua b/mods/MAPGEN/biomes/tasman_sea.lua deleted file mode 100644 index 143b116..0000000 --- a/mods/MAPGEN/biomes/tasman_sea.lua +++ /dev/null @@ -1,142 +0,0 @@ ---[[ - Tasman Sea ---]] - - --- localize math routines for performance -local math_random = math.random - --- tasman sea -minetest.register_biome({ - name = "tasman_sea", - node_top = "default:sand", - depth_top = 2, - node_filler = "australia:basalt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:sand", - depth_riverbed = 1, - y_min = -31, - y_max = 3, - heat_point = 10, - humidity_point = 10, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - -minetest.register_ore({ - ore_type = "scatter", - ore = "sea:woodship", - wherein = {"default:sand"}, - clust_scarcity = 216000, - clust_num_ores = 1, - clust_size = 12, - biomes = {"tasman_sea"}, - y_min = -31, - y_max = -6, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:sand"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"tasman_sea"}, - y_min = 3, - y_max = 3, - decoration = "default:grass_"..length, - }) -end - -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:sand"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"tasman_sea"}, - y_min = 3, - y_max = 3, - decoration = "default:dry_grass_"..length, - }) -end - -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - -register_dry_grass_decoration(0.01, 0.05, 5) -register_dry_grass_decoration(0.03, 0.03, 4) -register_dry_grass_decoration(0.05, 0.01, 3) - - ---[[ - Trees ---]] - --- Coast Banksia (small) -plants_api.register_plant({ - nodes = { - trunk = "australia:coast_banksia_tree", - leaves = "australia:coast_banksia_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.001, - priority = 40, - check = function(t, pos) - return pos.y >= 3 and pos.y <= 3 and table.contains({"tasman_sea"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(2, 3) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - - ---[[ - ABM's ---]] - -minetest.register_abm({ - nodenames = {"sea:woodship"}, - interval = 1, - chance = 1, - action = function(pos, node) - local yp = {x = pos.x, y = pos.y + 3, z = pos.z} - if node.name == "sea:woodship" and - minetest.get_node(yp).name == "default:water_source" then - sea.place_woodship(pos) - end - end -}) - - diff --git a/mods/MAPGEN/biomes/tasmania.lua b/mods/MAPGEN/biomes/tasmania.lua deleted file mode 100644 index 6149948..0000000 --- a/mods/MAPGEN/biomes/tasmania.lua +++ /dev/null @@ -1,534 +0,0 @@ ---[[ - Tasmania ---]] - - --- localize math routines for performance -local math_random = math.random - --- tasmania -minetest.register_biome({ - name = "tasmania", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "default:river_water_source", - node_riverbed = "australia:shale", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 10, - humidity_point = 10, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Basalt -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"tasmania"}, - clust_scarcity = 3375, - clust_num_ores = 33, - clust_size = 5, - y_min = -31, - y_max = 31000, -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"tasmania"}, - clust_scarcity = 1000, - clust_num_ores = 58, - clust_size = 7, - y_min = -31, - y_max = 31000, -}) - --- Shale -minetest.register_ore({ - ore_type = "blob", - ore = "australia:shale", - wherein = {"default:stone"}, - biomes = {"tasmania"}, - clust_scarcity = 27000, - clust_num_ores = 6, - clust_size = 3, - y_min = -31, - y_max = 31000, -}) - --- Agate (Lune River) -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_agate", - wherein = {"default:stone"}, - biomes = {"tasmania"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -31, - y_max = 12, -}) - --- Tin -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_tin", - wherein = {"default:stone"}, - biomes = {"tasmania"}, - clust_scarcity = 2197, - clust_num_ores = 5, - clust_size = 3, - y_min = -31, - y_max = 20, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:granite_with_tin", - wherein = {"technic:granite"}, - biomes = {"tasmania"}, - clust_scarcity = 2197, - clust_num_ores = 5, - clust_size = 3, - y_min = -31, - y_max = 20, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"tasmania"}, - y_min = 4, - y_max = 170, - decoration = "default:grass_"..length, - }) -end - -register_grass_decoration(-0.03, 0.09, 5) -register_grass_decoration(-0.015, 0.075, 4) -register_grass_decoration(0, 0.06, 3) -register_grass_decoration(0.03, 0.09, 2) -register_grass_decoration(0.06, 0.06, 1) - --- Grass near rivers -local function register_rivergrass(length) - plants_api.register_plant({ - nodes = {"default:grass_"..length}, - cover = 0.33, - density = 0.5, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 4 and pos.y <= 170 and table.contains({"tasmania"}, t.biome) - end, - }) -end - -register_rivergrass(5) -register_rivergrass(4) - --- Waterlily -minetest.register_decoration({ - deco_type = "schematic", - place_on = { - "default:dirt", - "default:sand", - "australia:shale", - }, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"tasmania"}, - y_min = 0, - y_max = 96, - schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts", - rotation = "random", -}) - --- Snow -minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"tasmania"}, - y_min = 140, - y_max = 31000, - decoration = "default:snow", -}) - --- Small stone rocks -local function register_small_stone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_stone_rocks"..number, - sidelen = 80, - place_on = {"default:dirt_with_grass"}, - fill_ratio = 0.001, - y_min = 48, - biomes = {"tasmania"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_stone_rocks(6) -register_small_stone_rocks(5) -register_small_stone_rocks(4) -register_small_stone_rocks(3) -register_small_stone_rocks(2) -register_small_stone_rocks(1) - - ---[[ - Trees ---]] - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.001, - priority = 35, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 50 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(8, 12) - local radius = math_random(4, 5) - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.005, - priority = 35, - check = function(t, pos) - return pos.y >= 51 and pos.y <= 125 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 3 - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Blue Gum (in valleys) -plants_api.register_plant({ - nodes = { - trunk = "australia:blue_gum_tree", - leaves = "australia:blue_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.0025, - priority = 80, - check = function(t, pos) - return t.valleys > 0 and t.valleys < 0.3 and pos.y >= 5 and pos.y <= 40 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 18) - local radius = math_random(5, 6) - local limbs = true - aus.make_tall_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Blue Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:blue_gum_tree", - leaves = "australia:blue_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.0025, - priority = 80, - check = function(t, pos) - return t.v4 > 0.5 and pos.y >= 5 and pos.y <= 40 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 18) - local radius = math_random(5, 6) - local limbs = true - aus.make_tall_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Celery-top Pine (forest) -plants_api.register_plant({ - nodes = { - trunk = "australia:celery_top_pine_tree", - leaves = "australia:celery_top_pine_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.01, - priority = 55, - check = function(t, pos) - return t.valleys > 0.3 and t.v4 > 0.4 and t.v4 < 0.6 and pos.y >= 40 and pos.y <= 80 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(3, 4) - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Celery-top Pine -plants_api.register_plant({ - nodes = { - trunk = "australia:celery_top_pine_tree", - leaves = "australia:celery_top_pine_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.0025, - priority = 55, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 39 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(3, 4) - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Celery-top Pine -plants_api.register_plant({ - nodes = { - trunk = "australia:celery_top_pine_tree", - leaves = "australia:celery_top_pine_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.0025, - priority = 55, - check = function(t, pos) - return pos.y >= 81 and pos.y <= 120 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(3, 4) - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Huon Pine (along rivers) -plants_api.register_plant({ - nodes = { - trunk = "australia:huon_pine_tree", - leaves = "australia:huon_pine_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.01, - density = 0.01, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.05 and pos.y >= 5 and pos.y <= 15 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(5, 6) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Huon Pine -plants_api.register_plant({ - nodes = { - trunk = "australia:huon_pine_tree", - leaves = "australia:huon_pine_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0025, - density = 0.0025, - priority = 50, - check = function(t, pos) - return t.v4 > 0.6 and pos.y >= 5 and pos.y <= 90 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(5, 6) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Southern Sassafras (along rivers) -plants_api.register_plant({ - nodes = { - trunk = "australia:southern_sassafras_tree", - leaves = "australia:southern_sassafras_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.002, - density = 0.002, - priority = 70, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.05 and pos.y >= 5 and pos.y <= 80 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(5, 7) - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Southern Sassafras (in valleys) -plants_api.register_plant({ - nodes = { - trunk = "australia:southern_sassafras_tree", - leaves = "australia:southern_sassafras_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.001, - priority = 70, - check = function(t, pos) - return t.valleys > 0 and t.valleys < 0.3 and pos.y >= 5 and pos.y <= 80 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(5, 7) - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Swamp Gum (forest) -plants_api.register_plant({ - nodes = { - trunk = "australia:swamp_gum_tree", - leaves = "australia:swamp_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.005, - priority = 65, - check = function(t, pos) - return t.valleys > 0.3 and t.v4 > 0.6 and pos.y >= 35 and pos.y <= 50 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(20, 30) - local radius = math_random(7, 9) - local limbs = true - aus.make_swamp_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Tasmanian Myrtle (forest) -plants_api.register_plant({ - nodes = { - trunk = "australia:tasmanian_myrtle_tree", - leaves = "australia:tasmanian_myrtle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.01, - priority = 60, - check = function(t, pos) - return t.v3 > 0.5 and t.v4 < 0.5 and pos.y >= 5 and pos.y <= 30 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(12, 15) - local radius = math_random(5, 7) - local limbs = true - aus.make_tasmanian_myrtle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Tasmanian Myrtle (low alt - bigger tree) -plants_api.register_plant({ - nodes = { - trunk = "australia:tasmanian_myrtle_tree", - leaves = "australia:tasmanian_myrtle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.001, - priority = 60, - check = function(t, pos) - return pos.y >= 31 and pos.y <= 100 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(12, 15) - local radius = math_random(5, 7) - local limbs = true - aus.make_tasmanian_myrtle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Tasmanian Myrtle (high alt - smaller tree) -plants_api.register_plant({ - nodes = { - trunk = "australia:tasmanian_myrtle_tree", - leaves = "australia:tasmanian_myrtle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.002, - density = 0.002, - priority = 60, - check = function(t, pos) - return pos.y >= 101 and pos.y <= 157 and table.contains({"tasmania"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(9, 12) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) diff --git a/mods/MAPGEN/biomes/timor_sea.lua b/mods/MAPGEN/biomes/timor_sea.lua deleted file mode 100644 index e24a035..0000000 --- a/mods/MAPGEN/biomes/timor_sea.lua +++ /dev/null @@ -1,121 +0,0 @@ ---[[ - Timor Sea ---]] - - --- timor sea -minetest.register_biome({ - name = "timor_sea", - node_top = "default:sand", - depth_top = 2, - node_filler = "default:sandstone", - depth_filler = 2, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_water = "default:water_source", - node_riverbed = "default:sand", - depth_riverbed = 1, - y_min = -31, - y_max = 3, - heat_point = 70, - humidity_point = 90, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Oil -minetest.register_ore({ - ore_type = "sheet", - ore = "australia:crude_oil_source", - wherein = {"default:stone"}, - biomes = {"timor_sea"}, - column_height_min = 2, - column_height_max = 4, - column_midpoint_factor = 0.5, - y_min = -31, - y_max = -3, - noise_threshold = 1.25, - noise_params = { - offset = 0, - scale = 2, - spread = {x = 24, y = 24, z = 24}, - seed = 812, - octaves = 2, - persist = 0.5, - }, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "sea:submarine", - wherein = "default:sand", - clust_scarcity = 512000, - clust_num_ores = 1, - clust_size = 12, - biomes = {"timor_sea"}, - y_min = -31, - y_max = -8, -}) - - ---[[ - Decorations ---]] - -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:sand"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"timor_sea"}, - y_min = 3, - y_max = 3, - decoration = "default:grass_"..length, - }) -end - --- Grasses -register_grass_decoration(-0.03, 0.09, 5) -register_grass_decoration(-0.015, 0.075, 4) -register_grass_decoration(0, 0.06, 3) -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - - ---[[ - Trees ---]] - - - ---[[ - ABM's ---]] - -minetest.register_abm({ - nodenames = {"sea:submarine"}, - interval = 1, - chance = 1, - action = function(pos, node) - local yp = {x = pos.x, y = pos.y + 8, z = pos.z} - if node.name == "sea:submarine" and - minetest.get_node(yp).name == "default:water_source" then - sea.place_submarine(pos) - end - end -}) - - diff --git a/mods/MAPGEN/biomes/top_end.lua b/mods/MAPGEN/biomes/top_end.lua deleted file mode 100644 index 8f37923..0000000 --- a/mods/MAPGEN/biomes/top_end.lua +++ /dev/null @@ -1,432 +0,0 @@ ---[[ - Top End ---]] - - --- localize math routines for performance -local math_random = math.random - --- top end -minetest.register_biome({ - name = "top_end", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:sandstone", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:dirt", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 86, - humidity_point = 86, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Lead (McArthur River) -minetest.register_ore({ - ore_type = "blob", - ore = "technic:mineral_lead", - wherein = {"default:stone"}, - clust_scarcity = 85184, - clust_size = 8, - biomes = {"top_end"}, - y_min = -31, - y_max = 4, - noise_threshold = 1.1, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 16, y = 16, z = 16}, - seed = 556, - octaves = 3, - persist = 0.6 - }, -}) - --- Zinc (McArthur River) -minetest.register_ore({ - ore_type = "blob", - ore = "technic:mineral_zinc", - wherein = {"default:stone"}, - clust_scarcity = 85184, - clust_size = 8, - biomes = {"top_end"}, - y_min = -31, - y_max = 4, - noise_threshold = 1.2, - noise_params = { - offset = 0, - scale = 3, - spread = {x = 16, y = 16, z = 16}, - seed = 557, - octaves = 3, - persist = 0.6 - }, -}) - --- Diamonds (Argyle) -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_diamond", - wherein = {"default:stone"}, - clust_scarcity = 64000, - clust_num_ores = 12, - clust_size = 6, - biomes = {"top_end"}, - y_min = -31, - y_max = 17, -}) - --- Uranium (Ranger) -minetest.register_ore({ - ore_type = "scatter", - ore = "technic:mineral_uranium", - wherein = {"default:stone"}, - clust_scarcity = 21952, - clust_num_ores = 4, - clust_size = 3, - biomes = {"top_end"}, - y_min = -31, - y_max = 19, - noise_threshold = 0.6, - noise_params = { - offset = 0, - scale = 1, - spread = {x = 100, y = 100, z = 100}, - seed = 420, - octaves = 3, - persist = 0.7 - }, -}) - --- Uranium (Jabiluka) -minetest.register_ore({ - ore_type = "scatter", - ore = "technic:mineral_uranium", - wherein = {"default:stone"}, - clust_scarcity = 17576, - clust_num_ores = 4, - clust_size = 3, - biomes = {"top_end"}, - y_min = -31, - y_max = 6, - noise_threshold = 0.6, - noise_params = { - offset = 0, - scale = 1, - spread = {x = 100, y = 100, z = 100}, - seed = 241, - octaves = 3, - persist = 0.7 - }, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"top_end"}, - y_min = 4, - y_max = 20, - decoration = "default:grass_"..length, - }) -end - -local function register_dry_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"top_end"}, - y_min = 18, - y_max = 300, - decoration = "default:dry_grass_"..length, - }) -end - -register_grass_decoration(-0.03, 0.09, 5) -register_grass_decoration(-0.015, 0.075, 4) -register_grass_decoration(0, 0.06, 3) -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - -register_dry_grass_decoration(0.01, 0.05, 5) -register_dry_grass_decoration(0.03, 0.03, 4) -register_dry_grass_decoration(0.05, 0.01, 3) -register_dry_grass_decoration(0.07, -0.01, 2) -register_dry_grass_decoration(0.09, -0.03, 1) - --- Grass near rivers -local function register_rivergrass(length) - plants_api.register_plant({ - nodes = {"default:grass_"..length}, - cover = 0.33, - density = 0.5, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 4 and pos.y <= 300 and table.contains({"top_end"}, t.biome) - end, - }) -end - -register_rivergrass(5) -register_rivergrass(4) - - --- Mitchell Grass -plants_api.register_plant({ - nodes = {"australia:mitchell_grass"}, - cover = 0.001, - density = 0.01, - priority = 35, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.2 and pos.y >= 5 and pos.y <= 70 and table.contains({"top_end"}, t.biome) - end, -}) - --- Pink Mulla Mulla -plants_api.register_plant({ - nodes = {"flowers:pink_mulla_mulla"}, - cover = 0.0015, - density = 0.01, - priority = 30, - check = function(t, pos) - return t.v4 > 0.3 and pos.y >= 5 and pos.y <= 70 and table.contains({"top_end"}, t.biome) - end, -}) - --- Spear Grass -plants_api.register_plant({ - nodes = {"dryplants:spear_grass"}, - cover = 0.5, - density = 0.33, - priority = 90, - check = function(t, pos) - return t.v2 > 0.1 and t.v4 > 0.5 and t.v3 < 40 and pos.y >= 15 and pos.y <= 33 and table.contains({"top_end"}, t.biome) - end, -}) - --- Waterlily -minetest.register_decoration({ - deco_type = "schematic", - place_on = { - "default:dirt", - "default:sand", - }, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"top_end"}, - y_min = 0, - y_max = 96, - schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts", - rotation = "random", -}) - --- Small sandstone rocks -local function register_small_sandstone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_sandstone_rocks"..number, - sidelen = 80, - place_on = {"default:dirt_with_grass"}, - fill_ratio = 0.002, - y_min = 25, - biomes = {"top_end"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_sandstone_rocks(6) -register_small_sandstone_rocks(5) -register_small_sandstone_rocks(4) -register_small_sandstone_rocks(3) -register_small_sandstone_rocks(2) -register_small_sandstone_rocks(1) - - ---[[ - Trees ---]] - --- Arnhem Cypress Pine -plants_api.register_plant({ - nodes = { - trunk = "australia:arnhem_cypress_pine_tree", - leaves = "australia:arnhem_cypress_pine_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 40, - check = function(t, pos) - return pos.y >= 10 and pos.y <= 20 and table.contains({"top_end"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(8, 12) - local radius = 4 - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Arnhem Cypress Pine -plants_api.register_plant({ - nodes = { - trunk = "australia:arnhem_cypress_pine_tree", - leaves = "australia:arnhem_cypress_pine_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.005, - priority = 35, - check = function(t, pos) - return pos.y >= 21 and pos.y <= 90 and table.contains({"top_end"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(8, 12) - local radius = 4 - aus.make_conifer(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Boab Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:boab_tree", - leaves = "australia:boab_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.001, - density = 0.0001, - priority = 25, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 30 and table.contains({"top_end"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 6) - local radius = math_random(4, 5) - local limbs = true - aus.make_boab(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Darwin Woollybutt -plants_api.register_plant({ - nodes = { - trunk = "australia:darwin_woollybutt_tree", - leaves = "australia:darwin_woollybutt_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 35, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 10 and table.contains({"top_end"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Darwin Woollybutt -plants_api.register_plant({ - nodes = { - trunk = "australia:darwin_woollybutt_tree", - leaves = "australia:darwin_woollybutt_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.005, - priority = 50, - check = function(t, pos) - return pos.y >= 11 and pos.y <= 35 and table.contains({"top_end"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- River Oak -plants_api.register_plant({ - nodes = { - trunk = "australia:river_oak_tree", - leaves = "australia:river_oak_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.005, - priority = 30, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 5 and pos.y <= 120 and table.contains({"top_end"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 6) - local radius = math_random(2, 3) - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Swamp Bloodwood -plants_api.register_plant({ - nodes = { - trunk = "australia:swamp_bloodwood_tree", - leaves = "australia:swamp_bloodwood_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.005, - priority = 55, - check = function(t, pos) - return t.v2 > 0.05 and t.v2 < 0.2 and t.v4 > 0.5 and pos.y >= 5 and pos.y <= 20 and table.contains({"top_end"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = math_random(3, 4) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) diff --git a/mods/MAPGEN/biomes/underground.lua b/mods/MAPGEN/biomes/underground.lua deleted file mode 100644 index c07807f..0000000 --- a/mods/MAPGEN/biomes/underground.lua +++ /dev/null @@ -1,187 +0,0 @@ ---[[ - Underground ---]] - - --- underground -minetest.register_biome({ - name = "underground", - node_stone = "default:stone", - y_min = -1071, - y_max = -32, - heat_point = 50, - humidity_point = 50, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Basalt -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 6858, - clust_num_ores = 33, - clust_size = 5, - y_min = -1071, - y_max = -256, -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 2197, - clust_num_ores = 58, - clust_size = 7, - y_min = -1071, - y_max = -256, -}) - --- Shale -minetest.register_ore({ - ore_type = "blob", - ore = "australia:shale", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 27000, - clust_num_ores = 6, - clust_size = 3, - y_min = -1071, - y_max = -256, -}) - --- Slate -minetest.register_ore({ - ore_type = "blob", - ore = "australia:slate", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 27000, - clust_num_ores = 6, - clust_size = 3, - y_min = -1071, - y_max = -256, -}) - --- Chromium -minetest.register_ore({ - ore_type = "scatter", - ore = "technic:mineral_chromium", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -1071, - y_max = -512, -}) - --- Coal -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_coal", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 512, - clust_num_ores = 8, - clust_size = 3, - y_min = -1071, - y_max = -256, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:diorite_with_coal", - wherein = {"australia:diorite"}, - biomes = {"underground"}, - clust_scarcity = 512, - clust_num_ores = 8, - clust_size = 3, - y_min = -1071, - y_max = -256, -}) - ---Copper -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_copper", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 1728, - clust_num_ores = 4, - clust_size = 3, - y_min = -1071, - y_max = -384, -}) - --- Iron -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_iron", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 343, - clust_num_ores = 5, - clust_size = 3, - y_min = -1071, - y_max = -512, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:granite_with_iron", - wherein = {"technic:granite"}, - biomes = {"underground"}, - clust_scarcity = 343, - clust_num_ores = 5, - clust_size = 3, - y_min = -1071, - y_max = -512, -}) - --- Silver -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:stone_with_silver", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 3375, - clust_num_ores = 3, - clust_size = 2, - y_min = -1071, - y_max = -512, -}) - --- Tin -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_tin", - wherein = {"default:stone"}, - biomes = {"underground"}, - clust_scarcity = 2197, - clust_num_ores = 4, - clust_size = 3, - y_min = -1071, - y_max = -512, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "australia:granite_with_tin", - wherein = {"technic:granite"}, - biomes = {"underground"}, - clust_scarcity = 2197, - clust_num_ores = 4, - clust_size = 3, - y_min = -1071, - y_max = -512, -}) - diff --git a/mods/MAPGEN/biomes/victoria.lua b/mods/MAPGEN/biomes/victoria.lua deleted file mode 100644 index e651c55..0000000 --- a/mods/MAPGEN/biomes/victoria.lua +++ /dev/null @@ -1,497 +0,0 @@ ---[[ - Victoria ---]] - - --- localize math routines for performance -local math_random = math.random - --- victoria -minetest.register_biome({ - name = "victoria", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 3, - node_stone = "default:stone", - node_river_water = "australia:muddy_water_source", - node_riverbed = "default:dirt", - depth_riverbed = 1, - y_min = 4, - y_max = 31000, - heat_point = 17, - humidity_point = 18, -}) - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Basalt -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"victoria"}, - clust_scarcity = 3375, - clust_num_ores = 33, - clust_size = 5, - y_min = -31, - y_max = 31000, -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "australia:basalt", - wherein = {"default:stone"}, - biomes = {"victoria"}, - clust_scarcity = 1000, - clust_num_ores = 58, - clust_size = 7, - y_min = -31, - y_max = 31000, -}) - ---Coal -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_coal", - wherein = {"default:stone"}, - biomes = {"victoria"}, - clust_scarcity = 512, - clust_num_ores = 8, - clust_size = 3, - y_min = -31, - y_max = 15, -}) - - ---[[ - Decorations ---]] - --- Grass -local function register_grass_decoration(offset, scale, length) - minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 16, - noise_params = { - offset = offset, - scale = scale, - spread = {x = 200, y = 200, z = 200}, - seed = 329, - octaves = 3, - persist = 0.6 - }, - biomes = {"victoria"}, - y_min = 4, - y_max = 200, - decoration = "default:grass_"..length, - }) -end - -register_grass_decoration(-0.03, 0.09, 5) -register_grass_decoration(-0.015, 0.075, 4) -register_grass_decoration(0, 0.06, 3) -register_grass_decoration(0.015, 0.045, 2) -register_grass_decoration(0.03, 0.03, 1) - --- Grass near rivers -local function register_rivergrass(length) - plants_api.register_plant({ - nodes = {"default:grass_"..length}, - cover = 0.33, - density = 0.5, - priority = 25, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 4 and pos.y <= 200 and table.contains({"victoria"}, t.biome) - end, - }) -end - -register_rivergrass(5) -register_rivergrass(4) - --- Red Bottlebrush -plants_api.register_plant({ - nodes = { - stem = "default:bush_stem", - leaves = "australia:red_bottlebrush_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.01, - density = 0.0025, - priority = 50, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 100 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = 1 - local radius = math_random(2, 3) - aus.make_bush(pos, data, area, height, radius, nodes.stem, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Waterlily -minetest.register_decoration({ - deco_type = "schematic", - place_on = { - "default:dirt", - "default:sand", - }, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"victoria"}, - y_min = 0, - y_max = 96, - schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts", - rotation = "random", -}) - --- Snow -minetest.register_decoration({ - deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 80, - fill_ratio = 0.3, - biomes = {"victoria"}, - y_min = 140, - y_max = 31000, - decoration = "default:snow", -}) - --- Small stone rocks -local function register_small_stone_rocks(number) - minetest.register_decoration({ - deco_type = "simple", - decoration = "australia:small_stone_rocks"..number, - sidelen = 80, - place_on = {"default:dirt_with_grass"}, - fill_ratio = 0.003, - y_min = 12, - biomes = {"victoria"}, - flags = "place_center_x, place_center_z", - rotation = "random", - }) -end - -register_small_stone_rocks(6) -register_small_stone_rocks(5) -register_small_stone_rocks(4) -register_small_stone_rocks(3) -register_small_stone_rocks(2) -register_small_stone_rocks(1) - - ---[[ - Trees ---]] - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.0001, - priority = 35, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 5 and pos.y <= 40 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(4, 5) - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.0001, - priority = 35, - check = function(t, pos) - return t.v4 < 0.5 and pos.y >= 5 and pos.y <= 40 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 12) - local radius = math_random(4, 5) - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Black Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:black_wattle_tree", - leaves = "australia:black_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0002, - density = 0.005, - priority = 35, - check = function(t, pos) - return pos.y >= 41 and pos.y <= 125 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(5, 7) - local radius = 3 - aus.make_black_wattle(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Blue Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:blue_gum_tree", - leaves = "australia:blue_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.01, - density = 0.01, - priority = 80, - check = function(t, pos) - return t.valleys > 0 and t.valleys < 0.3 and pos.y >= 5 and pos.y <= 40 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 18) - local radius = math_random(5, 6) - local limbs = true - aus.make_tall_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Blue Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:blue_gum_tree", - leaves = "australia:blue_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.01, - density = 0.01, - priority = 80, - check = function(t, pos) - return t.v4 > 0.5 and pos.y >= 5 and pos.y <= 40 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 18) - local radius = math_random(5, 6) - local limbs = true - aus.make_tall_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Coolabah Tree -plants_api.register_plant({ - nodes = { - trunk = "australia:coolabah_tree", - leaves = "australia:coolabah_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.02 and pos.y >= 5 and pos.y <= 60 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(7, 9) - local radius = math_random(4, 5) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Golden Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:golden_wattle_tree", - leaves = "australia:golden_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.v4 < 0.5 and pos.y >= 5 and pos.y <= 150 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Golden Wattle -plants_api.register_plant({ - nodes = { - trunk = "australia:golden_wattle_tree", - leaves = "australia:golden_wattle_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.0025, - priority = 40, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 5 and pos.y <= 150 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Lilly Pilly -plants_api.register_plant({ - nodes = { - trunk = "australia:lilly_pilly_tree", - leaves = "australia:lilly_pilly_leaves", - fruit = "australia:lilly_pilly_berries", - air = "air", - ignore = "ignore", - }, - cover = 0.0001, - density = 0.001, - priority = 40, - check = function(t, pos) - return pos.y >= 5 and pos.y <= 60 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(3, 5) - local radius = math_random(3, 5) - local limbs = nil - local fruit_chance = 0.3 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs, fruit_chance, nodes.fruit) - end, -}) - --- River Red Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:river_red_gum_tree", - leaves = "australia:river_red_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.00025, - density = 0.0025, - priority = 70, - check = function(t, pos) - return t.v2 > 0 and t.v2 < 0.03 and pos.y >= 5 and pos.y <= 72 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(10, 15) - local radius = math_random(5, 7) - local limbs = true - aus.make_river_red_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- Snow Gum -plants_api.register_plant({ - nodes = { - trunk = "australia:snow_gum_tree", - leaves = "australia:snow_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.025, - density = 0.05, - priority = 50, - check = function(t, pos) - return pos.y >= 130 and pos.y <= 180 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(2, 4) - local radius = 2 - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore) - end, -}) - --- Swamp Gum (forest) -plants_api.register_plant({ - nodes = { - trunk = "australia:swamp_gum_tree", - leaves = "australia:swamp_gum_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.005, - density = 0.005, - priority = 65, - check = function(t, pos) - return t.valleys > 0 and t.valleys < 0.3 and t.v4 > 0.6 and pos.y >= 45 and pos.y <= 64 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(20, 30) - local radius = math_random(7, 9) - local limbs = true - aus.make_swamp_gum(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- White Box -plants_api.register_plant({ - nodes = { - trunk = "australia:white_box_tree", - leaves = "australia:white_box_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0003, - density = 0.003, - priority = 75, - check = function(t, pos) - return t.valleys > 0.3 and t.v4 < 0.5 and pos.y >= 5 and pos.y <= 40 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(6, 10) - local radius = math_random(5, 7) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) - --- White Box -plants_api.register_plant({ - nodes = { - trunk = "australia:white_box_tree", - leaves = "australia:white_box_leaves", - air = "air", - ignore = "ignore", - }, - cover = 0.0005, - density = 0.005, - priority = 75, - check = function(t, pos) - return t.valleys > 0.3 and pos.y >= 41 and pos.y <= 145 and table.contains({"victoria"}, t.biome) - end, - grow = function(nodes, pos, data, area) - local height = math_random(6, 10) - local radius = math_random(5, 7) - local limbs = true - aus.make_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore, limbs) - end, -}) diff --git a/mods/MAPGEN/mapgen_core/depends.txt b/mods/MAPGEN/mapgen_core/depends.txt deleted file mode 100644 index 0da906b..0000000 --- a/mods/MAPGEN/mapgen_core/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -default -biome_lib -australia? -technic? diff --git a/mods/MAPGEN/mapgen_core/init.lua b/mods/MAPGEN/mapgen_core/init.lua deleted file mode 100644 index 96398f9..0000000 --- a/mods/MAPGEN/mapgen_core/init.lua +++ /dev/null @@ -1,205 +0,0 @@ ---[[ - Mapgen base ---]] - - --- --- Aliases for map generators --- - -minetest.register_alias("mapgen_stone", "default:stone") -minetest.register_alias("mapgen_dirt", "default:dirt") -minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass") -minetest.register_alias("mapgen_sand", "default:sand") -minetest.register_alias("mapgen_water_source", "default:water_source") -minetest.register_alias("mapgen_river_water_source", "default:river_water_source") -minetest.register_alias("mapgen_lava_source", "default:lava_source") -minetest.register_alias("mapgen_gravel", "default:gravel") -minetest.register_alias("mapgen_desert_stone", "default:desert_stone") -minetest.register_alias("mapgen_desert_sand", "default:desert_sand") -minetest.register_alias("mapgen_dirt_with_snow", "default:dirt_with_snow") -minetest.register_alias("mapgen_snowblock", "default:snowblock") -minetest.register_alias("mapgen_snow", "default:snow") -minetest.register_alias("mapgen_ice", "default:ice") -minetest.register_alias("mapgen_sandstone", "default:sandstone") - --- Flora -minetest.register_alias("mapgen_tree", "default:tree") -minetest.register_alias("mapgen_leaves", "default:leaves") -minetest.register_alias("mapgen_apple", "default:apple") -minetest.register_alias("mapgen_jungletree", "default:jungletree") -minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves") -minetest.register_alias("mapgen_junglegrass", "default:junglegrass") -minetest.register_alias("mapgen_pine_tree", "default:pine_tree") -minetest.register_alias("mapgen_pine_needles", "default:pine_needles") - --- Dungeons -minetest.register_alias("mapgen_cobble", "default:cobble") -minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") -minetest.register_alias("mapgen_mossycobble", "default:mossycobble") -minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") -minetest.register_alias("mapgen_sandstonebrick", "default:sandstonebrick") -minetest.register_alias("mapgen_stair_sandstone_block", "stairs:stair_sandstone_block") - - --- Mapgen settings -minetest.set_mapgen_setting("mg_flags", "caves,nodungeons,decorations,light", true) - - -minetest.clear_registered_decorations() -minetest.clear_registered_ores() - - ---[[ - Ores ---]] - --- Blob ore first to avoid other ores inside blobs - --- Clay -minetest.register_ore({ - ore_type = "blob", - ore = "default:clay", - wherein = {"default:dirt"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -15, - y_max = 64, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.2, - spread = {x = 5, y = 5, z = 5}, - seed = -316, - octaves = 1, - persist = 0.0 - }, -}) - --- Sand -minetest.register_ore({ - ore_type = "blob", - ore = "default:sand", - wherein = {"default:stone", "default:sandstone"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -31, - y_max = 12, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.2, - spread = {x = 5, y = 5, z = 5}, - seed = 2316, - octaves = 1, - persist = 0.0 - }, -}) - --- Dirt -minetest.register_ore({ - ore_type = "blob", - ore = "default:dirt", - wherein = {"default:stone"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -31, - y_max = 31000, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.2, - spread = {x = 5, y = 5, z = 5}, - seed = 17676, - octaves = 1, - persist = 0.0 - }, -}) - --- Gravel -minetest.register_ore({ - ore_type = "blob", - ore = "default:gravel", - wherein = {"default:stone"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -31000, - y_max = 31000, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.2, - spread = {x = 5, y = 5, z = 5}, - seed = 766, - octaves = 1, - persist = 0.0 - }, -}) - --- Diorite -minetest.register_ore({ - ore_type = "blob", - ore = "australia:diorite", - wherein = {"default:stone"}, - clust_scarcity = 15*15*15, - clust_num_ores = 33, - clust_size = 5, - y_min = -31000, - y_max = 31000, -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "australia:diorite", - wherein = {"default:stone"}, - clust_scarcity = 10*10*10, - clust_num_ores = 58, - clust_size = 7, - y_min = -31000, - y_max = 31000, -}) - --- Granite -minetest.register_ore({ - ore_type = "blob", - ore = "technic:granite", - wherein = {"default:stone"}, - clust_scarcity = 15*15*15, - clust_num_ores = 33, - clust_size = 5, - y_min = -31000, - y_max = 31000, -}) - -minetest.register_ore({ - ore_type = "blob", - ore = "technic:granite", - wherein = {"default:stone"}, - clust_scarcity = 10*10*10, - clust_num_ores = 58, - clust_size = 7, - y_min = -31000, - y_max = 31000, -}) - - ---[[ - Trees ---]] - ---Palm trees on beaches in warmer biomes -biome_lib:register_generate_plant({ - surface = {"default:sand"}, - max_count = 4, - rarity = 33, - seed_diff = 330, - min_elevation = -1, - max_elevation = 3, - near_nodes = {"default:water_source"}, - near_nodes_size = 15, - near_nodes_count = 10, - temp_min = -0.2, - }, - aus.palm_model -) - diff --git a/mods/MAPGEN/mapgen_core/mod.conf b/mods/MAPGEN/mapgen_core/mod.conf deleted file mode 100644 index f376eb3..0000000 --- a/mods/MAPGEN/mapgen_core/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = mapgen_core diff --git a/mods/MAPGEN/modpack.txt b/mods/MAPGEN/modpack.txt deleted file mode 100644 index e69de29..0000000 diff --git a/mods/MAPGEN/outback/depends.txt b/mods/MAPGEN/outback/depends.txt deleted file mode 100644 index 46e0133..0000000 --- a/mods/MAPGEN/outback/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -default -australia -biome_lib -plants_api -technic -ferns -flowers diff --git a/mods/MAPGEN/outback/description.txt b/mods/MAPGEN/outback/description.txt deleted file mode 100644 index 51b01dd..0000000 --- a/mods/MAPGEN/outback/description.txt +++ /dev/null @@ -1 +0,0 @@ -This is only used to handle cases the decoration manager can't, such as trees alongside rivers, rocky beaches and salt lakes. \ No newline at end of file diff --git a/mods/MAPGEN/outback/functions.lua b/mods/MAPGEN/outback/functions.lua deleted file mode 100644 index 865a0c5..0000000 --- a/mods/MAPGEN/outback/functions.lua +++ /dev/null @@ -1,52 +0,0 @@ ---[[ - Functions ---]] - -outback.registered_on_first_mapgen = {} - -function outback.register_on_first_mapgen(func) -- Callback - table.insert(outback.registered_on_first_mapgen, func) -end - -local function get_content_id(value) -- get content ID recursively from a table. - local typeval = type(value) - - if typeval == "string" then - return minetest.get_content_id(value) - elseif typeval == "table" then - for k, v in pairs(value) do - value[k] = get_content_id(v) - end - end - - return value -end - -outback.register_on_first_mapgen(function() - table.sort(plants_api.registered_plants, - function(a, b) - return a.priority > b.priority - end - ) - - for _, plant in ipairs(plants_api.registered_plants) do -- convert 'nodes' into content IDs - plant.nodes = get_content_id(plant.nodes) - end -end) - - --- Check if the table contains an element. -function table.contains(table, element) - for key, value in pairs(table) do - if value == element then - if key then - return key - else - return true - end - end - end - - return false -end - diff --git a/mods/MAPGEN/outback/init.lua b/mods/MAPGEN/outback/init.lua deleted file mode 100644 index 9f9d800..0000000 --- a/mods/MAPGEN/outback/init.lua +++ /dev/null @@ -1,97 +0,0 @@ ---[[ - Outback ---]] - --- Definitions made by this mod that other mods can use too. -outback = {} -outback.path = minetest.get_modpath("outback") - - ---[[ - Mapgen settings - If you change a value here also check and, if necessary, - change the corresponding value in voxel.lua ---]] - --- Noise parameters for biome API temperature, humidity and biome blend. -outback.mg_biome_np_heat = {offset = 50, scale = 50, seed = 5349, - spread = {x = 1024, y = 1024, z = 1024}, octaves = 3, persist = 0.5, lacunarity = 2,} - -outback.mg_biome_np_heat_blend = {offset = 0, scale = 1.5, seed = 13, - spread = {x = 8, y = 8, z = 8}, octaves = 2, persist = 1, lacunarity = 2,} - -outback.mg_biome_np_humidity = {offset = 50, scale = 50, seed = 842, - spread = {x = 1024, y = 1024, z = 1024}, octaves = 3, persist = 0.5, lacunarity = 2,} - -outback.mg_biome_np_humidity_blend = {offset = 0, scale = 1.5, seed = 90003, - spread = {x = 8, y = 8, z = 8}, octaves = 2, persist = 1, lacunarity = 2,} - --- Caves and tunnels form at the intersection of the two noises -outback.mgvalleys_np_cave1 = {offset = 0, scale = 12, seed = 52534, - spread = {x = 61, y = 61, z = 61}, octaves = 3, persist = 0.5, lacunarity = 2,} - --- Caves and tunnels form at the intersection of the two noises -outback.mgvalleys_np_cave2 = {offset = 0, scale = 12, seed = 10325, - spread = {x = 67, y = 67, z = 67}, octaves = 3, persist = 0.5, lacunarity = 2,} - --- The depth of dirt or other filler -outback.mgvalleys_np_filler_depth = {offset = 0, scale = 1.2, seed = 1605, - spread = {x = 256, y = 256, z = 256}, octaves = 3, persist = 0.5, lacunarity = 2,} - --- Massive caves form here. -outback.mgvalleys_np_massive_caves = {offset = 0, scale = 1, seed = 59033, - spread = {x = 768, y = 256, z = 768}, octaves = 6, persist = 0.63, lacunarity = 2,} - --- River noise -- rivers occur close to zero -outback.mgvalleys_np_rivers = {offset = 0, scale = 1, seed = -6050, - spread = {x = 512, y = 512, z = 512}, octaves = 5, persist = 0.6, lacunarity = 2,} - --- Base terrain height -outback.mgvalleys_np_terrain_height = {offset = -10, scale = 100, seed = 5202, - spread = {x = 1024, y = 1024, z = 1024}, octaves = 3, persist = 0.7, lacunarity = 2,} - --- Raises terrain to make valleys around the rivers -outback.mgvalleys_np_valley_depth = {offset = 3, scale = 2, seed = -1914, - spread = {x = 512, y = 512, z = 512}, octaves = 1, persist = 1, lacunarity = 2,} - --- Slope and fill work together to modify the heights -outback.mgvalleys_np_inter_valley_fill = {offset = 0, scale = 1, seed = 1993, - spread = {x = 512, y = 256, z = 512}, octaves = 6, persist = 0.8, lacunarity = 2,} - --- Amplifies the valleys -outback.mgvalleys_np_valley_profile = {offset = 0.6, scale = 0.5, seed = 777, - spread = {x = 512, y = 512, z = 512}, octaves = 4, persist = 1, lacunarity = 2,} - --- Slope and fill work together to modify the heights -outback.mgvalleys_np_inter_valley_slope = {offset = 0, scale = 1, seed = 746, - spread = {x = 256, y = 256, z = 256}, octaves = 3, persist = 0.5, lacunarity = 2,} - -minetest.set_noiseparams("mg_biome_np_heat", outback.mg_biome_np_heat) -minetest.set_noiseparams("mg_biome_np_heat_blend", outback.mg_biome_np_heat_blend) -minetest.set_noiseparams("mg_biome_np_humidity", outback.mg_biome_np_humidity) -minetest.set_noiseparams("mg_biome_np_humidity_blend", outback.mg_biome_np_humidity_blend) -minetest.set_noiseparams("mgvalleys_np_cave1", outback.mgvalleys_np_cave1) -minetest.set_noiseparams("mgvalleys_np_cave2", outback.mgvalleys_np_cave2) -minetest.set_noiseparams("mgvalleys_np_filler_depth", outback.mgvalleys_np_filler_depth) -minetest.set_noiseparams("mgvalleys_np_massive_caves", outback.mgvalleys_np_massive_caves) -minetest.set_noiseparams("mgvalleys_np_rivers", outback.mgvalleys_np_rivers) -minetest.set_noiseparams("mgvalleys_np_terrain_height", outback.mgvalleys_np_terrain_height) -minetest.set_noiseparams("mgvalleys_np_valley_depth", outback.mgvalleys_np_valley_depth) -minetest.set_noiseparams("mgvalleys_np_inter_valley_fill", outback.mgvalleys_np_inter_valley_fill) -minetest.set_noiseparams("mgvalleys_np_valley_profile", outback.mgvalleys_np_valley_profile) -minetest.set_noiseparams("mgvalleys_np_inter_valley_slope", outback.mgvalleys_np_inter_valley_slope) - --- How deep to make rivers -minetest.setting_set("mgvalleys_river_depth", 5) - --- How wide to make rivers -minetest.setting_set("mgvalleys_river_size", 4) - - ---[[ - Load files ---]] - -dofile(outback.path .. "/functions.lua") -dofile(outback.path .. "/voxel.lua") - diff --git a/mods/MAPGEN/outback/mod.conf b/mods/MAPGEN/outback/mod.conf deleted file mode 100644 index 9775171..0000000 --- a/mods/MAPGEN/outback/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = outback diff --git a/mods/MAPGEN/outback/voxel.lua b/mods/MAPGEN/outback/voxel.lua deleted file mode 100644 index 83becdc..0000000 --- a/mods/MAPGEN/outback/voxel.lua +++ /dev/null @@ -1,381 +0,0 @@ ---[[ - Voxel Manipulator - - This is only used to handle cases the decoration manager can't, such as - trees alongside rivers, rocky beaches and salt lakes. ---]] - --- Read the noise parameters from the actual mapgen. -local function getCppSettingNoise(name, default) - local noise - local n = minetest.setting_get(name) - - if n then - local parse = {spread = {}} - local n1, n2, n3, n4, n5, n6, n7, n8, n9 - n1, n2, n3, n4, n5, n6, n7, n8, n9 = string.match(n, '([%d%.%-]+), ([%d%.%-]+), %(([%d%.%-]+), ([%d%.%-]+), ([%d%.%-]+)%), ([%d%.%-]+), ([%d%.%-]+), ([%d%.%-]+), ([%d%.%-]+)') - if n9 then - noise = {offset = tonumber(n1), scale = tonumber(n2), - seed = tonumber(n6), spread = {x = tonumber(n3), - y = tonumber(n4), z = tonumber(n5)}, octaves = tonumber(n7), - persist = tonumber(n8), lacunarity = tonumber(n9)} - end - - end - - -- Use the default otherwise. - if not noise then - noise = default - end - - return noise -end - - --- Define perlin noises used in this mapgen by default -local noises = {} - --- Noise 1 : Base terrain height (2D) -noises[1] = getCppSettingNoise('mg_valleys_np_terrain_height', { - offset = -10, - scale = 100, - seed = 5202, - spread = {x = 1024, y = 1024, z = 1024}, - octaves = 3, - persist = 0.7, - lacunarity = 2, -}) - --- Noise 2 : Valleys (2D) -noises[2] = getCppSettingNoise('mg_valleys_np_rivers', { - offset = 0, - scale = 1, - seed = -6050, - spread = {x = 512, y = 512, z = 512}, - octaves = 5, - persist = 0.6, - lacunarity = 2, -}) - --- Noise 3 : Valleys Depth (2D) -noises[3] = getCppSettingNoise('mg_valleys_np_valley_depth', { - offset = 3, - scale = 2, - seed = -1914, - spread = {x = 512, y = 512, z = 512}, - octaves = 1, - persist = 1, - lacunarity = 2, -}) - --- Noise 4 : Valleys Profile (2D) -noises[4] = getCppSettingNoise('mg_valleys_np_valley_profile', { - offset = 0.6, - scale = 0.5, - seed = 777, - spread = {x = 512, y = 512, z = 512}, - octaves = 4, - persist = 1, - lacunarity = 2, -}) - --- Noise 5 : Inter-valleys slopes (2D) -noises[5] = getCppSettingNoise('mg_valleys_np_inter_valley_slope', { - offset = 0, - scale = 1, - seed = 746, - spread = {x = 256, y = 256, z = 256}, - octaves = 3, - persist = 0.5, - lacunarity = 2, -}) - --- Noise 6 : Inter-valleys filling (3D) -noises[6] = getCppSettingNoise('mg_valleys_np_inter_valley_fill', { - offset = 0, - scale = 1, - seed = 1993, - spread = {x = 512, y = 256, z = 512}, - octaves = 6, - persist = 0.8, - lacunarity = 2, - }) - --- Noise 20 : Salt lakes (2D) -noises[20] = { - offset = 0, - scale = 1, - seed = 1964, - spread = {x = 16, y = 16, z = 16}, - octaves = 3, - persist = 0.5, - lacunarity = 2, -} - --- function to get noisemaps -local function noisemap(i, minp, chulens) - local obj = minetest.get_perlin_map(noises[i], chulens) - if minp.z then - return obj:get3dMap_flat(minp) - else - return obj:get2dMap_flat(minp) - end -end - --- List of functions to run at the end of the mapgen procedure -outback.after_mapgen = {} - -function outback.register_after_mapgen(f, ...) - table.insert(outback.after_mapgen, {f = f, ...}) -end - -function outback.execute_after_mapgen() - for i, params in ipairs(outback.after_mapgen) do - params.f(unpack(params)) - end - outback.after_mapgen = {} -end - -local function getCppSettingNumeric(name, default) - local setting = minetest.setting_get(name) - - if setting and tonumber(setting) then - setting = tonumber(setting) - else - setting = default - end - - return setting -end - --- Rocky beaches -local function rock_beach(x, y, z, a, data) - local c_granite = minetest.get_content_id("technic:granite") - local dx = math.random() * 15 + 1 - local dy = math.random() * 15 + 1 - local dz = math.random() * 15 + 1 - for k = -8, 8 do - for j = -8, 8 do - local vi = a:index(x-8, y+j, z+k) - for i = -8, 8 do - if (i ^ 2 * dx + j ^ 2 * dy + k ^ 2 * dz) ^ 0.5 < 8 then - data[vi] = c_granite - end - vi = vi + 1 - end - end - end -end - --- Define parameters -local river_size = 4 / 100 - --- This table holds the content IDs. They aren't available until --- the actual mapgen loop is run, but they can stay local to the --- file rather than having to load them for every map chunk. --- -local node = {} - --- Create a table of biome ids, so I can use the biomemap. -if not outback.biome_ids then - local i - outback.biome_ids = {} - for name, desc in pairs(minetest.registered_biomes) do - i = minetest.get_biome_id(desc.name) - outback.biome_ids[i] = desc.name - end -end - -local data = {} - --- THE MAPGEN FUNCTION -minetest.register_on_generated(function(minp, maxp, seed) - if outback.registered_on_first_mapgen then -- Run callbacks - for _, f in ipairs(outback.registered_on_first_mapgen) do - f() - end - outback.registered_on_first_mapgen = nil - outback.register_on_first_mapgen = nil - end - - -- Define content IDs - -- A content ID is a number that represents a node in the core of Minetest. - -- Every nodename has its ID. - -- The VoxelManipulator uses content IDs instead of nodenames. - if not node["stone"] then - node["stone"] = minetest.get_content_id("default:stone") - node["sandstone"] = minetest.get_content_id("default:sandstone") - node["dirt"] = minetest.get_content_id("default:dirt") - node["lawn"] = minetest.get_content_id("default:dirt_with_grass") - node["dry"] = minetest.get_content_id("default:dirt_with_dry_grass") - node["snowblock"] = minetest.get_content_id("default:snowblock") - node["desert_sand"] = minetest.get_content_id("default:desert_sand") - node["sand"] = minetest.get_content_id("default:sand") - node["red_dirt"] = minetest.get_content_id("australia:red_dirt") - node["red_gravel"] = minetest.get_content_id("australia:red_gravel") - node["red_sand"] = minetest.get_content_id("australia:red_sand") - node["mud"] = minetest.get_content_id("australia:mangrove_mud") - node["salt"] = minetest.get_content_id("australia:mineral_salt") - -- Water - node["water"] = minetest.get_content_id("default:water_source") - node["muddy_water"] = minetest.get_content_id("australia:muddy_water_source") - -- Air and Ignore - node["air"] = minetest.get_content_id("air") - node["ignore"] = minetest.get_content_id("ignore") - end - - -- The VoxelManipulator, a complicated but speedy method to set many nodes at the same time - local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - -- The VoxelArea is used to convert a position into an index for the array. - local a = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) - vm:get_data(data) -- data is the original array of content IDs (solely or mostly air) - -- Be careful: emin ≠ minp and emax ≠ maxp ! - -- The data array is not limited by minp and maxp. It exceeds it by 16 nodes in the 6 directions. - -- The real limits of data array are emin and emax. - -- Tip : the ystride of a VoxelArea is the number to add to the array index to get the index of the position above. - -- It's faster because it avoids to completely recalculate the index. - local ystride = a.ystride - - -- The biomemap is a table of biome index numbers for each horizontal - -- location. It's created in the mapgen, and is right most of the time. - -- It's off in about 1% of cases, for various reasons. - -- Bear in mind that biomes can change from one voxel to the next. - local biomemap = minetest.get_mapgen_object("biomemap") - local heightmap = minetest.get_mapgen_object("heightmap") - - -- Calculate the noise values - local minp2d = {x = minp.x, y = minp.z} - local chulens = vector.add(vector.subtract(maxp, minp), 1) -- Size of the generated area, used by noisemaps - local chulens_sup = {x = chulens.x, y = chulens.y + 6, z = chulens.z} -- for noise #6 that needs extra values - - local n1 = noisemap(1, minp2d, chulens) - local n2 = noisemap(2, minp2d, chulens) - local n3 = noisemap(3, minp2d, chulens) - local n4 = noisemap(4, minp2d, chulens) - local n5 = noisemap(5, minp2d, chulens) - local n6 = noisemap(6, minp, chulens_sup) - local n20 = noisemap(20, minp2d, chulens) - - - -- THE CORE OF THE MOD: THE MAPGEN ALGORITHM ITSELF - -- indexes for noise arrays - local i2d = 1 -- index for 2D noises - local i3d_sup = 1 -- index for noise #6 which has a special size - - -- Calculate increments - local i2d_incrZ = chulens.z - local i2d_decrX = chulens.x * chulens.z - 1 - local biome - - for x = minp.x, maxp.x do -- for each YZ plane - for z = minp.z, maxp.z do -- for each vertical line in this plane - -- take the noise values for 2D noises - local v1, v2, v3, v4, v5, v20 = - n1[i2d], n2[i2d], n3[i2d], n4[i2d], n5[i2d], n20[i2d] - - -- Check for a salt lakes and rocky beaches - biome = outback.biome_ids[biomemap[i2d]] - - local saltlake, rocky_beach = nil - if table.contains({"simpson_desert"}, biome) and v20 > 0.8 then - saltlake = true - end - - if table.contains({"mangroves"}, biome) then - rocky_beach = false - elseif table.contains({"tasman_sea", "indian_ocean", "great_australian_bight"}, - biome) then - rocky_beach = true - end - - for y = maxp.y, minp.y, -1 do -- for each node in vertical line - local ivm = a:index(x, y, z) -- index of the data array, matching the position {x, y, z} - local v6 = n6[i3d_sup] -- take the noise values for 3D noises - local ground = math.max(heightmap[i2d], 0) - 5 - - -- Check for suitable ground node - if data[ivm] == node["dirt"] - or data[ivm] == node["dry"] - or data[ivm] == node["lawn"] - or data[ivm] == node["desert_sand"] - or data[ivm] == node["stone"] - or data[ivm] == node["sand"] - or data[ivm] == node["mud"] - or data[ivm] == node["red_dirt"] - or data[ivm] == node["red_gravel"] - or data[ivm] == node["red_sand"] - or data[ivm] == node["snowblock"] then - - -- a top node - if y >= ground and data[ivm + ystride] == node["air"] then - - -- The square function changes the behaviour of this noise : very often - -- small, and sometimes very high. - v3 = v3 ^ 2 - -- v3 is here because terrain is generally higher where valleys are deep - -- (mountains). base_ground represents the height of the rivers, most of - -- the surface is above. - local base_ground = v1 + v3 - -- v2 represents the distance from the river, in arbitrary units. - v2 = math.abs(v2) - river_size - -- The rivers are placed where v2 is negative, so where the original v2 - -- value is close to zero. - local river = v2 < 0 - -- Use the curve of the function 1−exp(−(x/a)²) to modelise valleys. Making - -- "a" varying 0 < a ≤ 1 changes the shape of the valleys. Try it with a - -- geometry software! (here x = v2 and a = v4). This variable represents - -- the height of the terrain, from the rivers. - local valleys = v3 * (1 - math.exp(- (v2 / v4) ^ 2)) - -- Approximate height of the terrain at this point (could be slightly - -- modified by the 3D noise #6) - local mountain_ground = base_ground + valleys - -- This variable represents the maximal influence of the noise #6 on the - -- elevation. v5 is the rate of the height from rivers (variable "valleys") - -- that is concerned. - local slopes = v5 * valleys - - -- Salt lakes - if saltlake and y < 20 and slopes < 0 and v2 > 0.1 and - v2 < 0.2 and data[ivm] == node["red_sand"] then - data[ivm] = node["salt"] - end - - -- Rocky beaches - if rocky_beach and v6 > 0.5 and v2 > 0.15 and y < 2 then - rock_beach(x, y, z, a, data) - end - - -- Plants and trees - local conditions = { -- pack it in a table, for plants API - v1 = v1, - v2 = v2, - v3 = v3, - v4 = v4, - v5 = v5, - v6 = v6, - base_ground = base_ground, - river = river, - valleys = valleys, - mountain_ground = mountain_ground, - slopes = slopes, - biome = outback.biome_ids[biomemap[i2d]] - } - plants_api.choose_generate_plant(conditions, - {x=x,y=y+1,z=z}, data, a, ivm + ystride) - end - end - end - i2d = i2d + i2d_incrZ -- Increment i2d by one Z - end - i2d = i2d - i2d_decrX -- Decrement the Z line previously incremented and increment by one X (1) - end - outback.execute_after_mapgen() -- Needed for some tree roots - - -- Execute voxelmanip boring stuff to write to the map... - vm:set_data(data) - -- vm:set_lighting({day = 0, night = 0}) - vm:calc_lighting() - vm:update_liquids() - vm:write_to_map() - -end) diff --git a/mods/PLAYER/bones/depends.txt b/mods/PLAYER/bones/depends.txt deleted file mode 100644 index aaeb4b6..0000000 --- a/mods/PLAYER/bones/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -init -inventory -default diff --git a/mods/PLAYER/bones/init.lua b/mods/PLAYER/bones/init.lua deleted file mode 100644 index a08ed7d..0000000 --- a/mods/PLAYER/bones/init.lua +++ /dev/null @@ -1,251 +0,0 @@ --- Minetest 0.4 mod: bones --- See README.txt for licensing and other information. - -local bones = {} - -local function is_owner(pos, name) - local owner = minetest.get_meta(pos):get_string("owner") - if owner == "" or owner == name or minetest.check_player_privs(name, "protection_bypass") then - return true - end - return false -end - -local bones_formspec = - "size[8,9]" .. - init.gui_bg .. - init.gui_bg_img .. - init.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]" .. - init.get_hotbar_bg(0,4.85) - -local share_bones_time = tonumber(minetest.settings:get("share_bones_time")) or 1200 -local share_bones_time_early = tonumber(minetest.settings:get("share_bones_time_early")) or share_bones_time / 4 - -minetest.register_node("bones:bones", { - description = "Bones", - tiles = { - "bones_top.png^[transform2", - "bones_bottom.png", - "bones_side.png", - "bones_side.png", - "bones_rear.png", - "bones_front.png" - }, - paramtype2 = "facedir", - groups = {dig_immediate = 2}, - sounds = default.node_sound_gravel_defaults(), - - can_dig = function(pos, player) - local inv = minetest.get_meta(pos):get_inventory() - local name = "" - if player then - name = player:get_player_name() - end - return is_owner(pos, name) and inv:is_empty("main") - end, - - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - if is_owner(pos, player:get_player_name()) then - return count - end - return 0 - end, - - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - return 0 - end, - - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if is_owner(pos, player:get_player_name()) then - return stack:get_count() - end - return 0 - end, - - on_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if meta:get_inventory():is_empty("main") then - minetest.remove_node(pos) - end - end, - - on_punch = function(pos, node, player) - if not is_owner(pos, player:get_player_name()) then - return - end - - if minetest.get_meta(pos):get_string("infotext") == "" then - return - end - - local inv = minetest.get_meta(pos):get_inventory() - local player_inv = player:get_inventory() - local has_space = true - - for i = 1, inv:get_size("main") do - local stk = inv:get_stack("main", i) - if player_inv:room_for_item("main", stk) then - inv:set_stack("main", i, nil) - player_inv:add_item("main", stk) - else - has_space = false - break - end - end - - -- remove bones if player emptied them - if has_space then - if player_inv:room_for_item("main", {name = "bones:bones"}) then - player_inv:add_item("main", {name = "bones:bones"}) - else - minetest.add_item(pos,"bones:bones") - end - minetest.remove_node(pos) - end - end, - - on_timer = function(pos, elapsed) - local meta = minetest.get_meta(pos) - local time = meta:get_int("time") + elapsed - if time >= share_bones_time then - meta:set_string("infotext", meta:get_string("owner") .. "'s old bones") - meta:set_string("owner", "") - else - meta:set_int("time", time) - return true - end - end, - on_blast = function(pos) - end, -}) - -local function may_replace(pos, player) - local node_name = minetest.get_node(pos).name - local node_definition = minetest.registered_nodes[node_name] - - -- if the node is unknown, we return false - if not node_definition then - return false - end - - -- allow replacing air and liquids - if node_name == "air" or node_definition.liquidtype ~= "none" then - return true - end - - -- don't replace filled chests and other nodes that don't allow it - local can_dig_func = node_definition.can_dig - if can_dig_func and not can_dig_func(pos, player) then - return false - end - - -- default to each nodes buildable_to; if a placed block would replace it, why shouldn't bones? - -- flowers being squished by bones are more realistical than a squished stone, too - -- exception are of course any protected buildable_to - return node_definition.buildable_to and not minetest.is_protected(pos, player:get_player_name()) -end - -local drop = function(pos, itemstack) - local obj = minetest.add_item(pos, itemstack:take_item(itemstack:get_count())) - if obj then - obj:setvelocity({ - x = math.random(-10, 10) / 9, - y = 5, - z = math.random(-10, 10) / 9, - }) - end -end - -minetest.register_on_dieplayer(function(player) - - local bones_mode = minetest.settings:get("bones_mode") or "bones" - if bones_mode ~= "bones" and bones_mode ~= "drop" and bones_mode ~= "keep" then - bones_mode = "bones" - end - - -- return if keep inventory set or in creative mode - if bones_mode == "keep" or (creative and creative.is_enabled_for - and creative.is_enabled_for(player:get_player_name())) then - return - end - - local player_inv = player:get_inventory() - if player_inv:is_empty("main") and - player_inv:is_empty("craft") then - return - end - - local pos = vector.round(player:getpos()) - local player_name = player:get_player_name() - - -- check if it's possible to place bones, if not find space near player - if bones_mode == "bones" and not may_replace(pos, player) then - local air = minetest.find_node_near(pos, 1, {"air"}) - if air and not minetest.is_protected(air, player_name) then - pos = air - else - bones_mode = "drop" - end - end - - if bones_mode == "drop" then - - -- drop inventory items - for i = 1, player_inv:get_size("main") do - drop(pos, player_inv:get_stack("main", i)) - end - player_inv:set_list("main", {}) - - -- drop crafting grid items - for i = 1, player_inv:get_size("craft") do - drop(pos, player_inv:get_stack("craft", i)) - end - player_inv:set_list("craft", {}) - - drop(pos, ItemStack("bones:bones")) - return - end - - local param2 = minetest.dir_to_facedir(player:get_look_dir()) - minetest.set_node(pos, {name = "bones:bones", param2 = param2}) - - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("main", 8 * 4) - inv:set_list("main", player_inv:get_list("main")) - - for i = 1, player_inv:get_size("craft") do - local stack = player_inv:get_stack("craft", i) - if inv:room_for_item("main", stack) then - inv:add_item("main", stack) - else - --drop if no space left - drop(pos, stack) - end - end - - player_inv:set_list("main", {}) - player_inv:set_list("craft", {}) - - meta:set_string("formspec", bones_formspec) - meta:set_string("owner", player_name) - - if share_bones_time ~= 0 then - meta:set_string("infotext", player_name .. "'s fresh bones") - - if share_bones_time_early == 0 or not minetest.is_protected(pos, player_name) then - meta:set_int("time", 0) - else - meta:set_int("time", (share_bones_time - share_bones_time_early)) - end - - minetest.get_node_timer(pos):start(10) - else - meta:set_string("infotext", player_name.."'s bones") - end -end) diff --git a/mods/PLAYER/hbhunger/README.md b/mods/PLAYER/hbhunger/README.md deleted file mode 100644 index cf1b1a6..0000000 --- a/mods/PLAYER/hbhunger/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# Hunger with HUD bar [`hbhunger`] - -* Version: 0.5.3 - -## Using the mod - -This mod adds a mechanic for hunger. -This mod depends on the HUD bars mod [`hudbars`], version 1.4.1 or any later version -starting with “1.”. - -## About hunger -This mod adds a hunger mechanic to the game. Players get a new attribute called “satiation”: - -* A new player starts with 20 satiation points out of 30 -* Actions like digging, placing and walking cause exhaustion, which lower the satiation -* Every 800 seconds you lose 1 satiation point without doing anything -* At 1 or 0 satiation you will suffer damage and die in case you don't eat something -* If your satiation is 16 or higher, you will slowly regenerate health points -* Eating food will increase your satiation (Duh!) - -Important: Eating food will not directly increase your health anymore, as long as the food -item is supported by this mod (see below). - -Careful! Some foods may be poisoned. If you eat a poisoned item, you may still get a satiation -boost, but for a brief period you lose health points because of food poisoning. However, -food poisoning can never kill you. - -## Statbar mode -If you use the statbar mode of the HUD Bars mod, these things are important to know: -As with all mods using HUD Bars, the bread statbar symbols represent the rough percentage -out of 30 satiation points, in steps of 5%, so the symbols give you an estimate of your -satiation. This is different from the hunger mod by BlockMen. - -You gain health at 5.5 symbols or more, as 5.5 symbols correspond to 16 satiation points. -You *may* lose health at exactly 0.5 symbols, as 0.5 symbols correspond to 1-2 satiation points. - -## Supported food -All mods which add food through standard measures (`minetest.item_eat`) are already -supported automatically. Poisoned food needs special support. - -### Known supported food mods -* Apple from Minetest Game [`default`] -* Red and brown mushroom from Minetest Game [`flowers`] -* Bread from Minetest Game [`farming`] -* [`animalmaterials`] (Mob Framework (`mobf` modpack)) -* Bushes [`bushes`] -* [`bushes_classic`] -* Creatures [`creatures`] -* [`dwarves`] (beer and such) -* Docfarming [`docfarming`] -* Ethereal / Ethereal NG [`ethereal`] -* Farming Redo [`farming`] by TenPlus1 -* Farming plus [`farming_plus`] -* Ferns [`ferns`] -* Fishing [`fishing`] -* [`fruit`] -* Glooptest [`glooptest`] -* JKMod ([`jkanimals`], [`jkfarming`], [`jkwine`]) -* [`kpgmobs`] -* [`mobfcooking`] -* [`mooretrees`] -* [`mtfoods`] -* [`mushroom`] -* [`mush45`] -* Seaplants [`sea`] -* Simple mobs [`mobs`] -* Pizza [`pizza`] -* Not So Simple Mobs [`nssm`] - -### Supported mods without optional dependency (mods provide their own support) - -* Food ([`food`], [`food_basic`]) -* Sweet Foods [`food_sweet`] - -### Examples - -* Eating an apple (from Minetest Game) increases your satiation by 2; -* eating a bread (from Minetest Game) increases your satiation by 4. - -## Licensing -This mod is free software. - -### Source code - -* License: [LGPL v2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -* Author: by Wuzzy (2015-2016) -* Forked from the “Better HUD (and hunger)” mod by BlockMen (2013-2015), - most code comes from this mod. - -### Textures - -* `hbhunger_icon.png`—PilzAdam ([WTFPL](http://www.wtfpl.net/txt/copying/)), modified by BlockMen -* `hbhunger_bgicon.png`—PilzAdam (WTFPL), modified by BlockMen -* `hbhunger_bar.png—Wuzzy` (WTFPL) -* `hbhunger_icon_health_poison.png`—celeron55 ([CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/)), modified by BlockMen, modified again by Wuzzy -* Everything else: WTFPL, by BlockMen and Wuzzy - diff --git a/mods/PLAYER/hbhunger/changelog.txt b/mods/PLAYER/hbhunger/changelog.txt deleted file mode 100644 index a56dbcb..0000000 --- a/mods/PLAYER/hbhunger/changelog.txt +++ /dev/null @@ -1,51 +0,0 @@ -0.1.0 ------ -Initial release - -0.2.0 ------ -- Change “saturation” to “satiation” -- Rename global table to “hbhunger” to avoid collisions -- General cleanup - -0.3.0 ------ -- Play simple eating sound when something is eaten - -0.3.1 ------ -- Add Ethereal orange -- Fix exhaus variable - -0.3.2 ------ -- Fix another crash - -0.4.0 ------ -- Generic eating functionality, items using the minetest.item_eat are automatically supported -- Change health bar and icon when poisoned -- Special support for red and brown mushroom from Minetest Game [flowers] -- Special support for [pizza] -- Special support for beans from Farming Redo [farming] -- Fix crash when poisoned player leaves server -- Changed license to LGPL v2.1 - -0.4.1 ------ -- Add foods from Not So Simple Mobs [nssm] - -0.5.0 ------ -- Fix custom sound not working -- Add Portuguese translation - -0.5.1 ------ -- Fix incompability problem with pipeworks mod - -0.5.2 ------ -- Fix mod not working with both intllib and mod security enabled -- Add missing screenshot -- Rewrite README and use Markdown format diff --git a/mods/PLAYER/hbhunger/depends.txt b/mods/PLAYER/hbhunger/depends.txt deleted file mode 100644 index 63767db..0000000 --- a/mods/PLAYER/hbhunger/depends.txt +++ /dev/null @@ -1,32 +0,0 @@ -hudbars -default? -intllib? -flowers? -animalmaterials? -bucket? -bushes? -bushes_classic? -cooking? -creatures? -docfarming? -dwarves? -ethereal? -farming? -farming_plus? -ferns? -fishing? -fruit? -glooptest? -jkanimals? -jkfarming? -jkwine? -kpgmobs? -mobfcooking? -mobs? -moretrees? -mtfoods? -mush45? -mushrooms? -seaplants? -pizza? -nssm? diff --git a/mods/PLAYER/hbhunger/description.txt b/mods/PLAYER/hbhunger/description.txt deleted file mode 100644 index 77e6159..0000000 --- a/mods/PLAYER/hbhunger/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds a simple hunger meachanic with satiation, food poisoning and different healing. diff --git a/mods/PLAYER/hbhunger/hunger.lua b/mods/PLAYER/hbhunger/hunger.lua deleted file mode 100644 index 6e6fb8a..0000000 --- a/mods/PLAYER/hbhunger/hunger.lua +++ /dev/null @@ -1,467 +0,0 @@ --- Keep these for backwards compatibility -function hbhunger.save_hunger(player) - hbhunger.set_hunger_raw(player) -end -function hbhunger.load_hunger(player) - hbhunger.get_hunger_raw(player) -end - --- wrapper for minetest.item_eat (this way we make sure other mods can't break this one) -local org_eat = core.do_item_eat -core.do_item_eat = function(hp_change, replace_with_item, itemstack, user, pointed_thing) - local old_itemstack = itemstack - itemstack = hbhunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing) - for _, callback in pairs(core.registered_on_item_eats) do - local result = callback(hp_change, replace_with_item, itemstack, user, pointed_thing, old_itemstack) - if result then - return result - end - end - return itemstack -end - --- food functions -local food = hbhunger.food - -function hbhunger.register_food(name, hunger_change, replace_with_item, poisen, heal, sound) - food[name] = {} - food[name].saturation = hunger_change -- hunger points added - food[name].replace = replace_with_item -- what item is given back after eating - food[name].poisen = poisen -- time its poisening - food[name].healing = heal -- amount of HP - food[name].sound = sound -- special sound that is played when eating -end - -function hbhunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing) - local item = itemstack:get_name() - local def = food[item] - if not def then - def = {} - if type(hp_change) ~= "number" then - hp_change = 1 - core.log("error", "Wrong on_use() definition for item '" .. item .. "'") - end - def.saturation = hp_change * 1.3 - def.replace = replace_with_item - end - local func = hbhunger.item_eat(def.saturation, def.replace, def.poisen, def.healing, def.sound) - return func(itemstack, user, pointed_thing) -end - --- Poison player -local function poisenp(tick, time, time_left, player) - -- First check if player is still there - if not player:is_player() then - return - end - time_left = time_left + tick - if time_left < time then - minetest.after(tick, poisenp, tick, time, time_left, player) - else - hbhunger.poisonings[player:get_player_name()] = hbhunger.poisonings[player:get_player_name()] - 1 - if hbhunger.poisonings[player:get_player_name()] <= 0 then - -- Reset HUD bar color - hb.change_hudbar(player, "health", nil, nil, "hudbars_icon_health.png", nil, "hudbars_bar_health.png") - end - end - if player:get_hp()-1 > 0 then - player:set_hp(player:get_hp()-1) - end -end - -function hbhunger.item_eat(hunger_change, replace_with_item, poisen, heal, sound) - return function(itemstack, user, pointed_thing) - if itemstack:take_item() ~= nil and user ~= nil then - local name = user:get_player_name() - local h = tonumber(hbhunger.hunger[name]) - local hp = user:get_hp() - minetest.sound_play({name = sound or "hbhunger_eat_generic", gain = 1}, {pos=user:getpos(), max_hear_distance = 16}) - - -- Saturation - if h < 30 and hunger_change then - h = h + hunger_change - if h > 30 then h = 30 end - hbhunger.hunger[name] = h - hbhunger.set_hunger_raw(user) - end - -- Healing - if hp < 20 and heal then - hp = hp + heal - if hp > 20 then hp = 20 end - user:set_hp(hp) - end - -- Poison - if poisen then - -- Set poison bar - hb.change_hudbar(user, "health", nil, nil, "hbhunger_icon_health_poison.png", nil, "hbhunger_bar_health_poison.png") - hbhunger.poisonings[name] = hbhunger.poisonings[name] + 1 - poisenp(1, poisen, 0, user) - end - - if itemstack:get_count() == 0 then - itemstack:add_item(replace_with_item) - else - local inv = user:get_inventory() - if inv:room_for_item("main", replace_with_item) then - inv:add_item("main", replace_with_item) - else - minetest.add_item(user:getpos(), replace_with_item) - end - end - end - return itemstack - end -end - -if minetest.get_modpath("default") ~= nil then - hbhunger.register_food("default:apple", 2) -end -if minetest.get_modpath("mushrooms") ~= nil then - hbhunger.register_food("mushrooms:mushroom_brown", 1) - hbhunger.register_food("mushrooms:mushroom_red", 1, "", 3) -end -if minetest.get_modpath("farming") ~= nil then - hbhunger.register_food("farming:bread", 4) -end - -if minetest.get_modpath("mobs") ~= nil then - if mobs.mod ~= nil and mobs.mod == "redo" then - hbhunger.register_food("mobs:cheese", 4) - hbhunger.register_food("mobs:meat", 8) - hbhunger.register_food("mobs:meat_raw", 4) - hbhunger.register_food("mobs:rat_cooked", 4) - hbhunger.register_food("mobs:honey", 2) - hbhunger.register_food("mobs:pork_raw", 3, "", 3) - hbhunger.register_food("mobs:pork_cooked", 8) - hbhunger.register_food("mobs:chicken_cooked", 6) - hbhunger.register_food("mobs:chicken_raw", 2, "", 3) - hbhunger.register_food("mobs:chicken_egg_fried", 2) - if minetest.get_modpath("bucket") then - hbhunger.register_food("mobs:bucket_milk", 3, "bucket:bucket_empty") - end - else - hbhunger.register_food("mobs:meat", 6) - hbhunger.register_food("mobs:meat_raw", 3) - hbhunger.register_food("mobs:rat_cooked", 5) - end -end - -if minetest.get_modpath("moretrees") ~= nil then - hbhunger.register_food("moretrees:coconut_milk", 1) - hbhunger.register_food("moretrees:raw_coconut", 2) - hbhunger.register_food("moretrees:acorn_muffin", 3) - hbhunger.register_food("moretrees:spruce_nuts", 1) - hbhunger.register_food("moretrees:pine_nuts", 1) - hbhunger.register_food("moretrees:fir_nuts", 1) -end - -if minetest.get_modpath("dwarves") ~= nil then - hbhunger.register_food("dwarves:beer", 2) - hbhunger.register_food("dwarves:apple_cider", 1) - hbhunger.register_food("dwarves:midus", 2) - hbhunger.register_food("dwarves:tequila", 2) - hbhunger.register_food("dwarves:tequila_with_lime", 2) - hbhunger.register_food("dwarves:sake", 2) -end - -if minetest.get_modpath("animalmaterials") ~= nil then - hbhunger.register_food("animalmaterials:milk", 2) - hbhunger.register_food("animalmaterials:meat_raw", 3) - hbhunger.register_food("animalmaterials:meat_pork", 3) - hbhunger.register_food("animalmaterials:meat_beef", 3) - hbhunger.register_food("animalmaterials:meat_chicken", 3) - hbhunger.register_food("animalmaterials:meat_lamb", 3) - hbhunger.register_food("animalmaterials:meat_venison", 3) - hbhunger.register_food("animalmaterials:meat_undead", 3, "", 3) - hbhunger.register_food("animalmaterials:meat_toxic", 3, "", 5) - hbhunger.register_food("animalmaterials:meat_ostrich", 3) - hbhunger.register_food("animalmaterials:fish_bluewhite", 2) - hbhunger.register_food("animalmaterials:fish_clownfish", 2) -end - -if minetest.get_modpath("fishing") ~= nil then - hbhunger.register_food("fishing:fish_raw", 2) - hbhunger.register_food("fishing:fish_cooked", 5) - hbhunger.register_food("fishing:sushi", 6) - hbhunger.register_food("fishing:shark", 4) - hbhunger.register_food("fishing:shark_cooked", 8) - hbhunger.register_food("fishing:pike", 4) - hbhunger.register_food("fishing:pike_cooked", 8) -end - -if minetest.get_modpath("glooptest") ~= nil then - hbhunger.register_food("glooptest:kalite_lump", 1) -end - -if minetest.get_modpath("bushes") ~= nil then - hbhunger.register_food("bushes:sugar", 1) - hbhunger.register_food("bushes:strawberry", 2) - hbhunger.register_food("bushes:berry_pie_raw", 3) - hbhunger.register_food("bushes:berry_pie_cooked", 4) - hbhunger.register_food("bushes:basket_pies", 15) -end - -if minetest.get_modpath("bushes_classic") then - -- bushes_classic mod, as found in the plantlife modpack - local berries = { - "strawberry", - "blackberry", - "blueberry", - "raspberry", - "gooseberry", - "mixed_berry"} - for _, berry in ipairs(berries) do - if berry ~= "mixed_berry" then - hbhunger.register_food("bushes:"..berry, 1) - end - hbhunger.register_food("bushes:"..berry.."_pie_raw", 2) - hbhunger.register_food("bushes:"..berry.."_pie_cooked", 5) - hbhunger.register_food("bushes:basket_"..berry, 15) - end -end - -if minetest.get_modpath("docfarming") ~= nil then - hbhunger.register_food("docfarming:carrot", 3) - hbhunger.register_food("docfarming:cucumber", 2) - hbhunger.register_food("docfarming:corn", 3) - hbhunger.register_food("docfarming:potato", 4) - hbhunger.register_food("docfarming:bakedpotato", 5) - hbhunger.register_food("docfarming:raspberry", 3) -end - -if minetest.get_modpath("farming_plus") ~= nil then - hbhunger.register_food("farming_plus:carrot_item", 3) - hbhunger.register_food("farming_plus:banana", 2) - hbhunger.register_food("farming_plus:orange_item", 2) - hbhunger.register_food("farming:pumpkin_bread", 4) - hbhunger.register_food("farming_plus:strawberry_item", 2) - hbhunger.register_food("farming_plus:tomato_item", 2) - hbhunger.register_food("farming_plus:potato_item", 4) - hbhunger.register_food("farming_plus:rhubarb_item", 2) -end - -if minetest.get_modpath("mtfoods") ~= nil then - hbhunger.register_food("mtfoods:dandelion_milk", 1) - hbhunger.register_food("mtfoods:sugar", 1) - hbhunger.register_food("mtfoods:short_bread", 4) - hbhunger.register_food("mtfoods:cream", 1) - hbhunger.register_food("mtfoods:chocolate", 2) - hbhunger.register_food("mtfoods:cupcake", 2) - hbhunger.register_food("mtfoods:strawberry_shortcake", 2) - hbhunger.register_food("mtfoods:cake", 3) - hbhunger.register_food("mtfoods:chocolate_cake", 3) - hbhunger.register_food("mtfoods:carrot_cake", 3) - hbhunger.register_food("mtfoods:pie_crust", 3) - hbhunger.register_food("mtfoods:apple_pie", 3) - hbhunger.register_food("mtfoods:rhubarb_pie", 2) - hbhunger.register_food("mtfoods:banana_pie", 3) - hbhunger.register_food("mtfoods:pumpkin_pie", 3) - hbhunger.register_food("mtfoods:cookies", 2) - hbhunger.register_food("mtfoods:mlt_burger", 5) - hbhunger.register_food("mtfoods:potato_slices", 2) - hbhunger.register_food("mtfoods:potato_chips", 3) - --mtfoods:medicine - hbhunger.register_food("mtfoods:casserole", 3) - hbhunger.register_food("mtfoods:glass_flute", 2) - hbhunger.register_food("mtfoods:orange_juice", 2) - hbhunger.register_food("mtfoods:apple_juice", 2) - hbhunger.register_food("mtfoods:apple_cider", 2) - hbhunger.register_food("mtfoods:cider_rack", 2) -end - -if minetest.get_modpath("fruit") ~= nil then - hbhunger.register_food("fruit:apple", 2) - hbhunger.register_food("fruit:pear", 2) - hbhunger.register_food("fruit:bananna", 3) - hbhunger.register_food("fruit:orange", 2) -end - -if minetest.get_modpath("mush45") ~= nil then - hbhunger.register_food("mush45:meal", 4) -end - -if minetest.get_modpath("seaplants") ~= nil then - hbhunger.register_food("seaplants:kelpgreen", 1) - hbhunger.register_food("seaplants:kelpbrown", 1) - hbhunger.register_food("seaplants:seagrassgreen", 1) - hbhunger.register_food("seaplants:seagrassred", 1) - hbhunger.register_food("seaplants:seasaladmix", 6) - hbhunger.register_food("seaplants:kelpgreensalad", 1) - hbhunger.register_food("seaplants:kelpbrownsalad", 1) - hbhunger.register_food("seaplants:seagrassgreensalad", 1) - hbhunger.register_food("seaplants:seagrassgreensalad", 1) -end - -if minetest.get_modpath("mobfcooking") ~= nil then - hbhunger.register_food("mobfcooking:cooked_pork", 6) - hbhunger.register_food("mobfcooking:cooked_ostrich", 6) - hbhunger.register_food("mobfcooking:cooked_beef", 6) - hbhunger.register_food("mobfcooking:cooked_chicken", 6) - hbhunger.register_food("mobfcooking:cooked_lamb", 6) - hbhunger.register_food("mobfcooking:cooked_venison", 6) - hbhunger.register_food("mobfcooking:cooked_fish", 6) -end - -if minetest.get_modpath("creatures") ~= nil then - hbhunger.register_food("creatures:meat", 6) - hbhunger.register_food("creatures:flesh", 3) - hbhunger.register_food("creatures:rotten_flesh", 3, "", 3) -end - -if minetest.get_modpath("ethereal") then - hbhunger.register_food("ethereal:strawberry", 1) - hbhunger.register_food("ethereal:banana", 4) - hbhunger.register_food("ethereal:pine_nuts", 1) - hbhunger.register_food("ethereal:bamboo_sprout", 0, "", 3) - hbhunger.register_food("ethereal:fern_tubers", 1) - hbhunger.register_food("ethereal:banana_bread", 7) - hbhunger.register_food("ethereal:mushroom_plant", 2) - hbhunger.register_food("ethereal:coconut_slice", 2) - hbhunger.register_food("ethereal:golden_apple", 4, "", nil, 10) - hbhunger.register_food("ethereal:wild_onion_plant", 2) - hbhunger.register_food("ethereal:mushroom_soup", 4, "ethereal:bowl") - hbhunger.register_food("ethereal:mushroom_soup_cooked", 6, "ethereal:bowl") - hbhunger.register_food("ethereal:hearty_stew", 6, "ethereal:bowl", 3) - hbhunger.register_food("ethereal:hearty_stew_cooked", 10, "ethereal:bowl") - if minetest.get_modpath("bucket") then - hbhunger.register_food("ethereal:bucket_cactus", 2, "bucket:bucket_empty") - end - hbhunger.register_food("ethereal:fish_raw", 2) - hbhunger.register_food("ethereal:fish_cooked", 5) - hbhunger.register_food("ethereal:seaweed", 1) - hbhunger.register_food("ethereal:yellowleaves", 1, "", nil, 1) - hbhunger.register_food("ethereal:sashimi", 4) - hbhunger.register_food("ethereal:orange", 2) -end - -if minetest.get_modpath("farming") and farming.mod == "redo" then - hbhunger.register_food("farming:bread", 6) - hbhunger.register_food("farming:potato", 1) - hbhunger.register_food("farming:baked_potato", 6) - hbhunger.register_food("farming:cucumber", 4) - hbhunger.register_food("farming:tomato", 4) - hbhunger.register_food("farming:carrot", 3) - hbhunger.register_food("farming:carrot_gold", 6, "", nil, 8) - hbhunger.register_food("farming:corn", 3) - hbhunger.register_food("farming:corn_cob", 5) - hbhunger.register_food("farming:melon_slice", 2) - hbhunger.register_food("farming:pumpkin_slice", 1) - hbhunger.register_food("farming:pumpkin_bread", 9) - hbhunger.register_food("farming:coffee_cup", 2, "farming:drinking_cup") - hbhunger.register_food("farming:coffee_cup_hot", 3, "farming:drinking_cup", nil, 2) - hbhunger.register_food("farming:cookie", 2) - hbhunger.register_food("farming:chocolate_dark", 3) - hbhunger.register_food("farming:donut", 4) - hbhunger.register_food("farming:donut_chocolate", 6) - hbhunger.register_food("farming:donut_apple", 6) - hbhunger.register_food("farming:raspberries", 1) - hbhunger.register_food("farming:blueberries", 1) - hbhunger.register_food("farming:muffin_blueberry", 4) - if minetest.get_modpath("vessels") then - hbhunger.register_food("farming:smoothie_raspberry", 2, "vessels:drinking_glass") - end - hbhunger.register_food("farming:rhubarb", 1) - hbhunger.register_food("farming:rhubarb_pie", 6) - hbhunger.register_food("farming:beans", 1) -end - -if minetest.get_modpath("kpgmobs") ~= nil then - hbhunger.register_food("kpgmobs:uley", 3) - hbhunger.register_food("kpgmobs:meat", 6) - hbhunger.register_food("kpgmobs:rat_cooked", 5) - hbhunger.register_food("kpgmobs:med_cooked", 4) - if minetest.get_modpath("bucket") then - hbhunger.register_food("kpgmobs:bucket_milk", 4, "bucket:bucket_empty") - end -end - -if minetest.get_modpath("jkfarming") ~= nil then - hbhunger.register_food("jkfarming:carrot", 3) - hbhunger.register_food("jkfarming:corn", 3) - hbhunger.register_food("jkfarming:melon_part", 2) - hbhunger.register_food("jkfarming:cake", 3) -end - -if minetest.get_modpath("jkanimals") ~= nil then - hbhunger.register_food("jkanimals:meat", 6) -end - -if minetest.get_modpath("jkwine") ~= nil then - hbhunger.register_food("jkwine:grapes", 2) - hbhunger.register_food("jkwine:winebottle", 1) -end - -if minetest.get_modpath("cooking") ~= nil then - hbhunger.register_food("cooking:meat_beef_cooked", 4) - hbhunger.register_food("cooking:fish_bluewhite_cooked", 3) - hbhunger.register_food("cooking:fish_clownfish_cooked", 1) - hbhunger.register_food("cooking:meat_chicken_cooked", 2) - hbhunger.register_food("cooking:meat_cooked", 2) - hbhunger.register_food("cooking:meat_pork_cooked", 3) - hbhunger.register_food("cooking:meat_toxic_cooked", -3) - hbhunger.register_food("cooking:meat_venison_cooked", 3) - hbhunger.register_food("cooking:meat_undead_cooked", 1) -end - --- ferns mod of plantlife_modpack -if minetest.get_modpath("ferns") ~= nil then - hbhunger.register_food("ferns:fiddlehead", 1, "", 1) - hbhunger.register_food("ferns:fiddlehead_roasted", 3) - hbhunger.register_food("ferns:ferntuber_roasted", 3) - hbhunger.register_food("ferns:horsetail_01", 1) -end - -if minetest.get_modpath("pizza") ~= nil then - hbhunger.register_food("pizza:pizza", 30, "", nil, 30) - hbhunger.register_food("pizza:pizzaslice", 5, "", nil, 5) -end - -if minetest.get_modpath("nssm") then - hbhunger.register_food("nssm:werewolf_leg", 3) - hbhunger.register_food("nssm:heron_leg", 2) - hbhunger.register_food("nssm:chichibios_heron_leg", 4) - hbhunger.register_food("nssm:crocodile_tail", 3) - hbhunger.register_food("nssm:duck_legs", 1) - hbhunger.register_food("nssm:ant_leg", 1) - hbhunger.register_food("nssm:spider_leg", 1) - hbhunger.register_food("nssm:tentacle", 2) - hbhunger.register_food("nssm:worm_flesh", 2, "", 2) -- poisonous - hbhunger.register_food("nssm:amphibian_heart", 1) - hbhunger.register_food("nssm:raw_scrausics_wing", 1) - -- superfoods - hbhunger.register_food("nssm:phoenix_nuggets", 20, "", nil, 20) - hbhunger.register_food("nssm:phoenix_tear", 20, "", nil, 20) -end - --- player-action based hunger changes -function hbhunger.handle_node_actions(pos, oldnode, player, ext) - -- is_fake_player comes from the pipeworks, we are not interested in those - if not player or not player:is_player() or player.is_fake_player == true then - return - end - local name = player:get_player_name() - local exhaus = hbhunger.exhaustion[name] - if exhaus == nil then return end - local new = hbhunger.EXHAUST_PLACE - -- placenode event - if not ext then - new = hbhunger.EXHAUST_DIG - end - -- assume its send by main timer when movement detected - if not pos and not oldnode then - new = hbhunger.EXHAUST_MOVE - end - exhaus = exhaus + new - if exhaus > hbhunger.EXHAUST_LVL then - exhaus = 0 - local h = tonumber(hbhunger.hunger[name]) - h = h - 1 - if h < 0 then h = 0 end - hbhunger.hunger[name] = h - hbhunger.set_hunger_raw(player) - end - hbhunger.exhaustion[name] = exhaus -end - -minetest.register_on_placenode(hbhunger.handle_node_actions) -minetest.register_on_dignode(hbhunger.handle_node_actions) diff --git a/mods/PLAYER/hbhunger/init.lua b/mods/PLAYER/hbhunger/init.lua deleted file mode 100644 index cfd50bb..0000000 --- a/mods/PLAYER/hbhunger/init.lua +++ /dev/null @@ -1,154 +0,0 @@ -local S -if (minetest.get_modpath("intllib")) then - S = intllib.Getter() -else - S = function ( s ) return s end -end - -if minetest.settings:get_bool("enable_damage") then - -hbhunger = {} -hbhunger.food = {} - --- HUD statbar values -hbhunger.hunger = {} -hbhunger.hunger_out = {} - --- Count number of poisonings a player has at once -hbhunger.poisonings = {} - --- HUD item ids -local hunger_hud = {} - -hbhunger.HUD_TICK = 0.1 - ---Some hunger settings -hbhunger.exhaustion = {} -- Exhaustion is experimental! - -hbhunger.HUNGER_TICK = 800 -- time in seconds after that 1 hunger point is taken -hbhunger.EXHAUST_DIG = 3 -- exhaustion increased this value after digged node -hbhunger.EXHAUST_PLACE = 1 -- exhaustion increased this value after placed -hbhunger.EXHAUST_MOVE = 0.3 -- exhaustion increased this value if player movement detected -hbhunger.EXHAUST_LVL = 160 -- at what exhaustion player satiation gets lowerd - - ---load custom settings -local set = io.open(minetest.get_modpath("hbhunger").."/hbhunger.conf", "r") -if set then - dofile(minetest.get_modpath("hbhunger").."/hbhunger.conf") - set:close() -end - -local function custom_hud(player) - hb.init_hudbar(player, "satiation", hbhunger.get_hunger_raw(player)) -end - -dofile(minetest.get_modpath("hbhunger").."/hunger.lua") - --- register satiation hudbar -hb.register_hudbar("satiation", 0xFFFFFF, S("Satiation"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 20, 30, false) - --- update hud elemtens if value has changed -local function update_hud(player) - local name = player:get_player_name() - --hunger - local h_out = tonumber(hbhunger.hunger_out[name]) - local h = tonumber(hbhunger.hunger[name]) - if h_out ~= h then - hbhunger.hunger_out[name] = h - hb.change_hudbar(player, "satiation", h) - end -end - -hbhunger.get_hunger_raw = function(player) - local inv = player:get_inventory() - if not inv then return nil end - local hgp = inv:get_stack("hunger", 1):get_count() - if hgp == 0 then - hgp = 21 - inv:set_stack("hunger", 1, ItemStack({name=":", count=hgp})) - else - hgp = hgp - end - return hgp-1 -end - -hbhunger.set_hunger_raw = function(player) - local inv = player:get_inventory() - local name = player:get_player_name() - local value = hbhunger.hunger[name] - if not inv or not value then return nil end - if value > 30 then value = 30 end - if value < 0 then value = 0 end - - inv:set_stack("hunger", 1, ItemStack({name=":", count=value+1})) - - return true -end - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - local inv = player:get_inventory() - inv:set_size("hunger",1) - hbhunger.hunger[name] = hbhunger.get_hunger_raw(player) - hbhunger.hunger_out[name] = hbhunger.hunger[name] - hbhunger.exhaustion[name] = 0 - hbhunger.poisonings[name] = 0 - custom_hud(player) - hbhunger.set_hunger_raw(player) -end) - -minetest.register_on_respawnplayer(function(player) - -- reset hunger (and save) - local name = player:get_player_name() - hbhunger.hunger[name] = 20 - hbhunger.set_hunger_raw(player) - hbhunger.exhaustion[name] = 0 -end) - -local main_timer = 0 -local timer = 0 -local timer2 = 0 -minetest.register_globalstep(function(dtime) - main_timer = main_timer + dtime - timer = timer + dtime - timer2 = timer2 + dtime - if main_timer > hbhunger.HUD_TICK or timer > 4 or timer2 > hbhunger.HUNGER_TICK then - if main_timer > hbhunger.HUD_TICK then main_timer = 0 end - for _,player in ipairs(minetest.get_connected_players()) do - local name = player:get_player_name() - - local h = tonumber(hbhunger.hunger[name]) - local hp = player:get_hp() - if timer > 4 then - -- heal player by 1 hp if not dead and satiation is > 15 (of 30) - if h > 15 and hp > 0 and player:get_breath() > 0 then - player:set_hp(hp+1) - -- or damage player by 1 hp if satiation is < 2 (of 30) - elseif h <= 1 then - if hp-1 >= 0 then player:set_hp(hp-1) end - end - end - -- lower satiation by 1 point after xx seconds - if timer2 > hbhunger.HUNGER_TICK then - if h > 0 then - h = h-1 - hbhunger.hunger[name] = h - hbhunger.set_hunger_raw(player) - end - end - - -- update all hud elements - update_hud(player) - local controls = player:get_player_control() - -- Determine if the player is walking - if controls.up or controls.down or controls.left or controls.right then - hbhunger.handle_node_actions(nil, nil, player) - end - end - end - if timer > 4 then timer = 0 end - if timer2 > hbhunger.HUNGER_TICK then timer2 = 0 end -end) - -end diff --git a/mods/PLAYER/hbhunger/locale/de.txt b/mods/PLAYER/hbhunger/locale/de.txt deleted file mode 100644 index 3a06d93..0000000 --- a/mods/PLAYER/hbhunger/locale/de.txt +++ /dev/null @@ -1 +0,0 @@ -Satiation = Sättigung diff --git a/mods/PLAYER/hbhunger/locale/pt.txt b/mods/PLAYER/hbhunger/locale/pt.txt deleted file mode 100644 index 44fe452..0000000 --- a/mods/PLAYER/hbhunger/locale/pt.txt +++ /dev/null @@ -1 +0,0 @@ -Satiation = Saciedade diff --git a/mods/PLAYER/hbhunger/locale/template.txt b/mods/PLAYER/hbhunger/locale/template.txt deleted file mode 100644 index 37a578d..0000000 --- a/mods/PLAYER/hbhunger/locale/template.txt +++ /dev/null @@ -1 +0,0 @@ -Satiation diff --git a/mods/PLAYER/hbhunger/mod.conf b/mods/PLAYER/hbhunger/mod.conf deleted file mode 100644 index dc67cd6..0000000 --- a/mods/PLAYER/hbhunger/mod.conf +++ /dev/null @@ -1 +0,0 @@ -name = hbhunger diff --git a/mods/PLAYER/hbhunger/screenshot.png b/mods/PLAYER/hbhunger/screenshot.png deleted file mode 100644 index 5af6583..0000000 Binary files a/mods/PLAYER/hbhunger/screenshot.png and /dev/null differ diff --git a/mods/PLAYER/hbhunger/sounds/hbhunger_eat_generic.ogg b/mods/PLAYER/hbhunger/sounds/hbhunger_eat_generic.ogg deleted file mode 100644 index b6acd07..0000000 Binary files a/mods/PLAYER/hbhunger/sounds/hbhunger_eat_generic.ogg and /dev/null differ diff --git a/mods/PLAYER/hbhunger/textures/hbhunger_bar.png b/mods/PLAYER/hbhunger/textures/hbhunger_bar.png deleted file mode 100644 index c94bf52..0000000 Binary files a/mods/PLAYER/hbhunger/textures/hbhunger_bar.png and /dev/null differ diff --git a/mods/PLAYER/hbhunger/textures/hbhunger_bar_health_poison.png b/mods/PLAYER/hbhunger/textures/hbhunger_bar_health_poison.png deleted file mode 100644 index 255a287..0000000 Binary files a/mods/PLAYER/hbhunger/textures/hbhunger_bar_health_poison.png and /dev/null differ diff --git a/mods/PLAYER/hbhunger/textures/hbhunger_bgicon.png b/mods/PLAYER/hbhunger/textures/hbhunger_bgicon.png deleted file mode 100644 index 07e21e7..0000000 Binary files a/mods/PLAYER/hbhunger/textures/hbhunger_bgicon.png and /dev/null differ diff --git a/mods/PLAYER/hbhunger/textures/hbhunger_icon.png b/mods/PLAYER/hbhunger/textures/hbhunger_icon.png deleted file mode 100644 index a5cc2a1..0000000 Binary files a/mods/PLAYER/hbhunger/textures/hbhunger_icon.png and /dev/null differ diff --git a/mods/PLAYER/hbhunger/textures/hbhunger_icon_health_poison.png b/mods/PLAYER/hbhunger/textures/hbhunger_icon_health_poison.png deleted file mode 100644 index 8ce2db8..0000000 Binary files a/mods/PLAYER/hbhunger/textures/hbhunger_icon_health_poison.png and /dev/null differ diff --git a/mods/PLAYER/modpack.txt b/mods/PLAYER/modpack.txt deleted file mode 100644 index e69de29..0000000 diff --git a/mods/PLAYER/player_api/README.txt b/mods/PLAYER/player_api/README.txt deleted file mode 100644 index f06858c..0000000 --- a/mods/PLAYER/player_api/README.txt +++ /dev/null @@ -1,22 +0,0 @@ -Minetest Game mod: player_api -============================ -See license.txt for license information. - -Provides an API to allow multiple mods to set player models and textures. -Also sets the default model, texture, and player flags. - -Authors of source code ----------------------- -Originally by celeron55, Perttu Ahola (LGPL 2.1) -Various Minetest developers and contributors (LGPL 2.1) - -Authors of media (textures, models and sounds) ----------------------------------------------- - -MirceaKitsune (CC BY-SA 3.0): - character.x - -JDMracer95 (no license): - character.png - https://www.planetminecraft.com/skin/safari-man-better-in-preview/ - diff --git a/mods/PLAYER/player_api/api.lua b/mods/PLAYER/player_api/api.lua deleted file mode 100644 index c79aedc..0000000 --- a/mods/PLAYER/player_api/api.lua +++ /dev/null @@ -1,137 +0,0 @@ --- Minetest 0.4 mod: player --- See README.txt for licensing and other information. - -player_api = {} - --- Player animation blending --- Note: This is currently broken due to a bug in Irrlicht, leave at 0 -local animation_blend = 0 - -player_api.registered_models = { } - --- Local for speed. -local models = player_api.registered_models - -function player_api.register_model(name, def) - models[name] = def -end - --- Player stats and animations -local player_model = {} -local player_textures = {} -local player_anim = {} -local player_sneak = {} -player_api.player_attached = {} - -function player_api.get_animation(player) - local name = player:get_player_name() - return { - model = player_model[name], - textures = player_textures[name], - animation = player_anim[name], - } -end - --- Called when a player's appearance needs to be updated -function player_api.set_model(player, model_name) - local name = player:get_player_name() - local model = models[model_name] - if model then - if player_model[name] == model_name then - return - end - player:set_properties({ - mesh = model_name, - textures = player_textures[name] or model.textures, - visual = "mesh", - visual_size = model.visual_size or {x = 1, y = 1}, - collisionbox = model.collisionbox or {-0.3, 0.0, -0.3, 0.3, 1.77, 0.3}, - stepheight = model.stepheight or 0.6, - }) - player_api.set_animation(player, "stand") - else - player:set_properties({ - textures = {"player.png", "player_back.png"}, - visual = "upright_sprite", - collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.75, 0.3}, - stepheight = 0.6, - }) - end - player_model[name] = model_name -end - -function player_api.set_textures(player, textures) - local name = player:get_player_name() - local model = models[player_model[name]] - local model_textures = model and model.textures or nil - player_textures[name] = textures or model_textures - player:set_properties({textures = textures or model_textures,}) -end - -function player_api.set_animation(player, anim_name, speed) - local name = player:get_player_name() - if player_anim[name] == anim_name then - return - end - local model = player_model[name] and models[player_model[name]] - if not (model and model.animations[anim_name]) then - return - end - local anim = model.animations[anim_name] - player_anim[name] = anim_name - player:set_animation(anim, speed or model.animation_speed, animation_blend) -end - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - player_model[name] = nil - player_anim[name] = nil - player_textures[name] = nil -end) - --- Localize for better performance. -local player_set_animation = player_api.set_animation -local player_attached = player_api.player_attached - --- Check each player and apply animations -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local model_name = player_model[name] - local model = model_name and models[model_name] - if model and not player_attached[name] then - local controls = player:get_player_control() - local walking = false - local animation_speed_mod = model.animation_speed or 30 - - -- Determine if the player is walking - if controls.up or controls.down or controls.left or controls.right then - walking = true - end - - -- Determine if the player is sneaking, and reduce animation speed if so - if controls.sneak then - animation_speed_mod = animation_speed_mod / 2 - end - - -- Apply animations based on what the player is doing - if player:get_hp() == 0 then - player_set_animation(player, "lay") - elseif walking then - if player_sneak[name] ~= controls.sneak then - player_anim[name] = nil - player_sneak[name] = controls.sneak - end - if controls.LMB then - player_set_animation(player, "walk_mine", animation_speed_mod) - else - player_set_animation(player, "walk", animation_speed_mod) - end - elseif controls.LMB then - player_set_animation(player, "mine") - else - player_set_animation(player, "stand", animation_speed_mod) - end - end - end -end) diff --git a/mods/PLAYER/player_api/init.lua b/mods/PLAYER/player_api/init.lua deleted file mode 100644 index 203f60e..0000000 --- a/mods/PLAYER/player_api/init.lua +++ /dev/null @@ -1,33 +0,0 @@ -dofile(minetest.get_modpath("player_api") .. "/api.lua") - --- Default player appearance -player_api.register_model("character.b3d", { - animation_speed = 30, - textures = {"character.png", }, - animations = { - -- Standard animations. - stand = {x = 0, y = 79}, - lay = {x = 162, y = 166}, - walk = {x = 168, y = 187}, - mine = {x = 189, y = 198}, - walk_mine = {x = 200, y = 219}, - sit = {x = 81, y = 160}, - }, - collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.77, 0.3}, - stepheight = 0.6, -}) - --- Update appearance when the player joins -minetest.register_on_joinplayer(function(player) - player_api.player_attached[player:get_player_name()] = false - player_api.set_model(player, "character.b3d") - player:set_local_animation( - {x = 0, y = 79}, - {x = 168, y = 187}, - {x = 189, y = 198}, - {x = 200, y = 219}, - 30 - ) - player:hud_set_hotbar_image("gui_hotbar.png") - player:hud_set_hotbar_selected_image("gui_hotbar_selected.png") -end) diff --git a/mods/PLAYER/player_api/models/character.b3d b/mods/PLAYER/player_api/models/character.b3d deleted file mode 100644 index fb693bc..0000000 Binary files a/mods/PLAYER/player_api/models/character.b3d and /dev/null differ diff --git a/mods/PLAYER/player_api/models/character.blend b/mods/PLAYER/player_api/models/character.blend deleted file mode 100644 index be40608..0000000 Binary files a/mods/PLAYER/player_api/models/character.blend and /dev/null differ diff --git a/mods/PLAYER/player_api/models/character.png b/mods/PLAYER/player_api/models/character.png deleted file mode 100644 index c23fe9e..0000000 Binary files a/mods/PLAYER/player_api/models/character.png and /dev/null differ diff --git a/mods/PLAYER/sprint/COPYING b/mods/PLAYER/sprint/COPYING deleted file mode 100644 index 0e259d4..0000000 --- a/mods/PLAYER/sprint/COPYING +++ /dev/null @@ -1,121 +0,0 @@ -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer 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, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. diff --git a/mods/PLAYER/sprint/README.md b/mods/PLAYER/sprint/README.md deleted file mode 100644 index 71e7d44..0000000 --- a/mods/PLAYER/sprint/README.md +++ /dev/null @@ -1,62 +0,0 @@ -Sprint Mod For Minetest by GunshipPenguin - -Allows the player to sprint by either double tapping w or pressing e. -By default, sprinting will make the player travel 80% faster and -allow him/her to jump 10% higher. Also adds a stamina bar that goes -down when the player sprints and goes up when he/she isn't -sprinting. - -This mod is compatible with the HUD bars [hudbars] mod, but does -not depend on it. In this care, a green HUD bar will be displayed, -also showing a number. -If this mod is not present, a standard statbar with 0-20 -“half-arrows” is shown, which is a bit more coarse than the HUD -bar version. - - -Licence: CC0 (see COPYING file) - ---- - -This mod can be configured by changing the variables declared in -the start of init.lua. The following is a brief explanation of each -one. - -SPRINT_METHOD (default 1) - -What a player has to do to start sprinting. 0 = double tap w, 1 = press e. -Note that if you have the fast privlige, and have the fast -speed turned on, you will run very, very fast. You can toggle this -by pressing j. - -SPRINT_SPEED (default 1.5) - -How fast the player will move when sprinting as opposed to normal -movement speed. 1.0 represents normal speed so 1.5 would mean that a -sprinting player would travel 50% faster than a walking player and -2.4 would mean that a sprinting player would travel 140% faster than -a walking player. - -SPRINT_JUMP (default 1.1) - -How high the player will jump when sprinting as opposed to normal -jump height. Same as SPRINT_SPEED, just controls jump height while -sprinting rather than speed. - -SPRINT_STAMINA (default 20) - -How long the player can sprint for in seconds. Each player has a -stamina variable assigned to them, it is initially set to -SPRINT_STAMINA and can go no higher. When the player is sprinting, -this variable ticks down once each second, and when it reaches 0, -the player stops sprinting. It ticks back up when the player isn't -sprinting and stops at SPRINT_STAMINA. Set this to a huge value if -you want unlimited sprinting. - -SPRINT_TIMEOUT (default 0.5) - -Only used if SPRINT_METHOD = 0. -How much time the player has after releasing w, to press w again and -start sprinting. Setting this too high will result in unwanted -sprinting and setting it too low will result in it being -difficult/impossible to sprint. diff --git a/mods/PLAYER/sprint/depends.txt b/mods/PLAYER/sprint/depends.txt deleted file mode 100644 index 3e1d5c2..0000000 --- a/mods/PLAYER/sprint/depends.txt +++ /dev/null @@ -1 +0,0 @@ -hudbars? diff --git a/mods/PLAYER/sprint/esprint.lua b/mods/PLAYER/sprint/esprint.lua deleted file mode 100644 index f103c7f..0000000 --- a/mods/PLAYER/sprint/esprint.lua +++ /dev/null @@ -1,125 +0,0 @@ ---[[ -Sprint mod for Minetest by GunshipPenguin - -To the extent possible under law, the author(s) -have dedicated all copyright and related and neighboring rights -to this software to the public domain worldwide. This software is -distributed without any warranty. -]] - -local players = {} -local staminaHud = {} - -minetest.register_on_joinplayer(function(player) - local playerName = player:get_player_name() - - players[playerName] = { - sprinting = false, - timeOut = 0, - stamina = SPRINT_STAMINA, - shouldSprint = false, - } - if SPRINT_HUDBARS_USED then - hb.init_hudbar(player, "sprint") - else - players[playerName].hud = player:hud_add({ - hud_elem_type = "statbar", - position = {x=0.5,y=1}, - size = {x=24, y=24}, - text = "sprint_stamina_icon.png", - number = 20, - alignment = {x=0,y=1}, - offset = {x=-263, y=-110}, - } - ) - end -end) -minetest.register_on_leaveplayer(function(player) - local playerName = player:get_player_name() - players[playerName] = nil -end) -minetest.register_globalstep(function(dtime) - --Get the gametime - local gameTime = minetest.get_gametime() - - --Loop through all connected players - for playerName,playerInfo in pairs(players) do - local player = minetest.get_player_by_name(playerName) - if player ~= nil then - --Check if the player should be sprinting - if player:get_player_control()["aux1"] and player:get_player_control()["up"] then - players[playerName]["shouldSprint"] = true - else - players[playerName]["shouldSprint"] = false - end - - --If the player is sprinting, create particles behind him/her - if playerInfo["sprinting"] == true and gameTime % 0.1 == 0 then - local numParticles = math.random(1, 2) - local playerPos = player:getpos() - local playerNode = minetest.get_node({x=playerPos["x"], y=playerPos["y"]-1, z=playerPos["z"]}) - if playerNode["name"] ~= "air" then - for i=1, numParticles, 1 do - minetest.add_particle({ - pos = {x=playerPos["x"]+math.random(-1,1)*math.random()/2,y=playerPos["y"]+0.1,z=playerPos["z"]+math.random(-1,1)*math.random()/2}, - vel = {x=0, y=5, z=0}, - acc = {x=0, y=-13, z=0}, - expirationtime = math.random(), - size = math.random()+0.5, - collisiondetection = true, - vertical = false, - texture = "sprint_particle.png", - }) - end - end - end - - --Adjust player states - if players[playerName]["shouldSprint"] == true then --Stopped - setSprinting(playerName, true) - elseif players[playerName]["shouldSprint"] == false then - setSprinting(playerName, false) - end - - --Lower the player's stamina by dtime if he/she is sprinting and set his/her state to 0 if stamina is zero - if playerInfo["sprinting"] == true then - playerInfo["stamina"] = playerInfo["stamina"] - dtime - if playerInfo["stamina"] <= 0 then - playerInfo["stamina"] = 0 - setSprinting(playerName, false) - end - - --Increase player's stamina if he/she is not sprinting and his/her stamina is less than SPRINT_STAMINA - elseif playerInfo["sprinting"] == false and playerInfo["stamina"] < SPRINT_STAMINA then - playerInfo["stamina"] = playerInfo["stamina"] + dtime - end - -- Cap stamina at SPRINT_STAMINA - if playerInfo["stamina"] > SPRINT_STAMINA then - playerInfo["stamina"] = SPRINT_STAMINA - end - - --Update the players's hud sprint stamina bar - - if SPRINT_HUDBARS_USED then - hb.change_hudbar(player, "sprint", playerInfo["stamina"]) - else - local numBars = (playerInfo["stamina"]/SPRINT_STAMINA)*20 - player:hud_change(playerInfo["hud"], "number", numBars) - end - end - end -end) - -function setSprinting(playerName, sprinting) --Sets the state of a player (0=stopped/moving, 1=sprinting) - local player = minetest.get_player_by_name(playerName) - if players[playerName] then - players[playerName]["sprinting"] = sprinting - if sprinting == true then - player:set_physics_override({speed=SPRINT_SPEED,jump=SPRINT_JUMP}) - elseif sprinting == false then - player:set_physics_override({speed=1.0,jump=1.0}) - end - return true - end - return false -end diff --git a/mods/PLAYER/sprint/init.lua b/mods/PLAYER/sprint/init.lua deleted file mode 100644 index 5108bac..0000000 --- a/mods/PLAYER/sprint/init.lua +++ /dev/null @@ -1,34 +0,0 @@ ---[[ -Sprint mod for Minetest by GunshipPenguin - -To the extent possible under law, the author(s) -have dedicated all copyright and related and neighboring rights -to this software to the public domain worldwide. This software is -distributed without any warranty. -]] - ---Configuration variables, these are all explained in README.md -SPRINT_METHOD = 1 -SPRINT_SPEED = 1.8 -SPRINT_JUMP = 1.1 -SPRINT_STAMINA = 20 -SPRINT_TIMEOUT = 0.5 --Only used if SPRINT_METHOD = 0 - -if minetest.get_modpath("hudbars") ~= nil then - hb.register_hudbar("sprint", 0xFFFFFF, "Stamina", - { bar = "sprint_stamina_bar.png", icon = "sprint_stamina_icon.png" }, - SPRINT_STAMINA, SPRINT_STAMINA, - false, "%s: %.1f/%.1f") - SPRINT_HUDBARS_USED = true -else - SPRINT_HUDBARS_USED = false -end - -if SPRINT_METHOD == 0 then - dofile(minetest.get_modpath("sprint") .. "/wsprint.lua") -elseif SPRINT_METHOD == 1 then - dofile(minetest.get_modpath("sprint") .. "/esprint.lua") -else - minetest.log("error", "Sprint Mod - SPRINT_METHOD is not set properly, using e to sprint") - dofile(minetest.get_modpath("sprint") .. "/esprint.lua") -end diff --git a/mods/PLAYER/sprint/textures/sprint_particle.png b/mods/PLAYER/sprint/textures/sprint_particle.png deleted file mode 100644 index 451fbba..0000000 Binary files a/mods/PLAYER/sprint/textures/sprint_particle.png and /dev/null differ diff --git a/mods/PLAYER/sprint/textures/sprint_stamina_bar.png b/mods/PLAYER/sprint/textures/sprint_stamina_bar.png deleted file mode 100644 index 1ca7a75..0000000 Binary files a/mods/PLAYER/sprint/textures/sprint_stamina_bar.png and /dev/null differ diff --git a/mods/PLAYER/sprint/textures/sprint_stamina_icon.png b/mods/PLAYER/sprint/textures/sprint_stamina_icon.png deleted file mode 100644 index eb661eb..0000000 Binary files a/mods/PLAYER/sprint/textures/sprint_stamina_icon.png and /dev/null differ diff --git a/mods/PLAYER/sprint/wsprint.lua b/mods/PLAYER/sprint/wsprint.lua deleted file mode 100644 index 3a832e2..0000000 --- a/mods/PLAYER/sprint/wsprint.lua +++ /dev/null @@ -1,135 +0,0 @@ ---[[ -Sprint mod for Minetest by GunshipPenguin - -To the extent possible under law, the author(s) -have dedicated all copyright and related and neighboring rights -to this software to the public domain worldwide. This software is -distributed without any warranty. -]] - -local players = {} -local staminaHud = {} - -minetest.register_on_joinplayer(function(player) - local playerName = player:get_player_name() - players[playerName] = { - state = 0, - timeOut = 0, - stamina = SPRINT_STAMINA, - moving = false, - } - - if SPRINT_HUDBARS_USED then - hb.init_hudbar(player, "sprint") - else - players[playerName].hud = player:hud_add({ - hud_elem_type = "statbar", - position = {x=0.5,y=1}, - size = {x=24, y=24}, - text = "sprint_stamina_icon.png", - number = 20, - alignment = {x=0,y=1}, - offset = {x=-263, y=-110}, - } - ) - end -end) -minetest.register_on_leaveplayer(function(player) - local playerName = player:get_player_name() - players[playerName] = nil -end) -minetest.register_globalstep(function(dtime) - --Get the gametime - local gameTime = minetest.get_gametime() - - --Loop through all connected players - for playerName,playerInfo in pairs(players) do - local player = minetest.get_player_by_name(playerName) - if player ~= nil then - --Check if they are moving or not - players[playerName]["moving"] = player:get_player_control()["up"] - - --If the player has tapped w longer than SPRINT_TIMEOUT ago, set his/her state to 0 - if playerInfo["state"] == 2 then - if playerInfo["timeOut"] + SPRINT_TIMEOUT < gameTime then - players[playerName]["timeOut"] = nil - setState(playerName, 0) - end - - --If the player is sprinting, create particles behind him/her - elseif playerInfo["state"] == 3 and gameTime % 0.1 == 0 then - local numParticles = math.random(1, 2) - local playerPos = player:getpos() - local playerNode = minetest.get_node({x=playerPos["x"], y=playerPos["y"]-1, z=playerPos["z"]}) - if playerNode["name"] ~= "air" then - for i=1, numParticles, 1 do - minetest.add_particle({ - pos = {x=playerPos["x"]+math.random(-1,1)*math.random()/2,y=playerPos["y"]+0.1,z=playerPos["z"]+math.random(-1,1)*math.random()/2}, - vel = {x=0, y=5, z=0}, - acc = {x=0, y=-13, z=0}, - expirationtime = math.random(), - size = math.random()+0.5, - collisiondetection = true, - vertical = false, - texture = "sprint_particle.png", - }) - end - end - end - - --Adjust player states - if players[playerName]["moving"] == false and playerInfo["state"] == 3 then --Stopped - setState(playerName, 0) - elseif players[playerName]["moving"] == true and playerInfo["state"] == 0 then --Moving - setState(playerName, 1) - elseif players[playerName]["moving"] == false and playerInfo["state"] == 1 then --Primed - setState(playerName, 2) - elseif players[playerName]["moving"] == true and playerInfo["state"] == 2 then --Sprinting - setState(playerName, 3) - end - - --Lower the player's stamina by dtime if he/she is sprinting and set his/her state to 0 if stamina is zero - if playerInfo["state"] == 3 then - playerInfo["stamina"] = playerInfo["stamina"] - dtime - if playerInfo["stamina"] <= 0 then - playerInfo["stamina"] = 0 - setState(playerName, 0) - end - - --Increase player's stamina if he/she is not sprinting and his/her stamina is less than SPRINT_STAMINA - elseif playerInfo["state"] ~= 3 and playerInfo["stamina"] < SPRINT_STAMINA then - playerInfo["stamina"] = playerInfo["stamina"] + dtime - end - -- Cap stamina at SPRINT_STAMINA - if playerInfo["stamina"] > SPRINT_STAMINA then - playerInfo["stamina"] = SPRINT_STAMINA - end - - --Update the players's hud sprint stamina bar - - if SPRINT_HUDBARS_USED then - hb.change_hudbar(player, "sprint", playerInfo["stamina"]) - else - local numBars = (playerInfo["stamina"]/SPRINT_STAMINA)*20 - player:hud_change(playerInfo["hud"], "number", numBars) - end - end - end -end) - -function setState(playerName, state) --Sets the state of a player (0=stopped, 1=moving, 2=primed, 3=sprinting) - local player = minetest.get_player_by_name(playerName) - local gameTime = minetest.get_gametime() - if players[playerName] then - players[playerName]["state"] = state - if state == 0 then--Stopped - player:set_physics_override({speed=1.0,jump=1.0}) - elseif state == 2 then --Primed - players[playerName]["timeOut"] = gameTime - elseif state == 3 then --Sprinting - player:set_physics_override({speed=SPRINT_SPEED,jump=SPRINT_JUMP}) - end - return true - end - return false -end diff --git a/mods/ITEMS/beds/README.txt b/mods/beds/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/beds/README.txt rename to mods/beds/README.txt diff --git a/mods/beds/api.lua b/mods/beds/api.lua new file mode 100755 index 0000000..ef07fc0 --- /dev/null +++ b/mods/beds/api.lua @@ -0,0 +1,180 @@ + +local reverse = true + +local function destruct_bed(pos, n) + local node = minetest.get_node(pos) + local other + + if n == 2 then + local dir = minetest.facedir_to_dir(node.param2) + other = vector.subtract(pos, dir) + elseif n == 1 then + local dir = minetest.facedir_to_dir(node.param2) + other = vector.add(pos, dir) + end + + if reverse then + reverse = not reverse + minetest.remove_node(other) + minetest.check_for_falling(other) + else + reverse = not reverse + end +end + +function beds.register_bed(name, def) + minetest.register_node(name .. "_bottom", { + description = def.description, + inventory_image = def.inventory_image, + wield_image = def.wield_image, + drawtype = "nodebox", + tiles = def.tiles.bottom, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + stack_max = 1, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1}, + sounds = def.sounds or default.node_sound_wood_defaults(), + node_box = { + type = "fixed", + fixed = def.nodebox.bottom, + }, + selection_box = { + type = "fixed", + fixed = def.selectionbox, + }, + + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + local pos + if udef and udef.buildable_to then + pos = under + else + pos = pointed_thing.above + end + + local player_name = placer and placer:get_player_name() or "" + + if minetest.is_protected(pos, player_name) and + not minetest.check_player_privs(player_name, "protection_bypass") then + minetest.record_protection_violation(pos, player_name) + return itemstack + end + + local node_def = minetest.registered_nodes[minetest.get_node(pos).name] + if not node_def or not node_def.buildable_to then + return itemstack + end + + local dir = placer and placer:get_look_dir() and + minetest.dir_to_facedir(placer:get_look_dir()) or 0 + local botpos = vector.add(pos, minetest.facedir_to_dir(dir)) + + if minetest.is_protected(botpos, player_name) and + not minetest.check_player_privs(player_name, "protection_bypass") then + minetest.record_protection_violation(botpos, player_name) + return itemstack + end + + local botdef = minetest.registered_nodes[minetest.get_node(botpos).name] + if not botdef or not botdef.buildable_to then + return itemstack + end + + minetest.set_node(pos, {name = name .. "_bottom", param2 = dir}) + minetest.set_node(botpos, {name = name .. "_top", param2 = dir}) + + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) then + itemstack:take_item() + end + return itemstack + end, + + on_destruct = function(pos) + destruct_bed(pos, 1) + end, + + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + beds.on_rightclick(pos, clicker) + return itemstack + end, + + on_rotate = function(pos, node, user, mode, new_param2) + local dir = minetest.facedir_to_dir(node.param2) + local p = vector.add(pos, dir) + local node2 = minetest.get_node_or_nil(p) + if not node2 or not minetest.get_item_group(node2.name, "bed") == 2 or + not node.param2 == node2.param2 then + return false + end + if minetest.is_protected(p, user:get_player_name()) then + minetest.record_protection_violation(p, user:get_player_name()) + return false + end + if mode ~= screwdriver.ROTATE_FACE then + return false + end + local newp = vector.add(pos, minetest.facedir_to_dir(new_param2)) + local node3 = minetest.get_node_or_nil(newp) + local node_def = node3 and minetest.registered_nodes[node3.name] + if not node_def or not node_def.buildable_to then + return false + end + if minetest.is_protected(newp, user:get_player_name()) then + minetest.record_protection_violation(newp, user:get_player_name()) + return false + end + node.param2 = new_param2 + -- do not remove_node here - it will trigger destroy_bed() + minetest.set_node(p, {name = "air"}) + minetest.set_node(pos, node) + minetest.set_node(newp, {name = name .. "_top", param2 = new_param2}) + return true + end, + can_dig = function(pos, player) + return beds.can_dig(pos) + end, + }) + + minetest.register_node(name .. "_top", { + drawtype = "nodebox", + tiles = def.tiles.top, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + pointable = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2}, + sounds = def.sounds or default.node_sound_wood_defaults(), + drop = name .. "_bottom", + node_box = { + type = "fixed", + fixed = def.nodebox.top, + }, + on_destruct = function(pos) + destruct_bed(pos, 2) + end, + can_dig = function(pos, player) + local node = minetest.get_node(pos) + local dir = minetest.facedir_to_dir(node.param2) + local p = vector.add(pos, dir) + return beds.can_dig(p) + end, + }) + + minetest.register_alias(name, name .. "_bottom") + + minetest.register_craft({ + output = name, + recipe = def.recipe + }) +end diff --git a/mods/ITEMS/beds/beds.lua b/mods/beds/beds.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/beds/beds.lua rename to mods/beds/beds.lua diff --git a/mods/ITEMS/beds/depends.txt b/mods/beds/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/beds/depends.txt rename to mods/beds/depends.txt diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua new file mode 100755 index 0000000..7370655 --- /dev/null +++ b/mods/beds/functions.lua @@ -0,0 +1,243 @@ +local pi = math.pi +local player_in_bed = 0 +local is_sp = minetest.is_singleplayer() +local enable_respawn = minetest.settings:get_bool("enable_bed_respawn") +if enable_respawn == nil then + enable_respawn = true +end + +-- Helper functions + +local function get_look_yaw(pos) + local rotation = minetest.get_node(pos).param2 + if rotation > 3 then + rotation = rotation % 4 -- Mask colorfacedir values + end + if rotation == 1 then + return pi / 2, rotation + elseif rotation == 3 then + return -pi / 2, rotation + elseif rotation == 0 then + return pi, rotation + else + return 0, rotation + end +end + +local function is_night_skip_enabled() + local enable_night_skip = minetest.settings:get_bool("enable_bed_night_skip") + if enable_night_skip == nil then + enable_night_skip = true + end + return enable_night_skip +end + +local function check_in_beds(players) + local in_bed = beds.player + if not players then + players = minetest.get_connected_players() + end + + for n, player in ipairs(players) do + local name = player:get_player_name() + if not in_bed[name] then + return false + end + end + + return #players > 0 +end + +local function lay_down(player, pos, bed_pos, state, skip) + local name = player:get_player_name() + local hud_flags = player:hud_get_flags() + + if not player or not name then + return + end + + -- stand up + if state ~= nil and not state then + local p = beds.pos[name] or nil + if beds.player[name] ~= nil then + beds.player[name] = nil + beds.bed_position[name] = nil + player_in_bed = player_in_bed - 1 + end + -- skip here to prevent sending player specific changes (used for leaving players) + if skip then + return + end + if p then + player:set_pos(p) + end + + -- physics, eye_offset, etc + player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) + player:set_look_horizontal(math.random(1, 180) / 100) + default.player_attached[name] = false + player:set_physics_override(1, 1, 1) + hud_flags.wielditem = true + default.player_set_animation(player, "stand" , 30) + + -- lay down + else + beds.player[name] = 1 + beds.pos[name] = pos + beds.bed_position[name] = bed_pos + player_in_bed = player_in_bed + 1 + + -- physics, eye_offset, etc + player:set_eye_offset({x = 0, y = -13, z = 0}, {x = 0, y = 0, z = 0}) + local yaw, param2 = get_look_yaw(bed_pos) + player:set_look_horizontal(yaw) + local dir = minetest.facedir_to_dir(param2) + local p = {x = bed_pos.x + dir.x / 2, y = bed_pos.y, z = bed_pos.z + dir.z / 2} + player:set_physics_override(0, 0, 0) + player:set_pos(p) + default.player_attached[name] = true + hud_flags.wielditem = false + default.player_set_animation(player, "lay" , 0) + end + + player:hud_set_flags(hud_flags) +end + +local function update_formspecs(finished) + local ges = #minetest.get_connected_players() + local form_n + local is_majority = (ges / 2) < player_in_bed + + if finished then + form_n = beds.formspec .. "label[2.7,11; Good morning.]" + else + form_n = beds.formspec .. "label[2.2,11;" .. tostring(player_in_bed) .. + " of " .. tostring(ges) .. " players are in bed]" + if is_majority and is_night_skip_enabled() then + form_n = form_n .. "button_exit[2,8;4,0.75;force;Force night skip]" + end + end + + for name,_ in pairs(beds.player) do + minetest.show_formspec(name, "beds_form", form_n) + end +end + + +-- Public functions + +function beds.kick_players() + for name, _ in pairs(beds.player) do + local player = minetest.get_player_by_name(name) + lay_down(player, nil, nil, false) + end +end + +function beds.skip_night() + minetest.set_timeofday(0.23) +end + +function beds.on_rightclick(pos, player) + local name = player:get_player_name() + local ppos = player:get_pos() + local tod = minetest.get_timeofday() + + if tod > 0.2 and tod < 0.805 then + if beds.player[name] then + lay_down(player, nil, nil, false) + end + minetest.chat_send_player(name, "You can only sleep at night.") + return + end + + -- move to bed + if not beds.player[name] then + lay_down(player, ppos, pos) + beds.set_spawns() -- save respawn positions when entering bed + else + lay_down(player, nil, nil, false) + end + + if not is_sp then + update_formspecs(false) + end + + -- skip the night and let all players stand up + if check_in_beds() then + minetest.after(2, function() + if not is_sp then + update_formspecs(is_night_skip_enabled()) + end + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() + end + end) + end +end + +function beds.can_dig(bed_pos) + -- Check all players in bed which one is at the expected position + for _, player_bed_pos in pairs(beds.bed_position) do + if vector.equals(bed_pos, player_bed_pos) then + return false + end + end + return true +end + +-- Callbacks +-- Only register respawn callback if respawn enabled +if enable_respawn then + -- respawn player at bed if enabled and valid position is found + minetest.register_on_respawnplayer(function(player) + local name = player:get_player_name() + local pos = beds.spawn[name] + if pos then + player:set_pos(pos) + return true + end + end) +end + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + lay_down(player, nil, nil, false, true) + beds.player[name] = nil + if check_in_beds() then + minetest.after(2, function() + update_formspecs(is_night_skip_enabled()) + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() + end + end) + end +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "beds_form" then + return + end + + -- Because "Force night skip" button is a button_exit, it will set fields.quit + -- and lay_down call will change value of player_in_bed, so it must be taken + -- earlier. + local last_player_in_bed = player_in_bed + + if fields.quit or fields.leave then + lay_down(player, nil, nil, false) + update_formspecs(false) + end + + if fields.force then + local is_majority = (#minetest.get_connected_players() / 2) < last_player_in_bed + if is_majority and is_night_skip_enabled() then + update_formspecs(true) + beds.skip_night() + beds.kick_players() + else + update_formspecs(false) + end + end +end) \ No newline at end of file diff --git a/mods/beds/init.lua b/mods/beds/init.lua new file mode 100755 index 0000000..6c4e081 --- /dev/null +++ b/mods/beds/init.lua @@ -0,0 +1,18 @@ +beds = {} +beds.player = {} +beds.bed_position = {} +beds.pos = {} +beds.spawn = {} + +beds.formspec = "size[8,15;true]" .. + "bgcolor[#080808BB; true]" .. + "button_exit[2,12;4,0.75;leave;Leave Bed]" + +local modpath = minetest.get_modpath("beds") + +-- Load files + +dofile(modpath .. "/functions.lua") +dofile(modpath .. "/api.lua") +dofile(modpath .. "/beds.lua") +dofile(modpath .. "/spawns.lua") diff --git a/mods/ITEMS/beds/license.txt b/mods/beds/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/beds/license.txt rename to mods/beds/license.txt diff --git a/mods/beds/spawns.lua b/mods/beds/spawns.lua new file mode 100755 index 0000000..baee364 --- /dev/null +++ b/mods/beds/spawns.lua @@ -0,0 +1,63 @@ +local world_path = minetest.get_worldpath() +local org_file = world_path .. "/beds_spawns" +local file = world_path .. "/beds_spawns" +local bkwd = false + +-- check for PA's beds mod spawns +local cf = io.open(world_path .. "/beds_player_spawns", "r") +if cf ~= nil then + io.close(cf) + file = world_path .. "/beds_player_spawns" + bkwd = true +end + +function beds.read_spawns() + local spawns = beds.spawn + local input = io.open(file, "r") + if input and not bkwd then + repeat + local x = input:read("*n") + if x == nil then + break + end + local y = input:read("*n") + local z = input:read("*n") + local name = input:read("*l") + spawns[name:sub(2)] = {x = x, y = y, z = z} + until input:read(0) == nil + io.close(input) + elseif input and bkwd then + beds.spawn = minetest.deserialize(input:read("*all")) + input:close() + beds.save_spawns() + os.rename(file, file .. ".backup") + file = org_file + end +end + +beds.read_spawns() + +function beds.save_spawns() + if not beds.spawn then + return + end + local data = {} + local output = io.open(org_file, "w") + for k, v in pairs(beds.spawn) do + table.insert(data, string.format("%.1f %.1f %.1f %s\n", v.x, v.y, v.z, k)) + end + output:write(table.concat(data)) + io.close(output) +end + +function beds.set_spawns() + for name,_ in pairs(beds.player) do + local player = minetest.get_player_by_name(name) + local p = player:get_pos() + -- but don't change spawn location if borrowing a bed + if not minetest.is_protected(p, name) then + beds.spawn[name] = p + end + end + beds.save_spawns() +end diff --git a/mods/beds/textures/beds_bed.png b/mods/beds/textures/beds_bed.png new file mode 100755 index 0000000..5c0054c Binary files /dev/null and b/mods/beds/textures/beds_bed.png differ diff --git a/mods/beds/textures/beds_bed_fancy.png b/mods/beds/textures/beds_bed_fancy.png new file mode 100755 index 0000000..4f9e8a7 Binary files /dev/null and b/mods/beds/textures/beds_bed_fancy.png differ diff --git a/mods/beds/textures/beds_bed_foot.png b/mods/beds/textures/beds_bed_foot.png new file mode 100755 index 0000000..74d84c8 Binary files /dev/null and b/mods/beds/textures/beds_bed_foot.png differ diff --git a/mods/beds/textures/beds_bed_head.png b/mods/beds/textures/beds_bed_head.png new file mode 100755 index 0000000..763f5e1 Binary files /dev/null and b/mods/beds/textures/beds_bed_head.png differ diff --git a/mods/beds/textures/beds_bed_side1.png b/mods/beds/textures/beds_bed_side1.png new file mode 100755 index 0000000..1ed8158 Binary files /dev/null and b/mods/beds/textures/beds_bed_side1.png differ diff --git a/mods/beds/textures/beds_bed_side2.png b/mods/beds/textures/beds_bed_side2.png new file mode 100755 index 0000000..9d1384d Binary files /dev/null and b/mods/beds/textures/beds_bed_side2.png differ diff --git a/mods/beds/textures/beds_bed_side_bottom.png b/mods/beds/textures/beds_bed_side_bottom.png new file mode 100755 index 0000000..99ff309 Binary files /dev/null and b/mods/beds/textures/beds_bed_side_bottom.png differ diff --git a/mods/beds/textures/beds_bed_side_bottom_r.png b/mods/beds/textures/beds_bed_side_bottom_r.png new file mode 100755 index 0000000..6f870e8 Binary files /dev/null and b/mods/beds/textures/beds_bed_side_bottom_r.png differ diff --git a/mods/beds/textures/beds_bed_side_top.png b/mods/beds/textures/beds_bed_side_top.png new file mode 100755 index 0000000..b2807c5 Binary files /dev/null and b/mods/beds/textures/beds_bed_side_top.png differ diff --git a/mods/beds/textures/beds_bed_side_top_r.png b/mods/beds/textures/beds_bed_side_top_r.png new file mode 100755 index 0000000..429ad7d Binary files /dev/null and b/mods/beds/textures/beds_bed_side_top_r.png differ diff --git a/mods/beds/textures/beds_bed_top1.png b/mods/beds/textures/beds_bed_top1.png new file mode 100755 index 0000000..b6fcc2c Binary files /dev/null and b/mods/beds/textures/beds_bed_top1.png differ diff --git a/mods/beds/textures/beds_bed_top2.png b/mods/beds/textures/beds_bed_top2.png new file mode 100755 index 0000000..2fe5bf2 Binary files /dev/null and b/mods/beds/textures/beds_bed_top2.png differ diff --git a/mods/beds/textures/beds_bed_top_bottom.png b/mods/beds/textures/beds_bed_top_bottom.png new file mode 100755 index 0000000..9b78be6 Binary files /dev/null and b/mods/beds/textures/beds_bed_top_bottom.png differ diff --git a/mods/beds/textures/beds_bed_top_top.png b/mods/beds/textures/beds_bed_top_top.png new file mode 100755 index 0000000..e877c80 Binary files /dev/null and b/mods/beds/textures/beds_bed_top_top.png differ diff --git a/mods/ITEMS/beds/textures/beds_transparent.png b/mods/beds/textures/beds_transparent.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/beds/textures/beds_transparent.png rename to mods/beds/textures/beds_transparent.png diff --git a/mods/binoculars/README.txt b/mods/binoculars/README.txt new file mode 100755 index 0000000..0c65f6e --- /dev/null +++ b/mods/binoculars/README.txt @@ -0,0 +1,37 @@ +Minetest Game mod: binoculars +============================= +See license.txt for license information. + +Authors of source code +---------------------- +paramat (MIT) + +Authors of media (textures) +--------------------------- +paramat (CC BY-SA 3.0): + binoculars_binoculars.png + +Crafting +-------- +binoculars:binoculars + +default:obsidian_glass O +default:bronze_ingot B + +O_O +BBB +O_O + +Usage +----- +In survival mode, use of zoom requires the binoculars item in your inventory, +they will allow a 10 degree field of view. +It can take up to 5 seconds for adding to or removal from inventory to have an +effect, however to instantly allow the use of this zoom 'use' (leftclick) the +item. + +Zoom with a field of view of 15 degrees is automatically allowed in creative +mode and for any player with the 'creative' privilege. + +The 'binoculars.update_player_property()' function is global so can be +redefined by a mod for alternative behaviour. diff --git a/mods/binoculars/depends.txt b/mods/binoculars/depends.txt new file mode 100755 index 0000000..1f737c1 --- /dev/null +++ b/mods/binoculars/depends.txt @@ -0,0 +1,2 @@ +default +creative? diff --git a/mods/binoculars/init.lua b/mods/binoculars/init.lua new file mode 100755 index 0000000..0b43a06 --- /dev/null +++ b/mods/binoculars/init.lua @@ -0,0 +1,76 @@ +-- Mod global namespace + +binoculars = {} + + +-- Detect creative mod +local creative_mod = minetest.get_modpath("creative") +-- Cache creative mode setting as fallback if creative mod not present +local creative_mode_cache = minetest.settings:get_bool("creative_mode") + + +-- Update player property +-- Global to allow overriding + +function binoculars.update_player_property(player) + local creative_enabled = + (creative_mod and creative.is_enabled_for(player:get_player_name())) or + creative_mode_cache + local new_zoom_fov = 0 + + if player:get_inventory():contains_item( + "main", "binoculars:binoculars") then + new_zoom_fov = 10 + elseif creative_enabled then + new_zoom_fov = 15 + end + + -- Only set property if necessary to avoid player mesh reload + if player:get_properties().zoom_fov ~= new_zoom_fov then + player:set_properties({zoom_fov = new_zoom_fov}) + end +end + + +-- Set player property 'on joinplayer' + +minetest.register_on_joinplayer(function(player) + binoculars.update_player_property(player) +end) + + +-- Cyclic update of player property + +local function cyclic_update() + for _, player in ipairs(minetest.get_connected_players()) do + binoculars.update_player_property(player) + end + minetest.after(4.7, cyclic_update) +end + +minetest.after(4.7, cyclic_update) + + +-- Binoculars item + +minetest.register_craftitem("binoculars:binoculars", { + description = "Binoculars\nUse with 'Zoom' key", + inventory_image = "binoculars_binoculars.png", + stack_max = 1, + + on_use = function(itemstack, user, pointed_thing) + binoculars.update_player_property(user) + end, +}) + + +-- Crafting + +minetest.register_craft({ + output = "binoculars:binoculars", + recipe = { + {"default:obsidian_glass", "", "default:obsidian_glass"}, + {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"}, + {"default:obsidian_glass", "", "default:obsidian_glass"}, + } +}) diff --git a/mods/binoculars/license.txt b/mods/binoculars/license.txt new file mode 100755 index 0000000..f3aefda --- /dev/null +++ b/mods/binoculars/license.txt @@ -0,0 +1,59 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2017 paramat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2017 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/binoculars/textures/binoculars_binoculars.png b/mods/binoculars/textures/binoculars_binoculars.png new file mode 100755 index 0000000..5803d48 Binary files /dev/null and b/mods/binoculars/textures/binoculars_binoculars.png differ diff --git a/mods/biome_lib/API.txt b/mods/biome_lib/API.txt new file mode 100755 index 0000000..6aab582 --- /dev/null +++ b/mods/biome_lib/API.txt @@ -0,0 +1,585 @@ +This document describes the Plantlife mod API. + +Last revision: 2015-02-16 + + +========= +Functions +========= + +There are three main functions defined by the main "biome_lib" mod: + +spawn_on_surfaces() +register_generate_plant() +grow_plants() + +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. + +===== +spawn_on_surfaces(biome) +spawn_on_surfaces(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 +expanded. There are two ways to call this function: You can either pass it +several individual string and number parameters to use the legacy interface, +or you can pass a single biome definition as a table, with all of your options +spelled out nicely. This is the preferred method. + +When used with the legacy interface, you must specify the parameters exactly +in order, with the first five being mandatory (even if some are set to nil), +and the last one being optional: + +sdelay: The value passed to the ABM's interval parameter, in seconds. +splant: The node name of the item to spawn (e.g. + "flowers:flower_rose"). A plant will of course only be + spawned if the node about to be replaced is air. +sradius: Don't spawn within this many nodes of the avoid items + mentioned below. If set to nil, this check is skipped. +schance: The value passed to the ABM's chance parameter, normally in + the 10-100 range (1-in-X chance of operating on a given node) +ssurface: String with the name of the node on which to spawn the plant + in question, such as "default:sand" or + "default:dirt_with_grass". It is not recommended to put air, + stone, or plain dirt here if you can use some other node, as + doing so will cause the engine to process potentially large + numbers of such nodes when deciding when to execute the ABM + and where it should operate. +savoid: Table with a list of groups and/or node names to avoid when + spawning the plant, such as {"group:flowers", "default:tree"}. + +When passed a table as the argument, and thus using the modern calling method, +you must pass a number of arguments in the form of an ordinary keyed-value +table. Below is a list of everything supported by this function: + +biome = { + spawn_plants = something, -- [*] String or table; see below. + spawn_delay = number, -- same as sdelay, above. + spawn_chance = number, -- same as schance, above. + spawn_surfaces = {table}, -- List of node names on which the plants + -- should be spawned. As with the single-node "ssurface" + -- option in the legacy API, you should not put stone, air, + -- etc. here. + + ---- From here down are a number of optional parameters. You will + ---- most likely want to use at least some of these to limit how and + ---- where your objects are spawned. + + avoid_nodes = {table}, -- same meaning as savoid, above + avoid_radius = num, -- same as sradius + seed_diff = num, -- The Perlin seed difference value passed to the + -- minetest.get_perlin() function. Used along with + -- the global Perlin controls below to create the + -- "biome" in which the plants will spawn. Defaults + -- to 0 if not provided. + light_min = num, -- Minimum amount of light necessary to make a plant + -- spawn. Defaults to 0. + light_max = num, -- Maximum amount of light needed to spawn. Defaults + -- to the engine's MAX_LIGHT value of 14. + neighbors = {table}, -- List of neighboring nodes that need to be + -- immediately next to the node the plant is about to + -- spawn on. Can also be a string with a single node + -- name. It is both passed to the ABM as the + -- "neighbors" parameter, and is used to manually + -- check the adjacent nodes. It only takes one of + -- these for the spawn routine to mark the target as + -- spawnable. Defaults to nil (ignored). + ncount = num, -- There must be at least this many of the above + -- neighbors in the eight spaces immediately + -- surrounding the node the plant is about to spawn on + -- for it to happen. If not provided, this check is + -- disabled. + facedir = num, -- The value passed to the param2 variable when adding + -- the node to the map. Defaults to 0. Be sure that + -- the value you use here (and the range thereof) is + -- appropriate for the type of node you're spawning. + random_facedir = {table}, -- If set, the table should contain two values. + -- If they're both provided, the spawned plant will be + -- given a random facedir value in the range specified + -- by these two numbers. Overrides the facedir + -- parameter above, if it exists. Use {0,3} if you + -- want the full range for wallmounted nodes, or {2,5} + -- for most everything else, or any other pair of + -- numbers appropriate for the node you want to spawn. + 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. + 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 + -- provided, this check is disabled. + near_nodes_size = num, -- How large of an area to check for the above + -- node. Specifically, this checks a flat, horizontal + -- area centered on the node to be spawned on. + -- Defaults to 0, but is ignored if the above + -- near_nodes value is not set. + near_nodes_vertical = num, -- Used with the size value above, this extends + -- the vertical range of the near nodes search. + -- Basically, this turns the flat region described + -- above into a cuboid region. The area to be checked + -- will extend this high and this low above/below the + -- target node, centered thereon. Defaults to 1 (only + -- check the layer above, the layer at, and the layer + -- below the target node), but is ignored if + -- near_nodes is not set. + near_nodes_count = num, -- How many of the above nodes must be within that + -- radius. Defaults to 1 but is ignored if near_nodes + -- isn't set. Bear in mind that the total area to be + -- checked is equal to: + -- (near_nodes_size^2)*near_nodes_vertical*2 + -- For example, if size is 10 and vertical is 4, then + -- the area is (10^2)*8 = 800 nodes in size, so you'll + -- want to make sure you specify a value appropriate + -- for the size of the area being tested. + air_size = num, -- How large of an area to check for air above and + -- around the target. If omitted, only the space + -- above the target is checked. This does not check + -- for air at the sides or below the target. + air_count = num, -- How many of the surrounding nodes need to be air + -- for the above check to return true. If omitted, + -- only the space above the target is checked. + plantlife_limit = num, -- The value compared against the generic "plants + -- can grow here" Perlin noise layer. Smaller numbers + -- result in more abundant plants. Range of -1 to +1, + -- with values in the range of about 0 to 0.5 being + -- most useful. Defaults to 0.1. + temp_min = num, -- Minimum temperature needed for the desired object + -- to spawn. This is a 2d Perlin value, which has an + -- inverted range of +1 to -1. Larger values + -- represent *colder* temperatures, so this value is + -- actually the upper end of the desired Perlin range. + -- See the temperature map section at the bottom of + -- this document for details on how these values work. + -- Defaults to +1 (unlimited coldness). + temp_max = num, -- Maximum temperature/lower end of the Perlin range. + -- Defaults to -1 (unlimited heat). + humidity_min = num, -- Minimum humidity for the plant to spawn in. Like + -- the temperature map, this is a Perlin value where + -- lower numbers mean more humidity in the area. + -- Defaults to +1 (0% humidity). + humidity_max = num, -- Maximum humidity for the plant to spawn at. + -- Defaults to -1 (100% humidity). + verticals_list = {table}, -- List of nodes that should be considered to be + -- natural walls. + alt_wallnode = "string", -- If specified, this node will be substituted in + -- place of the plant(s) defined by spawn_plants + -- above, if the spawn target has one or more adjacent + -- walls. In such a case, the two above facedir + -- parameters will be ignored. + spawn_on_side = bool, -- Set this to true to immediately spawn the node on + -- one side of the target node rather than the top. + -- The code will search for an airspace to the side of + -- the target, then spawn the plant at the first one + -- found. The above facedir and random_facedir + -- parameters are ignored in this case. If the above + -- parameters for selecting generic wall nodes are + -- provided, this option is ignored. Important note: + -- the facedir values assigned by this option only + -- make sense with wallmounted nodes (nodes which + -- don't use facedir won't be affected). + choose_random_wall = bool, -- if set to true, and searching for walls is + -- being done, just pick any random wall if there is + -- one, rather than returning the first one. + spawn_on_bottom = bool, -- If set to true, spawn the object below the + -- target node instead of above it. The above + -- spawn_on_side variable takes precedence over this + -- one if both happen to be true. When using this + -- option with the random facedir function above, the + -- values given to the facedir parameter are for + -- regular nodes, not wallmounted. + spawn_replace_node = bool, -- If set to true, the target node itself is + -- replaced by the spawned object. Overrides the + -- spawn_on_bottom and spawn_on_side settings. +} + +[*] spawn_plants must be either a table or a string. If it's a table, the +values therein are treated as a list of nodenames to pick from randomly on +each application of the ABM code. The more nodes you can pack into this +parameter to avoid making too many calls to this function, the lower the CPU +load will likely be. + +You can also specify a string containing the name of a function to execute. +In this case, the function will be passed a single position parameter +indicating where the function should place the desired object, and the checks +for spawning on top vs. sides vs. bottom vs. replacing the target node will be +skipped. + +By default, if a biome node, size, and count are not defined, the biome +checking is disabled. Same holds true for the nneighbors bit above that. + + +===== +biome_lib:register_generate_plant(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 +information, and a string, function, or table describing what to do if the +engine finds a suitable surface node (see below). + +The biome table contains quite a number of options, though there are fewer +here than are available in the ABM-based spawner, as some stuff doesn't make +sense at map-generation time. + +biome = { + surface = something, -- What node(s). May be a string such as + -- "default:dirt_with_grass" or a table with + -- multiple such entries. + + ---- Everything else is optional, but you'll definitely want to use + ---- some of these other fields to limit where and under what + ---- conditions the objects are spawned. + + below_nodes = {table}, -- List of nodes that must be below the target + -- node. Useful in snow biomes to keep objects from + -- spawning in snow that's on the wrong surface for + -- that object. + avoid_nodes = {table}, -- List of nodes to avoid when spawning. Groups are + -- not supported here. + avoid_radius = num, -- How much distance to leave between the object to be + -- added and the objects to be avoided. If this or + -- the avoid_nodes value is nil/omitted, this check is + -- skipped. Avoid using excessively large radii. + rarity = num, -- How rare should this object be in its biome? Larger + -- values make objects more rare, via: + -- math.random(1,100) > this + max_count = num, -- The absolute maximum number of your object that + -- should be allowed to spawn in a 5x5x5 mapblock area + -- (80x80x80 nodes). Defaults to 5, but be sure you + -- set this to some reasonable value depending on your + -- object and its size if 5 is insufficient. + seed_diff = num, -- Perlin seed-diff value. Defaults to 0, which + -- causes the function to inherit the global value of + -- 329. + neighbors = {table}, -- What ground nodes must be right next to and at the + -- same elevation as the node to be spawned on. + ncount = num, -- At least this many of the above nodes must be next + -- to the node to spawn on. Any value greater than 8 + -- will probably cause the code to never spawn + -- anything. Defaults to 0. + 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). + 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 + -- in that list. + near_nodes_vertical = num, -- How high/low of an area to search from the + -- target node. + near_nodes_count = num, -- at least this many of those nodes must be in + -- the area. + plantlife_limit = num, -- The value compared against the generic "plants + -- can grow here" Perlin noise layer. Smaller numbers + -- result in more abundant plants. Range of -1 to +1, + -- with values in the range of about 0 to 0.5 being + -- most useful. Defaults to 0.1. + temp_min = num, -- Coldest allowable temperature for a plant to spawn + -- (that is, the largest Perlin value). + temp_max = num, -- warmest allowable temperature to spawn a plant + -- (lowest Perlin value). + verticals_list = {table}, -- Same as with the spawn_on_surfaces function. + check_air = bool, -- Flag to tell the mapgen code to check for air above + -- the spawn target. Defaults to true if not + -- explicitly set to false. Set this to false VERY + -- SPARINGLY, as it will slow the map generator down. + delete_above = bool, -- Flag to tell the mapgen code to delete the two + -- nodes directly above the spawn target just before + -- adding the plant or tree. Useful when generating + -- in snow biomes. Defaults to false. + delete_above_surround = bool, -- Flag to tell the mapgen code to also + -- delete the five nodes surrounding the above space, + -- and the five nodes above those, resulting in a two- + -- node-deep cross-shaped empty region above/around + -- the spawn target. Useful when adding trees to snow + -- biomes. Defaults to false. + spawn_replace_node = bool, -- same as with the ABM spawner. + random_facedir = {table}, -- same as with the ABM spawner. +} + +Regarding nodes_or_function_or_treedef, this must either be a string naming +a node to spawn, a table with a list of nodes to choose from, a table with an +L-Systems tree definition, or a function. + +If you specified a string, the code will attempt to determine whether that +string specifies a valid node name. If it does, that node will be placed on +top of the target position directly (unless one of the other mapgen options +directs the code to do otherwise). + +If you specified a table and there is no "axiom" field, the code assumes that +it is a list of nodes. Simply name one node per entry in the list, e.g. +{"default:junglegrass", "default:dry_shrub"} and so on, for as many nodes as +you want to list. A random node from the list will be chosen each time the +code goes to place a node. + +If you specified a table, and there *is* an "axiom" field, the code assumes +that this table contains an L-Systems tree definition, which will be passed +directly to the engine's spawn_tree() function along with the position on +which to spawn the tree. + +You can also supply a function to be directly executed, which is given the +current node position (the usual "pos" table format) as its sole argument. It +will be called in the form: + + somefunction(pos) + + +===== +biome_lib:grow_plants(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: + +options = { + grow_plant = "string", -- Name of the node to be grown into something + -- else. This value is passed to the ABM as the + -- "nodenames" parameter, so it is the plants + -- themselves that are the ABM trigger, rather than + -- the ground they spawned on. A plant will only grow + -- if the node above it is air. Can also be a table, + -- but note that all nodes referenced therein will be + -- grown into the same object. + grow_delay = num, -- Passed as the ABM "interval" parameter, as with + -- spawning. + grow_chance = num, -- Passed as the ABM "chance" parameter. + grow_result = "string", -- Name of the node into which the grow_plant + -- node(s) should transform when the ABM executes. + + ---- Everything from here down is optional. + + dry_early_node = "string", -- This value is ignored except for jungle + -- grass (a corner case needed by that mod), where it + -- indicates which node the grass must be on in order + -- for it to turn from the short size to + -- "default:dry_shrub" instead of the medium size. + grow_nodes = {table}, -- One of these nodes must be under the plant in + -- order for it to grow at all. Normally this should + -- be the same as the list of surfaces passed to the + -- spawning ABM as the "nodenames" parameter. This is + -- so that the plant can be manually placed on + -- something like a flower pot or something without it + -- necessarily growing and perhaps dieing. Defaults + -- to "default:dirt_with_grass". + facedir = num, -- Same as with spawning a plant. + need_wall = bool, -- Set this to true if you the plant needs to grow + -- against a wall. Defaults to false. + verticals_list = {table}, -- same as with spawning a plant. + choose_random_wall = bool, -- same as with spawning a plant. + grow_vertically = bool, -- Set this to true if the plant needs to grow + -- vertically, as in climbing poison ivy. Defaults to + -- false. + height_limit = num, -- Set this to limit how tall the desired node can + -- grow. The mod will search straight down from the + -- position being spawned at to find a ground node, + -- set via the field below. Defaults to 5 nodes. + ground_nodes = {table}, -- What nodes should be treated as "the ground" + -- below a vertically-growing plant. Usually this + -- should be the same as the grow_nodes table, but + -- might also include, for example, water or some + -- other surrounding material. Defaults to + -- "default:dirt_with_grass". + grow_function = something, -- [*] see below. + seed_diff = num, -- [*] see below. +} + +[*] grow_function can take one of three possible settings: it can be nil (or + not provided), a string, or a table. + +If it is not provided or it's set to nil, all of the regular growing code is +executed normally, the value of seed_diff, if any, is ignored, and the node to +be placed is assumed to be specified in the grow_result variable. + +If this value is set to a simple string, this is treated as the name of the +function to use to grow the plant. In this case, all of the usual growing +code is executeed, but then instead of a plant being simply added to the +world, grow_result is ignored and the named function is executed and passed a +few parmeters in the following general form: + + somefunction(pos, perlin1, perlin2) + +These values represent the current position (the usual table), the Perlin +noise value for that spot in the generic "plants can grow here" map for the +seed_diff value above, the Perlin value for that same spot from the +temperature map, and the detected neighboring wall face, if there was one (or +nil if not). If seed_diff is not provided, it defaults to 0. + +If this variable is instead set to a table, it is treated an an L-Systems tree +definition. All of the growing code is executed in the usual manner, then the +tree described by that definition is spawned at the current position instead, +and grow_result is ignored. + + +===== +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 +search around the given position for a neighboring wall, returning the first +one it finds as a facedir value, or nil if there are no adjacent walls. + +If randomflag is set to true, the function will just return the facedir of any +random wall it finds adjacent to the target position. Defaults to false if +not specified. + +===== +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 +question is already loaded, or false if not. + + +===== +dbg(string) + +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. + +===== +biome_lib:generate_tree(pos, treemodel) +biome_lib:grow_tree(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 +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 +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 +tree is spawned within the abm-based growing code, for example when growing a +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 +====================== + +The mod uses Perlin noise to create "biomes" of the various plants, via the +minetest.get_perlin() function. At present, there are three layers of +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 + +For more information on how Perlin noise is generated, you will need to search +the web, as these default values were from that which is used by minetest_game +to spawn jungle grass at mapgen time, and I'm still learning how Perlin noise +works. ;-) + + +=================== +Temperature Mapping +=================== + +The second Perlin layer is a temperature map, with values taken from +SPlizard's Snow Biomes mod so that the two will be compatible, since that mod +appears to be the standard now. Those values are: + + temperature_seeddiff = 112 + temperature_octaves = 3 + temperature_persistence = 0.5 + temperature_scale = 150 + +The way Perlin values are used by this mod, in keeping with the snow mod's +apparent methods, larger values returned by the Perlin function represent +*colder* temperatures. In this mod, the following table gives a rough +approximation of how temperature maps to these values, normalized to +0.53 = 0 °C and +1.0 = -25 °C. + +Perlin Approx. Temperature +-1.0 81 °C ( 178 °F) +-0.75 68 °C ( 155 °F) +-0.56 58 °C ( 136 °F) +-0.5 55 °C ( 131 °F) +-0.25 41 °C ( 107 °F) +-0.18 38 °C ( 100 °F) + 0 28 °C ( 83 °F) + 0.13 21 °C ( 70 °F) + 0.25 15 °C ( 59 °F) + 0.5 2 °C ( 35 °F) + 0.53 0 °C ( 32 °F) + 0.75 -12 °C ( 11 °F) + 0.86 -18 °C ( 0 °F) + 1.0 -25 °C (- 13 °F) + +Included in this table are even 0.25 steps in Perlin values along with some +common temperatures on both the Centigrade and Fahrenheit scales. Note that +unless you're trying to model the Moon or perhaps Mercury in your mods/maps, +you probably won't need to bother with Perlin values of less than -0.56 or so. + + +================ +Humidity Mapping +================ + +Last but not least is a moisture/humidity map. Like the temperature map +above, Perlin values can be tested to determine the approximate humidity of +the *air* in the area. This humidity map is basically the perlin layer used +for deserts. + +A value of +1.0 is very moist (basically a thick fog, if it could be seen), a +value of roughly +0.25 represents the edge of a desert as usually seen in the +game, and a value of -1.0 is as dry as a bone. + +This does not check for nearby water, just general air humidity, and that +being the case, nearby ground does not affect the reported humidity of a +region (because this isn't yet possible to calculate yet). Use the near_nodes +and avoid_nodes parameters and their related options to check for water and +such. + +The Perlin values use for this layer are: + + humidity_seeddiff = 9130 + humidity_octaves = 3 + humidity_persistence = 0.5 + humidity_scale = 250 + +And this particular one is mapped slightly differently from the others: + + noise3 = perlin3:get2d({x=p_top.x+150, y=p_top.z+50}) + +(Note the +150 and +50 offsets) + diff --git a/mods/CORE/biome_lib/README.md b/mods/biome_lib/README.md old mode 100644 new mode 100755 similarity index 100% rename from mods/CORE/biome_lib/README.md rename to mods/biome_lib/README.md diff --git a/mods/biome_lib/depends.txt b/mods/biome_lib/depends.txt new file mode 100755 index 0000000..c48fe0d --- /dev/null +++ b/mods/biome_lib/depends.txt @@ -0,0 +1,3 @@ +default +intllib? + diff --git a/mods/CORE/biome_lib/description.txt b/mods/biome_lib/description.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/CORE/biome_lib/description.txt rename to mods/biome_lib/description.txt diff --git a/mods/biome_lib/init.lua b/mods/biome_lib/init.lua new file mode 100755 index 0000000..2ed0d5f --- /dev/null +++ b/mods/biome_lib/init.lua @@ -0,0 +1,743 @@ +-- Plantlife library mod by Vanessa Ezekowitz +-- +-- License: WTFPL +-- +-- 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 = {} + +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.get_modpath("intllib") then + S = intllib.Getter() +else + S = function(s) return s end +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) + 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 + +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 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 = snodes[i] + local p_top = { x = pos.x, y = pos.y + 1, z = pos.z } + local noise1 = perlin_fertile_area:get2d({x=pos.x, y=pos.z}) + local noise2 = biome_lib.perlin_temperature:get2d({x=pos.x, y=pos.z}) + local noise3 = biome_lib.perlin_humidity:get2d({x=pos.x+150, y=pos.z+50}) + 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 surface_ok + and (not checkair or minetest.get_node(p_top).name == "air") + and pos.y >= biome.min_elevation + and pos.y <= biome.max_elevation + and noise1 > biome.plantlife_limit + and noise2 <= biome.temp_min + and noise2 >= biome.temp_max + and noise3 <= biome.humidity_min + and noise3 >= biome.humidity_max + and (not biome.ncount or #(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) + and (not biome.near_nodes or #(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) + and math.random(1,100) > biome.rarity + and (not biome.below_nodes or string.find(dump(biome.below_nodes), minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name) ) + 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 + 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.remove_node(p_top) + minetest.remove_node({x=p_top.x, y=p_top.y+1, z=p_top.z}) + end + + if biome.delete_above_surround then + minetest.remove_node({x=p_top.x-1, y=p_top.y, z=p_top.z}) + minetest.remove_node({x=p_top.x+1, y=p_top.y, z=p_top.z}) + minetest.remove_node({x=p_top.x, y=p_top.y, z=p_top.z-1}) + minetest.remove_node({x=p_top.x, y=p_top.y, z=p_top.z+1}) + + minetest.remove_node({x=p_top.x-1, y=p_top.y+1, z=p_top.z}) + minetest.remove_node({x=p_top.x+1, y=p_top.y+1, z=p_top.z}) + minetest.remove_node({x=p_top.x, y=p_top.y+1, z=p_top.z-1}) + minetest.remove_node({x=p_top.x, y=p_top.y+1, z=p_top.z+1}) + end + + if biome.spawn_replace_node then + minetest.remove_node(pos) + 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.set_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.set_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 +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 + + 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 +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 + + 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 +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 } +end) + +minetest.register_on_generated(function(minp, maxp, blockseed) + biome_lib.blocklist_no_aircheck[#biome_lib.blocklist_no_aircheck + 1] = { minp, maxp } +end) + +-- "Play" them back, populating them with new stuff in the process + +minetest.register_globalstep(function(dtime) + if dtime < 0.2 -- don't attempt to populate if lag is already too high + and math.random(100) <= biome_lib.queue_run_ratio + and (#biome_lib.blocklist_aircheck > 0 or #biome_lib.blocklist_no_aircheck > 0) then + 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 +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 + print("[biome_lib] Stand by, playing out the rest of the aircheck mapblock log") + print("(there are "..#biome_lib.blocklist_aircheck.." entries)...") + while true do + biome_lib:generate_block_with_air_checking(0.1) + if #biome_lib.blocklist_aircheck == 0 then return end + end + end +end) + +minetest.register_on_shutdown(function() + if #biome_lib.blocklist_no_aircheck > 0 then + 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 true do + biome_lib:generate_block_no_aircheck(0.1) + if #biome_lib.blocklist_no_aircheck == 0 then return end + end + 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) + + minetest.register_abm({ + nodenames = biome.spawn_surfaces, + interval = biome.interval, + chance = biome.spawn_chance, + neighbors = biome.neighbors, + 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 noise1 = perlin_fertile_area:get2d({x=p_top.x, y=p_top.z}) + local noise2 = biome_lib.perlin_temperature:get2d({x=p_top.x, y=p_top.z}) + local noise3 = biome_lib.perlin_humidity:get2d({x=p_top.x+150, y=p_top.z+50}) + if noise1 > biome.plantlife_limit + and noise2 <= biome.temp_min + and noise2 >= biome.temp_max + and noise3 <= biome.humidity_min + and noise3 >= biome.humidity_max + and biome_lib:is_node_loaded(p_top) then + local n_light = minetest.get_node_light(p_top, nil) + 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)) + and n_light >= biome.light_min + and n_light <= biome.light_max + and (not(biome.neighbors and biome.ncount) or #(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 ) + and (not(biome.near_nodes and biome.near_nodes_count and biome.near_nodes_size) or #(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) + and (not(biome.air_count and biome.air_size) or #(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) + and pos.y >= biome.min_elevation + and pos.y <= biome.max_elevation + then + 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.set_node(p_top, { name = biome.alt_wallnode, param2 = walldir }) + end + else + local currentsurface = minetest.get_node(pos).name + if currentsurface ~= "default:water_source" + or (currentsurface == "default:water_source" and #(minetest.find_nodes_in_area({x=pos.x, y=pos.y-biome.depth_max-1, z=pos.z}, {x=pos.x, y=pos.y, z=pos.z}, {"default:dirt", "default:dirt_with_grass", "default:sand"})) > 0 ) + then + 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.set_node(p_top, { name = plant_to_spawn, param2 = fdir }) + end + elseif biome.spawn_replace_node then + minetest.set_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.set_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.set_node({x=pos.x, y=pos.y-1, z=pos.z}, { name = plant_to_spawn, param2 = fdir} ) + end + end + end + end + end + end + end + }) +end + +-- The growing ABM + +function biome_lib:grow_plants(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.seed_diff = options.seed_diff or 0 + + if options.grow_delay*time_scale >= 1 then + options.interval = options.grow_delay*time_scale + else + options.interval = 1 + end + + minetest.register_abm({ + nodenames = { options.grow_plant }, + interval = options.interval, + chance = options.grow_chance, + 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 p_bot = {x=pos.x, y=pos.y-1, z=pos.z} + local n_top = minetest.get_node(p_top) + local n_bot = minetest.get_node(p_bot) + 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) + end + if (n_top.name == "air" or n_top.name == "default:snow") + and (not options.need_wall or (options.need_wall and walldir)) then + -- corner case for changing short junglegrass + -- to dry shrub in desert + if n_bot.name == options.dry_early_node and options.grow_plant == "junglegrass:short" then + minetest.set_node(pos, { name = "default:dry_shrub" }) + + elseif options.grow_vertically and walldir then + if biome_lib:search_downward(pos, options.height_limit, options.ground_nodes) then + minetest.set_node(p_top, { name = options.grow_plant, param2 = walldir}) + end + + elseif not options.grow_result and not options.grow_function then + minetest.remove_node(pos) + + else + biome_lib:replace_object(pos, options.grow_result, options.grow_function, options.facedir, options.seed_diff) + 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.remove_node(pos) + 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 noise1 = perlin_fertile_area:get2d({x=pos.x, y=pos.z}) + local noise2 = biome_lib.perlin_temperature:get2d({x=pos.x, y=pos.z}) + grow_function(pos,noise1,noise2,walldir) + return + elseif growtype == "string" then + local perlin_fertile_area = minetest.get_perlin(seeddiff, perlin_octaves, perlin_persistence, perlin_scale) + local noise1 = perlin_fertile_area:get2d({x=pos.x, y=pos.z}) + local noise2 = biome_lib.perlin_temperature:get2d({x=pos.x, y=pos.z}) + assert(loadstring(grow_function.."(...)"))(pos,noise1,noise2,walldir) + return + elseif growtype == "nil" then + minetest.set_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 + +-- 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) + local verts = dump(verticals) + if randomflag then + local walltab = {} + + if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then walltab[#walltab + 1] = 3 end + if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then walltab[#walltab + 1] = 2 end + if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then walltab[#walltab + 1] = 5 end + if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then walltab[#walltab + 1] = 4 end + + if #walltab > 0 then return walltab[math.random(1, #walltab)] end + + else + if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then return 3 end + if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then return 2 end + if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then return 5 end + if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then return 4 end + end + return nil +end + +-- Function to search downward from the given position, looking for the first +-- 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) + 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} + end + end + return false +end + +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 + 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 = 3} + end + if minetest.get_node({ x=pos.x, y=pos.y, z=pos.z-1 }).name == "air" then + return {newpos = { x=pos.x, y=pos.y, z=pos.z-1 }, facedir = 4} + end + if minetest.get_node({ x=pos.x, y=pos.y, z=pos.z+1 }).name == "air" then + return {newpos = { x=pos.x, y=pos.y, z=pos.z+1 }, facedir = 5} + end + return nil +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 + +-- 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 + +print("[Biome Lib] Loaded") + +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.") +end) diff --git a/mods/CORE/biome_lib/locale/de.txt b/mods/biome_lib/locale/de.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/CORE/biome_lib/locale/de.txt rename to mods/biome_lib/locale/de.txt diff --git a/mods/CORE/biome_lib/locale/fr.txt b/mods/biome_lib/locale/fr.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/CORE/biome_lib/locale/fr.txt rename to mods/biome_lib/locale/fr.txt diff --git a/mods/CORE/biome_lib/locale/ru.txt b/mods/biome_lib/locale/ru.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/CORE/biome_lib/locale/ru.txt rename to mods/biome_lib/locale/ru.txt diff --git a/mods/CORE/biome_lib/locale/template.txt b/mods/biome_lib/locale/template.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/CORE/biome_lib/locale/template.txt rename to mods/biome_lib/locale/template.txt diff --git a/mods/CORE/biome_lib/locale/tr.txt b/mods/biome_lib/locale/tr.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/CORE/biome_lib/locale/tr.txt rename to mods/biome_lib/locale/tr.txt diff --git a/mods/CORE/biome_lib/mod.conf b/mods/biome_lib/mod.conf old mode 100644 new mode 100755 similarity index 100% rename from mods/CORE/biome_lib/mod.conf rename to mods/biome_lib/mod.conf diff --git a/mods/biomes/australian_alps.lua b/mods/biomes/australian_alps.lua new file mode 100644 index 0000000..879b9eb --- /dev/null +++ b/mods/biomes/australian_alps.lua @@ -0,0 +1,101 @@ +--[[ + Australian Alps +--]] + + +-- australian alps +minetest.register_biome({ + name = "australian_alps", + node_top = "default:snowblock", + depth_top = 2, + node_filler = "default:dirt_with_snow", + depth_filler = 1, + node_stone = "default:stone", + node_river_water = "default:river_water_source", + node_riverbed = "outback:shale", + depth_riverbed = 1, + y_max = 31000, + y_min = 150, + heat_point = 10, + humidity_point = 30, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Basalt +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + clust_scarcity = 3375, + clust_num_ores = 33, + clust_size = 5, + biomes = {"australian_alps"}, + y_max = 31000, + y_min = -31, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + clust_scarcity = 1000, + clust_num_ores = 58, + clust_size = 7, + biomes = {"australian_alps"}, + y_max = 31000, + y_min = -31, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:snowblock"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"australian_alps"}, + y_max = 210, + y_min = 150, + decoration = "default:grass_"..length, + }) + end + + register_grass_decoration(0.015, 0.045, 2) + register_grass_decoration(0.03, 0.03, 1) + + -- Snow + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:snowblock"}, + sidelen = 80, + fill_ratio = 0.3, + biomes = {"australian_alps"}, + y_max = 31000, + y_min = 150, + decoration = "default:snow", + }) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/central_australia.lua b/mods/biomes/central_australia.lua new file mode 100644 index 0000000..69b6fea --- /dev/null +++ b/mods/biomes/central_australia.lua @@ -0,0 +1,162 @@ +--[[ + Central Australia +--]] + + +-- central australia +minetest.register_biome({ + name = "central_australia", + node_top = "outback:red_dirt", + depth_top = 2, + node_filler = "outback:red_sandstone", + depth_filler = 2, + node_stone = "technic:granite", + node_river_water = "outback:muddy_water_source", + node_riverbed = "outback:red_dirt", + depth_riverbed = 1, + y_max = 31000, + y_min = 4, + heat_point = 38, + humidity_point = 66, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Copper (Olympic Dam) +minetest.register_ore({ + ore_type = "blob", + ore = "outback:granite_with_copper", + wherein = {"technic:granite"}, + clust_scarcity = 85184, + clust_size = 8, + biomes = {"central_australia"}, + y_max = 12, + y_min = -31, + noise_threshold = 1, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 16, y = 16, z = 16}, + seed = 555, + octaves = 3, + persist = 0.6 + }, +}) + +-- Opal (Coober Pedy) +minetest.register_ore({ + ore_type = "vein", + ore = "outback:granite_with_opal", + wherein = "technic:granite", + biomes = {"central_australia"}, + y_max = 21, + y_min = -31, + noise_threshold = 1.7, + noise_params = { + offset = 0, + scale = 3, + spread = {x=211, y=211, z=211}, + seed = 3223, + octaves = 3, + persist = 0.5, + flags = "eased", + }, +}) + +-- Smoky Quartz (Kalkarindji) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:granite_with_smoky_quartz", + wherein = {"technic:granite"}, + biomes = {"central_australia"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 19, + y_min = -31, +}) + +-- Uranium (Olympic Dam) +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:granite_mineral_uranium", + wherein = "technic:granite", + clust_scarcity = 8000, + clust_num_ores = 8, + clust_size = 5, + biomes = {"central_australia"}, + y_max = 12, + y_min = -31, + noise_threshold = 0.6, + noise_params = { + offset = 0, + scale = 1, + spread = {x = 100, y = 100, z = 100}, + seed = 419, + octaves = 3, + persist = 0.7 + }, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"outback:red_dirt"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"central_australia"}, + y_max = 300, + y_min = 4, + decoration = "default:dry_grass_"..length, + }) + end + + register_dry_grass_decoration(0.05, 0.01, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Small stone rocks + local function register_small_red_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_red_rocks"..number, + sidelen = 80, + place_on = {"outback:red_dirt"}, + fill_ratio = 0.002, + biomes = {"central_australia"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_red_rocks(6) + register_small_red_rocks(5) + register_small_red_rocks(4) + register_small_red_rocks(3) + register_small_red_rocks(2) + register_small_red_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/deep_underground.lua b/mods/biomes/deep_underground.lua new file mode 100644 index 0000000..83fb95b --- /dev/null +++ b/mods/biomes/deep_underground.lua @@ -0,0 +1,388 @@ +--[[ + Deep Underground +--]] + + +-- deep_underground +minetest.register_biome({ + name = "deep_underground", + node_stone = "default:stone", + y_max = -1072, + y_min = -31000, + heat_point = 50, + humidity_point = 50, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Basalt +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 5832, + clust_num_ores = 33, + clust_size = 5, + y_max = -1072, + y_min = -31000, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 1728, + clust_num_ores = 58, + clust_size = 7, + y_max = -1072, + y_min = -31000, +}) + +-- Shale +minetest.register_ore({ + ore_type = "blob", + ore = "outback:shale", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 15625, + clust_num_ores = 6, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +-- Slate +minetest.register_ore({ + ore_type = "blob", + ore = "outback:slate", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 64000, + clust_num_ores = 6, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +-- Chromium +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_chromium", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 2197, + clust_num_ores = 5, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +-- Coal +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 13824, + clust_num_ores = 27, + clust_size = 6, + y_max = -1072, + y_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:diorite_with_coal", + wherein = {"outback:diorite"}, + biomes = {"deep_underground"}, + clust_scarcity = 13824, + clust_num_ores = 27, + clust_size = 6, + y_max = -1072, + y_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 512, + clust_num_ores = 8, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:diorite_with_coal", + wherein = {"outback:diorite"}, + biomes = {"deep_underground"}, + clust_scarcity = 512, + clust_num_ores = 8, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +-- Copper +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 729, + clust_num_ores = 5, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +-- Diamond +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 4913, + clust_num_ores = 4, + clust_size = 3, + y_max = -1072, + y_min = -1607, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 4, + clust_size = 3, + y_max = -1608, + y_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:basalt_with_diamond", + wherein = {"outback:basalt"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 4, + clust_size = 3, + y_max = -1608, + y_min = -31000, +}) + +-- Gold +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 2197, + clust_num_ores = 5, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +-- Iron +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 343, + clust_num_ores = 5, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:granite_with_iron", + wherein = {"technic:granite"}, + biomes = {"deep_underground"}, + clust_scarcity = 343, + clust_num_ores = 5, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 13824, + clust_num_ores = 27, + clust_size = 6, + y_max = -1072, + y_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:granite_with_iron", + wherein = {"technic:granite"}, + biomes = {"deep_underground"}, + clust_scarcity = 13824, + clust_num_ores = 27, + clust_size = 6, + y_max = -1072, + y_min = -31000, +}) + +-- Silver +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_silver", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 2197, + clust_num_ores = 5, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +-- Tin +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 1000, + clust_num_ores = 5, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:granite_with_tin", + wherein = {"technic:granite"}, + biomes = {"deep_underground"}, + clust_scarcity = 1000, + clust_num_ores = 5, + clust_size = 3, + y_max = -1072, + y_min = -31000, +}) + +-- Agate +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_agate", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -1072, + y_min = -31000, +}) + +-- Amethyst +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_amethyst", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -1072, + y_min = -31000, +}) + +-- Citrine +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_citrine", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -1072, + y_min = -31000, +}) + +-- Emerald +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_emerald", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -1072, + y_min = -31000, +}) + +-- Jade +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_jade", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -1072, + y_min = -31000, +}) + +-- Ruby +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_ruby", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -1072, + y_min = -31000, +}) + +-- Sapphire +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_sapphire", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -1072, + y_min = -31000, +}) + +-- Smoky Quartz +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_smoky_quartz", + wherein = {"default:stone"}, + biomes = {"deep_underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -1072, + y_min = -31000, +}) diff --git a/mods/biomes/depends.txt b/mods/biomes/depends.txt new file mode 100644 index 0000000..fe1be08 --- /dev/null +++ b/mods/biomes/depends.txt @@ -0,0 +1,5 @@ +default +outback +mapgen +technic? +flowers? \ No newline at end of file diff --git a/mods/biomes/eastern_coasts.lua b/mods/biomes/eastern_coasts.lua new file mode 100644 index 0000000..78153ee --- /dev/null +++ b/mods/biomes/eastern_coasts.lua @@ -0,0 +1,279 @@ +--[[ + Eastern Coasts +--]] + + +-- eastern coasts +minetest.register_biome({ + name = "eastern_coasts", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:dirt", + depth_riverbed = 1, + vertical_blend = 3, + y_max = 31000, + y_min = 4, + heat_point = 7, + humidity_point = 57, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Basalt +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"eastern_coasts"}, + clust_scarcity = 3375, + clust_num_ores = 33, + clust_size = 5, + y_max = 31000, + y_min = -31, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"eastern_coasts"}, + clust_scarcity = 1000, + clust_num_ores = 58, + clust_size = 7, + y_max = 31000, + y_min = -31, +}) + +-- Shale +minetest.register_ore({ + ore_type = "blob", + ore = "outback:shale", + wherein = {"default:stone"}, + biomes = {"eastern_coasts"}, + clust_scarcity = 15625, + clust_num_ores = 6, + clust_size = 3, + y_max = 31000, + y_min = -31, +}) + +-- Coal +minetest.register_ore({ + ore_type = "sheet", + ore = "default:stone_with_coal", + wherein = {"default:stone"}, + column_height_min = 2, + column_height_max = 4, + column_midpoint_factor = 0.5, + biomes = {"eastern_coasts"}, + y_max = 70, + y_min = -31, + noise_threshold = 1.25, + noise_params = { + offset = 0, + scale = 2, + spread = {x = 19, y = 19, z = 11}, + seed = 962, + octaves = 2, + persist = 0.8, + }, +}) + +-- Amethyst (Oban River) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_amethyst", + wherein = {"default:stone"}, + biomes = {"eastern_coasts"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 120, + y_min = -31, +}) + +-- Citrine (Oban River) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_citrine", + wherein = {"default:stone"}, + biomes = {"eastern_coasts"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 120, + y_min = -31, +}) + +-- Ruby (Barrington Tops) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_ruby", + wherein = {"default:stone"}, + biomes = {"eastern_coasts"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 129, + y_min = -31, +}) + +-- Sapphire (Kings Plains) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_sapphire", + wherein = {"default:stone"}, + biomes = {"eastern_coasts"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 88, + y_min = -31, +}) + +-- Smoky Quartz (Kingsgate) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_smoky_quartz", + wherein = {"default:stone"}, + biomes = {"eastern_coasts"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 115, + y_min = -31, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"eastern_coasts"}, + y_max = 200, + y_min = 4, + decoration = "default:grass_"..length, + }) + end + + register_grass_decoration(-0.03, 0.09, 5) + register_grass_decoration(-0.015, 0.075, 4) + register_grass_decoration(0, 0.06, 3) + register_grass_decoration(0.015, 0.045, 2) + register_grass_decoration(0.03, 0.03, 1) + + -- Ferns + local function register_fern_decoration(seed, size) + minetest.register_decoration({ + name = "default:fern_" .. size, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.2, + spread = {x = 100, y = 100, z = 100}, + seed = seed, + octaves = 3, + persist = 0.7 + }, + biomes = {"eastern_coasts"}, + y_max = 140, + y_min = 40, + decoration = "default:fern_" .. size, + }) + end + + register_fern_decoration(14936, 3) + register_fern_decoration(801, 2) + register_fern_decoration(5, 1) + + -- Waterlily + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = { + "default:dirt", + "default:sand", + }, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"eastern_coasts"}, + y_min = 0, + y_max = 96, + decoration = "flowers:waterlily", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) + + -- Snow + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 80, + fill_ratio = 0.3, + biomes = {"eastern_coasts"}, + y_max = 31000, + y_min = 140, + decoration = "default:snow", + }) + + -- Small stone rocks + local function register_small_stone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_stone_rocks"..number, + sidelen = 80, + place_on = {"default:dirt_with_grass"}, + fill_ratio = 0.003, + y_min = 16, + biomes = {"eastern_coasts"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_stone_rocks(6) + register_small_stone_rocks(5) + register_small_stone_rocks(4) + register_small_stone_rocks(3) + register_small_stone_rocks(2) + register_small_stone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/far_north_queensland.lua b/mods/biomes/far_north_queensland.lua new file mode 100644 index 0000000..3c745fc --- /dev/null +++ b/mods/biomes/far_north_queensland.lua @@ -0,0 +1,179 @@ +--[[ + Far North Queensland +--]] + + +-- far north queensland +minetest.register_biome({ + name = "far_north_queensland", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:sand", + depth_riverbed = 1, + y_min = 4, + y_max = 31000, + heat_point = 88, + humidity_point = 73, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Basalt +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"far_north_queensland"}, + clust_scarcity = 3375, + clust_num_ores = 33, + clust_size = 5, + y_min = -31, + y_max = 31000, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"far_north_queensland"}, + clust_scarcity = 1000, + clust_num_ores = 58, + clust_size = 7, + y_min = -31, + y_max = 31000, +}) + +-- Aluminium (Weipa / Cape York) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_aluminium", + wherein = {"default:stone"}, + biomes = {"far_north_queensland"}, + clust_scarcity = 512, + clust_num_ores = 5, + clust_size = 3, + y_min = -31, + y_max = 5, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"far_north_queensland"}, + y_min = 4, + y_max = 90, + decoration = "default:grass_"..length, + }) + end + + local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"far_north_queensland"}, + y_min = 91, + y_max = 300, + decoration = "default:dry_grass_"..length, + }) + end + + register_grass_decoration(-0.03, 0.09, 5) + register_grass_decoration(-0.015, 0.075, 4) + register_grass_decoration(0, 0.06, 3) + register_grass_decoration(0.03, 0.09, 2) + register_grass_decoration(0.06, 0.06, 1) + + register_dry_grass_decoration(0.01, 0.05, 5) + register_dry_grass_decoration(0.03, 0.03, 4) + register_dry_grass_decoration(0, 0.06, 3) + register_dry_grass_decoration(0.03, 0.09, 2) + register_dry_grass_decoration(0.06, 0.06, 1) + + -- Waterlily + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = { + "default:dirt", + "default:sand", + }, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"far_north_queensland"}, + y_max = 0, + y_min = 96, + decoration = "flowers:waterlily", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) + + -- Small stone rocks + local function register_small_stone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_stone_rocks"..number, + sidelen = 80, + place_on = {"default:dirt_with_grass"}, + fill_ratio = 0.001, + y_min = 42, + biomes = {"far_north_queensland"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_stone_rocks(6) + register_small_stone_rocks(5) + register_small_stone_rocks(4) + register_small_stone_rocks(3) + register_small_stone_rocks(2) + register_small_stone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/flinders_lofty.lua b/mods/biomes/flinders_lofty.lua new file mode 100644 index 0000000..1941cc0 --- /dev/null +++ b/mods/biomes/flinders_lofty.lua @@ -0,0 +1,174 @@ +--[[ + Flinders / Lofty +--]] + + +-- flinders / lofty +minetest.register_biome({ + name = "flinders_lofty", + node_top = "default:dirt_with_dry_grass", + depth_top = 1, + node_filler = "outback:red_dirt", + depth_filler = 2, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:dirt", + depth_riverbed = 1, + vertical_blend = 3, + y_max = 31000, + y_min = 4, + heat_point = 40, + humidity_point = 20, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Slate (Adelaide Hills / Mintaro / Spalding) +minetest.register_ore({ + ore_type = "blob", + ore = "outback:slate", + wherein = {"default:stone"}, + biomes = {"flinders_lofty"}, + clust_scarcity = 8000, + clust_num_ores = 10, + clust_size = 4, + y_max = 73, + y_min = -31, +}) + +-- Copper (Olympic Dam) +minetest.register_ore({ + ore_type = "vein", + ore = "default:stone_with_copper", + wherein = "default:stone", + biomes = {"flinders_lofty"}, + y_max = 34, + y_min = -31, + noise_threshold = 1.6, + noise_params = { + offset = 0, + scale = 3, + spread = {x=211, y=211, z=211}, + seed = 4825, + octaves = 3, + persist = 0.6, + flags = "eased", + }, +}) + +-- Jade (Cowell) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_jade", + wherein = {"default:stone"}, + biomes = {"flinders_lofty"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 2, + y_min = -31, +}) + +-- Marble (Penrice) +minetest.register_ore({ + ore_type = "sheet", + ore = "outback:marble", + wherein = "default:stone", + clust_scarcity = 1, + clust_num_ores = 1, + clust_size = 3, + biomes = {"flinders_lofty"}, + y_max = 34, + y_min = -31, + noise_threshold = 0.4, + noise_params = {offset=0, scale=15, spread={x=150, y=150, z=150}, seed=23, octaves=3, persist=0.70} +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"flinders_lofty"}, + y_max = 240, + y_min = 58, + decoration = "default:grass_"..length, + }) + end + + local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"flinders_lofty"}, + y_max = 73, + y_min = 4, + decoration = "default:dry_grass_"..length, + }) + end + + register_grass_decoration(0.015, 0.045, 2) + register_grass_decoration(0.03, 0.03, 1) + + register_dry_grass_decoration(0.01, 0.05, 5) + register_dry_grass_decoration(0.03, 0.03, 4) + register_dry_grass_decoration(0.05, 0.01, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Small stone rocks + local function register_small_stone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_stone_rocks"..number, + sidelen = 80, + place_on = {"default:dirt_with_dry_grass"}, + fill_ratio = 0.002, + y_min = 24, + biomes = {"flinders_lofty"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_stone_rocks(6) + register_small_stone_rocks(5) + register_small_stone_rocks(4) + register_small_stone_rocks(3) + register_small_stone_rocks(2) + register_small_stone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/great_australian_bight.lua b/mods/biomes/great_australian_bight.lua new file mode 100644 index 0000000..88f9691 --- /dev/null +++ b/mods/biomes/great_australian_bight.lua @@ -0,0 +1,58 @@ +--[[ + Great Australian Bight +--]] + + +-- great australian bight +minetest.register_biome({ + name = "great_australian_bight", + node_top = "outback:limestone", + depth_top = 3, + node_filler = "outback:basalt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "outback:limestone", + depth_riverbed = 1, + vertical_blend = 1, + y_max = 3, + y_min = -31, + heat_point = 55, + humidity_point = 50, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Kelp + minetest.register_decoration({ + name = "default:kelp", + deco_type = "simple", + place_on = {"outback:limestone"}, + place_offset_y = -1, + sidelen = 16, + noise_params = { + offset = -0.04, + scale = 0.1, + spread = {x = 200, y = 200, z = 200}, + seed = 87112, + octaves = 3, + persist = 0.7 + }, + biomes = {"great_australian_bight"}, + y_max = -5, + y_min = -10, + flags = "force_placement", + decoration = "default:sand_with_kelp", + param2 = 48, + param2_max = 96, + }) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/great_barrier_reef.lua b/mods/biomes/great_barrier_reef.lua new file mode 100644 index 0000000..1140ad9 --- /dev/null +++ b/mods/biomes/great_barrier_reef.lua @@ -0,0 +1,81 @@ +--[[ + Great Barrier Reef +--]] + + +-- great barrier reef +minetest.register_biome({ + name = "great_barrier_reef", + node_top = "default:sand", + depth_top = 2, + node_filler = "outback:basalt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:sand", + depth_riverbed = 1, + vertical_blend = 1, + y_max = 3, + y_min = -31, + heat_point = 88, + humidity_point = 73, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Coral reef + minetest.register_decoration({ + name = "default:corals", + deco_type = "schematic", + place_on = {"default:sand"}, + noise_params = { + offset = -0.15, + scale = 0.1, + spread = {x = 100, y = 100, z = 100}, + seed = 7013, + octaves = 3, + persist = 1, + }, + biomes = {"great_barrier_reef"}, + y_max = -2, + y_min = -8, + schematic = minetest.get_modpath("default") .. "/schematics/corals.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + -- Waterlily + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = { + "default:dirt", + "default:sand", + }, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"great_barrier_reef"}, + y_max = 3, + y_min = 0, + decoration = "flowers:waterlily", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/indian_ocean.lua b/mods/biomes/indian_ocean.lua new file mode 100644 index 0000000..19fa0f8 --- /dev/null +++ b/mods/biomes/indian_ocean.lua @@ -0,0 +1,83 @@ +--[[ + Indian Ocean +--]] + + +-- indian ocean +minetest.register_biome({ + name = "indian_ocean", + node_top = "default:sand", + depth_top = 2, + node_filler = "outback:basalt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:sand", + depth_riverbed = 1, + vertical_blend = 1, + y_max = 3, + y_min = -31, + heat_point = 70, + humidity_point = 35, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Marram grass + minetest.register_decoration({ + name = "default:marram_grass", + deco_type = "simple", + place_on = {"default:sand"}, + sidelen = 4, + noise_params = { + offset = -0.4, + scale = 3.0, + spread = {x = 16, y = 16, z = 16}, + seed = 513337, + octaves = 1, + persist = 0.5, + flags = "absvalue" + }, + biomes = {"indian_ocean"}, + y_max = 3, + y_min = 3, + decoration = { + "default:marram_grass_1", + "default:marram_grass_2", + "default:marram_grass_3", + }, + }) + + -- Kelp + minetest.register_decoration({ + name = "default:kelp", + deco_type = "simple", + place_on = {"default:sand"}, + place_offset_y = -1, + sidelen = 16, + noise_params = { + offset = -0.04, + scale = 0.1, + spread = {x = 200, y = 200, z = 200}, + seed = 87112, + octaves = 3, + persist = 0.7 + }, + biomes = {"indian_ocean"}, + y_max = -5, + y_min = -10, + flags = "force_placement", + decoration = "default:sand_with_kelp", + param2 = 48, + param2_max = 96, + }) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/init.lua b/mods/biomes/init.lua new file mode 100644 index 0000000..b7b5582 --- /dev/null +++ b/mods/biomes/init.lua @@ -0,0 +1,41 @@ +--[[ + Outback Biomes +--]] + + +biomes = {} + +biomes.path = minetest.get_modpath("biomes") + +minetest.clear_registered_biomes() + + +-- Underground +if outback.deep_underground then dofile(biomes.path.."/deep_underground.lua") end +if outback.underground then dofile(biomes.path.."/underground.lua") end + +-- Coast/Ocean +if outback.mangroves then dofile(biomes.path.."/mangroves.lua") end +if outback.tasman_sea then dofile(biomes.path.."/tasman_sea.lua") end +if outback.great_australian_bight then dofile(biomes.path.."/great_australian_bight.lua") end +if outback.indian_ocean then dofile(biomes.path.."/indian_ocean.lua") end +if outback.great_barrier_reef then dofile(biomes.path.."/great_barrier_reef.lua") end +if outback.timor_sea then dofile(biomes.path.."/timor_sea.lua") end + +-- Mainland +if outback.tasmania then dofile(biomes.path.."/tasmania.lua") end +if outback.victoria then dofile(biomes.path.."/victoria.lua") end +if outback.jarrah_karri_forests then dofile(biomes.path.."/jarrah_karri_forests.lua") end +if outback.eastern_coasts then dofile(biomes.path.."/eastern_coasts.lua") end +if outback.flinders_lofty then dofile(biomes.path.."/flinders_lofty.lua") end +if outback.murray_darling then dofile(biomes.path.."/murray_darling.lua") end +if outback.nullabor then dofile(biomes.path.."/nullabor.lua") end +if outback.mulga_lands then dofile(biomes.path.."/mulga_lands.lua") end +if outback.far_north_queensland then dofile(biomes.path.."/far_north_queensland.lua") end +if outback.central_australia then dofile(biomes.path.."/central_australia.lua") end +if outback.top_end then dofile(biomes.path.."/top_end.lua") end +if outback.pilbara then dofile(biomes.path.."/pilbara.lua") end +if outback.simpson_desert then dofile(biomes.path.."/simpson_desert.lua") end + +-- Alpine +if outback.australian_alps then dofile(biomes.path.."/australian_alps.lua") end \ No newline at end of file diff --git a/mods/biomes/jarrah_karri_forests.lua b/mods/biomes/jarrah_karri_forests.lua new file mode 100644 index 0000000..2edc640 --- /dev/null +++ b/mods/biomes/jarrah_karri_forests.lua @@ -0,0 +1,139 @@ +--[[ + Jarrah / Karri Forests +--]] + + +-- jarrah / karri forests +minetest.register_biome({ + name = "jarrah_karri_forests", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:dirt", + depth_riverbed = 1, + vertical_blend = 3, + y_max = 31000, + y_min = 4, + heat_point = 6, + humidity_point = 91, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Aluminium (Darling Scarp) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_aluminium", + wherein = {"default:stone"}, + biomes = {"jarrah_karri_forests"}, + clust_scarcity = 1728, + clust_num_ores = 8, + clust_size = 4, + y_max = 58, + y_min = -31, +}) + +-- Gold (Boddington) +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = {"default:stone"}, + biomes = {"jarrah_karri_forests"}, + clust_scarcity = 2197, + clust_num_ores = 5, + clust_size = 3, + y_max = 27, + y_min = -31, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"jarrah_karri_forests"}, + y_max = 240, + y_min = 40, + decoration = "default:grass_"..length, + }) + end + + local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"jarrah_karri_forests"}, + y_max = 50, + y_min = 5, + decoration = "default:dry_grass_"..length, + }) + end + + register_grass_decoration(0.015, 0.045, 2) + register_grass_decoration(0.03, 0.03, 1) + + register_dry_grass_decoration(0.01, 0.05, 5) + register_dry_grass_decoration(0.03, 0.03, 4) + register_dry_grass_decoration(0.05, 0.01, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Small stone rocks + local function register_small_stone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_stone_rocks"..number, + sidelen = 80, + place_on = {"default:dirt_with_grass"}, + fill_ratio = 0.001, + y_min = 24, + biomes = {"jarrah_karri_forests"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_stone_rocks(6) + register_small_stone_rocks(5) + register_small_stone_rocks(4) + register_small_stone_rocks(3) + register_small_stone_rocks(2) + register_small_stone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/mangroves.lua b/mods/biomes/mangroves.lua new file mode 100644 index 0000000..13cf613 --- /dev/null +++ b/mods/biomes/mangroves.lua @@ -0,0 +1,140 @@ +--[[ + Mangroves +--]] + + +-- mangroves +minetest.register_biome({ + name = "mangroves", + node_top = "outback:mangrove_mud", + depth_top = 3, + node_filler = "default:clay", + depth_filler = 1, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:dirt", + depth_riverbed = 1, + vertical_blend = 1, + y_max = 3, + y_min = -2, + heat_point = 80, + humidity_point = 80, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Mangrove Fern + minetest.register_decoration({ + name = "outback:mangrove_fern", + deco_type = "simple", + place_on = {"outback:mangrove_mud"}, + sidelen = 16, + fill_ratio = 0.2, + biomes = {"mangroves"}, + y_max = 3, + y_min = 2, + decoration = "outback:mangrove_fern", + }) + + -- Mangrove Lily + minetest.register_decoration({ + name = "outback:mangrove_lily", + deco_type = "simple", + place_on = {"outback:mangrove_mud"}, + sidelen = 16, + fill_ratio = 0.1, + biomes = {"mangroves"}, + y_max = 3, + y_min = 2, + decoration = "flowers:mangrove_lily", + }) + + -- Nipa Palm + minetest.register_decoration({ + name = "outback:mangrove_palm", + deco_type = "schematic", + place_on = {"outback:mangrove_mud"}, + sidelen = 16, + fill_ratio = 0.3, + biomes = {"mangroves"}, + y_max = 3, + y_min = 1, + schematic = { + size = {x = 1, y = 4, z = 1}, + data = { + {name = "ignore", param1 = 0, param2 = 0}, + {name = "outback:mangrove_palm_trunk", param1 = 255, param2 = 0}, + {name = "outback:mangrove_palm_leaf_bot", param1 = 255, param2 = 0}, + {name = "outback:mangrove_palm_leaf_top", param1 = 255, param2 = 0}, + }, + }, + flags = "force_placement", + }) + + -- Waterlily + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = {"outback:mangrove_mud"}, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"mangroves"}, + y_max = 0, + y_min = 0, + decoration = "flowers:waterlily", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) +end + +if outback.decorations then + register_decorations() +end + + + +--[[ + Trees +--]] + +local function register_trees() + + -- Grey Mangrove + outback.schematics.grey_mangrove = {} + local max_ht = 6 + local tree = "outback:grey_mangrove_tree" + local leaves = "outback:grey_mangrove_leaves" + for h = 4, max_ht do + local schem = outback.generate_mangrove_tree_schematic(3, tree, leaves) + outback.push(outback.schematics.grey_mangrove, schem) + minetest.register_decoration({ + deco_type = "schematic", + sidelen = 80, + place_on = {"outback:mangrove_mud"}, + fill_ratio = 0.005, + biomes = {"mangroves"}, + y_max = 3, + y_min = -1, + schematic = schem, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end +end + +if outback.trees then + register_trees() +end diff --git a/mods/biomes/mod.conf b/mods/biomes/mod.conf new file mode 100644 index 0000000..6987554 --- /dev/null +++ b/mods/biomes/mod.conf @@ -0,0 +1 @@ +name = biomes \ No newline at end of file diff --git a/mods/biomes/mulga_lands.lua b/mods/biomes/mulga_lands.lua new file mode 100644 index 0000000..e3c0058 --- /dev/null +++ b/mods/biomes/mulga_lands.lua @@ -0,0 +1,173 @@ +--[[ + Mulga Lands +--]] + + +-- mulga lands +minetest.register_biome({ + name = "mulga_lands", + node_top = "default:dirt_with_dry_grass", + depth_top = 1, + node_filler = "outback:red_dirt", + depth_filler = 2, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:dirt", + depth_riverbed = 1, + y_max = 31000, + y_min = 4, + heat_point = 62, + humidity_point = 75, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Copper (Mount Isa) +minetest.register_ore({ + ore_type = "blob", + ore = "default:stone_with_copper", + wherein = {"default:stone"}, + clust_scarcity = 85184, + clust_size = 8, + biomes = {"mulga_lands"}, + y_max = 36, + y_min = -31, + noise_threshold = 1.3, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 16, y = 16, z = 16}, + seed = 555, + octaves = 3, + persist = 0.6 + }, +}) + +-- Lead (Mount Isa) +minetest.register_ore({ + ore_type = "blob", + ore = "technic:mineral_lead", + wherein = {"default:stone"}, + clust_scarcity = 85184, + clust_size = 8, + biomes = {"mulga_lands"}, + y_max = 36, + y_min = -31, + noise_threshold = 1, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 16, y = 16, z = 16}, + seed = 556, + octaves = 3, + persist = 0.6 + }, +}) + +-- Silver (Mount Isa) +minetest.register_ore({ + ore_type = "blob", + ore = "outback:stone_with_silver", + wherein = {"default:stone"}, + clust_scarcity = 85184, + clust_size = 8, + biomes = {"mulga_lands"}, + y_max = 36, + y_min = -31, + noise_threshold = 1, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 16, y = 16, z = 16}, + seed = 557, + octaves = 3, + persist = 0.6 + }, +}) + +-- Zinc (Mount Isa) +minetest.register_ore({ + ore_type = "blob", + ore = "technic:mineral_zinc", + wherein = {"default:stone"}, + clust_scarcity = 85184, + clust_size = 8, + biomes = {"mulga_lands"}, + y_max = 36, + y_min = -31, + noise_threshold = 1, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 16, y = 16, z = 16}, + seed = 558, + octaves = 3, + persist = 0.6 + }, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"mulga_lands"}, + y_max = 240, + y_min = 4, + decoration = "default:dry_grass_"..length, + }) + end + + register_dry_grass_decoration(0.01, 0.2, 5) + register_dry_grass_decoration(0.03, 0.06, 4) + register_dry_grass_decoration(0.05, 0.02, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Small stone rocks + local function register_small_stone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_stone_rocks"..number, + sidelen = 80, + place_on = {"default:dirt_with_dry_grass"}, + fill_ratio = 0.001, + y_min = 24, + biomes = {"mulga_lands"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_stone_rocks(6) + register_small_stone_rocks(5) + register_small_stone_rocks(4) + register_small_stone_rocks(3) + register_small_stone_rocks(2) + register_small_stone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/murray_darling.lua b/mods/biomes/murray_darling.lua new file mode 100644 index 0000000..fedd32d --- /dev/null +++ b/mods/biomes/murray_darling.lua @@ -0,0 +1,173 @@ +--[[ + Murray-Darling +--]] + + +-- murray-darling +minetest.register_biome({ + name = "murray_darling", + node_top = "default:dirt_with_dry_grass", + depth_top = 1, + node_filler = "outback:red_dirt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:dirt", + depth_riverbed = 1, + vertical_blend = 3, + y_max = 31000, + y_min = 4, + heat_point = 64, + humidity_point = 48, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Zinc (Broken Hill) +minetest.register_ore({ + ore_type = "blob", + ore = "technic:mineral_zinc", + wherein = {"default:stone"}, + clust_scarcity = 85184, + clust_size = 5, + biomes = {"murray_darling"}, + y_max = 33, + y_min = -31, + noise_threshold = 1.5, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 16, y = 16, z = 16}, + seed = 557, + octaves = 3, + persist = 0.6 + }, +}) + +-- Amethyst (Broken Hill) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_amethyst", + wherein = {"default:stone"}, + biomes = {"murray_darling"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 33, + y_min = -31, +}) + +--Copper (Cadia) +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = {"default:stone"}, + biomes = {"murray_darling"}, + clust_scarcity = 1728, + clust_num_ores = 4, + clust_size = 3, + y_max = 69, + y_min = -31, +}) + +-- Gold (Cadia) +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = {"default:stone"}, + biomes = {"murray_darling"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 69, + y_min = -31, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"murray_darling"}, + y_max = 240, + y_min = 100, + decoration = "default:grass_"..length, + }) + end + + local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"murray_darling"}, + y_max = 120, + y_min = 4, + decoration = "default:dry_grass_"..length, + }) + end + + register_grass_decoration(0.015, 0.045, 2) + register_grass_decoration(0.03, 0.03, 1) + + register_dry_grass_decoration(0.01, 0.1, 5) + register_dry_grass_decoration(0.03, 0.06, 4) + register_dry_grass_decoration(0.05, 0.02, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Small stone rocks + local function register_small_stone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_stone_rocks"..number, + sidelen = 80, + place_on = {"default:dirt_with_dry_grass"}, + fill_ratio = 0.001, + y_min = 24, + biomes = {"murray_darling"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_stone_rocks(6) + register_small_stone_rocks(5) + register_small_stone_rocks(4) + register_small_stone_rocks(3) + register_small_stone_rocks(2) + register_small_stone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/nullabor.lua b/mods/biomes/nullabor.lua new file mode 100644 index 0000000..7137962 --- /dev/null +++ b/mods/biomes/nullabor.lua @@ -0,0 +1,122 @@ +--[[ + Nullabor +--]] + + +-- nullabor +minetest.register_biome({ + name = "nullabor", + node_top = "default:desert_sand", + depth_top = 1, + node_filler = "default:sandstone", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_river_source", + node_riverbed = "default:sandstone", + depth_riverbed = 1, + y_max = 31000, + y_min = 4, + heat_point = 65, + humidity_point = 13, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Gold (Kalgoorlie / Boulder) +minetest.register_ore({ + ore_type = "vein", + ore = "default:stone_with_gold", + wherein = {"default:stone"}, + biomes = {"nullabor"}, + y_max = 38, + y_min = -31, + random_factor = 0.23, + noise_threshold = 0.97, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 73, y = 251, z = 73}, + seed = 891, + octaves = 4, + persist = 0.5, + flags = "eased", + }, +}) + +-- Nickel (Mount Margaret / Ravensthorpe) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_nickel", + wherein = {"default:stone"}, + biomes = {"nullabor"}, + clust_scarcity = 512, + clust_num_ores = 5, + clust_size = 3, + y_max = 44, + y_min = -31, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"nullabor"}, + y_max = 240, + y_min = 4, + decoration = "default:dry_grass_"..length, + }) + end + + register_dry_grass_decoration(0.01, 0.05, 5) + register_dry_grass_decoration(0.03, 0.03, 4) + register_dry_grass_decoration(0.05, 0.01, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Small sandstone rocks + local function register_small_sandstone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_sandstone_rocks"..number, + sidelen = 80, + place_on = {"default:desert_sand"}, + fill_ratio = 0.002, + biomes = {"nullabor"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_sandstone_rocks(6) + register_small_sandstone_rocks(5) + register_small_sandstone_rocks(4) + register_small_sandstone_rocks(3) + register_small_sandstone_rocks(2) + register_small_sandstone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/pilbara.lua b/mods/biomes/pilbara.lua new file mode 100644 index 0000000..2832cfa --- /dev/null +++ b/mods/biomes/pilbara.lua @@ -0,0 +1,160 @@ +--[[ + Pilbara +--]] + + +-- pilbara +minetest.register_biome({ + name = "pilbara", + node_top = "outback:red_gravel", + depth_top = 1, + node_filler = "outback:red_sandstone", + depth_filler = 2, + node_stone = "technic:granite", + node_river_water = "outback:muddy_water_source", + node_riverbed = "outback:red_gravel", + depth_riverbed = 1, + y_max = 31000, + y_min = 4, + heat_point = 90, + humidity_point = 39, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Iron (Newman / Pannawonica / Tom Price / Paraburdoo) +minetest.register_ore({ + ore_type = "blob", + ore = "outback:granite_with_iron", + wherein = {"technic:granite"}, + clust_scarcity = 4096, + clust_size = 6, + biomes = {"pilbara"}, + y_max = 54, + y_min = -31, + noise_threshold = 1, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 16, y = 16, z = 16}, + seed = 895, + octaves = 3, + persist = 0.6 + }, +}) + +-- Marble (Maroonah) +minetest.register_ore({ + ore_type = "sheet", + ore = "outback:marble", + wherein = {"technic:granite"}, + clust_scarcity = 1, + clust_num_ores = 1, + clust_size = 3, + biomes = {"pilbara"}, + y_max = 24, + y_min = -31, + noise_threshold = 0.4, + noise_params = {offset=0, scale=15, spread={x=150, y=150, z=150}, seed=23, octaves=3, persist=0.70} +}) + +-- Chromium (Coobina) +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:granite_mineral_chromium", + wherein = {"technic:granite"}, + biomes = {"pilbara"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 55, + y_min = -31, +}) + +-- Amethyst (Ashburton River) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:granite_with_amethyst", + wherein = {"technic:granite"}, + biomes = {"pilbara"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 50, + y_min = -31, +}) + +-- Emerald (Poona) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:granite_with_emerald", + wherein = {"technic:granite"}, + biomes = {"pilbara"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 47, + y_min = -31, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"outback:red_gravel"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"pilbara"}, + y_max = 300, + y_min = 4, + decoration = "default:dry_grass_"..length, + }) + end + + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Small red rocks + local function register_small_red_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_red_rocks"..number, + sidelen = 80, + place_on = {"outback:red_gravel"}, + fill_ratio = 0.003, + biomes = {"pilbara"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_red_rocks(6) + register_small_red_rocks(5) + register_small_red_rocks(4) + register_small_red_rocks(3) + register_small_red_rocks(2) + register_small_red_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/simpson_desert.lua b/mods/biomes/simpson_desert.lua new file mode 100644 index 0000000..0d45ff2 --- /dev/null +++ b/mods/biomes/simpson_desert.lua @@ -0,0 +1,55 @@ +--[[ + Simpson Desert +--]] + + +-- simpson desert +minetest.register_biome({ + name = "simpson_desert", + node_top = "outback:red_sand", + depth_top = 3, + node_filler = "outback:red_sandstone", + depth_filler = 2, + node_stone = "technic:granite", + node_river_water = "outback:muddy_water_source", + node_riverbed = "outback:red_gravel", + depth_riverbed = 1, + y_max = 31000, + y_min = 4, + heat_point = 90, + humidity_point = 10, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Small red rocks + local function register_small_red_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_red_rocks"..number, + sidelen = 80, + place_on = {"outback:red_sand"}, + fill_ratio = 0.001, + y_min = 18, + biomes = {"simpson_desert"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_red_rocks(6) + register_small_red_rocks(5) + register_small_red_rocks(4) + register_small_red_rocks(3) + register_small_red_rocks(2) + register_small_red_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/tasman_sea.lua b/mods/biomes/tasman_sea.lua new file mode 100644 index 0000000..0f0556c --- /dev/null +++ b/mods/biomes/tasman_sea.lua @@ -0,0 +1,109 @@ +--[[ + Tasman Sea +--]] + + +-- tasman sea +minetest.register_biome({ + name = "tasman_sea", + node_top = "default:sand", + depth_top = 2, + node_filler = "outback:basalt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:sand", + depth_riverbed = 1, + vertical_blend = 1, + y_max = 3, + y_min = -31, + heat_point = 10, + humidity_point = 10, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Marram grass + minetest.register_decoration({ + name = "default:marram_grass", + deco_type = "simple", + place_on = {"default:sand"}, + sidelen = 4, + noise_params = { + offset = -0.4, + scale = 3.0, + spread = {x = 16, y = 16, z = 16}, + seed = 513337, + octaves = 1, + persist = 0.5, + flags = "absvalue" + }, + biomes = {"tasman_sea"}, + y_max = 3, + y_min = 3, + decoration = { + "default:marram_grass_1", + "default:marram_grass_2", + "default:marram_grass_3", + }, + }) + + -- Kelp + minetest.register_decoration({ + name = "default:kelp", + deco_type = "simple", + place_on = {"default:sand"}, + place_offset_y = -1, + sidelen = 16, + noise_params = { + offset = -0.04, + scale = 0.1, + spread = {x = 200, y = 200, z = 200}, + seed = 87112, + octaves = 3, + persist = 0.7 + }, + biomes = {"tasman_sea"}, + y_max = -5, + y_min = -10, + flags = "force_placement", + decoration = "default:sand_with_kelp", + param2 = 48, + param2_max = 96, + }) + + -- Waterlily + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = { + "default:dirt", + "default:sand", + }, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"tasman_sea"}, + y_max = 3, + y_min = 0, + decoration = "flowers:waterlily", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/tasmania.lua b/mods/biomes/tasmania.lua new file mode 100644 index 0000000..a4b2cda --- /dev/null +++ b/mods/biomes/tasmania.lua @@ -0,0 +1,204 @@ +--[[ + Tasmania +--]] + + +-- tasmania +minetest.register_biome({ + name = "tasmania", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "outback:shale", + depth_riverbed = 1, + vertical_blend = 3, + y_max = 31000, + y_min = 4, + heat_point = 10, + humidity_point = 10, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Basalt +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"tasmania"}, + clust_scarcity = 3375, + clust_num_ores = 33, + clust_size = 5, + y_max = 31000, + y_min = -31, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"tasmania"}, + clust_scarcity = 1000, + clust_num_ores = 58, + clust_size = 7, + y_max = 31000, + y_min = -31, +}) + +-- Shale +minetest.register_ore({ + ore_type = "blob", + ore = "outback:shale", + wherein = {"default:stone"}, + biomes = {"tasmania"}, + clust_scarcity = 27000, + clust_num_ores = 6, + clust_size = 3, + y_max = 31000, + y_min = -31, +}) + +-- Agate (Lune River) +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_agate", + wherein = {"default:stone"}, + biomes = {"tasmania"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = 12, + y_min = -31, +}) + +-- Tin +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = {"default:stone"}, + biomes = {"tasmania"}, + clust_scarcity = 2197, + clust_num_ores = 5, + clust_size = 3, + y_max = 20, + y_min = -31, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:granite_with_tin", + wherein = {"technic:granite"}, + biomes = {"tasmania"}, + clust_scarcity = 2197, + clust_num_ores = 5, + clust_size = 3, + y_max = 20, + y_min = -31, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"tasmania"}, + y_max = 170, + y_min = 4, + decoration = "default:grass_"..length, + }) + end + + register_grass_decoration(-0.03, 0.09, 5) + register_grass_decoration(-0.015, 0.075, 4) + register_grass_decoration(0, 0.06, 3) + register_grass_decoration(0.03, 0.09, 2) + register_grass_decoration(0.06, 0.06, 1) + + -- Ferns + local function register_fern_decoration(seed, size) + minetest.register_decoration({ + name = "default:fern_" .. size, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.2, + spread = {x = 100, y = 100, z = 100}, + seed = seed, + octaves = 3, + persist = 0.7 + }, + biomes = {"tasmania"}, + y_max = 140, + y_min = 5, + decoration = "default:fern_" .. size, + }) + end + + register_fern_decoration(14936, 3) + register_fern_decoration(801, 2) + register_fern_decoration(5, 1) + + -- Snow + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 80, + fill_ratio = 0.3, + biomes = {"tasmania"}, + y_max = 31000, + y_min = 140, + decoration = "default:snow", + }) + + -- Small stone rocks + local function register_small_stone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_stone_rocks"..number, + sidelen = 80, + place_on = {"default:dirt_with_grass"}, + fill_ratio = 0.001, + y_min = 48, + biomes = {"tasmania"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_stone_rocks(6) + register_small_stone_rocks(5) + register_small_stone_rocks(4) + register_small_stone_rocks(3) + register_small_stone_rocks(2) + register_small_stone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/timor_sea.lua b/mods/biomes/timor_sea.lua new file mode 100644 index 0000000..fb323c3 --- /dev/null +++ b/mods/biomes/timor_sea.lua @@ -0,0 +1,61 @@ +--[[ + Timor Sea +--]] + + +-- timor sea +minetest.register_biome({ + name = "timor_sea", + node_top = "default:sand", + depth_top = 2, + node_filler = "default:sandstone", + depth_filler = 2, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_water = "default:water_source", + node_riverbed = "default:sand", + depth_riverbed = 1, + vertical_blend = 1, + y_max = 3, + y_min = -31, + heat_point = 70, + humidity_point = 90, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Waterlily + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = { + "default:dirt", + "default:sand", + }, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"timor_sea"}, + y_max = 3, + y_min = 0, + decoration = "flowers:waterlily", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/top_end.lua b/mods/biomes/top_end.lua new file mode 100644 index 0000000..4d51907 --- /dev/null +++ b/mods/biomes/top_end.lua @@ -0,0 +1,240 @@ +--[[ + Top End +--]] + + +-- top end +minetest.register_biome({ + name = "top_end", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:sandstone", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:dirt", + depth_riverbed = 1, + y_max = 31000, + y_min = 4, + heat_point = 86, + humidity_point = 86, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Lead (McArthur River) +minetest.register_ore({ + ore_type = "blob", + ore = "technic:mineral_lead", + wherein = {"default:stone"}, + clust_scarcity = 85184, + clust_size = 8, + biomes = {"top_end"}, + y_max = 4, + y_min = -31, + noise_threshold = 1.1, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 16, y = 16, z = 16}, + seed = 556, + octaves = 3, + persist = 0.6 + }, +}) + +-- Zinc (McArthur River) +minetest.register_ore({ + ore_type = "blob", + ore = "technic:mineral_zinc", + wherein = {"default:stone"}, + clust_scarcity = 85184, + clust_size = 8, + biomes = {"top_end"}, + y_max = 4, + y_min = -31, + noise_threshold = 1.2, + noise_params = { + offset = 0, + scale = 3, + spread = {x = 16, y = 16, z = 16}, + seed = 557, + octaves = 3, + persist = 0.6 + }, +}) + +-- Diamonds (Argyle) +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = {"default:stone"}, + clust_scarcity = 64000, + clust_num_ores = 12, + clust_size = 6, + biomes = {"top_end"}, + y_max = 17, + y_min = -31, +}) + +-- Uranium (Ranger) +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_uranium", + wherein = {"default:stone"}, + clust_scarcity = 21952, + clust_num_ores = 4, + clust_size = 3, + biomes = {"top_end"}, + y_max = 19, + y_min = -31, + noise_threshold = 0.6, + noise_params = { + offset = 0, + scale = 1, + spread = {x = 100, y = 100, z = 100}, + seed = 420, + octaves = 3, + persist = 0.7 + }, +}) + +-- Uranium (Jabiluka) +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_uranium", + wherein = {"default:stone"}, + clust_scarcity = 17576, + clust_num_ores = 4, + clust_size = 3, + biomes = {"top_end"}, + y_max = 6, + y_min = -31, + noise_threshold = 0.6, + noise_params = { + offset = 0, + scale = 1, + spread = {x = 100, y = 100, z = 100}, + seed = 241, + octaves = 3, + persist = 0.7 + }, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"top_end"}, + y_max = 20, + y_min = 4, + decoration = "default:grass_"..length, + }) + end + + local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"top_end"}, + y_max = 300, + y_min = 18, + decoration = "default:dry_grass_"..length, + }) + end + + register_grass_decoration(-0.03, 0.09, 5) + register_grass_decoration(-0.015, 0.075, 4) + register_grass_decoration(0, 0.06, 3) + register_grass_decoration(0.015, 0.045, 2) + register_grass_decoration(0.03, 0.03, 1) + + register_dry_grass_decoration(0.01, 0.05, 5) + register_dry_grass_decoration(0.03, 0.03, 4) + register_dry_grass_decoration(0.05, 0.01, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Waterlily + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = { + "default:dirt", + "default:sand", + }, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"top_end"}, + y_max = 96, + y_min = 0, + decoration = "flowers:waterlily", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) + + -- Small sandstone rocks + local function register_small_sandstone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_sandstone_rocks"..number, + sidelen = 80, + place_on = {"default:dirt_with_grass"}, + fill_ratio = 0.002, + y_min = 25, + biomes = {"top_end"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_sandstone_rocks(6) + register_small_sandstone_rocks(5) + register_small_sandstone_rocks(4) + register_small_sandstone_rocks(3) + register_small_sandstone_rocks(2) + register_small_sandstone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/biomes/underground.lua b/mods/biomes/underground.lua new file mode 100644 index 0000000..3a01a03 --- /dev/null +++ b/mods/biomes/underground.lua @@ -0,0 +1,186 @@ +--[[ + Underground +--]] + + +-- underground +minetest.register_biome({ + name = "underground", + node_stone = "default:stone", + y_max = -32, + y_min = -1071, + heat_point = 50, + humidity_point = 50, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Basalt +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 6858, + clust_num_ores = 33, + clust_size = 5, + y_max = -256, + y_min = -1071, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 2197, + clust_num_ores = 58, + clust_size = 7, + y_max = -256, + y_min = -1071, +}) + +-- Shale +minetest.register_ore({ + ore_type = "blob", + ore = "outback:shale", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 27000, + clust_num_ores = 6, + clust_size = 3, + y_max = -256, + y_min = -1071, +}) + +-- Slate +minetest.register_ore({ + ore_type = "blob", + ore = "outback:slate", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 27000, + clust_num_ores = 6, + clust_size = 3, + y_max = -256, + y_min = -1071, +}) + +-- Chromium +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_chromium", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -512, + y_min = -1071, +}) + +-- Coal +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 512, + clust_num_ores = 8, + clust_size = 3, + y_max = -256, + y_min = -1071, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:diorite_with_coal", + wherein = {"outback:diorite"}, + biomes = {"underground"}, + clust_scarcity = 512, + clust_num_ores = 8, + clust_size = 3, + y_max = -256, + y_min = -1071, +}) + +--Copper +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 1728, + clust_num_ores = 4, + clust_size = 3, + y_max = -384, + y_min = -1071, +}) + +-- Iron +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 343, + clust_num_ores = 5, + clust_size = 3, + y_max = -512, + y_min = -1071, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:granite_with_iron", + wherein = {"technic:granite"}, + biomes = {"underground"}, + clust_scarcity = 343, + clust_num_ores = 5, + clust_size = 3, + y_max = -512, + y_min = -1071, +}) + +-- Silver +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:stone_with_silver", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 3375, + clust_num_ores = 3, + clust_size = 2, + y_max = -512, + y_min = -1071, +}) + +-- Tin +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = {"default:stone"}, + biomes = {"underground"}, + clust_scarcity = 2197, + clust_num_ores = 4, + clust_size = 3, + y_max = -512, + y_min = -1071, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "outback:granite_with_tin", + wherein = {"technic:granite"}, + biomes = {"underground"}, + clust_scarcity = 2197, + clust_num_ores = 4, + clust_size = 3, + y_max = -512, + y_min = -1071, +}) diff --git a/mods/biomes/victoria.lua b/mods/biomes/victoria.lua new file mode 100644 index 0000000..2d75750 --- /dev/null +++ b/mods/biomes/victoria.lua @@ -0,0 +1,192 @@ +--[[ + Victoria +--]] + + +-- victoria +minetest.register_biome({ + name = "victoria", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_stone = "default:stone", + node_river_water = "outback:muddy_water_source", + node_riverbed = "default:dirt", + depth_riverbed = 1, + vertical_blend = 3, + y_max = 31000, + y_min = 4, + heat_point = 17, + humidity_point = 18, +}) + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Basalt +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"victoria"}, + clust_scarcity = 3375, + clust_num_ores = 33, + clust_size = 5, + y_max = 31000, + y_min = -31, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "outback:basalt", + wherein = {"default:stone"}, + biomes = {"victoria"}, + clust_scarcity = 1000, + clust_num_ores = 58, + clust_size = 7, + y_max = 31000, + y_min = -31, +}) + +--Coal +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = {"default:stone"}, + biomes = {"victoria"}, + clust_scarcity = 512, + clust_num_ores = 8, + clust_size = 3, + y_max = 15, + y_min = -31, +}) + + +--[[ + Decorations +--]] + +local function register_decorations() + + -- Grass + local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"victoria"}, + y_max = 200, + y_min = 4, + decoration = "default:grass_"..length, + }) + end + + register_grass_decoration(-0.03, 0.09, 5) + register_grass_decoration(-0.015, 0.075, 4) + register_grass_decoration(0, 0.06, 3) + register_grass_decoration(0.015, 0.045, 2) + register_grass_decoration(0.03, 0.03, 1) + + -- Ferns + local function register_fern_decoration(seed, size) + minetest.register_decoration({ + name = "default:fern_" .. size, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.2, + spread = {x = 100, y = 100, z = 100}, + seed = seed, + octaves = 3, + persist = 0.7 + }, + biomes = {"victoria"}, + y_max = 140, + y_min = 5, + decoration = "default:fern_" .. size, + }) + end + + register_fern_decoration(14936, 3) + register_fern_decoration(801, 2) + register_fern_decoration(5, 1) + + -- Waterlily + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = { + "default:dirt", + "default:sand", + }, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"victoria"}, + y_max = 96, + y_min = 0, + decoration = "flowers:waterlily", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) + + -- Snow + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 80, + fill_ratio = 0.3, + biomes = {"victoria"}, + y_max = 31000, + y_min = 140, + decoration = "default:snow", + }) + + -- Small stone rocks + local function register_small_stone_rocks(number) + minetest.register_decoration({ + deco_type = "simple", + decoration = "outback:small_stone_rocks"..number, + sidelen = 80, + place_on = {"default:dirt_with_grass"}, + fill_ratio = 0.003, + y_min = 12, + biomes = {"victoria"}, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + end + + register_small_stone_rocks(6) + register_small_stone_rocks(5) + register_small_stone_rocks(4) + register_small_stone_rocks(3) + register_small_stone_rocks(2) + register_small_stone_rocks(1) +end + +if outback.decorations then + register_decorations() +end diff --git a/mods/boats/README.txt b/mods/boats/README.txt new file mode 100755 index 0000000..8b8a6a0 --- /dev/null +++ b/mods/boats/README.txt @@ -0,0 +1,31 @@ +Minetest Game mod: boats +======================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by PilzAdam (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures and model) +------------------------------------- +Textures: Zeg9 (CC BY-SA 3.0) +Model: thetoon and Zeg9 (CC BY-SA 3.0), + modified by PavelS(SokolovPavel) (CC BY-SA 3.0), + modified by sofar (CC BY-SA 3.0) + +Controls +-------- +Right mouse button = Enter or exit boat when pointing at boat. +Forward = Speed up. + Slow down when moving backwards. +Forward + backward = Enable cruise mode: Boat will accelerate to maximum forward + speed and remain at that speed without needing to hold the + forward key. +Backward = Slow down. + Speed up when moving backwards. + Disable cruise mode. +Left = Turn to the left. + Turn to the right when moving backwards. +Right = Turn to the right. + Turn to the left when moving backwards. \ No newline at end of file diff --git a/mods/ENTITIES/boats/depends.txt b/mods/boats/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/boats/depends.txt rename to mods/boats/depends.txt diff --git a/mods/boats/init.lua b/mods/boats/init.lua new file mode 100755 index 0000000..2956960 --- /dev/null +++ b/mods/boats/init.lua @@ -0,0 +1,297 @@ +-- +-- Helper functions +-- + +local function is_water(pos) + local nn = minetest.get_node(pos).name + return minetest.get_item_group(nn, "water") ~= 0 +end + + +local function get_sign(i) + if i == 0 then + return 0 + else + return i / math.abs(i) + end +end + + +local function get_velocity(v, yaw, y) + local x = -math.sin(yaw) * v + local z = math.cos(yaw) * v + return {x = x, y = y, z = z} +end + + +local function get_v(v) + return math.sqrt(v.x ^ 2 + v.z ^ 2) +end + +-- +-- Boat entity +-- + +local boat = { + physical = true, + -- Warning: Do not change the position of the collisionbox top surface, + -- lowering it causes the boat to fall through the world if underwater + collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, + visual = "mesh", + mesh = "boats_boat.obj", + textures = {"default_wood.png"}, + + driver = nil, + v = 0, + last_v = 0, + removed = false, + auto = false +} + + +function boat.on_rightclick(self, clicker) + if not clicker or not clicker:is_player() then + return + end + local name = clicker:get_player_name() + if self.driver and name == self.driver then + self.driver = nil + self.auto = false + clicker:set_detach() + player_api.player_attached[name] = false + player_api.set_animation(clicker, "stand" , 30) + local pos = clicker:get_pos() + pos = {x = pos.x, y = pos.y + 0.2, z = pos.z} + minetest.after(0.1, function() + clicker:set_pos(pos) + end) + elseif not self.driver then + local attach = clicker:get_attach() + if attach and attach:get_luaentity() then + local luaentity = attach:get_luaentity() + if luaentity.driver then + luaentity.driver = nil + end + clicker:set_detach() + end + self.driver = name + clicker:set_attach(self.object, "", + {x = 0.5, y = 1, z = -3}, {x = 0, y = 0, z = 0}) + player_api.player_attached[name] = true + minetest.after(0.2, function() + player_api.set_animation(clicker, "sit" , 30) + end) + clicker:set_look_horizontal(self.object:get_yaw()) + end +end + + +-- If driver leaves server while driving boat +function boat.on_detach_child(self, child) + self.driver = nil + self.auto = false +end + + +function boat.on_activate(self, staticdata, dtime_s) + self.object:set_armor_groups({immortal = 1}) + if staticdata then + self.v = tonumber(staticdata) + end + self.last_v = self.v +end + + +function boat.get_staticdata(self) + return tostring(self.v) +end + + +function boat.on_punch(self, puncher) + if not puncher or not puncher:is_player() or self.removed then + return + end + + local name = puncher:get_player_name() + if self.driver and name == self.driver then + self.driver = nil + puncher:set_detach() + player_api.player_attached[name] = false + end + if not self.driver then + self.removed = true + local inv = puncher:get_inventory() + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(name)) + or not inv:contains_item("main", "boats:boat") then + local leftover = inv:add_item("main", "boats:boat") + -- if no room in inventory add a replacement boat to the world + if not leftover:is_empty() then + minetest.add_item(self.object:get_pos(), leftover) + end + end + -- delay remove to ensure player is detached + minetest.after(0.1, function() + self.object:remove() + end) + end +end + + +function boat.on_step(self, dtime) + self.v = get_v(self.object:get_velocity()) * get_sign(self.v) + if self.driver then + local driver_objref = minetest.get_player_by_name(self.driver) + if driver_objref then + local ctrl = driver_objref:get_player_control() + if ctrl.up and ctrl.down then + if not self.auto then + self.auto = true + minetest.chat_send_player(self.driver, "[boats] Cruise on") + end + elseif ctrl.down then + self.v = self.v - dtime * 1.8 + if self.auto then + self.auto = false + minetest.chat_send_player(self.driver, "[boats] Cruise off") + end + elseif ctrl.up or self.auto then + self.v = self.v + dtime * 1.8 + end + if ctrl.left then + if self.v < -0.001 then + self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) + else + self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) + end + elseif ctrl.right then + if self.v < -0.001 then + self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) + else + self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) + end + end + end + end + local velo = self.object:get_velocity() + if self.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then + self.object:set_pos(self.object:get_pos()) + return + end + local s = get_sign(self.v) + self.v = self.v - dtime * 0.6 * s + if s ~= get_sign(self.v) then + self.object:set_velocity({x = 0, y = 0, z = 0}) + self.v = 0 + return + end + if math.abs(self.v) > 5 then + self.v = 5 * get_sign(self.v) + end + + local p = self.object:get_pos() + p.y = p.y - 0.5 + local new_velo + local new_acce = {x = 0, y = 0, z = 0} + if not is_water(p) then + local nodedef = minetest.registered_nodes[minetest.get_node(p).name] + if (not nodedef) or nodedef.walkable then + self.v = 0 + new_acce = {x = 0, y = 1, z = 0} + else + new_acce = {x = 0, y = -9.8, z = 0} + end + new_velo = get_velocity(self.v, self.object:get_yaw(), + self.object:get_velocity().y) + self.object:set_pos(self.object:get_pos()) + else + p.y = p.y + 1 + if is_water(p) then + local y = self.object:get_velocity().y + if y >= 5 then + y = 5 + elseif y < 0 then + new_acce = {x = 0, y = 20, z = 0} + else + new_acce = {x = 0, y = 5, z = 0} + end + new_velo = get_velocity(self.v, self.object:get_yaw(), y) + self.object:set_pos(self.object:get_pos()) + else + new_acce = {x = 0, y = 0, z = 0} + if math.abs(self.object:get_velocity().y) < 1 then + local pos = self.object:get_pos() + pos.y = math.floor(pos.y) + 0.5 + self.object:set_pos(pos) + new_velo = get_velocity(self.v, self.object:get_yaw(), 0) + else + new_velo = get_velocity(self.v, self.object:get_yaw(), + self.object:get_velocity().y) + self.object:set_pos(self.object:get_pos()) + end + end + end + self.object:set_velocity(new_velo) + self.object:set_acceleration(new_acce) +end + + +minetest.register_entity("boats:boat", boat) + + +minetest.register_craftitem("boats:boat", { + description = "Boat", + inventory_image = "boats_inventory.png", + wield_image = "boats_wield.png", + wield_scale = {x = 2, y = 2, z = 1}, + liquids_pointable = true, + groups = {flammable = 2}, + + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + if pointed_thing.type ~= "node" then + return itemstack + end + if not is_water(pointed_thing.under) then + return itemstack + end + pointed_thing.under.y = pointed_thing.under.y + 0.5 + boat = minetest.add_entity(pointed_thing.under, "boats:boat") + if boat then + if placer then + boat:set_yaw(placer:get_look_horizontal()) + end + local player_name = placer and placer:get_player_name() or "" + if not (creative and creative.is_enabled_for and + creative.is_enabled_for(player_name)) then + itemstack:take_item() + end + end + return itemstack + end, +}) + + +minetest.register_craft({ + output = "boats:boat", + recipe = { + {"", "", "" }, + {"group:wood", "", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + }, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "boats:boat", + burntime = 20, +}) \ No newline at end of file diff --git a/mods/ENTITIES/boats/license.txt b/mods/boats/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/boats/license.txt rename to mods/boats/license.txt diff --git a/mods/ENTITIES/boats/models/boats_boat.obj b/mods/boats/models/boats_boat.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/boats/models/boats_boat.obj rename to mods/boats/models/boats_boat.obj diff --git a/mods/ENTITIES/boats/textures/boats_inventory.png b/mods/boats/textures/boats_inventory.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/boats/textures/boats_inventory.png rename to mods/boats/textures/boats_inventory.png diff --git a/mods/ENTITIES/boats/textures/boats_wield.png b/mods/boats/textures/boats_wield.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/boats/textures/boats_wield.png rename to mods/boats/textures/boats_wield.png diff --git a/mods/PLAYER/bones/README.txt b/mods/bones/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/bones/README.txt rename to mods/bones/README.txt diff --git a/mods/ITEMS/australia/depends.txt b/mods/bones/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/australia/depends.txt rename to mods/bones/depends.txt diff --git a/mods/bones/init.lua b/mods/bones/init.lua new file mode 100755 index 0000000..5c014bb --- /dev/null +++ b/mods/bones/init.lua @@ -0,0 +1,284 @@ +-- Minetest 0.4 mod: bones +-- See README.txt for licensing and other information. + +bones = {} + +local function is_owner(pos, name) + local owner = minetest.get_meta(pos):get_string("owner") + if owner == "" or owner == name or minetest.check_player_privs(name, "protection_bypass") then + return true + end + return false +end + +local bones_formspec = + "size[8,9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[current_name;main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[current_name;main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + +local share_bones_time = tonumber(minetest.settings:get("share_bones_time")) or 1200 +local share_bones_time_early = tonumber(minetest.settings:get("share_bones_time_early")) or share_bones_time / 4 + +minetest.register_node("bones:bones", { + description = "Bones", + tiles = { + "bones_top.png^[transform2", + "bones_bottom.png", + "bones_side.png", + "bones_side.png", + "bones_rear.png", + "bones_front.png" + }, + paramtype2 = "facedir", + groups = {dig_immediate = 2}, + sounds = default.node_sound_gravel_defaults(), + + can_dig = function(pos, player) + local inv = minetest.get_meta(pos):get_inventory() + local name = "" + if player then + name = player:get_player_name() + end + return is_owner(pos, name) and inv:is_empty("main") + end, + + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if is_owner(pos, player:get_player_name()) then + return count + end + return 0 + end, + + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if is_owner(pos, player:get_player_name()) then + return stack:get_count() + end + return 0 + end, + + on_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if meta:get_inventory():is_empty("main") then + local inv = player:get_inventory() + if inv:room_for_item("main", {name = "bones:bones"}) then + inv:add_item("main", {name = "bones:bones"}) + else + minetest.add_item(pos, "bones:bones") + end + minetest.remove_node(pos) + end + end, + + on_punch = function(pos, node, player) + if not is_owner(pos, player:get_player_name()) then + return + end + + if minetest.get_meta(pos):get_string("infotext") == "" then + return + end + + local inv = minetest.get_meta(pos):get_inventory() + local player_inv = player:get_inventory() + local has_space = true + + for i = 1, inv:get_size("main") do + local stk = inv:get_stack("main", i) + if player_inv:room_for_item("main", stk) then + inv:set_stack("main", i, nil) + player_inv:add_item("main", stk) + else + has_space = false + break + end + end + + -- remove bones if player emptied them + if has_space then + if player_inv:room_for_item("main", {name = "bones:bones"}) then + player_inv:add_item("main", {name = "bones:bones"}) + else + minetest.add_item(pos,"bones:bones") + end + minetest.remove_node(pos) + end + end, + + on_timer = function(pos, elapsed) + local meta = minetest.get_meta(pos) + local time = meta:get_int("time") + elapsed + if time >= share_bones_time then + meta:set_string("infotext", meta:get_string("owner") .. "'s old bones") + meta:set_string("owner", "") + else + meta:set_int("time", time) + return true + end + end, + on_blast = function(pos) + end, +}) + +local function may_replace(pos, player) + local node_name = minetest.get_node(pos).name + local node_definition = minetest.registered_nodes[node_name] + + -- if the node is unknown, we return false + if not node_definition then + return false + end + + -- allow replacing air and liquids + if node_name == "air" or node_definition.liquidtype ~= "none" then + return true + end + + -- don't replace filled chests and other nodes that don't allow it + local can_dig_func = node_definition.can_dig + if can_dig_func and not can_dig_func(pos, player) then + return false + end + + -- default to each nodes buildable_to; if a placed block would replace it, why shouldn't bones? + -- flowers being squished by bones are more realistical than a squished stone, too + -- exception are of course any protected buildable_to + return node_definition.buildable_to and not minetest.is_protected(pos, player:get_player_name()) +end + +local drop = function(pos, itemstack) + local obj = minetest.add_item(pos, itemstack:take_item(itemstack:get_count())) + if obj then + obj:set_velocity({ + x = math.random(-10, 10) / 9, + y = 5, + z = math.random(-10, 10) / 9, + }) + end +end + +local player_inventory_lists = { "main", "craft" } +bones.player_inventory_lists = player_inventory_lists + +local function is_all_empty(player_inv) + for _, list_name in ipairs(player_inventory_lists) do + if not player_inv:is_empty(list_name) then + return false + end + end + return true +end + +minetest.register_on_dieplayer(function(player) + + local bones_mode = minetest.settings:get("bones_mode") or "bones" + if bones_mode ~= "bones" and bones_mode ~= "drop" and bones_mode ~= "keep" then + bones_mode = "bones" + end + + local bones_position_message = minetest.settings:get_bool("bones_position_message") == true + local player_name = player:get_player_name() + local pos = vector.round(player:get_pos()) + local pos_string = minetest.pos_to_string(pos) + + -- return if keep inventory set or in creative mode + if bones_mode == "keep" or (creative and creative.is_enabled_for + and creative.is_enabled_for(player:get_player_name())) then + minetest.log("action", player_name .. " dies at " .. pos_string .. + ". No bones placed") + if bones_position_message then + minetest.chat_send_player(player_name, player_name .. " died at " .. pos_string .. ".") + end + return + end + + local player_inv = player:get_inventory() + if is_all_empty(player_inv) then + minetest.log("action", player_name .. " dies at " .. pos_string .. + ". No bones placed") + if bones_position_message then + minetest.chat_send_player(player_name, player_name .. " died at " .. pos_string .. ".") + end + return + end + + -- check if it's possible to place bones, if not find space near player + if bones_mode == "bones" and not may_replace(pos, player) then + local air = minetest.find_node_near(pos, 1, {"air"}) + if air and not minetest.is_protected(air, player_name) then + pos = air + else + bones_mode = "drop" + end + end + + if bones_mode == "drop" then + for _, list_name in ipairs(player_inventory_lists) do + for i = 1, player_inv:get_size(list_name) do + drop(pos, player_inv:get_stack(list_name, i)) + end + player_inv:set_list(list_name, {}) + end + drop(pos, ItemStack("bones:bones")) + minetest.log("action", player_name .. " dies at " .. pos_string .. + ". Inventory dropped") + if bones_position_message then + minetest.chat_send_player(player_name, player_name .. " died at " .. pos_string .. + ", and dropped their inventory.") + end + return + end + + local param2 = minetest.dir_to_facedir(player:get_look_dir()) + minetest.set_node(pos, {name = "bones:bones", param2 = param2}) + + minetest.log("action", player_name .. " dies at " .. pos_string .. + ". Bones placed") + if bones_position_message then + minetest.chat_send_player(player_name, player_name .. " died at " .. pos_string .. + ", and bones were placed.") + end + + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("main", 8 * 4) + + for _, list_name in ipairs(player_inventory_lists) do + for i = 1, player_inv:get_size(list_name) do + local stack = player_inv:get_stack(list_name, i) + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + else -- no space left + drop(pos, stack) + end + end + player_inv:set_list(list_name, {}) + end + + meta:set_string("formspec", bones_formspec) + meta:set_string("owner", player_name) + + if share_bones_time ~= 0 then + meta:set_string("infotext", player_name .. "'s fresh bones") + + if share_bones_time_early == 0 or not minetest.is_protected(pos, player_name) then + meta:set_int("time", 0) + else + meta:set_int("time", (share_bones_time - share_bones_time_early)) + end + + minetest.get_node_timer(pos):start(10) + else + meta:set_string("infotext", player_name.."'s bones") + end +end) \ No newline at end of file diff --git a/mods/PLAYER/bones/license.txt b/mods/bones/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/bones/license.txt rename to mods/bones/license.txt diff --git a/mods/PLAYER/bones/textures/bones_bottom.png b/mods/bones/textures/bones_bottom.png old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/bones/textures/bones_bottom.png rename to mods/bones/textures/bones_bottom.png diff --git a/mods/PLAYER/bones/textures/bones_front.png b/mods/bones/textures/bones_front.png old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/bones/textures/bones_front.png rename to mods/bones/textures/bones_front.png diff --git a/mods/PLAYER/bones/textures/bones_rear.png b/mods/bones/textures/bones_rear.png old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/bones/textures/bones_rear.png rename to mods/bones/textures/bones_rear.png diff --git a/mods/PLAYER/bones/textures/bones_side.png b/mods/bones/textures/bones_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/bones/textures/bones_side.png rename to mods/bones/textures/bones_side.png diff --git a/mods/PLAYER/bones/textures/bones_top.png b/mods/bones/textures/bones_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/bones/textures/bones_top.png rename to mods/bones/textures/bones_top.png diff --git a/mods/ITEMS/bucket/README.txt b/mods/bucket/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/bucket/README.txt rename to mods/bucket/README.txt diff --git a/mods/bucket/depends.txt b/mods/bucket/depends.txt new file mode 100755 index 0000000..3a7daa1 --- /dev/null +++ b/mods/bucket/depends.txt @@ -0,0 +1,2 @@ +default + diff --git a/mods/bucket/init.lua b/mods/bucket/init.lua new file mode 100755 index 0000000..1d37cb4 --- /dev/null +++ b/mods/bucket/init.lua @@ -0,0 +1,222 @@ +-- Minetest 0.4 mod: bucket +-- See README.txt for licensing and other information. + +minetest.register_alias("bucket", "bucket:bucket_empty") +minetest.register_alias("bucket_water", "bucket:bucket_water") +minetest.register_alias("bucket_lava", "bucket:bucket_lava") + +minetest.register_craft({ + output = 'bucket:bucket_empty 1', + recipe = { + {'default:steel_ingot', '', 'default:steel_ingot'}, + {'', 'default:steel_ingot', ''}, + } +}) + +bucket = {} +bucket.liquids = {} + +local function check_protection(pos, name, text) + if minetest.is_protected(pos, name) then + minetest.log("action", (name ~= "" and name or "A mod") + .. " tried to " .. text + .. " at protected position " + .. minetest.pos_to_string(pos) + .. " with a bucket") + minetest.record_protection_violation(pos, name) + return true + end + return false +end + +-- Register a new liquid +-- source = name of the source node +-- flowing = name of the flowing node +-- itemname = name of the new bucket item (or nil if liquid is not takeable) +-- inventory_image = texture of the new bucket item (ignored if itemname == nil) +-- name = text description of the bucket item +-- groups = (optional) groups of the bucket item, for example {water_bucket = 1} +-- force_renew = (optional) bool. Force the liquid source to renew if it has a +-- source neighbour, even if defined as 'liquid_renewable = false'. +-- Needed to avoid creating holes in sloping rivers. +-- This function can be called from any mod (that depends on bucket). +function bucket.register_liquid(source, flowing, itemname, inventory_image, name, + groups, force_renew) + bucket.liquids[source] = { + source = source, + flowing = flowing, + itemname = itemname, + force_renew = force_renew, + } + bucket.liquids[flowing] = bucket.liquids[source] + + if itemname ~= nil then + minetest.register_craftitem(itemname, { + description = name, + inventory_image = inventory_image, + stack_max = 1, + liquids_pointable = true, + groups = groups, + + on_place = function(itemstack, user, pointed_thing) + -- Must be pointing to node + if pointed_thing.type ~= "node" then + return + end + + local node = minetest.get_node_or_nil(pointed_thing.under) + local ndef = node and minetest.registered_nodes[node.name] + + -- Call on_rightclick if the pointed node defines it + if ndef and ndef.on_rightclick and + not (user and user:is_player() and + user:get_player_control().sneak) then + return ndef.on_rightclick( + pointed_thing.under, + node, user, + itemstack) + end + + local lpos + + -- Check if pointing to a buildable node + if ndef and ndef.buildable_to then + -- buildable; replace the node + lpos = pointed_thing.under + else + -- not buildable to; place the liquid above + -- check if the node above can be replaced + + lpos = pointed_thing.above + node = minetest.get_node_or_nil(lpos) + local above_ndef = node and minetest.registered_nodes[node.name] + + if not above_ndef or not above_ndef.buildable_to then + -- do not remove the bucket with the liquid + return itemstack + end + end + + if check_protection(lpos, user + and user:get_player_name() + or "", "place "..source) then + return + end + + minetest.set_node(lpos, {name = source}) + return ItemStack("bucket:bucket_empty") + end + }) + end +end + +minetest.register_craftitem("bucket:bucket_empty", { + description = "Empty Bucket", + inventory_image = "bucket.png", + stack_max = 99, + liquids_pointable = true, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type == "object" then + pointed_thing.ref:punch(user, 1.0, { full_punch_interval=1.0 }, nil) + return user:get_wielded_item() + elseif pointed_thing.type ~= "node" then + -- do nothing if it's neither object nor node + return + end + -- Check if pointing to a liquid source + local node = minetest.get_node(pointed_thing.under) + local liquiddef = bucket.liquids[node.name] + local item_count = user:get_wielded_item():get_count() + + if liquiddef ~= nil + and liquiddef.itemname ~= nil + and node.name == liquiddef.source then + if check_protection(pointed_thing.under, + user:get_player_name(), + "take ".. node.name) then + return + end + + -- default set to return filled bucket + local giving_back = liquiddef.itemname + + -- check if holding more than 1 empty bucket + if item_count > 1 then + + -- if space in inventory add filled bucked, otherwise drop as item + local inv = user:get_inventory() + if inv:room_for_item("main", {name=liquiddef.itemname}) then + inv:add_item("main", liquiddef.itemname) + else + local pos = user:get_pos() + pos.y = math.floor(pos.y + 0.5) + minetest.add_item(pos, liquiddef.itemname) + end + + -- set to return empty buckets minus 1 + giving_back = "bucket:bucket_empty "..tostring(item_count-1) + + end + + -- force_renew requires a source neighbour + local source_neighbor = false + if liquiddef.force_renew then + source_neighbor = + minetest.find_node_near(pointed_thing.under, 1, liquiddef.source) + end + if not (source_neighbor and liquiddef.force_renew) then + minetest.add_node(pointed_thing.under, {name = "air"}) + end + + return ItemStack(giving_back) + else + -- non-liquid nodes will have their on_punch triggered + local node_def = minetest.registered_nodes[node.name] + if node_def then + node_def.on_punch(pointed_thing.under, node, user, pointed_thing) + end + return user:get_wielded_item() + end + end, +}) + +bucket.register_liquid( + "default:water_source", + "default:water_flowing", + "bucket:bucket_water", + "bucket_water.png", + "Water Bucket", + {water_bucket = 1} +) + +-- River water source is 'liquid_renewable = false' to avoid horizontal spread +-- of water sources in sloping rivers that can cause water to overflow +-- riverbanks and cause floods. +-- River water source is instead made renewable by the 'force renew' option +-- used here. + +bucket.register_liquid( + "default:river_water_source", + "default:river_water_flowing", + "bucket:bucket_river_water", + "bucket_river_water.png", + "River Water Bucket", + {water_bucket = 1}, + true +) + +bucket.register_liquid( + "default:lava_source", + "default:lava_flowing", + "bucket:bucket_lava", + "bucket_lava.png", + "Lava Bucket" +) + +minetest.register_craft({ + type = "fuel", + recipe = "bucket:bucket_lava", + burntime = 60, + replacements = {{"bucket:bucket_lava", "bucket:bucket_empty"}}, +}) + diff --git a/mods/ITEMS/bucket/license.txt b/mods/bucket/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/bucket/license.txt rename to mods/bucket/license.txt diff --git a/mods/ITEMS/bucket/textures/bucket.png b/mods/bucket/textures/bucket.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/bucket/textures/bucket.png rename to mods/bucket/textures/bucket.png diff --git a/mods/ITEMS/bucket/textures/bucket_lava.png b/mods/bucket/textures/bucket_lava.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/bucket/textures/bucket_lava.png rename to mods/bucket/textures/bucket_lava.png diff --git a/mods/ITEMS/bucket/textures/bucket_river_water.png b/mods/bucket/textures/bucket_river_water.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/bucket/textures/bucket_river_water.png rename to mods/bucket/textures/bucket_river_water.png diff --git a/mods/ITEMS/bucket/textures/bucket_water.png b/mods/bucket/textures/bucket_water.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/bucket/textures/bucket_water.png rename to mods/bucket/textures/bucket_water.png diff --git a/mods/butterflies/README.txt b/mods/butterflies/README.txt new file mode 100644 index 0000000..a7f52a0 --- /dev/null +++ b/mods/butterflies/README.txt @@ -0,0 +1,14 @@ +Minetest Game mod: Butterflies +============================== +Adds butterflies to the world on mapgen, which can be caught in a net if the +fireflies mod is also enabled. + +Authors of source code +---------------------- +Shara RedCat (MIT) + +Authors of media (textures) +--------------------------- +Shara RedCat (CC BY-SA 3.0): + butterflies_butterfly_*.png + butterflies_butterfly_*_animated.png \ No newline at end of file diff --git a/mods/butterflies/depends.txt b/mods/butterflies/depends.txt new file mode 100644 index 0000000..df07aca --- /dev/null +++ b/mods/butterflies/depends.txt @@ -0,0 +1,2 @@ +default +flowers \ No newline at end of file diff --git a/mods/butterflies/init.lua b/mods/butterflies/init.lua new file mode 100644 index 0000000..c07b486 --- /dev/null +++ b/mods/butterflies/init.lua @@ -0,0 +1,133 @@ +-- register butterflies +local butter_list = { + {"white", "White"}, + {"red", "Red"}, + {"violet", "Violet"} +} + +for i in ipairs (butter_list) do + local name = butter_list[i][1] + local desc = butter_list[i][2] + + minetest.register_node("butterflies:butterfly_"..name, { + description = desc.." Butterfly", + drawtype = "plantlike", + tiles = {{ + name = "butterflies_butterfly_"..name.."_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3 + }, + }}, + inventory_image = "butterflies_butterfly_"..name..".png", + wield_image = "butterflies_butterfly_"..name..".png", + waving = 1, + paramtype = "light", + sunlight_propagates = true, + buildable_to = true, + walkable = false, + groups = {catchable = 1}, + selection_box = { + type = "fixed", + fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + }, + floodable = true, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + local pos = pointed_thing.above + + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pointed_thing.under, player_name) and + minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name = "butterflies:butterfly_"..name}) + minetest.get_node_timer(pos):start(1) + itemstack:take_item() + end + return itemstack + end, + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) < 11 then + minetest.set_node(pos, {name = "butterflies:hidden_butterfly_"..name}) + end + minetest.get_node_timer(pos):start(30) + end + }) + + minetest.register_node("butterflies:hidden_butterfly_"..name, { + description = "Hidden "..desc.." Butterfly", + drawtype = "airlike", + inventory_image = "insects_butterfly_"..name..".png", + wield_image = "insects_butterfly_"..name..".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + pointable = false, + diggable = false, + drop = "", + groups = {not_in_creative_inventory = 1}, + floodable = true, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + local pos = pointed_thing.above + + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pointed_thing.under, player_name) and + minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name = "butterflies:hidden_butterfly_"..name}) + minetest.get_node_timer(pos):start(1) + itemstack:take_item() + end + return itemstack + end, + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) >= 11 then + minetest.set_node(pos, {name = "butterflies:butterfly_"..name}) + end + minetest.get_node_timer(pos):start(30) + end + }) +end + +-- register decoration +minetest.register_decoration({ + name = "butterflies:butterfly", + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + place_offset_y = 2, + sidelen = 80, + fill_ratio = 0.005, + biomes = {"eastern_coasts", "far_north_queensland"}, + y_max = 31000, + y_min = 1, + decoration = { + "butterflies:butterfly_white", + "butterflies:butterfly_red", + "butterflies:butterfly_violet" + }, + spawn_by = "group:flower", + num_spawn_by = 1 +}) + +-- get decoration ID +local butterflies = minetest.get_decoration_id("butterflies:butterfly") +minetest.set_gen_notify({decoration = true}, {butterflies}) + +-- start nodetimers +minetest.register_on_generated(function(minp, maxp, blockseed) + local gennotify = minetest.get_mapgen_object("gennotify") + local poslist = {} + + for _, pos in ipairs(gennotify["decoration#"..butterflies] or {}) do + local deco_pos = {x = pos.x, y = pos.y + 3, z = pos.z} + table.insert(poslist, deco_pos) + end + + if #poslist ~= 0 then + for i = 1, #poslist do + local pos = poslist[i] + minetest.get_node_timer(pos):start(1) + end + end +end) \ No newline at end of file diff --git a/mods/butterflies/license.txt b/mods/butterflies/license.txt new file mode 100644 index 0000000..eebdad6 --- /dev/null +++ b/mods/butterflies/license.txt @@ -0,0 +1,58 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (c) 2018 Shara RedCat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2018 Shara RedCat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ \ No newline at end of file diff --git a/mods/butterflies/textures/butterflies_butterfly_red.png b/mods/butterflies/textures/butterflies_butterfly_red.png new file mode 100644 index 0000000..8edfc36 Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_red.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_red_animated.png b/mods/butterflies/textures/butterflies_butterfly_red_animated.png new file mode 100644 index 0000000..4a2097b Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_red_animated.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_violet.png b/mods/butterflies/textures/butterflies_butterfly_violet.png new file mode 100644 index 0000000..8b8c29d Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_violet.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_violet_animated.png b/mods/butterflies/textures/butterflies_butterfly_violet_animated.png new file mode 100644 index 0000000..3f9d72e Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_violet_animated.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_white.png b/mods/butterflies/textures/butterflies_butterfly_white.png new file mode 100644 index 0000000..db4eaec Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_white.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_white_animated.png b/mods/butterflies/textures/butterflies_butterfly_white_animated.png new file mode 100644 index 0000000..e7cada3 Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_white_animated.png differ diff --git a/mods/ENTITIES/carts/README.txt b/mods/carts/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/README.txt rename to mods/carts/README.txt diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua new file mode 100755 index 0000000..c1f7677 --- /dev/null +++ b/mods/carts/cart_entity.lua @@ -0,0 +1,426 @@ +local cart_entity = { + physical = false, -- otherwise going uphill breaks + collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + visual = "mesh", + mesh = "carts_cart.b3d", + visual_size = {x=1, y=1}, + textures = {"carts_cart.png"}, + + driver = nil, + punched = false, -- used to re-send velocity and position + velocity = {x=0, y=0, z=0}, -- only used on punch + old_dir = {x=1, y=0, z=0}, -- random value to start the cart on punch + old_pos = nil, + old_switch = 0, + railtype = nil, + attached_items = {} +} + +function cart_entity:on_rightclick(clicker) + if not clicker or not clicker:is_player() then + return + 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") + end +end + +function cart_entity:on_activate(staticdata, dtime_s) + self.object:set_armor_groups({immortal=1}) + if string.sub(staticdata, 1, string.len("return")) ~= "return" then + return + end + local data = minetest.deserialize(staticdata) + if type(data) ~= "table" then + return + end + self.railtype = data.railtype + if data.old_dir then + self.old_dir = data.old_dir + end +end + +function cart_entity:get_staticdata() + return minetest.serialize({ + railtype = self.railtype, + old_dir = self.old_dir + }) +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 + end +end + +function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) + local pos = self.object:get_pos() + local vel = self.object:get_velocity() + if not self.railtype or vector.equals(vel, {x=0, y=0, z=0}) then + local node = minetest.get_node(pos).name + self.railtype = minetest.get_item_group(node, "connect_to_raillike") + end + -- Punched by non-player + if not puncher or not puncher:is_player() then + local cart_dir = carts:get_rail_direction(pos, self.old_dir, nil, nil, self.railtype) + if vector.equals(cart_dir, {x=0, y=0, z=0}) then + return + end + self.velocity = vector.multiply(cart_dir, 2) + self.punched = true + return + end + -- Player digs cart by sneak-punch + if puncher:get_player_control().sneak then + if self.sound_handle then + minetest.sound_stop(self.sound_handle) + end + -- Detach driver and items + if self.driver then + if self.old_pos then + self.object:set_pos(self.old_pos) + end + local player = minetest.get_player_by_name(self.driver) + carts:manage_attachment(player, nil) + end + for _, obj_ in ipairs(self.attached_items) do + if obj_ then + obj_:set_detach() + end + end + -- Pick up cart + local inv = puncher:get_inventory() + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(puncher:get_player_name())) + or not inv:contains_item("main", "carts:cart") then + local leftover = inv:add_item("main", "carts:cart") + -- If no room in inventory add a replacement cart to the world + if not leftover:is_empty() then + minetest.add_item(self.object:get_pos(), leftover) + end + end + self.object:remove() + return + end + -- Player punches cart to alter velocity + if puncher:get_player_name() == self.driver then + if math.abs(vel.x + vel.z) > carts.punch_speed_max then + return + end + end + + local punch_dir = carts:velocity_to_dir(puncher:get_look_dir()) + punch_dir.y = 0 + local cart_dir = carts:get_rail_direction(pos, punch_dir, nil, nil, self.railtype) + if vector.equals(cart_dir, {x=0, y=0, z=0}) then + return + end + + local punch_interval = 1 + if tool_capabilities and tool_capabilities.full_punch_interval then + punch_interval = tool_capabilities.full_punch_interval + end + time_from_last_punch = math.min(time_from_last_punch or punch_interval, punch_interval) + local f = 2 * (time_from_last_punch / punch_interval) + + self.velocity = vector.multiply(cart_dir, f) + self.old_dir = cart_dir + self.punched = true +end + +local function rail_on_step_event(handler, obj, dtime) + if handler then + handler(obj, dtime) + end +end + +-- sound refresh interval = 1.0sec +local function rail_sound(self, dtime) + if not self.sound_ttl then + self.sound_ttl = 1.0 + return + elseif self.sound_ttl > 0 then + self.sound_ttl = self.sound_ttl - dtime + return + end + self.sound_ttl = 1.0 + if self.sound_handle then + local handle = self.sound_handle + self.sound_handle = nil + minetest.after(0.2, minetest.sound_stop, handle) + end + local vel = self.object:get_velocity() + local speed = vector.length(vel) + if speed > 0 then + self.sound_handle = minetest.sound_play( + "carts_cart_moving", { + object = self.object, + gain = (speed / carts.speed_max) / 2, + loop = true, + }) + end +end + +local function get_railparams(pos) + local node = minetest.get_node(pos) + return carts.railparams[node.name] or {} +end + +local v3_len = vector.length +local function rail_on_step(self, dtime) + local vel = self.object:get_velocity() + if self.punched then + vel = vector.add(vel, self.velocity) + self.object:set_velocity(vel) + self.old_dir.y = 0 + elseif vector.equals(vel, {x=0, y=0, z=0}) then + return + end + + local pos = self.object:get_pos() + local cart_dir = carts:velocity_to_dir(vel) + local same_dir = vector.equals(cart_dir, self.old_dir) + local update = {} + + if self.old_pos and not self.punched and same_dir then + local flo_pos = vector.round(pos) + local flo_old = vector.round(self.old_pos) + if vector.equals(flo_pos, flo_old) then + -- Do not check one node multiple times + return + end + end + + local ctrl, player + + -- Get player controls + if self.driver then + player = minetest.get_player_by_name(self.driver) + if player then + ctrl = player:get_player_control() + end + end + + local stop_wiggle = false + if self.old_pos and same_dir then + -- Detection for "skipping" nodes (perhaps use average dtime?) + -- It's sophisticated enough to take the acceleration in account + local acc = self.object:get_acceleration() + local distance = dtime * (v3_len(vel) + 0.5 * dtime * v3_len(acc)) + + local new_pos, new_dir = carts:pathfinder( + pos, self.old_pos, self.old_dir, distance, ctrl, + self.old_switch, self.railtype + ) + + if new_pos then + -- No rail found: set to the expected position + pos = new_pos + update.pos = true + cart_dir = new_dir + end + elseif self.old_pos and self.old_dir.y ~= 1 and not self.punched then + -- Stop wiggle + stop_wiggle = true + end + + local railparams + + -- dir: New moving direction of the cart + -- switch_keys: Currently pressed L/R key, used to ignore the key on the next rail node + local dir, switch_keys = carts:get_rail_direction( + pos, cart_dir, ctrl, self.old_switch, self.railtype + ) + local dir_changed = not vector.equals(dir, self.old_dir) + + local new_acc = {x=0, y=0, z=0} + if stop_wiggle or vector.equals(dir, {x=0, y=0, z=0}) then + vel = {x = 0, y = 0, z = 0} + local pos_r = vector.round(pos) + if not carts:is_rail(pos_r, self.railtype) + and self.old_pos then + pos = self.old_pos + elseif not stop_wiggle then + pos = pos_r + else + pos.y = math.floor(pos.y + 0.5) + end + update.pos = true + update.vel = true + else + -- Direction change detected + if dir_changed then + vel = vector.multiply(dir, math.abs(vel.x + vel.z)) + update.vel = true + if dir.y ~= self.old_dir.y then + pos = vector.round(pos) + update.pos = true + end + end + -- Center on the rail + if dir.z ~= 0 and math.floor(pos.x + 0.5) ~= pos.x then + pos.x = math.floor(pos.x + 0.5) + update.pos = true + end + if dir.x ~= 0 and math.floor(pos.z + 0.5) ~= pos.z then + pos.z = math.floor(pos.z + 0.5) + update.pos = true + end + + -- Slow down or speed up.. + local acc = dir.y * -4.0 + + -- Get rail for corrected position + railparams = get_railparams(pos) + + -- no need to check for railparams == nil since we always make it exist. + local speed_mod = railparams.acceleration + if speed_mod and speed_mod ~= 0 then + -- Try to make it similar to the original carts mod + acc = acc + speed_mod + else + -- Handbrake or coast + if ctrl and ctrl.down then + acc = acc - 3 + else + acc = acc - 0.4 + end + end + + new_acc = vector.multiply(dir, acc) + end + + -- Limits + local max_vel = carts.speed_max + for _, v in pairs({"x","y","z"}) do + if math.abs(vel[v]) > max_vel then + vel[v] = carts:get_sign(vel[v]) * max_vel + new_acc[v] = 0 + update.vel = true + end + end + + self.object:set_acceleration(new_acc) + self.old_pos = vector.round(pos) + if not vector.equals(dir, {x=0, y=0, z=0}) and not stop_wiggle then + self.old_dir = vector.new(dir) + end + self.old_switch = switch_keys + + if self.punched then + -- Collect dropped items + for _, obj_ in pairs(minetest.get_objects_inside_radius(pos, 1)) do + if not obj_:is_player() and + obj_:get_luaentity() and + not obj_:get_luaentity().physical_state and + obj_:get_luaentity().name == "__builtin:item" then + + obj_:set_attach(self.object, "", {x=0, y=0, z=0}, {x=0, y=0, z=0}) + self.attached_items[#self.attached_items + 1] = obj_ + end + end + self.punched = false + update.vel = true + end + + railparams = railparams or get_railparams(pos) + + if not (update.vel or update.pos) then + rail_on_step_event(railparams.on_step, self, dtime) + return + end + + local yaw = 0 + if self.old_dir.x < 0 then + yaw = 0.5 + elseif self.old_dir.x > 0 then + yaw = 1.5 + elseif self.old_dir.z < 0 then + yaw = 1 + end + self.object:set_yaw(yaw * math.pi) + + local anim = {x=0, y=0} + if dir.y == -1 then + anim = {x=1, y=1} + elseif dir.y == 1 then + anim = {x=2, y=2} + end + self.object:set_animation(anim, 1, 0) + + if update.vel then + self.object:set_velocity(vel) + end + if update.pos then + if dir_changed then + self.object:set_pos(pos) + else + self.object:move_to(pos) + end + end + + -- call event handler + rail_on_step_event(railparams.on_step, self, dtime) +end + +function cart_entity:on_step(dtime) + rail_on_step(self, dtime) + rail_sound(self, dtime) +end + +minetest.register_entity("carts:cart", cart_entity) + +minetest.register_craftitem("carts:cart", { + description = "Cart (Sneak+Click to pick up)", + inventory_image = minetest.inventorycube("carts_cart_top.png", "carts_cart_side.png", "carts_cart_side.png"), + wield_image = "carts_cart_side.png", + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + if not pointed_thing.type == "node" then + return + end + if carts:is_rail(pointed_thing.under) then + minetest.add_entity(pointed_thing.under, "carts:cart") + elseif carts:is_rail(pointed_thing.above) then + minetest.add_entity(pointed_thing.above, "carts:cart") + else + return + end + + minetest.sound_play({name = "default_place_node_metal", gain = 0.5}, + {pos = pointed_thing.above}) + + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(placer:get_player_name())) then + itemstack:take_item() + end + return itemstack + end, +}) + +minetest.register_craft({ + output = "carts:cart", + recipe = { + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + }, +}) \ No newline at end of file diff --git a/mods/ENTITIES/carts/depends.txt b/mods/carts/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/depends.txt rename to mods/carts/depends.txt diff --git a/mods/carts/functions.lua b/mods/carts/functions.lua new file mode 100755 index 0000000..c5c20f5 --- /dev/null +++ b/mods/carts/functions.lua @@ -0,0 +1,248 @@ +function carts:get_sign(z) + if z == 0 then + return 0 + else + return z / math.abs(z) + end +end + +function carts:manage_attachment(player, obj) + if not player then + return + end + local status = obj ~= nil + local player_name = player:get_player_name() + if player_api.player_attached[player_name] == status then + return + end + player_api.player_attached[player_name] = status + + 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}) + else + player:set_detach() + player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) + end +end + +function carts:velocity_to_dir(v) + if math.abs(v.x) > math.abs(v.z) then + return {x=carts:get_sign(v.x), y=carts:get_sign(v.y), z=0} + else + return {x=0, y=carts:get_sign(v.y), z=carts:get_sign(v.z)} + end +end + +function carts:is_rail(pos, railtype) + local node = minetest.get_node(pos).name + if node == "ignore" then + local vm = minetest.get_voxel_manip() + local emin, emax = vm:read_from_map(pos, pos) + local area = VoxelArea:new{ + MinEdge = emin, + MaxEdge = emax, + } + local data = vm:get_data() + local vi = area:indexp(pos) + node = minetest.get_name_from_content_id(data[vi]) + end + if minetest.get_item_group(node, "rail") == 0 then + return false + end + if not railtype then + return true + end + return minetest.get_item_group(node, "connect_to_raillike") == railtype +end + +function carts:check_front_up_down(pos, dir_, check_up, railtype) + local dir = vector.new(dir_) + local cur + + -- Front + dir.y = 0 + cur = vector.add(pos, dir) + if carts:is_rail(cur, railtype) then + return dir + end + -- Up + if check_up then + dir.y = 1 + cur = vector.add(pos, dir) + if carts:is_rail(cur, railtype) then + return dir + end + end + -- Down + dir.y = -1 + cur = vector.add(pos, dir) + if carts:is_rail(cur, railtype) then + return dir + end + return nil +end + +function carts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) + local pos = vector.round(pos_) + local cur + local left_check, right_check = true, true + + -- Check left and right + local left = {x=0, y=0, z=0} + local right = {x=0, y=0, z=0} + if dir.z ~= 0 and dir.x == 0 then + left.x = -dir.z + right.x = dir.z + elseif dir.x ~= 0 and dir.z == 0 then + left.z = dir.x + right.z = -dir.x + end + + local straight_priority = ctrl and dir.y ~= 0 + + -- Normal, to disallow rail switching up- & downhill + if straight_priority then + cur = self:check_front_up_down(pos, dir, true, railtype) + if cur then + return cur + end + end + + if ctrl then + if old_switch == 1 then + left_check = false + elseif old_switch == 2 then + right_check = false + end + if ctrl.left and left_check then + cur = self:check_front_up_down(pos, left, false, railtype) + if cur then + return cur, 1 + end + left_check = false + end + if ctrl.right and right_check then + cur = self:check_front_up_down(pos, right, false, railtype) + if cur then + return cur, 2 + end + right_check = true + end + end + + -- Normal + if not straight_priority then + cur = self:check_front_up_down(pos, dir, true, railtype) + if cur then + return cur + end + end + + -- Left, if not already checked + if left_check then + cur = carts:check_front_up_down(pos, left, false, railtype) + if cur then + return cur + end + end + + -- Right, if not already checked + if right_check then + cur = carts:check_front_up_down(pos, right, false, railtype) + if cur then + return cur + end + end + + -- Backwards + if not old_switch then + cur = carts:check_front_up_down(pos, { + x = -dir.x, + y = dir.y, + z = -dir.z + }, true, railtype) + if cur then + return cur + end + end + + return {x=0, y=0, z=0} +end + +function carts:pathfinder(pos_, old_pos, old_dir, distance, ctrl, + pf_switch, railtype) + + local pos = vector.round(pos_) + if vector.equals(old_pos, pos) then + return + end + + local pf_pos = vector.round(old_pos) + local pf_dir = vector.new(old_dir) + distance = math.min(carts.path_distance_max, + math.floor(distance + 1)) + + for i = 1, distance do + pf_dir, pf_switch = self:get_rail_direction( + pf_pos, pf_dir, ctrl, pf_switch or 0, railtype) + + if vector.equals(pf_dir, {x=0, y=0, z=0}) then + -- No way forwards + return pf_pos, pf_dir + end + + pf_pos = vector.add(pf_pos, pf_dir) + + if vector.equals(pf_pos, pos) then + -- Success! Cart moved on correctly + return + end + end + -- Not found. Put cart to predicted position + return pf_pos, pf_dir +end + +function carts:register_rail(name, def_overwrite, railparams) + local def = { + drawtype = "raillike", + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + sounds = default.node_sound_metal_defaults() + } + for k, v in pairs(def_overwrite) do + def[k] = v + end + if not def.inventory_image then + def.wield_image = def.tiles[1] + def.inventory_image = def.tiles[1] + end + + if railparams then + carts.railparams[name] = table.copy(railparams) + end + + minetest.register_node(name, def) +end + +function carts:get_rail_groups(additional_groups) + -- Get the default rail groups and add more when a table is given + local groups = { + dig_immediate = 2, + attached_node = 1, + rail = 1, + connect_to_raillike = minetest.raillike_group("rail") + } + if type(additional_groups) == "table" then + for k, v in pairs(additional_groups) do + groups[k] = v + end + end + return groups +end \ No newline at end of file diff --git a/mods/carts/init.lua b/mods/carts/init.lua new file mode 100755 index 0000000..542c594 --- /dev/null +++ b/mods/carts/init.lua @@ -0,0 +1,15 @@ +carts = {} +carts.modpath = minetest.get_modpath("carts") +carts.railparams = {} + +-- Maximal speed of the cart in m/s (min = -1) +carts.speed_max = 7 +-- Set to -1 to disable punching the cart from inside (min = -1) +carts.punch_speed_max = 5 +-- Maximal distance for the path correction (for dtime peaks) +carts.path_distance_max = 3 + + +dofile(carts.modpath.."/functions.lua") +dofile(carts.modpath.."/rails.lua") +dofile(carts.modpath.."/cart_entity.lua") \ No newline at end of file diff --git a/mods/ENTITIES/carts/license.txt b/mods/carts/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/license.txt rename to mods/carts/license.txt diff --git a/mods/ENTITIES/carts/models/carts_cart.b3d b/mods/carts/models/carts_cart.b3d old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/models/carts_cart.b3d rename to mods/carts/models/carts_cart.b3d diff --git a/mods/ENTITIES/carts/models/carts_cart.blend b/mods/carts/models/carts_cart.blend old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/models/carts_cart.blend rename to mods/carts/models/carts_cart.blend diff --git a/mods/carts/rails.lua b/mods/carts/rails.lua new file mode 100755 index 0000000..a5fff8a --- /dev/null +++ b/mods/carts/rails.lua @@ -0,0 +1,59 @@ +carts:register_rail("carts:rail", { + description = "Rail", + tiles = { + "carts_rail_straight.png", "carts_rail_curved.png", + "carts_rail_t_junction.png", "carts_rail_crossing.png" + }, + inventory_image = "carts_rail_straight.png", + wield_image = "carts_rail_straight.png", + groups = carts:get_rail_groups(), +}, {}) + +minetest.register_craft({ + output = "carts:rail 18", + recipe = { + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + } +}) + +minetest.register_alias("default:rail", "carts:rail") + + +carts:register_rail("carts:powerrail", { + description = "Powered Rail", + tiles = { + "carts_rail_straight_pwr.png", "carts_rail_curved_pwr.png", + "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png" + }, + groups = carts:get_rail_groups(), +}, {acceleration = 5}) + +minetest.register_craft({ + output = "carts:powerrail 18", + recipe = { + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"}, + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + } +}) + + +carts:register_rail("carts:brakerail", { + description = "Brake Rail", + tiles = { + "carts_rail_straight_brk.png", "carts_rail_curved_brk.png", + "carts_rail_t_junction_brk.png", "carts_rail_crossing_brk.png" + }, + groups = carts:get_rail_groups(), +}, {acceleration = -3}) + +minetest.register_craft({ + output = "carts:brakerail 18", + recipe = { + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + {"default:steel_ingot", "default:coal_lump", "default:steel_ingot"}, + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + } +}) diff --git a/mods/ENTITIES/carts/sounds/carts_cart_moving.1.ogg b/mods/carts/sounds/carts_cart_moving.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/sounds/carts_cart_moving.1.ogg rename to mods/carts/sounds/carts_cart_moving.1.ogg diff --git a/mods/ENTITIES/carts/sounds/carts_cart_moving.2.ogg b/mods/carts/sounds/carts_cart_moving.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/sounds/carts_cart_moving.2.ogg rename to mods/carts/sounds/carts_cart_moving.2.ogg diff --git a/mods/ENTITIES/carts/sounds/carts_cart_moving.3.ogg b/mods/carts/sounds/carts_cart_moving.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/sounds/carts_cart_moving.3.ogg rename to mods/carts/sounds/carts_cart_moving.3.ogg diff --git a/mods/ENTITIES/carts/textures/carts_cart.png b/mods/carts/textures/carts_cart.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_cart.png rename to mods/carts/textures/carts_cart.png diff --git a/mods/ENTITIES/carts/textures/carts_cart_front.png b/mods/carts/textures/carts_cart_front.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_cart_front.png rename to mods/carts/textures/carts_cart_front.png diff --git a/mods/ENTITIES/carts/textures/carts_cart_side.png b/mods/carts/textures/carts_cart_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_cart_side.png rename to mods/carts/textures/carts_cart_side.png diff --git a/mods/ENTITIES/carts/textures/carts_cart_top.png b/mods/carts/textures/carts_cart_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_cart_top.png rename to mods/carts/textures/carts_cart_top.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_crossing.png b/mods/carts/textures/carts_rail_crossing.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_crossing.png rename to mods/carts/textures/carts_rail_crossing.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_crossing_brk.png b/mods/carts/textures/carts_rail_crossing_brk.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_crossing_brk.png rename to mods/carts/textures/carts_rail_crossing_brk.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_crossing_pwr.png b/mods/carts/textures/carts_rail_crossing_pwr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_crossing_pwr.png rename to mods/carts/textures/carts_rail_crossing_pwr.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_curved.png b/mods/carts/textures/carts_rail_curved.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_curved.png rename to mods/carts/textures/carts_rail_curved.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_curved_brk.png b/mods/carts/textures/carts_rail_curved_brk.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_curved_brk.png rename to mods/carts/textures/carts_rail_curved_brk.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_curved_pwr.png b/mods/carts/textures/carts_rail_curved_pwr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_curved_pwr.png rename to mods/carts/textures/carts_rail_curved_pwr.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_straight.png b/mods/carts/textures/carts_rail_straight.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_straight.png rename to mods/carts/textures/carts_rail_straight.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_straight_brk.png b/mods/carts/textures/carts_rail_straight_brk.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_straight_brk.png rename to mods/carts/textures/carts_rail_straight_brk.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_straight_pwr.png b/mods/carts/textures/carts_rail_straight_pwr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_straight_pwr.png rename to mods/carts/textures/carts_rail_straight_pwr.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_t_junction.png b/mods/carts/textures/carts_rail_t_junction.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_t_junction.png rename to mods/carts/textures/carts_rail_t_junction.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_t_junction_brk.png b/mods/carts/textures/carts_rail_t_junction_brk.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_t_junction_brk.png rename to mods/carts/textures/carts_rail_t_junction_brk.png diff --git a/mods/ENTITIES/carts/textures/carts_rail_t_junction_pwr.png b/mods/carts/textures/carts_rail_t_junction_pwr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/carts/textures/carts_rail_t_junction_pwr.png rename to mods/carts/textures/carts_rail_t_junction_pwr.png diff --git a/mods/creative/README.txt b/mods/creative/README.txt new file mode 100755 index 0000000..32e8d22 --- /dev/null +++ b/mods/creative/README.txt @@ -0,0 +1,17 @@ +Minetest Game mod: creative +=========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (MIT) +Jean-Patrick G. (kilbith) (MIT) + +Author of media (textures) +-------------------------- +paramat (CC BY-SA 3.0): +* creative_prev_icon.png +* creative_next_icon.png +* creative_search_icon.png +* creative_clear_icon.png +* creative_trash_icon.png derived from a texture by kilbith (CC BY-SA 3.0) diff --git a/mods/creative/depends.txt b/mods/creative/depends.txt new file mode 100755 index 0000000..975e652 --- /dev/null +++ b/mods/creative/depends.txt @@ -0,0 +1,2 @@ +default +sfinv diff --git a/mods/creative/init.lua b/mods/creative/init.lua new file mode 100755 index 0000000..ef190b8 --- /dev/null +++ b/mods/creative/init.lua @@ -0,0 +1,70 @@ +creative = {} + +minetest.register_privilege("creative", { + description = "Allow player to use creative inventory", + give_to_singleplayer = false, + give_to_admin = false +}) + +local creative_mode_cache = minetest.settings:get_bool("creative_mode") + +function creative.is_enabled_for(name) + return creative_mode_cache or + minetest.check_player_privs(name, {creative = true}) +end + +dofile(minetest.get_modpath("creative") .. "/inventory.lua") + +if creative_mode_cache then + -- Dig time is modified according to difference (leveldiff) between tool + -- 'maxlevel' and node 'level'. Digtime is divided by the larger of + -- leveldiff and 1. + -- To speed up digging in creative, hand 'maxlevel' and 'digtime' have been + -- increased such that nodes of differing levels have an insignificant + -- effect on digtime. + local digtime = 42 + local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 256} + + minetest.register_item(":", { + type = "none", + wield_image = "wieldhand.png", + wield_scale = {x = 1, y = 1, z = 2.5}, + range = 10, + tool_capabilities = { + full_punch_interval = 0.5, + max_drop_level = 3, + groupcaps = { + crumbly = caps, + cracky = caps, + snappy = caps, + choppy = caps, + oddly_breakable_by_hand = caps, + }, + damage_groups = {fleshy = 10}, + } + }) +end + +-- Unlimited node placement +minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) + if placer and placer:is_player() then + return creative.is_enabled_for(placer:get_player_name()) + end +end) + +-- Don't pick up if the item is already in the inventory +local old_handle_node_drops = minetest.handle_node_drops +function minetest.handle_node_drops(pos, drops, digger) + if not digger or not digger:is_player() or + not creative.is_enabled_for(digger:get_player_name()) then + return old_handle_node_drops(pos, drops, digger) + end + local inv = digger:get_inventory() + if inv then + for _, item in ipairs(drops) do + if not inv:contains_item("main", item, true) then + inv:add_item("main", item) + end + end + end +end diff --git a/mods/creative/inventory.lua b/mods/creative/inventory.lua new file mode 100755 index 0000000..79a8529 --- /dev/null +++ b/mods/creative/inventory.lua @@ -0,0 +1,193 @@ +local player_inventory = {} +local inventory_cache = {} + +local function init_creative_cache(items) + inventory_cache[items] = {} + local i_cache = inventory_cache[items] + + for name, def in pairs(items) do + if def.groups.not_in_creative_inventory ~= 1 and + def.description and def.description ~= "" then + i_cache[name] = def + end + end + table.sort(i_cache) + return i_cache +end + +function creative.init_creative_inventory(player) + local player_name = player:get_player_name() + player_inventory[player_name] = { + size = 0, + filter = "", + start_i = 0 + } + + minetest.create_detached_inventory("creative_" .. player_name, { + allow_move = function(inv, from_list, from_index, to_list, to_index, count, player2) + local name = player2 and player2:get_player_name() or "" + if not creative.is_enabled_for(name) or + to_list == "main" then + return 0 + end + return count + end, + allow_put = function(inv, listname, index, stack, player2) + return 0 + end, + allow_take = function(inv, listname, index, stack, player2) + local name = player2 and player2:get_player_name() or "" + if not creative.is_enabled_for(name) then + return 0 + end + return -1 + end, + on_move = function(inv, from_list, from_index, to_list, to_index, count, player2) + end, + on_take = function(inv, listname, index, stack, player2) + if stack and stack:get_count() > 0 then + minetest.log("action", player_name .. " takes " .. stack:get_name().. " from creative inventory") + end + end, + }, player_name) + + return player_inventory[player_name] +end + +function creative.update_creative_inventory(player_name, tab_content) + local creative_list = {} + local inv = player_inventory[player_name] or + creative.init_creative_inventory(minetest.get_player_by_name(player_name)) + local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) + + local items = inventory_cache[tab_content] or init_creative_cache(tab_content) + + for name, def in pairs(items) do + if def.name:find(inv.filter, 1, true) or + def.description:lower():find(inv.filter, 1, true) then + creative_list[#creative_list+1] = name + end + end + + table.sort(creative_list) + player_inv:set_size("main", #creative_list) + player_inv:set_list("main", creative_list) + inv.size = #creative_list +end + +-- Create the trash field +local trash = minetest.create_detached_inventory("creative_trash", { + -- Allow the stack to be placed and remove it in on_put() + -- This allows the creative inventory to restore the stack + allow_put = function(inv, listname, index, stack, player) + return stack:get_count() + end, + on_put = function(inv, listname) + inv:set_list(listname, {}) + end, +}) +trash:set_size("main", 1) + +creative.formspec_add = "" + +function creative.register_tab(name, title, items) + sfinv.register_page("creative:" .. name, { + title = title, + is_in_nav = function(self, player, context) + return creative.is_enabled_for(player:get_player_name()) + end, + get = function(self, player, context) + local player_name = player:get_player_name() + creative.update_creative_inventory(player_name, items) + local inv = player_inventory[player_name] + local start_i = inv.start_i or 0 + local pagenum = math.floor(start_i / (3*8) + 1) + local pagemax = math.ceil(inv.size / (3*8)) + return sfinv.make_formspec(player, context, + "label[6.2,3.35;" .. minetest.colorize("#FFFF00", tostring(pagenum)) .. " / " .. tostring(pagemax) .. "]" .. + [[ + image[4.06,3.4;0.8,0.8;creative_trash_icon.png] + listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] + list[current_player;main;0,4.7;8,1;] + list[current_player;main;0,5.85;8,3;8] + list[detached:creative_trash;main;4,3.3;1,1;] + listring[] + image_button[5.4,3.25;0.8,0.8;creative_prev_icon.png;creative_prev;] + image_button[7.2,3.25;0.8,0.8;creative_next_icon.png;creative_next;] + image_button[2.1,3.25;0.8,0.8;creative_search_icon.png;creative_search;] + image_button[2.75,3.25;0.8,0.8;creative_clear_icon.png;creative_clear;] + tooltip[creative_search;Search] + tooltip[creative_clear;Reset] + tooltip[creative_prev;Previous page] + tooltip[creative_next;Next page] + listring[current_player;main] + field_close_on_enter[creative_filter;false] + ]] .. + "field[0.3,3.5;2.2,1;creative_filter;;" .. minetest.formspec_escape(inv.filter) .. "]" .. + "listring[detached:creative_" .. player_name .. ";main]" .. + "list[detached:creative_" .. player_name .. ";main;0,0;8,3;" .. tostring(start_i) .. "]" .. + default.get_hotbar_bg(0,4.7) .. + default.gui_bg .. default.gui_bg_img .. default.gui_slots + .. creative.formspec_add, false) + end, + on_enter = function(self, player, context) + local player_name = player:get_player_name() + local inv = player_inventory[player_name] + if inv then + inv.start_i = 0 + end + end, + on_player_receive_fields = function(self, player, context, fields) + local player_name = player:get_player_name() + local inv = player_inventory[player_name] + assert(inv) + + if fields.creative_clear then + inv.start_i = 0 + inv.filter = "" + creative.update_creative_inventory(player_name, items) + sfinv.set_player_inventory_formspec(player, context) + elseif fields.creative_search or + fields.key_enter_field == "creative_filter" then + inv.start_i = 0 + inv.filter = fields.creative_filter:lower() + creative.update_creative_inventory(player_name, items) + sfinv.set_player_inventory_formspec(player, context) + elseif not fields.quit then + local start_i = inv.start_i or 0 + + if fields.creative_prev then + start_i = start_i - 3*8 + if start_i < 0 then + start_i = inv.size - (inv.size % (3*8)) + if inv.size == start_i then + start_i = math.max(0, inv.size - (3*8)) + end + end + elseif fields.creative_next then + start_i = start_i + 3*8 + if start_i >= inv.size then + start_i = 0 + end + end + + inv.start_i = start_i + sfinv.set_player_inventory_formspec(player, context) + end + end + }) +end + +creative.register_tab("all", "All", minetest.registered_items) +creative.register_tab("nodes", "Nodes", minetest.registered_nodes) +creative.register_tab("tools", "Tools", minetest.registered_tools) +creative.register_tab("craftitems", "Items", minetest.registered_craftitems) + +local old_homepage_name = sfinv.get_homepage_name +function sfinv.get_homepage_name(player) + if creative.is_enabled_for(player:get_player_name()) then + return "creative:all" + else + return old_homepage_name(player) + end +end diff --git a/mods/creative/license.txt b/mods/creative/license.txt new file mode 100755 index 0000000..50ff9c7 --- /dev/null +++ b/mods/creative/license.txt @@ -0,0 +1,61 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2016 Jean-Patrick G. (kilbith) +Copyright (C) 2018 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/creative/textures/creative_clear_icon.png b/mods/creative/textures/creative_clear_icon.png new file mode 100755 index 0000000..9244264 Binary files /dev/null and b/mods/creative/textures/creative_clear_icon.png differ diff --git a/mods/creative/textures/creative_next_icon.png b/mods/creative/textures/creative_next_icon.png new file mode 100755 index 0000000..82cf3d3 Binary files /dev/null and b/mods/creative/textures/creative_next_icon.png differ diff --git a/mods/creative/textures/creative_prev_icon.png b/mods/creative/textures/creative_prev_icon.png new file mode 100755 index 0000000..b26cd15 Binary files /dev/null and b/mods/creative/textures/creative_prev_icon.png differ diff --git a/mods/creative/textures/creative_search_icon.png b/mods/creative/textures/creative_search_icon.png new file mode 100755 index 0000000..aace804 Binary files /dev/null and b/mods/creative/textures/creative_search_icon.png differ diff --git a/mods/creative/textures/creative_trash_icon.png b/mods/creative/textures/creative_trash_icon.png new file mode 100755 index 0000000..7d7a0a6 Binary files /dev/null and b/mods/creative/textures/creative_trash_icon.png differ diff --git a/mods/default/README.txt b/mods/default/README.txt new file mode 100755 index 0000000..ab13565 --- /dev/null +++ b/mods/default/README.txt @@ -0,0 +1,363 @@ +Minetest Game mod: default +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) + +The torch code was derived by sofar from the 'torches' mod by +BlockMen (LGPL 2.1) + +Authors of media (textures, sounds, models and schematics) +---------------------------------------------------------- +Everything not listed in here: +celeron55, Perttu Ahola (CC BY-SA 3.0) + + +Textures +-------- +Cisoun's texture pack (CC BY-SA 3.0): + default_jungletree.png + default_lava.png + default_leaves.png + default_sapling.png + default_bush_sapling.png + default_stone.png + default_tree.png + default_tree_top.png + default_water.png + +RealBadAngel's animated water (CC BY-SA 3.0): + default_water_source_animated.png + default_water_flowing_animated.png + +VanessaE (CC BY-SA 3.0): + default_torch_animated.png + default_torch_on_ceiling_animated.png + default_torch_on_floor_animated.png + default_torch_on_floor.png + default_desert_sand.png + default_desert_stone.png + default_sand.png + default_mese_crystal.png + default_mese_crystal_fragment.png + +Calinou (CC BY-SA 3.0): + default_brick.png + default_papyrus.png + default_mineral_copper.png + default_glass_detail.png + +PilzAdam (CC BY-SA 3.0): + default_jungleleaves.png + default_junglesapling.png + default_obsidian_glass.png + default_obsidian_shard.png + default_mineral_gold.png + +jojoa1997 (CC BY-SA 3.0): + default_obsidian.png + +InfinityProject (CC BY-SA 3.0): + default_mineral_diamond.png + +Splizard (CC BY-SA 3.0): + default_pine_sapling.png + default_pine_needles.png + +Zeg9 (CC BY-SA 3.0): + default_coal_block.png + +paramat (CC BY-SA 3.0): + wieldhand.png -- Copied from character.png by Jordach (CC BY-SA 3.0) + default_pinetree.png + default_pinetree_top.png + default_pinewood.png + default_acacia_leaves.png + default_acacia_leaves_simple.png + default_acacia_sapling.png + default_acacia_bush_sapling.png + default_pine_bush_sapling.png + default_acacia_tree.png + default_acacia_tree_top.png + default_acacia_wood.png + default_acacia_bush_stem.png + default_bush_stem.png + default_pine_bush_stem.png + default_junglewood.png + default_jungletree_top.png + default_sandstone_brick.png + default_obsidian_brick.png + default_stone_brick.png + default_desert_stone_brick.png + default_sandstone_block.png + default_obsidian_block.png + default_stone_block.png + default_desert_stone_block.png + default_river_water.png + default_river_water_source_animated.png + default_river_water_flowing_animated.png + default_dry_grass.png + default_dry_grass_side.png + default_dry_grass_*.png + default_grass.png + default_grass_side.png + default_mese_block.png + default_silver_sand.png + default_mese_post_light_side.png + default_mese_post_light_side_dark.png + default_mese_post_light_top.png + default_silver_sandstone.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_silver_sandstone_brick.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_silver_sandstone_block.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_bookshelf_slot.png -- Derived from a texture by Gambit (CC-BY-SA 3.0) + default_marram_grass_*.png -- Derived from textures by TumeniNodes (CC-BY-SA 3.0) + default_emergent_jungle_sapling.png + default_permafrost.png -- Derived from a texture by Neuromancer (CC BY-SA 3.0) + default_stones.png -- Derived from a texture by sofar (CC0 1.0) + default_moss.png + default_moss_side.png + default_fence_rail_acacia_wood + default_fence_rail_aspen_wood -- Derived from a texture by sofar (CC BY-SA 3.0) + default_fence_rail_junglewood + default_fence_rail_pine_wood + default_fence_rail_wood -- Derived from a texture by BlockMen (CC BY-SA 3.0) + +TumeniNodes (CC BY-SA 3.0): + default_desert_cobble.png -- Derived from a texture by brunob.santos (CC BY-SA 3.0) + default_coniferous_litter.png + default_coniferous_litter_side.png + +BlockMen (CC BY-SA 3.0): + default_aspen_leaves.png -- Derived from Sofar's texture + default_wood.png + default_clay_brick.png + default_iron_ingot.png + default_gold_ingot.png + default_tool_steelsword.png + default_diamond.png + default_tool_*.png + default_lava_source_animated.png + default_lava_flowing_animated.png + default_stick.png + default_chest_front.png + default_chest_lock.png + default_chest_side.png + default_chest_top.png + default_mineral_mese.png + default_meselamp.png + bubble.png + gui_*.png + +sofar (CC BY-SA 3.0): + default_aspen_sapling + default_aspen_tree + default_aspen_tree_top, derived from default_pine_tree_top (by paramat) + default_aspen_wood, derived from default_pine_wood (by paramat) + default_chest_inside + +sofar (CC0 1.0): + default_gravel.png -- Derived from Gambit's PixelBOX texture pack light gravel + +Neuromancer (CC BY-SA 3.0): + default_cobble.png, based on texture by Brane praefect + default_mossycobble.png, based on texture by Brane praefect + default_dirt.png + default_furnace_*.png + +Gambit (CC BY-SA 3.0): + default_bronze_ingot.png + default_copper_ingot.png + default_copper_lump.png + default_iron_lump.png + default_gold_lump.png + default_clay_lump.png + default_coal.png + default_grass_*.png + default_paper.png + default_diamond_block.png + default_ladder_steel.png + default_sign_wall_wood.png + default_flint.png + default_snow.png + default_snow_side.png + default_snowball.png + default_key.png + default_key_skeleton.png + default_book.png + +asl97 (CC BY-SA 3.0): + default_ice.png + +KevDoy (CC BY-SA 3.0): + heart.png + +Pithydon (CC BY-SA 3.0) + default_coral_brown.png + default_coral_orange.png + default_coral_skeleton.png + +Ferk (CC0 1.0): + default_item_smoke.png + +npx (CC BY-SA 3.0): + default_rainforest_litter.png + default_rainforest_litter_side.png + +kaeza (CC-BY-SA 3.0): + default_desert_sandstone.png + default_desert_sandstone_brick.png + default_desert_sandstone_block.png + +kilbith (CC BY-SA 3.0): + default_steel_block.png + default_copper_block.png + default_bronze_block.png + default_gold_block.png + default_tin_block.png + default_mineral_tin.png + default_tin_ingot.png + default_tin_lump.png + +tobyplowy (CC BY-SA 3.0): + default_kelp.png + +CloudyProton (CC BY-SA 3.0): + default_book_written.png, based on default_book.png by Gambit + +Mossmanikin (CC BY-SA 3.0): + default_fern_*.png + + +Sounds +------ +Glass breaking sounds (CC BY 3.0): + 1: http://www.freesound.org/people/cmusounddesign/sounds/71947/ + 2: http://www.freesound.org/people/Tomlija/sounds/97669/ + 3: http://www.freesound.org/people/lsprice/sounds/88808/ + +sonictechtonic (CC BY 3.0): +https://www.freesound.org/people/sonictechtonic/sounds/241872/ + player_damage.ogg + +Mito551 (sounds) (CC BY-SA 3.0): + default_dig_choppy.ogg + default_dig_cracky.ogg + default_dig_crumbly.1.ogg + default_dig_crumbly.2.ogg + default_dig_dig_immediate.ogg + default_dig_oddly_breakable_by_hand.ogg + default_dug_node.1.ogg + default_dug_node.2.ogg + default_grass_footstep.1.ogg + default_grass_footstep.2.ogg + default_grass_footstep.3.ogg + default_gravel_footstep.1.ogg + default_gravel_footstep.2.ogg + default_gravel_footstep.3.ogg + default_gravel_footstep.4.ogg + default_grass_footstep.1.ogg + default_place_node.1.ogg + default_place_node.2.ogg + default_place_node.3.ogg + default_place_node_hard.1.ogg + default_place_node_hard.2.ogg + default_hard_footstep.1.ogg + default_hard_footstep.2.ogg + default_hard_footstep.3.ogg + default_sand_footstep.1.ogg + default_sand_footstep.2.ogg + default_wood_footstep.1.ogg + default_wood_footstep.2.ogg + default_dirt_footstep.1.ogg + default_dirt_footstep.2.ogg + default_glass_footstep.ogg + +Metal sounds: + default_dig_metal.ogg - yadronoff - CC-BY-3.0 + - https://www.freesound.org/people/yadronoff/sounds/320397/ + default_dug_metal.*.ogg - Iwan Gabovitch - qubodup - CC0 + - http://opengameart.org/users/qubodup + default_metal_footstep.*.ogg - Ottomaani138 - CC0 + - https://www.freesound.org/people/Ottomaani138/sounds/232692/ + default_place_node_metal.*.ogg - Ogrebane - CC0 + - http://opengameart.org/content/wood-and-metal-sound-effects-volume-2 + +Tool breaking sounds added by sofar: CC-BY-3.0 + default_tool_breaks.* - http://www.freesound.org/people/HerbertBoland/sounds/33206/ + +AGFX (CC BY 3.0): +https://www.freesound.org/people/AGFX/packs/1253/ + default_water_footstep.1.ogg + default_water_footstep.2.ogg + default_water_footstep.3.ogg +(default_water_footstep.4.ogg is silent) + +blukotek (CC0 1.0): +https://www.freesound.org/people/blukotek/sounds/251660/ + default_dig_snappy.ogg + +Chests sounds added by sofar, derived of several files mixed together: + default_chest_open.ogg + default_chest_close.ogg + - http://www.freesound.org/people/Sevin7/sounds/269722/ CC0 + - http://www.freesound.org/people/Percy%20Duke/sounds/23448/ CC-BY-3.0 + - http://www.freesound.org/people/kingsamas/sounds/135576/ CC-BY-3.0 + - http://www.freesound.org/people/bulbastre/sounds/126887/ CC-BY-3.0 + - http://www.freesound.org/people/Yoyodaman234/sounds/183541/ CC0 + +Ryding (CC0 1.0): +http://freesound.org/people/Ryding/sounds/94337/ + default_snow_footstep.*.ogg + +Ferk (CC0 1.0): + default_item_smoke.ogg, based on a sound by http://opengameart.org/users/bart + + +Models +------ +sofar (CC BY-SA 3.0): + chest_open.obj + torch_ceiling.obj + torch_floor.obj + torch_wall.obj + + +Schematics +---------- +paramat (CC BY-SA 3.0): + acacia_bush.mts + acacia_tree.mts + acacia_tree_from_sapling.mts + apple_tree.mts + apple_tree_from_sapling.mts + aspen_tree.mts + aspen_tree_from_sapling.mts + bush.mts + emergent_jungle_tree.mts + emergent_jungle_tree_from_sapling.mts + jungle_tree.mts + jungle_tree_from_sapling.mts + large_cactus.mts + papyrus.mts + pine_tree.mts + pine_tree_from_sapling.mts + snowy_pine_tree_from_sapling.mts + small_pine_tree.mts + small_pine_tree_from_sapling.mts + snowy_small_pine_tree_from_sapling.mts + +Shara RedCat (CC BY-SA 3.0): + acacia_log.mts + apple_log.mts + aspen_log.mts + jungle_log.mts + pine_log.mts + +sofar (CC BY-SA 3.0): + corals.mts + +TumeniNodes (CC BY-SA 3.0): + pine_bush.mts \ No newline at end of file diff --git a/mods/default/aliases.lua b/mods/default/aliases.lua new file mode 100755 index 0000000..6db3fc8 --- /dev/null +++ b/mods/default/aliases.lua @@ -0,0 +1,77 @@ +-- mods/default/aliases.lua + +-- Aliases to support loading worlds using nodes following the old naming convention +-- These can also be helpful when using chat commands, for example /giveme +minetest.register_alias("stone", "default:stone") +minetest.register_alias("stone_with_coal", "default:stone_with_coal") +minetest.register_alias("stone_with_iron", "default:stone_with_iron") +minetest.register_alias("dirt_with_grass", "default:dirt_with_grass") +minetest.register_alias("dirt_with_grass_footsteps", "default:dirt_with_grass_footsteps") +minetest.register_alias("dirt", "default:dirt") +minetest.register_alias("sand", "default:sand") +minetest.register_alias("gravel", "default:gravel") +minetest.register_alias("sandstone", "default:sandstone") +minetest.register_alias("clay", "default:clay") +minetest.register_alias("brick", "default:brick") +minetest.register_alias("tree", "default:tree") +minetest.register_alias("jungletree", "default:jungletree") +minetest.register_alias("junglegrass", "default:junglegrass") +minetest.register_alias("leaves", "default:leaves") +minetest.register_alias("cactus", "default:cactus") +minetest.register_alias("papyrus", "default:papyrus") +minetest.register_alias("bookshelf", "default:bookshelf") +minetest.register_alias("glass", "default:glass") +minetest.register_alias("wooden_fence", "default:fence_wood") +minetest.register_alias("rail", "carts:rail") +minetest.register_alias("ladder", "default:ladder_wood") +minetest.register_alias("wood", "default:wood") +minetest.register_alias("mese", "default:mese") +minetest.register_alias("cloud", "default:cloud") +minetest.register_alias("water_flowing", "default:water_flowing") +minetest.register_alias("water_source", "default:water_source") +minetest.register_alias("lava_flowing", "default:lava_flowing") +minetest.register_alias("lava_source", "default:lava_source") +minetest.register_alias("torch", "default:torch") +minetest.register_alias("sign_wall", "default:sign_wall_wood") +minetest.register_alias("furnace", "default:furnace") +minetest.register_alias("chest", "default:chest") +minetest.register_alias("locked_chest", "default:chest_locked") +minetest.register_alias("cobble", "default:cobble") +minetest.register_alias("mossycobble", "default:mossycobble") +minetest.register_alias("steelblock", "default:steelblock") +minetest.register_alias("sapling", "default:sapling") +minetest.register_alias("apple", "default:apple") + +minetest.register_alias("WPick", "default:pick_wood") +minetest.register_alias("STPick", "default:pick_stone") +minetest.register_alias("SteelPick", "default:pick_steel") +minetest.register_alias("MesePick", "default:pick_mese") +minetest.register_alias("WShovel", "default:shovel_wood") +minetest.register_alias("STShovel", "default:shovel_stone") +minetest.register_alias("SteelShovel", "default:shovel_steel") +minetest.register_alias("WAxe", "default:axe_wood") +minetest.register_alias("STAxe", "default:axe_stone") +minetest.register_alias("SteelAxe", "default:axe_steel") +minetest.register_alias("WSword", "default:sword_wood") +minetest.register_alias("STSword", "default:sword_stone") +minetest.register_alias("SteelSword", "default:sword_steel") + +minetest.register_alias("Stick", "default:stick") +minetest.register_alias("paper", "default:paper") +minetest.register_alias("book", "default:book") +minetest.register_alias("lump_of_coal", "default:coal_lump") +minetest.register_alias("lump_of_iron", "default:iron_lump") +minetest.register_alias("lump_of_clay", "default:clay_lump") +minetest.register_alias("steel_ingot", "default:steel_ingot") +minetest.register_alias("clay_brick", "default:clay_brick") +minetest.register_alias("snow", "default:snow") + +-- 'mese_block' was used for a while for the block form of mese +minetest.register_alias("default:mese_block", "default:mese") + +-- Aliases for corrected pine node names +minetest.register_alias("default:pinetree", "default:pine_tree") +minetest.register_alias("default:pinewood", "default:pine_wood") + +minetest.register_alias("default:ladder", "default:ladder_wood") +minetest.register_alias("default:sign_wall", "default:sign_wall_wood") diff --git a/mods/default/chests.lua b/mods/default/chests.lua new file mode 100644 index 0000000..c8e4521 --- /dev/null +++ b/mods/default/chests.lua @@ -0,0 +1,317 @@ +default.chest = {} + +function default.chest.get_chest_formspec(pos) + 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;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[nodemeta:" .. spos .. ";main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + return formspec +end + +function default.chest.chest_lid_obstructed(pos) + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local def = minetest.registered_nodes[minetest.get_node(above).name] + -- allow ladders, signs, wallmounted things and torches to not obstruct + if def and + (def.drawtype == "airlike" or + def.drawtype == "signlike" or + def.drawtype == "torchlike" or + (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted")) then + return false + end + return true +end + +function default.chest.chest_lid_close(pn) + local chest_open_info = default.chest.open_chests[pn] + local pos = chest_open_info.pos + local sound = chest_open_info.sound + local swap = chest_open_info.swap + + default.chest.open_chests[pn] = nil + for k, v in pairs(default.chest.open_chests) do + if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then + return true + end + end + + local node = minetest.get_node(pos) + minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap, + param2 = node.param2 }) + minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}) +end + +default.chest.open_chests = {} + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "default:chest" then + return + end + if not player or not fields.quit then + return + end + local pn = player:get_player_name() + + if not default.chest.open_chests[pn] then + return + end + + default.chest.chest_lid_close(pn) + return true +end) + +minetest.register_on_leaveplayer(function(player) + local pn = player:get_player_name() + if default.chest.open_chests[pn] then + default.chest.chest_lid_close(pn) + end +end) + +function default.chest.register_chest(name, d) + local def = table.copy(d) + def.drawtype = "mesh" + def.visual = "mesh" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.legacy_facedir_simple = true + def.is_ground_content = false + + if def.protected then + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Locked Chest") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Locked Chest (owned by " .. + meta:get_string("owner") .. ")") + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and + default.can_interact_with_node(player, pos) + end + def.allow_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return count + end + def.allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + if not default.can_interact_with_node(clicker, pos) then + return itemstack + end + + minetest.sound_play(def.sound_open, {gain = 0.3, + pos = pos, max_hear_distance = 10}) + if not default.chest.chest_lid_obstructed(pos) then + minetest.swap_node(pos, + { name = "default:" .. name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "default:chest", default.chest.get_chest_formspec(pos)) + default.chest.open_chests[clicker:get_player_name()] = { pos = pos, + sound = def.sound_close, swap = name } + end + def.on_blast = function() end + def.on_key_use = function(pos, player) + local secret = minetest.get_meta(pos):get_string("key_lock_secret") + local itemstack = player:get_wielded_item() + local key_meta = itemstack:get_meta() + + if key_meta:get_string("secret") == "" then + key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret) + itemstack:set_metadata("") + end + + if secret ~= key_meta:get_string("secret") then + return + end + + minetest.show_formspec( + player:get_player_name(), + "default:chest_locked", + default.chest.get_chest_formspec(pos) + ) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pn = player:get_player_name() + + -- verify placer is owner of lockable chest + if owner ~= pn then + minetest.record_protection_violation(pos, pn) + minetest.chat_send_player(pn, "You do not own this chest.") + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, "a locked chest", owner + end + else + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Chest") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end + def.on_rightclick = function(pos, node, clicker) + minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, + max_hear_distance = 10}) + if not default.chest.chest_lid_obstructed(pos) then + minetest.swap_node(pos, { + name = "default:" .. name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "default:chest", default.chest.get_chest_formspec(pos)) + default.chest.open_chests[clicker:get_player_name()] = { pos = pos, + sound = def.sound_close, swap = name } + end + def.on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "main", drops) + drops[#drops+1] = "default:" .. name + minetest.remove_node(pos) + return drops + end + end + + def.on_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + minetest.log("action", player:get_player_name() .. + " moves stuff in chest at " .. minetest.pos_to_string(pos)) + end + def.on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " moves " .. stack:get_name() .. + " to chest at " .. minetest.pos_to_string(pos)) + end + def.on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " takes " .. stack:get_name() .. + " from chest at " .. minetest.pos_to_string(pos)) + end + + local def_opened = table.copy(def) + local def_closed = table.copy(def) + + def_opened.mesh = "chest_open.obj" + for i = 1, #def_opened.tiles do + if type(def_opened.tiles[i]) == "string" then + def_opened.tiles[i] = {name = def_opened.tiles[i], backface_culling = true} + elseif def_opened.tiles[i].backface_culling == nil then + def_opened.tiles[i].backface_culling = true + end + end + def_opened.drop = "default:" .. name + def_opened.groups.not_in_creative_inventory = 1 + def_opened.selection_box = { + type = "fixed", + fixed = { -1/2, -1/2, -1/2, 1/2, 3/16, 1/2 }, + } + def_opened.can_dig = function() + return false + end + def_opened.on_blast = function() end + + def_closed.mesh = nil + def_closed.drawtype = nil + def_closed.tiles[6] = def.tiles[5] -- swap textures around for "normal" + def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh + def_closed.tiles[3] = def.tiles[3].."^[transformFX" + + minetest.register_node("default:" .. name, def_closed) + minetest.register_node("default:" .. name .. "_open", def_opened) + + -- convert old chests to this new variant + minetest.register_lbm({ + label = "update chests to opening chests", + name = "default:upgrade_" .. name .. "_v2", + nodenames = {"default:" .. name}, + action = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", nil) + local inv = meta:get_inventory() + local list = inv:get_list("default:chest") + if list then + inv:set_size("main", 8*4) + inv:set_list("main", list) + inv:set_list("default:chest", nil) + end + end + }) +end + +default.chest.register_chest("chest", { + description = "Chest", + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_front.png", + "default_chest_inside.png" + }, + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, +}) + +default.chest.register_chest("chest_locked", { + description = "Locked Chest", + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_lock.png", + "default_chest_inside.png" + }, + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, + protected = true, +}) \ No newline at end of file diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua new file mode 100755 index 0000000..a0871a2 --- /dev/null +++ b/mods/default/crafting.lua @@ -0,0 +1,1241 @@ +-- mods/default/crafting.lua + +minetest.register_craft({ + output = 'default:wood 4', + recipe = { + {'default:tree'}, + } +}) + +minetest.register_craft({ + output = 'default:junglewood 4', + recipe = { + {'default:jungletree'}, + } +}) + +minetest.register_craft({ + output = 'default:pine_wood 4', + recipe = { + {'default:pine_tree'}, + } +}) + +minetest.register_craft({ + output = 'default:acacia_wood 4', + recipe = { + {'default:acacia_tree'}, + } +}) + +minetest.register_craft({ + output = 'default:aspen_wood 4', + recipe = { + {'default:aspen_tree'}, + } +}) + +minetest.register_craft({ + output = 'default:wood', + recipe = { + {'default:bush_stem'}, + } +}) + +minetest.register_craft({ + output = 'default:acacia_wood', + recipe = { + {'default:acacia_bush_stem'}, + } +}) + +minetest.register_craft({ + output = 'default:pine_wood', + recipe = { + {'default:pine_bush_stem'}, + } +}) + +minetest.register_craft({ + output = 'default:stick 4', + recipe = { + {'group:wood'}, + } +}) + +minetest.register_craft({ + output = 'default:sign_wall_steel 3', + recipe = { + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'', 'group:stick', ''}, + } +}) + +minetest.register_craft({ + output = 'default:sign_wall_wood 3', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'group:wood', 'group:wood', 'group:wood'}, + {'', 'group:stick', ''}, + } +}) + +minetest.register_craft({ + output = 'default:torch 4', + recipe = { + {'default:coal_lump'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:pick_wood', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'', 'group:stick', ''}, + {'', 'group:stick', ''}, + } +}) + +minetest.register_craft({ + output = 'default:pick_stone', + recipe = { + {'group:stone', 'group:stone', 'group:stone'}, + {'', 'group:stick', ''}, + {'', 'group:stick', ''}, + } +}) + +minetest.register_craft({ + output = 'default:pick_steel', + recipe = { + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'', 'group:stick', ''}, + {'', 'group:stick', ''}, + } +}) + +minetest.register_craft({ + output = 'default:pick_bronze', + recipe = { + {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, + {'', 'group:stick', ''}, + {'', 'group:stick', ''}, + } +}) + +minetest.register_craft({ + output = 'default:pick_mese', + recipe = { + {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, + {'', 'group:stick', ''}, + {'', 'group:stick', ''}, + } +}) + +minetest.register_craft({ + output = 'default:pick_diamond', + recipe = { + {'default:diamond', 'default:diamond', 'default:diamond'}, + {'', 'group:stick', ''}, + {'', 'group:stick', ''}, + } +}) + +minetest.register_craft({ + output = 'default:shovel_wood', + recipe = { + {'group:wood'}, + {'group:stick'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:shovel_stone', + recipe = { + {'group:stone'}, + {'group:stick'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:shovel_steel', + recipe = { + {'default:steel_ingot'}, + {'group:stick'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:shovel_bronze', + recipe = { + {'default:bronze_ingot'}, + {'group:stick'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:shovel_mese', + recipe = { + {'default:mese_crystal'}, + {'group:stick'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:shovel_diamond', + recipe = { + {'default:diamond'}, + {'group:stick'}, + {'group:stick'}, + } +}) + +-- Axes +-- Recipes face left to match appearence in textures and inventory + +minetest.register_craft({ + output = 'default:axe_wood', + recipe = { + {'group:wood', 'group:wood'}, + {'group:wood', 'group:stick'}, + {'', 'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:axe_stone', + recipe = { + {'group:stone', 'group:stone'}, + {'group:stone', 'group:stick'}, + {'', 'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:axe_steel', + recipe = { + {'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'group:stick'}, + {'', 'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:axe_bronze', + recipe = { + {'default:bronze_ingot', 'default:bronze_ingot'}, + {'default:bronze_ingot', 'group:stick'}, + {'', 'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:axe_mese', + recipe = { + {'default:mese_crystal', 'default:mese_crystal'}, + {'default:mese_crystal', 'group:stick'}, + {'', 'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:axe_diamond', + recipe = { + {'default:diamond', 'default:diamond'}, + {'default:diamond', 'group:stick'}, + {'', 'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:sword_wood', + recipe = { + {'group:wood'}, + {'group:wood'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:sword_stone', + recipe = { + {'group:stone'}, + {'group:stone'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:sword_steel', + recipe = { + {'default:steel_ingot'}, + {'default:steel_ingot'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:sword_bronze', + recipe = { + {'default:bronze_ingot'}, + {'default:bronze_ingot'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:sword_mese', + recipe = { + {'default:mese_crystal'}, + {'default:mese_crystal'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:sword_diamond', + recipe = { + {'default:diamond'}, + {'default:diamond'}, + {'group:stick'}, + } +}) + +minetest.register_craft({ + output = 'default:skeleton_key', + recipe = { + {'default:gold_ingot'}, + } +}) + +minetest.register_craft({ + output = 'default:chest', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'group:wood', '', 'group:wood'}, + {'group:wood', 'group:wood', 'group:wood'}, + } +}) + +minetest.register_craft({ + output = 'default:chest_locked', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'group:wood', 'default:steel_ingot', 'group:wood'}, + {'group:wood', 'group:wood', 'group:wood'}, + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "default:chest_locked", + recipe = {"default:chest", "default:steel_ingot"}, +}) + +minetest.register_craft({ + output = 'default:furnace', + recipe = { + {'group:stone', 'group:stone', 'group:stone'}, + {'group:stone', '', 'group:stone'}, + {'group:stone', 'group:stone', 'group:stone'}, + } +}) + +minetest.register_craft({ + output = 'default:coalblock', + recipe = { + {'default:coal_lump', 'default:coal_lump', 'default:coal_lump'}, + {'default:coal_lump', 'default:coal_lump', 'default:coal_lump'}, + {'default:coal_lump', 'default:coal_lump', 'default:coal_lump'}, + } +}) + +minetest.register_craft({ + output = 'default:coal_lump 9', + recipe = { + {'default:coalblock'}, + } +}) + +minetest.register_craft({ + output = 'default:steelblock', + recipe = { + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + } +}) + +minetest.register_craft({ + output = 'default:steel_ingot 9', + recipe = { + {'default:steelblock'}, + } +}) + +minetest.register_craft({ + output = 'default:copperblock', + recipe = { + {'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'}, + {'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'}, + {'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'}, + } +}) + +minetest.register_craft({ + output = 'default:copper_ingot 9', + recipe = { + {'default:copperblock'}, + } +}) + +minetest.register_craft({ + output = "default:tinblock", + recipe = { + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:tin_ingot 9", + recipe = { + {"default:tinblock"}, + } +}) + +minetest.register_craft({ + output = "default:bronze_ingot 9", + recipe = { + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + } +}) + +minetest.register_craft({ + output = 'default:bronzeblock', + recipe = { + {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, + {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, + {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, + } +}) + +minetest.register_craft({ + output = 'default:bronze_ingot 9', + recipe = { + {'default:bronzeblock'}, + } +}) + +minetest.register_craft({ + output = 'default:goldblock', + recipe = { + {'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'}, + {'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'}, + {'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'}, + } +}) + +minetest.register_craft({ + output = 'default:gold_ingot 9', + recipe = { + {'default:goldblock'}, + } +}) + +minetest.register_craft({ + output = 'default:diamondblock', + recipe = { + {'default:diamond', 'default:diamond', 'default:diamond'}, + {'default:diamond', 'default:diamond', 'default:diamond'}, + {'default:diamond', 'default:diamond', 'default:diamond'}, + } +}) + +minetest.register_craft({ + output = 'default:diamond 9', + recipe = { + {'default:diamondblock'}, + } +}) + +minetest.register_craft({ + output = "default:sandstone", + recipe = { + {"default:sand", "default:sand"}, + {"default:sand", "default:sand"}, + } +}) + +minetest.register_craft({ + output = "default:sand 4", + recipe = { + {"default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:sandstonebrick 4", + recipe = { + {"default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:sandstone_block 9", + recipe = { + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone", + recipe = { + {"default:desert_sand", "default:desert_sand"}, + {"default:desert_sand", "default:desert_sand"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sand 4", + recipe = { + {"default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone_brick 4", + recipe = { + {"default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone_block 9", + recipe = { + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone", + recipe = { + {"default:silver_sand", "default:silver_sand"}, + {"default:silver_sand", "default:silver_sand"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sand 4", + recipe = { + {"default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone_brick 4", + recipe = { + {"default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone_block 9", + recipe = { + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = 'default:clay', + recipe = { + {'default:clay_lump', 'default:clay_lump'}, + {'default:clay_lump', 'default:clay_lump'}, + } +}) + +minetest.register_craft({ + output = 'default:clay_lump 4', + recipe = { + {'default:clay'}, + } +}) + +minetest.register_craft({ + output = 'default:brick', + recipe = { + {'default:clay_brick', 'default:clay_brick'}, + {'default:clay_brick', 'default:clay_brick'}, + } +}) + +minetest.register_craft({ + output = 'default:clay_brick 4', + recipe = { + {'default:brick'}, + } +}) + +minetest.register_craft({ + output = 'default:paper', + recipe = { + {'default:papyrus', 'default:papyrus', 'default:papyrus'}, + } +}) + +minetest.register_craft({ + output = 'default:book', + recipe = { + {'default:paper'}, + {'default:paper'}, + {'default:paper'}, + } +}) + +minetest.register_craft({ + output = 'default:bookshelf', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'default:book', 'default:book', 'default:book'}, + {'group:wood', 'group:wood', 'group:wood'}, + } +}) + +minetest.register_craft({ + output = "default:ladder_wood 5", + recipe = { + {"group:stick", "", "group:stick"}, + {"group:stick", "group:stick", "group:stick"}, + {"group:stick", "", "group:stick"}, + } +}) + +minetest.register_craft({ + output = 'default:ladder_steel 15', + recipe = { + {'default:steel_ingot', '', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', '', 'default:steel_ingot'}, + } +}) + +minetest.register_craft({ + output = 'default:mese', + recipe = { + {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, + {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, + {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, + } +}) + +minetest.register_craft({ + output = 'default:mese_crystal 9', + recipe = { + {'default:mese'}, + } +}) + +minetest.register_craft({ + output = 'default:mese_crystal_fragment 9', + recipe = { + {'default:mese_crystal'}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal", + recipe = { + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + } +}) + +minetest.register_craft({ + output = 'default:meselamp', + recipe = { + {'default:glass'}, + {'default:mese_crystal'}, + } +}) + +minetest.register_craft({ + output = "default:mese_post_light 3", + recipe = { + {"", "default:glass", ""}, + {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, + {"", "group:wood", ""}, + } +}) + +minetest.register_craft({ + output = 'default:obsidian_shard 9', + recipe = { + {'default:obsidian'} + } +}) + +minetest.register_craft({ + output = 'default:obsidian', + recipe = { + {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'}, + {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'}, + {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'}, + } +}) + +minetest.register_craft({ + output = 'default:obsidianbrick 4', + recipe = { + {'default:obsidian', 'default:obsidian'}, + {'default:obsidian', 'default:obsidian'} + } +}) + +minetest.register_craft({ + output = 'default:obsidian_block 9', + recipe = { + {'default:obsidian', 'default:obsidian', 'default:obsidian'}, + {'default:obsidian', 'default:obsidian', 'default:obsidian'}, + {'default:obsidian', 'default:obsidian', 'default:obsidian'}, + } +}) + +minetest.register_craft({ + output = 'default:stonebrick 4', + recipe = { + {'default:stone', 'default:stone'}, + {'default:stone', 'default:stone'}, + } +}) + +minetest.register_craft({ + output = 'default:stone_block 9', + recipe = { + {'default:stone', 'default:stone', 'default:stone'}, + {'default:stone', 'default:stone', 'default:stone'}, + {'default:stone', 'default:stone', 'default:stone'}, + } +}) + +minetest.register_craft({ + output = 'default:desert_stonebrick 4', + recipe = { + {'default:desert_stone', 'default:desert_stone'}, + {'default:desert_stone', 'default:desert_stone'}, + } +}) + +minetest.register_craft({ + output = 'default:desert_stone_block 9', + recipe = { + {'default:desert_stone', 'default:desert_stone', 'default:desert_stone'}, + {'default:desert_stone', 'default:desert_stone', 'default:desert_stone'}, + {'default:desert_stone', 'default:desert_stone', 'default:desert_stone'}, + } +}) + +minetest.register_craft({ + output = 'default:snowblock', + recipe = { + {'default:snow', 'default:snow', 'default:snow'}, + {'default:snow', 'default:snow', 'default:snow'}, + {'default:snow', 'default:snow', 'default:snow'}, + } +}) + +minetest.register_craft({ + output = 'default:snow 9', + recipe = { + {'default:snowblock'}, + } +}) + +minetest.register_craft({ + output = "default:emergent_jungle_sapling", + recipe = { + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + } +}) + + +-- +-- Crafting (tool repair) +-- + +minetest.register_craft({ + type = "toolrepair", + additional_wear = -0.02, +}) + + +-- +-- Cooking recipes +-- + +minetest.register_craft({ + type = "cooking", + output = "default:glass", + recipe = "group:sand", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:obsidian_glass", + recipe = "default:obsidian_shard", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:stone", + recipe = "default:cobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:stone", + recipe = "default:mossycobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:desert_stone", + recipe = "default:desert_cobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:steel_ingot", + recipe = "default:iron_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:copper_ingot", + recipe = "default:copper_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:tin_ingot", + recipe = "default:tin_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:gold_ingot", + recipe = "default:gold_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:clay_brick", + recipe = "default:clay_lump", +}) + +minetest.register_craft({ + type = 'cooking', + output = 'default:gold_ingot', + recipe = 'default:skeleton_key', + cooktime = 5, +}) + +minetest.register_craft({ + type = 'cooking', + output = 'default:gold_ingot', + recipe = 'default:key', + cooktime = 5, +}) + + +-- +-- Fuels +-- + +-- Support use of group:tree, includes default:tree which has the same burn time +minetest.register_craft({ + type = "fuel", + recipe = "group:tree", + burntime = 30, +}) + +-- Burn time for all woods are in order of wood density, +-- which is also the order of wood colour darkness: +-- aspen, pine, apple, acacia, jungle + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_tree", + burntime = 22, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_tree", + burntime = 26, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_tree", + burntime = 34, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:jungletree", + burntime = 38, +}) + + +-- Support use of group:wood, includes default:wood which has the same burn time +minetest.register_craft({ + type = "fuel", + recipe = "group:wood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_wood", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_wood", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:junglewood", + burntime = 9, +}) + + +-- Support use of group:sapling, includes default:sapling which has the same burn time +minetest.register_craft({ + type = "fuel", + recipe = "group:sapling", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:bush_sapling", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_bush_sapling", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_bush_sapling", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_sapling", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_sapling", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_sapling", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:junglesapling", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:emergent_jungle_sapling", + burntime = 7, +}) + + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_aspen_wood", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_pine_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_wood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_acacia_wood", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_junglewood", + burntime = 9, +}) + + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_aspen_wood", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_pine_wood", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_wood", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_acacia_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_junglewood", + burntime = 7, +}) + + +minetest.register_craft({ + type = "fuel", + recipe = "default:bush_stem", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_bush_stem", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_bush_stem", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_bush_stem", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:junglegrass", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "group:leaves", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:cactus", + burntime = 15, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:papyrus", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:bookshelf", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:ladder_wood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:lava_source", + burntime = 60, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:torch", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:sign_wall_wood", + burntime = 10, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:chest", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:chest_locked", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:coal_lump", + burntime = 40, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:coalblock", + burntime = 370, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:grass_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:dry_grass_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fern_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:marram_grass_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:paper", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:book", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:book_written", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:dry_shrub", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "group:stick", + burntime = 1, +}) + + +minetest.register_craft({ + type = "fuel", + recipe = "default:pick_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:shovel_wood", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:axe_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:sword_wood", + burntime = 5, +}) diff --git a/mods/default/craftitems.lua b/mods/default/craftitems.lua new file mode 100755 index 0000000..6c07934 --- /dev/null +++ b/mods/default/craftitems.lua @@ -0,0 +1,343 @@ +-- mods/default/craftitems.lua + +minetest.register_craftitem("default:stick", { + description = "Stick", + inventory_image = "default_stick.png", + groups = {stick = 1, flammable = 2}, +}) + +minetest.register_craftitem("default:paper", { + description = "Paper", + inventory_image = "default_paper.png", + groups = {flammable = 3}, +}) + + +local lpp = 14 -- Lines per book's page +local function book_on_use(itemstack, user) + local player_name = user:get_player_name() + local meta = itemstack:get_meta() + local title, text, owner = "", "", player_name + local page, page_max, lines, string = 1, 1, {}, "" + + -- Backwards compatibility + local old_data = minetest.deserialize(itemstack:get_metadata()) + if old_data then + meta:from_table({ fields = old_data }) + end + + local data = meta:to_table().fields + + if data.owner then + title = data.title + text = data.text + owner = data.owner + + for str in (text .. "\n"):gmatch("([^\n]*)[\n]") do + lines[#lines+1] = str + end + + if data.page then + page = data.page + page_max = data.page_max + + for i = ((lpp * page) - lpp) + 1, lpp * page do + if not lines[i] then break end + string = string .. lines[i] .. "\n" + end + end + end + + local formspec + if owner == player_name then + formspec = "size[8,8]" .. default.gui_bg .. + default.gui_bg_img .. + "field[0.5,1;7.5,0;title;Title:;" .. + minetest.formspec_escape(title) .. "]" .. + "textarea[0.5,1.5;7.5,7;text;Contents:;" .. + minetest.formspec_escape(text) .. "]" .. + "button_exit[2.5,7.5;3,1;save;Save]" + else + formspec = "size[8,8]" .. default.gui_bg .. + default.gui_bg_img .. + "label[0.5,0.5;by " .. owner .. "]" .. + "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[0.4,0;7,0.5;title;#FFFF00," .. minetest.formspec_escape(title) .. "]" .. + "textarea[0.5,1.5;7.5,7;;" .. + minetest.formspec_escape(string ~= "" and string or text) .. ";]" .. + "button[2.4,7.6;0.8,0.8;book_prev;<]" .. + "label[3.2,7.7;Page " .. page .. " of " .. page_max .. "]" .. + "button[4.9,7.6;0.8,0.8;book_next;>]" + end + + minetest.show_formspec(player_name, "default:book", formspec) + return itemstack +end + +local max_text_size = 10000 +local max_title_size = 80 +local short_title_size = 35 +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "default:book" then return end + local inv = player:get_inventory() + local stack = player:get_wielded_item() + + if fields.save and fields.title and fields.text + and fields.title ~= "" and fields.text ~= "" then + local new_stack, data + if stack:get_name() ~= "default:book_written" then + local count = stack:get_count() + if count == 1 then + stack:set_name("default:book_written") + else + stack:set_count(count - 1) + new_stack = ItemStack("default:book_written") + end + else + data = stack:get_meta():to_table().fields + end + + if data and data.owner and data.owner ~= player:get_player_name() then + return + end + + if not data then data = {} end + data.title = fields.title:sub(1, max_title_size) + data.owner = player:get_player_name() + local short_title = data.title + -- Don't bother triming the title if the trailing dots would make it longer + if #short_title > short_title_size + 3 then + short_title = short_title:sub(1, short_title_size) .. "..." + end + data.description = "\""..short_title.."\" by "..data.owner + data.text = fields.text:sub(1, max_text_size) + data.text = data.text:gsub("\r\n", "\n"):gsub("\r", "\n") + data.page = 1 + data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp) + + if new_stack then + new_stack:get_meta():from_table({ fields = data }) + if inv:room_for_item("main", new_stack) then + inv:add_item("main", new_stack) + else + minetest.add_item(player:get_pos(), new_stack) + end + else + stack:get_meta():from_table({ fields = data }) + end + + elseif fields.book_next or fields.book_prev then + local data = stack:get_meta():to_table().fields + if not data or not data.page then + return + end + + data.page = tonumber(data.page) + data.page_max = tonumber(data.page_max) + + if fields.book_next then + data.page = data.page + 1 + if data.page > data.page_max then + data.page = 1 + end + else + data.page = data.page - 1 + if data.page == 0 then + data.page = data.page_max + end + end + + stack:get_meta():from_table({fields = data}) + stack = book_on_use(stack, player) + end + + -- Update stack + player:set_wielded_item(stack) +end) + +minetest.register_craftitem("default:book", { + description = "Book", + inventory_image = "default_book.png", + groups = {book = 1, flammable = 3}, + on_use = book_on_use, +}) + +minetest.register_craftitem("default:book_written", { + description = "Book With Text", + inventory_image = "default_book_written.png", + groups = {book = 1, not_in_creative_inventory = 1, flammable = 3}, + stack_max = 1, + on_use = book_on_use, +}) + +minetest.register_craft({ + type = "shapeless", + output = "default:book_written", + recipe = {"default:book", "default:book_written"} +}) + +minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) + if itemstack:get_name() ~= "default:book_written" then + return + end + + local original + local index + for i = 1, player:get_inventory():get_size("craft") do + if old_craft_grid[i]:get_name() == "default:book_written" then + original = old_craft_grid[i] + index = i + end + end + if not original then + return + end + local copymeta = original:get_meta():to_table() + -- copy of the book held by player's mouse cursor + itemstack:get_meta():from_table(copymeta) + -- put the book with metadata back in the craft grid + craft_inv:set_stack("craft", index, original) +end) + +minetest.register_craftitem("default:skeleton_key", { + description = "Skeleton Key", + inventory_image = "default_key_skeleton.png", + groups = {key = 1}, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local pos = pointed_thing.under + local node = minetest.get_node(pos) + + if not node then + return itemstack + end + + local on_skeleton_key_use = minetest.registered_nodes[node.name].on_skeleton_key_use + if not on_skeleton_key_use then + return itemstack + end + + -- make a new key secret in case the node callback needs it + local random = math.random + local newsecret = string.format( + "%04x%04x%04x%04x", + random(2^16) - 1, random(2^16) - 1, + random(2^16) - 1, random(2^16) - 1) + + local secret, _, _ = on_skeleton_key_use(pos, user, newsecret) + + if secret then + local inv = minetest.get_inventory({type="player", name=user:get_player_name()}) + + -- update original itemstack + itemstack:take_item() + + -- finish and return the new key + local new_stack = ItemStack("default:key") + local meta = new_stack:get_meta() + meta:set_string("secret", secret) + meta:set_string("description", "Key to "..user:get_player_name().."'s " + ..minetest.registered_nodes[node.name].description) + + if itemstack:get_count() == 0 then + itemstack = new_stack + else + if inv:add_item("main", new_stack):get_count() > 0 then + minetest.add_item(user:get_pos(), new_stack) + end -- else: added to inventory successfully + end + + return itemstack + end + end +}) + +minetest.register_craftitem("default:coal_lump", { + description = "Coal Lump", + inventory_image = "default_coal_lump.png", + groups = {coal = 1, flammable = 1} +}) + +minetest.register_craftitem("default:iron_lump", { + description = "Iron Lump", + inventory_image = "default_iron_lump.png", +}) + +minetest.register_craftitem("default:copper_lump", { + description = "Copper Lump", + inventory_image = "default_copper_lump.png", +}) + +minetest.register_craftitem("default:tin_lump", { + description = "Tin Lump", + inventory_image = "default_tin_lump.png", +}) + +minetest.register_craftitem("default:mese_crystal", { + description = "Mese Crystal", + inventory_image = "default_mese_crystal.png", +}) + +minetest.register_craftitem("default:gold_lump", { + description = "Gold Lump", + inventory_image = "default_gold_lump.png", +}) + +minetest.register_craftitem("default:diamond", { + description = "Diamond", + inventory_image = "default_diamond.png", +}) + +minetest.register_craftitem("default:clay_lump", { + description = "Clay Lump", + inventory_image = "default_clay_lump.png", +}) + +minetest.register_craftitem("default:steel_ingot", { + description = "Steel Ingot", + inventory_image = "default_steel_ingot.png", +}) + +minetest.register_craftitem("default:copper_ingot", { + description = "Copper Ingot", + inventory_image = "default_copper_ingot.png", +}) + +minetest.register_craftitem("default:tin_ingot", { + description = "Tin Ingot", + inventory_image = "default_tin_ingot.png", +}) + +minetest.register_craftitem("default:bronze_ingot", { + description = "Bronze Ingot", + inventory_image = "default_bronze_ingot.png", +}) + +minetest.register_craftitem("default:gold_ingot", { + description = "Gold Ingot", + inventory_image = "default_gold_ingot.png" +}) + +minetest.register_craftitem("default:mese_crystal_fragment", { + description = "Mese Crystal Fragment", + inventory_image = "default_mese_crystal_fragment.png", +}) + +minetest.register_craftitem("default:clay_brick", { + description = "Clay Brick", + inventory_image = "default_clay_brick.png", +}) + +minetest.register_craftitem("default:obsidian_shard", { + description = "Obsidian Shard", + inventory_image = "default_obsidian_shard.png", +}) + +minetest.register_craftitem("default:flint", { + description = "Flint", + inventory_image = "default_flint.png" +}) diff --git a/mods/default/depends.txt b/mods/default/depends.txt new file mode 100755 index 0000000..e1c3818 --- /dev/null +++ b/mods/default/depends.txt @@ -0,0 +1 @@ +player_api? diff --git a/mods/default/functions.lua b/mods/default/functions.lua new file mode 100755 index 0000000..d951e8e --- /dev/null +++ b/mods/default/functions.lua @@ -0,0 +1,605 @@ +-- +-- Sounds +-- + +function default.node_sound_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "", gain = 1.0} + table.dug = table.dug or + {name = "default_dug_node", gain = 0.25} + table.place = table.place or + {name = "default_place_node_hard", gain = 1.0} + return table +end + +function default.node_sound_stone_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_hard_footstep", gain = 0.3} + table.dug = table.dug or + {name = "default_hard_footstep", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_dirt_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_dirt_footstep", gain = 0.4} + table.dug = table.dug or + {name = "default_dirt_footstep", gain = 1.0} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_sand_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_sand_footstep", gain = 0.12} + table.dug = table.dug or + {name = "default_sand_footstep", gain = 0.24} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_gravel_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_gravel_footstep", gain = 0.4} + table.dug = table.dug or + {name = "default_gravel_footstep", gain = 1.0} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_wood_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_wood_footstep", gain = 0.3} + table.dug = table.dug or + {name = "default_wood_footstep", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_leaves_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_grass_footstep", gain = 0.45} + table.dug = table.dug or + {name = "default_grass_footstep", gain = 0.7} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_glass_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_glass_footstep", gain = 0.3} + table.dig = table.dig or + {name = "default_glass_footstep", gain = 0.5} + table.dug = table.dug or + {name = "default_break_glass", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_metal_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_metal_footstep", gain = 0.4} + table.dig = table.dig or + {name = "default_dig_metal", gain = 0.5} + table.dug = table.dug or + {name = "default_dug_metal", gain = 0.5} + table.place = table.place or + {name = "default_place_node_metal", gain = 0.5} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_water_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_water_footstep", gain = 0.2} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_snow_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_snow_footstep", gain = 0.2} + table.dig = table.dig or + {name = "default_snow_footstep", gain = 0.3} + table.dug = table.dug or + {name = "default_snow_footstep", gain = 0.3} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + + +-- +-- Lavacooling +-- + +default.cool_lava = function(pos, node) + if node.name == "default:lava_source" then + minetest.set_node(pos, {name = "default:obsidian"}) + else -- Lava flowing + minetest.set_node(pos, {name = "default:stone"}) + end + minetest.sound_play("default_cool_lava", + {pos = pos, max_hear_distance = 16, gain = 0.25}) +end + +if minetest.settings:get_bool("enable_lavacooling") ~= false then + minetest.register_abm({ + label = "Lava cooling", + nodenames = {"default:lava_source", "default:lava_flowing"}, + neighbors = {"group:cools_lava", "group:water"}, + interval = 2, + chance = 2, + catch_up = false, + action = function(...) + default.cool_lava(...) + end, + }) +end + + +-- +-- Optimized helper to put all items in an inventory into a drops list +-- + +function default.get_inventory_drops(pos, inventory, drops) + local inv = minetest.get_meta(pos):get_inventory() + local n = #drops + for i = 1, inv:get_size(inventory) do + local stack = inv:get_stack(inventory, i) + if stack:get_count() > 0 then + drops[n+1] = stack:to_table() + n = n + 1 + end + end +end + + +-- +-- Papyrus and cactus growing +-- + +-- Wrapping the functions in ABM action is necessary to make overriding them possible + +function default.grow_cactus(pos, node) + if node.param2 >= 4 then + return + end + pos.y = pos.y - 1 + if minetest.get_item_group(minetest.get_node(pos).name, "sand") == 0 then + return + end + pos.y = pos.y + 1 + local height = 0 + while node.name == "default:cactus" and height < 4 do + height = height + 1 + pos.y = pos.y + 1 + node = minetest.get_node(pos) + end + if height == 4 or node.name ~= "air" then + return + end + if minetest.get_node_light(pos) < 13 then + return + end + minetest.set_node(pos, {name = "default:cactus"}) + return true +end + +function default.grow_papyrus(pos, node) + pos.y = pos.y - 1 + local name = minetest.get_node(pos).name + if name ~= "default:dirt_with_grass" and name ~= "default:dirt" then + return + end + if not minetest.find_node_near(pos, 3, {"group:water"}) then + return + end + pos.y = pos.y + 1 + local height = 0 + while node.name == "default:papyrus" and height < 4 do + height = height + 1 + pos.y = pos.y + 1 + node = minetest.get_node(pos) + end + if height == 4 or node.name ~= "air" then + return + end + if minetest.get_node_light(pos) < 13 then + return + end + minetest.set_node(pos, {name = "default:papyrus"}) + return true +end + +minetest.register_abm({ + label = "Grow cactus", + nodenames = {"default:cactus"}, + neighbors = {"group:sand"}, + interval = 12, + chance = 83, + action = function(...) + default.grow_cactus(...) + end +}) + +minetest.register_abm({ + label = "Grow papyrus", + nodenames = {"default:papyrus"}, + neighbors = {"default:dirt", "default:dirt_with_grass"}, + interval = 14, + chance = 71, + action = function(...) + default.grow_papyrus(...) + end +}) + + +-- +-- Dig upwards +-- + +function default.dig_up(pos, node, digger) + if digger == nil then return end + local np = {x = pos.x, y = pos.y + 1, z = pos.z} + local nn = minetest.get_node(np) + if nn.name == node.name then + minetest.node_dig(np, nn, digger) + end +end + + +-- +-- Fence registration helper +-- + +function default.register_fence(name, def) + minetest.register_craft({ + output = name .. " 4", + recipe = { + { def.material, 'group:stick', def.material }, + { def.material, 'group:stick', def.material }, + } + }) + + local fence_texture = "default_fence_overlay.png^" .. def.texture .. + "^default_fence_overlay.png^[makealpha:255,126,126" + -- Allow almost everything to be overridden + local default_fields = { + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = {{-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}}, + -- connect_top = + -- connect_bottom = + connect_front = {{-1/16,3/16,-1/2,1/16,5/16,-1/8}, + {-1/16,-5/16,-1/2,1/16,-3/16,-1/8}}, + connect_left = {{-1/2,3/16,-1/16,-1/8,5/16,1/16}, + {-1/2,-5/16,-1/16,-1/8,-3/16,1/16}}, + connect_back = {{-1/16,3/16,1/8,1/16,5/16,1/2}, + {-1/16,-5/16,1/8,1/16,-3/16,1/2}}, + connect_right = {{1/8,3/16,-1/16,1/2,5/16,1/16}, + {1/8,-5/16,-1/16,1/2,-3/16,1/16}}, + }, + connects_to = {"group:fence", "group:wood", "group:tree", "group:wall"}, + inventory_image = fence_texture, + wield_image = fence_texture, + tiles = {def.texture}, + sunlight_propagates = true, + is_ground_content = false, + groups = {}, + } + for k, v in pairs(default_fields) do + if def[k] == nil then + def[k] = v + end + end + + -- Always add to the fence group, even if no group provided + def.groups.fence = 1 + + def.texture = nil + def.material = nil + + minetest.register_node(name, def) +end + + +-- +-- Fence rail registration helper +-- + +function default.register_fence_rail(name, def) + minetest.register_craft({ + output = name .. " 16", + recipe = { + { def.material, def.material }, + { "", ""}, + { def.material, def.material }, + } + }) + + local fence_rail_texture = "default_fence_rail_overlay.png^" .. def.texture .. + "^default_fence_rail_overlay.png^[makealpha:255,126,126" + -- Allow almost everything to be overridden + local default_fields = { + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = { + {-1/16, 3/16, -1/16, 1/16, 5/16, 1/16}, + {-1/16, -3/16, -1/16, 1/16, -5/16, 1/16} + }, + -- connect_top = + -- connect_bottom = + connect_front = { + {-1/16, 3/16, -1/2, 1/16, 5/16, -1/16}, + {-1/16, -5/16, -1/2, 1/16, -3/16, -1/16}}, + connect_left = { + {-1/2, 3/16, -1/16, -1/16, 5/16, 1/16}, + {-1/2, -5/16, -1/16, -1/16, -3/16, 1/16}}, + connect_back = { + {-1/16, 3/16, 1/16, 1/16, 5/16, 1/2}, + {-1/16, -5/16, 1/16, 1/16, -3/16, 1/2}}, + connect_right = { + {1/16, 3/16, -1/16, 1/2, 5/16, 1/16}, + {1/16, -5/16, -1/16, 1/2, -3/16, 1/16}}, + }, + connects_to = {"group:fence", "group:wood", "group:tree", "group:wall"}, + inventory_image = fence_rail_texture, + wield_image = fence_rail_texture, + tiles = {def.texture}, + sunlight_propagates = true, + is_ground_content = false, + groups = {}, + } + for k, v in pairs(default_fields) do + if def[k] == nil then + def[k] = v + end + end + + -- Always add to the fence group, even if no group provided + def.groups.fence = 1 + + def.texture = nil + def.material = nil + + minetest.register_node(name, def) +end + + +-- +-- Leafdecay +-- + +-- Prevent decay of placed leaves + +default.after_place_leaves = function(pos, placer, itemstack, pointed_thing) + if placer and placer:is_player() and not placer:get_player_control().sneak then + local node = minetest.get_node(pos) + node.param2 = 1 + minetest.set_node(pos, node) + end +end + +-- Leafdecay +local function leafdecay_after_destruct(pos, oldnode, def) + for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius), + vector.add(pos, def.radius), def.leaves)) do + local node = minetest.get_node(v) + local timer = minetest.get_node_timer(v) + if node.param2 == 0 and not timer:is_started() then + timer:start(math.random(20, 120) / 10) + end + end +end + +local function leafdecay_on_timer(pos, def) + if minetest.find_node_near(pos, def.radius, def.trunks) then + return false + end + + local node = minetest.get_node(pos) + local drops = minetest.get_node_drops(node.name) + for _, item in ipairs(drops) do + local is_leaf + for _, v in pairs(def.leaves) do + if v == item then + is_leaf = true + end + end + if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or + not is_leaf then + minetest.add_item({ + x = pos.x - 0.5 + math.random(), + y = pos.y - 0.5 + math.random(), + z = pos.z - 0.5 + math.random(), + }, item) + end + end + + minetest.remove_node(pos) + minetest.check_for_falling(pos) +end + +function default.register_leafdecay(def) + assert(def.leaves) + assert(def.trunks) + assert(def.radius) + for _, v in pairs(def.trunks) do + minetest.override_item(v, { + after_destruct = function(pos, oldnode) + leafdecay_after_destruct(pos, oldnode, def) + end, + }) + end + for _, v in pairs(def.leaves) do + minetest.override_item(v, { + on_timer = function(pos) + leafdecay_on_timer(pos, def) + end, + }) + end +end + + +-- +-- Convert dirt to something that fits the environment +-- + +minetest.register_abm({ + label = "Grass spread", + nodenames = {"default:dirt"}, + neighbors = { + "air", + "group:grass", + "group:dry_grass", + "default:snow", + }, + interval = 6, + chance = 50, + catch_up = false, + action = function(pos, node) + -- Check for darkness: night, shadow or under a light-blocking node + -- Returns if ignore above + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node_light(above) or 0) < 13 then + return + end + + -- Look for spreading dirt-type neighbours + local p2 = minetest.find_node_near(pos, 1, "group:spreading_dirt_type") + if p2 then + local n3 = minetest.get_node(p2) + minetest.set_node(pos, {name = n3.name}) + return + end + + -- Else, any seeding nodes on top? + local name = minetest.get_node(above).name + -- Snow check is cheapest, so comes first + if name == "default:snow" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + -- Most likely case first + elseif minetest.get_item_group(name, "grass") ~= 0 then + minetest.set_node(pos, {name = "default:dirt_with_grass"}) + elseif minetest.get_item_group(name, "dry_grass") ~= 0 then + minetest.set_node(pos, {name = "default:dirt_with_dry_grass"}) + end + end +}) + + +-- +-- Grass and dry grass removed in darkness +-- + +minetest.register_abm({ + label = "Grass covered", + nodenames = {"group:spreading_dirt_type"}, + interval = 8, + chance = 50, + catch_up = false, + action = function(pos, node) + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local name = minetest.get_node(above).name + local nodedef = minetest.registered_nodes[name] + if name ~= "ignore" and nodedef and not ((nodedef.sunlight_propagates or + nodedef.paramtype == "light") and + nodedef.liquidtype == "none") then + minetest.set_node(pos, {name = "default:dirt"}) + end + end +}) + + +-- +-- Moss growth on cobble near water +-- + +minetest.register_abm({ + label = "Moss growth", + nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble", "walls:cobble"}, + neighbors = {"group:water"}, + interval = 16, + chance = 200, + catch_up = false, + action = function(pos, node) + if node.name == "default:cobble" then + minetest.set_node(pos, {name = "default:mossycobble"}) + elseif node.name == "stairs:slab_cobble" then + minetest.set_node(pos, {name = "stairs:slab_mossycobble", param2 = node.param2}) + elseif node.name == "stairs:stair_cobble" then + minetest.set_node(pos, {name = "stairs:stair_mossycobble", param2 = node.param2}) + elseif node.name == "walls:cobble" then + minetest.set_node(pos, {name = "walls:mossycobble", param2 = node.param2}) + end + end +}) + + +-- +-- NOTICE: This method is not an official part of the API yet. +-- This method may change in future. +-- + +function default.can_interact_with_node(player, pos) + if player then + if minetest.check_player_privs(player, "protection_bypass") then + return true + end + else + return false + end + + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + + if not owner or owner == "" or owner == player:get_player_name() then + return true + end + + -- Is player wielding the right key? + local item = player:get_wielded_item() + if item:get_name() == "default:key" then + local key_meta = item:get_meta() + + if key_meta:get_string("secret") == "" then + local key_oldmeta = item:get_metadata() + if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then + return false + end + + key_meta:set_string("secret", minetest.parse_json(key_oldmeta).secret) + item:set_metadata("") + end + + return meta:get_string("key_lock_secret") == key_meta:get_string("secret") + end + + return false +end diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua new file mode 100755 index 0000000..09966a6 --- /dev/null +++ b/mods/default/furnace.lua @@ -0,0 +1,337 @@ + +-- +-- Formspecs +-- + +function default.get_furnace_active_formspec(fuel_percent, item_percent) + return "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "list[context;src;2.75,0.5;1,1;]".. + "list[context;fuel;2.75,2.5;1,1;]".. + "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. + (100-fuel_percent)..":default_furnace_fire_fg.png]".. + "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:".. + (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. + "list[context;dst;4.75,0.96;2,2;]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[context;dst]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]".. + "listring[context;fuel]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +function default.get_furnace_inactive_formspec() + return "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "list[context;src;2.75,0.5;1,1;]".. + "list[context;fuel;2.75,2.5;1,1;]".. + "image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. + "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. + "list[context;dst;4.75,0.96;2,2;]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[context;dst]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]".. + "listring[context;fuel]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +-- +-- Node callback functions that are the same for active and inactive furnace +-- + +local function can_dig(pos, player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src") +end + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if listname == "fuel" then + if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then + if inv:is_empty("src") then + meta:set_string("infotext", "Furnace is empty") + end + return stack:get_count() + else + return 0 + end + elseif listname == "src" then + return stack:get_count() + elseif listname == "dst" then + return 0 + end +end + +local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local stack = inv:get_stack(from_list, from_index) + return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) +end + +local function allow_metadata_inventory_take(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + return stack:get_count() +end + +local function swap_node(pos, name) + local node = minetest.get_node(pos) + if node.name == name then + return + end + node.name = name + minetest.swap_node(pos, node) +end + +local function furnace_node_timer(pos, elapsed) + -- + -- Inizialize metadata + -- + local meta = minetest.get_meta(pos) + local fuel_time = meta:get_float("fuel_time") or 0 + local src_time = meta:get_float("src_time") or 0 + local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 + + local inv = meta:get_inventory() + local srclist, fuellist + + local cookable, cooked + local fuel + + local update = true + while elapsed > 0 and update do + update = false + + srclist = inv:get_list("src") + fuellist = inv:get_list("fuel") + + -- + -- Cooking + -- + + -- Check if we have cookable content + local aftercooked + cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + cookable = cooked.time ~= 0 + + local el = math.min(elapsed, fuel_totaltime - fuel_time) + if cookable then -- fuel lasts long enough, adjust el to cooking duration + el = math.min(el, cooked.time - src_time) + end + + -- Check if we have enough fuel to burn + if fuel_time < fuel_totaltime then + -- The furnace is currently active and has enough fuel + fuel_time = fuel_time + el + -- If there is a cookable item then check if it is ready yet + if cookable then + src_time = src_time + el + if src_time >= cooked.time then + -- Place result in dst list if possible + if inv:room_for_item("dst", cooked.item) then + inv:add_item("dst", cooked.item) + inv:set_stack("src", 1, aftercooked.items[1]) + src_time = src_time - cooked.time + update = true + end + else + -- Item could not be cooked: probably missing fuel + update = true + end + end + else + -- Furnace ran out of fuel + if cookable then + -- We need to get new fuel + local afterfuel + fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) + + if fuel.time == 0 then + -- No valid fuel in fuel list + fuel_totaltime = 0 + src_time = 0 + else + -- Take fuel from fuel list + inv:set_stack("fuel", 1, afterfuel.items[1]) + update = true + fuel_totaltime = fuel.time + (fuel_totaltime - fuel_time) + end + else + -- We don't need to get new fuel since there is no cookable item + fuel_totaltime = 0 + src_time = 0 + end + fuel_time = 0 + end + + elapsed = elapsed - el + end + + if fuel and fuel_totaltime > fuel.time then + fuel_totaltime = fuel.time + end + if srclist[1]:is_empty() then + src_time = 0 + end + + -- + -- Update formspec, infotext and node + -- + local formspec + local item_state + local item_percent = 0 + if cookable then + item_percent = math.floor(src_time / cooked.time * 100) + if item_percent > 100 then + item_state = "100% (output full)" + else + item_state = item_percent .. "%" + end + else + if srclist[1]:is_empty() then + item_state = "Empty" + else + item_state = "Not cookable" + end + end + + local fuel_state = "Empty" + local active = "inactive" + local result = false + + if fuel_totaltime ~= 0 then + active = "active" + local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) + fuel_state = fuel_percent .. "%" + formspec = default.get_furnace_active_formspec(fuel_percent, item_percent) + swap_node(pos, "default:furnace_active") + -- make sure timer restarts automatically + result = true + else + if not fuellist[1]:is_empty() then + fuel_state = "0%" + end + formspec = default.get_furnace_inactive_formspec() + swap_node(pos, "default:furnace") + -- stop timer on the inactive furnace + minetest.get_node_timer(pos):stop() + end + + local infotext = "Furnace " .. active .. "\n(Item: " .. item_state .. + "; Fuel: " .. fuel_state .. ")" + + -- + -- Set meta values + -- + meta:set_float("fuel_totaltime", fuel_totaltime) + meta:set_float("fuel_time", fuel_time) + meta:set_float("src_time", src_time) + meta:set_string("formspec", formspec) + meta:set_string("infotext", infotext) + + return result +end + +-- +-- Node definitions +-- + +minetest.register_node("default:furnace", { + description = "Furnace", + tiles = { + "default_furnace_top.png", "default_furnace_bottom.png", + "default_furnace_side.png", "default_furnace_side.png", + "default_furnace_side.png", "default_furnace_front.png" + }, + paramtype2 = "facedir", + groups = {cracky=2}, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + + can_dig = can_dig, + + on_timer = furnace_node_timer, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.get_furnace_inactive_formspec()) + local inv = meta:get_inventory() + inv:set_size('src', 1) + inv:set_size('fuel', 1) + inv:set_size('dst', 4) + end, + + on_metadata_inventory_move = function(pos) + minetest.get_node_timer(pos):start(1.0) + end, + on_metadata_inventory_put = function(pos) + -- start timer function, it will sort out whether furnace can burn or not. + minetest.get_node_timer(pos):start(1.0) + end, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "src", drops) + default.get_inventory_drops(pos, "fuel", drops) + default.get_inventory_drops(pos, "dst", drops) + drops[#drops+1] = "default:furnace" + minetest.remove_node(pos) + return drops + 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, +}) + +minetest.register_node("default:furnace_active", { + description = "Furnace", + tiles = { + "default_furnace_top.png", "default_furnace_bottom.png", + "default_furnace_side.png", "default_furnace_side.png", + "default_furnace_side.png", + { + image = "default_furnace_front_active.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5 + }, + } + }, + paramtype2 = "facedir", + light_source = 8, + drop = "default:furnace", + groups = {cracky=2, not_in_creative_inventory=1}, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + on_timer = furnace_node_timer, + + can_dig = can_dig, + + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_take = allow_metadata_inventory_take, +}) diff --git a/mods/default/init.lua b/mods/default/init.lua new file mode 100755 index 0000000..36e608d --- /dev/null +++ b/mods/default/init.lua @@ -0,0 +1,58 @@ +-- Minetest 0.4 mod: default +-- See README.txt for licensing and other information. + +-- The API documentation in here was moved into game_api.txt + +-- Definitions made by this mod that other mods can use too +default = {} + +default.LIGHT_MAX = 14 + +-- GUI related stuff +default.gui_bg = "" +default.gui_bg_img = "" +default.gui_slots = "" + +minetest.register_on_joinplayer(function(player) + player:set_formspec_prepend([[ + bgcolor[#080808BB;true] + background[5,5;1,1;gui_formbg.png;true] + listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] ]]) +end) + +function default.get_hotbar_bg(x,y) + local out = "" + for i=0,7,1 do + out = out .."image["..x+i..","..y..";1,1;gui_hb_bg.png]" + end + return out +end + +default.gui_survival_form = "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "list[current_player;craft;1.75,0.5;3,3;]".. + "list[current_player;craftpreview;5.75,1.5;1,1;]".. + "image[4.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. + "listring[current_player;main]".. + "listring[current_player;craft]".. + default.get_hotbar_bg(0,4.25) + +-- Load files +local default_path = minetest.get_modpath("default") + +dofile(default_path.."/functions.lua") +dofile(default_path.."/trees.lua") +dofile(default_path.."/nodes.lua") +dofile(default_path.."/chests.lua") +dofile(default_path.."/furnace.lua") +dofile(default_path.."/torch.lua") +dofile(default_path.."/tools.lua") +dofile(default_path.."/item_entity.lua") +dofile(default_path.."/craftitems.lua") +dofile(default_path.."/crafting.lua") +dofile(default_path.."/aliases.lua") +dofile(default_path.."/legacy.lua") diff --git a/mods/default/item_entity.lua b/mods/default/item_entity.lua new file mode 100755 index 0000000..2a61f08 --- /dev/null +++ b/mods/default/item_entity.lua @@ -0,0 +1,74 @@ +-- mods/default/item_entity.lua + +local builtin_item = minetest.registered_entities["__builtin:item"] + +local item = { + set_item = function(self, itemstring) + builtin_item.set_item(self, itemstring) + + local stack = ItemStack(itemstring) + local itemdef = minetest.registered_items[stack:get_name()] + if itemdef and itemdef.groups.flammable ~= 0 then + self.flammable = itemdef.groups.flammable + end + end, + + burn_up = function(self) + -- disappear in a smoke puff + self.object:remove() + local p = self.object:get_pos() + minetest.sound_play("default_item_smoke", { + pos = p, + max_hear_distance = 8, + }) + minetest.add_particlespawner({ + amount = 3, + time = 0.1, + minpos = {x = p.x - 0.1, y = p.y + 0.1, z = p.z - 0.1 }, + maxpos = {x = p.x + 0.1, y = p.y + 0.2, z = p.z + 0.1 }, + minvel = {x = 0, y = 2.5, z = 0}, + maxvel = {x = 0, y = 2.5, z = 0}, + minacc = {x = -0.15, y = -0.02, z = -0.15}, + maxacc = {x = 0.15, y = -0.01, z = 0.15}, + minexptime = 4, + maxexptime = 6, + minsize = 5, + maxsize = 5, + collisiondetection = true, + texture = "default_item_smoke.png" + }) + end, + + on_step = function(self, dtime) + builtin_item.on_step(self, dtime) + + if self.flammable then + -- flammable, check for igniters + self.ignite_timer = (self.ignite_timer or 0) + dtime + if self.ignite_timer > 10 then + self.ignite_timer = 0 + + local node = minetest.get_node_or_nil(self.object:get_pos()) + if not node then + return + end + + -- Immediately burn up flammable items in lava + if minetest.get_item_group(node.name, "lava") > 0 then + self:burn_up() + else + -- otherwise there'll be a chance based on its igniter value + local burn_chance = self.flammable + * minetest.get_item_group(node.name, "igniter") + if burn_chance > 0 and math.random(0, burn_chance) ~= 0 then + self:burn_up() + end + end + end + end + end, +} + +-- set defined item as new __builtin:item, with the old one as fallback table +setmetatable(item, builtin_item) +minetest.register_entity(":__builtin:item", item) diff --git a/mods/default/legacy.lua b/mods/default/legacy.lua new file mode 100755 index 0000000..123fcd5 --- /dev/null +++ b/mods/default/legacy.lua @@ -0,0 +1,46 @@ +-- mods/default/legacy.lua + +-- Horrible stuff to support old code registering falling nodes +-- Don't use this and never do what this does, it's completely wrong! +-- (More specifically, the client and the C++ code doesn't get the group) +function default.register_falling_node(nodename, texture) + minetest.log("error", debug.traceback()) + minetest.log('error', "WARNING: default.register_falling_node is deprecated") + if minetest.registered_nodes[nodename] then + minetest.registered_nodes[nodename].groups.falling_node = 1 + end +end + +function default.spawn_falling_node(p, nodename) + spawn_falling_node(p, nodename) +end + +-- Liquids +WATER_ALPHA = minetest.registered_nodes["default:water_source"].alpha +WATER_VISC = minetest.registered_nodes["default:water_source"].liquid_viscosity +LAVA_VISC = minetest.registered_nodes["default:lava_source"].liquid_viscosity +LIGHT_MAX = default.LIGHT_MAX + +-- Formspecs +default.gui_suvival_form = default.gui_survival_form + +-- Players +if minetest.get_modpath("player_api") then + default.registered_player_models = player_api.registered_models + default.player_register_model = player_api.register_model + default.player_attached = player_api.player_attached + default.player_get_animation = player_api.get_animation + default.player_set_model = player_api.set_model + default.player_set_textures = player_api.set_textures + default.player_set_animation = player_api.set_animation +end + +-- Chests +default.register_chest = default.chest.register_chest + +-- Check for a volume intersecting protection +function default.intersects_protection(minp, maxp, player_name, interval) + minetest.log("warning", "default.intersects_protection() is " .. + "deprecated, use minetest.is_area_protected() instead.") + minetest.is_area_protected(minp, maxp, player_name, interval) +end diff --git a/mods/default/license.txt b/mods/default/license.txt new file mode 100755 index 0000000..4610bac --- /dev/null +++ b/mods/default/license.txt @@ -0,0 +1,154 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2016 celeron55, Perttu Ahola +Copyright (C) 2011-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures, models and sounds) +----------------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2010-2017: + + celeron55, Perttu Ahola + Cisoun + G4JC + VanessaE + RealBadAngel + Calinou + MirceaKitsune + Jordach + PilzAdam + jojoa1997 + InfinityProject + Splizard + Zeg9 + paramat + BlockMen + sofar + Neuromancer + Gambit + asl97 + KevDoy + Mito551 + GreenXenith + kaeza + kilbith + tobyplowy + CloudyProton + TumeniNodes + Mossmanikin + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ + +----------------------- + +Attribution 3.0 Unported (CC BY 3.0) + +Copyright (C) 2009 cmusounddesign +Copyright (C) 2010 Tomlija +Copyright (C) 2010 lsprice +Copyright (C) 2014 sonictechtonic +Copyright (C) 2015 yadronoff +Copyright (C) 2007 HerbertBoland +Copyright (C) 2006 AGFX + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by/3.0/ + +----------------------- + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + +Iwan Gabovitch +Ottomaani138 +Ogrebane +blukotek +Sevin7 +Yoyodaman234 +Ryding + +No Copyright + +The person who associated a work with this deed has dedicated the work to the +public domain by waiving all of his or her rights to the work worldwide under +copyright law, including all related and neighboring rights, to the extent +allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial +purposes, all without asking permission. See Other Information below. + +Other Information: + +In no way are the patent or trademark rights of any person affected by CC0, nor +are the rights that other persons may have in the work or in how the work is +used, such as publicity or privacy rights. + +Unless expressly stated otherwise, the person who associated a work with this +deed makes no warranties about the work, and disclaims liability for all uses +of the work, to the fullest extent permitted by applicable law. + +When using or citing the work, you should not imply endorsement by the author +or the affirmer. + +For more details: +https://creativecommons.org/publicdomain/zero/1.0/ diff --git a/mods/ITEMS/chests/models/chest_open.obj b/mods/default/models/chest_open.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/chests/models/chest_open.obj rename to mods/default/models/chest_open.obj diff --git a/mods/ITEMS/torches/models/torches_torch_ceiling.obj b/mods/default/models/torch_ceiling.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/torches/models/torches_torch_ceiling.obj rename to mods/default/models/torch_ceiling.obj diff --git a/mods/ITEMS/torches/models/torches_torch_floor.obj b/mods/default/models/torch_floor.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/torches/models/torches_torch_floor.obj rename to mods/default/models/torch_floor.obj diff --git a/mods/ITEMS/torches/models/torches_torch_wall.obj b/mods/default/models/torch_wall.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/torches/models/torches_torch_wall.obj rename to mods/default/models/torch_wall.obj diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua new file mode 100755 index 0000000..bab95f3 --- /dev/null +++ b/mods/default/nodes.lua @@ -0,0 +1,2595 @@ +-- mods/default/nodes.lua + + +--[[ Node name convention: + +Although many node names are in combined-word form, the required form for new +node names is words separated by underscores. If both forms are used in written +language (for example pinewood and pine wood) the underscore form should be used. + +--]] + + +--[[ Index: + +Stone +----- +(1. Material 2. Cobble variant 3. Brick variant 4. Modified forms) + +default:stone +default:cobble +default:stonebrick +default:stone_block +default:mossycobble + +default:desert_stone +default:desert_cobble +default:desert_stonebrick +default:desert_stone_block + +default:sandstone +default:sandstonebrick +default:sandstone_block +default:desert_sandstone +default:desert_sandstone_brick +default:desert_sandstone_block +default:silver_sandstone +default:silver_sandstone_brick +default:silver_sandstone_block + +default:obsidian +default:obsidianbrick +default:obsidian_block + +Soft / Non-Stone +---------------- +(1. Material 2. Modified forms) + +default:dirt +default:dirt_with_grass +default:dirt_with_grass_footsteps +default:dirt_with_dry_grass +default:dirt_with_snow +default:dirt_with_rainforest_litter +default:dirt_with_coniferous_litter + +default:permafrost +default:permafrost_with_stones +default:permafrost_with_moss + +default:sand +default:desert_sand +default:silver_sand + +default:gravel + +default:clay + +default:snow +default:snowblock + +default:ice +default:cave_ice + +Trees +----- +(1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling 5. Fruits) + +default:tree +default:wood +default:leaves +default:sapling +default:apple + +default:jungletree +default:junglewood +default:jungleleaves +default:junglesapling +default:emergent_jungle_sapling + +default:pine_tree +default:pine_wood +default:pine_needles +default:pine_sapling + +default:acacia_tree +default:acacia_wood +default:acacia_leaves +default:acacia_sapling + +default:aspen_tree +default:aspen_wood +default:aspen_leaves +default:aspen_sapling + +Ores +---- +(1. In stone 2. Blocks) + +default:stone_with_coal +default:coalblock + +default:stone_with_iron +default:steelblock + +default:stone_with_copper +default:copperblock + +default:stone_with_tin +default:tinblock + +default:bronzeblock + +default:stone_with_gold +default:goldblock + +default:stone_with_mese +default:mese + +default:stone_with_diamond +default:diamondblock + +Plantlife +--------- + +default:cactus +default:papyrus +default:dry_shrub +default:junglegrass + +default:grass_1 +default:grass_2 +default:grass_3 +default:grass_4 +default:grass_5 + +default:dry_grass_1 +default:dry_grass_2 +default:dry_grass_3 +default:dry_grass_4 +default:dry_grass_5 + +default:fern_1 +default:fern_2 +default:fern_3 + +default:marram_grass_1 +default:marram_grass_2 +default:marram_grass_3 + +default:bush_stem +default:bush_leaves +default:bush_sapling +default:acacia_bush_stem +default:acacia_bush_leaves +default:acacia_bush_sapling +default:pine_bush_stem +default:pine_bush_needles +default:pine_bush_sapling + +default:sand_with_kelp + +Corals +------ + +default:coral_brown +default:coral_orange +default:coral_skeleton + +Liquids +------- +(1. Source 2. Flowing) + +default:water_source +default:water_flowing + +default:river_water_source +default:river_water_flowing + +default:lava_source +default:lava_flowing + +Tools / "Advanced" crafting / Non-"natural" +------------------------------------------- + +default:bookshelf + +default:sign_wall_wood +default:sign_wall_steel + +default:ladder_wood +default:ladder_steel + +default:fence_wood +default:fence_acacia_wood +default:fence_junglewood +default:fence_pine_wood +default:fence_aspen_wood + +default:glass +default:obsidian_glass + +default:brick + +default:meselamp +default:mese_post_light + +Misc +---- + +default:cloud + +--]] + +-- +-- Stone +-- + +minetest.register_node("default:stone", { + description = "Stone", + tiles = {"default_stone.png"}, + groups = {cracky = 3, stone = 1}, + drop = 'default:cobble', + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:cobble", { + description = "Cobblestone", + tiles = {"default_cobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:stonebrick", { + description = "Stone Brick", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_stone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:stone_block", { + description = "Stone Block", + tiles = {"default_stone_block.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:mossycobble", { + description = "Mossy Cobblestone", + tiles = {"default_mossycobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("default:desert_stone", { + description = "Desert Stone", + tiles = {"default_desert_stone.png"}, + groups = {cracky = 3, stone = 1}, + drop = 'default:desert_cobble', + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_cobble", { + description = "Desert Cobblestone", + tiles = {"default_desert_cobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_stonebrick", { + description = "Desert Stone Brick", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_desert_stone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_stone_block", { + description = "Desert Stone Block", + tiles = {"default_desert_stone_block.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:sandstone", { + description = "Sandstone", + tiles = {"default_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:sandstonebrick", { + description = "Sandstone Brick", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:sandstone_block", { + description = "Sandstone Block", + tiles = {"default_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone", { + description = "Desert Sandstone", + tiles = {"default_desert_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone_brick", { + description = "Desert Sandstone Brick", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_desert_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone_block", { + description = "Desert Sandstone Block", + tiles = {"default_desert_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone", { + description = "Silver Sandstone", + tiles = {"default_silver_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone_brick", { + description = "Silver Sandstone Brick", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_silver_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone_block", { + description = "Silver Sandstone Block", + tiles = {"default_silver_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:obsidian", { + description = "Obsidian", + tiles = {"default_obsidian.png"}, + sounds = default.node_sound_stone_defaults(), + groups = {cracky = 1, level = 2}, +}) + +minetest.register_node("default:obsidianbrick", { + description = "Obsidian Brick", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_obsidian_brick.png"}, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + groups = {cracky = 1, level = 2}, +}) + +minetest.register_node("default:obsidian_block", { + description = "Obsidian Block", + tiles = {"default_obsidian_block.png"}, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + groups = {cracky = 1, level = 2}, +}) + +-- +-- Soft / Non-Stone +-- + +minetest.register_node("default:dirt", { + description = "Dirt", + tiles = {"default_dirt.png"}, + groups = {crumbly = 3, soil = 1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("default:dirt_with_grass", { + description = "Dirt with Grass", + tiles = {"default_grass.png", "default_dirt.png", + {name = "default_dirt.png^default_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), +}) + +minetest.register_node("default:dirt_with_grass_footsteps", { + description = "Dirt with Grass and Footsteps", + tiles = {"default_grass.png^default_footprint.png", "default_dirt.png", + {name = "default_dirt.png^default_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), +}) + +minetest.register_node("default:dirt_with_dry_grass", { + description = "Dirt with Dry Grass", + tiles = {"default_dry_grass.png", + "default_dirt.png", + {name = "default_dirt.png^default_dry_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:dirt_with_snow", { + description = "Dirt with Snow", + tiles = {"default_snow.png", "default_dirt.png", + {name = "default_dirt.png^default_snow_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1, snowy = 1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_snow_footstep", gain = 0.2}, + }), +}) + +minetest.register_node("default:dirt_with_rainforest_litter", { + description = "Dirt with Rainforest Litter", + tiles = { + "default_rainforest_litter.png", + "default_dirt.png", + {name = "default_dirt.png^default_rainforest_litter_side.png", + tileable_vertical = false} + }, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:dirt_with_coniferous_litter", { + description = "Dirt with Coniferous Litter", + tiles = { + "default_coniferous_litter.png", + "default_dirt.png", + {name = "default_dirt.png^default_coniferous_litter_side.png", + tileable_vertical = false} + }, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:permafrost", { + description = "Permafrost", + tiles = {"default_permafrost.png"}, + groups = {cracky = 3}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("default:permafrost_with_stones", { + description = "Permafrost with Stones", + tiles = {"default_permafrost.png^default_stones.png", + "default_permafrost.png"}, + groups = {cracky = 3}, + drop = "default:permafrost", + sounds = default.node_sound_gravel_defaults(), +}) + +minetest.register_node("default:permafrost_with_moss", { + description = "Permafrost with Moss", + tiles = {"default_moss.png", "default_permafrost.png", + {name = "default_permafrost.png^default_moss_side.png", + tileable_vertical = false}}, + groups = {cracky = 3}, + drop = "default:permafrost", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), +}) + +minetest.register_node("default:sand", { + description = "Sand", + tiles = {"default_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), +}) + +minetest.register_node("default:desert_sand", { + description = "Desert Sand", + tiles = {"default_desert_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), +}) + +minetest.register_node("default:silver_sand", { + description = "Silver Sand", + tiles = {"default_silver_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), +}) + + +minetest.register_node("default:gravel", { + description = "Gravel", + tiles = {"default_gravel.png"}, + groups = {crumbly = 2, falling_node = 1}, + sounds = default.node_sound_gravel_defaults(), + drop = { + max_items = 1, + items = { + {items = {'default:flint'}, rarity = 16}, + {items = {'default:gravel'}} + } + } +}) + +minetest.register_node("default:clay", { + description = "Clay", + tiles = {"default_clay.png"}, + groups = {crumbly = 3}, + drop = 'default:clay_lump 4', + sounds = default.node_sound_dirt_defaults(), +}) + + +minetest.register_node("default:snow", { + description = "Snow", + tiles = {"default_snow.png"}, + inventory_image = "default_snowball.png", + wield_image = "default_snowball.png", + paramtype = "light", + buildable_to = true, + floodable = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + }, + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -7 / 16, 0.5}, + }, + }, + groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1, snowy = 1}, + sounds = default.node_sound_snow_defaults(), + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + end + end, +}) + +minetest.register_node("default:snowblock", { + description = "Snow Block", + tiles = {"default_snow.png"}, + groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1, snowy = 1}, + sounds = default.node_sound_snow_defaults(), + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + end + end, +}) + +-- 'is ground content = false' to avoid tunnels in sea ice or ice rivers +minetest.register_node("default:ice", { + description = "Ice", + tiles = {"default_ice.png"}, + is_ground_content = false, + paramtype = "light", + groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1, slippery = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +-- Mapgen-placed ice with 'is ground content = true' to contain tunnels +minetest.register_node("default:cave_ice", { + description = "Cave Ice", + tiles = {"default_ice.png"}, + paramtype = "light", + groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1, slippery = 3}, + drop = "default:ice", + sounds = default.node_sound_glass_defaults(), +}) + +-- +-- Trees +-- + +minetest.register_node("default:tree", { + description = "Apple Tree", + tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:wood", { + description = "Apple Wood Planks", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_wood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:sapling", { + description = "Apple Tree Sapling", + drawtype = "plantlike", + tiles = {"default_sapling.png"}, + inventory_image = "default_sapling.png", + wield_image = "default_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 6, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +minetest.register_node("default:leaves", { + description = "Apple Tree Leaves", + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_leaves.png"}, + special_tiles = {"default_leaves_simple.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + { + -- player will get sapling with 1/20 chance + items = {'default:sapling'}, + rarity = 20, + }, + { + -- player will get leaves only if he get no saplings, + -- this is because max_items is 1 + items = {'default:leaves'}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:apple", { + description = "Apple", + drawtype = "plantlike", + tiles = {"default_apple.png"}, + inventory_image = "default_apple.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + is_ground_content = false, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -7 / 16, -3 / 16, 3 / 16, 4 / 16, 3 / 16} + }, + groups = {fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1, food_apple = 1}, + on_use = minetest.item_eat(2), + sounds = default.node_sound_leaves_defaults(), + + after_place_node = function(pos, placer, itemstack) + minetest.set_node(pos, {name = "default:apple", param2 = 1}) + end, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + if oldnode.param2 == 0 then + minetest.set_node(pos, {name = "default:apple_mark"}) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end + end, +}) + +minetest.register_node("default:apple_mark", { + description = "Apple Marker", + drawtype = "airlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + groups = {not_in_creative_inventory = 1}, + on_timer = function(pos, elapsed) + if not minetest.find_node_near(pos, 1, "default:leaves") then + minetest.remove_node(pos) + elseif minetest.get_node_light(pos) < 11 then + minetest.get_node_timer(pos):start(200) + else + minetest.set_node(pos, {name = "default:apple"}) + end + end +}) + + +minetest.register_node("default:jungletree", { + description = "Jungle Tree", + tiles = {"default_jungletree_top.png", "default_jungletree_top.png", + "default_jungletree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:junglewood", { + description = "Jungle Wood Planks", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_junglewood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:jungleleaves", { + description = "Jungle Tree Leaves", + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_jungleleaves.png"}, + special_tiles = {"default_jungleleaves_simple.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {'default:junglesapling'}, rarity = 20}, + {items = {'default:jungleleaves'}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:junglesapling", { + description = "Jungle Tree Sapling", + drawtype = "plantlike", + tiles = {"default_junglesapling.png"}, + inventory_image = "default_junglesapling.png", + wield_image = "default_junglesapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:junglesapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 15, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +minetest.register_node("default:emergent_jungle_sapling", { + description = "Emergent Jungle Tree Sapling", + drawtype = "plantlike", + tiles = {"default_emergent_jungle_sapling.png"}, + inventory_image = "default_emergent_jungle_sapling.png", + wield_image = "default_emergent_jungle_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:emergent_jungle_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -3, y = -5, z = -3}, + {x = 3, y = 31, z = 3}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + + +minetest.register_node("default:pine_tree", { + description = "Pine Tree", + tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", + "default_pine_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:pine_wood", { + description = "Pine Wood Planks", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_pine_wood.png"}, + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:pine_needles",{ + description = "Pine Needles", + drawtype = "allfaces_optional", + tiles = {"default_pine_needles.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:pine_sapling"}, rarity = 20}, + {items = {"default:pine_needles"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:pine_sapling", { + description = "Pine Tree Sapling", + drawtype = "plantlike", + tiles = {"default_pine_sapling.png"}, + inventory_image = "default_pine_sapling.png", + wield_image = "default_pine_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 3, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:pine_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 14, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + + +minetest.register_node("default:acacia_tree", { + description = "Acacia Tree", + tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png", + "default_acacia_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:acacia_wood", { + description = "Acacia Wood Planks", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_acacia_wood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:acacia_leaves", { + description = "Acacia Tree Leaves", + drawtype = "allfaces_optional", + tiles = {"default_acacia_leaves.png"}, + special_tiles = {"default_acacia_leaves_simple.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:acacia_sapling"}, rarity = 20}, + {items = {"default:acacia_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:acacia_sapling", { + description = "Acacia Tree Sapling", + drawtype = "plantlike", + tiles = {"default_acacia_sapling.png"}, + inventory_image = "default_acacia_sapling.png", + wield_image = "default_acacia_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:acacia_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -4, y = 1, z = -4}, + {x = 4, y = 7, z = 4}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +minetest.register_node("default:aspen_tree", { + description = "Aspen Tree", + tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png", + "default_aspen_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:aspen_wood", { + description = "Aspen Wood Planks", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_aspen_wood.png"}, + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:aspen_leaves", { + description = "Aspen Tree Leaves", + drawtype = "allfaces_optional", + tiles = {"default_aspen_leaves.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:aspen_sapling"}, rarity = 20}, + {items = {"default:aspen_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:aspen_sapling", { + description = "Aspen Tree Sapling", + drawtype = "plantlike", + tiles = {"default_aspen_sapling.png"}, + inventory_image = "default_aspen_sapling.png", + wield_image = "default_aspen_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 3, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:aspen_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 12, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +-- +-- Ores +-- + +minetest.register_node("default:stone_with_coal", { + description = "Coal Ore", + tiles = {"default_stone.png^default_mineral_coal.png"}, + groups = {cracky = 3}, + drop = 'default:coal_lump', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:coalblock", { + description = "Coal Block", + tiles = {"default_coal_block.png"}, + is_ground_content = false, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("default:stone_with_iron", { + description = "Iron Ore", + tiles = {"default_stone.png^default_mineral_iron.png"}, + groups = {cracky = 2}, + drop = 'default:iron_lump', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:steelblock", { + description = "Steel Block", + tiles = {"default_steel_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_copper", { + description = "Copper Ore", + tiles = {"default_stone.png^default_mineral_copper.png"}, + groups = {cracky = 2}, + drop = 'default:copper_lump', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:copperblock", { + description = "Copper Block", + tiles = {"default_copper_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_tin", { + description = "Tin Ore", + tiles = {"default_stone.png^default_mineral_tin.png"}, + groups = {cracky = 2}, + drop = "default:tin_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:tinblock", { + description = "Tin Block", + tiles = {"default_tin_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:bronzeblock", { + description = "Bronze Block", + tiles = {"default_bronze_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_mese", { + description = "Mese Ore", + tiles = {"default_stone.png^default_mineral_mese.png"}, + groups = {cracky = 1}, + drop = "default:mese_crystal", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:mese", { + description = "Mese Block", + tiles = {"default_mese_block.png"}, + paramtype = "light", + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_stone_defaults(), + light_source = 3, +}) + + +minetest.register_node("default:stone_with_gold", { + description = "Gold Ore", + tiles = {"default_stone.png^default_mineral_gold.png"}, + groups = {cracky = 2}, + drop = "default:gold_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:goldblock", { + description = "Gold Block", + tiles = {"default_gold_block.png"}, + is_ground_content = false, + groups = {cracky = 1}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_diamond", { + description = "Diamond Ore", + tiles = {"default_stone.png^default_mineral_diamond.png"}, + groups = {cracky = 1}, + drop = "default:diamond", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:diamondblock", { + description = "Diamond Block", + tiles = {"default_diamond_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +-- +-- Plantlife (non-cubic) +-- + +minetest.register_node("default:cactus", { + description = "Cactus", + tiles = {"default_cactus_top.png", "default_cactus_top.png", + "default_cactus_side.png"}, + paramtype2 = "facedir", + groups = {choppy = 3}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node, +}) + +minetest.register_node("default:papyrus", { + description = "Papyrus", + drawtype = "plantlike", + tiles = {"default_papyrus.png"}, + inventory_image = "default_papyrus.png", + wield_image = "default_papyrus.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, + }, + groups = {snappy = 3, flammable = 2}, + sounds = default.node_sound_leaves_defaults(), + + after_dig_node = function(pos, node, metadata, digger) + default.dig_up(pos, node, digger) + end, +}) + +minetest.register_node("default:dry_shrub", { + description = "Dry Shrub", + drawtype = "plantlike", + waving = 1, + tiles = {"default_dry_shrub.png"}, + inventory_image = "default_dry_shrub.png", + wield_image = "default_dry_shrub.png", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 4, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 4 / 16, 6 / 16}, + }, +}) + +minetest.register_node("default:junglegrass", { + description = "Jungle Grass", + drawtype = "plantlike", + waving = 1, + visual_scale = 1.69, + tiles = {"default_junglegrass.png"}, + inventory_image = "default_junglegrass.png", + wield_image = "default_junglegrass.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, + }, +}) + + +minetest.register_node("default:grass_1", { + description = "Grass", + drawtype = "plantlike", + waving = 1, + tiles = {"default_grass_1.png"}, + -- Use texture of a taller grass stage in inventory + inventory_image = "default_grass_3.png", + wield_image = "default_grass_3.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random grass node + local stack = ItemStack("default:grass_" .. math.random(1,5)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 5 do + minetest.register_node("default:grass_" .. i, { + description = "Grass", + drawtype = "plantlike", + waving = 1, + tiles = {"default_grass_" .. i .. ".png"}, + inventory_image = "default_grass_" .. i .. ".png", + wield_image = "default_grass_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "default:grass_1", + groups = {snappy = 3, flora = 1, attached_node = 1, + not_in_creative_inventory = 1, grass = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:dry_grass_1", { + description = "Dry Grass", + drawtype = "plantlike", + waving = 1, + tiles = {"default_dry_grass_1.png"}, + inventory_image = "default_dry_grass_3.png", + wield_image = "default_dry_grass_3.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, + attached_node = 1, dry_grass = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random dry grass node + local stack = ItemStack("default:dry_grass_" .. math.random(1, 5)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:dry_grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 5 do + minetest.register_node("default:dry_grass_" .. i, { + description = "Dry Grass", + drawtype = "plantlike", + waving = 1, + tiles = {"default_dry_grass_" .. i .. ".png"}, + inventory_image = "default_dry_grass_" .. i .. ".png", + wield_image = "default_dry_grass_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, + not_in_creative_inventory=1, dry_grass = 1}, + drop = "default:dry_grass_1", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -1 / 16, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:fern_1", { + description = "Fern", + drawtype = "plantlike", + waving = 1, + tiles = {"default_fern_1.png"}, + inventory_image = "default_fern_1.png", + wield_image = "default_fern_1.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random fern node + local stack = ItemStack("default:fern_" .. math.random(1, 3)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:fern_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 3 do + minetest.register_node("default:fern_" .. i, { + description = "Fern", + drawtype = "plantlike", + waving = 1, + visual_scale = 2, + tiles = {"default_fern_" .. i .. ".png"}, + inventory_image = "default_fern_" .. i .. ".png", + wield_image = "default_fern_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, + not_in_creative_inventory=1}, + drop = "default:fern_1", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:marram_grass_1", { + description = "Marram Grass", + drawtype = "plantlike", + waving = 1, + tiles = {"default_marram_grass_1.png"}, + inventory_image = "default_marram_grass_1.png", + wield_image = "default_marram_grass_1.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random marram grass node + local stack = ItemStack("default:marram_grass_" .. math.random(1, 3)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:marram_grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 3 do + minetest.register_node("default:marram_grass_" .. i, { + description = "Marram Grass", + drawtype = "plantlike", + waving = 1, + tiles = {"default_marram_grass_" .. i .. ".png"}, + inventory_image = "default_marram_grass_" .. i .. ".png", + wield_image = "default_marram_grass_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node = 1, + not_in_creative_inventory=1}, + drop = "default:marram_grass_1", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:bush_stem", { + description = "Bush Stem", + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_bush_stem.png"}, + inventory_image = "default_bush_stem.png", + wield_image = "default_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:bush_leaves", { + description = "Bush Leaves", + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_leaves_simple.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:bush_sapling"}, rarity = 5}, + {items = {"default:bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:bush_sapling", { + description = "Bush Sapling", + drawtype = "plantlike", + tiles = {"default_bush_sapling.png"}, + inventory_image = "default_bush_sapling.png", + wield_image = "default_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:acacia_bush_stem", { + description = "Acacia Bush Stem", + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_acacia_bush_stem.png"}, + inventory_image = "default_acacia_bush_stem.png", + wield_image = "default_acacia_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:acacia_bush_leaves", { + description = "Acacia Bush Leaves", + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_acacia_leaves_simple.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:acacia_bush_sapling"}, rarity = 5}, + {items = {"default:acacia_bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:acacia_bush_sapling", { + description = "Acacia Bush Sapling", + drawtype = "plantlike", + tiles = {"default_acacia_bush_sapling.png"}, + inventory_image = "default_acacia_bush_sapling.png", + wield_image = "default_acacia_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 2 / 16, 3 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:acacia_bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:pine_bush_stem", { + description = "Pine Bush Stem", + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_pine_bush_stem.png"}, + inventory_image = "default_pine_bush_stem.png", + wield_image = "default_pine_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:pine_bush_needles", { + description = "Pine Bush Needles", + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_pine_needles.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:pine_bush_sapling"}, rarity = 5}, + {items = {"default:pine_bush_needles"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:pine_bush_sapling", { + description = "Pine Bush Sapling", + drawtype = "plantlike", + tiles = {"default_pine_bush_sapling.png"}, + inventory_image = "default_pine_bush_sapling.png", + wield_image = "default_pine_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:pine_bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:sand_with_kelp", { + description = "Kelp", + drawtype = "plantlike_rooted", + waving = 1, + tiles = {"default_sand.png"}, + special_tiles = {{name = "default_kelp.png", tileable_vertical = true}}, + inventory_image = "default_kelp.png", + paramtype = "light", + paramtype2 = "leveled", + groups = {snappy = 3}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-2/16, 0.5, -2/16, 2/16, 3.5, 2/16}, + }, + }, + node_dig_prediction = "default:sand", + node_placement_prediction = "", + + on_place = function(itemstack, placer, pointed_thing) + -- Call on_rightclick if the pointed node defines it + if pointed_thing.type == "node" and placer and + not placer:get_player_control().sneak then + local node_ptu = minetest.get_node(pointed_thing.under) + local def_ptu = minetest.registered_nodes[node_ptu.name] + if def_ptu and def_ptu.on_rightclick then + return def_ptu.on_rightclick(pointed_thing.under, node_ptu, placer, + itemstack, pointed_thing) + end + end + + local pos = pointed_thing.under + if minetest.get_node(pos).name ~= "default:sand" then + return itemstack + end + + local height = math.random(4, 6) + local pos_top = {x = pos.x, y = pos.y + height, z = pos.z} + local node_top = minetest.get_node(pos_top) + local def_top = minetest.registered_nodes[node_top.name] + local player_name = placer:get_player_name() + + if def_top and def_top.liquidtype == "source" and + minetest.get_item_group(node_top.name, "water") > 0 then + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pos_top, player_name) then + minetest.set_node(pos, {name = "default:sand_with_kelp", + param2 = height * 16}) + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) + end + end + + return itemstack + end, + + after_destruct = function(pos, oldnode) + minetest.set_node(pos, {name = "default:sand"}) + end +}) + + +-- +-- Corals +-- + +minetest.register_node("default:coral_brown", { + description = "Brown Coral", + tiles = {"default_coral_brown.png"}, + groups = {cracky = 3}, + drop = "default:coral_skeleton", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:coral_orange", { + description = "Orange Coral", + tiles = {"default_coral_orange.png"}, + groups = {cracky = 3}, + drop = "default:coral_skeleton", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:coral_skeleton", { + description = "Coral Skeleton", + tiles = {"default_coral_skeleton.png"}, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +-- +-- Liquids +-- + +minetest.register_node("default:water_source", { + description = "Water Source", + drawtype = "liquid", + tiles = { + { + name = "default_water_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + special_tiles = { + -- New-style water source material (mostly unused) + { + name = "default_water_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + backface_culling = false, + }, + }, + alpha = 160, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "default:water_flowing", + liquid_alternative_source = "default:water_source", + liquid_viscosity = 1, + post_effect_color = {a = 103, r = 30, g = 60, b = 90}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + +minetest.register_node("default:water_flowing", { + description = "Flowing Water", + drawtype = "flowingliquid", + tiles = {"default_water.png"}, + special_tiles = { + { + name = "default_water_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + { + name = "default_water_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + }, + alpha = 160, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "default:water_flowing", + liquid_alternative_source = "default:water_source", + liquid_viscosity = 1, + post_effect_color = {a = 103, r = 30, g = 60, b = 90}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, + not_in_creative_inventory = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + + +minetest.register_node("default:river_water_source", { + description = "River Water Source", + drawtype = "liquid", + tiles = { + { + name = "default_river_water_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + special_tiles = { + { + name = "default_river_water_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + backface_culling = false, + }, + }, + alpha = 160, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "default:river_water_flowing", + liquid_alternative_source = "default:river_water_source", + liquid_viscosity = 1, + -- Not renewable to avoid horizontal spread of water sources in sloping + -- rivers that can cause water to overflow riverbanks and cause floods. + -- River water source is instead made renewable by the 'force renew' + -- option used in the 'bucket' mod by the river water bucket. + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + +minetest.register_node("default:river_water_flowing", { + description = "Flowing River Water", + drawtype = "flowingliquid", + tiles = {"default_river_water.png"}, + special_tiles = { + { + name = "default_river_water_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + { + name = "default_river_water_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + }, + alpha = 160, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "default:river_water_flowing", + liquid_alternative_source = "default:river_water_source", + liquid_viscosity = 1, + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, + not_in_creative_inventory = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + + +minetest.register_node("default:lava_source", { + description = "Lava Source", + drawtype = "liquid", + tiles = { + { + name = "default_lava_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }, + }, + special_tiles = { + -- New-style lava source material (mostly unused) + { + name = "default_lava_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + backface_culling = false, + }, + }, + paramtype = "light", + light_source = default.LIGHT_MAX - 1, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "default:lava_flowing", + liquid_alternative_source = "default:lava_source", + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = {a = 191, r = 255, g = 64, b = 0}, + groups = {lava = 3, liquid = 2, igniter = 1}, +}) + +minetest.register_node("default:lava_flowing", { + description = "Flowing Lava", + drawtype = "flowingliquid", + tiles = {"default_lava.png"}, + special_tiles = { + { + name = "default_lava_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.3, + }, + }, + { + name = "default_lava_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.3, + }, + }, + }, + paramtype = "light", + paramtype2 = "flowingliquid", + light_source = default.LIGHT_MAX - 1, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "default:lava_flowing", + liquid_alternative_source = "default:lava_source", + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = {a = 191, r = 255, g = 64, b = 0}, + groups = {lava = 3, liquid = 2, igniter = 1, + not_in_creative_inventory = 1}, +}) + +-- +-- Tools / "Advanced" crafting / Non-"natural" +-- + +local bookshelf_formspec = + "size[8,7;]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[context;books;0,0.3;8,2;]" .. + "list[current_player;main;0,2.85;8,1;]" .. + "list[current_player;main;0,4.08;8,3;8]" .. + "listring[context;books]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,2.85) + +local function update_bookshelf(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local invlist = inv:get_list("books") + + local formspec = bookshelf_formspec + -- Inventory slots overlay + local bx, by = 0, 0.3 + local n_written, n_empty = 0, 0 + for i = 1, 16 do + if i == 9 then + bx = 0 + by = by + 1 + end + local stack = invlist[i] + if stack:is_empty() then + formspec = formspec .. + "image[" .. bx .. "," .. by .. ";1,1;default_bookshelf_slot.png]" + else + local metatable = stack:get_meta():to_table() or {} + if metatable.fields and metatable.fields.text then + n_written = n_written + stack:get_count() + else + n_empty = n_empty + stack:get_count() + end + end + bx = bx + 1 + end + meta:set_string("formspec", formspec) + if n_written + n_empty == 0 then + meta:set_string("infotext", "Empty Bookshelf") + else + meta:set_string("infotext", "Bookshelf (" .. n_written .. + " written, " .. n_empty .. " empty books)") + end +end + +minetest.register_node("default:bookshelf", { + description = "Bookshelf", + tiles = {"default_wood.png", "default_wood.png", "default_wood.png", + "default_wood.png", "default_bookshelf.png", "default_bookshelf.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("books", 8 * 2) + update_bookshelf(pos) + end, + can_dig = function(pos,player) + local inv = minetest.get_meta(pos):get_inventory() + return inv:is_empty("books") + end, + allow_metadata_inventory_put = function(pos, listname, index, stack) + if minetest.get_item_group(stack:get_name(), "book") ~= 0 then + return stack:get_count() + end + return 0 + 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 bookshelf at " .. minetest.pos_to_string(pos)) + update_bookshelf(pos) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " puts stuff to bookshelf at " .. minetest.pos_to_string(pos)) + update_bookshelf(pos) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " takes stuff from bookshelf at " .. minetest.pos_to_string(pos)) + update_bookshelf(pos) + end, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "books", drops) + drops[#drops+1] = "default:bookshelf" + minetest.remove_node(pos) + return drops + end, +}) + +local function register_sign(material, desc, def) + minetest.register_node("default:sign_wall_" .. material, { + description = desc .. " Sign", + drawtype = "nodebox", + tiles = {"default_sign_wall_" .. material .. ".png"}, + inventory_image = "default_sign_" .. material .. ".png", + wield_image = "default_sign_" .. material .. ".png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + node_box = { + type = "wallmounted", + 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}, + }, + groups = def.groups, + legacy_wallmounted = true, + sounds = def.sounds, + + on_construct = function(pos) + --local n = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[text;;${text}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields)) + local player_name = sender:get_player_name() + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + local meta = minetest.get_meta(pos) + if not fields.text then return end + minetest.log("action", (player_name or "") .. " wrote \"" .. + fields.text .. "\" to sign at " .. minetest.pos_to_string(pos)) + meta:set_string("text", fields.text) + meta:set_string("infotext", '"' .. fields.text .. '"') + end, + }) +end + +register_sign("wood", "Wooden", { + sounds = default.node_sound_wood_defaults(), + groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3} +}) + +register_sign("steel", "Steel", { + sounds = default.node_sound_metal_defaults(), + groups = {cracky = 2, attached_node = 1} +}) + +minetest.register_node("default:ladder_wood", { + description = "Wooden Ladder", + drawtype = "signlike", + tiles = {"default_ladder_wood.png"}, + inventory_image = "default_ladder_wood.png", + wield_image = "default_ladder_wood.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + climbable = true, + is_ground_content = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2}, + legacy_wallmounted = true, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:ladder_steel", { + description = "Steel Ladder", + drawtype = "signlike", + tiles = {"default_ladder_steel.png"}, + inventory_image = "default_ladder_steel.png", + wield_image = "default_ladder_steel.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + climbable = true, + is_ground_content = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {cracky = 2}, + sounds = default.node_sound_metal_defaults(), +}) + +default.register_fence("default:fence_wood", { + description = "Apple Wood Fence", + texture = "default_fence_wood.png", + inventory_image = "default_fence_overlay.png^default_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_acacia_wood", { + description = "Acacia Wood Fence", + texture = "default_fence_acacia_wood.png", + inventory_image = "default_fence_overlay.png^default_acacia_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_acacia_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:acacia_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_junglewood", { + description = "Jungle Wood Fence", + texture = "default_fence_junglewood.png", + inventory_image = "default_fence_overlay.png^default_junglewood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_junglewood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:junglewood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_pine_wood", { + description = "Pine Wood Fence", + texture = "default_fence_pine_wood.png", + inventory_image = "default_fence_overlay.png^default_pine_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_pine_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:pine_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_aspen_wood", { + description = "Aspen Wood Fence", + texture = "default_fence_aspen_wood.png", + inventory_image = "default_fence_overlay.png^default_aspen_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_aspen_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:aspen_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_wood", { + description = "Apple Wood Fence Rail", + texture = "default_fence_rail_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_acacia_wood", { + description = "Acacia Wood Fence Rail", + texture = "default_fence_rail_acacia_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_acacia_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_acacia_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:acacia_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_junglewood", { + description = "Jungle Wood Fence Rail", + texture = "default_fence_rail_junglewood.png", + inventory_image = "default_fence_rail_overlay.png^default_junglewood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_junglewood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:junglewood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_pine_wood", { + description = "Pine Wood Fence Rail", + texture = "default_fence_rail_pine_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_pine_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_pine_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:pine_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_aspen_wood", { + description = "Aspen Wood Fence Rail", + texture = "default_fence_rail_aspen_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_aspen_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_aspen_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:aspen_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +minetest.register_node("default:glass", { + description = "Glass", + drawtype = "glasslike_framed_optional", + tiles = {"default_glass.png", "default_glass_detail.png"}, + paramtype = "light", + paramtype2 = "glasslikeliquidlevel", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("default:obsidian_glass", { + description = "Obsidian Glass", + drawtype = "glasslike_framed_optional", + tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"}, + paramtype = "light", + paramtype2 = "glasslikeliquidlevel", + is_ground_content = false, + sunlight_propagates = true, + sounds = default.node_sound_glass_defaults(), + groups = {cracky = 3}, +}) + + +minetest.register_node("default:brick", { + description = "Brick Block", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_brick.png"}, + is_ground_content = false, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("default:meselamp", { + description = "Mese Lamp", + drawtype = "glasslike", + tiles = {"default_meselamp.png"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), + light_source = default.LIGHT_MAX, +}) + +minetest.register_node("default:mese_post_light", { + description = "Mese Post Light", + tiles = {"default_mese_post_light_top.png", "default_mese_post_light_top.png", + "default_mese_post_light_side_dark.png", "default_mese_post_light_side_dark.png", + "default_mese_post_light_side.png", "default_mese_post_light_side.png"}, + wield_image = "default_mese_post_light_side.png", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16}, + }, + }, + paramtype = "light", + light_source = default.LIGHT_MAX, + sunlight_propagates = true, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), +}) + +-- +-- Misc +-- + +minetest.register_node("default:cloud", { + description = "Cloud", + tiles = {"default_cloud.png"}, + is_ground_content = false, + sounds = default.node_sound_defaults(), + groups = {not_in_creative_inventory = 1}, +}) + +-- +-- register trees for leafdecay +-- + +default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = {"default:apple", "default:leaves"}, + radius = 3, +}) + +default.register_leafdecay({ + trunks = {"default:jungletree"}, + leaves = {"default:jungleleaves"}, + radius = 2, +}) + +default.register_leafdecay({ + trunks = {"default:pine_tree"}, + leaves = {"default:pine_needles"}, + radius = 2, +}) + +default.register_leafdecay({ + trunks = {"default:acacia_tree"}, + leaves = {"default:acacia_leaves"}, + radius = 2, +}) + +default.register_leafdecay({ + trunks = {"default:aspen_tree"}, + leaves = {"default:aspen_leaves"}, + radius = 3, +}) + +default.register_leafdecay({ + trunks = {"default:bush_stem"}, + leaves = {"default:bush_leaves"}, + radius = 1, +}) + +default.register_leafdecay({ + trunks = {"default:acacia_bush_stem"}, + leaves = {"default:acacia_bush_leaves"}, + radius = 1, +}) + +default.register_leafdecay({ + trunks = {"default:pine_bush_stem"}, + leaves = {"default:pine_bush_needles"}, + radius = 1, +}) \ No newline at end of file diff --git a/mods/default/schematics/acacia_bush.mts b/mods/default/schematics/acacia_bush.mts new file mode 100755 index 0000000..3322e3b Binary files /dev/null and b/mods/default/schematics/acacia_bush.mts differ diff --git a/mods/default/schematics/acacia_tree.mts b/mods/default/schematics/acacia_tree.mts new file mode 100755 index 0000000..9b23498 Binary files /dev/null and b/mods/default/schematics/acacia_tree.mts differ diff --git a/mods/default/schematics/acacia_tree_from_sapling.mts b/mods/default/schematics/acacia_tree_from_sapling.mts new file mode 100755 index 0000000..c32a995 Binary files /dev/null and b/mods/default/schematics/acacia_tree_from_sapling.mts differ diff --git a/mods/ITEMS/default/schematics/apple_tree.mts b/mods/default/schematics/apple_tree.mts old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/schematics/apple_tree.mts rename to mods/default/schematics/apple_tree.mts diff --git a/mods/ITEMS/default/schematics/apple_tree_from_sapling.mts b/mods/default/schematics/apple_tree_from_sapling.mts old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/schematics/apple_tree_from_sapling.mts rename to mods/default/schematics/apple_tree_from_sapling.mts diff --git a/mods/ITEMS/default/schematics/aspen_tree.mts b/mods/default/schematics/aspen_tree.mts old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/schematics/aspen_tree.mts rename to mods/default/schematics/aspen_tree.mts diff --git a/mods/ITEMS/default/schematics/aspen_tree_from_sapling.mts b/mods/default/schematics/aspen_tree_from_sapling.mts old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/schematics/aspen_tree_from_sapling.mts rename to mods/default/schematics/aspen_tree_from_sapling.mts diff --git a/mods/ITEMS/default/schematics/bush.mts b/mods/default/schematics/bush.mts old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/schematics/bush.mts rename to mods/default/schematics/bush.mts diff --git a/mods/ITEMS/sea/schematics/corals.mts b/mods/default/schematics/corals.mts old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/sea/schematics/corals.mts rename to mods/default/schematics/corals.mts diff --git a/mods/default/schematics/emergent_jungle_tree.mts b/mods/default/schematics/emergent_jungle_tree.mts new file mode 100755 index 0000000..b526430 Binary files /dev/null and b/mods/default/schematics/emergent_jungle_tree.mts differ diff --git a/mods/default/schematics/emergent_jungle_tree_from_sapling.mts b/mods/default/schematics/emergent_jungle_tree_from_sapling.mts new file mode 100755 index 0000000..cb4e4e9 Binary files /dev/null and b/mods/default/schematics/emergent_jungle_tree_from_sapling.mts differ diff --git a/mods/default/schematics/jungle_tree.mts b/mods/default/schematics/jungle_tree.mts new file mode 100755 index 0000000..fe93c8c Binary files /dev/null and b/mods/default/schematics/jungle_tree.mts differ diff --git a/mods/default/schematics/jungle_tree_from_sapling.mts b/mods/default/schematics/jungle_tree_from_sapling.mts new file mode 100755 index 0000000..f32d312 Binary files /dev/null and b/mods/default/schematics/jungle_tree_from_sapling.mts differ diff --git a/mods/default/schematics/large_cactus.mts b/mods/default/schematics/large_cactus.mts new file mode 100755 index 0000000..b71077b Binary files /dev/null and b/mods/default/schematics/large_cactus.mts differ diff --git a/mods/default/schematics/papyrus.mts b/mods/default/schematics/papyrus.mts new file mode 100755 index 0000000..1333a7c Binary files /dev/null and b/mods/default/schematics/papyrus.mts differ diff --git a/mods/default/schematics/pine_bush.mts b/mods/default/schematics/pine_bush.mts new file mode 100644 index 0000000..fbc6e17 Binary files /dev/null and b/mods/default/schematics/pine_bush.mts differ diff --git a/mods/default/schematics/pine_tree.mts b/mods/default/schematics/pine_tree.mts new file mode 100755 index 0000000..c80532a Binary files /dev/null and b/mods/default/schematics/pine_tree.mts differ diff --git a/mods/default/schematics/pine_tree_from_sapling.mts b/mods/default/schematics/pine_tree_from_sapling.mts new file mode 100755 index 0000000..0800387 Binary files /dev/null and b/mods/default/schematics/pine_tree_from_sapling.mts differ diff --git a/mods/default/schematics/small_pine_tree.mts b/mods/default/schematics/small_pine_tree.mts new file mode 100755 index 0000000..1b27a84 Binary files /dev/null and b/mods/default/schematics/small_pine_tree.mts differ diff --git a/mods/default/schematics/small_pine_tree_from_sapling.mts b/mods/default/schematics/small_pine_tree_from_sapling.mts new file mode 100755 index 0000000..dc438a9 Binary files /dev/null and b/mods/default/schematics/small_pine_tree_from_sapling.mts differ diff --git a/mods/default/schematics/snowy_pine_tree_from_sapling.mts b/mods/default/schematics/snowy_pine_tree_from_sapling.mts new file mode 100755 index 0000000..3d502a3 Binary files /dev/null and b/mods/default/schematics/snowy_pine_tree_from_sapling.mts differ diff --git a/mods/default/schematics/snowy_small_pine_tree_from_sapling.mts b/mods/default/schematics/snowy_small_pine_tree_from_sapling.mts new file mode 100755 index 0000000..76fe345 Binary files /dev/null and b/mods/default/schematics/snowy_small_pine_tree_from_sapling.mts differ diff --git a/mods/ITEMS/default/sounds/default_break_glass.1.ogg b/mods/default/sounds/default_break_glass.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_break_glass.1.ogg rename to mods/default/sounds/default_break_glass.1.ogg diff --git a/mods/ITEMS/default/sounds/default_break_glass.2.ogg b/mods/default/sounds/default_break_glass.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_break_glass.2.ogg rename to mods/default/sounds/default_break_glass.2.ogg diff --git a/mods/ITEMS/default/sounds/default_break_glass.3.ogg b/mods/default/sounds/default_break_glass.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_break_glass.3.ogg rename to mods/default/sounds/default_break_glass.3.ogg diff --git a/mods/default/sounds/default_chest_close.ogg b/mods/default/sounds/default_chest_close.ogg new file mode 100755 index 0000000..068d900 Binary files /dev/null and b/mods/default/sounds/default_chest_close.ogg differ diff --git a/mods/default/sounds/default_chest_open.ogg b/mods/default/sounds/default_chest_open.ogg new file mode 100755 index 0000000..40b0b93 Binary files /dev/null and b/mods/default/sounds/default_chest_open.ogg differ diff --git a/mods/ITEMS/default/sounds/default_cool_lava.1.ogg b/mods/default/sounds/default_cool_lava.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_cool_lava.1.ogg rename to mods/default/sounds/default_cool_lava.1.ogg diff --git a/mods/ITEMS/default/sounds/default_cool_lava.2.ogg b/mods/default/sounds/default_cool_lava.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_cool_lava.2.ogg rename to mods/default/sounds/default_cool_lava.2.ogg diff --git a/mods/ITEMS/default/sounds/default_cool_lava.3.ogg b/mods/default/sounds/default_cool_lava.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_cool_lava.3.ogg rename to mods/default/sounds/default_cool_lava.3.ogg diff --git a/mods/ITEMS/default/sounds/default_dig_choppy.ogg b/mods/default/sounds/default_dig_choppy.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dig_choppy.ogg rename to mods/default/sounds/default_dig_choppy.ogg diff --git a/mods/ITEMS/default/sounds/default_dig_cracky.ogg b/mods/default/sounds/default_dig_cracky.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dig_cracky.ogg rename to mods/default/sounds/default_dig_cracky.ogg diff --git a/mods/ITEMS/default/sounds/default_dig_crumbly.ogg b/mods/default/sounds/default_dig_crumbly.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dig_crumbly.ogg rename to mods/default/sounds/default_dig_crumbly.ogg diff --git a/mods/ITEMS/default/sounds/default_dig_dig_immediate.ogg b/mods/default/sounds/default_dig_dig_immediate.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dig_dig_immediate.ogg rename to mods/default/sounds/default_dig_dig_immediate.ogg diff --git a/mods/ITEMS/default/sounds/default_dig_metal.ogg b/mods/default/sounds/default_dig_metal.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dig_metal.ogg rename to mods/default/sounds/default_dig_metal.ogg diff --git a/mods/ITEMS/default/sounds/default_dig_oddly_breakable_by_hand.ogg b/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dig_oddly_breakable_by_hand.ogg rename to mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg diff --git a/mods/ITEMS/default/sounds/default_dig_snappy.ogg b/mods/default/sounds/default_dig_snappy.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dig_snappy.ogg rename to mods/default/sounds/default_dig_snappy.ogg diff --git a/mods/default/sounds/default_dirt_footstep.1.ogg b/mods/default/sounds/default_dirt_footstep.1.ogg new file mode 100755 index 0000000..201aa3b Binary files /dev/null and b/mods/default/sounds/default_dirt_footstep.1.ogg differ diff --git a/mods/default/sounds/default_dirt_footstep.2.ogg b/mods/default/sounds/default_dirt_footstep.2.ogg new file mode 100755 index 0000000..2667dbc Binary files /dev/null and b/mods/default/sounds/default_dirt_footstep.2.ogg differ diff --git a/mods/ITEMS/default/sounds/default_dug_metal.1.ogg b/mods/default/sounds/default_dug_metal.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dug_metal.1.ogg rename to mods/default/sounds/default_dug_metal.1.ogg diff --git a/mods/ITEMS/default/sounds/default_dug_metal.2.ogg b/mods/default/sounds/default_dug_metal.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dug_metal.2.ogg rename to mods/default/sounds/default_dug_metal.2.ogg diff --git a/mods/ITEMS/default/sounds/default_dug_node.1.ogg b/mods/default/sounds/default_dug_node.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dug_node.1.ogg rename to mods/default/sounds/default_dug_node.1.ogg diff --git a/mods/ITEMS/default/sounds/default_dug_node.2.ogg b/mods/default/sounds/default_dug_node.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_dug_node.2.ogg rename to mods/default/sounds/default_dug_node.2.ogg diff --git a/mods/ITEMS/default/sounds/default_glass_footstep.ogg b/mods/default/sounds/default_glass_footstep.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_glass_footstep.ogg rename to mods/default/sounds/default_glass_footstep.ogg diff --git a/mods/ITEMS/default/sounds/default_grass_footstep.1.ogg b/mods/default/sounds/default_grass_footstep.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_grass_footstep.1.ogg rename to mods/default/sounds/default_grass_footstep.1.ogg diff --git a/mods/ITEMS/default/sounds/default_grass_footstep.2.ogg b/mods/default/sounds/default_grass_footstep.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_grass_footstep.2.ogg rename to mods/default/sounds/default_grass_footstep.2.ogg diff --git a/mods/ITEMS/default/sounds/default_grass_footstep.3.ogg b/mods/default/sounds/default_grass_footstep.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_grass_footstep.3.ogg rename to mods/default/sounds/default_grass_footstep.3.ogg diff --git a/mods/ITEMS/default/sounds/default_gravel_footstep.1.ogg b/mods/default/sounds/default_gravel_footstep.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_gravel_footstep.1.ogg rename to mods/default/sounds/default_gravel_footstep.1.ogg diff --git a/mods/ITEMS/default/sounds/default_gravel_footstep.2.ogg b/mods/default/sounds/default_gravel_footstep.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_gravel_footstep.2.ogg rename to mods/default/sounds/default_gravel_footstep.2.ogg diff --git a/mods/ITEMS/default/sounds/default_gravel_footstep.3.ogg b/mods/default/sounds/default_gravel_footstep.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_gravel_footstep.3.ogg rename to mods/default/sounds/default_gravel_footstep.3.ogg diff --git a/mods/ITEMS/default/sounds/default_gravel_footstep.4.ogg b/mods/default/sounds/default_gravel_footstep.4.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_gravel_footstep.4.ogg rename to mods/default/sounds/default_gravel_footstep.4.ogg diff --git a/mods/ITEMS/default/sounds/default_hard_footstep.1.ogg b/mods/default/sounds/default_hard_footstep.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_hard_footstep.1.ogg rename to mods/default/sounds/default_hard_footstep.1.ogg diff --git a/mods/ITEMS/default/sounds/default_hard_footstep.2.ogg b/mods/default/sounds/default_hard_footstep.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_hard_footstep.2.ogg rename to mods/default/sounds/default_hard_footstep.2.ogg diff --git a/mods/ITEMS/default/sounds/default_hard_footstep.3.ogg b/mods/default/sounds/default_hard_footstep.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_hard_footstep.3.ogg rename to mods/default/sounds/default_hard_footstep.3.ogg diff --git a/mods/ENTITIES/item_entity/sounds/item_entity_item_smoke.ogg b/mods/default/sounds/default_item_smoke.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/item_entity/sounds/item_entity_item_smoke.ogg rename to mods/default/sounds/default_item_smoke.ogg diff --git a/mods/ITEMS/default/sounds/default_metal_footstep.1.ogg b/mods/default/sounds/default_metal_footstep.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_metal_footstep.1.ogg rename to mods/default/sounds/default_metal_footstep.1.ogg diff --git a/mods/ITEMS/default/sounds/default_metal_footstep.2.ogg b/mods/default/sounds/default_metal_footstep.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_metal_footstep.2.ogg rename to mods/default/sounds/default_metal_footstep.2.ogg diff --git a/mods/ITEMS/default/sounds/default_metal_footstep.3.ogg b/mods/default/sounds/default_metal_footstep.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_metal_footstep.3.ogg rename to mods/default/sounds/default_metal_footstep.3.ogg diff --git a/mods/ITEMS/default/sounds/default_place_node.1.ogg b/mods/default/sounds/default_place_node.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_place_node.1.ogg rename to mods/default/sounds/default_place_node.1.ogg diff --git a/mods/ITEMS/default/sounds/default_place_node.2.ogg b/mods/default/sounds/default_place_node.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_place_node.2.ogg rename to mods/default/sounds/default_place_node.2.ogg diff --git a/mods/ITEMS/default/sounds/default_place_node.3.ogg b/mods/default/sounds/default_place_node.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_place_node.3.ogg rename to mods/default/sounds/default_place_node.3.ogg diff --git a/mods/ITEMS/default/sounds/default_place_node_hard.1.ogg b/mods/default/sounds/default_place_node_hard.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_place_node_hard.1.ogg rename to mods/default/sounds/default_place_node_hard.1.ogg diff --git a/mods/ITEMS/default/sounds/default_place_node_hard.2.ogg b/mods/default/sounds/default_place_node_hard.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_place_node_hard.2.ogg rename to mods/default/sounds/default_place_node_hard.2.ogg diff --git a/mods/ITEMS/default/sounds/default_place_node_metal.1.ogg b/mods/default/sounds/default_place_node_metal.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_place_node_metal.1.ogg rename to mods/default/sounds/default_place_node_metal.1.ogg diff --git a/mods/ITEMS/default/sounds/default_place_node_metal.2.ogg b/mods/default/sounds/default_place_node_metal.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_place_node_metal.2.ogg rename to mods/default/sounds/default_place_node_metal.2.ogg diff --git a/mods/ITEMS/default/sounds/default_sand_footstep.1.ogg b/mods/default/sounds/default_sand_footstep.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_sand_footstep.1.ogg rename to mods/default/sounds/default_sand_footstep.1.ogg diff --git a/mods/ITEMS/default/sounds/default_sand_footstep.2.ogg b/mods/default/sounds/default_sand_footstep.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_sand_footstep.2.ogg rename to mods/default/sounds/default_sand_footstep.2.ogg diff --git a/mods/default/sounds/default_snow_footstep.1.ogg b/mods/default/sounds/default_snow_footstep.1.ogg new file mode 100755 index 0000000..97cc825 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.1.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.2.ogg b/mods/default/sounds/default_snow_footstep.2.ogg new file mode 100755 index 0000000..97a6baa Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.2.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.3.ogg b/mods/default/sounds/default_snow_footstep.3.ogg new file mode 100755 index 0000000..bde1f21 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.3.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.4.ogg b/mods/default/sounds/default_snow_footstep.4.ogg new file mode 100755 index 0000000..8ca6a59 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.4.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.5.ogg b/mods/default/sounds/default_snow_footstep.5.ogg new file mode 100755 index 0000000..220d60c Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.5.ogg differ diff --git a/mods/ITEMS/default/sounds/default_tool_breaks.1.ogg b/mods/default/sounds/default_tool_breaks.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_tool_breaks.1.ogg rename to mods/default/sounds/default_tool_breaks.1.ogg diff --git a/mods/ITEMS/default/sounds/default_tool_breaks.2.ogg b/mods/default/sounds/default_tool_breaks.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_tool_breaks.2.ogg rename to mods/default/sounds/default_tool_breaks.2.ogg diff --git a/mods/ITEMS/default/sounds/default_tool_breaks.3.ogg b/mods/default/sounds/default_tool_breaks.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_tool_breaks.3.ogg rename to mods/default/sounds/default_tool_breaks.3.ogg diff --git a/mods/ITEMS/default/sounds/default_water_footstep.1.ogg b/mods/default/sounds/default_water_footstep.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_water_footstep.1.ogg rename to mods/default/sounds/default_water_footstep.1.ogg diff --git a/mods/ITEMS/default/sounds/default_water_footstep.2.ogg b/mods/default/sounds/default_water_footstep.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_water_footstep.2.ogg rename to mods/default/sounds/default_water_footstep.2.ogg diff --git a/mods/ITEMS/default/sounds/default_water_footstep.3.ogg b/mods/default/sounds/default_water_footstep.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_water_footstep.3.ogg rename to mods/default/sounds/default_water_footstep.3.ogg diff --git a/mods/ITEMS/default/sounds/default_water_footstep.4.ogg b/mods/default/sounds/default_water_footstep.4.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_water_footstep.4.ogg rename to mods/default/sounds/default_water_footstep.4.ogg diff --git a/mods/ITEMS/default/sounds/default_wood_footstep.1.ogg b/mods/default/sounds/default_wood_footstep.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_wood_footstep.1.ogg rename to mods/default/sounds/default_wood_footstep.1.ogg diff --git a/mods/ITEMS/default/sounds/default_wood_footstep.2.ogg b/mods/default/sounds/default_wood_footstep.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/sounds/default_wood_footstep.2.ogg rename to mods/default/sounds/default_wood_footstep.2.ogg diff --git a/mods/HUD/base_textures/textures/bubble.png b/mods/default/textures/bubble.png old mode 100644 new mode 100755 similarity index 100% rename from mods/HUD/base_textures/textures/bubble.png rename to mods/default/textures/bubble.png diff --git a/mods/HUD/base_textures/textures/crack_anylength.png b/mods/default/textures/crack_anylength.png old mode 100644 new mode 100755 similarity index 100% rename from mods/HUD/base_textures/textures/crack_anylength.png rename to mods/default/textures/crack_anylength.png diff --git a/mods/default/textures/default_acacia_bush_sapling.png b/mods/default/textures/default_acacia_bush_sapling.png new file mode 100755 index 0000000..940b3aa Binary files /dev/null and b/mods/default/textures/default_acacia_bush_sapling.png differ diff --git a/mods/default/textures/default_acacia_bush_stem.png b/mods/default/textures/default_acacia_bush_stem.png new file mode 100755 index 0000000..2903915 Binary files /dev/null and b/mods/default/textures/default_acacia_bush_stem.png differ diff --git a/mods/default/textures/default_acacia_leaves.png b/mods/default/textures/default_acacia_leaves.png new file mode 100755 index 0000000..626e1b3 Binary files /dev/null and b/mods/default/textures/default_acacia_leaves.png differ diff --git a/mods/default/textures/default_acacia_leaves_simple.png b/mods/default/textures/default_acacia_leaves_simple.png new file mode 100755 index 0000000..3c7015b Binary files /dev/null and b/mods/default/textures/default_acacia_leaves_simple.png differ diff --git a/mods/default/textures/default_acacia_sapling.png b/mods/default/textures/default_acacia_sapling.png new file mode 100755 index 0000000..07170a0 Binary files /dev/null and b/mods/default/textures/default_acacia_sapling.png differ diff --git a/mods/default/textures/default_acacia_tree.png b/mods/default/textures/default_acacia_tree.png new file mode 100755 index 0000000..58bb3c4 Binary files /dev/null and b/mods/default/textures/default_acacia_tree.png differ diff --git a/mods/default/textures/default_acacia_tree_top.png b/mods/default/textures/default_acacia_tree_top.png new file mode 100755 index 0000000..a8a0ce0 Binary files /dev/null and b/mods/default/textures/default_acacia_tree_top.png differ diff --git a/mods/default/textures/default_acacia_wood.png b/mods/default/textures/default_acacia_wood.png new file mode 100755 index 0000000..b5abf1e Binary files /dev/null and b/mods/default/textures/default_acacia_wood.png differ diff --git a/mods/default/textures/default_apple.png b/mods/default/textures/default_apple.png new file mode 100755 index 0000000..7549bfd Binary files /dev/null and b/mods/default/textures/default_apple.png differ diff --git a/mods/default/textures/default_aspen_leaves.png b/mods/default/textures/default_aspen_leaves.png new file mode 100755 index 0000000..7306423 Binary files /dev/null and b/mods/default/textures/default_aspen_leaves.png differ diff --git a/mods/default/textures/default_aspen_sapling.png b/mods/default/textures/default_aspen_sapling.png new file mode 100755 index 0000000..f8d9136 Binary files /dev/null and b/mods/default/textures/default_aspen_sapling.png differ diff --git a/mods/default/textures/default_aspen_tree.png b/mods/default/textures/default_aspen_tree.png new file mode 100755 index 0000000..cfb05fc Binary files /dev/null and b/mods/default/textures/default_aspen_tree.png differ diff --git a/mods/default/textures/default_aspen_tree_top.png b/mods/default/textures/default_aspen_tree_top.png new file mode 100755 index 0000000..fcca038 Binary files /dev/null and b/mods/default/textures/default_aspen_tree_top.png differ diff --git a/mods/default/textures/default_aspen_wood.png b/mods/default/textures/default_aspen_wood.png new file mode 100755 index 0000000..2b584b3 Binary files /dev/null and b/mods/default/textures/default_aspen_wood.png differ diff --git a/mods/default/textures/default_book.png b/mods/default/textures/default_book.png new file mode 100755 index 0000000..bcf1e6a Binary files /dev/null and b/mods/default/textures/default_book.png differ diff --git a/mods/default/textures/default_book_written.png b/mods/default/textures/default_book_written.png new file mode 100755 index 0000000..f23d122 Binary files /dev/null and b/mods/default/textures/default_book_written.png differ diff --git a/mods/ITEMS/books/textures/books_bookshelf.png b/mods/default/textures/default_bookshelf.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/books/textures/books_bookshelf.png rename to mods/default/textures/default_bookshelf.png diff --git a/mods/default/textures/default_bookshelf_slot.png b/mods/default/textures/default_bookshelf_slot.png new file mode 100755 index 0000000..cd2c8bc Binary files /dev/null and b/mods/default/textures/default_bookshelf_slot.png differ diff --git a/mods/ITEMS/default/textures/default_brick.png b/mods/default/textures/default_brick.png similarity index 100% rename from mods/ITEMS/default/textures/default_brick.png rename to mods/default/textures/default_brick.png diff --git a/mods/default/textures/default_bronze_block.png b/mods/default/textures/default_bronze_block.png new file mode 100755 index 0000000..1d0c9d5 Binary files /dev/null and b/mods/default/textures/default_bronze_block.png differ diff --git a/mods/default/textures/default_bronze_ingot.png b/mods/default/textures/default_bronze_ingot.png new file mode 100755 index 0000000..6cccdf6 Binary files /dev/null and b/mods/default/textures/default_bronze_ingot.png differ diff --git a/mods/default/textures/default_bush_sapling.png b/mods/default/textures/default_bush_sapling.png new file mode 100755 index 0000000..905ba4b Binary files /dev/null and b/mods/default/textures/default_bush_sapling.png differ diff --git a/mods/default/textures/default_bush_stem.png b/mods/default/textures/default_bush_stem.png new file mode 100755 index 0000000..18b615f Binary files /dev/null and b/mods/default/textures/default_bush_stem.png differ diff --git a/mods/default/textures/default_cactus_side.png b/mods/default/textures/default_cactus_side.png new file mode 100755 index 0000000..8d6c40c Binary files /dev/null and b/mods/default/textures/default_cactus_side.png differ diff --git a/mods/default/textures/default_cactus_top.png b/mods/default/textures/default_cactus_top.png new file mode 100755 index 0000000..cf46aa2 Binary files /dev/null and b/mods/default/textures/default_cactus_top.png differ diff --git a/mods/ITEMS/chests/textures/chests_chest_front.png b/mods/default/textures/default_chest_front.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/chests/textures/chests_chest_front.png rename to mods/default/textures/default_chest_front.png diff --git a/mods/ITEMS/chests/textures/chests_chest_inside.png b/mods/default/textures/default_chest_inside.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/chests/textures/chests_chest_inside.png rename to mods/default/textures/default_chest_inside.png diff --git a/mods/ITEMS/chests/textures/chests_chest_lock.png b/mods/default/textures/default_chest_lock.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/chests/textures/chests_chest_lock.png rename to mods/default/textures/default_chest_lock.png diff --git a/mods/ITEMS/chests/textures/chests_chest_side.png b/mods/default/textures/default_chest_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/chests/textures/chests_chest_side.png rename to mods/default/textures/default_chest_side.png diff --git a/mods/ITEMS/chests/textures/chests_chest_top.png b/mods/default/textures/default_chest_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/chests/textures/chests_chest_top.png rename to mods/default/textures/default_chest_top.png diff --git a/mods/ITEMS/default/textures/default_clay.png b/mods/default/textures/default_clay.png similarity index 100% rename from mods/ITEMS/default/textures/default_clay.png rename to mods/default/textures/default_clay.png diff --git a/mods/default/textures/default_clay_brick.png b/mods/default/textures/default_clay_brick.png new file mode 100755 index 0000000..b288ef0 Binary files /dev/null and b/mods/default/textures/default_clay_brick.png differ diff --git a/mods/default/textures/default_clay_lump.png b/mods/default/textures/default_clay_lump.png new file mode 100755 index 0000000..c1d0220 Binary files /dev/null and b/mods/default/textures/default_clay_lump.png differ diff --git a/mods/ITEMS/default/textures/default_cloud.png b/mods/default/textures/default_cloud.png similarity index 100% rename from mods/ITEMS/default/textures/default_cloud.png rename to mods/default/textures/default_cloud.png diff --git a/mods/default/textures/default_coal_block.png b/mods/default/textures/default_coal_block.png new file mode 100755 index 0000000..6fe9ed9 Binary files /dev/null and b/mods/default/textures/default_coal_block.png differ diff --git a/mods/default/textures/default_coal_lump.png b/mods/default/textures/default_coal_lump.png new file mode 100755 index 0000000..792961d Binary files /dev/null and b/mods/default/textures/default_coal_lump.png differ diff --git a/mods/ITEMS/default/textures/default_cobble.png b/mods/default/textures/default_cobble.png similarity index 100% rename from mods/ITEMS/default/textures/default_cobble.png rename to mods/default/textures/default_cobble.png diff --git a/mods/default/textures/default_coniferous_litter.png b/mods/default/textures/default_coniferous_litter.png new file mode 100755 index 0000000..da340e0 Binary files /dev/null and b/mods/default/textures/default_coniferous_litter.png differ diff --git a/mods/default/textures/default_coniferous_litter_side.png b/mods/default/textures/default_coniferous_litter_side.png new file mode 100755 index 0000000..0701461 Binary files /dev/null and b/mods/default/textures/default_coniferous_litter_side.png differ diff --git a/mods/default/textures/default_copper_block.png b/mods/default/textures/default_copper_block.png new file mode 100755 index 0000000..8533754 Binary files /dev/null and b/mods/default/textures/default_copper_block.png differ diff --git a/mods/default/textures/default_copper_ingot.png b/mods/default/textures/default_copper_ingot.png new file mode 100755 index 0000000..bcad9c0 Binary files /dev/null and b/mods/default/textures/default_copper_ingot.png differ diff --git a/mods/default/textures/default_copper_lump.png b/mods/default/textures/default_copper_lump.png new file mode 100755 index 0000000..998c592 Binary files /dev/null and b/mods/default/textures/default_copper_lump.png differ diff --git a/mods/ITEMS/sea/textures/sea_coral_brown.png b/mods/default/textures/default_coral_brown.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/sea/textures/sea_coral_brown.png rename to mods/default/textures/default_coral_brown.png diff --git a/mods/ITEMS/sea/textures/sea_coral_orange.png b/mods/default/textures/default_coral_orange.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/sea/textures/sea_coral_orange.png rename to mods/default/textures/default_coral_orange.png diff --git a/mods/ITEMS/sea/textures/sea_coral_skeleton.png b/mods/default/textures/default_coral_skeleton.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/sea/textures/sea_coral_skeleton.png rename to mods/default/textures/default_coral_skeleton.png diff --git a/mods/default/textures/default_desert_cobble.png b/mods/default/textures/default_desert_cobble.png new file mode 100755 index 0000000..fa1af5d Binary files /dev/null and b/mods/default/textures/default_desert_cobble.png differ diff --git a/mods/ITEMS/default/textures/default_desert_sand.png b/mods/default/textures/default_desert_sand.png similarity index 100% rename from mods/ITEMS/default/textures/default_desert_sand.png rename to mods/default/textures/default_desert_sand.png diff --git a/mods/ITEMS/default/textures/default_desert_sandstone.png b/mods/default/textures/default_desert_sandstone.png similarity index 100% rename from mods/ITEMS/default/textures/default_desert_sandstone.png rename to mods/default/textures/default_desert_sandstone.png diff --git a/mods/ITEMS/default/textures/default_desert_sandstone_block.png b/mods/default/textures/default_desert_sandstone_block.png similarity index 100% rename from mods/ITEMS/default/textures/default_desert_sandstone_block.png rename to mods/default/textures/default_desert_sandstone_block.png diff --git a/mods/ITEMS/default/textures/default_desert_sandstone_brick.png b/mods/default/textures/default_desert_sandstone_brick.png similarity index 100% rename from mods/ITEMS/default/textures/default_desert_sandstone_brick.png rename to mods/default/textures/default_desert_sandstone_brick.png diff --git a/mods/default/textures/default_desert_stone.png b/mods/default/textures/default_desert_stone.png new file mode 100755 index 0000000..5d3aded Binary files /dev/null and b/mods/default/textures/default_desert_stone.png differ diff --git a/mods/default/textures/default_desert_stone_block.png b/mods/default/textures/default_desert_stone_block.png new file mode 100755 index 0000000..9eb8e92 Binary files /dev/null and b/mods/default/textures/default_desert_stone_block.png differ diff --git a/mods/default/textures/default_desert_stone_brick.png b/mods/default/textures/default_desert_stone_brick.png new file mode 100755 index 0000000..a603d18 Binary files /dev/null and b/mods/default/textures/default_desert_stone_brick.png differ diff --git a/mods/default/textures/default_diamond.png b/mods/default/textures/default_diamond.png new file mode 100755 index 0000000..a8dac74 Binary files /dev/null and b/mods/default/textures/default_diamond.png differ diff --git a/mods/default/textures/default_diamond_block.png b/mods/default/textures/default_diamond_block.png new file mode 100755 index 0000000..20c33ed Binary files /dev/null and b/mods/default/textures/default_diamond_block.png differ diff --git a/mods/ITEMS/default/textures/default_dirt.png b/mods/default/textures/default_dirt.png similarity index 100% rename from mods/ITEMS/default/textures/default_dirt.png rename to mods/default/textures/default_dirt.png diff --git a/mods/ITEMS/default/textures/default_dry_grass.png b/mods/default/textures/default_dry_grass.png similarity index 100% rename from mods/ITEMS/default/textures/default_dry_grass.png rename to mods/default/textures/default_dry_grass.png diff --git a/mods/ITEMS/default/textures/default_dry_grass_1.png b/mods/default/textures/default_dry_grass_1.png similarity index 100% rename from mods/ITEMS/default/textures/default_dry_grass_1.png rename to mods/default/textures/default_dry_grass_1.png diff --git a/mods/ITEMS/default/textures/default_dry_grass_2.png b/mods/default/textures/default_dry_grass_2.png similarity index 100% rename from mods/ITEMS/default/textures/default_dry_grass_2.png rename to mods/default/textures/default_dry_grass_2.png diff --git a/mods/ITEMS/default/textures/default_dry_grass_3.png b/mods/default/textures/default_dry_grass_3.png similarity index 100% rename from mods/ITEMS/default/textures/default_dry_grass_3.png rename to mods/default/textures/default_dry_grass_3.png diff --git a/mods/ITEMS/default/textures/default_dry_grass_4.png b/mods/default/textures/default_dry_grass_4.png similarity index 100% rename from mods/ITEMS/default/textures/default_dry_grass_4.png rename to mods/default/textures/default_dry_grass_4.png diff --git a/mods/ITEMS/default/textures/default_dry_grass_5.png b/mods/default/textures/default_dry_grass_5.png similarity index 100% rename from mods/ITEMS/default/textures/default_dry_grass_5.png rename to mods/default/textures/default_dry_grass_5.png diff --git a/mods/ITEMS/default/textures/default_dry_grass_side.png b/mods/default/textures/default_dry_grass_side.png similarity index 100% rename from mods/ITEMS/default/textures/default_dry_grass_side.png rename to mods/default/textures/default_dry_grass_side.png diff --git a/mods/ITEMS/default/textures/default_dry_shrub.png b/mods/default/textures/default_dry_shrub.png similarity index 100% rename from mods/ITEMS/default/textures/default_dry_shrub.png rename to mods/default/textures/default_dry_shrub.png diff --git a/mods/default/textures/default_emergent_jungle_sapling.png b/mods/default/textures/default_emergent_jungle_sapling.png new file mode 100755 index 0000000..b363b3c Binary files /dev/null and b/mods/default/textures/default_emergent_jungle_sapling.png differ diff --git a/mods/ITEMS/fences/textures/fences_fence_acacia_wood.png b/mods/default/textures/default_fence_acacia_wood.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fences/textures/fences_fence_acacia_wood.png rename to mods/default/textures/default_fence_acacia_wood.png diff --git a/mods/ITEMS/fences/textures/fences_fence_aspen_wood.png b/mods/default/textures/default_fence_aspen_wood.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fences/textures/fences_fence_aspen_wood.png rename to mods/default/textures/default_fence_aspen_wood.png diff --git a/mods/ITEMS/fences/textures/fences_fence_junglewood.png b/mods/default/textures/default_fence_junglewood.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fences/textures/fences_fence_junglewood.png rename to mods/default/textures/default_fence_junglewood.png diff --git a/mods/ITEMS/fences/textures/fences_fence_overlay.png b/mods/default/textures/default_fence_overlay.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fences/textures/fences_fence_overlay.png rename to mods/default/textures/default_fence_overlay.png diff --git a/mods/ITEMS/fences/textures/fences_fence_pine_wood.png b/mods/default/textures/default_fence_pine_wood.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fences/textures/fences_fence_pine_wood.png rename to mods/default/textures/default_fence_pine_wood.png diff --git a/mods/default/textures/default_fence_rail_acacia_wood.png b/mods/default/textures/default_fence_rail_acacia_wood.png new file mode 100644 index 0000000..64dc90f Binary files /dev/null and b/mods/default/textures/default_fence_rail_acacia_wood.png differ diff --git a/mods/default/textures/default_fence_rail_aspen_wood.png b/mods/default/textures/default_fence_rail_aspen_wood.png new file mode 100644 index 0000000..ab16a60 Binary files /dev/null and b/mods/default/textures/default_fence_rail_aspen_wood.png differ diff --git a/mods/default/textures/default_fence_rail_junglewood.png b/mods/default/textures/default_fence_rail_junglewood.png new file mode 100644 index 0000000..ebc1ef0 Binary files /dev/null and b/mods/default/textures/default_fence_rail_junglewood.png differ diff --git a/mods/default/textures/default_fence_rail_overlay.png b/mods/default/textures/default_fence_rail_overlay.png new file mode 100644 index 0000000..4da47ae Binary files /dev/null and b/mods/default/textures/default_fence_rail_overlay.png differ diff --git a/mods/default/textures/default_fence_rail_pine_wood.png b/mods/default/textures/default_fence_rail_pine_wood.png new file mode 100644 index 0000000..fd8d99d Binary files /dev/null and b/mods/default/textures/default_fence_rail_pine_wood.png differ diff --git a/mods/default/textures/default_fence_rail_wood.png b/mods/default/textures/default_fence_rail_wood.png new file mode 100644 index 0000000..f84b755 Binary files /dev/null and b/mods/default/textures/default_fence_rail_wood.png differ diff --git a/mods/ITEMS/fences/textures/fences_fence_wood.png b/mods/default/textures/default_fence_wood.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fences/textures/fences_fence_wood.png rename to mods/default/textures/default_fence_wood.png diff --git a/mods/default/textures/default_fern_1.png b/mods/default/textures/default_fern_1.png new file mode 100755 index 0000000..b307986 Binary files /dev/null and b/mods/default/textures/default_fern_1.png differ diff --git a/mods/default/textures/default_fern_2.png b/mods/default/textures/default_fern_2.png new file mode 100755 index 0000000..6c5f7d5 Binary files /dev/null and b/mods/default/textures/default_fern_2.png differ diff --git a/mods/default/textures/default_fern_3.png b/mods/default/textures/default_fern_3.png new file mode 100755 index 0000000..2c1f605 Binary files /dev/null and b/mods/default/textures/default_fern_3.png differ diff --git a/mods/default/textures/default_flint.png b/mods/default/textures/default_flint.png new file mode 100755 index 0000000..226c740 Binary files /dev/null and b/mods/default/textures/default_flint.png differ diff --git a/mods/ITEMS/default/textures/default_footprint.png b/mods/default/textures/default_footprint.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/textures/default_footprint.png rename to mods/default/textures/default_footprint.png diff --git a/mods/ITEMS/furnace/textures/furnace_furnace_bottom.png b/mods/default/textures/default_furnace_bottom.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/furnace/textures/furnace_furnace_bottom.png rename to mods/default/textures/default_furnace_bottom.png diff --git a/mods/ITEMS/furnace/textures/furnace_furnace_fire_bg.png b/mods/default/textures/default_furnace_fire_bg.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/furnace/textures/furnace_furnace_fire_bg.png rename to mods/default/textures/default_furnace_fire_bg.png diff --git a/mods/ITEMS/furnace/textures/furnace_furnace_fire_fg.png b/mods/default/textures/default_furnace_fire_fg.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/furnace/textures/furnace_furnace_fire_fg.png rename to mods/default/textures/default_furnace_fire_fg.png diff --git a/mods/ITEMS/furnace/textures/furnace_furnace_front.png b/mods/default/textures/default_furnace_front.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/furnace/textures/furnace_furnace_front.png rename to mods/default/textures/default_furnace_front.png diff --git a/mods/ITEMS/furnace/textures/furnace_furnace_front_active.png b/mods/default/textures/default_furnace_front_active.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/furnace/textures/furnace_furnace_front_active.png rename to mods/default/textures/default_furnace_front_active.png diff --git a/mods/ITEMS/furnace/textures/furnace_furnace_side.png b/mods/default/textures/default_furnace_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/furnace/textures/furnace_furnace_side.png rename to mods/default/textures/default_furnace_side.png diff --git a/mods/ITEMS/furnace/textures/furnace_furnace_top.png b/mods/default/textures/default_furnace_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/furnace/textures/furnace_furnace_top.png rename to mods/default/textures/default_furnace_top.png diff --git a/mods/default/textures/default_glass.png b/mods/default/textures/default_glass.png new file mode 100755 index 0000000..da25402 Binary files /dev/null and b/mods/default/textures/default_glass.png differ diff --git a/mods/default/textures/default_glass_detail.png b/mods/default/textures/default_glass_detail.png new file mode 100755 index 0000000..d38dbb7 Binary files /dev/null and b/mods/default/textures/default_glass_detail.png differ diff --git a/mods/default/textures/default_gold_block.png b/mods/default/textures/default_gold_block.png new file mode 100755 index 0000000..170d50b Binary files /dev/null and b/mods/default/textures/default_gold_block.png differ diff --git a/mods/default/textures/default_gold_ingot.png b/mods/default/textures/default_gold_ingot.png new file mode 100755 index 0000000..ba66471 Binary files /dev/null and b/mods/default/textures/default_gold_ingot.png differ diff --git a/mods/default/textures/default_gold_lump.png b/mods/default/textures/default_gold_lump.png new file mode 100755 index 0000000..d5a1be7 Binary files /dev/null and b/mods/default/textures/default_gold_lump.png differ diff --git a/mods/ITEMS/default/textures/default_grass.png b/mods/default/textures/default_grass.png similarity index 100% rename from mods/ITEMS/default/textures/default_grass.png rename to mods/default/textures/default_grass.png diff --git a/mods/ITEMS/default/textures/default_grass_1.png b/mods/default/textures/default_grass_1.png similarity index 100% rename from mods/ITEMS/default/textures/default_grass_1.png rename to mods/default/textures/default_grass_1.png diff --git a/mods/ITEMS/default/textures/default_grass_2.png b/mods/default/textures/default_grass_2.png similarity index 100% rename from mods/ITEMS/default/textures/default_grass_2.png rename to mods/default/textures/default_grass_2.png diff --git a/mods/ITEMS/default/textures/default_grass_3.png b/mods/default/textures/default_grass_3.png similarity index 100% rename from mods/ITEMS/default/textures/default_grass_3.png rename to mods/default/textures/default_grass_3.png diff --git a/mods/ITEMS/default/textures/default_grass_4.png b/mods/default/textures/default_grass_4.png similarity index 100% rename from mods/ITEMS/default/textures/default_grass_4.png rename to mods/default/textures/default_grass_4.png diff --git a/mods/ITEMS/default/textures/default_grass_5.png b/mods/default/textures/default_grass_5.png similarity index 100% rename from mods/ITEMS/default/textures/default_grass_5.png rename to mods/default/textures/default_grass_5.png diff --git a/mods/ITEMS/default/textures/default_grass_side.png b/mods/default/textures/default_grass_side.png similarity index 100% rename from mods/ITEMS/default/textures/default_grass_side.png rename to mods/default/textures/default_grass_side.png diff --git a/mods/ITEMS/default/textures/default_gravel.png b/mods/default/textures/default_gravel.png similarity index 100% rename from mods/ITEMS/default/textures/default_gravel.png rename to mods/default/textures/default_gravel.png diff --git a/mods/ITEMS/default/textures/default_ice.png b/mods/default/textures/default_ice.png similarity index 100% rename from mods/ITEMS/default/textures/default_ice.png rename to mods/default/textures/default_ice.png diff --git a/mods/default/textures/default_iron_lump.png b/mods/default/textures/default_iron_lump.png new file mode 100755 index 0000000..db61a94 Binary files /dev/null and b/mods/default/textures/default_iron_lump.png differ diff --git a/mods/ENTITIES/item_entity/textures/item_entity_item_smoke.png b/mods/default/textures/default_item_smoke.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/item_entity/textures/item_entity_item_smoke.png rename to mods/default/textures/default_item_smoke.png diff --git a/mods/default/textures/default_junglegrass.png b/mods/default/textures/default_junglegrass.png new file mode 100755 index 0000000..25abb71 Binary files /dev/null and b/mods/default/textures/default_junglegrass.png differ diff --git a/mods/default/textures/default_jungleleaves.png b/mods/default/textures/default_jungleleaves.png new file mode 100755 index 0000000..5afcc36 Binary files /dev/null and b/mods/default/textures/default_jungleleaves.png differ diff --git a/mods/default/textures/default_jungleleaves_simple.png b/mods/default/textures/default_jungleleaves_simple.png new file mode 100755 index 0000000..7165100 Binary files /dev/null and b/mods/default/textures/default_jungleleaves_simple.png differ diff --git a/mods/default/textures/default_junglesapling.png b/mods/default/textures/default_junglesapling.png new file mode 100755 index 0000000..05e1e50 Binary files /dev/null and b/mods/default/textures/default_junglesapling.png differ diff --git a/mods/default/textures/default_jungletree.png b/mods/default/textures/default_jungletree.png new file mode 100755 index 0000000..2cf77a6 Binary files /dev/null and b/mods/default/textures/default_jungletree.png differ diff --git a/mods/default/textures/default_jungletree_top.png b/mods/default/textures/default_jungletree_top.png new file mode 100755 index 0000000..439f078 Binary files /dev/null and b/mods/default/textures/default_jungletree_top.png differ diff --git a/mods/default/textures/default_junglewood.png b/mods/default/textures/default_junglewood.png new file mode 100755 index 0000000..8d17917 Binary files /dev/null and b/mods/default/textures/default_junglewood.png differ diff --git a/mods/default/textures/default_kelp.png b/mods/default/textures/default_kelp.png new file mode 100755 index 0000000..70b743d Binary files /dev/null and b/mods/default/textures/default_kelp.png differ diff --git a/mods/ITEMS/tools/textures/tools_key.png b/mods/default/textures/default_key.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_key.png rename to mods/default/textures/default_key.png diff --git a/mods/ITEMS/tools/textures/tools_key_skeleton.png b/mods/default/textures/default_key_skeleton.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_key_skeleton.png rename to mods/default/textures/default_key_skeleton.png diff --git a/mods/default/textures/default_ladder_steel.png b/mods/default/textures/default_ladder_steel.png new file mode 100755 index 0000000..a312f3e Binary files /dev/null and b/mods/default/textures/default_ladder_steel.png differ diff --git a/mods/default/textures/default_ladder_wood.png b/mods/default/textures/default_ladder_wood.png new file mode 100755 index 0000000..c167fff Binary files /dev/null and b/mods/default/textures/default_ladder_wood.png differ diff --git a/mods/ITEMS/default/textures/default_lava.png b/mods/default/textures/default_lava.png similarity index 100% rename from mods/ITEMS/default/textures/default_lava.png rename to mods/default/textures/default_lava.png diff --git a/mods/ITEMS/default/textures/default_lava_flowing_animated.png b/mods/default/textures/default_lava_flowing_animated.png similarity index 100% rename from mods/ITEMS/default/textures/default_lava_flowing_animated.png rename to mods/default/textures/default_lava_flowing_animated.png diff --git a/mods/ITEMS/default/textures/default_lava_source_animated.png b/mods/default/textures/default_lava_source_animated.png similarity index 100% rename from mods/ITEMS/default/textures/default_lava_source_animated.png rename to mods/default/textures/default_lava_source_animated.png diff --git a/mods/default/textures/default_leaves.png b/mods/default/textures/default_leaves.png new file mode 100755 index 0000000..ba09fe1 Binary files /dev/null and b/mods/default/textures/default_leaves.png differ diff --git a/mods/default/textures/default_leaves_simple.png b/mods/default/textures/default_leaves_simple.png new file mode 100755 index 0000000..eb60f9f Binary files /dev/null and b/mods/default/textures/default_leaves_simple.png differ diff --git a/mods/default/textures/default_marram_grass_1.png b/mods/default/textures/default_marram_grass_1.png new file mode 100755 index 0000000..73ec9e9 Binary files /dev/null and b/mods/default/textures/default_marram_grass_1.png differ diff --git a/mods/default/textures/default_marram_grass_2.png b/mods/default/textures/default_marram_grass_2.png new file mode 100755 index 0000000..2db75c7 Binary files /dev/null and b/mods/default/textures/default_marram_grass_2.png differ diff --git a/mods/default/textures/default_marram_grass_3.png b/mods/default/textures/default_marram_grass_3.png new file mode 100755 index 0000000..f6c155f Binary files /dev/null and b/mods/default/textures/default_marram_grass_3.png differ diff --git a/mods/default/textures/default_mese_block.png b/mods/default/textures/default_mese_block.png new file mode 100755 index 0000000..e30994e Binary files /dev/null and b/mods/default/textures/default_mese_block.png differ diff --git a/mods/default/textures/default_mese_crystal.png b/mods/default/textures/default_mese_crystal.png new file mode 100755 index 0000000..f1d71f1 Binary files /dev/null and b/mods/default/textures/default_mese_crystal.png differ diff --git a/mods/default/textures/default_mese_crystal_fragment.png b/mods/default/textures/default_mese_crystal_fragment.png new file mode 100755 index 0000000..d5416ab Binary files /dev/null and b/mods/default/textures/default_mese_crystal_fragment.png differ diff --git a/mods/default/textures/default_mese_post_light_side.png b/mods/default/textures/default_mese_post_light_side.png new file mode 100755 index 0000000..c23b551 Binary files /dev/null and b/mods/default/textures/default_mese_post_light_side.png differ diff --git a/mods/default/textures/default_mese_post_light_side_dark.png b/mods/default/textures/default_mese_post_light_side_dark.png new file mode 100755 index 0000000..c4fc7ce Binary files /dev/null and b/mods/default/textures/default_mese_post_light_side_dark.png differ diff --git a/mods/default/textures/default_mese_post_light_top.png b/mods/default/textures/default_mese_post_light_top.png new file mode 100755 index 0000000..365c1a7 Binary files /dev/null and b/mods/default/textures/default_mese_post_light_top.png differ diff --git a/mods/default/textures/default_meselamp.png b/mods/default/textures/default_meselamp.png new file mode 100755 index 0000000..0c3a1a1 Binary files /dev/null and b/mods/default/textures/default_meselamp.png differ diff --git a/mods/ITEMS/default/textures/default_mineral_coal.png b/mods/default/textures/default_mineral_coal.png similarity index 100% rename from mods/ITEMS/default/textures/default_mineral_coal.png rename to mods/default/textures/default_mineral_coal.png diff --git a/mods/ITEMS/default/textures/default_mineral_copper.png b/mods/default/textures/default_mineral_copper.png similarity index 100% rename from mods/ITEMS/default/textures/default_mineral_copper.png rename to mods/default/textures/default_mineral_copper.png diff --git a/mods/ITEMS/default/textures/default_mineral_diamond.png b/mods/default/textures/default_mineral_diamond.png similarity index 100% rename from mods/ITEMS/default/textures/default_mineral_diamond.png rename to mods/default/textures/default_mineral_diamond.png diff --git a/mods/ITEMS/default/textures/default_mineral_gold.png b/mods/default/textures/default_mineral_gold.png similarity index 100% rename from mods/ITEMS/default/textures/default_mineral_gold.png rename to mods/default/textures/default_mineral_gold.png diff --git a/mods/ITEMS/default/textures/default_mineral_iron.png b/mods/default/textures/default_mineral_iron.png similarity index 100% rename from mods/ITEMS/default/textures/default_mineral_iron.png rename to mods/default/textures/default_mineral_iron.png diff --git a/mods/ITEMS/default/textures/default_mineral_mese.png b/mods/default/textures/default_mineral_mese.png similarity index 100% rename from mods/ITEMS/default/textures/default_mineral_mese.png rename to mods/default/textures/default_mineral_mese.png diff --git a/mods/ITEMS/default/textures/default_mineral_tin.png b/mods/default/textures/default_mineral_tin.png similarity index 100% rename from mods/ITEMS/default/textures/default_mineral_tin.png rename to mods/default/textures/default_mineral_tin.png diff --git a/mods/default/textures/default_moss.png b/mods/default/textures/default_moss.png new file mode 100644 index 0000000..479038e Binary files /dev/null and b/mods/default/textures/default_moss.png differ diff --git a/mods/default/textures/default_moss_side.png b/mods/default/textures/default_moss_side.png new file mode 100644 index 0000000..4a20345 Binary files /dev/null and b/mods/default/textures/default_moss_side.png differ diff --git a/mods/ITEMS/default/textures/default_mossycobble.png b/mods/default/textures/default_mossycobble.png similarity index 100% rename from mods/ITEMS/default/textures/default_mossycobble.png rename to mods/default/textures/default_mossycobble.png diff --git a/mods/ITEMS/default/textures/default_obsidian.png b/mods/default/textures/default_obsidian.png similarity index 100% rename from mods/ITEMS/default/textures/default_obsidian.png rename to mods/default/textures/default_obsidian.png diff --git a/mods/default/textures/default_obsidian_block.png b/mods/default/textures/default_obsidian_block.png new file mode 100755 index 0000000..7e1d4d3 Binary files /dev/null and b/mods/default/textures/default_obsidian_block.png differ diff --git a/mods/default/textures/default_obsidian_brick.png b/mods/default/textures/default_obsidian_brick.png new file mode 100755 index 0000000..30c67ca Binary files /dev/null and b/mods/default/textures/default_obsidian_brick.png differ diff --git a/mods/default/textures/default_obsidian_glass.png b/mods/default/textures/default_obsidian_glass.png new file mode 100755 index 0000000..d5ac83d Binary files /dev/null and b/mods/default/textures/default_obsidian_glass.png differ diff --git a/mods/ITEMS/default/textures/default_obsidian_glass_detail.png b/mods/default/textures/default_obsidian_glass_detail.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/default/textures/default_obsidian_glass_detail.png rename to mods/default/textures/default_obsidian_glass_detail.png diff --git a/mods/default/textures/default_obsidian_shard.png b/mods/default/textures/default_obsidian_shard.png new file mode 100755 index 0000000..a988d8c Binary files /dev/null and b/mods/default/textures/default_obsidian_shard.png differ diff --git a/mods/ITEMS/default/textures/default_paper.png b/mods/default/textures/default_paper.png similarity index 100% rename from mods/ITEMS/default/textures/default_paper.png rename to mods/default/textures/default_paper.png diff --git a/mods/default/textures/default_papyrus.png b/mods/default/textures/default_papyrus.png new file mode 100755 index 0000000..a85e809 Binary files /dev/null and b/mods/default/textures/default_papyrus.png differ diff --git a/mods/default/textures/default_permafrost.png b/mods/default/textures/default_permafrost.png new file mode 100644 index 0000000..f1edbab Binary files /dev/null and b/mods/default/textures/default_permafrost.png differ diff --git a/mods/default/textures/default_pine_bush_sapling.png b/mods/default/textures/default_pine_bush_sapling.png new file mode 100644 index 0000000..fadeff8 Binary files /dev/null and b/mods/default/textures/default_pine_bush_sapling.png differ diff --git a/mods/default/textures/default_pine_bush_stem.png b/mods/default/textures/default_pine_bush_stem.png new file mode 100644 index 0000000..e239f81 Binary files /dev/null and b/mods/default/textures/default_pine_bush_stem.png differ diff --git a/mods/default/textures/default_pine_needles.png b/mods/default/textures/default_pine_needles.png new file mode 100755 index 0000000..f699727 Binary files /dev/null and b/mods/default/textures/default_pine_needles.png differ diff --git a/mods/default/textures/default_pine_sapling.png b/mods/default/textures/default_pine_sapling.png new file mode 100755 index 0000000..c30131d Binary files /dev/null and b/mods/default/textures/default_pine_sapling.png differ diff --git a/mods/default/textures/default_pine_tree.png b/mods/default/textures/default_pine_tree.png new file mode 100755 index 0000000..4a5328f Binary files /dev/null and b/mods/default/textures/default_pine_tree.png differ diff --git a/mods/default/textures/default_pine_tree_top.png b/mods/default/textures/default_pine_tree_top.png new file mode 100755 index 0000000..8705710 Binary files /dev/null and b/mods/default/textures/default_pine_tree_top.png differ diff --git a/mods/default/textures/default_pine_wood.png b/mods/default/textures/default_pine_wood.png new file mode 100755 index 0000000..6844ceb Binary files /dev/null and b/mods/default/textures/default_pine_wood.png differ diff --git a/mods/default/textures/default_rainforest_litter.png b/mods/default/textures/default_rainforest_litter.png new file mode 100755 index 0000000..d762deb Binary files /dev/null and b/mods/default/textures/default_rainforest_litter.png differ diff --git a/mods/default/textures/default_rainforest_litter_side.png b/mods/default/textures/default_rainforest_litter_side.png new file mode 100755 index 0000000..7ccb11d Binary files /dev/null and b/mods/default/textures/default_rainforest_litter_side.png differ diff --git a/mods/ITEMS/default/textures/default_river_water.png b/mods/default/textures/default_river_water.png similarity index 100% rename from mods/ITEMS/default/textures/default_river_water.png rename to mods/default/textures/default_river_water.png diff --git a/mods/ITEMS/default/textures/default_river_water_flowing_animated.png b/mods/default/textures/default_river_water_flowing_animated.png similarity index 100% rename from mods/ITEMS/default/textures/default_river_water_flowing_animated.png rename to mods/default/textures/default_river_water_flowing_animated.png diff --git a/mods/ITEMS/default/textures/default_river_water_source_animated.png b/mods/default/textures/default_river_water_source_animated.png similarity index 100% rename from mods/ITEMS/default/textures/default_river_water_source_animated.png rename to mods/default/textures/default_river_water_source_animated.png diff --git a/mods/ITEMS/default/textures/default_sand.png b/mods/default/textures/default_sand.png similarity index 100% rename from mods/ITEMS/default/textures/default_sand.png rename to mods/default/textures/default_sand.png diff --git a/mods/default/textures/default_sandstone.png b/mods/default/textures/default_sandstone.png new file mode 100755 index 0000000..16e3d13 Binary files /dev/null and b/mods/default/textures/default_sandstone.png differ diff --git a/mods/default/textures/default_sandstone_block.png b/mods/default/textures/default_sandstone_block.png new file mode 100755 index 0000000..2e06491 Binary files /dev/null and b/mods/default/textures/default_sandstone_block.png differ diff --git a/mods/default/textures/default_sandstone_brick.png b/mods/default/textures/default_sandstone_brick.png new file mode 100755 index 0000000..e7150e5 Binary files /dev/null and b/mods/default/textures/default_sandstone_brick.png differ diff --git a/mods/default/textures/default_sapling.png b/mods/default/textures/default_sapling.png new file mode 100755 index 0000000..3fd64f0 Binary files /dev/null and b/mods/default/textures/default_sapling.png differ diff --git a/mods/ITEMS/signs/textures/signs_sign_steel.png b/mods/default/textures/default_sign_steel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/signs/textures/signs_sign_steel.png rename to mods/default/textures/default_sign_steel.png diff --git a/mods/ITEMS/signs/textures/signs_sign_wall_steel.png b/mods/default/textures/default_sign_wall_steel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/signs/textures/signs_sign_wall_steel.png rename to mods/default/textures/default_sign_wall_steel.png diff --git a/mods/ITEMS/signs/textures/signs_sign_wall_wood.png b/mods/default/textures/default_sign_wall_wood.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/signs/textures/signs_sign_wall_wood.png rename to mods/default/textures/default_sign_wall_wood.png diff --git a/mods/ITEMS/signs/textures/signs_sign_wood.png b/mods/default/textures/default_sign_wood.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/signs/textures/signs_sign_wood.png rename to mods/default/textures/default_sign_wood.png diff --git a/mods/default/textures/default_silver_sand.png b/mods/default/textures/default_silver_sand.png new file mode 100755 index 0000000..c4a8f73 Binary files /dev/null and b/mods/default/textures/default_silver_sand.png differ diff --git a/mods/default/textures/default_silver_sandstone.png b/mods/default/textures/default_silver_sandstone.png new file mode 100755 index 0000000..eac62cb Binary files /dev/null and b/mods/default/textures/default_silver_sandstone.png differ diff --git a/mods/default/textures/default_silver_sandstone_block.png b/mods/default/textures/default_silver_sandstone_block.png new file mode 100755 index 0000000..9997461 Binary files /dev/null and b/mods/default/textures/default_silver_sandstone_block.png differ diff --git a/mods/default/textures/default_silver_sandstone_brick.png b/mods/default/textures/default_silver_sandstone_brick.png new file mode 100755 index 0000000..93d87a5 Binary files /dev/null and b/mods/default/textures/default_silver_sandstone_brick.png differ diff --git a/mods/ITEMS/default/textures/default_snow.png b/mods/default/textures/default_snow.png similarity index 100% rename from mods/ITEMS/default/textures/default_snow.png rename to mods/default/textures/default_snow.png diff --git a/mods/ITEMS/default/textures/default_snow_side.png b/mods/default/textures/default_snow_side.png similarity index 100% rename from mods/ITEMS/default/textures/default_snow_side.png rename to mods/default/textures/default_snow_side.png diff --git a/mods/ITEMS/default/textures/default_snowball.png b/mods/default/textures/default_snowball.png similarity index 100% rename from mods/ITEMS/default/textures/default_snowball.png rename to mods/default/textures/default_snowball.png diff --git a/mods/default/textures/default_steel_block.png b/mods/default/textures/default_steel_block.png new file mode 100755 index 0000000..7f49f61 Binary files /dev/null and b/mods/default/textures/default_steel_block.png differ diff --git a/mods/default/textures/default_steel_ingot.png b/mods/default/textures/default_steel_ingot.png new file mode 100755 index 0000000..8100b01 Binary files /dev/null and b/mods/default/textures/default_steel_ingot.png differ diff --git a/mods/ITEMS/default/textures/default_stick.png b/mods/default/textures/default_stick.png similarity index 100% rename from mods/ITEMS/default/textures/default_stick.png rename to mods/default/textures/default_stick.png diff --git a/mods/ITEMS/default/textures/default_stone.png b/mods/default/textures/default_stone.png similarity index 100% rename from mods/ITEMS/default/textures/default_stone.png rename to mods/default/textures/default_stone.png diff --git a/mods/ITEMS/default/textures/default_stone_block.png b/mods/default/textures/default_stone_block.png similarity index 100% rename from mods/ITEMS/default/textures/default_stone_block.png rename to mods/default/textures/default_stone_block.png diff --git a/mods/ITEMS/default/textures/default_stone_brick.png b/mods/default/textures/default_stone_brick.png similarity index 100% rename from mods/ITEMS/default/textures/default_stone_brick.png rename to mods/default/textures/default_stone_brick.png diff --git a/mods/default/textures/default_stones.png b/mods/default/textures/default_stones.png new file mode 100644 index 0000000..09c5ee1 Binary files /dev/null and b/mods/default/textures/default_stones.png differ diff --git a/mods/default/textures/default_tin_block.png b/mods/default/textures/default_tin_block.png new file mode 100755 index 0000000..72759b0 Binary files /dev/null and b/mods/default/textures/default_tin_block.png differ diff --git a/mods/default/textures/default_tin_ingot.png b/mods/default/textures/default_tin_ingot.png new file mode 100755 index 0000000..eed5361 Binary files /dev/null and b/mods/default/textures/default_tin_ingot.png differ diff --git a/mods/default/textures/default_tin_lump.png b/mods/default/textures/default_tin_lump.png new file mode 100755 index 0000000..72bd339 Binary files /dev/null and b/mods/default/textures/default_tin_lump.png differ diff --git a/mods/ITEMS/tools/textures/tools_bronzeaxe.png b/mods/default/textures/default_tool_bronzeaxe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_bronzeaxe.png rename to mods/default/textures/default_tool_bronzeaxe.png diff --git a/mods/ITEMS/tools/textures/tools_bronzepick.png b/mods/default/textures/default_tool_bronzepick.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_bronzepick.png rename to mods/default/textures/default_tool_bronzepick.png diff --git a/mods/ITEMS/tools/textures/tools_bronzeshovel.png b/mods/default/textures/default_tool_bronzeshovel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_bronzeshovel.png rename to mods/default/textures/default_tool_bronzeshovel.png diff --git a/mods/ITEMS/tools/textures/tools_bronzesword.png b/mods/default/textures/default_tool_bronzesword.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_bronzesword.png rename to mods/default/textures/default_tool_bronzesword.png diff --git a/mods/ITEMS/tools/textures/tools_diamondaxe.png b/mods/default/textures/default_tool_diamondaxe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_diamondaxe.png rename to mods/default/textures/default_tool_diamondaxe.png diff --git a/mods/ITEMS/tools/textures/tools_diamondpick.png b/mods/default/textures/default_tool_diamondpick.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_diamondpick.png rename to mods/default/textures/default_tool_diamondpick.png diff --git a/mods/ITEMS/tools/textures/tools_diamondshovel.png b/mods/default/textures/default_tool_diamondshovel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_diamondshovel.png rename to mods/default/textures/default_tool_diamondshovel.png diff --git a/mods/ITEMS/tools/textures/tools_diamondsword.png b/mods/default/textures/default_tool_diamondsword.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_diamondsword.png rename to mods/default/textures/default_tool_diamondsword.png diff --git a/mods/default/textures/default_tool_meseaxe.png b/mods/default/textures/default_tool_meseaxe.png new file mode 100755 index 0000000..c01fb4f Binary files /dev/null and b/mods/default/textures/default_tool_meseaxe.png differ diff --git a/mods/default/textures/default_tool_mesepick.png b/mods/default/textures/default_tool_mesepick.png new file mode 100755 index 0000000..1b2e25b Binary files /dev/null and b/mods/default/textures/default_tool_mesepick.png differ diff --git a/mods/default/textures/default_tool_meseshovel.png b/mods/default/textures/default_tool_meseshovel.png new file mode 100755 index 0000000..00813a2 Binary files /dev/null and b/mods/default/textures/default_tool_meseshovel.png differ diff --git a/mods/default/textures/default_tool_mesesword.png b/mods/default/textures/default_tool_mesesword.png new file mode 100755 index 0000000..d395d3a Binary files /dev/null and b/mods/default/textures/default_tool_mesesword.png differ diff --git a/mods/ITEMS/tools/textures/tools_steelaxe.png b/mods/default/textures/default_tool_steelaxe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_steelaxe.png rename to mods/default/textures/default_tool_steelaxe.png diff --git a/mods/ITEMS/tools/textures/tools_steelpick.png b/mods/default/textures/default_tool_steelpick.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_steelpick.png rename to mods/default/textures/default_tool_steelpick.png diff --git a/mods/ITEMS/tools/textures/tools_steelshovel.png b/mods/default/textures/default_tool_steelshovel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_steelshovel.png rename to mods/default/textures/default_tool_steelshovel.png diff --git a/mods/ITEMS/tools/textures/tools_steelsword.png b/mods/default/textures/default_tool_steelsword.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_steelsword.png rename to mods/default/textures/default_tool_steelsword.png diff --git a/mods/ITEMS/tools/textures/tools_stoneaxe.png b/mods/default/textures/default_tool_stoneaxe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_stoneaxe.png rename to mods/default/textures/default_tool_stoneaxe.png diff --git a/mods/ITEMS/tools/textures/tools_stonepick.png b/mods/default/textures/default_tool_stonepick.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_stonepick.png rename to mods/default/textures/default_tool_stonepick.png diff --git a/mods/ITEMS/tools/textures/tools_stoneshovel.png b/mods/default/textures/default_tool_stoneshovel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_stoneshovel.png rename to mods/default/textures/default_tool_stoneshovel.png diff --git a/mods/ITEMS/tools/textures/tools_stonesword.png b/mods/default/textures/default_tool_stonesword.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_stonesword.png rename to mods/default/textures/default_tool_stonesword.png diff --git a/mods/ITEMS/tools/textures/tools_woodaxe.png b/mods/default/textures/default_tool_woodaxe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_woodaxe.png rename to mods/default/textures/default_tool_woodaxe.png diff --git a/mods/ITEMS/tools/textures/tools_woodpick.png b/mods/default/textures/default_tool_woodpick.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_woodpick.png rename to mods/default/textures/default_tool_woodpick.png diff --git a/mods/ITEMS/tools/textures/tools_woodshovel.png b/mods/default/textures/default_tool_woodshovel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_woodshovel.png rename to mods/default/textures/default_tool_woodshovel.png diff --git a/mods/ITEMS/tools/textures/tools_woodsword.png b/mods/default/textures/default_tool_woodsword.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/tools_woodsword.png rename to mods/default/textures/default_tool_woodsword.png diff --git a/mods/ITEMS/torches/textures/torches_torch_animated.png b/mods/default/textures/default_torch_animated.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/torches/textures/torches_torch_animated.png rename to mods/default/textures/default_torch_animated.png diff --git a/mods/ITEMS/torches/textures/torches_torch_on_ceiling_animated.png b/mods/default/textures/default_torch_on_ceiling_animated.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/torches/textures/torches_torch_on_ceiling_animated.png rename to mods/default/textures/default_torch_on_ceiling_animated.png diff --git a/mods/ITEMS/torches/textures/torches_torch_on_floor.png b/mods/default/textures/default_torch_on_floor.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/torches/textures/torches_torch_on_floor.png rename to mods/default/textures/default_torch_on_floor.png diff --git a/mods/ITEMS/torches/textures/torches_torch_on_floor_animated.png b/mods/default/textures/default_torch_on_floor_animated.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/torches/textures/torches_torch_on_floor_animated.png rename to mods/default/textures/default_torch_on_floor_animated.png diff --git a/mods/default/textures/default_tree.png b/mods/default/textures/default_tree.png new file mode 100755 index 0000000..10e297b Binary files /dev/null and b/mods/default/textures/default_tree.png differ diff --git a/mods/default/textures/default_tree_top.png b/mods/default/textures/default_tree_top.png new file mode 100755 index 0000000..da99bce Binary files /dev/null and b/mods/default/textures/default_tree_top.png differ diff --git a/mods/ITEMS/default/textures/default_water.png b/mods/default/textures/default_water.png similarity index 100% rename from mods/ITEMS/default/textures/default_water.png rename to mods/default/textures/default_water.png diff --git a/mods/ITEMS/default/textures/default_water_flowing_animated.png b/mods/default/textures/default_water_flowing_animated.png similarity index 100% rename from mods/ITEMS/default/textures/default_water_flowing_animated.png rename to mods/default/textures/default_water_flowing_animated.png diff --git a/mods/ITEMS/default/textures/default_water_source_animated.png b/mods/default/textures/default_water_source_animated.png similarity index 100% rename from mods/ITEMS/default/textures/default_water_source_animated.png rename to mods/default/textures/default_water_source_animated.png diff --git a/mods/default/textures/default_wood.png b/mods/default/textures/default_wood.png new file mode 100755 index 0000000..af56d6c Binary files /dev/null and b/mods/default/textures/default_wood.png differ diff --git a/mods/HUD/inventory/textures/gui_formbg.png b/mods/default/textures/gui_formbg.png old mode 100644 new mode 100755 similarity index 100% rename from mods/HUD/inventory/textures/gui_formbg.png rename to mods/default/textures/gui_formbg.png diff --git a/mods/ITEMS/furnace/textures/gui_furnace_arrow_bg.png b/mods/default/textures/gui_furnace_arrow_bg.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/furnace/textures/gui_furnace_arrow_bg.png rename to mods/default/textures/gui_furnace_arrow_bg.png diff --git a/mods/ITEMS/furnace/textures/gui_furnace_arrow_fg.png b/mods/default/textures/gui_furnace_arrow_fg.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/furnace/textures/gui_furnace_arrow_fg.png rename to mods/default/textures/gui_furnace_arrow_fg.png diff --git a/mods/HUD/inventory/textures/gui_hb_bg.png b/mods/default/textures/gui_hb_bg.png old mode 100644 new mode 100755 similarity index 100% rename from mods/HUD/inventory/textures/gui_hb_bg.png rename to mods/default/textures/gui_hb_bg.png diff --git a/mods/HUD/base_textures/textures/heart.png b/mods/default/textures/heart.png old mode 100644 new mode 100755 similarity index 100% rename from mods/HUD/base_textures/textures/heart.png rename to mods/default/textures/heart.png diff --git a/mods/ITEMS/tools/textures/wieldhand.png b/mods/default/textures/wieldhand.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/textures/wieldhand.png rename to mods/default/textures/wieldhand.png diff --git a/mods/default/tools.lua b/mods/default/tools.lua new file mode 100755 index 0000000..ec1a0e8 --- /dev/null +++ b/mods/default/tools.lua @@ -0,0 +1,420 @@ +-- mods/default/tools.lua + +-- The hand +minetest.register_item(":", { + type = "none", + wield_image = "wieldhand.png", + wield_scale = {x=1,y=1,z=2.5}, + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level = 0, + groupcaps = { + crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1}, + snappy = {times={[3]=0.40}, uses=0, maxlevel=1}, + oddly_breakable_by_hand = {times={[1]=3.50,[2]=2.00,[3]=0.70}, uses=0} + }, + damage_groups = {fleshy=1}, + } +}) + +-- +-- Picks +-- + +minetest.register_tool("default:pick_wood", { + description = "Wooden Pickaxe", + inventory_image = "default_tool_woodpick.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + cracky = {times={[3]=1.60}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + groups = {flammable = 2}, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:pick_stone", { + description = "Stone Pickaxe", + inventory_image = "default_tool_stonepick.png", + tool_capabilities = { + full_punch_interval = 1.3, + max_drop_level=0, + groupcaps={ + cracky = {times={[2]=2.0, [3]=1.00}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:pick_bronze", { + description = "Bronze Pickaxe", + inventory_image = "default_tool_bronzepick.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + cracky = {times={[1]=4.50, [2]=1.80, [3]=0.90}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:pick_steel", { + description = "Steel Pickaxe", + inventory_image = "default_tool_steelpick.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:pick_mese", { + description = "Mese Pickaxe", + inventory_image = "default_tool_mesepick.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=3, + groupcaps={ + cracky = {times={[1]=2.4, [2]=1.2, [3]=0.60}, uses=20, maxlevel=3}, + }, + damage_groups = {fleshy=5}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:pick_diamond", { + description = "Diamond Pickaxe", + inventory_image = "default_tool_diamondpick.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=3, + groupcaps={ + cracky = {times={[1]=2.0, [2]=1.0, [3]=0.50}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=5}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +-- +-- Shovels +-- + +minetest.register_tool("default:shovel_wood", { + description = "Wooden Shovel", + inventory_image = "default_tool_woodshovel.png", + wield_image = "default_tool_woodshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + crumbly = {times={[1]=3.00, [2]=1.60, [3]=0.60}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + groups = {flammable = 2}, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:shovel_stone", { + description = "Stone Shovel", + inventory_image = "default_tool_stoneshovel.png", + wield_image = "default_tool_stoneshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.4, + max_drop_level=0, + groupcaps={ + crumbly = {times={[1]=1.80, [2]=1.20, [3]=0.50}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:shovel_bronze", { + description = "Bronze Shovel", + inventory_image = "default_tool_bronzeshovel.png", + wield_image = "default_tool_bronzeshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.1, + max_drop_level=1, + groupcaps={ + crumbly = {times={[1]=1.65, [2]=1.05, [3]=0.45}, uses=25, maxlevel=2}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:shovel_steel", { + description = "Steel Shovel", + inventory_image = "default_tool_steelshovel.png", + wield_image = "default_tool_steelshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.1, + max_drop_level=1, + groupcaps={ + crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=30, maxlevel=2}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:shovel_mese", { + description = "Mese Shovel", + inventory_image = "default_tool_meseshovel.png", + wield_image = "default_tool_meseshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=3, + groupcaps={ + crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.30}, uses=20, maxlevel=3}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:shovel_diamond", { + description = "Diamond Shovel", + inventory_image = "default_tool_diamondshovel.png", + wield_image = "default_tool_diamondshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + crumbly = {times={[1]=1.10, [2]=0.50, [3]=0.30}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +-- +-- Axes +-- + +minetest.register_tool("default:axe_wood", { + description = "Wooden Axe", + inventory_image = "default_tool_woodaxe.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=0, + groupcaps={ + choppy = {times={[2]=3.00, [3]=1.60}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + groups = {flammable = 2}, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:axe_stone", { + description = "Stone Axe", + inventory_image = "default_tool_stoneaxe.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + choppy={times={[1]=3.00, [2]=2.00, [3]=1.30}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:axe_bronze", { + description = "Bronze Axe", + inventory_image = "default_tool_bronzeaxe.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.75, [2]=1.70, [3]=1.15}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:axe_steel", { + description = "Steel Axe", + inventory_image = "default_tool_steelaxe.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:axe_mese", { + description = "Mese Axe", + inventory_image = "default_tool_meseaxe.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.20, [2]=1.00, [3]=0.60}, uses=20, maxlevel=3}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:axe_diamond", { + description = "Diamond Axe", + inventory_image = "default_tool_diamondaxe.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=7}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +-- +-- Swords +-- + +minetest.register_tool("default:sword_wood", { + description = "Wooden Sword", + inventory_image = "default_tool_woodsword.png", + tool_capabilities = { + full_punch_interval = 1, + max_drop_level=0, + groupcaps={ + snappy={times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + groups = {flammable = 2}, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:sword_stone", { + description = "Stone Sword", + inventory_image = "default_tool_stonesword.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:sword_bronze", { + description = "Bronze Sword", + inventory_image = "default_tool_bronzesword.png", + tool_capabilities = { + full_punch_interval = 0.8, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.75, [2]=1.30, [3]=0.375}, uses=25, maxlevel=2}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:sword_steel", { + description = "Steel Sword", + inventory_image = "default_tool_steelsword.png", + tool_capabilities = { + full_punch_interval = 0.8, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:sword_mese", { + description = "Mese Sword", + inventory_image = "default_tool_mesesword.png", + tool_capabilities = { + full_punch_interval = 0.7, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=7}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:sword_diamond", { + description = "Diamond Sword", + inventory_image = "default_tool_diamondsword.png", + tool_capabilities = { + full_punch_interval = 0.7, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3}, + }, + damage_groups = {fleshy=8}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:key", { + description = "Key", + inventory_image = "default_key.png", + groups = {key = 1, not_in_creative_inventory = 1}, + stack_max = 1, + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return def.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + if pointed_thing.type ~= "node" then + return itemstack + end + + local pos = pointed_thing.under + node = minetest.get_node(pos) + + if not node or node.name == "ignore" then + return itemstack + end + + local ndef = minetest.registered_nodes[node.name] + if not ndef then + return itemstack + end + + local on_key_use = ndef.on_key_use + if on_key_use then + on_key_use(pos, placer) + end + + return nil + end +}) \ No newline at end of file diff --git a/mods/default/torch.lua b/mods/default/torch.lua new file mode 100755 index 0000000..5de5f89 --- /dev/null +++ b/mods/default/torch.lua @@ -0,0 +1,131 @@ +local function on_flood(pos, oldnode, newnode) + minetest.add_item(pos, ItemStack("default:torch 1")) + -- Play flame-extinguish sound if liquid is not an 'igniter' + local nodedef = minetest.registered_items[newnode.name] + if not (nodedef and nodedef.groups and + nodedef.groups.igniter and nodedef.groups.igniter > 0) then + minetest.sound_play( + "default_cool_lava", + {pos = pos, max_hear_distance = 16, gain = 0.1} + ) + end + -- Remove the torch node + return false +end + +minetest.register_node("default:torch", { + description = "Torch", + drawtype = "mesh", + mesh = "torch_floor.obj", + inventory_image = "default_torch_on_floor.png", + wield_image = "default_torch_on_floor.png", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + liquids_pointable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return def.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + local above = pointed_thing.above + local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above)) + local fakestack = itemstack + if wdir == 0 then + fakestack:set_name("default:torch_ceiling") + elseif wdir == 1 then + fakestack:set_name("default:torch") + else + fakestack:set_name("default:torch_wall") + end + + itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) + itemstack:set_name("default:torch") + + return itemstack + end, + floodable = true, + on_flood = on_flood, +}) + +minetest.register_node("default:torch_wall", { + drawtype = "mesh", + mesh = "torch_wall.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + floodable = true, + on_flood = on_flood, +}) + +minetest.register_node("default:torch_ceiling", { + drawtype = "mesh", + mesh = "torch_ceiling.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + floodable = true, + on_flood = on_flood, +}) + +minetest.register_lbm({ + name = "default:3dtorch", + nodenames = {"default:torch", "torches:floor", "torches:wall"}, + action = function(pos, node) + if node.param2 == 0 then + minetest.set_node(pos, {name = "default:torch_ceiling", + param2 = node.param2}) + elseif node.param2 == 1 then + minetest.set_node(pos, {name = "default:torch", + param2 = node.param2}) + else + minetest.set_node(pos, {name = "default:torch_wall", + param2 = node.param2}) + end + end +}) diff --git a/mods/default/trees.lua b/mods/default/trees.lua new file mode 100755 index 0000000..6c2414d --- /dev/null +++ b/mods/default/trees.lua @@ -0,0 +1,577 @@ +local random = math.random + +-- +-- Grow trees from saplings +-- + +-- 'can grow' function + +function default.can_grow(pos) + local node_under = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) + if not node_under then + return false + end + local name_under = node_under.name + local is_soil = minetest.get_item_group(name_under, "soil") + if is_soil == 0 then + return false + end + local light_level = minetest.get_node_light(pos) + if not light_level or light_level < 13 then + return false + end + return true +end + + +-- 'is snow nearby' function + +local function is_snow_nearby(pos) + return minetest.find_node_near(pos, 1, {"group:snowy"}) +end + + +-- Grow sapling + +function default.grow_sapling(pos) + if not default.can_grow(pos) then + -- try again 5 min later + minetest.get_node_timer(pos):start(300) + return + end + + local mg_name = minetest.get_mapgen_setting("mg_name") + local node = minetest.get_node(pos) + if node.name == "default:sapling" then + minetest.log("action", "A sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + if mg_name == "v6" then + default.grow_tree(pos, random(1, 4) == 1) + else + default.grow_new_apple_tree(pos) + end + elseif node.name == "default:junglesapling" then + minetest.log("action", "A jungle sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + if mg_name == "v6" then + default.grow_jungle_tree(pos) + else + default.grow_new_jungle_tree(pos) + end + elseif node.name == "default:pine_sapling" then + minetest.log("action", "A pine sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + local snow = is_snow_nearby(pos) + if mg_name == "v6" then + default.grow_pine_tree(pos, snow) + elseif snow then + default.grow_new_snowy_pine_tree(pos) + else + default.grow_new_pine_tree(pos) + end + elseif node.name == "default:acacia_sapling" then + minetest.log("action", "An acacia sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + default.grow_new_acacia_tree(pos) + elseif node.name == "default:aspen_sapling" then + minetest.log("action", "An aspen sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + default.grow_new_aspen_tree(pos) + elseif node.name == "default:bush_sapling" then + minetest.log("action", "A bush sapling grows into a bush at ".. + minetest.pos_to_string(pos)) + default.grow_bush(pos) + elseif node.name == "default:acacia_bush_sapling" then + minetest.log("action", "An acacia bush sapling grows into a bush at ".. + minetest.pos_to_string(pos)) + default.grow_acacia_bush(pos) + elseif node.name == "default:pine_bush_sapling" then + minetest.log("action", "A pine bush sapling grows into a bush at ".. + minetest.pos_to_string(pos)) + default.grow_pine_bush(pos) + elseif node.name == "default:emergent_jungle_sapling" then + minetest.log("action", "An emergent jungle sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + default.grow_new_emergent_jungle_tree(pos) + end +end + +minetest.register_lbm({ + name = "default:convert_saplings_to_node_timer", + nodenames = {"default:sapling", "default:junglesapling", + "default:pine_sapling", "default:acacia_sapling", + "default:aspen_sapling"}, + action = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end +}) + +-- +-- Tree generation +-- + +-- Apple tree and jungle tree trunk and leaves function + +local function add_trunk_and_leaves(data, a, pos, tree_cid, leaves_cid, + height, size, iters, is_apple_tree) + local x, y, z = pos.x, pos.y, pos.z + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + local c_apple = minetest.get_content_id("default:apple") + + -- Trunk + data[a:index(x, y, z)] = tree_cid -- Force-place lowest trunk node to replace sapling + for yy = y + 1, y + height - 1 do + local vi = a:index(x, yy, z) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore or node_id == leaves_cid then + data[vi] = tree_cid + end + end + + -- Force leaves near the trunk + for z_dist = -1, 1 do + for y_dist = -size, 1 do + local vi = a:index(x - 1, y + height + y_dist, z + z_dist) + for x_dist = -1, 1 do + if data[vi] == c_air or data[vi] == c_ignore then + if is_apple_tree and random(1, 8) == 1 then + data[vi] = c_apple + else + data[vi] = leaves_cid + end + end + vi = vi + 1 + end + end + end + + -- Randomly add leaves in 2x2x2 clusters. + for i = 1, iters do + local clust_x = x + random(-size, size - 1) + local clust_y = y + height + random(-size, 0) + local clust_z = z + random(-size, size - 1) + + for xi = 0, 1 do + for yi = 0, 1 do + for zi = 0, 1 do + local vi = a:index(clust_x + xi, clust_y + yi, clust_z + zi) + if data[vi] == c_air or data[vi] == c_ignore then + if is_apple_tree and random(1, 8) == 1 then + data[vi] = c_apple + else + data[vi] = leaves_cid + end + end + end + end + end + end +end + + +-- Apple tree + +function default.grow_tree(pos, is_apple_tree, bad) + --[[ + NOTE: Tree-placing code is currently duplicated in the engine + and in games that have saplings; both are deprecated but not + replaced yet + --]] + if bad then + error("Deprecated use of default.grow_tree") + end + + local x, y, z = pos.x, pos.y, pos.z + local height = random(4, 5) + local c_tree = minetest.get_content_id("default:tree") + local c_leaves = minetest.get_content_id("default:leaves") + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 2, y = y, z = z - 2}, + {x = x + 2, y = y + height + 1, z = z + 2} + ) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + + add_trunk_and_leaves(data, a, pos, c_tree, c_leaves, height, 2, 8, is_apple_tree) + + vm:set_data(data) + vm:write_to_map() + vm:update_map() +end + + +-- Jungle tree + +function default.grow_jungle_tree(pos, bad) + --[[ + NOTE: Jungletree-placing code is currently duplicated in the engine + and in games that have saplings; both are deprecated but not + replaced yet + --]] + if bad then + error("Deprecated use of default.grow_jungle_tree") + end + + local x, y, z = pos.x, pos.y, pos.z + local height = random(8, 12) + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + local c_jungletree = minetest.get_content_id("default:jungletree") + local c_jungleleaves = minetest.get_content_id("default:jungleleaves") + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 3, y = y - 1, z = z - 3}, + {x = x + 3, y = y + height + 1, z = z + 3} + ) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + + add_trunk_and_leaves(data, a, pos, c_jungletree, c_jungleleaves, + height, 3, 30, false) + + -- Roots + for z_dist = -1, 1 do + local vi_1 = a:index(x - 1, y - 1, z + z_dist) + local vi_2 = a:index(x - 1, y, z + z_dist) + for x_dist = -1, 1 do + if random(1, 3) >= 2 then + if data[vi_1] == c_air or data[vi_1] == c_ignore then + data[vi_1] = c_jungletree + elseif data[vi_2] == c_air or data[vi_2] == c_ignore then + data[vi_2] = c_jungletree + end + end + vi_1 = vi_1 + 1 + vi_2 = vi_2 + 1 + end + end + + vm:set_data(data) + vm:write_to_map() + vm:update_map() +end + + +-- Pine tree from mg mapgen mod, design by sfan5, pointy top added by paramat + +local function add_pine_needles(data, vi, c_air, c_ignore, c_snow, c_pine_needles) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore or node_id == c_snow then + data[vi] = c_pine_needles + end +end + +local function add_snow(data, vi, c_air, c_ignore, c_snow) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore then + data[vi] = c_snow + end +end + +function default.grow_pine_tree(pos, snow) + local x, y, z = pos.x, pos.y, pos.z + local maxy = y + random(9, 13) -- Trunk top + + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + local c_pine_tree = minetest.get_content_id("default:pine_tree") + local c_pine_needles = minetest.get_content_id("default:pine_needles") + local c_snow = minetest.get_content_id("default:snow") + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 3, y = y, z = z - 3}, + {x = x + 3, y = maxy + 3, z = z + 3} + ) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + + -- Upper branches layer + local dev = 3 + for yy = maxy - 1, maxy + 1 do + for zz = z - dev, z + dev do + local vi = a:index(x - dev, yy, zz) + local via = a:index(x - dev, yy + 1, zz) + for xx = x - dev, x + dev do + if random() < 0.95 - dev * 0.05 then + add_pine_needles(data, vi, c_air, c_ignore, c_snow, + c_pine_needles) + if snow then + add_snow(data, via, c_air, c_ignore, c_snow) + end + end + vi = vi + 1 + via = via + 1 + end + end + dev = dev - 1 + end + + -- Centre top nodes + add_pine_needles(data, a:index(x, maxy + 1, z), c_air, c_ignore, c_snow, + c_pine_needles) + add_pine_needles(data, a:index(x, maxy + 2, z), c_air, c_ignore, c_snow, + c_pine_needles) -- Paramat added a pointy top node + if snow then + add_snow(data, a:index(x, maxy + 3, z), c_air, c_ignore, c_snow) + end + + -- Lower branches layer + local my = 0 + for i = 1, 20 do -- Random 2x2 squares of needles + local xi = x + random(-3, 2) + local yy = maxy + random(-6, -5) + local zi = z + random(-3, 2) + if yy > my then + my = yy + end + for zz = zi, zi+1 do + local vi = a:index(xi, yy, zz) + local via = a:index(xi, yy + 1, zz) + for xx = xi, xi + 1 do + add_pine_needles(data, vi, c_air, c_ignore, c_snow, + c_pine_needles) + if snow then + add_snow(data, via, c_air, c_ignore, c_snow) + end + vi = vi + 1 + via = via + 1 + end + end + end + + dev = 2 + for yy = my + 1, my + 2 do + for zz = z - dev, z + dev do + local vi = a:index(x - dev, yy, zz) + local via = a:index(x - dev, yy + 1, zz) + for xx = x - dev, x + dev do + if random() < 0.95 - dev * 0.05 then + add_pine_needles(data, vi, c_air, c_ignore, c_snow, + c_pine_needles) + if snow then + add_snow(data, via, c_air, c_ignore, c_snow) + end + end + vi = vi + 1 + via = via + 1 + end + end + dev = dev - 1 + end + + -- Trunk + -- Force-place lowest trunk node to replace sapling + data[a:index(x, y, z)] = c_pine_tree + for yy = y + 1, maxy do + local vi = a:index(x, yy, z) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore or + node_id == c_pine_needles or node_id == c_snow then + data[vi] = c_pine_tree + end + end + + vm:set_data(data) + vm:write_to_map() + vm:update_map() +end + + +-- New apple tree + +function default.grow_new_apple_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/apple_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "random", nil, false) +end + + +-- New jungle tree + +function default.grow_new_jungle_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/jungle_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "random", nil, false) +end + + +-- New emergent jungle tree + +function default.grow_new_emergent_jungle_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/emergent_jungle_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 3, y = pos.y - 5, z = pos.z - 3}, + path, "random", nil, false) +end + + +-- New pine tree + +function default.grow_new_pine_tree(pos) + local path + if math.random() > 0.5 then + path = minetest.get_modpath("default") .. + "/schematics/pine_tree_from_sapling.mts" + else + path = minetest.get_modpath("default") .. + "/schematics/small_pine_tree_from_sapling.mts" + end + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "0", nil, false) +end + + +-- New snowy pine tree + +function default.grow_new_snowy_pine_tree(pos) + local path + if math.random() > 0.5 then + path = minetest.get_modpath("default") .. + "/schematics/snowy_pine_tree_from_sapling.mts" + else + path = minetest.get_modpath("default") .. + "/schematics/snowy_small_pine_tree_from_sapling.mts" + end + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "random", nil, false) +end + + +-- New acacia tree + +function default.grow_new_acacia_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/acacia_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 4, y = pos.y - 1, z = pos.z - 4}, + path, "random", nil, false) +end + + +-- New aspen tree + +function default.grow_new_aspen_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/aspen_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "0", nil, false) +end + + +-- Bushes do not need 'from sapling' schematic variants because +-- only the stem node is force-placed in the schematic. + +-- Bush + +function default.grow_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- Acacia bush + +function default.grow_acacia_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/acacia_bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- Pine bush + +function default.grow_pine_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/pine_bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- +-- Sapling 'on place' function to check protection of node and resulting tree volume +-- + +function default.sapling_on_place(itemstack, placer, pointed_thing, + sapling_name, minp_relative, maxp_relative, interval) + -- Position of sapling + local pos = pointed_thing.under + local node = minetest.get_node_or_nil(pos) + local pdef = node and 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 + return pdef.on_rightclick(pos, node, placer, itemstack, pointed_thing) + end + + if not pdef or not pdef.buildable_to then + pos = pointed_thing.above + node = minetest.get_node_or_nil(pos) + pdef = node and minetest.registered_nodes[node.name] + if not pdef or not pdef.buildable_to then + return itemstack + end + end + + local player_name = placer and placer:get_player_name() or "" + -- Check sapling position for protection + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return itemstack + end + -- Check tree volume for protection + if minetest.is_area_protected( + vector.add(pos, minp_relative), + vector.add(pos, maxp_relative), + player_name, + interval) then + minetest.record_protection_violation(pos, player_name) + -- Print extra information to explain + minetest.chat_send_player(player_name, "Tree will intersect protection") + return itemstack + end + + minetest.log("action", player_name .. " places node " + .. sapling_name .. " at " .. minetest.pos_to_string(pos)) + + local take_item = not (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) + local newnode = {name = sapling_name} + local ndef = minetest.registered_nodes[sapling_name] + minetest.set_node(pos, newnode) + + -- Run callback + if ndef and ndef.after_place_node then + -- Deepcopy place_to and pointed_thing because callback can modify it + if ndef.after_place_node(table.copy(pos), placer, + itemstack, table.copy(pointed_thing)) then + take_item = false + end + end + + -- Run script hook + for _, callback in ipairs(minetest.registered_on_placenodes) do + -- Deepcopy pos, node and pointed_thing because callback can modify them + if callback(table.copy(pos), table.copy(newnode), + placer, table.copy(node or {}), + itemstack, table.copy(pointed_thing)) then + take_item = false + end + end + + if take_item then + itemstack:take_item() + end + + return itemstack +end \ No newline at end of file diff --git a/mods/ITEMS/doors/README.txt b/mods/doors/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/README.txt rename to mods/doors/README.txt diff --git a/mods/doors/depends.txt b/mods/doors/depends.txt new file mode 100755 index 0000000..5e28bee --- /dev/null +++ b/mods/doors/depends.txt @@ -0,0 +1,2 @@ +default +screwdriver? diff --git a/mods/doors/init.lua b/mods/doors/init.lua new file mode 100755 index 0000000..2685357 --- /dev/null +++ b/mods/doors/init.lua @@ -0,0 +1,861 @@ +-- our API object +doors = {} + +-- private data +local _doors = {} +_doors.registered_doors = {} +_doors.registered_trapdoors = {} + +local function replace_old_owner_information(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("doors_owner") + if owner and owner ~= "" then + meta:set_string("owner", owner) + meta:set_string("doors_owner", "") + end +end + +-- returns an object to a door object or nil +function doors.get(pos) + local node_name = minetest.get_node(pos).name + 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 + } + else + return nil + 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", { + description = "Hidden Door Segment", + -- can't use airlike otherwise falling nodes will turn to entities + -- and will be forever stuck until door is removed. + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + -- has to be walkable for falling nodes to stop falling. + walkable = true, + pointable = false, + diggable = false, + buildable_to = false, + floodable = false, + drop = "", + groups = {not_in_creative_inventory = 1}, + on_blast = function() end, + tiles = {"doors_blank.png"}, + -- 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}, + }, + -- 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}, + }, +}) + +-- 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 = "_b", param2 = 1}, + {v = "_b", param2 = 2}, + {v = "_b", param2 = 3}, + {v = "_b", param2 = 0}, + }, + { + {v = "_b", param2 = 1}, + {v = "_b", param2 = 2}, + {v = "_b", param2 = 3}, + {v = "_b", param2 = 0}, + }, + { + {v = "_a", param2 = 3}, + {v = "_a", param2 = 0}, + {v = "_a", param2 = 1}, + {v = "_a", param2 = 2}, + }, +} + +function _doors.door_toggle(pos, node, clicker) + local meta = minetest.get_meta(pos) + 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 + else + state = 0 + end + else + state = tonumber(state) + end + + replace_old_owner_information(pos) + + if clicker and not default.can_interact_with_node(clicker, pos) then + return false + end + + -- until Lua-5.2 we have no bitwise operators :( + if state % 2 == 1 then + state = state - 1 + else + state = state + 1 + end + + local dir = node.param2 + if state % 2 == 0 then + minetest.sound_play(def.door.sounds[1], + {pos = pos, gain = 0.3, max_hear_distance = 10}) + else + minetest.sound_play(def.door.sounds[2], + {pos = pos, gain = 0.3, max_hear_distance = 10}) + end + + minetest.swap_node(pos, { + name = name .. transform[state + 1][dir+1].v, + param2 = transform[state + 1][dir+1].param2 + }) + meta:set_int("state", state) + + return true +end + + +local function on_place_node(place_to, newnode, + placer, oldnode, itemstack, pointed_thing) + -- Run script hook + for _, callback in ipairs(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 pointed_thing_copy = { + type = pointed_thing.type, + above = vector.new(pointed_thing.above), + under = vector.new(pointed_thing.under), + ref = pointed_thing.ref, + } + 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) + return default.can_interact_with_node(digger, pos) +end + +function doors.register(name, def) + if not name:find(":") then + name = "doors:" .. name + end + + -- replace old doors of this type automatically + 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}} + } + 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}) + end + }) + + minetest.register_craftitem(":" .. name, { + description = def.description, + inventory_image = def.inventory_image, + groups = table.copy(def.groups), + + on_place = function(itemstack, placer, pointed_thing) + local pos + + if not pointed_thing.type == "node" then + return itemstack + end + + 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 + return pdef.on_rightclick(pointed_thing.under, + node, placer, itemstack, pointed_thing) + end + + if pdef and pdef.buildable_to then + pos = pointed_thing.under + else + 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 top_node = minetest.get_node_or_nil(above) + local topdef = top_node and minetest.registered_nodes[top_node.name] + + if not topdef or not topdef.buildable_to then + return itemstack + 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 + + 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}, + } + + local aside = { + x = pos.x + ref[dir + 1].x, + y = pos.y + ref[dir + 1].y, + 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}) + minetest.set_node(above, {name = "doors:hidden", param2 = (dir + 3) % 4}) + else + minetest.set_node(pos, {name = name .. "_a", param2 = dir}) + minetest.set_node(above, {name = "doors:hidden", param2 = dir}) + end + + local meta = minetest.get_meta(pos) + meta:set_int("state", state) + + if def.protected then + meta:set_string("owner", pn) + meta:set_string("infotext", "Owned by " .. pn) + end + + if not (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) then + itemstack:take_item() + end + + minetest.sound_play(def.sounds.place, {pos = pos}) + + on_place_node(pos, minetest.get_node(pos), + placer, node, itemstack, pointed_thing) + + return itemstack + end + }) + def.inventory_image = nil + + if def.recipe then + minetest.register_craft({ + output = name, + recipe = def.recipe, + }) + end + def.recipe = nil + + if not def.sounds then + def.sounds = default.node_sound_wood_defaults() + end + + if not def.sound_open then + def.sound_open = "doors_door_open" + end + + if not def.sound_close then + def.sound_close = "doors_door_close" + end + + 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.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + _doors.door_toggle(pos, node, clicker) + return itemstack + 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 = 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 + def.on_key_use = function(pos, player) + local door = doors.get(pos) + door:toggle(player) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + replace_old_owner_information(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pname = player:get_player_name() + + -- verify placer is owner of lockable door + if owner ~= pname then + minetest.record_protection_violation(pos, pname) + minetest.chat_send_player(pname, "You do not own this locked door.") + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, "a locked door", owner + end + def.node_dig_prediction = "" + 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 + + def.on_destruct = function(pos) + minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) + end + + def.drawtype = "mesh" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.sunlight_propagates = true + 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.mesh = "door_a.obj" + minetest.register_node(":" .. name .. "_a", def) + + def.mesh = "door_b.obj" + minetest.register_node(":" .. name .. "_b", def) + + _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"}, + } +}) + +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_metal_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"}, + } +}) + +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"}, + }, +}) + +-- 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 " .. + "will be used instead.") + end + + doors.register(name, def) +end + +----trapdoor---- + +function _doors.trapdoor_toggle(pos, node, clicker) + node = node or minetest.get_node(pos) + + replace_old_owner_information(pos) + + if clicker and not default.can_interact_with_node(clicker, pos) then + return false + end + + local def = minetest.registered_nodes[node.name] + + 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}) + 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}) + end +end + +function doors.register_trapdoor(name, def) + if not name:find(":") then + name = "doors:" .. name + end + + local name_closed = name + local name_opened = name.."_open" + + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + _doors.trapdoor_toggle(pos, node, clicker) + return itemstack + end + + -- Common trapdoor configuration + def.drawtype = "nodebox" + def.paramtype = "light" + def.paramtype2 = "facedir" + 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("owner", pn) + meta:set_string("infotext", "Owned by "..pn) + + return (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) + end + + def.on_blast = function() end + def.on_key_use = function(pos, player) + local door = doors.get(pos) + door:toggle(player) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + replace_old_owner_information(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pname = player:get_player_name() + + -- verify placer is owner of lockable door + if owner ~= pname then + minetest.record_protection_violation(pos, pname) + minetest.chat_send_player(pname, "You do not own this trapdoor.") + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, "a locked trapdoor", owner + end + def.node_dig_prediction = "" + else + def.on_blast = function(pos, intensity) + minetest.remove_node(pos) + return {name} + end + end + + if not def.sounds then + def.sounds = default.node_sound_wood_defaults() + end + + if not def.sound_open then + def.sound_open = "doors_door_open" + end + + if not def.sound_close then + def.sound_close = "doors_door_close" + end + + local def_opened = table.copy(def) + local def_closed = table.copy(def) + + def_closed.node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} + } + def_closed.selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} + } + def_closed.tiles = {def.tile_front, + def.tile_front .. '^[transformFY', + def.tile_side, def.tile_side, + def.tile_side, def.tile_side} + + def_opened.node_box = { + type = "fixed", + fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5} + } + def_opened.selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5} + } + def_opened.tiles = {def.tile_side, def.tile_side, + def.tile_side .. '^[transform3', + def.tile_side .. '^[transform1', + def.tile_front .. '^[transform46', + def.tile_front .. '^[transform6'} + + def_opened.drop = name_closed + def_opened.groups.not_in_creative_inventory = 1 + + minetest.register_node(name_opened, def_opened) + minetest.register_node(name_closed, def_closed) + + _doors.registered_trapdoors[name_opened] = true + _doors.registered_trapdoors[name_closed] = true +end + +doors.register_trapdoor("doors:trapdoor", { + description = "Wooden 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}, +}) + +doors.register_trapdoor("doors:trapdoor_steel", { + description = "Steel Trapdoor", + inventory_image = "doors_trapdoor_steel.png", + wield_image = "doors_trapdoor_steel.png", + tile_front = "doors_trapdoor_steel.png", + tile_side = "doors_trapdoor_steel_side.png", + protected = true, + sounds = default.node_sound_metal_defaults(), + sound_open = "doors_steel_door_open", + sound_close = "doors_steel_door_close", + groups = {cracky = 1, level = 2, door = 1}, +}) + +minetest.register_craft({ + output = 'doors:trapdoor 2', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'group:wood', 'group:wood', 'group:wood'}, + {'', '', ''}, + } +}) + +minetest.register_craft({ + output = 'doors:trapdoor_steel', + recipe = { + {'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:steel_ingot'}, + } +}) + + +----fence gate---- + +function doors.register_fencegate(name, def) + local fence = { + description = def.description, + drawtype = "mesh", + tiles = {}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + drop = name .. "_closed", + 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}) + return itemstack + end, + selection_box = { + type = "fixed", + 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 + + 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}, + } + + 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}, + {-1/2, -3/8, -1/2, -3/8, 3/8, 0}}, + } + + minetest.register_node(":" .. name .. "_closed", fence_closed) + minetest.register_node(":" .. name .. "_open", fence_open) + + minetest.register_craft({ + output = name .. "_closed", + recipe = { + {"default:stick", def.material, "default:stick"}, + {"default:stick", def.material, "default:stick"} + } + }) +end + +doors.register_fencegate("doors:gate_wood", { + description = "Apple Wood Fence Gate", + texture = "default_wood.png", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("doors:gate_acacia_wood", { + description = "Acacia Wood Fence Gate", + texture = "default_acacia_wood.png", + material = "default:acacia_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("doors:gate_junglewood", { + description = "Jungle Wood Fence Gate", + texture = "default_junglewood.png", + material = "default:junglewood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("doors:gate_pine_wood", { + description = "Pine Wood Fence Gate", + texture = "default_pine_wood.png", + material = "default:pine_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3} +}) + +doors.register_fencegate("doors:gate_aspen_wood", { + description = "Aspen Wood Fence Gate", + texture = "default_aspen_wood.png", + material = "default:aspen_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3} +}) + + +----fuels---- + +minetest.register_craft({ + type = "fuel", + recipe = "doors:trapdoor", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:door_wood", + burntime = 14, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_wood_closed", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_acacia_wood_closed", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_junglewood_closed", + burntime = 9, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_pine_wood_closed", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_aspen_wood_closed", + burntime = 5, +}) diff --git a/mods/ITEMS/doors/license.txt b/mods/doors/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/license.txt rename to mods/doors/license.txt diff --git a/mods/ITEMS/doors/models/door_a.obj b/mods/doors/models/door_a.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/models/door_a.obj rename to mods/doors/models/door_a.obj diff --git a/mods/ITEMS/doors/models/door_b.obj b/mods/doors/models/door_b.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/models/door_b.obj rename to mods/doors/models/door_b.obj diff --git a/mods/ITEMS/doors/models/doors_fencegate_closed.obj b/mods/doors/models/doors_fencegate_closed.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/models/doors_fencegate_closed.obj rename to mods/doors/models/doors_fencegate_closed.obj diff --git a/mods/ITEMS/doors/models/doors_fencegate_open.obj b/mods/doors/models/doors_fencegate_open.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/models/doors_fencegate_open.obj rename to mods/doors/models/doors_fencegate_open.obj diff --git a/mods/ITEMS/doors/sounds/doors_door_close.ogg b/mods/doors/sounds/doors_door_close.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/sounds/doors_door_close.ogg rename to mods/doors/sounds/doors_door_close.ogg diff --git a/mods/ITEMS/doors/sounds/doors_door_open.ogg b/mods/doors/sounds/doors_door_open.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/sounds/doors_door_open.ogg rename to mods/doors/sounds/doors_door_open.ogg diff --git a/mods/ITEMS/doors/sounds/doors_fencegate_close.ogg b/mods/doors/sounds/doors_fencegate_close.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/sounds/doors_fencegate_close.ogg rename to mods/doors/sounds/doors_fencegate_close.ogg diff --git a/mods/ITEMS/doors/sounds/doors_fencegate_open.ogg b/mods/doors/sounds/doors_fencegate_open.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/sounds/doors_fencegate_open.ogg rename to mods/doors/sounds/doors_fencegate_open.ogg diff --git a/mods/ITEMS/doors/sounds/doors_glass_door_close.ogg b/mods/doors/sounds/doors_glass_door_close.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/sounds/doors_glass_door_close.ogg rename to mods/doors/sounds/doors_glass_door_close.ogg diff --git a/mods/ITEMS/doors/sounds/doors_glass_door_open.ogg b/mods/doors/sounds/doors_glass_door_open.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/sounds/doors_glass_door_open.ogg rename to mods/doors/sounds/doors_glass_door_open.ogg diff --git a/mods/ITEMS/doors/sounds/doors_steel_door_close.ogg b/mods/doors/sounds/doors_steel_door_close.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/sounds/doors_steel_door_close.ogg rename to mods/doors/sounds/doors_steel_door_close.ogg diff --git a/mods/ITEMS/doors/sounds/doors_steel_door_open.ogg b/mods/doors/sounds/doors_steel_door_open.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/sounds/doors_steel_door_open.ogg rename to mods/doors/sounds/doors_steel_door_open.ogg diff --git a/mods/ITEMS/doors/textures/doors_blank.png b/mods/doors/textures/doors_blank.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_blank.png rename to mods/doors/textures/doors_blank.png diff --git a/mods/ITEMS/doors/textures/doors_door_glass.png b/mods/doors/textures/doors_door_glass.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_door_glass.png rename to mods/doors/textures/doors_door_glass.png diff --git a/mods/ITEMS/doors/textures/doors_door_obsidian_glass.png b/mods/doors/textures/doors_door_obsidian_glass.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_door_obsidian_glass.png rename to mods/doors/textures/doors_door_obsidian_glass.png diff --git a/mods/ITEMS/doors/textures/doors_door_steel.png b/mods/doors/textures/doors_door_steel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_door_steel.png rename to mods/doors/textures/doors_door_steel.png diff --git a/mods/ITEMS/doors/textures/doors_door_wood.png b/mods/doors/textures/doors_door_wood.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_door_wood.png rename to mods/doors/textures/doors_door_wood.png diff --git a/mods/ITEMS/doors/textures/doors_item_glass.png b/mods/doors/textures/doors_item_glass.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_item_glass.png rename to mods/doors/textures/doors_item_glass.png diff --git a/mods/ITEMS/doors/textures/doors_item_obsidian_glass.png b/mods/doors/textures/doors_item_obsidian_glass.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_item_obsidian_glass.png rename to mods/doors/textures/doors_item_obsidian_glass.png diff --git a/mods/ITEMS/doors/textures/doors_item_steel.png b/mods/doors/textures/doors_item_steel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_item_steel.png rename to mods/doors/textures/doors_item_steel.png diff --git a/mods/ITEMS/doors/textures/doors_item_wood.png b/mods/doors/textures/doors_item_wood.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_item_wood.png rename to mods/doors/textures/doors_item_wood.png diff --git a/mods/ITEMS/doors/textures/doors_trapdoor.png b/mods/doors/textures/doors_trapdoor.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_trapdoor.png rename to mods/doors/textures/doors_trapdoor.png diff --git a/mods/doors/textures/doors_trapdoor_side.png b/mods/doors/textures/doors_trapdoor_side.png new file mode 100755 index 0000000..4a8b99f Binary files /dev/null and b/mods/doors/textures/doors_trapdoor_side.png differ diff --git a/mods/ITEMS/doors/textures/doors_trapdoor_steel.png b/mods/doors/textures/doors_trapdoor_steel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_trapdoor_steel.png rename to mods/doors/textures/doors_trapdoor_steel.png diff --git a/mods/ITEMS/doors/textures/doors_trapdoor_steel_side.png b/mods/doors/textures/doors_trapdoor_steel_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/doors/textures/doors_trapdoor_steel_side.png rename to mods/doors/textures/doors_trapdoor_steel_side.png diff --git a/mods/dungeon_loot/README.txt b/mods/dungeon_loot/README.txt new file mode 100755 index 0000000..c500d25 --- /dev/null +++ b/mods/dungeon_loot/README.txt @@ -0,0 +1,11 @@ +Minetest Game mod: dungeon_loot +=============================== +Adds randomly generated chests with some "loot" to generated dungeons, +an API to register additional loot is provided. +Only works if dungeons are actually enabled in mapgen flags. + +License information can be found in license.txt + +Authors of source code +---------------------- +Originally by sfan5 (MIT) diff --git a/mods/ITEMS/fire/depends.txt b/mods/dungeon_loot/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/depends.txt rename to mods/dungeon_loot/depends.txt diff --git a/mods/dungeon_loot/init.lua b/mods/dungeon_loot/init.lua new file mode 100755 index 0000000..9d8ac52 --- /dev/null +++ b/mods/dungeon_loot/init.lua @@ -0,0 +1,8 @@ +dungeon_loot = {} + +dungeon_loot.CHESTS_MIN = 0 -- not necessarily in a single dungeon +dungeon_loot.CHESTS_MAX = 2 +dungeon_loot.STACKS_PER_CHEST_MAX = 8 + +dofile(minetest.get_modpath("dungeon_loot") .. "/loot.lua") +dofile(minetest.get_modpath("dungeon_loot") .. "/mapgen.lua") diff --git a/mods/dungeon_loot/license.txt b/mods/dungeon_loot/license.txt new file mode 100755 index 0000000..0af30a0 --- /dev/null +++ b/mods/dungeon_loot/license.txt @@ -0,0 +1,24 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2017 sfan5 + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/mods/dungeon_loot/loot.lua b/mods/dungeon_loot/loot.lua new file mode 100755 index 0000000..3fe0bff --- /dev/null +++ b/mods/dungeon_loot/loot.lua @@ -0,0 +1,62 @@ +dungeon_loot.registered_loot = { + -- buckets + {name = "bucket:bucket_empty", chance = 0.55}, + -- water in deserts or above ground, lava otherwise + {name = "bucket:bucket_water", chance = 0.45, types = {"sandstone", "desert"}}, + {name = "bucket:bucket_water", chance = 0.45, y = {0, 32768}, types = {"normal"}}, + {name = "bucket:bucket_lava", chance = 0.45, y = {-32768, -1}, types = {"normal"}}, + + -- various items + {name = "default:stick", chance = 0.6, count = {3, 6}}, + {name = "default:flint", chance = 0.4, count = {1, 3}}, + {name = "vessels:glass_fragments", chance = 0.35, count = {1, 4}}, + {name = "carts:rail", chance = 0.35, count = {1, 6}}, + + -- farming / consumable + {name = "farming:string", chance = 0.5, count = {1, 8}}, + {name = "farming:wheat", chance = 0.5, count = {2, 5}}, + {name = "default:apple", chance = 0.4, count = {1, 4}}, + {name = "farming:seed_cotton", chance = 0.4, count = {1, 4}, types = {"normal"}}, + {name = "default:cactus", chance = 0.4, count = {1, 4}, types = {"sandstone", "desert"}}, + + -- minerals + {name = "default:coal_lump", chance = 0.9, count = {1, 12}}, + {name = "default:gold_ingot", chance = 0.5}, + {name = "default:steel_ingot", chance = 0.4, count = {1, 6}}, + {name = "default:mese_crystal", chance = 0.1, count = {2, 3}}, + + -- tools + {name = "default:sword_wood", chance = 0.6}, + {name = "default:pick_stone", chance = 0.3}, + {name = "default:axe_diamond", chance = 0.05}, + + -- natural materials + {name = "default:sand", chance = 0.8, count = {4, 32}, y = {-64, 32768}, types = {"normal"}}, + {name = "default:desert_sand", chance = 0.8, count = {4, 32}, y = {-64, 32768}, types = {"sandstone"}}, + {name = "default:desert_cobble", chance = 0.8, count = {4, 32}, types = {"desert"}}, + {name = "default:dirt", chance = 0.6, count = {2, 16}, y = {-64, 32768}}, + {name = "default:obsidian", chance = 0.25, count = {1, 3}, y = {-32768, -512}}, + {name = "default:mese", chance = 0.15, y = {-32768, -512}}, +} + +function dungeon_loot.register(t) + if t.name ~= nil then + t = {t} -- single entry + end + for _, loot in ipairs(t) do + table.insert(dungeon_loot.registered_loot, loot) + end +end + +function dungeon_loot._internal_get_loot(pos_y, dungeontype) + -- filter by y pos and type + local ret = {} + for _, l in ipairs(dungeon_loot.registered_loot) do + if l.y == nil or (pos_y >= l.y[1] and pos_y <= l.y[2]) then + if l.types == nil or table.indexof(l.types, dungeontype) ~= -1 then + table.insert(ret, l) + end + end + end + return ret +end diff --git a/mods/dungeon_loot/mapgen.lua b/mods/dungeon_loot/mapgen.lua new file mode 100755 index 0000000..c6a4509 --- /dev/null +++ b/mods/dungeon_loot/mapgen.lua @@ -0,0 +1,168 @@ +minetest.set_gen_notify({dungeon = true, temple = true}) + +local function noise3d_integer(noise, pos) + return math.abs(math.floor(noise:get_3d(pos) * 0x7fffffff)) +end + +local function random_sample(rand, list, count) + local ret = {} + for n = 1, count do + local idx = rand:next(1, #list) + table.insert(ret, list[idx]) + table.remove(list, idx) + end + return ret +end + +local function find_walls(cpos) + local wall = minetest.registered_aliases["mapgen_cobble"] + local wall_alt = minetest.registered_aliases["mapgen_mossycobble"] + local wall_ss = minetest.registered_aliases["mapgen_sandstonebrick"] + local wall_ds = minetest.registered_aliases["mapgen_desert_stone"] + local is_wall = function(node) + return table.indexof({wall, wall_alt, wall_ss, wall_ds}, node.name) ~= -1 + end + + local dirs = {{x=1, z=0}, {x=-1, z=0}, {x=0, z=1}, {x=0, z=-1}} + local get_node = minetest.get_node + + local ret = {} + local mindist = {x=0, z=0} + local min = function(a, b) return a ~= 0 and math.min(a, b) or b end + local wallnode + for _, dir in ipairs(dirs) do + for i = 1, 9 do -- 9 = max room size / 2 + local pos = vector.add(cpos, {x=dir.x*i, y=0, z=dir.z*i}) + + -- continue in that direction until we find a wall-like node + local node = get_node(pos) + if is_wall(node) then + local front_below = vector.subtract(pos, {x=dir.x, y=1, z=dir.z}) + local above = vector.add(pos, {x=0, y=1, z=0}) + + -- check that it: + --- is at least 2 nodes high (not a staircase) + --- has a floor + if is_wall(get_node(front_below)) and is_wall(get_node(above)) then + table.insert(ret, {pos = pos, facing = {x=-dir.x, y=0, z=-dir.z}}) + if dir.z == 0 then + mindist.x = min(mindist.x, i-1) + else + mindist.z = min(mindist.z, i-1) + end + wallnode = node.name + end + -- abort even if it wasn't a wall cause something is in the way + break + end + end + end + + local mapping = { + [wall_ss] = "sandstone", + [wall_ds] = "desert" + } + return { + walls = ret, + size = {x=mindist.x*2, z=mindist.z*2}, + type = mapping[wallnode] or "normal" + } +end + +local function populate_chest(pos, rand, dungeontype) + --minetest.chat_send_all("chest placed at " .. minetest.pos_to_string(pos) .. " [" .. dungeontype .. "]") + --minetest.add_node(vector.add(pos, {x=0, y=1, z=0}), {name="default:torch", param2=1}) + + local item_list = dungeon_loot._internal_get_loot(pos.y, dungeontype) + -- take random (partial) sample of all possible items + assert(#item_list >= dungeon_loot.STACKS_PER_CHEST_MAX) + item_list = random_sample(rand, item_list, dungeon_loot.STACKS_PER_CHEST_MAX) + + -- apply chances / randomized amounts and collect resulting items + local items = {} + for _, loot in ipairs(item_list) do + if rand:next(0, 1000) / 1000 <= loot.chance then + local itemdef = minetest.registered_items[loot.name] + local amount = 1 + if loot.count ~= nil then + amount = rand:next(loot.count[1], loot.count[2]) + end + + if itemdef.tool_capabilities then + for n = 1, amount do + local wear = rand:next(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear + table.insert(items, ItemStack({name = loot.name, wear = wear})) + end + elseif itemdef.stack_max == 1 then + -- not stackable, add separately + for n = 1, amount do + table.insert(items, loot.name) + end + else + table.insert(items, ItemStack({name = loot.name, count = amount})) + end + end + end + + -- place items at random places in chest + local inv = minetest.get_meta(pos):get_inventory() + local listsz = inv:get_size("main") + assert(listsz >= #items) + for _, item in ipairs(items) do + local index = rand:next(1, listsz) + if inv:get_stack("main", index):is_empty() then + inv:set_stack("main", index, item) + else + inv:add_item("main", item) -- space occupied, just put it anywhere + end + end +end + + +minetest.register_on_generated(function(minp, maxp, blockseed) + local gennotify = minetest.get_mapgen_object("gennotify") + local poslist = gennotify["dungeon"] or {} + for _, entry in ipairs(gennotify["temple"] or {}) do + table.insert(poslist, entry) + end + if #poslist == 0 then return end + + local noise = minetest.get_perlin(10115, 4, 0.5, 1) + local rand = PcgRandom(noise3d_integer(noise, poslist[1])) + + local candidates = {} + -- process at most 8 rooms to keep runtime of this predictable + local num_process = math.min(#poslist, 8) + for i = 1, num_process do + local room = find_walls(poslist[i]) + -- skip small rooms and everything that doesn't at least have 3 walls + if math.min(room.size.x, room.size.z) >= 4 and #room.walls >= 3 then + table.insert(candidates, room) + end + end + + local num_chests = rand:next(dungeon_loot.CHESTS_MIN, dungeon_loot.CHESTS_MAX) + num_chests = math.min(#candidates, num_chests) + local rooms = random_sample(rand, candidates, num_chests) + + for _, room in ipairs(rooms) do + -- choose place somewhere in front of any of the walls + local wall = room.walls[rand:next(1, #room.walls)] + local v, vi -- vector / axis that runs alongside the wall + if wall.facing.x ~= 0 then + v, vi = {x=0, y=0, z=1}, "z" + else + v, vi = {x=1, y=0, z=0}, "x" + end + local chestpos = vector.add(wall.pos, wall.facing) + local off = rand:next(-room.size[vi]/2 + 1, room.size[vi]/2 - 1) + chestpos = vector.add(chestpos, vector.multiply(v, off)) + + if minetest.get_node(chestpos).name == "air" then + -- make it face inwards to the room + local facedir = minetest.dir_to_facedir(vector.multiply(wall.facing, -1)) + minetest.add_node(chestpos, {name = "default:chest", param2 = facedir}) + populate_chest(chestpos, PcgRandom(noise3d_integer(noise, chestpos)), room.type) + end + end +end) diff --git a/mods/ITEMS/dye/README.txt b/mods/dye/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/README.txt rename to mods/dye/README.txt diff --git a/mods/ITEMS/dye/depends.txt b/mods/dye/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/depends.txt rename to mods/dye/depends.txt diff --git a/mods/dye/init.lua b/mods/dye/init.lua new file mode 100755 index 0000000..8f26fed --- /dev/null +++ b/mods/dye/init.lua @@ -0,0 +1,112 @@ +-- Other mods can use these for looping through available colors + +dye = {} +dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"} +dye.excolors = {"white", "lightgrey", "grey", "darkgrey", "black", "red", "orange", "yellow", + "lime", "green", "aqua", "cyan", "sky_blue", "blue", "violet", "magenta", "red_violet"} + +-- Make dye names and descriptions available globally + +dye.dyes = { + {"white", "White"}, + {"grey", "Grey"}, + {"dark_grey", "Dark grey"}, + {"black", "Black"}, + {"violet", "Violet"}, + {"blue", "Blue"}, + {"cyan", "Cyan"}, + {"dark_green", "Dark green"}, + {"green", "Green"}, + {"yellow", "Yellow"}, + {"brown", "Brown"}, + {"orange", "Orange"}, + {"red", "Red"}, + {"magenta", "Magenta"}, + {"pink", "Pink"}, +} + +-- This collection of colors is partly a historic thing, partly something else + +local dyes = { + {"white", "White Dye", {dye=1, basecolor_white=1, excolor_white=1, unicolor_white=1}}, + {"grey", "Grey Dye", {dye=1, basecolor_grey=1, excolor_grey=1, unicolor_grey=1}}, + {"dark_grey", "Dark Grey Dye", {dye=1, basecolor_grey=1, excolor_darkgrey=1, unicolor_darkgrey=1}}, + {"black", "Black Dye", {dye=1, basecolor_black=1, excolor_black=1, unicolor_black=1}}, + {"violet", "Violet Dye", {dye=1, basecolor_magenta=1, excolor_violet=1, unicolor_violet=1}}, + {"blue", "Blue Dye", {dye=1, basecolor_blue=1, excolor_blue=1, unicolor_blue=1}}, + {"cyan", "Cyan Dye", {dye=1, basecolor_cyan=1, excolor_cyan=1, unicolor_cyan=1}}, + {"dark_green", "Dark Green Dye", {dye=1, basecolor_green=1, excolor_green=1, unicolor_dark_green=1}}, + {"green", "Green Dye", {dye=1, basecolor_green=1, excolor_green=1, unicolor_green=1}}, + {"yellow", "Yellow Dye", {dye=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1}}, + {"brown", "Brown Dye", {dye=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1}}, + {"orange", "Orange Dye", {dye=1, basecolor_orange=1, excolor_orange=1, unicolor_orange=1}}, + {"red", "Red Dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_red=1}}, + {"magenta", "Magenta Dye", {dye=1, basecolor_magenta=1, excolor_red_violet=1, unicolor_red_violet=1}}, + {"pink", "Pink Dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_light_red=1}}, +} + +-- Define items + +for _, row in ipairs(dyes) do + local name = row[1] + local description = row[2] + local groups = row[3] + local item_name = "dye:" .. name + local item_image = "dye_" .. name .. ".png" + minetest.register_craftitem(item_name, { + inventory_image = item_image, + description = description, + groups = groups + }) + minetest.register_craft({ + type = "shapeless", + output = item_name .. " 4", + recipe = {"group:flower,color_" .. name}, + }) +end + +-- Manually add coal->black dye + +minetest.register_craft({ + type = "shapeless", + output = "dye:black 4", + recipe = {"group:coal"}, +}) + +-- Mix recipes +local dye_recipes = { + -- src1, src2, dst + -- RYB mixes + {"red", "blue", "violet"}, -- "purple" + {"yellow", "red", "orange"}, + {"yellow", "blue", "green"}, + -- RYB complementary mixes + {"yellow", "violet", "dark_grey"}, + {"blue", "orange", "dark_grey"}, + -- CMY mixes - approximation + {"cyan", "yellow", "green"}, + {"cyan", "magenta", "blue"}, + {"yellow", "magenta", "red"}, + -- other mixes that result in a color we have + {"red", "green", "brown"}, + {"magenta", "blue", "violet"}, + {"green", "blue", "cyan"}, + {"pink", "violet", "magenta"}, + -- mixes with black + {"white", "black", "grey"}, + {"grey", "black", "dark_grey"}, + {"green", "black", "dark_green"}, + {"orange", "black", "brown"}, + -- mixes with white + {"white", "red", "pink"}, + {"white", "dark_grey", "grey"}, + {"white", "dark_green", "green"}, +} + +for _, mix in pairs(dye_recipes) do + minetest.register_craft({ + type = "shapeless", + output = 'dye:' .. mix[3] .. ' 2', + recipe = {'dye:' .. mix[1], 'dye:' .. mix[2]}, + }) +end diff --git a/mods/ITEMS/dye/license.txt b/mods/dye/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/license.txt rename to mods/dye/license.txt diff --git a/mods/ITEMS/dye/textures/dye_black.png b/mods/dye/textures/dye_black.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_black.png rename to mods/dye/textures/dye_black.png diff --git a/mods/ITEMS/dye/textures/dye_blue.png b/mods/dye/textures/dye_blue.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_blue.png rename to mods/dye/textures/dye_blue.png diff --git a/mods/ITEMS/dye/textures/dye_brown.png b/mods/dye/textures/dye_brown.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_brown.png rename to mods/dye/textures/dye_brown.png diff --git a/mods/ITEMS/dye/textures/dye_cyan.png b/mods/dye/textures/dye_cyan.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_cyan.png rename to mods/dye/textures/dye_cyan.png diff --git a/mods/ITEMS/dye/textures/dye_dark_green.png b/mods/dye/textures/dye_dark_green.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_dark_green.png rename to mods/dye/textures/dye_dark_green.png diff --git a/mods/ITEMS/dye/textures/dye_dark_grey.png b/mods/dye/textures/dye_dark_grey.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_dark_grey.png rename to mods/dye/textures/dye_dark_grey.png diff --git a/mods/ITEMS/dye/textures/dye_green.png b/mods/dye/textures/dye_green.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_green.png rename to mods/dye/textures/dye_green.png diff --git a/mods/ITEMS/dye/textures/dye_grey.png b/mods/dye/textures/dye_grey.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_grey.png rename to mods/dye/textures/dye_grey.png diff --git a/mods/ITEMS/dye/textures/dye_magenta.png b/mods/dye/textures/dye_magenta.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_magenta.png rename to mods/dye/textures/dye_magenta.png diff --git a/mods/ITEMS/dye/textures/dye_orange.png b/mods/dye/textures/dye_orange.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_orange.png rename to mods/dye/textures/dye_orange.png diff --git a/mods/ITEMS/dye/textures/dye_pink.png b/mods/dye/textures/dye_pink.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_pink.png rename to mods/dye/textures/dye_pink.png diff --git a/mods/ITEMS/dye/textures/dye_red.png b/mods/dye/textures/dye_red.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_red.png rename to mods/dye/textures/dye_red.png diff --git a/mods/ITEMS/dye/textures/dye_violet.png b/mods/dye/textures/dye_violet.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_violet.png rename to mods/dye/textures/dye_violet.png diff --git a/mods/ITEMS/dye/textures/dye_white.png b/mods/dye/textures/dye_white.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_white.png rename to mods/dye/textures/dye_white.png diff --git a/mods/ITEMS/dye/textures/dye_yellow.png b/mods/dye/textures/dye_yellow.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dye/textures/dye_yellow.png rename to mods/dye/textures/dye_yellow.png diff --git a/mods/farming/README.txt b/mods/farming/README.txt new file mode 100755 index 0000000..d46748d --- /dev/null +++ b/mods/farming/README.txt @@ -0,0 +1,40 @@ +Minetest Game mod: farming +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by PilzAdam (MIT) +webdesigner97 (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +Created by PilzAdam (CC BY 3.0): + farming_bread.png + farming_soil.png + farming_soil_wet.png + farming_soil_wet_side.png + farming_string.png + +Created by BlockMen (CC BY 3.0): + farming_tool_diamondhoe.png + farming_tool_mesehoe.png + farming_tool_bronzehoe.png + farming_tool_steelhoe.png + farming_tool_stonehoe.png + farming_tool_woodhoe.png + +Created by MasterGollum (CC BY 3.0): + farming_straw.png + +Created by Gambit (CC BY 3.0): + farming_wheat.png + farming_wheat_*.png + farming_cotton_*.png + farming_flour.png + farming_cotton_seed.png + farming_wheat_seed.png + +Created by Napiophelios (CC BY-SA 3.0): + farming_cotton.png diff --git a/mods/farming/api.lua b/mods/farming/api.lua new file mode 100755 index 0000000..1c613a6 --- /dev/null +++ b/mods/farming/api.lua @@ -0,0 +1,391 @@ + +-- Wear out hoes, place soil +-- TODO Ignore group:flower +farming.registered_plants = {} + +farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return + end + if pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + local above = minetest.get_node(p) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return + end + if not minetest.registered_nodes[above.name] then + return + end + + -- check if the node above the pointed thing is air + if above.name ~= "air" then + return + end + + -- check if pointing at soil + if minetest.get_item_group(under.name, "soil") ~= 1 then + return + end + + -- check if (wet) soil defined + local regN = minetest.registered_nodes + if regN[under.name].soil == nil or regN[under.name].soil.wet == nil or regN[under.name].soil.dry == nil then + return + end + + if minetest.is_protected(pt.under, user:get_player_name()) then + minetest.record_protection_violation(pt.under, user:get_player_name()) + return + end + if minetest.is_protected(pt.above, user:get_player_name()) then + minetest.record_protection_violation(pt.above, user:get_player_name()) + return + end + + -- turn the node into soil and play sound + minetest.set_node(pt.under, {name = regN[under.name].soil.dry}) + minetest.sound_play("default_dig_crumbly", { + pos = pt.under, + gain = 0.5, + }) + + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(user:get_player_name())) then + -- wear tool + local wdef = itemstack:get_definition() + itemstack:add_wear(65535/(uses-1)) + -- tool break sound + if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then + minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}) + end + end + return itemstack +end + +-- Register new hoes +farming.register_hoe = function(name, def) + -- Check for : prefix (register new hoes in your mod's namespace) + if name:sub(1,1) ~= ":" then + name = ":" .. name + end + -- Check def table + if def.description == nil then + def.description = "Hoe" + end + if def.inventory_image == nil then + def.inventory_image = "unknown_item.png" + end + if def.max_uses == nil then + def.max_uses = 30 + end + -- Register the tool + minetest.register_tool(name, { + description = def.description, + inventory_image = def.inventory_image, + on_use = function(itemstack, user, pointed_thing) + return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses) + end, + groups = def.groups, + sound = {breaks = "default_tool_breaks"}, + }) + -- Register its recipe + if def.recipe then + minetest.register_craft({ + output = name:sub(2), + recipe = def.recipe + }) + elseif def.material then + minetest.register_craft({ + output = name:sub(2), + recipe = { + {def.material, def.material, ""}, + {"", "group:stick", ""}, + {"", "group:stick", ""} + } + }) + end +end + +-- how often node timers for plants will tick, +/- some random value +local function tick(pos) + minetest.get_node_timer(pos):start(math.random(166, 286)) +end +-- how often a growth failure tick is retried (e.g. too dark) +local function tick_again(pos) + minetest.get_node_timer(pos):start(math.random(40, 80)) +end + +-- Seed placement +farming.place_seed = function(itemstack, placer, pointed_thing, plantname) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return itemstack + end + if pt.type ~= "node" then + return itemstack + end + + local under = minetest.get_node(pt.under) + local above = minetest.get_node(pt.above) + + local player_name = placer and placer:get_player_name() or "" + + if minetest.is_protected(pt.under, player_name) then + minetest.record_protection_violation(pt.under, player_name) + return + end + if minetest.is_protected(pt.above, player_name) then + minetest.record_protection_violation(pt.above, player_name) + return + end + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return itemstack + end + if not minetest.registered_nodes[above.name] then + return itemstack + end + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y+1 then + return itemstack + end + + -- check if you can replace the node above the pointed node + if not minetest.registered_nodes[above.name].buildable_to then + return itemstack + end + + -- check if pointing at soil + if minetest.get_item_group(under.name, "soil") < 2 then + return itemstack + end + + -- add the node and remove 1 item from the itemstack + minetest.add_node(pt.above, {name = plantname, param2 = 1}) + tick(pt.above) + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) then + itemstack:take_item() + end + return itemstack +end + +farming.grow_plant = function(pos, elapsed) + local node = minetest.get_node(pos) + local name = node.name + local def = minetest.registered_nodes[name] + + if not def.next_plant then + -- disable timer for fully grown plant + return + end + + -- grow seed + if minetest.get_item_group(node.name, "seed") and def.fertility then + local soil_node = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) + if not soil_node then + tick_again(pos) + return + end + -- omitted is a check for light, we assume seeds can germinate in the dark. + for _, v in pairs(def.fertility) do + if minetest.get_item_group(soil_node.name, v) ~= 0 then + local placenode = {name = def.next_plant} + if def.place_param2 then + placenode.param2 = def.place_param2 + end + minetest.swap_node(pos, placenode) + if minetest.registered_nodes[def.next_plant].next_plant then + tick(pos) + return + end + end + end + + return + end + + -- check if on wet soil + local below = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if minetest.get_item_group(below.name, "soil") < 3 then + tick_again(pos) + return + end + + -- check light + local light = minetest.get_node_light(pos) + if not light or light < def.minlight or light > def.maxlight then + tick_again(pos) + return + end + + -- grow + local placenode = {name = def.next_plant} + if def.place_param2 then + placenode.param2 = def.place_param2 + end + minetest.swap_node(pos, placenode) + + -- new timer needed? + if minetest.registered_nodes[def.next_plant].next_plant then + tick(pos) + end + return +end + +-- Register plants +farming.register_plant = function(name, def) + local mname = name:split(":")[1] + local pname = name:split(":")[2] + + -- Check def table + if not def.description then + def.description = "Seed" + end + if not def.inventory_image then + def.inventory_image = "unknown_item.png" + end + if not def.steps then + return nil + end + if not def.minlight then + def.minlight = 1 + end + if not def.maxlight then + def.maxlight = 14 + end + if not def.fertility then + def.fertility = {} + end + + farming.registered_plants[pname] = def + + -- Register seed + local lbm_nodes = {mname .. ":seed_" .. pname} + local g = {seed = 1, snappy = 3, attached_node = 1, flammable = 2} + for k, v in pairs(def.fertility) do + g[v] = 1 + end + minetest.register_node(":" .. mname .. ":seed_" .. pname, { + description = def.description, + tiles = {def.inventory_image}, + inventory_image = def.inventory_image, + wield_image = def.inventory_image, + drawtype = "signlike", + groups = g, + paramtype = "light", + paramtype2 = "wallmounted", + place_param2 = def.place_param2 or nil, -- this isn't actually used for placement + walkable = false, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + fertility = def.fertility, + sounds = default.node_sound_dirt_defaults({ + dig = {name = "", gain = 0}, + dug = {name = "default_grass_footstep", gain = 0.2}, + place = {name = "default_place_node", gain = 0.25}, + }), + + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":seed_" .. pname) + end, + next_plant = mname .. ":" .. pname .. "_1", + on_timer = farming.grow_plant, + minlight = def.minlight, + maxlight = def.maxlight, + }) + + -- Register harvest + minetest.register_craftitem(":" .. mname .. ":" .. pname, { + description = pname:gsub("^%l", string.upper), + inventory_image = mname .. "_" .. pname .. ".png", + groups = def.groups or {flammable = 2}, + }) + + -- Register growing steps + for i = 1, def.steps do + local base_rarity = 1 + if def.steps ~= 1 then + base_rarity = 8 - (i - 1) * 7 / (def.steps - 1) + end + local drop = { + items = { + {items = {mname .. ":" .. pname}, rarity = base_rarity}, + {items = {mname .. ":" .. pname}, rarity = base_rarity * 2}, + {items = {mname .. ":seed_" .. pname}, rarity = base_rarity}, + {items = {mname .. ":seed_" .. pname}, rarity = base_rarity * 2}, + } + } + local nodegroups = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1} + nodegroups[pname] = i + + local next_plant = nil + + if i < def.steps then + next_plant = mname .. ":" .. pname .. "_" .. (i + 1) + lbm_nodes[#lbm_nodes + 1] = mname .. ":" .. pname .. "_" .. i + end + + minetest.register_node(":" .. mname .. ":" .. pname .. "_" .. i, { + drawtype = "plantlike", + waving = 1, + tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, + paramtype = "light", + paramtype2 = def.paramtype2 or nil, + place_param2 = def.place_param2 or nil, + walkable = false, + buildable_to = true, + drop = drop, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = nodegroups, + sounds = default.node_sound_leaves_defaults(), + next_plant = next_plant, + on_timer = farming.grow_plant, + minlight = def.minlight, + maxlight = def.maxlight, + }) + end + + -- replacement LBM for pre-nodetimer plants + minetest.register_lbm({ + name = ":" .. mname .. ":start_nodetimer_" .. pname, + nodenames = lbm_nodes, + action = function(pos, node) + tick_again(pos) + end, + }) + + -- Return + local r = { + seed = mname .. ":seed_" .. pname, + harvest = mname .. ":" .. pname + } + return r +end diff --git a/mods/farming/depends.txt b/mods/farming/depends.txt new file mode 100755 index 0000000..301d971 --- /dev/null +++ b/mods/farming/depends.txt @@ -0,0 +1,3 @@ +default +wool +stairs diff --git a/mods/farming/hoes.lua b/mods/farming/hoes.lua new file mode 100755 index 0000000..d6a6565 --- /dev/null +++ b/mods/farming/hoes.lua @@ -0,0 +1,47 @@ +farming.register_hoe(":farming:hoe_wood", { + description = "Wooden Hoe", + inventory_image = "farming_tool_woodhoe.png", + max_uses = 30, + material = "group:wood", + groups = {flammable = 2}, +}) + +farming.register_hoe(":farming:hoe_stone", { + description = "Stone Hoe", + inventory_image = "farming_tool_stonehoe.png", + max_uses = 90, + material = "group:stone" +}) + +farming.register_hoe(":farming:hoe_steel", { + description = "Steel Hoe", + inventory_image = "farming_tool_steelhoe.png", + max_uses = 500, + material = "default:steel_ingot" +}) + +-- The following are deprecated by removing the 'material' field to prevent +-- crafting and removing from creative inventory, to cause them to eventually +-- disappear from worlds. The registrations should be removed in a future +-- release. + +farming.register_hoe(":farming:hoe_bronze", { + description = "Bronze Hoe", + inventory_image = "farming_tool_bronzehoe.png", + max_uses = 220, + groups = {not_in_creative_inventory = 1}, +}) + +farming.register_hoe(":farming:hoe_mese", { + description = "Mese Hoe", + inventory_image = "farming_tool_mesehoe.png", + max_uses = 350, + groups = {not_in_creative_inventory = 1}, +}) + +farming.register_hoe(":farming:hoe_diamond", { + description = "Diamond Hoe", + inventory_image = "farming_tool_diamondhoe.png", + max_uses = 500, + groups = {not_in_creative_inventory = 1}, +}) diff --git a/mods/farming/init.lua b/mods/farming/init.lua new file mode 100755 index 0000000..723201d --- /dev/null +++ b/mods/farming/init.lua @@ -0,0 +1,139 @@ +-- Global farming namespace + +farming = {} +farming.path = minetest.get_modpath("farming") + + +-- Load files + +dofile(farming.path .. "/api.lua") +dofile(farming.path .. "/nodes.lua") +dofile(farming.path .. "/hoes.lua") + + +-- WHEAT + +farming.register_plant("farming:wheat", { + description = "Wheat Seed", + paramtype2 = "meshoptions", + inventory_image = "farming_wheat_seed.png", + steps = 8, + minlight = 13, + maxlight = default.LIGHT_MAX, + fertility = {"grassland"}, + groups = {food_wheat = 1, flammable = 4}, + place_param2 = 3, +}) + +minetest.register_craftitem("farming:flour", { + description = "Flour", + inventory_image = "farming_flour.png", + groups = {food_flour = 1, flammable = 1}, +}) + +minetest.register_craftitem("farming:bread", { + description = "Bread", + inventory_image = "farming_bread.png", + on_use = minetest.item_eat(5), + groups = {food_bread = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = {"farming:wheat", "farming:wheat", "farming:wheat", "farming:wheat"} +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" +}) + + +-- Cotton + +farming.register_plant("farming:cotton", { + description = "Cotton Seed", + inventory_image = "farming_cotton_seed.png", + steps = 8, + minlight = 13, + maxlight = default.LIGHT_MAX, + fertility = {"grassland", "desert"}, + groups = {flammable = 4}, +}) + +minetest.register_craftitem("farming:string", { + description = "String", + inventory_image = "farming_string.png", + groups = {flammable = 2}, +}) + +minetest.register_craft({ + output = "wool:white", + recipe = { + {"farming:cotton", "farming:cotton"}, + {"farming:cotton", "farming:cotton"}, + } +}) + +minetest.register_craft({ + output = "farming:string 2", + recipe = { + {"farming:cotton"}, + {"farming:cotton"}, + } +}) + + +-- Straw + +minetest.register_craft({ + output = "farming:straw 3", + recipe = { + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", "farming:wheat", "farming:wheat"}, + } +}) + +minetest.register_craft({ + output = "farming:wheat 3", + recipe = { + {"farming:straw"}, + } +}) + + +-- Fuels + +minetest.register_craft({ + type = "fuel", + recipe = "farming:straw", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:wheat", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:cotton", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:string", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:hoe_wood", + burntime = 5, +}) diff --git a/mods/ITEMS/farming/license.txt b/mods/farming/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/license.txt rename to mods/farming/license.txt diff --git a/mods/farming/nodes.lua b/mods/farming/nodes.lua new file mode 100755 index 0000000..c85c7c8 --- /dev/null +++ b/mods/farming/nodes.lua @@ -0,0 +1,189 @@ +minetest.override_item("default:dirt", { + soil = { + base = "default:dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dirt_with_grass", { + soil = { + base = "default:dirt_with_grass", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dirt_with_dry_grass", { + soil = { + base = "default:dirt_with_dry_grass", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dirt_with_rainforest_litter", { + soil = { + base = "default:dirt_with_rainforest_litter", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dirt_with_coniferous_litter", { + soil = { + base = "default:dirt_with_coniferous_litter", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.register_node("farming:soil", { + description = "Soil", + tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, + drop = "default:dirt", + groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + soil = { + base = "default:dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.register_node("farming:soil_wet", { + description = "Wet Soil", + tiles = {"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet_side.png"}, + drop = "default:dirt", + groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + soil = { + base = "default:dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:desert_sand", { + groups = {crumbly=3, falling_node=1, sand=1, soil = 1}, + soil = { + base = "default:desert_sand", + dry = "farming:desert_sand_soil", + wet = "farming:desert_sand_soil_wet" + } +}) +minetest.register_node("farming:desert_sand_soil", { + description = "Desert Sand Soil", + drop = "default:desert_sand", + tiles = {"farming_desert_sand_soil.png", "default_desert_sand.png"}, + groups = {crumbly=3, not_in_creative_inventory = 1, falling_node=1, sand=1, soil = 2, desert = 1, field = 1}, + sounds = default.node_sound_sand_defaults(), + soil = { + base = "default:desert_sand", + dry = "farming:desert_sand_soil", + wet = "farming:desert_sand_soil_wet" + } +}) + +minetest.register_node("farming:desert_sand_soil_wet", { + description = "Wet Desert Sand Soil", + drop = "default:desert_sand", + tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"}, + groups = {crumbly=3, falling_node=1, sand=1, not_in_creative_inventory=1, soil=3, wet = 1, desert = 1, field = 1}, + sounds = default.node_sound_sand_defaults(), + soil = { + base = "default:desert_sand", + dry = "farming:desert_sand_soil", + wet = "farming:desert_sand_soil_wet" + } +}) + +minetest.register_node("farming:straw", { + description = "Straw", + tiles = {"farming_straw.png"}, + is_ground_content = false, + groups = {snappy=3, flammable=4, fall_damage_add_percent=-30}, + sounds = default.node_sound_leaves_defaults(), +}) + +stairs.register_stair_and_slab( + "straw", + "farming:straw", + {snappy = 3, flammable = 4}, + {"farming_straw.png"}, + "Straw Stair", + "Straw Slab", + default.node_sound_leaves_defaults() +) + +minetest.register_abm({ + label = "Farming soil", + nodenames = {"group:field"}, + interval = 15, + chance = 4, + action = function(pos, node) + local n_def = minetest.registered_nodes[node.name] or nil + local wet = n_def.soil.wet or nil + local base = n_def.soil.base or nil + local dry = n_def.soil.dry or nil + if not n_def or not n_def.soil or not wet or not base or not dry then + return + end + + pos.y = pos.y + 1 + local nn = minetest.get_node_or_nil(pos) + if not nn or not nn.name then + return + end + local nn_def = minetest.registered_nodes[nn.name] or nil + pos.y = pos.y - 1 + + if nn_def and nn_def.walkable and minetest.get_item_group(nn.name, "plant") == 0 then + minetest.set_node(pos, {name = base}) + return + end + -- check if there is water nearby + local wet_lvl = minetest.get_item_group(node.name, "wet") + if minetest.find_node_near(pos, 3, {"group:water"}) then + -- if it is dry soil and not base node, turn it into wet soil + if wet_lvl == 0 then + minetest.set_node(pos, {name = wet}) + end + else + -- only turn back if there are no unloaded blocks (and therefore + -- possible water sources) nearby + if not minetest.find_node_near(pos, 3, {"ignore"}) then + -- turn it back into base if it is already dry + if wet_lvl == 0 then + -- only turn it back if there is no plant/seed on top of it + if minetest.get_item_group(nn.name, "plant") == 0 and minetest.get_item_group(nn.name, "seed") == 0 then + minetest.set_node(pos, {name = base}) + end + + -- if its wet turn it back into dry soil + elseif wet_lvl == 1 then + minetest.set_node(pos, {name = dry}) + end + end + end + end, +}) + + +for i = 1, 5 do + minetest.override_item("default:grass_"..i, {drop = { + max_items = 1, + items = { + {items = {'farming:seed_wheat'},rarity = 5}, + {items = {'default:grass_1'}}, + } + }}) +end + +minetest.override_item("default:junglegrass", {drop = { + max_items = 1, + items = { + {items = {'farming:seed_cotton'},rarity = 8}, + {items = {'default:junglegrass'}}, + } +}}) diff --git a/mods/ITEMS/farming/textures/farming_bread.png b/mods/farming/textures/farming_bread.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_bread.png rename to mods/farming/textures/farming_bread.png diff --git a/mods/farming/textures/farming_cotton.png b/mods/farming/textures/farming_cotton.png new file mode 100755 index 0000000..8aa50e4 Binary files /dev/null and b/mods/farming/textures/farming_cotton.png differ diff --git a/mods/ITEMS/farming/textures/farming_cotton_1.png b/mods/farming/textures/farming_cotton_1.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton_1.png rename to mods/farming/textures/farming_cotton_1.png diff --git a/mods/ITEMS/farming/textures/farming_cotton_2.png b/mods/farming/textures/farming_cotton_2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton_2.png rename to mods/farming/textures/farming_cotton_2.png diff --git a/mods/ITEMS/farming/textures/farming_cotton_3.png b/mods/farming/textures/farming_cotton_3.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton_3.png rename to mods/farming/textures/farming_cotton_3.png diff --git a/mods/ITEMS/farming/textures/farming_cotton_4.png b/mods/farming/textures/farming_cotton_4.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton_4.png rename to mods/farming/textures/farming_cotton_4.png diff --git a/mods/ITEMS/farming/textures/farming_cotton_5.png b/mods/farming/textures/farming_cotton_5.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton_5.png rename to mods/farming/textures/farming_cotton_5.png diff --git a/mods/ITEMS/farming/textures/farming_cotton_6.png b/mods/farming/textures/farming_cotton_6.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton_6.png rename to mods/farming/textures/farming_cotton_6.png diff --git a/mods/ITEMS/farming/textures/farming_cotton_7.png b/mods/farming/textures/farming_cotton_7.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton_7.png rename to mods/farming/textures/farming_cotton_7.png diff --git a/mods/ITEMS/farming/textures/farming_cotton_8.png b/mods/farming/textures/farming_cotton_8.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton_8.png rename to mods/farming/textures/farming_cotton_8.png diff --git a/mods/ITEMS/farming/textures/farming_cotton_seed.png b/mods/farming/textures/farming_cotton_seed.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton_seed.png rename to mods/farming/textures/farming_cotton_seed.png diff --git a/mods/ITEMS/farming/textures/farming_desert_sand_soil.png b/mods/farming/textures/farming_desert_sand_soil.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_desert_sand_soil.png rename to mods/farming/textures/farming_desert_sand_soil.png diff --git a/mods/ITEMS/farming/textures/farming_desert_sand_soil_wet.png b/mods/farming/textures/farming_desert_sand_soil_wet.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_desert_sand_soil_wet.png rename to mods/farming/textures/farming_desert_sand_soil_wet.png diff --git a/mods/ITEMS/farming/textures/farming_desert_sand_soil_wet_side.png b/mods/farming/textures/farming_desert_sand_soil_wet_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_desert_sand_soil_wet_side.png rename to mods/farming/textures/farming_desert_sand_soil_wet_side.png diff --git a/mods/ITEMS/farming/textures/farming_flour.png b/mods/farming/textures/farming_flour.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_flour.png rename to mods/farming/textures/farming_flour.png diff --git a/mods/farming/textures/farming_soil.png b/mods/farming/textures/farming_soil.png new file mode 100755 index 0000000..5cd3e68 Binary files /dev/null and b/mods/farming/textures/farming_soil.png differ diff --git a/mods/farming/textures/farming_soil_wet.png b/mods/farming/textures/farming_soil_wet.png new file mode 100755 index 0000000..0b4487d Binary files /dev/null and b/mods/farming/textures/farming_soil_wet.png differ diff --git a/mods/ITEMS/farming/textures/farming_soil_wet_side.png b/mods/farming/textures/farming_soil_wet_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_soil_wet_side.png rename to mods/farming/textures/farming_soil_wet_side.png diff --git a/mods/ITEMS/farming/textures/farming_straw.png b/mods/farming/textures/farming_straw.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_straw.png rename to mods/farming/textures/farming_straw.png diff --git a/mods/ITEMS/farming/textures/farming_cotton.png b/mods/farming/textures/farming_string.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_cotton.png rename to mods/farming/textures/farming_string.png diff --git a/mods/ITEMS/farming/textures/farming_tool_bronzehoe.png b/mods/farming/textures/farming_tool_bronzehoe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_tool_bronzehoe.png rename to mods/farming/textures/farming_tool_bronzehoe.png diff --git a/mods/ITEMS/farming/textures/farming_tool_diamondhoe.png b/mods/farming/textures/farming_tool_diamondhoe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_tool_diamondhoe.png rename to mods/farming/textures/farming_tool_diamondhoe.png diff --git a/mods/ITEMS/farming/textures/farming_tool_mesehoe.png b/mods/farming/textures/farming_tool_mesehoe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_tool_mesehoe.png rename to mods/farming/textures/farming_tool_mesehoe.png diff --git a/mods/ITEMS/farming/textures/farming_tool_steelhoe.png b/mods/farming/textures/farming_tool_steelhoe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_tool_steelhoe.png rename to mods/farming/textures/farming_tool_steelhoe.png diff --git a/mods/ITEMS/farming/textures/farming_tool_stonehoe.png b/mods/farming/textures/farming_tool_stonehoe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_tool_stonehoe.png rename to mods/farming/textures/farming_tool_stonehoe.png diff --git a/mods/ITEMS/farming/textures/farming_tool_woodhoe.png b/mods/farming/textures/farming_tool_woodhoe.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_tool_woodhoe.png rename to mods/farming/textures/farming_tool_woodhoe.png diff --git a/mods/ITEMS/farming/textures/farming_wheat.png b/mods/farming/textures/farming_wheat.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat.png rename to mods/farming/textures/farming_wheat.png diff --git a/mods/ITEMS/farming/textures/farming_wheat_1.png b/mods/farming/textures/farming_wheat_1.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat_1.png rename to mods/farming/textures/farming_wheat_1.png diff --git a/mods/ITEMS/farming/textures/farming_wheat_2.png b/mods/farming/textures/farming_wheat_2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat_2.png rename to mods/farming/textures/farming_wheat_2.png diff --git a/mods/ITEMS/farming/textures/farming_wheat_3.png b/mods/farming/textures/farming_wheat_3.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat_3.png rename to mods/farming/textures/farming_wheat_3.png diff --git a/mods/ITEMS/farming/textures/farming_wheat_4.png b/mods/farming/textures/farming_wheat_4.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat_4.png rename to mods/farming/textures/farming_wheat_4.png diff --git a/mods/ITEMS/farming/textures/farming_wheat_5.png b/mods/farming/textures/farming_wheat_5.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat_5.png rename to mods/farming/textures/farming_wheat_5.png diff --git a/mods/ITEMS/farming/textures/farming_wheat_6.png b/mods/farming/textures/farming_wheat_6.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat_6.png rename to mods/farming/textures/farming_wheat_6.png diff --git a/mods/ITEMS/farming/textures/farming_wheat_7.png b/mods/farming/textures/farming_wheat_7.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat_7.png rename to mods/farming/textures/farming_wheat_7.png diff --git a/mods/ITEMS/farming/textures/farming_wheat_8.png b/mods/farming/textures/farming_wheat_8.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat_8.png rename to mods/farming/textures/farming_wheat_8.png diff --git a/mods/ITEMS/farming/textures/farming_wheat_seed.png b/mods/farming/textures/farming_wheat_seed.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/farming/textures/farming_wheat_seed.png rename to mods/farming/textures/farming_wheat_seed.png diff --git a/mods/ITEMS/fire/README.txt b/mods/fire/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/README.txt rename to mods/fire/README.txt diff --git a/mods/ITEMS/flowers/depends.txt b/mods/fire/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers/depends.txt rename to mods/fire/depends.txt diff --git a/mods/fire/init.lua b/mods/fire/init.lua new file mode 100755 index 0000000..dfe6dd1 --- /dev/null +++ b/mods/fire/init.lua @@ -0,0 +1,365 @@ +-- Global namespace for functions + +fire = {} + + +-- +-- Items +-- + +-- Flame nodes + +minetest.register_node("fire:basic_flame", { + drawtype = "firelike", + tiles = { + { + name = "fire_basic_flame_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1 + }, + }, + }, + inventory_image = "fire_basic_flame.png", + paramtype = "light", + light_source = 13, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + damage_per_second = 4, + groups = {igniter = 2, dig_immediate = 3, not_in_creative_inventory = 1}, + on_timer = function(pos) + local f = minetest.find_node_near(pos, 1, {"group:flammable"}) + if not f then + minetest.remove_node(pos) + return + end + -- Restart timer + return true + end, + drop = "", + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(30, 60)) + end, +}) + +minetest.register_node("fire:permanent_flame", { + description = "Permanent Flame", + drawtype = "firelike", + tiles = { + { + name = "fire_basic_flame_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1 + }, + }, + }, + inventory_image = "fire_basic_flame.png", + paramtype = "light", + light_source = 13, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + damage_per_second = 4, + groups = {igniter = 2, dig_immediate = 3}, + drop = "", +}) + + +-- Flint and steel + +minetest.register_tool("fire:flint_and_steel", { + description = "Flint and Steel", + inventory_image = "fire_flint_steel.png", + sound = {breaks = "default_tool_breaks"}, + + on_use = function(itemstack, user, pointed_thing) + local sound_pos = pointed_thing.above or user:get_pos() + minetest.sound_play( + "fire_flint_and_steel", + {pos = sound_pos, gain = 0.5, max_hear_distance = 8} + ) + local player_name = user:get_player_name() + if pointed_thing.type == "node" then + local node_under = minetest.get_node(pointed_thing.under).name + local nodedef = minetest.registered_nodes[node_under] + if not nodedef then + return + end + if minetest.is_protected(pointed_thing.under, player_name) then + minetest.chat_send_player(player_name, "This area is protected") + return + end + if nodedef.on_ignite then + nodedef.on_ignite(pointed_thing.under, user) + elseif minetest.get_item_group(node_under, "flammable") >= 1 + and minetest.get_node(pointed_thing.above).name == "air" then + minetest.set_node(pointed_thing.above, {name = "fire:basic_flame"}) + end + end + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) then + -- Wear tool + local wdef = itemstack:get_definition() + itemstack:add_wear(1000) + -- Tool break sound + if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then + minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, gain = 0.5}) + end + return itemstack + end + end +}) + +minetest.register_craft({ + output = "fire:flint_and_steel", + recipe = { + {"default:flint", "default:steel_ingot"} + } +}) + + +-- Override coalblock to enable permanent flame above +-- Coalblock is non-flammable to avoid unwanted basic_flame nodes + +minetest.override_item("default:coalblock", { + after_destruct = function(pos, oldnode) + pos.y = pos.y + 1 + if minetest.get_node(pos).name == "fire:permanent_flame" then + minetest.remove_node(pos) + end + end, + on_ignite = function(pos, igniter) + local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} + if minetest.get_node(flame_pos).name == "air" then + minetest.set_node(flame_pos, {name = "fire:permanent_flame"}) + end + end, +}) + + +-- +-- Sound +-- + +local flame_sound = minetest.settings:get_bool("flame_sound") +if flame_sound == nil then + -- Enable if no setting present + flame_sound = true +end + +if flame_sound then + + local handles = {} + local timer = 0 + + -- Parameters + + local radius = 8 -- Flame node search radius around player + local cycle = 3 -- Cycle time for sound updates + + -- Update sound for player + + function fire.update_player_sound(player) + local player_name = player:get_player_name() + -- Search for flame nodes in radius around player + local ppos = player:get_pos() + local areamin = vector.subtract(ppos, radius) + local areamax = vector.add(ppos, radius) + local fpos, num = minetest.find_nodes_in_area( + areamin, + areamax, + {"fire:basic_flame", "fire:permanent_flame"} + ) + -- Total number of flames in radius + local flames = (num["fire:basic_flame"] or 0) + + (num["fire:permanent_flame"] or 0) + -- Stop previous sound + if handles[player_name] then + minetest.sound_stop(handles[player_name]) + handles[player_name] = nil + end + -- If flames + if flames > 0 then + -- Find centre of flame positions + local fposmid = fpos[1] + -- If more than 1 flame + if #fpos > 1 then + local fposmin = areamax + local fposmax = areamin + for i = 1, #fpos do + local fposi = fpos[i] + if fposi.x > fposmax.x then + fposmax.x = fposi.x + end + if fposi.y > fposmax.y then + fposmax.y = fposi.y + end + if fposi.z > fposmax.z then + fposmax.z = fposi.z + end + if fposi.x < fposmin.x then + fposmin.x = fposi.x + end + if fposi.y < fposmin.y then + fposmin.y = fposi.y + end + if fposi.z < fposmin.z then + fposmin.z = fposi.z + end + end + fposmid = vector.divide(vector.add(fposmin, fposmax), 2) + end + -- Play sound + local handle = minetest.sound_play( + "fire_fire", + { + pos = fposmid, + to_player = player_name, + gain = math.min(0.06 * (1 + flames * 0.125), 0.18), + max_hear_distance = 32, + loop = true, -- In case of lag + } + ) + -- Store sound handle for this player + if handle then + handles[player_name] = handle + end + end + end + + -- Cycle for updating players sounds + + minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer < cycle then + return + end + + timer = 0 + local players = minetest.get_connected_players() + for n = 1, #players do + fire.update_player_sound(players[n]) + end + end) + + -- Stop sound and clear handle on player leave + + minetest.register_on_leaveplayer(function(player) + local player_name = player:get_player_name() + if handles[player_name] then + minetest.sound_stop(handles[player_name]) + handles[player_name] = nil + end + end) +end + + +-- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it + +function fire.update_sounds_around(pos) +end + + +-- +-- ABMs +-- + +-- Extinguish all flames quickly with water, snow, ice + +minetest.register_abm({ + label = "Extinguish flame", + nodenames = {"fire:basic_flame", "fire:permanent_flame"}, + neighbors = {"group:puts_out_fire"}, + interval = 3, + chance = 1, + catch_up = false, + action = function(pos, node, active_object_count, active_object_count_wider) + minetest.remove_node(pos) + minetest.sound_play("fire_extinguish_flame", + {pos = pos, max_hear_distance = 16, gain = 0.15}) + end, +}) + + +-- Enable the following ABMs according to 'enable fire' setting + +local fire_enabled = minetest.settings:get_bool("enable_fire") +if fire_enabled == nil then + -- enable_fire setting not specified, check for disable_fire + local fire_disabled = minetest.settings:get_bool("disable_fire") + if fire_disabled == nil then + -- Neither setting specified, check whether singleplayer + fire_enabled = minetest.is_singleplayer() + else + fire_enabled = not fire_disabled + end +end + +if not fire_enabled then + + -- Remove basic flames only if fire disabled + + minetest.register_abm({ + label = "Remove disabled fire", + nodenames = {"fire:basic_flame"}, + interval = 7, + chance = 1, + catch_up = false, + action = minetest.remove_node, + }) + +else -- Fire enabled + + -- Ignite neighboring nodes, add basic flames + + minetest.register_abm({ + label = "Ignite flame", + nodenames = {"group:flammable"}, + neighbors = {"group:igniter"}, + interval = 7, + chance = 12, + catch_up = false, + action = function(pos, node, active_object_count, active_object_count_wider) + -- If there is water or stuff like that around node, don't ignite + if minetest.find_node_near(pos, 1, {"group:puts_out_fire"}) then + return + end + local p = minetest.find_node_near(pos, 1, {"air"}) + if p then + minetest.set_node(p, {name = "fire:basic_flame"}) + end + end, + }) + + -- Remove flammable nodes around basic flame + + minetest.register_abm({ + label = "Remove flammable nodes", + nodenames = {"fire:basic_flame"}, + neighbors = "group:flammable", + interval = 5, + chance = 18, + catch_up = false, + action = function(pos, node, active_object_count, active_object_count_wider) + local p = minetest.find_node_near(pos, 1, {"group:flammable"}) + if p then + local flammable_node = minetest.get_node(p) + local def = minetest.registered_nodes[flammable_node.name] + if def.on_burn then + def.on_burn(p) + else + minetest.remove_node(p) + minetest.check_for_falling(p) + end + end + end, + }) + +end diff --git a/mods/ITEMS/fire/license.txt b/mods/fire/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/license.txt rename to mods/fire/license.txt diff --git a/mods/ITEMS/fire/sounds/fire_extinguish_flame.1.ogg b/mods/fire/sounds/fire_extinguish_flame.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/sounds/fire_extinguish_flame.1.ogg rename to mods/fire/sounds/fire_extinguish_flame.1.ogg diff --git a/mods/ITEMS/fire/sounds/fire_extinguish_flame.2.ogg b/mods/fire/sounds/fire_extinguish_flame.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/sounds/fire_extinguish_flame.2.ogg rename to mods/fire/sounds/fire_extinguish_flame.2.ogg diff --git a/mods/ITEMS/fire/sounds/fire_extinguish_flame.3.ogg b/mods/fire/sounds/fire_extinguish_flame.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/sounds/fire_extinguish_flame.3.ogg rename to mods/fire/sounds/fire_extinguish_flame.3.ogg diff --git a/mods/ITEMS/fire/sounds/fire_fire.1.ogg b/mods/fire/sounds/fire_fire.1.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/sounds/fire_fire.1.ogg rename to mods/fire/sounds/fire_fire.1.ogg diff --git a/mods/ITEMS/fire/sounds/fire_fire.2.ogg b/mods/fire/sounds/fire_fire.2.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/sounds/fire_fire.2.ogg rename to mods/fire/sounds/fire_fire.2.ogg diff --git a/mods/ITEMS/fire/sounds/fire_fire.3.ogg b/mods/fire/sounds/fire_fire.3.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/sounds/fire_fire.3.ogg rename to mods/fire/sounds/fire_fire.3.ogg diff --git a/mods/ITEMS/fire/sounds/fire_flint_and_steel.ogg b/mods/fire/sounds/fire_flint_and_steel.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/sounds/fire_flint_and_steel.ogg rename to mods/fire/sounds/fire_flint_and_steel.ogg diff --git a/mods/ITEMS/fire/sounds/fire_large.ogg b/mods/fire/sounds/fire_large.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/sounds/fire_large.ogg rename to mods/fire/sounds/fire_large.ogg diff --git a/mods/ITEMS/fire/sounds/fire_small.ogg b/mods/fire/sounds/fire_small.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/sounds/fire_small.ogg rename to mods/fire/sounds/fire_small.ogg diff --git a/mods/ITEMS/fire/textures/fire_basic_flame.png b/mods/fire/textures/fire_basic_flame.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/textures/fire_basic_flame.png rename to mods/fire/textures/fire_basic_flame.png diff --git a/mods/ITEMS/fire/textures/fire_basic_flame_animated.png b/mods/fire/textures/fire_basic_flame_animated.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/textures/fire_basic_flame_animated.png rename to mods/fire/textures/fire_basic_flame_animated.png diff --git a/mods/ITEMS/fire/textures/fire_flint_steel.png b/mods/fire/textures/fire_flint_steel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/fire/textures/fire_flint_steel.png rename to mods/fire/textures/fire_flint_steel.png diff --git a/mods/fireflies/README.txt b/mods/fireflies/README.txt new file mode 100755 index 0000000..7382578 --- /dev/null +++ b/mods/fireflies/README.txt @@ -0,0 +1,22 @@ +Minetest Game mod: fireflies +============================ +Adds fireflies to the world on mapgen, which can then be caught in a net and placed in +bottles to provide light. + +Authors of source code +---------------------- +Shara RedCat (MIT) + +Authors of media (textures) +--------------------------- +Shara RedCat (CC BY-SA 3.0): + fireflies_firefly.png + fireflies_firefly_animated.png + fireflies_bugnet.png + fireflies_bottle.png + fireflies_bottle_animated.png + +fireflies_bugnet.png is modified from a texture by tenplus1 (CC0) + +fireflies_bottle.png and fireflies_bottle_animated.png are +modified from a texture by Vanessa Ezekowitz (CC BY-SA 3.0) \ No newline at end of file diff --git a/mods/fireflies/depends.txt b/mods/fireflies/depends.txt new file mode 100755 index 0000000..8bb5a89 --- /dev/null +++ b/mods/fireflies/depends.txt @@ -0,0 +1,3 @@ +default +vessels +biomes? \ No newline at end of file diff --git a/mods/fireflies/init.lua b/mods/fireflies/init.lua new file mode 100755 index 0000000..ab1bd04 --- /dev/null +++ b/mods/fireflies/init.lua @@ -0,0 +1,253 @@ +-- firefly +minetest.register_node("fireflies:firefly", { + description = "Firefly", + drawtype = "plantlike", + tiles = {{ + name = "fireflies_firefly_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5 + }, + }}, + inventory_image = "fireflies_firefly.png", + wield_image = "fireflies_firefly.png", + waving = 1, + paramtype = "light", + sunlight_propagates = true, + buildable_to = true, + walkable = false, + groups = {catchable = 1}, + selection_box = { + type = "fixed", + fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + }, + light_source = 6, + floodable = true, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + local pos = pointed_thing.above + + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pointed_thing.under, player_name) and + minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name = "fireflies:firefly"}) + minetest.get_node_timer(pos):start(1) + itemstack:take_item() + end + return itemstack + end, + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) > 11 then + minetest.set_node(pos, {name = "fireflies:hidden_firefly"}) + end + minetest.get_node_timer(pos):start(30) + end +}) + +minetest.register_node("fireflies:hidden_firefly", { + description = "Hidden Firefly", + drawtype = "airlike", + inventory_image = "fireflies_firefly.png", + wield_image = "fireflies_firefly.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + groups = {not_in_creative_inventory = 1}, + floodable = true, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + local pos = pointed_thing.above + + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pointed_thing.under, player_name) and + minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name = "fireflies:hidden_firefly"}) + minetest.get_node_timer(pos):start(1) + itemstack:take_item() + end + return itemstack + end, + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) <= 11 then + minetest.set_node(pos, {name = "fireflies:firefly"}) + end + minetest.get_node_timer(pos):start(30) + end +}) + + +-- bug net +minetest.register_tool("fireflies:bug_net", { + description = "Bug Net", + inventory_image = "fireflies_bugnet.png", + on_use = function(itemstack, player, pointed_thing) + if not pointed_thing or pointed_thing.type ~= "node" or + minetest.is_protected(pointed_thing.under, player:get_player_name()) then + return + end + local node_name = minetest.get_node(pointed_thing.under).name + local inv = player:get_inventory() + if minetest.get_item_group(node_name, "catchable") == 1 then + minetest.set_node(pointed_thing.under, {name = "air"}) + local stack = ItemStack(node_name.." 1") + local leftover = inv:add_item("main", stack) + if leftover:get_count() > 0 then + minetest.add_item(pointed_thing.under, node_name.." 1") + end + end + if not (creative and creative.is_enabled_for(player:get_player_name())) then + itemstack:add_wear(256) + return itemstack + end + end +}) + +minetest.register_craft( { + output = "fireflies:bug_net", + recipe = { + {"farming:string", "farming:string", ""}, + {"farming:string", "farming:string", ""}, + {"default:stick", "", ""} + } +}) + + +-- firefly in a bottle +minetest.register_node("fireflies:firefly_bottle", { + description = "Firefly in a Bottle", + inventory_image = "fireflies_bottle.png", + wield_image = "fireflies_bottle.png", + tiles = {{ + name = "fireflies_bottle_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5 + }, + }}, + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + light_source = 9, + walkable = false, + groups = {dig_immediate = 3, attached_node = 1}, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + sounds = default.node_sound_glass_defaults(), + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local lower_pos = {x = pos.x, y = pos.y + 1, z = pos.z} + if minetest.is_protected(pos, player:get_player_name()) or + minetest.get_node(lower_pos).name ~= "air" then + return + end + + local upper_pos = {x = pos.x, y = pos.y + 2, z = pos.z} + local firefly_pos + + if not minetest.is_protected(upper_pos, player:get_player_name()) and + minetest.get_node(upper_pos).name == "air" then + firefly_pos = upper_pos + elseif not minetest.is_protected(lower_pos, player:get_player_name()) then + firefly_pos = lower_pos + end + + if firefly_pos then + minetest.set_node(pos, {name = "vessels:glass_bottle"}) + minetest.set_node(firefly_pos, {name = "fireflies:firefly"}) + minetest.get_node_timer(firefly_pos):start(1) + end + end +}) + +minetest.register_craft( { + output = "fireflies:firefly_bottle", + recipe = { + {"", "", ""}, + {"", "fireflies:firefly", ""}, + {"", "vessels:glass_bottle", ""} + } +}) + + +-- register fireflies as decorations + +minetest.register_decoration({ + name = "fireflies:firefly_low", + deco_type = "simple", + place_on = { + "default:dirt_with_grass", + "default:dirt" + }, + place_offset_y = 2, + sidelen = 80, + fill_ratio = 0.0005, + biomes = { + "eastern_coasts", + "far_north_queensland", + "mangroves", + "top_end" + }, + y_max = 10, + y_min = -1, + decoration = "fireflies:hidden_firefly", +}) + +minetest.register_decoration({ + name = "fireflies:firefly_high", + deco_type = "simple", + place_on = { + "default:dirt_with_grass", + "default:dirt" + }, + place_offset_y = 3, + sidelen = 80, + fill_ratio = 0.0005, + biomes = { + "eastern_coasts", + "far_north_queensland", + "mangroves", + "top_end" + }, + y_max = 10, + y_min = -1, + decoration = "fireflies:hidden_firefly", +}) + + + +-- get decoration IDs +local firefly_low = minetest.get_decoration_id("fireflies:firefly_low") +local firefly_high = minetest.get_decoration_id("fireflies:firefly_high") + +minetest.set_gen_notify({decoration = true}, {firefly_low, firefly_high}) + +-- start nodetimers +minetest.register_on_generated(function(minp, maxp, blockseed) + local gennotify = minetest.get_mapgen_object("gennotify") + local poslist = {} + + for _, pos in ipairs(gennotify["decoration#"..firefly_low] or {}) do + local firefly_low_pos = {x = pos.x, y = pos.y + 3, z = pos.z} + table.insert(poslist, firefly_low_pos) + end + for _, pos in ipairs(gennotify["decoration#"..firefly_high] or {}) do + local firefly_high_pos = {x = pos.x, y = pos.y + 4, z = pos.z} + table.insert(poslist, firefly_high_pos) + end + + if #poslist ~= 0 then + for i = 1, #poslist do + local pos = poslist[i] + minetest.get_node_timer(pos):start(1) + end + end +end) diff --git a/mods/fireflies/license.txt b/mods/fireflies/license.txt new file mode 100755 index 0000000..eebdad6 --- /dev/null +++ b/mods/fireflies/license.txt @@ -0,0 +1,58 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (c) 2018 Shara RedCat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2018 Shara RedCat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ \ No newline at end of file diff --git a/mods/fireflies/textures/fireflies_bottle.png b/mods/fireflies/textures/fireflies_bottle.png new file mode 100755 index 0000000..ecca036 Binary files /dev/null and b/mods/fireflies/textures/fireflies_bottle.png differ diff --git a/mods/fireflies/textures/fireflies_bottle_animated.png b/mods/fireflies/textures/fireflies_bottle_animated.png new file mode 100755 index 0000000..96062b3 Binary files /dev/null and b/mods/fireflies/textures/fireflies_bottle_animated.png differ diff --git a/mods/fireflies/textures/fireflies_bugnet.png b/mods/fireflies/textures/fireflies_bugnet.png new file mode 100755 index 0000000..8ec3d33 Binary files /dev/null and b/mods/fireflies/textures/fireflies_bugnet.png differ diff --git a/mods/fireflies/textures/fireflies_firefly.png b/mods/fireflies/textures/fireflies_firefly.png new file mode 100755 index 0000000..c086689 Binary files /dev/null and b/mods/fireflies/textures/fireflies_firefly.png differ diff --git a/mods/fireflies/textures/fireflies_firefly_animated.png b/mods/fireflies/textures/fireflies_firefly_animated.png new file mode 100755 index 0000000..e6932e3 Binary files /dev/null and b/mods/fireflies/textures/fireflies_firefly_animated.png differ diff --git a/mods/flowers/README.txt b/mods/flowers/README.txt new file mode 100755 index 0000000..4b3149c --- /dev/null +++ b/mods/flowers/README.txt @@ -0,0 +1,30 @@ +Minetest Game mod: flowers +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Ironzorg (MIT) and VanessaE (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +RHRhino (CC BY-SA 3.0): + flowers_dandelion_white.png + flowers_geranium.png + flowers_rose.png + flowers_tulip.png + flowers_viola.png + +Gambit (CC BY-SA 3.0): + flowers_mushroom_brown.png + flowers_mushroom_red.png + flowers_waterlily.png + +yyt16384 (CC BY-SA 3.0): + flowers_waterlily_bottom.png -- Derived from Gambit's texture + +paramat (CC BY-SA 3.0): + flowers_dandelion_yellow.png -- Derived from RHRhino's texture + flowers_tulip_black.png -- Derived from RHRhino's texture + flowers_chrysanthemum_green.png diff --git a/mods/flowers/depends.txt b/mods/flowers/depends.txt new file mode 100755 index 0000000..331d858 --- /dev/null +++ b/mods/flowers/depends.txt @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua new file mode 100755 index 0000000..19d3079 --- /dev/null +++ b/mods/flowers/init.lua @@ -0,0 +1,321 @@ +-- Minetest 0.4 mod: default +-- See README.txt for licensing and other information. + + +-- Namespace for functions + +flowers = {} + + +-- Map Generation + +dofile(minetest.get_modpath("flowers") .. "/mapgen.lua") + + +-- +-- Flowers +-- + +-- Aliases for original flowers mod + +minetest.register_alias("flowers:flower_rose", "flowers:rose") +minetest.register_alias("flowers:flower_tulip", "flowers:tulip") +minetest.register_alias("flowers:flower_dandelion_yellow", "flowers:dandelion_yellow") +minetest.register_alias("flowers:flower_geranium", "flowers:geranium") +minetest.register_alias("flowers:flower_viola", "flowers:viola") +minetest.register_alias("flowers:flower_dandelion_white", "flowers:dandelion_white") + + +-- Flower registration + +local function add_simple_flower(name, desc, box, f_groups) + -- Common flowers' groups + f_groups.snappy = 3 + f_groups.flower = 1 + f_groups.flora = 1 + f_groups.attached_node = 1 + + minetest.register_node("flowers:" .. name, { + description = desc, + drawtype = "plantlike", + waving = 1, + tiles = {"flowers_" .. name .. ".png"}, + inventory_image = "flowers_" .. name .. ".png", + wield_image = "flowers_" .. name .. ".png", + sunlight_propagates = true, + paramtype = "light", + walkable = false, + buildable_to = true, + stack_max = 99, + groups = f_groups, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = box + } + }) +end + +flowers.datas = { + { + "rose", + "Red Rose", + {-2 / 16, -0.5, -2 / 16, 2 / 16, 5 / 16, 2 / 16}, + {color_red = 1, flammable = 1} + }, + { + "tulip", + "Orange Tulip", + {-2 / 16, -0.5, -2 / 16, 2 / 16, 3 / 16, 2 / 16}, + {color_orange = 1, flammable = 1} + }, + { + "dandelion_yellow", + "Yellow Dandelion", + {-4 / 16, -0.5, -4 / 16, 4 / 16, -2 / 16, 4 / 16}, + {color_yellow = 1, flammable = 1} + }, + { + "chrysanthemum_green", + "Green Chrysanthemum", + {-4 / 16, -0.5, -4 / 16, 4 / 16, -1 / 16, 4 / 16}, + {color_green = 1, flammable = 1} + }, + { + "geranium", + "Blue Geranium", + {-2 / 16, -0.5, -2 / 16, 2 / 16, 2 / 16, 2 / 16}, + {color_blue = 1, flammable = 1} + }, + { + "viola", + "Viola", + {-5 / 16, -0.5, -5 / 16, 5 / 16, -1 / 16, 5 / 16}, + {color_violet = 1, flammable = 1} + }, + { + "dandelion_white", + "White Dandelion", + {-5 / 16, -0.5, -5 / 16, 5 / 16, -2 / 16, 5 / 16}, + {color_white = 1, flammable = 1} + }, + { + "tulip_black", + "Black Tulip", + {-2 / 16, -0.5, -2 / 16, 2 / 16, 3 / 16, 2 / 16}, + {color_black = 1, flammable = 1} + }, +} + +for _,item in pairs(flowers.datas) do + add_simple_flower(unpack(item)) +end + + +-- Flower spread +-- Public function to enable override by mods + +function flowers.flower_spread(pos, node) + pos.y = pos.y - 1 + local under = minetest.get_node(pos) + pos.y = pos.y + 1 + -- Replace flora with dry shrub in desert sand and silver sand, + -- as this is the only way to generate them. + -- However, preserve grasses in sand dune biomes. + if minetest.get_item_group(under.name, "sand") == 1 and + under.name ~= "default:sand" then + minetest.set_node(pos, {name = "default:dry_shrub"}) + return + end + + if minetest.get_item_group(under.name, "soil") == 0 then + return + end + + local light = minetest.get_node_light(pos) + if not light or light < 13 then + return + end + + local pos0 = vector.subtract(pos, 4) + local pos1 = vector.add(pos, 4) + -- Testing shows that a threshold of 3 results in an appropriate maximum + -- density of approximately 7 flora per 9x9 area. + if #minetest.find_nodes_in_area(pos0, pos1, "group:flora") > 3 then + return + end + + local soils = minetest.find_nodes_in_area_under_air( + pos0, pos1, "group:soil") + local num_soils = #soils + if num_soils >= 1 then + for si = 1, math.min(3, num_soils) do + local soil = soils[math.random(num_soils)] + local soil_name = minetest.get_node(soil).name + local soil_above = {x = soil.x, y = soil.y + 1, z = soil.z} + light = minetest.get_node_light(soil_above) + if light and light >= 13 and + -- Only spread to same surface node + soil_name == under.name and + -- Desert sand is in the soil group + soil_name ~= "default:desert_sand" then + minetest.set_node(soil_above, {name = node.name}) + end + end + end +end + +minetest.register_abm({ + label = "Flower spread", + nodenames = {"group:flora"}, + interval = 13, + chance = 300, + action = function(...) + flowers.flower_spread(...) + end, +}) + + +-- +-- Mushrooms +-- + +minetest.register_node("flowers:mushroom_red", { + description = "Red Mushroom", + tiles = {"flowers_mushroom_red.png"}, + inventory_image = "flowers_mushroom_red.png", + wield_image = "flowers_mushroom_red.png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, attached_node = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(-5), + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, -1 / 16, 4 / 16}, + } +}) + +minetest.register_node("flowers:mushroom_brown", { + description = "Brown Mushroom", + tiles = {"flowers_mushroom_brown.png"}, + inventory_image = "flowers_mushroom_brown.png", + wield_image = "flowers_mushroom_brown.png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {food_mushroom = 1, snappy = 3, attached_node = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(1), + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, -2 / 16, 3 / 16}, + } +}) + + +-- Mushroom spread and death + +function flowers.mushroom_spread(pos, node) + if minetest.get_node_light(pos, nil) == 15 then + minetest.remove_node(pos) + return + end + local positions = minetest.find_nodes_in_area_under_air( + {x = pos.x - 1, y = pos.y - 2, z = pos.z - 1}, + {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, + {"group:soil", "group:tree"}) + if #positions == 0 then + return + end + local pos2 = positions[math.random(#positions)] + pos2.y = pos2.y + 1 + if minetest.get_node_light(pos, 0.5) <= 3 and + minetest.get_node_light(pos2, 0.5) <= 3 then + minetest.set_node(pos2, {name = node.name}) + end +end + +minetest.register_abm({ + label = "Mushroom spread", + nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"}, + interval = 11, + chance = 150, + action = function(...) + flowers.mushroom_spread(...) + end, +}) + + +-- These old mushroom related nodes can be simplified now + +minetest.register_alias("flowers:mushroom_spores_brown", "flowers:mushroom_brown") +minetest.register_alias("flowers:mushroom_spores_red", "flowers:mushroom_red") +minetest.register_alias("flowers:mushroom_fertile_brown", "flowers:mushroom_brown") +minetest.register_alias("flowers:mushroom_fertile_red", "flowers:mushroom_red") +minetest.register_alias("mushroom:brown_natural", "flowers:mushroom_brown") +minetest.register_alias("mushroom:red_natural", "flowers:mushroom_red") + + +-- +-- Waterlily +-- + +minetest.register_node("flowers:waterlily", { + description = "Waterlily", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"flowers_waterlily.png", "flowers_waterlily_bottom.png"}, + inventory_image = "flowers_waterlily.png", + wield_image = "flowers_waterlily.png", + liquids_pointable = true, + walkable = false, + buildable_to = true, + floodable = true, + groups = {snappy = 3, flower = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + node_placement_prediction = "", + node_box = { + type = "fixed", + fixed = {-0.5, -31 / 64, -0.5, 0.5, -15 / 32, 0.5} + }, + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, -15 / 32, 7 / 16} + }, + + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[node.name] + local player_name = placer and placer:get_player_name() or "" + + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack, + pointed_thing) + end + + if def and def.liquidtype == "source" and + minetest.get_item_group(node.name, "water") > 0 then + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, {name = "flowers:waterlily", + param2 = math.random(0, 3)}) + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) + end + end + + return itemstack + end +}) \ No newline at end of file diff --git a/mods/flowers/license.txt b/mods/flowers/license.txt new file mode 100755 index 0000000..419ebe5 --- /dev/null +++ b/mods/flowers/license.txt @@ -0,0 +1,63 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Ironzorg, VanessaE +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 RHRhino +Copyright (C) 2015-2016 Gambit +Copyright (C) 2016 yyt16384 +Copyright (C) 2017 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua new file mode 100755 index 0000000..e2a34b7 --- /dev/null +++ b/mods/flowers/mapgen.lua @@ -0,0 +1,66 @@ +-- +-- All biome API mapgens +-- + +local function register_flower(seed, flower_name) + minetest.register_decoration({ + name = "flowers:"..flower_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.02, + scale = 0.04, + spread = {x = 200, y = 200, z = 200}, + seed = seed, + octaves = 3, + persist = 0.6 + }, + biomes = {"grassland", "deciduous_forest", "floatland_grassland"}, + y_max = 31000, + y_min = 1, + decoration = "flowers:"..flower_name, + }) +end + +local function register_mushroom(mushroom_name) + minetest.register_decoration({ + name = "flowers:"..mushroom_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.006, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest", "coniferous_forest", + "floatland_coniferous_forest"}, + y_max = 31000, + y_min = 1, + decoration = "flowers:"..mushroom_name, + }) +end + +function flowers.register_decorations() + register_flower(436, "rose") + register_flower(19822, "tulip") + register_flower(1220999, "dandelion_yellow") + register_flower(800081, "chrysanthemum_green") + register_flower(36662, "geranium") + register_flower(1133, "viola") + register_flower(73133, "dandelion_white") + register_flower(42, "tulip_black") + register_mushroom("mushroom_brown") + register_mushroom("mushroom_red") +end + + +-- +-- Detect mapgen to select functions +-- + +flowers.register_decorations() diff --git a/mods/flowers/textures/flowers_chrysanthemum_green.png b/mods/flowers/textures/flowers_chrysanthemum_green.png new file mode 100755 index 0000000..1198046 Binary files /dev/null and b/mods/flowers/textures/flowers_chrysanthemum_green.png differ diff --git a/mods/ITEMS/flowers/textures/flowers_dandelion_white.png b/mods/flowers/textures/flowers_dandelion_white.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers/textures/flowers_dandelion_white.png rename to mods/flowers/textures/flowers_dandelion_white.png diff --git a/mods/flowers/textures/flowers_dandelion_yellow.png b/mods/flowers/textures/flowers_dandelion_yellow.png new file mode 100755 index 0000000..544f60c Binary files /dev/null and b/mods/flowers/textures/flowers_dandelion_yellow.png differ diff --git a/mods/ITEMS/flowers/textures/flowers_geranium.png b/mods/flowers/textures/flowers_geranium.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers/textures/flowers_geranium.png rename to mods/flowers/textures/flowers_geranium.png diff --git a/mods/ITEMS/flowers/textures/flowers_mangrove_lily.png b/mods/flowers/textures/flowers_mangrove_lily.png similarity index 100% rename from mods/ITEMS/flowers/textures/flowers_mangrove_lily.png rename to mods/flowers/textures/flowers_mangrove_lily.png diff --git a/mods/ITEMS/mushrooms/textures/mushrooms_mushroom_brown.png b/mods/flowers/textures/flowers_mushroom_brown.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/mushrooms/textures/mushrooms_mushroom_brown.png rename to mods/flowers/textures/flowers_mushroom_brown.png diff --git a/mods/ITEMS/mushrooms/textures/mushrooms_mushroom_red.png b/mods/flowers/textures/flowers_mushroom_red.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/mushrooms/textures/mushrooms_mushroom_red.png rename to mods/flowers/textures/flowers_mushroom_red.png diff --git a/mods/ITEMS/flowers/textures/flowers_rose.png b/mods/flowers/textures/flowers_rose.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers/textures/flowers_rose.png rename to mods/flowers/textures/flowers_rose.png diff --git a/mods/ITEMS/flowers/textures/flowers_tulip.png b/mods/flowers/textures/flowers_tulip.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers/textures/flowers_tulip.png rename to mods/flowers/textures/flowers_tulip.png diff --git a/mods/flowers/textures/flowers_tulip_black.png b/mods/flowers/textures/flowers_tulip_black.png new file mode 100755 index 0000000..1dd09f7 Binary files /dev/null and b/mods/flowers/textures/flowers_tulip_black.png differ diff --git a/mods/ITEMS/flowers/textures/flowers_viola.png b/mods/flowers/textures/flowers_viola.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers/textures/flowers_viola.png rename to mods/flowers/textures/flowers_viola.png diff --git a/mods/ITEMS/flowers/textures/flowers_waterlily.png b/mods/flowers/textures/flowers_waterlily.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers/textures/flowers_waterlily.png rename to mods/flowers/textures/flowers_waterlily.png diff --git a/mods/ITEMS/flowers/textures/flowers_waterlily_bottom.png b/mods/flowers/textures/flowers_waterlily_bottom.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers/textures/flowers_waterlily_bottom.png rename to mods/flowers/textures/flowers_waterlily_bottom.png diff --git a/mods/give_initial_stuff/README.txt b/mods/give_initial_stuff/README.txt new file mode 100755 index 0000000..cbd240f --- /dev/null +++ b/mods/give_initial_stuff/README.txt @@ -0,0 +1,8 @@ +Minetest Game mod: give_initial_stuff +===================================== +See license.txt for license information. + +Authors of source code +---------------------- +Perttu Ahola (celeron55) (MIT) +Various Minetest developers and contributors (MIT) diff --git a/mods/give_initial_stuff/depends.txt b/mods/give_initial_stuff/depends.txt new file mode 100755 index 0000000..3a7daa1 --- /dev/null +++ b/mods/give_initial_stuff/depends.txt @@ -0,0 +1,2 @@ +default + diff --git a/mods/give_initial_stuff/init.lua b/mods/give_initial_stuff/init.lua new file mode 100755 index 0000000..4815bd8 --- /dev/null +++ b/mods/give_initial_stuff/init.lua @@ -0,0 +1,44 @@ +local stuff_string = minetest.settings:get("initial_stuff") or + "default:pick_steel,default:axe_steel,default:shovel_steel," .. + "default:torch 99,default:cobble 99" + +give_initial_stuff = { + items = {} +} + +function give_initial_stuff.give(player) + minetest.log("action", + "Giving initial stuff to player " .. player:get_player_name()) + local inv = player:get_inventory() + for _, stack in ipairs(give_initial_stuff.items) do + inv:add_item("main", stack) + end +end + +function give_initial_stuff.add(stack) + give_initial_stuff.items[#give_initial_stuff.items + 1] = ItemStack(stack) +end + +function give_initial_stuff.clear() + give_initial_stuff.items = {} +end + +function give_initial_stuff.add_from_csv(str) + local items = str:split(",") + for _, itemname in ipairs(items) do + give_initial_stuff.add(itemname) + end +end + +function give_initial_stuff.set_list(list) + give_initial_stuff.items = list +end + +function give_initial_stuff.get_list() + return give_initial_stuff.items +end + +give_initial_stuff.add_from_csv(stuff_string) +if minetest.settings:get_bool("give_initial_stuff") then + minetest.register_on_newplayer(give_initial_stuff.give) +end diff --git a/mods/give_initial_stuff/license.txt b/mods/give_initial_stuff/license.txt new file mode 100755 index 0000000..8134c92 --- /dev/null +++ b/mods/give_initial_stuff/license.txt @@ -0,0 +1,25 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/mods/killme/init.lua b/mods/killme/init.lua new file mode 100755 index 0000000..9b67475 --- /dev/null +++ b/mods/killme/init.lua @@ -0,0 +1,24 @@ +minetest.register_chatcommand("killme", { + description = "Kill yourself to respawn", + func = function(name) + local player = minetest.get_player_by_name(name) + if player then + if minetest.settings:get_bool("enable_damage") then + player:set_hp(0) + return true + else + for _, callback in pairs(core.registered_on_respawnplayers) do + if callback(player) then + return true + end + end + + -- There doesn't seem to be a way to get a default spawn pos from the lua API + return false, "No static_spawnpoint defined" + end + else + -- Show error message if used when not logged in, eg: from IRC mod + return false, "You need to be online to be killed!" + end + end +}) diff --git a/mods/map/README.txt b/mods/map/README.txt new file mode 100755 index 0000000..8f35f69 --- /dev/null +++ b/mods/map/README.txt @@ -0,0 +1,44 @@ +Minetest Game mod: map +====================== +See license.txt for license information. + +Authors of source code +---------------------- +paramat (MIT) + +Authors of media (textures) +--------------------------- +TumeniNodes (CC BY-SA 3.0): + map_mapping_kit.png (map) + +paramat (CC BY-SA 3.0): + map_mapping_kit.png (compass and pen) + +Crafting +-------- +map:mapping_kit + +default:glass G +default:paper P +default:stick S +default:steel_ingot I +default:wood W +dye:black D + +GPS +IPI +WPD + +Usage +----- +In survival mode, use of the minimap requires the mapping kit item in your +inventory. It can take up to 5 seconds for adding to or removal from inventory +to have an effect, however to instantly allow the use of the minimap 'use' +(leftclick) the item. +Minimap radar mode is always disallowed in survival mode. + +Minimap and minimap radar mode are automatically allowed in creative mode and +for any player with the 'creative' privilege. + +The 'map.update_hud_flags()' function is global so can be redefined by a mod for +alternative behaviour. diff --git a/mods/map/depends.txt b/mods/map/depends.txt new file mode 100755 index 0000000..4b15f6a --- /dev/null +++ b/mods/map/depends.txt @@ -0,0 +1,3 @@ +default +dye +creative? diff --git a/mods/map/init.lua b/mods/map/init.lua new file mode 100755 index 0000000..03024fa --- /dev/null +++ b/mods/map/init.lua @@ -0,0 +1,81 @@ +-- Mod global namespace + +map = {} + + +-- Cache creative mode setting + +local creative_mode_cache = minetest.settings:get_bool("creative_mode") + + +-- Update HUD flags +-- Global to allow overriding + +function map.update_hud_flags(player) + local creative_enabled = + (creative and creative.is_enabled_for(player:get_player_name())) or + creative_mode_cache + + local minimap_enabled = creative_enabled or + player:get_inventory():contains_item("main", "map:mapping_kit") + local radar_enabled = creative_enabled + + player:hud_set_flags({ + minimap = minimap_enabled, + minimap_radar = radar_enabled + }) +end + + +-- Set HUD flags 'on joinplayer' + +minetest.register_on_joinplayer(function(player) + map.update_hud_flags(player) +end) + + +-- Cyclic update of HUD flags + +local function cyclic_update() + for _, player in ipairs(minetest.get_connected_players()) do + map.update_hud_flags(player) + end + minetest.after(5.3, cyclic_update) +end + +minetest.after(5.3, cyclic_update) + + +-- Mapping kit item + +minetest.register_craftitem("map:mapping_kit", { + description = "Mapping Kit\nUse with 'Minimap' key", + inventory_image = "map_mapping_kit.png", + stack_max = 1, + groups = {flammable = 3}, + + on_use = function(itemstack, user, pointed_thing) + map.update_hud_flags(user) + end, +}) + + +-- Crafting + +minetest.register_craft({ + output = "map:mapping_kit", + recipe = { + {"default:glass", "default:paper", "default:stick"}, + {"default:steel_ingot", "default:paper", "default:steel_ingot"}, + {"default:wood", "default:paper", "dye:black"}, + } +}) + + +-- Fuel + +minetest.register_craft({ + type = "fuel", + recipe = "map:mapping_kit", + burntime = 5, +}) diff --git a/mods/map/license.txt b/mods/map/license.txt new file mode 100755 index 0000000..a89f59c --- /dev/null +++ b/mods/map/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2017 paramat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2017 TumeniNodes +Copyright (C) 2017 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/map/textures/map_mapping_kit.png b/mods/map/textures/map_mapping_kit.png new file mode 100755 index 0000000..015b878 Binary files /dev/null and b/mods/map/textures/map_mapping_kit.png differ diff --git a/mods/mapgen/depends.txt b/mods/mapgen/depends.txt new file mode 100644 index 0000000..87aac6d --- /dev/null +++ b/mods/mapgen/depends.txt @@ -0,0 +1,3 @@ +default +outback? +technic? \ No newline at end of file diff --git a/mods/mapgen/init.lua b/mods/mapgen/init.lua new file mode 100644 index 0000000..3ba87bc --- /dev/null +++ b/mods/mapgen/init.lua @@ -0,0 +1,200 @@ +--[[ + Mapgen +--]] + + +--[[ + Aliases for map generators +--]] + +minetest.register_alias("mapgen_stone", "default:stone") +minetest.register_alias("mapgen_dirt", "default:dirt") +minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass") +minetest.register_alias("mapgen_sand", "default:sand") +minetest.register_alias("mapgen_water_source", "default:water_source") +minetest.register_alias("mapgen_river_water_source", "default:river_water_source") +minetest.register_alias("mapgen_lava_source", "default:lava_source") +minetest.register_alias("mapgen_gravel", "default:gravel") +minetest.register_alias("mapgen_desert_stone", "default:desert_stone") +minetest.register_alias("mapgen_desert_sand", "default:desert_sand") +minetest.register_alias("mapgen_dirt_with_snow", "default:dirt_with_snow") +minetest.register_alias("mapgen_snowblock", "default:snowblock") +minetest.register_alias("mapgen_snow", "default:snow") +minetest.register_alias("mapgen_ice", "default:ice") +minetest.register_alias("mapgen_sandstone", "default:sandstone") + +-- Flora +minetest.register_alias("mapgen_tree", "default:tree") +minetest.register_alias("mapgen_leaves", "default:leaves") +minetest.register_alias("mapgen_apple", "default:apple") +minetest.register_alias("mapgen_jungletree", "default:jungletree") +minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves") +minetest.register_alias("mapgen_junglegrass", "default:junglegrass") +minetest.register_alias("mapgen_pine_tree", "default:pine_tree") +minetest.register_alias("mapgen_pine_needles", "default:pine_needles") + +-- Dungeons +minetest.register_alias("mapgen_cobble", "default:cobble") +minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") +minetest.register_alias("mapgen_mossycobble", "default:mossycobble") +minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") +minetest.register_alias("mapgen_sandstonebrick", "default:sandstonebrick") +minetest.register_alias("mapgen_stair_sandstone_block", "stairs:stair_sandstone_block") + + +--[[ + Mapgen settings +--]] + +minetest.set_mapgen_setting("mg_flags", "caves,nodungeons,decorations,light", true) +minetest.clear_registered_decorations() +minetest.clear_registered_ores() + + +--[[ + Ores +--]] + +-- Blob ore first to avoid other ores inside blobs + +-- Clay +minetest.register_ore({ + ore_type = "blob", + ore = "default:clay", + wherein = {"default:dirt"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -15, + y_max = 64, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.0 + }, +}) + +-- Sand +minetest.register_ore({ + ore_type = "blob", + ore = "default:sand", + wherein = {"default:stone", "default:sandstone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, + y_max = 12, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 2316, + octaves = 1, + persist = 0.0 + }, +}) + +-- Dirt +minetest.register_ore({ + ore_type = "blob", + ore = "default:dirt", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 17676, + octaves = 1, + persist = 0.0 + }, +}) + +-- Gravel +minetest.register_ore({ + ore_type = "blob", + ore = "default:gravel", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31000, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 766, + octaves = 1, + persist = 0.0 + }, +}) + +-- Diorite +minetest.register_ore({ + ore_type = "blob", + ore = "outback:diorite", + wherein = {"default:stone"}, + clust_scarcity = 15*15*15, + clust_num_ores = 33, + clust_size = 5, + y_min = -31000, + y_max = 31000, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "outback:diorite", + wherein = {"default:stone"}, + clust_scarcity = 10*10*10, + clust_num_ores = 58, + clust_size = 7, + y_min = -31000, + y_max = 31000, +}) + +-- Granite +minetest.register_ore({ + ore_type = "blob", + ore = "technic:granite", + wherein = {"default:stone"}, + clust_scarcity = 15*15*15, + clust_num_ores = 33, + clust_size = 5, + y_min = -31000, + y_max = 31000, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "technic:granite", + wherein = {"default:stone"}, + clust_scarcity = 10*10*10, + clust_num_ores = 58, + clust_size = 7, + y_min = -31000, + y_max = 31000, +}) + +--Palm trees on beaches in warmer biomes +biome_lib:register_generate_plant({ + surface = {"default:sand"}, + max_count = 4, + rarity = 33, + seed_diff = 330, + min_elevation = -1, + max_elevation = 3, + near_nodes = {"default:water_source"}, + near_nodes_size = 15, + near_nodes_count = 10, + temp_min = -0.2, + }, + outback.palm_model +) \ No newline at end of file diff --git a/mods/mapgen/mod.conf b/mods/mapgen/mod.conf new file mode 100644 index 0000000..8032705 --- /dev/null +++ b/mods/mapgen/mod.conf @@ -0,0 +1 @@ +name = mapgen \ No newline at end of file diff --git a/mods/ITEMS/mesecons/.gitignore b/mods/mesecons/.gitignore similarity index 100% rename from mods/ITEMS/mesecons/.gitignore rename to mods/mesecons/.gitignore diff --git a/mods/ITEMS/mesecons/COPYING.txt b/mods/mesecons/COPYING.txt similarity index 100% rename from mods/ITEMS/mesecons/COPYING.txt rename to mods/mesecons/COPYING.txt diff --git a/mods/ITEMS/mesecons/LICENSE.txt b/mods/mesecons/LICENSE.txt similarity index 100% rename from mods/ITEMS/mesecons/LICENSE.txt rename to mods/mesecons/LICENSE.txt diff --git a/mods/ITEMS/mesecons/README.md b/mods/mesecons/README.md similarity index 100% rename from mods/ITEMS/mesecons/README.md rename to mods/mesecons/README.md diff --git a/mods/mesecons/bower.json b/mods/mesecons/bower.json new file mode 100755 index 0000000..1d94e61 --- /dev/null +++ b/mods/mesecons/bower.json @@ -0,0 +1,12 @@ +{ + "name": "mesecons", + "description": "Mesecons is a mod for Minetest that implements items related to digital circuitry: wires, buttons, lights, and programmable controllers.", + "homepage": "http://mesecons.net", + "authors": "Jeija", + "license": "LGPL-3.0+", + "keywords": [ + "mesecons", + "minetest", + "mod" + ] +} diff --git a/mods/ITEMS/mesecons/documentation.json b/mods/mesecons/documentation.json similarity index 100% rename from mods/ITEMS/mesecons/documentation.json rename to mods/mesecons/documentation.json diff --git a/mods/ITEMS/mesecons/mesecons/actionqueue.lua b/mods/mesecons/mesecons/actionqueue.lua similarity index 100% rename from mods/ITEMS/mesecons/mesecons/actionqueue.lua rename to mods/mesecons/mesecons/actionqueue.lua diff --git a/mods/ITEMS/mesecons/mesecons/depends.txt b/mods/mesecons/mesecons/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons/depends.txt rename to mods/mesecons/mesecons/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons/init.lua b/mods/mesecons/mesecons/init.lua similarity index 100% rename from mods/ITEMS/mesecons/mesecons/init.lua rename to mods/mesecons/mesecons/init.lua diff --git a/mods/mesecons/mesecons/internal.lua b/mods/mesecons/mesecons/internal.lua new file mode 100755 index 0000000..6fdc3f9 --- /dev/null +++ b/mods/mesecons/mesecons/internal.lua @@ -0,0 +1,550 @@ +-- Internal.lua - The core of mesecons +-- +-- For more practical developer resources see http://mesecons.net/developers.php +-- +-- Function overview +-- mesecon.get_effector(nodename) --> Returns the mesecons.effector -specifictation in the nodedef by the nodename +-- mesecon.get_receptor(nodename) --> Returns the mesecons.receptor -specifictation in the nodedef by the nodename +-- mesecon.get_conductor(nodename) --> Returns the mesecons.conductor-specifictation in the nodedef by the nodename +-- mesecon.get_any_inputrules (node) --> Returns the rules of a node if it is a conductor or an effector +-- mesecon.get_any_outputrules (node) --> Returns the rules of a node if it is a conductor or a receptor + +-- RECEPTORS +-- mesecon.is_receptor(nodename) --> Returns true if nodename is a receptor +-- mesecon.is_receptor_on(nodename --> Returns true if nodename is an receptor with state = mesecon.state.on +-- mesecon.is_receptor_off(nodename) --> Returns true if nodename is an receptor with state = mesecon.state.off +-- mesecon.receptor_get_rules(node) --> Returns the rules of the receptor (mesecon.rules.default if none specified) + +-- EFFECTORS +-- mesecon.is_effector(nodename) --> Returns true if nodename is an effector +-- mesecon.is_effector_on(nodename) --> Returns true if nodename is an effector with nodedef.mesecons.effector.action_off +-- mesecon.is_effector_off(nodename) --> Returns true if nodename is an effector with nodedef.mesecons.effector.action_on +-- mesecon.effector_get_rules(node) --> Returns the input rules of the effector (mesecon.rules.default if none specified) + +-- SIGNALS +-- mesecon.activate(pos, node, depth) --> Activates the effector node at the specific pos (calls nodedef.mesecons.effector.action_on), higher depths are executed later +-- mesecon.deactivate(pos, node, depth) --> Deactivates the effector node at the specific pos (calls nodedef.mesecons.effector.action_off), higher depths are executed later +-- mesecon.changesignal(pos, node, rulename, newstate, depth) --> Changes the effector node at the specific pos (calls nodedef.mesecons.effector.action_change), higher depths are executed later + +-- CONDUCTORS +-- mesecon.is_conductor(nodename) --> Returns true if nodename is a conductor +-- mesecon.is_conductor_on(node --> Returns true if node is a conductor with state = mesecon.state.on +-- mesecon.is_conductor_off(node) --> Returns true if node is a conductor with state = mesecon.state.off +-- mesecon.get_conductor_on(node_off) --> Returns the onstate nodename of the conductor +-- mesecon.get_conductor_off(node_on) --> Returns the offstate nodename of the conductor +-- mesecon.conductor_get_rules(node) --> Returns the input+output rules of a conductor (mesecon.rules.default if none specified) + +-- HIGH-LEVEL Internals +-- mesecon.is_power_on(pos) --> Returns true if pos emits power in any way +-- mesecon.is_power_off(pos) --> Returns true if pos does not emit power in any way +-- mesecon.is_powered(pos) --> Returns true if pos is powered by a receptor or a conductor + +-- RULES ROTATION helpers +-- mesecon.rotate_rules_right(rules) +-- mesecon.rotate_rules_left(rules) +-- mesecon.rotate_rules_up(rules) +-- mesecon.rotate_rules_down(rules) +-- These functions return rules that have been rotated in the specific direction + +-- General +function mesecon.get_effector(nodename) + if minetest.registered_nodes[nodename] + and minetest.registered_nodes[nodename].mesecons + and minetest.registered_nodes[nodename].mesecons.effector then + return minetest.registered_nodes[nodename].mesecons.effector + end +end + +function mesecon.get_receptor(nodename) + if minetest.registered_nodes[nodename] + and minetest.registered_nodes[nodename].mesecons + and minetest.registered_nodes[nodename].mesecons.receptor then + return minetest.registered_nodes[nodename].mesecons.receptor + end +end + +function mesecon.get_conductor(nodename) + if minetest.registered_nodes[nodename] + and minetest.registered_nodes[nodename].mesecons + and minetest.registered_nodes[nodename].mesecons.conductor then + return minetest.registered_nodes[nodename].mesecons.conductor + end +end + +function mesecon.get_any_outputrules(node) + if not node then return nil end + + if mesecon.is_conductor(node.name) then + return mesecon.conductor_get_rules(node) + elseif mesecon.is_receptor(node.name) then + return mesecon.receptor_get_rules(node) + end +end + +function mesecon.get_any_inputrules(node) + if not node then return nil end + + if mesecon.is_conductor(node.name) then + return mesecon.conductor_get_rules(node) + elseif mesecon.is_effector(node.name) then + return mesecon.effector_get_rules(node) + end +end + +function mesecon.get_any_rules(node) + return mesecon.mergetable(mesecon.get_any_inputrules(node) or {}, + mesecon.get_any_outputrules(node) or {}) +end + +-- Receptors +-- Nodes that can power mesecons +function mesecon.is_receptor_on(nodename) + local receptor = mesecon.get_receptor(nodename) + if receptor and receptor.state == mesecon.state.on then + return true + end + return false +end + +function mesecon.is_receptor_off(nodename) + local receptor = mesecon.get_receptor(nodename) + if receptor and receptor.state == mesecon.state.off then + return true + end + return false +end + +function mesecon.is_receptor(nodename) + local receptor = mesecon.get_receptor(nodename) + if receptor then + return true + end + return false +end + +function mesecon.receptor_get_rules(node) + local receptor = mesecon.get_receptor(node.name) + if receptor then + local rules = receptor.rules + if type(rules) == 'function' then + return rules(node) + elseif rules then + return rules + end + end + + return mesecon.rules.default +end + +-- Effectors +-- Nodes that can be powered by mesecons +function mesecon.is_effector_on(nodename) + local effector = mesecon.get_effector(nodename) + if effector and effector.action_off then + return true + end + return false +end + +function mesecon.is_effector_off(nodename) + local effector = mesecon.get_effector(nodename) + if effector and effector.action_on then + return true + end + return false +end + +function mesecon.is_effector(nodename) + local effector = mesecon.get_effector(nodename) + if effector then + return true + end + return false +end + +function mesecon.effector_get_rules(node) + local effector = mesecon.get_effector(node.name) + if effector then + local rules = effector.rules + if type(rules) == 'function' then + return rules(node) + elseif rules then + return rules + end + end + return mesecon.rules.default +end + +-- ####################### +-- # Signals (effectors) # +-- ####################### + +-- Activation: +mesecon.queue:add_function("activate", function (pos, rulename) + local node = mesecon.get_node_force(pos) + if not node then return end + + local effector = mesecon.get_effector(node.name) + + if effector and effector.action_on then + effector.action_on(pos, node, rulename) + end +end) + +function mesecon.activate(pos, node, rulename, depth) + if rulename == nil then + for _,rule in ipairs(mesecon.effector_get_rules(node)) do + mesecon.activate(pos, node, rule, depth + 1) + end + return + end + mesecon.queue:add_action(pos, "activate", {rulename}, nil, rulename, 1 / depth) +end + + +-- Deactivation +mesecon.queue:add_function("deactivate", function (pos, rulename) + local node = mesecon.get_node_force(pos) + if not node then return end + + local effector = mesecon.get_effector(node.name) + + if effector and effector.action_off then + effector.action_off(pos, node, rulename) + end +end) + +function mesecon.deactivate(pos, node, rulename, depth) + if rulename == nil then + for _,rule in ipairs(mesecon.effector_get_rules(node)) do + mesecon.deactivate(pos, node, rule, depth + 1) + end + return + end + mesecon.queue:add_action(pos, "deactivate", {rulename}, nil, rulename, 1 / depth) +end + + +-- Change +mesecon.queue:add_function("change", function (pos, rulename, changetype) + local node = mesecon.get_node_force(pos) + if not node then return end + + local effector = mesecon.get_effector(node.name) + + if effector and effector.action_change then + effector.action_change(pos, node, rulename, changetype) + end +end) + +function mesecon.changesignal(pos, node, rulename, newstate, depth) + if rulename == nil then + for _,rule in ipairs(mesecon.effector_get_rules(node)) do + mesecon.changesignal(pos, node, rule, newstate, depth + 1) + end + return + end + + -- Include "change" in overwritecheck so that it cannot be overwritten + -- by "active" / "deactivate" that will be called upon the node at the same time. + local overwritecheck = {"change", rulename} + mesecon.queue:add_action(pos, "change", {rulename, newstate}, nil, overwritecheck, 1 / depth) +end + +-- Conductors + +function mesecon.is_conductor_on(node, rulename) + if not node then return false end + + local conductor = mesecon.get_conductor(node.name) + if conductor then + if conductor.state then + return conductor.state == mesecon.state.on + end + if conductor.states then + if not rulename then + return mesecon.getstate(node.name, conductor.states) ~= 1 + end + local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node)) + local binstate = mesecon.getbinstate(node.name, conductor.states) + return mesecon.get_bit(binstate, bit) + end + end + + return false +end + +function mesecon.is_conductor_off(node, rulename) + if not node then return false end + + local conductor = mesecon.get_conductor(node.name) + if conductor then + if conductor.state then + return conductor.state == mesecon.state.off + end + if conductor.states then + if not rulename then + return mesecon.getstate(node.name, conductor.states) == 1 + end + local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node)) + local binstate = mesecon.getbinstate(node.name, conductor.states) + return not mesecon.get_bit(binstate, bit) + end + end + + return false +end + +function mesecon.is_conductor(nodename) + local conductor = mesecon.get_conductor(nodename) + if conductor then + return true + end + return false +end + +function mesecon.get_conductor_on(node_off, rulename) + local conductor = mesecon.get_conductor(node_off.name) + if conductor then + if conductor.onstate then + return conductor.onstate + end + if conductor.states then + local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node_off)) + local binstate = mesecon.getbinstate(node_off.name, conductor.states) + binstate = mesecon.set_bit(binstate, bit, "1") + return conductor.states[tonumber(binstate,2)+1] + end + end + return offstate +end + +function mesecon.get_conductor_off(node_on, rulename) + local conductor = mesecon.get_conductor(node_on.name) + if conductor then + if conductor.offstate then + return conductor.offstate + end + if conductor.states then + local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node_on)) + local binstate = mesecon.getbinstate(node_on.name, conductor.states) + binstate = mesecon.set_bit(binstate, bit, "0") + return conductor.states[tonumber(binstate,2)+1] + end + end + return onstate +end + +function mesecon.conductor_get_rules(node) + local conductor = mesecon.get_conductor(node.name) + if conductor then + local rules = conductor.rules + if type(rules) == 'function' then + return rules(node) + elseif rules then + return rules + end + end + return mesecon.rules.default +end + +-- some more general high-level stuff + +function mesecon.is_power_on(pos, rulename) + local node = mesecon.get_node_force(pos) + if node and (mesecon.is_conductor_on(node, rulename) or mesecon.is_receptor_on(node.name)) then + return true + end + return false +end + +function mesecon.is_power_off(pos, rulename) + local node = mesecon.get_node_force(pos) + if node and (mesecon.is_conductor_off(node, rulename) or mesecon.is_receptor_off(node.name)) then + return true + end + return false +end + +-- Turn off an equipotential section starting at `pos`, which outputs in the direction of `link`. +-- Breadth-first search. Map is abstracted away in a voxelmanip. +-- Follow all all conductor paths replacing conductors that were already +-- looked at, activating / changing all effectors along the way. +function mesecon.turnon(pos, link) + local frontiers = {{pos = pos, link = link}} + + local depth = 1 + while frontiers[1] do + local f = table.remove(frontiers, 1) + local node = mesecon.get_node_force(f.pos) + + if not node then + -- Area does not exist; do nothing + elseif mesecon.is_conductor_off(node, f.link) then + local rules = mesecon.conductor_get_rules(node) + + -- Call turnon on neighbors + for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do + local np = vector.add(f.pos, r) + for _, l in ipairs(mesecon.rules_link_rule_all(f.pos, r)) do + table.insert(frontiers, {pos = np, link = l}) + end + end + + mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link)) + elseif mesecon.is_effector(node.name) then + mesecon.changesignal(f.pos, node, f.link, mesecon.state.on, depth) + if mesecon.is_effector_off(node.name) then + mesecon.activate(f.pos, node, f.link, depth) + end + end + depth = depth + 1 + end +end + +-- Turn on an equipotential section starting at `pos`, which outputs in the direction of `link`. +-- Breadth-first search. Map is abstracted away in a voxelmanip. +-- Follow all all conductor paths replacing conductors that were already +-- looked at, deactivating / changing all effectors along the way. +-- In case an onstate receptor is discovered, abort the process by returning false, which will +-- cause `receptor_off` to discard all changes made in the voxelmanip. +-- Contrary to turnon, turnoff has to cache all change and deactivate signals so that they will only +-- be called in the very end when we can be sure that no conductor was found along the path. +-- +-- Signal table entry structure: +-- { +-- pos = position of effector, +-- node = node descriptor (name, param1 and param2), +-- link = link the effector is connected to, +-- depth = indicates order in which signals wire fired, higher is later +-- } +function mesecon.turnoff(pos, link) + local frontiers = {{pos = pos, link = link}} + local signals = {} + + local depth = 1 + while frontiers[1] do + local f = table.remove(frontiers, 1) + local node = mesecon.get_node_force(f.pos) + + if not node then + -- Area does not exist; do nothing + elseif mesecon.is_conductor_on(node, f.link) then + local rules = mesecon.conductor_get_rules(node) + for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do + local np = vector.add(f.pos, r) + + -- Check if an onstate receptor is connected. If that is the case, + -- abort this turnoff process by returning false. `receptor_off` will + -- discard all the changes that we made in the voxelmanip: + for _, l in ipairs(mesecon.rules_link_rule_all_inverted(f.pos, r)) do + if mesecon.is_receptor_on(mesecon.get_node_force(np).name) then + return false + end + end + + -- Call turnoff on neighbors + for _, l in ipairs(mesecon.rules_link_rule_all(f.pos, r)) do + table.insert(frontiers, {pos = np, link = l}) + end + end + + mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link)) + elseif mesecon.is_effector(node.name) then + table.insert(signals, { + pos = f.pos, + node = node, + link = f.link, + depth = depth + }) + end + depth = depth + 1 + end + + for _, sig in ipairs(signals) do + mesecon.changesignal(sig.pos, sig.node, sig.link, mesecon.state.off, sig.depth) + if mesecon.is_effector_on(sig.node.name) and not mesecon.is_powered(sig.pos) then + mesecon.deactivate(sig.pos, sig.node, sig.link, sig.depth) + end + end + + return true +end + +-- Get all linking inputrules of inputnode (effector or conductor) that is connected to +-- outputnode (receptor or conductor) at position `output` and has an output in direction `rule` +function mesecon.rules_link_rule_all(output, rule) + local input = vector.add(output, rule) + local inputnode = mesecon.get_node_force(input) + local inputrules = mesecon.get_any_inputrules(inputnode) + if not inputrules then + return {} + end + local rules = {} + + for _, inputrule in ipairs(mesecon.flattenrules(inputrules)) do + -- Check if input accepts from output + if vector.equals(vector.add(input, inputrule), output) then + table.insert(rules, inputrule) + end + end + + return rules +end + +-- Get all linking outputnodes of outputnode (receptor or conductor) that is connected to +-- inputnode (effector or conductor) at position `input` and has an input in direction `rule` +function mesecon.rules_link_rule_all_inverted(input, rule) + local output = vector.add(input, rule) + local outputnode = mesecon.get_node_force(output) + local outputrules = mesecon.get_any_outputrules(outputnode) + if not outputrules then + return {} + end + local rules = {} + + for _, outputrule in ipairs(mesecon.flattenrules(outputrules)) do + if vector.equals(vector.add(output, outputrule), input) then + table.insert(rules, mesecon.invertRule(outputrule)) + end + end + return rules +end + +function mesecon.is_powered(pos, rule) + local node = mesecon.get_node_force(pos) + local rules = mesecon.get_any_inputrules(node) + if not rules then return false end + + -- List of nodes that send out power to pos + local sourcepos = {} + + if not rule then + for _, rule in ipairs(mesecon.flattenrules(rules)) do + local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule) + for _, rname in ipairs(rulenames) do + local np = vector.add(pos, rname) + local nn = mesecon.get_node_force(np) + + if (mesecon.is_conductor_on(nn, mesecon.invertRule(rname)) + or mesecon.is_receptor_on(nn.name)) then + table.insert(sourcepos, np) + end + end + end + else + local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule) + for _, rname in ipairs(rulenames) do + local np = vector.add(pos, rname) + local nn = mesecon.get_node_force(np) + if (mesecon.is_conductor_on (nn, mesecon.invertRule(rname)) + or mesecon.is_receptor_on (nn.name)) then + table.insert(sourcepos, np) + end + end + end + + -- Return FALSE if not powered, return list of sources if is powered + if (#sourcepos == 0) then return false + else return sourcepos end +end diff --git a/mods/ITEMS/mesecons/mesecons/legacy.lua b/mods/mesecons/mesecons/legacy.lua similarity index 100% rename from mods/ITEMS/mesecons/mesecons/legacy.lua rename to mods/mesecons/mesecons/legacy.lua diff --git a/mods/mesecons/mesecons/oldwires.lua b/mods/mesecons/mesecons/oldwires.lua new file mode 100755 index 0000000..43bf302 --- /dev/null +++ b/mods/mesecons/mesecons/oldwires.lua @@ -0,0 +1,38 @@ +minetest.register_node("mesecons:mesecon_off", { + drawtype = "raillike", + tiles = {"jeija_mesecon_off.png", "jeija_mesecon_curved_off.png", "jeija_mesecon_t_junction_off.png", "jeija_mesecon_crossing_off.png"}, + inventory_image = "jeija_mesecon_off.png", + wield_image = "jeija_mesecon_off.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}, + }, + groups = {dig_immediate=3, mesecon=1, mesecon_conductor_craftable=1}, + description="Mesecons", + mesecons = {conductor={ + state = mesecon.state.off, + onstate = "mesecons:mesecon_on" + }} +}) + +minetest.register_node("mesecons:mesecon_on", { + drawtype = "raillike", + tiles = {"jeija_mesecon_on.png", "jeija_mesecon_curved_on.png", "jeija_mesecon_t_junction_on.png", "jeija_mesecon_crossing_on.png"}, + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}, + }, + groups = {dig_immediate=3, not_in_creaive_inventory=1, mesecon=1}, + drop = "mesecons:mesecon_off 1", + light_source = default.LIGHT_MAX-11, + mesecons = {conductor={ + state = mesecon.state.on, + offstate = "mesecons:mesecon_off" + }} +}) diff --git a/mods/mesecons/mesecons/presets.lua b/mods/mesecons/mesecons/presets.lua new file mode 100755 index 0000000..a2062d9 --- /dev/null +++ b/mods/mesecons/mesecons/presets.lua @@ -0,0 +1,86 @@ +mesecon.rules = {} +mesecon.state = {} + +mesecon.rules.default = { + {x = 0, y = 0, z = -1}, + {x = 1, y = 0, z = 0}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 1, y = 1, z = 0}, + {x = 1, y = -1, z = 0}, + {x = -1, y = 1, z = 0}, + {x = -1, y = -1, z = 0}, + {x = 0, y = 1, z = 1}, + {x = 0, y = -1, z = 1}, + {x = 0, y = 1, z = -1}, + {x = 0, y = -1, z = -1}, +} + +mesecon.rules.floor = mesecon.mergetable(mesecon.rules.default, {{x = 0, y = -1, z = 0}}) + +mesecon.rules.pplate = mesecon.mergetable(mesecon.rules.floor, {{x = 0, y = -2, z = 0}}) + +mesecon.rules.buttonlike = { + {x = 1, y = 0, z = 0}, + {x = 1, y = 1, z = 0}, + {x = 1, y = -1, z = 0}, + {x = 1, y = -1, z = 1}, + {x = 1, y = -1, z = -1}, + {x = 2, y = 0, z = 0}, +} + +mesecon.rules.flat = { + {x = 1, y = 0, z = 0}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z = -1}, +} + +mesecon.rules.alldirs = { + {x = 1, y = 0, z = 0}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 1, z = 0}, + {x = 0, y = -1, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z = -1}, +} + +local rules_wallmounted = { + xp = mesecon.rotate_rules_down(mesecon.rules.floor), + xn = mesecon.rotate_rules_up(mesecon.rules.floor), + yp = mesecon.rotate_rules_up(mesecon.rotate_rules_up(mesecon.rules.floor)), + yn = mesecon.rules.floor, + zp = mesecon.rotate_rules_left(mesecon.rotate_rules_up(mesecon.rules.floor)), + zn = mesecon.rotate_rules_right(mesecon.rotate_rules_up(mesecon.rules.floor)), +} + +local rules_buttonlike = { + xp = mesecon.rules.buttonlike, + xn = mesecon.rotate_rules_right(mesecon.rotate_rules_right(mesecon.rules.buttonlike)), + yp = mesecon.rotate_rules_down(mesecon.rules.buttonlike), + yn = mesecon.rotate_rules_up(mesecon.rules.buttonlike), + zp = mesecon.rotate_rules_right(mesecon.rules.buttonlike), + zn = mesecon.rotate_rules_left(mesecon.rules.buttonlike), +} + +local function rules_from_dir(ruleset, dir) + if dir.x == 1 then return ruleset.xp end + if dir.y == 1 then return ruleset.yp end + if dir.z == 1 then return ruleset.zp end + if dir.x == -1 then return ruleset.xn end + if dir.y == -1 then return ruleset.yn end + if dir.z == -1 then return ruleset.zn end +end + +mesecon.rules.wallmounted_get = function(node) + local dir = minetest.wallmounted_to_dir(node.param2) + return rules_from_dir(rules_wallmounted, dir) +end + +mesecon.rules.buttonlike_get = function(node) + local dir = minetest.facedir_to_dir(node.param2) + return rules_from_dir(rules_buttonlike, dir) +end + +mesecon.state.on = "on" +mesecon.state.off = "off" diff --git a/mods/mesecons/mesecons/services.lua b/mods/mesecons/mesecons/services.lua new file mode 100755 index 0000000..b1388ec --- /dev/null +++ b/mods/mesecons/mesecons/services.lua @@ -0,0 +1,136 @@ +-- Dig and place services + +mesecon.on_placenode = function(pos, node) + mesecon.execute_autoconnect_hooks_now(pos, node) + + -- Receptors: Send on signal when active + if mesecon.is_receptor_on(node.name) then + mesecon.receptor_on(pos, mesecon.receptor_get_rules(node)) + end + + -- Conductors: Send turnon signal when powered or replace by respective offstate conductor + -- if placed conductor is an onstate one + if mesecon.is_conductor(node.name) then + local sources = mesecon.is_powered(pos) + if sources then + -- also call receptor_on if itself is powered already, so that neighboring + -- conductors will be activated (when pushing an on-conductor with a piston) + for _, s in ipairs(sources) do + local rule = vector.subtract(pos, s) + mesecon.turnon(pos, rule) + end + --mesecon.receptor_on (pos, mesecon.conductor_get_rules(node)) + elseif mesecon.is_conductor_on(node) then + node.name = mesecon.get_conductor_off(node) + minetest.swap_node(pos, node) + end + end + + -- Effectors: Send changesignal and activate or deactivate + if mesecon.is_effector(node.name) then + local powered_rules = {} + local unpowered_rules = {} + + -- for each input rule, check if powered + for _, r in ipairs(mesecon.effector_get_rules(node)) do + local powered = mesecon.is_powered(pos, r) + if powered then table.insert(powered_rules, r) + else table.insert(unpowered_rules, r) end + + local state = powered and mesecon.state.on or mesecon.state.off + mesecon.changesignal(pos, node, r, state, 1) + end + + if (#powered_rules > 0) then + for _, r in ipairs(powered_rules) do + mesecon.activate(pos, node, r, 1) + end + else + for _, r in ipairs(unpowered_rules) do + mesecon.deactivate(pos, node, r, 1) + end + end + end +end + +mesecon.on_dignode = function(pos, node) + if mesecon.is_conductor_on(node) then + mesecon.receptor_off(pos, mesecon.conductor_get_rules(node)) + elseif mesecon.is_receptor_on(node.name) then + mesecon.receptor_off(pos, mesecon.receptor_get_rules(node)) + end + + mesecon.execute_autoconnect_hooks_queue(pos, node) +end + +function mesecon.on_blastnode(pos, intensity) + local node = minetest.get_node(pos) + minetest.remove_node(pos) + mesecon.on_dignode(pos, node) + return minetest.get_node_drops(node.name, "") +end + +minetest.register_on_placenode(mesecon.on_placenode) +minetest.register_on_dignode(mesecon.on_dignode) + +-- Overheating service for fast circuits +local OVERHEAT_MAX = mesecon.setting("overheat_max", 20) +local COOLDOWN_TIME = mesecon.setting("cooldown_time", 2.0) +local COOLDOWN_STEP = mesecon.setting("cooldown_granularity", 0.5) +local COOLDOWN_MULTIPLIER = OVERHEAT_MAX / COOLDOWN_TIME +local cooldown_timer = 0.0 +local object_heat = {} + +-- returns true if heat is too high +function mesecon.do_overheat(pos) + local id = minetest.hash_node_position(pos) + local heat = (object_heat[id] or 0) + 1 + object_heat[id] = heat + if heat >= OVERHEAT_MAX then + minetest.log("action", "Node overheats at " .. minetest.pos_to_string(pos)) + object_heat[id] = nil + return true + end + return false +end + +function mesecon.do_cooldown(pos) + local id = minetest.hash_node_position(pos) + object_heat[id] = nil +end + +function mesecon.get_heat(pos) + local id = minetest.hash_node_position(pos) + return object_heat[id] or 0 +end + +function mesecon.move_hot_nodes(moved_nodes) + local new_heat = {} + for _, n in ipairs(moved_nodes) do + local old_id = minetest.hash_node_position(n.oldpos) + local new_id = minetest.hash_node_position(n.pos) + new_heat[new_id] = object_heat[old_id] + object_heat[old_id] = nil + end + for id, heat in pairs(new_heat) do + object_heat[id] = heat + end +end + +local function global_cooldown(dtime) + cooldown_timer = cooldown_timer + dtime + if cooldown_timer < COOLDOWN_STEP then + return -- don't overload the CPU + end + local cooldown = COOLDOWN_MULTIPLIER * cooldown_timer + cooldown_timer = 0 + for id, heat in pairs(object_heat) do + heat = heat - cooldown + if heat <= 0 then + object_heat[id] = nil -- free some RAM + else + object_heat[id] = heat + end + end +end +minetest.register_globalstep(global_cooldown) diff --git a/mods/mesecons/mesecons/settings.lua b/mods/mesecons/mesecons/settings.lua new file mode 100755 index 0000000..0220707 --- /dev/null +++ b/mods/mesecons/mesecons/settings.lua @@ -0,0 +1,15 @@ +-- SETTINGS +function mesecon.setting(setting, default) + if type(default) == "boolean" then + local read = minetest.settings:get_bool("mesecon."..setting) + if read == nil then + return default + else + return read + end + elseif type(default) == "string" then + return minetest.settings:get("mesecon."..setting) or default + elseif type(default) == "number" then + return tonumber(minetest.settings:get("mesecon."..setting) or default) + end +end diff --git a/mods/ITEMS/mesecons/mesecons/textures/jeija_close_window.png b/mods/mesecons/mesecons/textures/jeija_close_window.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/jeija_close_window.png rename to mods/mesecons/mesecons/textures/jeija_close_window.png diff --git a/mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_LED_A.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_A.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_LED_A.png rename to mods/mesecons/mesecons/textures/jeija_microcontroller_LED_A.png diff --git a/mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_LED_B.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_B.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_LED_B.png rename to mods/mesecons/mesecons/textures/jeija_microcontroller_LED_B.png diff --git a/mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_LED_C.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_C.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_LED_C.png rename to mods/mesecons/mesecons/textures/jeija_microcontroller_LED_C.png diff --git a/mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_LED_D.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_D.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_LED_D.png rename to mods/mesecons/mesecons/textures/jeija_microcontroller_LED_D.png diff --git a/mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_bottom.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_bottom.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_bottom.png rename to mods/mesecons/mesecons/textures/jeija_microcontroller_bottom.png diff --git a/mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_sides.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_sides.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/jeija_microcontroller_sides.png rename to mods/mesecons/mesecons/textures/jeija_microcontroller_sides.png diff --git a/mods/ITEMS/mesecons/mesecons/textures/mesecons_wire_inv.png b/mods/mesecons/mesecons/textures/mesecons_wire_inv.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/mesecons_wire_inv.png rename to mods/mesecons/mesecons/textures/mesecons_wire_inv.png diff --git a/mods/ITEMS/mesecons/mesecons/textures/mesecons_wire_off.png b/mods/mesecons/mesecons/textures/mesecons_wire_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/mesecons_wire_off.png rename to mods/mesecons/mesecons/textures/mesecons_wire_off.png diff --git a/mods/ITEMS/mesecons/mesecons/textures/mesecons_wire_on.png b/mods/mesecons/mesecons/textures/mesecons_wire_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons/textures/mesecons_wire_on.png rename to mods/mesecons/mesecons/textures/mesecons_wire_on.png diff --git a/mods/mesecons/mesecons/util.lua b/mods/mesecons/mesecons/util.lua new file mode 100755 index 0000000..b15858d --- /dev/null +++ b/mods/mesecons/mesecons/util.lua @@ -0,0 +1,441 @@ +function mesecon.move_node(pos, newpos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos):to_table() + minetest.remove_node(pos) + minetest.set_node(newpos, node) + minetest.get_meta(pos):from_table(meta) +end + +-- Rules rotation Functions: +function mesecon.rotate_rules_right(rules) + local nr = {} + for i, rule in ipairs(rules) do + table.insert(nr, { + x = -rule.z, + y = rule.y, + z = rule.x, + name = rule.name}) + end + return nr +end + +function mesecon.rotate_rules_left(rules) + local nr = {} + for i, rule in ipairs(rules) do + table.insert(nr, { + x = rule.z, + y = rule.y, + z = -rule.x, + name = rule.name}) + end + return nr +end + +function mesecon.rotate_rules_down(rules) + local nr = {} + for i, rule in ipairs(rules) do + table.insert(nr, { + x = -rule.y, + y = rule.x, + z = rule.z, + name = rule.name}) + end + return nr +end + +function mesecon.rotate_rules_up(rules) + local nr = {} + for i, rule in ipairs(rules) do + table.insert(nr, { + x = rule.y, + y = -rule.x, + z = rule.z, + name = rule.name}) + end + return nr +end +-- + +function mesecon.flattenrules(allrules) +--[[ + { + { + {xyz}, + {xyz}, + }, + { + {xyz}, + {xyz}, + }, + } +--]] + if allrules[1] and + allrules[1].x then + return allrules + end + + local shallowrules = {} + for _, metarule in ipairs( allrules) do + for _, rule in ipairs(metarule ) do + table.insert(shallowrules, rule) + end + end + return shallowrules +--[[ + { + {xyz}, + {xyz}, + {xyz}, + {xyz}, + } +--]] +end + +function mesecon.rule2bit(findrule, allrules) + --get the bit of the metarule the rule is in, or bit 1 + if (allrules[1] and + allrules[1].x) or + not findrule then + return 1 + end + for m,metarule in ipairs( allrules) do + for _, rule in ipairs(metarule ) do + if vector.equals(findrule, rule) then + return m + end + end + end +end + +function mesecon.rule2metaindex(findrule, allrules) + --get the metarule the rule is in, or allrules + if allrules[1].x then + return nil + end + + if not(findrule) then + return mesecon.flattenrules(allrules) + end + + for m, metarule in ipairs( allrules) do + for _, rule in ipairs(metarule ) do + if vector.equals(findrule, rule) then + return m + end + end + end +end + +function mesecon.rule2meta(findrule, allrules) + if #allrules == 0 then return {} end + + local index = mesecon.rule2metaindex(findrule, allrules) + if index == nil then + if allrules[1].x then + return allrules + else + return {} + end + end + return allrules[index] +end + +function mesecon.dec2bin(n) + local x, y = math.floor(n / 2), n % 2 + if (n > 1) then + return mesecon.dec2bin(x)..y + else + return ""..y + end +end + +function mesecon.getstate(nodename, states) + for state, name in ipairs(states) do + if name == nodename then + return state + end + end + error(nodename.." doesn't mention itself in "..dump(states)) +end + +function mesecon.getbinstate(nodename, states) + return mesecon.dec2bin(mesecon.getstate(nodename, states)-1) +end + +function mesecon.get_bit(binary,bit) + bit = bit or 1 + local c = binary:len()-(bit-1) + return binary:sub(c,c) == "1" +end + +function mesecon.set_bit(binary,bit,value) + if value == "1" then + if not mesecon.get_bit(binary,bit) then + return mesecon.dec2bin(tonumber(binary,2)+math.pow(2,bit-1)) + end + elseif value == "0" then + if mesecon.get_bit(binary,bit) then + return mesecon.dec2bin(tonumber(binary,2)-math.pow(2,bit-1)) + end + end + return binary + +end + +function mesecon.invertRule(r) + return vector.multiply(r, -1) +end + +function mesecon.tablecopy(table) -- deep table copy + if type(table) ~= "table" then return table end -- no need to copy + local newtable = {} + + for idx, item in pairs(table) do + if type(item) == "table" then + newtable[idx] = mesecon.tablecopy(item) + else + newtable[idx] = item + end + end + + return newtable +end + +function mesecon.cmpAny(t1, t2) + if type(t1) ~= type(t2) then return false end + if type(t1) ~= "table" and type(t2) ~= "table" then return t1 == t2 end + + for i, e in pairs(t1) do + if not mesecon.cmpAny(e, t2[i]) then return false end + end + + return true +end + +-- does not overwrite values; number keys (ipairs) are appended, not overwritten +function mesecon.mergetable(source, dest) + local rval = mesecon.tablecopy(dest) + + for k, v in pairs(source) do + rval[k] = dest[k] or mesecon.tablecopy(v) + end + for i, v in ipairs(source) do + table.insert(rval, mesecon.tablecopy(v)) + end + + return rval +end + +function mesecon.register_node(name, spec_common, spec_off, spec_on) + spec_common.drop = spec_common.drop or name .. "_off" + spec_common.on_blast = spec_common.on_blast or mesecon.on_blastnode + spec_common.__mesecon_basename = name + spec_on.__mesecon_state = "on" + spec_off.__mesecon_state = "off" + + spec_on = mesecon.mergetable(spec_common, spec_on); + spec_off = mesecon.mergetable(spec_common, spec_off); + + minetest.register_node(name .. "_on", spec_on) + minetest.register_node(name .. "_off", spec_off) +end + +-- swap onstate and offstate nodes, returns new state +function mesecon.flipstate(pos, node) + local nodedef = minetest.registered_nodes[node.name] + local newstate + if (nodedef.__mesecon_state == "on") then newstate = "off" end + if (nodedef.__mesecon_state == "off") then newstate = "on" end + + minetest.swap_node(pos, {name = nodedef.__mesecon_basename .. "_" .. newstate, + param2 = node.param2}) + + return newstate +end + +-- File writing / reading utilities +local wpath = minetest.get_worldpath() +function mesecon.file2table(filename) + local f = io.open(wpath..DIR_DELIM..filename, "r") + if f == nil then return {} end + local t = f:read("*all") + f:close() + if t == "" or t == nil then return {} end + return minetest.deserialize(t) +end + +function mesecon.table2file(filename, table) + local f = io.open(wpath..DIR_DELIM..filename, "w") + f:write(minetest.serialize(table)) + f:close() +end + +-- Block position "hashing" (convert to integer) functions for voxelmanip cache +local BLOCKSIZE = 16 + +-- convert node position --> block hash +local function hash_blockpos(pos) + return minetest.hash_node_position({ + x = math.floor(pos.x/BLOCKSIZE), + y = math.floor(pos.y/BLOCKSIZE), + z = math.floor(pos.z/BLOCKSIZE) + }) +end + +-- Maps from a hashed mapblock position (as returned by hash_blockpos) to a +-- table. +-- +-- Contents of the table are: +-- “vm” → the VoxelManipulator +-- “va” → the VoxelArea +-- “data” → the data array +-- “param1” → the param1 array +-- “param2” → the param2 array +-- “dirty” → true if data has been modified +-- +-- Nil if no VM-based transaction is in progress. +local vm_cache = nil + +-- Starts a VoxelManipulator-based transaction. +-- +-- During a VM transaction, calls to vm_get_node and vm_swap_node operate on a +-- cached copy of the world loaded via VoxelManipulators. That cache can later +-- be committed to the real map by means of vm_commit or discarded by means of +-- vm_abort. +function mesecon.vm_begin() + vm_cache = {} +end + +-- Finishes a VoxelManipulator-based transaction, freeing the VMs and map data +-- and writing back any modified areas. +function mesecon.vm_commit() + for hash, tbl in pairs(vm_cache) do + if tbl.dirty then + local vm = tbl.vm + vm:set_data(tbl.data) + vm:write_to_map() + vm:update_map() + end + end + vm_cache = nil +end + +-- Finishes a VoxelManipulator-based transaction, freeing the VMs and throwing +-- away any modified areas. +function mesecon.vm_abort() + vm_cache = nil +end + +-- Gets the cache entry covering a position, populating it if necessary. +local function vm_get_or_create_entry(pos) + local hash = hash_blockpos(pos) + local tbl = vm_cache[hash] + if not tbl then + local vm = minetest.get_voxel_manip(pos, pos) + local min_pos, max_pos = vm:get_emerged_area() + local va = VoxelArea:new{MinEdge = min_pos, MaxEdge = max_pos} + tbl = {vm = vm, va = va, data = vm:get_data(), param1 = vm:get_light_data(), param2 = vm:get_param2_data(), dirty = false} + vm_cache[hash] = tbl + end + return tbl +end + +-- Gets the node at a given position during a VoxelManipulator-based +-- transaction. +function mesecon.vm_get_node(pos) + local tbl = vm_get_or_create_entry(pos) + local index = tbl.va:indexp(pos) + local node_value = tbl.data[index] + if node_value == core.CONTENT_IGNORE then + return nil + else + local node_param1 = tbl.param1[index] + local node_param2 = tbl.param2[index] + return {name = minetest.get_name_from_content_id(node_value), param1 = node_param1, param2 = node_param2} + end +end + +-- Sets a node’s name during a VoxelManipulator-based transaction. +-- +-- Existing param1, param2, and metadata are left alone. +function mesecon.vm_swap_node(pos, name) + local tbl = vm_get_or_create_entry(pos) + local index = tbl.va:indexp(pos) + tbl.data[index] = minetest.get_content_id(name) + tbl.dirty = true +end + +-- Gets the node at a given position, regardless of whether it is loaded or +-- not, respecting a transaction if one is in progress. +-- +-- Outside a VM transaction, if the mapblock is not loaded, it is pulled into +-- the server’s main map data cache and then accessed from there. +-- +-- Inside a VM transaction, the transaction’s VM cache is used. +function mesecon.get_node_force(pos) + if vm_cache then + return mesecon.vm_get_node(pos) + else + local node = minetest.get_node_or_nil(pos) + if node == nil then + -- Node is not currently loaded; use a VoxelManipulator to prime + -- the mapblock cache and try again. + minetest.get_voxel_manip(pos, pos) + node = minetest.get_node_or_nil(pos) + end + return node + end +end + +-- Swaps the node at a given position, regardless of whether it is loaded or +-- not, respecting a transaction if one is in progress. +-- +-- Outside a VM transaction, if the mapblock is not loaded, it is pulled into +-- the server’s main map data cache and then accessed from there. +-- +-- Inside a VM transaction, the transaction’s VM cache is used. +-- +-- This function can only be used to change the node’s name, not its parameters +-- or metadata. +function mesecon.swap_node_force(pos, name) + if vm_cache then + return mesecon.vm_swap_node(pos, name) + else + -- This serves to both ensure the mapblock is loaded and also hand us + -- the old node table so we can preserve param2. + local node = mesecon.get_node_force(pos) + node.name = name + minetest.swap_node(pos, node) + end +end + +-- Autoconnect Hooks +-- Nodes like conductors may change their appearance and their connection rules +-- right after being placed or after being dug, e.g. the default wires use this +-- to automatically connect to linking nodes after placement. +-- After placement, the update function will be executed immediately so that the +-- possibly changed rules can be taken into account when recalculating the circuit. +-- After digging, the update function will be queued and executed after +-- recalculating the circuit. The update function must take care of updating the +-- node at the given position itself, but also all of the other nodes the given +-- position may have (had) a linking connection to. +mesecon.autoconnect_hooks = {} + +-- name: A unique name for the hook, e.g. "foowire". Used to name the actionqueue function. +-- fct: The update function with parameters function(pos, node) +function mesecon.register_autoconnect_hook(name, fct) + mesecon.autoconnect_hooks[name] = fct + mesecon.queue:add_function("autoconnect_hook_"..name, fct) +end + +function mesecon.execute_autoconnect_hooks_now(pos, node) + for _, fct in pairs(mesecon.autoconnect_hooks) do + fct(pos, node) + end +end + +function mesecon.execute_autoconnect_hooks_queue(pos, node) + for name in pairs(mesecon.autoconnect_hooks) do + mesecon.queue:add_action(pos, "autoconnect_hook_"..name, {node}) + end +end diff --git a/mods/ITEMS/mesecons/mesecons_alias/depends.txt b/mods/mesecons/mesecons_alias/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_alias/depends.txt rename to mods/mesecons/mesecons_alias/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_alias/init.lua b/mods/mesecons/mesecons_alias/init.lua similarity index 100% rename from mods/ITEMS/mesecons/mesecons_alias/init.lua rename to mods/mesecons/mesecons_alias/init.lua diff --git a/mods/ITEMS/mesecons/mesecons_blinkyplant/depends.txt b/mods/mesecons/mesecons_blinkyplant/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_blinkyplant/depends.txt rename to mods/mesecons/mesecons_blinkyplant/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_blinkyplant/doc/blinkyplant/description.html b/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_blinkyplant/doc/blinkyplant/description.html rename to mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/description.html diff --git a/mods/ITEMS/mesecons/mesecons_blinkyplant/doc/blinkyplant/preview.png b/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_blinkyplant/doc/blinkyplant/preview.png rename to mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_blinkyplant/doc/blinkyplant/recipe.png b/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_blinkyplant/doc/blinkyplant/recipe.png rename to mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/recipe.png diff --git a/mods/mesecons/mesecons_blinkyplant/init.lua b/mods/mesecons/mesecons_blinkyplant/init.lua new file mode 100755 index 0000000..14a274f --- /dev/null +++ b/mods/mesecons/mesecons_blinkyplant/init.lua @@ -0,0 +1,52 @@ +-- The BLINKY_PLANT + +local toggle_timer = function (pos) + local timer = minetest.get_node_timer(pos) + if timer:is_started() then + timer:stop() + else + timer:start(mesecon.setting("blinky_plant_interval", 3)) + end +end + +local on_timer = function (pos) + local node = minetest.get_node(pos) + if(mesecon.flipstate(pos, node) == "on") then + mesecon.receptor_on(pos) + else + mesecon.receptor_off(pos) + end + toggle_timer(pos) +end + +mesecon.register_node("mesecons_blinkyplant:blinky_plant", { + description="Blinky Plant", + drawtype = "plantlike", + inventory_image = "jeija_blinky_plant_off.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, -0.5+0.7, 0.3}, + }, + on_timer = on_timer, + on_rightclick = toggle_timer, + on_construct = toggle_timer +},{ + tiles = {"jeija_blinky_plant_off.png"}, + groups = {dig_immediate=3}, + mesecons = {receptor = { state = mesecon.state.off }} +},{ + tiles = {"jeija_blinky_plant_on.png"}, + groups = {dig_immediate=3, not_in_creative_inventory=1}, + mesecons = {receptor = { state = mesecon.state.on }} +}) + +minetest.register_craft({ + output = "mesecons_blinkyplant:blinky_plant_off 1", + recipe = { {"","group:mesecon_conductor_craftable",""}, + {"","group:mesecon_conductor_craftable",""}, + {"group:sapling","group:sapling","group:sapling"}} +}) diff --git a/mods/ITEMS/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_off.png b/mods/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_off.png rename to mods/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_off.png diff --git a/mods/ITEMS/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_on.png b/mods/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_on.png rename to mods/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_on.png diff --git a/mods/ITEMS/mesecons/mesecons_button/depends.txt b/mods/mesecons/mesecons_button/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_button/depends.txt rename to mods/mesecons/mesecons_button/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_button/doc/button/description.html b/mods/mesecons/mesecons_button/doc/button/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_button/doc/button/description.html rename to mods/mesecons/mesecons_button/doc/button/description.html diff --git a/mods/ITEMS/mesecons/mesecons_button/doc/button/preview.png b/mods/mesecons/mesecons_button/doc/button/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_button/doc/button/preview.png rename to mods/mesecons/mesecons_button/doc/button/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_button/doc/button/recipe.png b/mods/mesecons/mesecons_button/doc/button/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_button/doc/button/recipe.png rename to mods/mesecons/mesecons_button/doc/button/recipe.png diff --git a/mods/mesecons/mesecons_button/init.lua b/mods/mesecons/mesecons_button/init.lua new file mode 100755 index 0000000..104fc5b --- /dev/null +++ b/mods/mesecons/mesecons_button/init.lua @@ -0,0 +1,106 @@ +-- WALL BUTTON +-- A button that when pressed emits power for 1 second +-- and then turns off again + +mesecon.button_turnoff = function (pos) + local node = minetest.get_node(pos) + if node.name ~= "mesecons_button:button_on" then -- has been dug + return + end + minetest.swap_node(pos, {name = "mesecons_button:button_off", param2 = node.param2}) + minetest.sound_play("mesecons_button_pop", {pos = pos}) + local rules = mesecon.rules.buttonlike_get(node) + mesecon.receptor_off(pos, rules) +end + +minetest.register_node("mesecons_button:button_off", { + drawtype = "nodebox", + tiles = { + "jeija_wall_button_sides.png", + "jeija_wall_button_sides.png", + "jeija_wall_button_sides.png", + "jeija_wall_button_sides.png", + "jeija_wall_button_sides.png", + "jeija_wall_button_off.png" + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + legacy_wallmounted = true, + walkable = false, + on_rotate = mesecon.buttonlike_onrotate, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = { -6/16, -6/16, 5/16, 6/16, 6/16, 8/16 } + }, + node_box = { + type = "fixed", + fixed = { + { -6/16, -6/16, 6/16, 6/16, 6/16, 8/16 }, -- the thin plate behind the button + { -4/16, -2/16, 4/16, 4/16, 2/16, 6/16 } -- the button itself + } + }, + groups = {dig_immediate=2, mesecon_needs_receiver = 1}, + description = "Button", + on_rightclick = function (pos, node) + minetest.swap_node(pos, {name = "mesecons_button:button_on", param2=node.param2}) + mesecon.receptor_on(pos, mesecon.rules.buttonlike_get(node)) + minetest.sound_play("mesecons_button_push", {pos=pos}) + minetest.get_node_timer(pos):start(1) + end, + sounds = default.node_sound_stone_defaults(), + mesecons = {receptor = { + state = mesecon.state.off, + rules = mesecon.rules.buttonlike_get + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_button:button_on", { + drawtype = "nodebox", + tiles = { + "jeija_wall_button_sides.png", + "jeija_wall_button_sides.png", + "jeija_wall_button_sides.png", + "jeija_wall_button_sides.png", + "jeija_wall_button_sides.png", + "jeija_wall_button_on.png" + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + legacy_wallmounted = true, + walkable = false, + on_rotate = false, + light_source = default.LIGHT_MAX-7, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = { -6/16, -6/16, 5/16, 6/16, 6/16, 8/16 } + }, + node_box = { + type = "fixed", + fixed = { + { -6/16, -6/16, 6/16, 6/16, 6/16, 8/16 }, + { -4/16, -2/16, 11/32, 4/16, 2/16, 6/16 } + } + }, + groups = {dig_immediate=2, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, + drop = 'mesecons_button:button_off', + description = "Button", + sounds = default.node_sound_stone_defaults(), + mesecons = {receptor = { + state = mesecon.state.on, + rules = mesecon.rules.buttonlike_get + }}, + on_timer = mesecon.button_turnoff, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_craft({ + output = "mesecons_button:button_off 2", + recipe = { + {"group:mesecon_conductor_craftable","default:stone"}, + } +}) diff --git a/mods/ITEMS/mesecons/mesecons_button/sounds/mesecons_button_pop.ogg b/mods/mesecons/mesecons_button/sounds/mesecons_button_pop.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_button/sounds/mesecons_button_pop.ogg rename to mods/mesecons/mesecons_button/sounds/mesecons_button_pop.ogg diff --git a/mods/ITEMS/mesecons/mesecons_button/sounds/mesecons_button_push.ogg b/mods/mesecons/mesecons_button/sounds/mesecons_button_push.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_button/sounds/mesecons_button_push.ogg rename to mods/mesecons/mesecons_button/sounds/mesecons_button_push.ogg diff --git a/mods/ITEMS/mesecons/mesecons_button/textures/jeija_wall_button_off.png b/mods/mesecons/mesecons_button/textures/jeija_wall_button_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_button/textures/jeija_wall_button_off.png rename to mods/mesecons/mesecons_button/textures/jeija_wall_button_off.png diff --git a/mods/ITEMS/mesecons/mesecons_button/textures/jeija_wall_button_on.png b/mods/mesecons/mesecons_button/textures/jeija_wall_button_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_button/textures/jeija_wall_button_on.png rename to mods/mesecons/mesecons_button/textures/jeija_wall_button_on.png diff --git a/mods/ITEMS/mesecons/mesecons_button/textures/jeija_wall_button_sides.png b/mods/mesecons/mesecons_button/textures/jeija_wall_button_sides.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_button/textures/jeija_wall_button_sides.png rename to mods/mesecons/mesecons_button/textures/jeija_wall_button_sides.png diff --git a/mods/ITEMS/mesecons/mesecons_commandblock/depends.txt b/mods/mesecons/mesecons_commandblock/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_commandblock/depends.txt rename to mods/mesecons/mesecons_commandblock/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_commandblock/doc/commandblock/description.html b/mods/mesecons/mesecons_commandblock/doc/commandblock/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_commandblock/doc/commandblock/description.html rename to mods/mesecons/mesecons_commandblock/doc/commandblock/description.html diff --git a/mods/ITEMS/mesecons/mesecons_commandblock/doc/commandblock/preview.png b/mods/mesecons/mesecons_commandblock/doc/commandblock/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_commandblock/doc/commandblock/preview.png rename to mods/mesecons/mesecons_commandblock/doc/commandblock/preview.png diff --git a/mods/mesecons/mesecons_commandblock/init.lua b/mods/mesecons/mesecons_commandblock/init.lua new file mode 100755 index 0000000..326b8ae --- /dev/null +++ b/mods/mesecons/mesecons_commandblock/init.lua @@ -0,0 +1,212 @@ +minetest.register_chatcommand("say", { + params = "", + description = "Say as the server", + privs = {server=true}, + func = function(name, param) + minetest.chat_send_all(name .. ": " .. param) + end +}) + +minetest.register_chatcommand("tell", { + params = " ", + description = "Say to privately", + func = function(name, param) + local found, _, target, message = param:find("^([^%s]+)%s+(.*)$") + if found == nil then + minetest.chat_send_player(name, "Invalid usage: " .. param) + return + end + if not minetest.get_player_by_name(target) then + minetest.chat_send_player(name, "Invalid target: " .. target) + end + minetest.chat_send_player(target, name .. " whispers: " .. message, false) + end +}) + +minetest.register_chatcommand("hp", { + params = " ", + description = "Set health of to hitpoints", + privs = {ban=true}, + func = function(name, param) + local found, _, target, value = param:find("^([^%s]+)%s+(%d+)$") + if found == nil then + minetest.chat_send_player(name, "Invalid usage: " .. param) + return + end + local player = minetest.get_player_by_name(target) + if player then + player:set_hp(value) + else + minetest.chat_send_player(name, "Invalid target: " .. target) + end + end +}) + +local function initialize_data(meta) + local commands = minetest.formspec_escape(meta:get_string("commands")) + meta:set_string("formspec", + "invsize[9,5;]" .. + "textarea[0.5,0.5;8.5,4;commands;Commands;"..commands.."]" .. + "label[1,3.8;@nearest, @farthest, and @random are replaced by the respective player names]" .. + "button_exit[3.3,4.5;2,1;submit;Submit]") + local owner = meta:get_string("owner") + if owner == "" then + owner = "not owned" + else + owner = "owned by " .. owner + end + meta:set_string("infotext", "Command Block\n" .. + "(" .. owner .. ")\n" .. + "Commands: "..commands) +end + +local function construct(pos) + local meta = minetest.get_meta(pos) + + meta:set_string("commands", "tell @nearest Commandblock unconfigured") + + meta:set_string("owner", "") + + initialize_data(meta) +end + +local function after_place(pos, placer) + if placer then + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name()) + initialize_data(meta) + end +end + +local function receive_fields(pos, formname, fields, sender) + if not fields.submit then + return + end + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if owner ~= "" and sender:get_player_name() ~= owner then + return + end + meta:set_string("commands", fields.commands) + + initialize_data(meta) +end + +local function resolve_commands(commands, pos) + local players = minetest.get_connected_players() + + -- No players online: remove all commands containing + -- @nearest, @farthest and @random + if #players == 0 then + commands = commands:gsub("[^\r\n]+", function (line) + if line:find("@nearest") then return "" end + if line:find("@farthest") then return "" end + if line:find("@random") then return "" end + return line + end) + return commands + end + + local nearest, farthest = nil, nil + local min_distance, max_distance = math.huge, -1 + for index, player in pairs(players) do + local distance = vector.distance(pos, player:getpos()) + if distance < min_distance then + min_distance = distance + nearest = player:get_player_name() + end + if distance > max_distance then + max_distance = distance + farthest = player:get_player_name() + end + end + local random = players[math.random(#players)]:get_player_name() + commands = commands:gsub("@nearest", nearest) + commands = commands:gsub("@farthest", farthest) + commands = commands:gsub("@random", random) + return commands +end + +local function commandblock_action_on(pos, node) + if node.name ~= "mesecons_commandblock:commandblock_off" then + return + end + + minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_on"}) + + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if owner == "" then + return + end + + local commands = resolve_commands(meta:get_string("commands"), pos) + for _, command in pairs(commands:split("\n")) do + local pos = command:find(" ") + local cmd, param = command, "" + if pos then + cmd = command:sub(1, pos - 1) + param = command:sub(pos + 1) + end + local cmddef = minetest.chatcommands[cmd] + if not cmddef then + minetest.chat_send_player(owner, "The command "..cmd.." does not exist") + return + end + local has_privs, missing_privs = minetest.check_player_privs(owner, cmddef.privs) + if not has_privs then + minetest.chat_send_player(owner, "You don't have permission " + .."to run "..cmd + .." (missing privileges: " + ..table.concat(missing_privs, ", ")..")") + return + end + cmddef.func(owner, param) + end +end + +local function commandblock_action_off(pos, node) + if node.name == "mesecons_commandblock:commandblock_on" then + minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_off"}) + end +end + +local function can_dig(pos, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + return owner == "" or owner == player:get_player_name() +end + +minetest.register_node("mesecons_commandblock:commandblock_off", { + description = "Command Block", + tiles = {"jeija_commandblock_off.png"}, + inventory_image = minetest.inventorycube("jeija_commandblock_off.png"), + is_ground_content = false, + groups = {cracky=2, mesecon_effector_off=1}, + on_construct = construct, + after_place_node = after_place, + on_receive_fields = receive_fields, + can_dig = can_dig, + sounds = default.node_sound_stone_defaults(), + mesecons = {effector = { + action_on = commandblock_action_on + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_commandblock:commandblock_on", { + tiles = {"jeija_commandblock_on.png"}, + is_ground_content = false, + groups = {cracky=2, mesecon_effector_on=1, not_in_creative_inventory=1}, + light_source = 10, + drop = "mesecons_commandblock:commandblock_off", + on_construct = construct, + after_place_node = after_place, + on_receive_fields = receive_fields, + can_dig = can_dig, + sounds = default.node_sound_stone_defaults(), + mesecons = {effector = { + action_off = commandblock_action_off + }}, + on_blast = mesecon.on_blastnode, +}) diff --git a/mods/ITEMS/mesecons/mesecons_commandblock/textures/jeija_commandblock_off.png b/mods/mesecons/mesecons_commandblock/textures/jeija_commandblock_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_commandblock/textures/jeija_commandblock_off.png rename to mods/mesecons/mesecons_commandblock/textures/jeija_commandblock_off.png diff --git a/mods/ITEMS/mesecons/mesecons_commandblock/textures/jeija_commandblock_on.png b/mods/mesecons/mesecons_commandblock/textures/jeija_commandblock_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_commandblock/textures/jeija_commandblock_on.png rename to mods/mesecons/mesecons_commandblock/textures/jeija_commandblock_on.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/depends.txt b/mods/mesecons/mesecons_delayer/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/depends.txt rename to mods/mesecons/mesecons_delayer/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_delayer/doc/delayer/description.html b/mods/mesecons/mesecons_delayer/doc/delayer/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/doc/delayer/description.html rename to mods/mesecons/mesecons_delayer/doc/delayer/description.html diff --git a/mods/ITEMS/mesecons/mesecons_delayer/doc/delayer/preview.png b/mods/mesecons/mesecons_delayer/doc/delayer/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/doc/delayer/preview.png rename to mods/mesecons/mesecons_delayer/doc/delayer/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/doc/delayer/recipe.png b/mods/mesecons/mesecons_delayer/doc/delayer/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/doc/delayer/recipe.png rename to mods/mesecons/mesecons_delayer/doc/delayer/recipe.png diff --git a/mods/mesecons/mesecons_delayer/init.lua b/mods/mesecons/mesecons_delayer/init.lua new file mode 100755 index 0000000..0cbfd42 --- /dev/null +++ b/mods/mesecons/mesecons_delayer/init.lua @@ -0,0 +1,183 @@ +-- Function that get the input/output rules of the delayer +local delayer_get_output_rules = function(node) + local rules = {{x = 0, y = 0, z = 1}} + for i = 0, node.param2 do + rules = mesecon.rotate_rules_left(rules) + end + return rules +end + +local delayer_get_input_rules = function(node) + local rules = {{x = 0, y = 0, z = -1}} + for i = 0, node.param2 do + rules = mesecon.rotate_rules_left(rules) + end + return rules +end + +-- Functions that are called after the delay time + +local delayer_activate = function(pos, node) + local def = minetest.registered_nodes[node.name] + local time = def.delayer_time + minetest.swap_node(pos, {name = def.delayer_onstate, param2=node.param2}) + mesecon.queue:add_action(pos, "receptor_on", {delayer_get_output_rules(node)}, time, nil) +end + +local delayer_deactivate = function(pos, node) + local def = minetest.registered_nodes[node.name] + local time = def.delayer_time + minetest.swap_node(pos, {name = def.delayer_offstate, param2=node.param2}) + mesecon.queue:add_action(pos, "receptor_off", {delayer_get_output_rules(node)}, time, nil) +end + +-- Register the 2 (states) x 4 (delay times) delayers + +for i = 1, 4 do +local groups = {} +if i == 1 then + groups = {bendy=2,snappy=1,dig_immediate=2} +else + groups = {bendy=2,snappy=1,dig_immediate=2, not_in_creative_inventory=1} +end + +local delaytime +if i == 1 then delaytime = 0.1 +elseif i == 2 then delaytime = 0.3 +elseif i == 3 then delaytime = 0.5 +elseif i == 4 then delaytime = 1.0 end + +local boxes = { + { -6/16, -8/16, -6/16, 6/16, -7/16, 6/16 }, -- the main slab + + { -2/16, -7/16, -4/16, 2/16, -26/64, -3/16 }, -- the jeweled "on" indicator + { -3/16, -7/16, -3/16, 3/16, -26/64, -2/16 }, + { -4/16, -7/16, -2/16, 4/16, -26/64, 2/16 }, + { -3/16, -7/16, 2/16, 3/16, -26/64, 3/16 }, + { -2/16, -7/16, 3/16, 2/16, -26/64, 4/16 }, + + { -6/16, -7/16, -6/16, -4/16, -27/64, -4/16 }, -- the timer indicator + { -8/16, -8/16, -1/16, -6/16, -7/16, 1/16 }, -- the two wire stubs + { 6/16, -8/16, -1/16, 8/16, -7/16, 1/16 } +} + +minetest.register_node("mesecons_delayer:delayer_off_"..tostring(i), { + description = "Delayer", + drawtype = "nodebox", + tiles = { + "mesecons_delayer_off_"..tostring(i)..".png", + "mesecons_delayer_bottom.png", + "mesecons_delayer_ends_off.png", + "mesecons_delayer_ends_off.png", + "mesecons_delayer_sides_off.png", + "mesecons_delayer_sides_off.png" + }, + inventory_image = "mesecons_delayer_off_1.png", + wield_image = "mesecons_delayer_off_1.png", + walkable = true, + selection_box = { + type = "fixed", + fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, + }, + node_box = { + type = "fixed", + fixed = boxes + }, + groups = groups, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + drop = 'mesecons_delayer:delayer_off_1', + on_punch = function (pos, node) + if node.name=="mesecons_delayer:delayer_off_1" then + minetest.swap_node(pos, {name = "mesecons_delayer:delayer_off_2", param2=node.param2}) + elseif node.name=="mesecons_delayer:delayer_off_2" then + minetest.swap_node(pos, {name = "mesecons_delayer:delayer_off_3", param2=node.param2}) + elseif node.name=="mesecons_delayer:delayer_off_3" then + minetest.swap_node(pos, {name = "mesecons_delayer:delayer_off_4", param2=node.param2}) + elseif node.name=="mesecons_delayer:delayer_off_4" then + minetest.swap_node(pos, {name = "mesecons_delayer:delayer_off_1", param2=node.param2}) + end + end, + delayer_time = delaytime, + delayer_onstate = "mesecons_delayer:delayer_on_"..tostring(i), + sounds = default.node_sound_stone_defaults(), + mesecons = { + receptor = + { + state = mesecon.state.off, + rules = delayer_get_output_rules + }, + effector = + { + rules = delayer_get_input_rules, + action_on = delayer_activate + } + }, + on_blast = mesecon.on_blastnode, +}) + + +minetest.register_node("mesecons_delayer:delayer_on_"..tostring(i), { + description = "You hacker you", + drawtype = "nodebox", + tiles = { + "mesecons_delayer_on_"..tostring(i)..".png", + "mesecons_delayer_bottom.png", + "mesecons_delayer_ends_on.png", + "mesecons_delayer_ends_on.png", + "mesecons_delayer_sides_on.png", + "mesecons_delayer_sides_on.png" + }, + walkable = true, + selection_box = { + type = "fixed", + fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, + }, + node_box = { + type = "fixed", + fixed = boxes + }, + groups = {bendy = 2, snappy = 1, dig_immediate = 2, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + drop = 'mesecons_delayer:delayer_off_1', + on_punch = function (pos, node) + if node.name=="mesecons_delayer:delayer_on_1" then + minetest.swap_node(pos, {name = "mesecons_delayer:delayer_on_2", param2=node.param2}) + elseif node.name=="mesecons_delayer:delayer_on_2" then + minetest.swap_node(pos, {name = "mesecons_delayer:delayer_on_3", param2=node.param2}) + elseif node.name=="mesecons_delayer:delayer_on_3" then + minetest.swap_node(pos, {name = "mesecons_delayer:delayer_on_4", param2=node.param2}) + elseif node.name=="mesecons_delayer:delayer_on_4" then + minetest.swap_node(pos, {name = "mesecons_delayer:delayer_on_1", param2=node.param2}) + end + end, + delayer_time = delaytime, + delayer_offstate = "mesecons_delayer:delayer_off_"..tostring(i), + mesecons = { + receptor = + { + state = mesecon.state.on, + rules = delayer_get_output_rules + }, + effector = + { + rules = delayer_get_input_rules, + action_off = delayer_deactivate + } + }, + on_blast = mesecon.on_blastnode, +}) +end + +minetest.register_craft({ + output = "mesecons_delayer:delayer_off_1", + recipe = { + {"mesecons_torch:mesecon_torch_on", "group:mesecon_conductor_craftable", "mesecons_torch:mesecon_torch_on"}, + {"default:cobble","default:cobble", "default:cobble"}, + } +}) diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_bottom.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_bottom.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_bottom.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_bottom.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_off.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_off.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_off.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_on.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_on.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_on.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_off_1.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_1.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_off_1.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_1.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_off_2.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_2.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_off_2.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_2.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_off_3.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_3.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_off_3.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_3.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_off_4.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_4.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_off_4.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_4.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_on_1.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_1.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_on_1.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_1.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_on_2.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_2.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_on_2.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_2.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_on_3.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_3.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_on_3.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_3.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_on_4.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_4.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_on_4.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_4.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_off.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_off.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_off.png diff --git a/mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_on.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_on.png rename to mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_on.png diff --git a/mods/ITEMS/mesecons/mesecons_detector/depends.txt b/mods/mesecons/mesecons_detector/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/depends.txt rename to mods/mesecons/mesecons_detector/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_detector/doc/nodedetector/description.html b/mods/mesecons/mesecons_detector/doc/nodedetector/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/doc/nodedetector/description.html rename to mods/mesecons/mesecons_detector/doc/nodedetector/description.html diff --git a/mods/ITEMS/mesecons/mesecons_detector/doc/nodedetector/preview.png b/mods/mesecons/mesecons_detector/doc/nodedetector/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/doc/nodedetector/preview.png rename to mods/mesecons/mesecons_detector/doc/nodedetector/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_detector/doc/nodedetector/recipe.png b/mods/mesecons/mesecons_detector/doc/nodedetector/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/doc/nodedetector/recipe.png rename to mods/mesecons/mesecons_detector/doc/nodedetector/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_detector/doc/objectdetector/description.html b/mods/mesecons/mesecons_detector/doc/objectdetector/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/doc/objectdetector/description.html rename to mods/mesecons/mesecons_detector/doc/objectdetector/description.html diff --git a/mods/ITEMS/mesecons/mesecons_detector/doc/objectdetector/preview.png b/mods/mesecons/mesecons_detector/doc/objectdetector/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/doc/objectdetector/preview.png rename to mods/mesecons/mesecons_detector/doc/objectdetector/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_detector/doc/objectdetector/recipe.png b/mods/mesecons/mesecons_detector/doc/objectdetector/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/doc/objectdetector/recipe.png rename to mods/mesecons/mesecons_detector/doc/objectdetector/recipe.png diff --git a/mods/mesecons/mesecons_detector/init.lua b/mods/mesecons/mesecons_detector/init.lua new file mode 100755 index 0000000..fc7d4c3 --- /dev/null +++ b/mods/mesecons/mesecons_detector/init.lua @@ -0,0 +1,315 @@ +local GET_COMMAND = "GET" + +-- Object detector +-- Detects players in a certain radius +-- The radius can be specified in mesecons/settings.lua + +local function object_detector_make_formspec(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "size[9,2.5]" .. + "field[0.3, 0;9,2;scanname;Name of player to scan for (empty for any):;${scanname}]".. + "field[0.3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]".. + "button_exit[7,0.75;2,3;;Save]") +end + +local function object_detector_on_receive_fields(pos, formname, fields, sender) + if not fields.scanname or not fields.digiline_channel then return end + + if minetest.is_protected(pos, sender:get_player_name()) then return end + + local meta = minetest.get_meta(pos) + meta:set_string("scanname", fields.scanname) + meta:set_string("digiline_channel", fields.digiline_channel) + object_detector_make_formspec(pos) +end + +-- returns true if player was found, false if not +local function object_detector_scan(pos) + local objs = minetest.get_objects_inside_radius(pos, mesecon.setting("detector_radius", 6)) + + -- abort if no scan results were found + if next(objs) == nil then return false end + + local scanname = minetest.get_meta(pos):get_string("scanname") + local scan_for = {} + for _, str in pairs(string.split(scanname:gsub(" ", ""), ",")) do + scan_for[str] = true + end + + local every_player = scanname == "" + for _, obj in pairs(objs) do + -- "" is returned if it is not a player; "" ~= nil; so only handle objects with foundname ~= "" + local foundname = obj:get_player_name() + if foundname ~= "" then + if every_player or scan_for[foundname] then + return true + end + end + end + + return false +end + +-- set player name when receiving a digiline signal on a specific channel +local object_detector_digiline = { + effector = { + action = function(pos, node, channel, msg) + local meta = minetest.get_meta(pos) + if channel == meta:get_string("digiline_channel") then + meta:set_string("scanname", msg) + object_detector_make_formspec(pos) + end + end, + } +} + +minetest.register_node("mesecons_detector:object_detector_off", { + tiles = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png"}, + paramtype = "light", + is_ground_content = false, + walkable = true, + groups = {cracky=3}, + description="Player Detector", + mesecons = {receptor = { + state = mesecon.state.off, + rules = mesecon.rules.pplate + }}, + on_construct = object_detector_make_formspec, + on_receive_fields = object_detector_on_receive_fields, + sounds = default.node_sound_stone_defaults(), + digiline = object_detector_digiline, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_detector:object_detector_on", { + tiles = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png"}, + paramtype = "light", + is_ground_content = false, + walkable = true, + groups = {cracky=3,not_in_creative_inventory=1}, + drop = 'mesecons_detector:object_detector_off', + mesecons = {receptor = { + state = mesecon.state.on, + rules = mesecon.rules.pplate + }}, + on_construct = object_detector_make_formspec, + on_receive_fields = object_detector_on_receive_fields, + sounds = default.node_sound_stone_defaults(), + digiline = object_detector_digiline, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_craft({ + output = 'mesecons_detector:object_detector_off', + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "mesecons_luacontroller:luacontroller0000", "default:steel_ingot"}, + {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = 'mesecons_detector:object_detector_off', + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "mesecons_microcontroller:microcontroller0000", "default:steel_ingot"}, + {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, + } +}) + +minetest.register_abm({ + nodenames = {"mesecons_detector:object_detector_off"}, + interval = 1, + chance = 1, + action = function(pos, node) + if not object_detector_scan(pos) then return end + + node.name = "mesecons_detector:object_detector_on" + minetest.swap_node(pos, node) + mesecon.receptor_on(pos, mesecon.rules.pplate) + end, +}) + +minetest.register_abm({ + nodenames = {"mesecons_detector:object_detector_on"}, + interval = 1, + chance = 1, + action = function(pos, node) + if object_detector_scan(pos) then return end + + node.name = "mesecons_detector:object_detector_off" + minetest.swap_node(pos, node) + mesecon.receptor_off(pos, mesecon.rules.pplate) + end, +}) + +-- Node detector +-- Detects the node in front of it + +local function node_detector_make_formspec(pos) + local meta = minetest.get_meta(pos) + if meta:get_string("distance") == "" then meta:set_string("distance", "0") end + meta:set_string("formspec", "size[9,2.5]" .. + "field[0.3, 0;9,2;scanname;Name of node to scan for (empty for any):;${scanname}]".. + "field[0.3,1.5;2.5,2;distance;Distance (0-"..mesecon.setting("node_detector_distance_max", 10).."):;${distance}]".. + "field[3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]".. + "button_exit[7,0.75;2,3;;Save]") +end + +local function node_detector_on_receive_fields(pos, fieldname, fields, sender) + if not fields.scanname or not fields.digiline_channel then return end + + if minetest.is_protected(pos, sender:get_player_name()) then return end + + local meta = minetest.get_meta(pos) + meta:set_string("scanname", fields.scanname) + meta:set_string("distance", fields.distance or "0") + meta:set_string("digiline_channel", fields.digiline_channel) + node_detector_make_formspec(pos) +end + +-- returns true if node was found, false if not +local function node_detector_scan(pos) + local node = minetest.get_node_or_nil(pos) + if not node then return end + + local meta = minetest.get_meta(pos) + + local distance = meta:get_int("distance") + local distance_max = mesecon.setting("node_detector_distance_max", 10) + if distance < 0 then distance = 0 end + if distance > distance_max then distance = distance_max end + + local frontname = minetest.get_node( + vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1)) + ).name + local scanname = meta:get_string("scanname") + + return (frontname == scanname) or + (frontname ~= "air" and frontname ~= "ignore" and scanname == "") +end + +-- set player name when receiving a digiline signal on a specific channel +local node_detector_digiline = { + effector = { + action = function(pos, node, channel, msg) + local meta = minetest.get_meta(pos) + + local distance = meta:get_int("distance") + local distance_max = mesecon.setting("node_detector_distance_max", 10) + if distance < 0 then distance = 0 end + if distance > distance_max then distance = distance_max end + + if channel ~= meta:get_string("digiline_channel") then return end + + if msg == GET_COMMAND then + local nodename = minetest.get_node( + vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1)) + ).name + + digiline:receptor_send(pos, digiline.rules.default, channel, nodename) + else + meta:set_string("scanname", msg) + node_detector_make_formspec(pos) + end + end, + }, + receptor = {} +} + +local function after_place_node_detector(pos, placer) + local placer_pos = placer:getpos() + if not placer_pos then + return + end + + --correct for the player's height + if placer:is_player() then + placer_pos.y = placer_pos.y + 1.625 + end + + --correct for 6d facedir + local node = minetest.get_node(pos) + node.param2 = minetest.dir_to_facedir(vector.subtract(pos, placer_pos), true) + minetest.set_node(pos, node) +end + +minetest.register_node("mesecons_detector:node_detector_off", { + tiles = {"default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "jeija_node_detector_off.png"}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + walkable = true, + groups = {cracky=3}, + description="Node Detector", + mesecons = {receptor = { + state = mesecon.state.off + }}, + on_construct = node_detector_make_formspec, + on_receive_fields = node_detector_on_receive_fields, + sounds = default.node_sound_stone_defaults(), + digiline = node_detector_digiline, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_detector:node_detector_on", { + tiles = {"default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "jeija_node_detector_on.png"}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + walkable = true, + groups = {cracky=3,not_in_creative_inventory=1}, + drop = 'mesecons_detector:node_detector_off', + mesecons = {receptor = { + state = mesecon.state.on + }}, + on_construct = node_detector_make_formspec, + on_receive_fields = node_detector_on_receive_fields, + sounds = default.node_sound_stone_defaults(), + digiline = node_detector_digiline, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_craft({ + output = 'mesecons_detector:node_detector_off', + recipe = { + {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, + {"default:steel_ingot", "mesecons_luacontroller:luacontroller0000", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = 'mesecons_detector:node_detector_off', + recipe = { + {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, + {"default:steel_ingot", "mesecons_microcontroller:microcontroller0000", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + } +}) + +minetest.register_abm({ + nodenames = {"mesecons_detector:node_detector_off"}, + interval = 1, + chance = 1, + action = function(pos, node) + if not node_detector_scan(pos) then return end + + node.name = "mesecons_detector:node_detector_on" + minetest.swap_node(pos, node) + mesecon.receptor_on(pos) + end, +}) + +minetest.register_abm({ + nodenames = {"mesecons_detector:node_detector_on"}, + interval = 1, + chance = 1, + action = function(pos, node) + if node_detector_scan(pos) then return end + + node.name = "mesecons_detector:node_detector_off" + minetest.swap_node(pos, node) + mesecon.receptor_off(pos) + end, +}) diff --git a/mods/ITEMS/mesecons/mesecons_detector/textures/jeija_node_detector_off.png b/mods/mesecons/mesecons_detector/textures/jeija_node_detector_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/textures/jeija_node_detector_off.png rename to mods/mesecons/mesecons_detector/textures/jeija_node_detector_off.png diff --git a/mods/ITEMS/mesecons/mesecons_detector/textures/jeija_node_detector_on.png b/mods/mesecons/mesecons_detector/textures/jeija_node_detector_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/textures/jeija_node_detector_on.png rename to mods/mesecons/mesecons_detector/textures/jeija_node_detector_on.png diff --git a/mods/ITEMS/mesecons/mesecons_detector/textures/jeija_object_detector_off.png b/mods/mesecons/mesecons_detector/textures/jeija_object_detector_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/textures/jeija_object_detector_off.png rename to mods/mesecons/mesecons_detector/textures/jeija_object_detector_off.png diff --git a/mods/ITEMS/mesecons/mesecons_detector/textures/jeija_object_detector_on.png b/mods/mesecons/mesecons_detector/textures/jeija_object_detector_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_detector/textures/jeija_object_detector_on.png rename to mods/mesecons/mesecons_detector/textures/jeija_object_detector_on.png diff --git a/mods/ITEMS/mesecons/mesecons_doors/depends.txt b/mods/mesecons/mesecons_doors/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_doors/depends.txt rename to mods/mesecons/mesecons_doors/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_doors/init.lua b/mods/mesecons/mesecons_doors/init.lua similarity index 100% rename from mods/ITEMS/mesecons/mesecons_doors/init.lua rename to mods/mesecons/mesecons_doors/init.lua diff --git a/mods/mesecons/mesecons_extrawires/corner.lua b/mods/mesecons/mesecons_extrawires/corner.lua new file mode 100755 index 0000000..8dc9866 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/corner.lua @@ -0,0 +1,91 @@ +local screwdriver_exists = minetest.global_exists("screwdriver") + +local corner_nodebox = { + type = "fixed", + fixed = {{ -16/32-0.001, -17/32, -3/32, 0, -13/32, 3/32 }, + { -3/32, -17/32, -16/32+0.001, 3/32, -13/32, 3/32}} +} + +local corner_selectionbox = { + type = "fixed", + fixed = { -16/32-0.001, -18/32, -16/32, 5/32, -12/32, 5/32 }, +} + +local corner_get_rules = function (node) + local rules = + {{x = 1, y = 0, z = 0}, + {x = 0, y = 0, z = -1}} + + for i = 0, node.param2 do + rules = mesecon.rotate_rules_left(rules) + end + + return rules +end + +minetest.register_node("mesecons_extrawires:corner_on", { + drawtype = "nodebox", + tiles = { + "jeija_insulated_wire_curved_tb_on.png", + "jeija_insulated_wire_curved_tb_on.png^[transformR270", + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_ends_on.png", + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_ends_on.png" + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + walkable = false, + sunlight_propagates = true, + selection_box = corner_selectionbox, + node_box = corner_nodebox, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, + drop = "mesecons_extrawires:corner_off", + mesecons = {conductor = + { + state = mesecon.state.on, + rules = corner_get_rules, + offstate = "mesecons_extrawires:corner_off" + }}, + on_blast = mesecon.on_blastnode, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, +}) + +minetest.register_node("mesecons_extrawires:corner_off", { + drawtype = "nodebox", + description = "Insulated Mesecon Corner", + tiles = { + "jeija_insulated_wire_curved_tb_off.png", + "jeija_insulated_wire_curved_tb_off.png^[transformR270", + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_ends_off.png", + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_ends_off.png" + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + walkable = false, + sunlight_propagates = true, + selection_box = corner_selectionbox, + node_box = corner_nodebox, + groups = {dig_immediate = 3}, + mesecons = {conductor = + { + state = mesecon.state.off, + rules = corner_get_rules, + onstate = "mesecons_extrawires:corner_on" + }}, + on_blast = mesecon.on_blastnode, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, +}) + +minetest.register_craft({ + output = "mesecons_extrawires:corner_off 3", + recipe = { + {"", "", ""}, + {"mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off", ""}, + {"", "mesecons_insulated:insulated_off", ""}, + } +}) diff --git a/mods/mesecons/mesecons_extrawires/crossover.lua b/mods/mesecons/mesecons_extrawires/crossover.lua new file mode 100755 index 0000000..4aefbbc --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/crossover.lua @@ -0,0 +1,139 @@ +local function crossover_get_rules(node) + return { + {--first wire + {x=-1,y=0,z=0}, + {x=1,y=0,z=0}, + }, + {--second wire + {x=0,y=0,z=-1}, + {x=0,y=0,z=1}, + }, + } +end + +local crossover_states = { + "mesecons_extrawires:crossover_off", + "mesecons_extrawires:crossover_01", + "mesecons_extrawires:crossover_10", + "mesecons_extrawires:crossover_on", +} + +minetest.register_node("mesecons_extrawires:crossover_off", { + description = "Insulated Mesecon Crossover", + drawtype = "mesh", + mesh = "mesecons_extrawires_crossover.b3d", + tiles = { + "jeija_insulated_wire_ends_off.png", + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_ends_off.png" + }, + paramtype = "light", + is_ground_content = false, + walkable = false, + stack_max = 99, + selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, + groups = {dig_immediate=3, mesecon=3}, + mesecons = { + conductor = { + states = crossover_states, + rules = crossover_get_rules(), + } + }, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_extrawires:crossover_01", { + description = "You hacker you!", + drop = "mesecons_extrawires:crossover_off", + drawtype = "mesh", + mesh = "mesecons_extrawires_crossover.b3d", + tiles = { + "jeija_insulated_wire_ends_on.png", + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_ends_off.png" + }, + paramtype = "light", + is_ground_content = false, + walkable = false, + stack_max = 99, + selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, + groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, + mesecons = { + conductor = { + states = crossover_states, + rules = crossover_get_rules(), + } + }, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_extrawires:crossover_10", { + description = "You hacker you!", + drop = "mesecons_extrawires:crossover_off", + drawtype = "mesh", + mesh = "mesecons_extrawires_crossover.b3d", + tiles = { + "jeija_insulated_wire_ends_off.png", + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_ends_on.png" + }, + paramtype = "light", + is_ground_content = false, + walkable = false, + stack_max = 99, + selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, + groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, + mesecons = { + conductor = { + states = crossover_states, + rules = crossover_get_rules(), + } + }, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_extrawires:crossover_on", { + description = "You hacker you!", + drop = "mesecons_extrawires:crossover_off", + drawtype = "mesh", + mesh = "mesecons_extrawires_crossover.b3d", + tiles = { + "jeija_insulated_wire_ends_on.png", + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_ends_on.png" + }, + paramtype = "light", + is_ground_content = false, + walkable = false, + stack_max = 99, + selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}}, + groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, + mesecons = { + conductor = { + states = crossover_states, + rules = crossover_get_rules(), + } + }, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mesecons_extrawires:crossover_off", + recipe = { + "mesecons_insulated:insulated_off", + "mesecons_insulated:insulated_off", + }, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mesecons_insulated:insulated_off 2", + recipe = { + "mesecons_extrawires:crossover_off", + }, +}) diff --git a/mods/mesecons/mesecons_extrawires/depends.txt b/mods/mesecons/mesecons_extrawires/depends.txt new file mode 100755 index 0000000..369aeb7 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/depends.txt @@ -0,0 +1,3 @@ +default +mesecons +screwdriver? diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/corner/description.html b/mods/mesecons/mesecons_extrawires/doc/corner/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/corner/description.html rename to mods/mesecons/mesecons_extrawires/doc/corner/description.html diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/corner/preview.png b/mods/mesecons/mesecons_extrawires/doc/corner/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/corner/preview.png rename to mods/mesecons/mesecons_extrawires/doc/corner/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/corner/recipe.png b/mods/mesecons/mesecons_extrawires/doc/corner/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/corner/recipe.png rename to mods/mesecons/mesecons_extrawires/doc/corner/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/crossing/description.html b/mods/mesecons/mesecons_extrawires/doc/crossing/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/crossing/description.html rename to mods/mesecons/mesecons_extrawires/doc/crossing/description.html diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/crossing/preview.png b/mods/mesecons/mesecons_extrawires/doc/crossing/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/crossing/preview.png rename to mods/mesecons/mesecons_extrawires/doc/crossing/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/crossing/recipe.png b/mods/mesecons/mesecons_extrawires/doc/crossing/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/crossing/recipe.png rename to mods/mesecons/mesecons_extrawires/doc/crossing/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/mese/description.html b/mods/mesecons/mesecons_extrawires/doc/mese/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/mese/description.html rename to mods/mesecons/mesecons_extrawires/doc/mese/description.html diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/mese/preview.png b/mods/mesecons/mesecons_extrawires/doc/mese/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/mese/preview.png rename to mods/mesecons/mesecons_extrawires/doc/mese/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/mese/recipe.png b/mods/mesecons/mesecons_extrawires/doc/mese/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/mese/recipe.png rename to mods/mesecons/mesecons_extrawires/doc/mese/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/tjunction/description.html b/mods/mesecons/mesecons_extrawires/doc/tjunction/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/tjunction/description.html rename to mods/mesecons/mesecons_extrawires/doc/tjunction/description.html diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/tjunction/preview.png b/mods/mesecons/mesecons_extrawires/doc/tjunction/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/tjunction/preview.png rename to mods/mesecons/mesecons_extrawires/doc/tjunction/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/tjunction/recipe.png b/mods/mesecons/mesecons_extrawires/doc/tjunction/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/tjunction/recipe.png rename to mods/mesecons/mesecons_extrawires/doc/tjunction/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/vertical/description.html b/mods/mesecons/mesecons_extrawires/doc/vertical/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/vertical/description.html rename to mods/mesecons/mesecons_extrawires/doc/vertical/description.html diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/vertical/preview.png b/mods/mesecons/mesecons_extrawires/doc/vertical/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/vertical/preview.png rename to mods/mesecons/mesecons_extrawires/doc/vertical/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/doc/vertical/recipe.png b/mods/mesecons/mesecons_extrawires/doc/vertical/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/doc/vertical/recipe.png rename to mods/mesecons/mesecons_extrawires/doc/vertical/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/init.lua b/mods/mesecons/mesecons_extrawires/init.lua similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/init.lua rename to mods/mesecons/mesecons_extrawires/init.lua diff --git a/mods/mesecons/mesecons_extrawires/mesewire.lua b/mods/mesecons/mesecons_extrawires/mesewire.lua new file mode 100755 index 0000000..455f75f --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/mesewire.lua @@ -0,0 +1,37 @@ +local mesewire_rules = +{ + {x = 1, y = 0, z = 0}, + {x =-1, y = 0, z = 0}, + {x = 0, y = 1, z = 0}, + {x = 0, y =-1, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z =-1}, +} + +minetest.override_item("default:mese", { + mesecons = {conductor = { + state = mesecon.state.off, + onstate = "mesecons_extrawires:mese_powered", + rules = mesewire_rules + }} +}) + +-- Copy node definition of powered mese from normal mese +-- and brighten texture tiles to indicate mese is powered +local powered_def = mesecon.mergetable(minetest.registered_nodes["default:mese"], { + drop = "default:mese", + light_source = 5, + mesecons = {conductor = { + state = mesecon.state.on, + offstate = "default:mese", + rules = mesewire_rules + }}, + groups = {cracky = 1, not_in_creative_inventory = 1}, + on_blast = mesecon.on_blastnode, +}) + +for i, v in pairs(powered_def.tiles) do + powered_def.tiles[i] = v .. "^[brighten" +end + +minetest.register_node("mesecons_extrawires:mese_powered", powered_def) diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/models/mesecons_extrawires_crossover.b3d b/mods/mesecons/mesecons_extrawires/models/mesecons_extrawires_crossover.b3d similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/models/mesecons_extrawires_crossover.b3d rename to mods/mesecons/mesecons_extrawires/models/mesecons_extrawires_crossover.b3d diff --git a/mods/ITEMS/mesecons/mesecons_extrawires/src/mesecons_extrawires_crossover.blend b/mods/mesecons/mesecons_extrawires/src/mesecons_extrawires_crossover.blend similarity index 100% rename from mods/ITEMS/mesecons/mesecons_extrawires/src/mesecons_extrawires_crossover.blend rename to mods/mesecons/mesecons_extrawires/src/mesecons_extrawires_crossover.blend diff --git a/mods/mesecons/mesecons_extrawires/tjunction.lua b/mods/mesecons/mesecons_extrawires/tjunction.lua new file mode 100755 index 0000000..53a69f6 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/tjunction.lua @@ -0,0 +1,92 @@ +local screwdriver_exists = minetest.global_exists("screwdriver") + +local tjunction_nodebox = { + type = "fixed", + fixed = {{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 }, + { -3/32, -17/32, -16/32+0.001, 3/32, -13/32, -3/32},} +} + +local tjunction_selectionbox = { + type = "fixed", + fixed = { -16/32-0.001, -18/32, -16/32, 16/32+0.001, -12/32, 7/32 }, +} + +local tjunction_get_rules = function (node) + local rules = + {{x = 0, y = 0, z = 1}, + {x = 1, y = 0, z = 0}, + {x = 0, y = 0, z = -1}} + + for i = 0, node.param2 do + rules = mesecon.rotate_rules_left(rules) + end + + return rules +end + +minetest.register_node("mesecons_extrawires:tjunction_on", { + drawtype = "nodebox", + tiles = { + "jeija_insulated_wire_tjunction_tb_on.png", + "jeija_insulated_wire_tjunction_tb_on.png^[transformR180", + "jeija_insulated_wire_ends_on.png", + "jeija_insulated_wire_ends_on.png", + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_ends_on.png" + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + walkable = false, + sunlight_propagates = true, + selection_box = tjunction_selectionbox, + node_box = tjunction_nodebox, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, + drop = "mesecons_extrawires:tjunction_off", + mesecons = {conductor = + { + state = mesecon.state.on, + rules = tjunction_get_rules, + offstate = "mesecons_extrawires:tjunction_off" + }}, + on_blast = mesecon.on_blastnode, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, +}) + +minetest.register_node("mesecons_extrawires:tjunction_off", { + drawtype = "nodebox", + description = "Insulated Mesecon T-junction", + tiles = { + "jeija_insulated_wire_tjunction_tb_off.png", + "jeija_insulated_wire_tjunction_tb_off.png^[transformR180", + "jeija_insulated_wire_ends_off.png", + "jeija_insulated_wire_ends_off.png", + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_ends_off.png" + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + walkable = false, + sunlight_propagates = true, + selection_box = tjunction_selectionbox, + node_box = tjunction_nodebox, + groups = {dig_immediate = 3}, + mesecons = {conductor = + { + state = mesecon.state.off, + rules = tjunction_get_rules, + onstate = "mesecons_extrawires:tjunction_on" + }}, + on_blast = mesecon.on_blastnode, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, +}) + +minetest.register_craft({ + output = "mesecons_extrawires:tjunction_off 3", + recipe = { + {"", "", ""}, + {"mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off"}, + {"", "mesecons_insulated:insulated_off", ""}, + } +}) diff --git a/mods/mesecons/mesecons_extrawires/vertical.lua b/mods/mesecons/mesecons_extrawires/vertical.lua new file mode 100755 index 0000000..1cff013 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/vertical.lua @@ -0,0 +1,184 @@ +local vertical_box = { + type = "fixed", + fixed = {-1/16, -8/16, -1/16, 1/16, 8/16, 1/16} +} + +local top_box = { + type = "fixed", + fixed = {{-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}} +} + +local bottom_box = { + type = "fixed", + fixed = { + {-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}, + {-1/16, -7/16, -1/16, 1/16, 8/16, 1/16}, + } +} + +local vertical_rules = { + {x=0, y=1, z=0}, + {x=0, y=-1, z=0} +} + +local top_rules = { + {x=1,y=0, z=0}, + {x=-1,y=0, z=0}, + {x=0,y=0, z=1}, + {x=0,y=0, z=-1}, + {x=0,y=-1, z=0} +} + +local bottom_rules = { + {x=1, y=0, z=0}, + {x=-1, y=0, z=0}, + {x=0, y=0, z=1}, + {x=0, y=0, z=-1}, + {x=0, y=1, z=0}, + {x=0, y=2, z=0} -- receive power from pressure plate / detector / ... 2 nodes above +} + +local vertical_updatepos = function (pos) + local node = minetest.get_node(pos) + if minetest.registered_nodes[node.name] + and minetest.registered_nodes[node.name].is_vertical_conductor then + local node_above = minetest.get_node(vector.add(pos, vertical_rules[1])) + local node_below = minetest.get_node(vector.add(pos, vertical_rules[2])) + + local above = minetest.registered_nodes[node_above.name] + and minetest.registered_nodes[node_above.name].is_vertical_conductor + local below = minetest.registered_nodes[node_below.name] + and minetest.registered_nodes[node_below.name].is_vertical_conductor + + mesecon.on_dignode(pos, node) + + -- Always place offstate conductor and let mesecon.on_placenode take care + local newname = "mesecons_extrawires:vertical_" + if above and below then -- above and below: vertical mesecon + newname = newname .. "off" + elseif above and not below then -- above only: bottom + newname = newname .. "bottom_off" + elseif not above and below then -- below only: top + newname = newname .. "top_off" + else -- no vertical wire above, no vertical wire below: use bottom + newname = newname .. "bottom_off" + end + + minetest.set_node(pos, {name = newname}) + mesecon.on_placenode(pos, {name = newname}) + end +end + +local vertical_update = function (pos, node) + vertical_updatepos(pos) -- this one + vertical_updatepos(vector.add(pos, vertical_rules[1])) -- above + vertical_updatepos(vector.add(pos, vertical_rules[2])) -- below +end + +-- Vertical wire +mesecon.register_node("mesecons_extrawires:vertical", { + description = "Vertical Mesecon", + drawtype = "nodebox", + walkable = false, + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + selection_box = vertical_box, + node_box = vertical_box, + is_vertical_conductor = true, + drop = "mesecons_extrawires:vertical_off", + after_place_node = vertical_update, + after_dig_node = vertical_update +},{ + tiles = {"mesecons_wire_off.png"}, + groups = {dig_immediate=3}, + mesecons = {conductor = { + state = mesecon.state.off, + onstate = "mesecons_extrawires:vertical_on", + rules = vertical_rules, + }} +},{ + tiles = {"mesecons_wire_on.png"}, + groups = {dig_immediate=3, not_in_creative_inventory=1}, + mesecons = {conductor = { + state = mesecon.state.on, + offstate = "mesecons_extrawires:vertical_off", + rules = vertical_rules, + }} +}) + +-- Vertical wire top +mesecon.register_node("mesecons_extrawires:vertical_top", { + description = "Vertical mesecon", + drawtype = "nodebox", + walkable = false, + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + groups = {dig_immediate=3, not_in_creative_inventory=1}, + selection_box = top_box, + node_box = top_box, + is_vertical_conductor = true, + drop = "mesecons_extrawires:vertical_off", + after_place_node = vertical_update, + after_dig_node = vertical_update +},{ + tiles = {"mesecons_wire_off.png"}, + mesecons = {conductor = { + state = mesecon.state.off, + onstate = "mesecons_extrawires:vertical_top_on", + rules = top_rules, + }} +},{ + tiles = {"mesecons_wire_on.png"}, + mesecons = {conductor = { + state = mesecon.state.on, + offstate = "mesecons_extrawires:vertical_top_off", + rules = top_rules, + }} +}) + +-- Vertical wire bottom +mesecon.register_node("mesecons_extrawires:vertical_bottom", { + description = "Vertical mesecon", + drawtype = "nodebox", + walkable = false, + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, + selection_box = bottom_box, + node_box = bottom_box, + is_vertical_conductor = true, + drop = "mesecons_extrawires:vertical_off", + after_place_node = vertical_update, + after_dig_node = vertical_update +},{ + tiles = {"mesecons_wire_off.png"}, + mesecons = {conductor = { + state = mesecon.state.off, + onstate = "mesecons_extrawires:vertical_bottom_on", + rules = bottom_rules, + }} +},{ + tiles = {"mesecons_wire_on.png"}, + mesecons = {conductor = { + state = mesecon.state.on, + offstate = "mesecons_extrawires:vertical_bottom_off", + rules = bottom_rules, + }} +}) + +minetest.register_craft({ + output = "mesecons_extrawires:vertical_off 3", + recipe = { + {"mesecons:wire_00000000_off"}, + {"mesecons:wire_00000000_off"}, + {"mesecons:wire_00000000_off"} + } +}) + +minetest.register_craft({ + output = "mesecons:wire_00000000_off", + recipe = {{"mesecons_extrawires:vertical_off"}} +}) diff --git a/mods/mesecons/mesecons_fpga/depends.txt b/mods/mesecons/mesecons_fpga/depends.txt new file mode 100755 index 0000000..a0ba1ef --- /dev/null +++ b/mods/mesecons/mesecons_fpga/depends.txt @@ -0,0 +1,2 @@ +mesecons +screwdriver? diff --git a/mods/ITEMS/mesecons/mesecons_fpga/doc/fpga/description.html b/mods/mesecons/mesecons_fpga/doc/fpga/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/doc/fpga/description.html rename to mods/mesecons/mesecons_fpga/doc/fpga/description.html diff --git a/mods/ITEMS/mesecons/mesecons_fpga/doc/fpga/preview.png b/mods/mesecons/mesecons_fpga/doc/fpga/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/doc/fpga/preview.png rename to mods/mesecons/mesecons_fpga/doc/fpga/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_fpga/doc/fpga/recipe.png b/mods/mesecons/mesecons_fpga/doc/fpga/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/doc/fpga/recipe.png rename to mods/mesecons/mesecons_fpga/doc/fpga/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_fpga/doc/programmer/description.html b/mods/mesecons/mesecons_fpga/doc/programmer/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/doc/programmer/description.html rename to mods/mesecons/mesecons_fpga/doc/programmer/description.html diff --git a/mods/ITEMS/mesecons/mesecons_fpga/doc/programmer/preview.png b/mods/mesecons/mesecons_fpga/doc/programmer/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/doc/programmer/preview.png rename to mods/mesecons/mesecons_fpga/doc/programmer/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_fpga/doc/programmer/recipe.png b/mods/mesecons/mesecons_fpga/doc/programmer/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/doc/programmer/recipe.png rename to mods/mesecons/mesecons_fpga/doc/programmer/recipe.png diff --git a/mods/mesecons/mesecons_fpga/init.lua b/mods/mesecons/mesecons_fpga/init.lua new file mode 100755 index 0000000..941b61a --- /dev/null +++ b/mods/mesecons/mesecons_fpga/init.lua @@ -0,0 +1,420 @@ +local plg = {} +plg.rules = {} + +local lcore = dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/logic.lua") +dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/tool.lua")(plg) + + +plg.register_nodes = function(template) + -- each loop is for one of the 4 IO ports + for a = 0, 1 do + for b = 0, 1 do + for c = 0, 1 do + for d = 0, 1 do + local ndef = table.copy(template) + local nodename = "mesecons_fpga:fpga" + .. tostring(d) .. tostring(c) .. tostring(b) .. tostring(a) + + -- build top texture string + local texture = "jeija_fpga_top.png" + if a == 1 then texture = texture .. "^jeija_microcontroller_LED_A.png" end + if b == 1 then texture = texture .. "^jeija_microcontroller_LED_B.png" end + if c == 1 then texture = texture .. "^jeija_microcontroller_LED_C.png" end + if d == 1 then texture = texture .. "^jeija_microcontroller_LED_D.png" end + ndef.tiles[1] = texture + ndef.inventory_image = texture + + if (a + b + c + d) > 0 then + ndef.groups["not_in_creative_inventory"] = 1 + end + + -- interaction with mesecons (input / output) + local rules_out = {} + if a == 1 then table.insert(rules_out, {x = -1, y = 0, z = 0}) end + if b == 1 then table.insert(rules_out, {x = 0, y = 0, z = 1}) end + if c == 1 then table.insert(rules_out, {x = 1, y = 0, z = 0}) end + if d == 1 then table.insert(rules_out, {x = 0, y = 0, z = -1}) end + plg.rules[nodename] = rules_out + + local rules_in = {} + if a == 0 then table.insert(rules_in, {x = -1, y = 0, z = 0}) end + if b == 0 then table.insert(rules_in, {x = 0, y = 0, z = 1}) end + if c == 0 then table.insert(rules_in, {x = 1, y = 0, z = 0}) end + if d == 0 then table.insert(rules_in, {x = 0, y = 0, z = -1}) end + ndef.mesecons.effector.rules = rules_in + + if (a + b + c + d) > 0 then + ndef.mesecons.receptor = { + state = mesecon.state.on, + rules = rules_out, + } + end + + minetest.register_node(nodename, ndef) + end + end + end + end +end + +plg.register_nodes({ + description = "FPGA", + drawtype = "nodebox", + tiles = { + "", -- replaced later + "jeija_microcontroller_bottom.png", + "jeija_fpga_sides.png", + "jeija_fpga_sides.png", + "jeija_fpga_sides.png", + "jeija_fpga_sides.png" + }, + inventory_image = "", -- replaced later + is_ground_content = false, + sunlight_propagates = true, + paramtype = "light", + walkable = true, + groups = {dig_immediate = 2, mesecon = 3, overheat = 1}, + drop = "mesecons_fpga:fpga0000", + selection_box = { + type = "fixed", + fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 }, + }, + node_box = { + type = "fixed", + fixed = { + { -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }, -- bottom slab + { -5/16, -7/16, -5/16, 5/16, -6/16, 5/16 }, -- circuit board + { -3/16, -6/16, -3/16, 3/16, -5/16, 3/16 }, -- IC + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local is = { {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {} } + + meta:set_string("instr", lcore.serialize(is)) + meta:set_int("valid", 0) + meta:set_string("formspec", plg.to_formspec_string(is)) + meta:set_string("infotext", "FPGA") + end, + on_receive_fields = function(pos, formname, fields, sender) + if fields.program == nil then return end -- we only care when the user clicks "Program" + local meta = minetest.get_meta(pos) + local is = plg.from_formspec_fields(fields) + + meta:set_string("instr", lcore.serialize(is)) + plg.update_formspec(pos, is) + end, + sounds = default.node_sound_stone_defaults(), + mesecons = { + effector = { + rules = {}, -- replaced later + action_change = function(pos, node, rule, newstate) + plg.ports_changed(pos, rule, newstate) + plg.update(pos) + end + } + }, + after_dig_node = function(pos, node) + mesecon.receptor_off(pos, plg.rules[node.name]) + end, + on_blast = mesecon.on_blastnode, + on_rotate = function(pos, node, user, mode) + local abcd1 = {"A", "B", "C", "D"} + local abcd2 = {A = 1, B = 2, C = 3, D = 4} + local ops = {"op1", "op2", "dst"} + local dir = 0 + if mode == screwdriver.ROTATE_FACE then -- clock-wise + dir = 1 + if user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), + "FPGA ports have been rotated clockwise.") + end + elseif mode == screwdriver.ROTATE_AXIS then -- counter-clockwise + dir = -1 + if user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), + "FPGA ports have been rotated counter-clockwise.") + end + end + + local meta = minetest.get_meta(pos) + local instr = lcore.deserialize(meta:get_string("instr")) + for i = 1, #instr do + for _, op in ipairs(ops) do + local o = instr[i][op] + if o and o.type == "io" then + local num = abcd2[o.port] + num = num + dir + if num > 4 then num = 1 + elseif num < 1 then num = 4 end + instr[i][op].port = abcd1[num] + end + end + end + + meta:set_string("instr", lcore.serialize(instr)) + plg.update_formspec(pos, instr) + return true + end, +}) + + +plg.to_formspec_string = function(is) + local function dropdown_op(x, y, name, val) + local s = "dropdown[" .. tostring(x) .. "," .. tostring(y) .. ";" + .. "0.75,0.5;" .. name .. ";" -- the height seems to be ignored? + s = s .. " ,A,B,C,D,0,1,2,3,4,5,6,7,8,9;" + if val == nil then + s = s .. "0" -- actually selects no field at all + elseif val.type == "io" then + local mapping = { + ["A"] = 1, + ["B"] = 2, + ["C"] = 3, + ["D"] = 4, + } + s = s .. tostring(1 + mapping[val.port]) + else -- "reg" + s = s .. tostring(6 + val.n) + end + return s .. "]" + end + local function dropdown_action(x, y, name, val) + local s = "dropdown[" .. tostring(x) .. "," .. tostring(y) .. ";" + .. "1.125,0.5;" .. name .. ";" -- the height seems to be ignored? + s = s .. " , AND, OR, NOT, XOR,NAND, =,XNOR;" + if val == nil then + return s .. "0]" -- actually selects no field at all + end + local mapping = { + ["and"] = 1, + ["or"] = 2, + ["not"] = 3, + ["xor"] = 4, + ["nand"] = 5, + ["buf"] = 6, + ["xnor"] = 7, + } + return s .. tostring(1 + mapping[val]) .. "]" + end + local s = "size[9,9]".. + "label[3.4,-0.15;FPGA gate configuration]".. + "button_exit[7,7.5;2,2.5;program;Program]".. + "box[4.2,0.5;0.03,7;#ffffff]".. + "label[0.25,0.25;op. 1]".. + "label[1.0,0.25;gate type]".. + "label[2.125,0.25;op. 2]".. + "label[3.15,0.25;dest]".. + "label[4.5,0.25;op. 1]".. + "label[5.25,0.25;gate type]".. + "label[6.375,0.25;op. 2]".. + "label[7.4,0.25;dest]" + local x = 1 - 0.75 + local y = 1 - 0.25 + for i = 1, 14 do + local cur = is[i] + s = s .. dropdown_op (x , y, tostring(i).."op1", cur.op1) + s = s .. dropdown_action(x+0.75 , y, tostring(i).."act", cur.action) + s = s .. dropdown_op (x+1.875, y, tostring(i).."op2", cur.op2) + s = s .. "label[" .. tostring(x+2.625) .. "," .. tostring(y+0.1) .. "; ->]" + s = s .. dropdown_op (x+2.9 , y, tostring(i).."dst", cur.dst) + y = y + 1 + + if i == 7 then + x = 4.5 + y = 1 - 0.25 + end + end + return s +end + +plg.from_formspec_fields = function(fields) + local function read_op(s) + if s == nil or s == " " then + return nil + elseif s == "A" or s == "B" or s == "C" or s == "D" then + return {type = "io", port = s} + else + return {type = "reg", n = tonumber(s)} + end + end + local function read_action(s) + if s == nil or s == " " then + return nil + end + local mapping = { + ["AND"] = "and", + ["OR"] = "or", + ["NOT"] = "not", + ["XOR"] = "xor", + ["NAND"] = "nand", + ["="] = "buf", + ["XNOR"] = "xnor", + } + s = s:gsub("^%s*", "") -- remove leading spaces + return mapping[s] + end + local is = {} + for i = 1, 14 do + local cur = {} + cur.op1 = read_op(fields[tonumber(i) .. "op1"]) + cur.action = read_action(fields[tonumber(i) .. "act"]) + cur.op2 = read_op(fields[tonumber(i) .. "op2"]) + cur.dst = read_op(fields[tonumber(i) .. "dst"]) + is[#is + 1] = cur + end + return is +end + +plg.update_formspec = function(pos, is) + if type(is) == "string" then -- serialized string + is = lcore.deserialize(is) + end + local meta = minetest.get_meta(pos) + local form = plg.to_formspec_string(is) + + local err = lcore.validate(is) + if err == nil then + meta:set_int("valid", 1) + meta:set_string("infotext", "FPGA (functional)") + else + meta:set_int("valid", 0) + meta:set_string("infotext", "FPGA") + local fmsg = minetest.colorize("#ff0000", minetest.formspec_escape(err.msg)) + form = form .. plg.red_box_around(err.i) .. + "label[0.25,8.25;The gate configuration is erroneous in the marked area:]".. + "label[0.25,8.5;" .. fmsg .. "]" + end + + meta:set_string("formspec", form) + + -- reset ports and run programmed logic + plg.setports(pos, false, false, false, false) + plg.update(pos) +end + +plg.red_box_around = function(i) + local x, y + if i > 7 then + x = 4.5 + y = 0.75 + (i - 8) + else + x = 0.25 + y = 0.75 + (i - 1) + end + return string.format("box[%f,%f;3.8,0.8;#ff0000]", x-0.1, y-0.05) +end + + +plg.update = function(pos) + local meta = minetest.get_meta(pos) + if meta:get_int("valid") ~= 1 then + return + elseif mesecon.do_overheat(pos) then + plg.setports(pos, false, false, false, false) + meta:set_int("valid", 0) + meta:set_string("infotext", "FPGA (overheated)") + return + end + + local is = lcore.deserialize(meta:get_string("instr")) + local A, B, C, D = plg.getports(pos) + A, B, C, D = lcore.interpret(is, A, B, C, D) + plg.setports(pos, A, B, C, D) +end + +plg.ports_changed = function(pos, rule, newstate) + if rule == nil then return end + local meta = minetest.get_meta(pos) + local states + + local s = meta:get_string("portstates") + if s == nil then + states = {false, false, false, false} + else + states = { + s:sub(1, 1) == "1", + s:sub(2, 2) == "1", + s:sub(3, 3) == "1", + s:sub(4, 4) == "1", + } + end + + -- trick to transform rules (see register_node) into port number + local portno = ({4, 1, nil, 3, 2})[3 + rule.x + 2*rule.z] + states[portno] = (newstate == "on") + + meta:set_string("portstates", + (states[1] and "1" or "0") .. (states[2] and "1" or "0") .. + (states[3] and "1" or "0") .. (states[4] and "1" or "0") + ) +end + +plg.getports = function(pos) -- gets merged states of INPUT & OUTPUT + local sin, sout + + local s = minetest.get_meta(pos):get_string("portstates") + if s == nil then + sin = {false, false, false, false} + else + sin = { + s:sub(1, 1) == "1", + s:sub(2, 2) == "1", + s:sub(3, 3) == "1", + s:sub(4, 4) == "1", + } + end + + local name = minetest.get_node(pos).name + assert(name:find("mesecons_fpga:fpga") == 1) + local off = #"mesecons_fpga:fpga" + sout = { + name:sub(off+4, off+4) == "1", + name:sub(off+3, off+3) == "1", + name:sub(off+2, off+2) == "1", + name:sub(off+1, off+1) == "1", + } + + return unpack({ + sin[1] or sout[1], + sin[2] or sout[2], + sin[3] or sout[3], + sin[4] or sout[4], + }) +end + +plg.setports = function(pos, A, B, C, D) -- sets states of OUTPUT + local base = "mesecons_fpga:fpga" + + local name = base + .. (D and "1" or "0") .. (C and "1" or "0") + .. (B and "1" or "0") .. (A and "1" or "0") + minetest.swap_node(pos, {name = name, param2 = minetest.get_node(pos).param2}) + + if A ~= nil then + local ru = plg.rules[base .. "0001"] + if A then mesecon.receptor_on(pos, ru) else mesecon.receptor_off(pos, ru) end + end + if B ~= nil then + local ru = plg.rules[base .. "0010"] + if B then mesecon.receptor_on(pos, ru) else mesecon.receptor_off(pos, ru) end + end + if C ~= nil then + local ru = plg.rules[base .. "0100"] + if C then mesecon.receptor_on(pos, ru) else mesecon.receptor_off(pos, ru) end + end + if D ~= nil then + local ru = plg.rules[base .. "1000"] + if D then mesecon.receptor_on(pos, ru) else mesecon.receptor_off(pos, ru) end + end +end + + +minetest.register_craft({ + output = "mesecons_fpga:fpga0000 2", + recipe = { + {'group:mesecon_conductor_craftable', 'group:mesecon_conductor_craftable'}, + {'mesecons_materials:silicon', 'mesecons_materials:silicon'}, + {'group:mesecon_conductor_craftable', 'group:mesecon_conductor_craftable'}, + } +}) diff --git a/mods/ITEMS/mesecons/mesecons_fpga/logic.lua b/mods/mesecons/mesecons_fpga/logic.lua similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/logic.lua rename to mods/mesecons/mesecons_fpga/logic.lua diff --git a/mods/ITEMS/mesecons/mesecons_fpga/textures/jeija_fpga_programmer.png b/mods/mesecons/mesecons_fpga/textures/jeija_fpga_programmer.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/textures/jeija_fpga_programmer.png rename to mods/mesecons/mesecons_fpga/textures/jeija_fpga_programmer.png diff --git a/mods/ITEMS/mesecons/mesecons_fpga/textures/jeija_fpga_sides.png b/mods/mesecons/mesecons_fpga/textures/jeija_fpga_sides.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/textures/jeija_fpga_sides.png rename to mods/mesecons/mesecons_fpga/textures/jeija_fpga_sides.png diff --git a/mods/ITEMS/mesecons/mesecons_fpga/textures/jeija_fpga_top.png b/mods/mesecons/mesecons_fpga/textures/jeija_fpga_top.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/textures/jeija_fpga_top.png rename to mods/mesecons/mesecons_fpga/textures/jeija_fpga_top.png diff --git a/mods/ITEMS/mesecons/mesecons_fpga/tool.lua b/mods/mesecons/mesecons_fpga/tool.lua similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/tool.lua rename to mods/mesecons/mesecons_fpga/tool.lua diff --git a/mods/ITEMS/mesecons/mesecons_gates/depends.txt b/mods/mesecons/mesecons_gates/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/depends.txt rename to mods/mesecons/mesecons_gates/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/and/description.html b/mods/mesecons/mesecons_gates/doc/and/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/and/description.html rename to mods/mesecons/mesecons_gates/doc/and/description.html diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/and/preview.png b/mods/mesecons/mesecons_gates/doc/and/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/and/preview.png rename to mods/mesecons/mesecons_gates/doc/and/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/and/recipe.png b/mods/mesecons/mesecons_gates/doc/and/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/and/recipe.png rename to mods/mesecons/mesecons_gates/doc/and/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/diode/description.html b/mods/mesecons/mesecons_gates/doc/diode/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/diode/description.html rename to mods/mesecons/mesecons_gates/doc/diode/description.html diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/diode/preview.png b/mods/mesecons/mesecons_gates/doc/diode/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/diode/preview.png rename to mods/mesecons/mesecons_gates/doc/diode/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/diode/recipe.png b/mods/mesecons/mesecons_gates/doc/diode/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/diode/recipe.png rename to mods/mesecons/mesecons_gates/doc/diode/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/nand/description.html b/mods/mesecons/mesecons_gates/doc/nand/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/nand/description.html rename to mods/mesecons/mesecons_gates/doc/nand/description.html diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/nand/preview.png b/mods/mesecons/mesecons_gates/doc/nand/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/nand/preview.png rename to mods/mesecons/mesecons_gates/doc/nand/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/nand/recipe.png b/mods/mesecons/mesecons_gates/doc/nand/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/nand/recipe.png rename to mods/mesecons/mesecons_gates/doc/nand/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/nor/description.html b/mods/mesecons/mesecons_gates/doc/nor/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/nor/description.html rename to mods/mesecons/mesecons_gates/doc/nor/description.html diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/nor/preview.png b/mods/mesecons/mesecons_gates/doc/nor/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/nor/preview.png rename to mods/mesecons/mesecons_gates/doc/nor/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/nor/recipe.png b/mods/mesecons/mesecons_gates/doc/nor/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/nor/recipe.png rename to mods/mesecons/mesecons_gates/doc/nor/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/not/description.html b/mods/mesecons/mesecons_gates/doc/not/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/not/description.html rename to mods/mesecons/mesecons_gates/doc/not/description.html diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/not/preview.png b/mods/mesecons/mesecons_gates/doc/not/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/not/preview.png rename to mods/mesecons/mesecons_gates/doc/not/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/not/recipe.png b/mods/mesecons/mesecons_gates/doc/not/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/not/recipe.png rename to mods/mesecons/mesecons_gates/doc/not/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/or/description.html b/mods/mesecons/mesecons_gates/doc/or/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/or/description.html rename to mods/mesecons/mesecons_gates/doc/or/description.html diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/or/preview.png b/mods/mesecons/mesecons_gates/doc/or/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/or/preview.png rename to mods/mesecons/mesecons_gates/doc/or/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/or/recipe.png b/mods/mesecons/mesecons_gates/doc/or/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/or/recipe.png rename to mods/mesecons/mesecons_gates/doc/or/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/xor/description.html b/mods/mesecons/mesecons_gates/doc/xor/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/xor/description.html rename to mods/mesecons/mesecons_gates/doc/xor/description.html diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/xor/preview.png b/mods/mesecons/mesecons_gates/doc/xor/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/xor/preview.png rename to mods/mesecons/mesecons_gates/doc/xor/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/doc/xor/recipe.png b/mods/mesecons/mesecons_gates/doc/xor/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/doc/xor/recipe.png rename to mods/mesecons/mesecons_gates/doc/xor/recipe.png diff --git a/mods/mesecons/mesecons_gates/init.lua b/mods/mesecons/mesecons_gates/init.lua new file mode 100755 index 0000000..421a7d4 --- /dev/null +++ b/mods/mesecons/mesecons_gates/init.lua @@ -0,0 +1,143 @@ +local nodebox = { + type = "fixed", + fixed = {{-8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }}, +} + +local function gate_rotate_rules(node, rules) + for rotations = 0, node.param2 - 1 do + rules = mesecon.rotate_rules_left(rules) + end + return rules +end + +local function gate_get_output_rules(node) + return gate_rotate_rules(node, {{x=1, y=0, z=0}}) +end + +local function gate_get_input_rules_oneinput(node) + return gate_rotate_rules(node, {{x=-1, y=0, z=0}}) +end + +local function gate_get_input_rules_twoinputs(node) + return gate_rotate_rules(node, {{x=0, y=0, z=1, name="input1"}, + {x=0, y=0, z=-1, name="input2"}}) +end + +local function set_gate(pos, node, state) + local gate = minetest.registered_nodes[node.name] + + if mesecon.do_overheat(pos) then + minetest.remove_node(pos) + mesecon.receptor_off(pos, gate_get_output_rules(node)) + minetest.add_item(pos, gate.drop) + elseif state then + minetest.swap_node(pos, {name = gate.onstate, param2=node.param2}) + mesecon.receptor_on(pos, gate_get_output_rules(node)) + else + minetest.swap_node(pos, {name = gate.offstate, param2=node.param2}) + mesecon.receptor_off(pos, gate_get_output_rules(node)) + end +end + +local function update_gate(pos, node, link, newstate) + local gate = minetest.registered_nodes[node.name] + + if gate.inputnumber == 1 then + set_gate(pos, node, gate.assess(newstate == "on")) + elseif gate.inputnumber == 2 then + local meta = minetest.get_meta(pos) + meta:set_int(link.name, newstate == "on" and 1 or 0) + + local val1 = meta:get_int("input1") == 1 + local val2 = meta:get_int("input2") == 1 + set_gate(pos, node, gate.assess(val1, val2)) + end +end + +local function register_gate(name, inputnumber, assess, recipe, description) + local get_inputrules = inputnumber == 2 and gate_get_input_rules_twoinputs or + gate_get_input_rules_oneinput + description = "Logic Gate: "..name + + local basename = "mesecons_gates:"..name + mesecon.register_node(basename, { + description = description, + inventory_image = "jeija_gate_off.png^jeija_gate_"..name..".png", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + drawtype = "nodebox", + drop = basename.."_off", + selection_box = nodebox, + node_box = nodebox, + walkable = true, + sounds = default.node_sound_stone_defaults(), + assess = assess, + onstate = basename.."_on", + offstate = basename.."_off", + inputnumber = inputnumber, + after_dig_node = mesecon.do_cooldown, + },{ + tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^".. + "jeija_gate_"..name..".png"}, + groups = {dig_immediate = 2, overheat = 1}, + mesecons = { receptor = { + state = "off", + rules = gate_get_output_rules + }, effector = { + rules = get_inputrules, + action_change = update_gate + }} + },{ + tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_on.png^".. + "jeija_gate_"..name..".png"}, + groups = {dig_immediate = 2, not_in_creative_inventory = 1, overheat = 1}, + mesecons = { receptor = { + state = "on", + rules = gate_get_output_rules + }, effector = { + rules = get_inputrules, + action_change = update_gate + }} + }) + + minetest.register_craft({output = basename.."_off", recipe = recipe}) +end + +register_gate("diode", 1, function (input) return input end, + {{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons_torch:mesecon_torch_on"}}, + "Diode") + +register_gate("not", 1, function (input) return not input end, + {{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons:mesecon"}}, + "NOT Gate") + +register_gate("and", 2, function (val1, val2) return val1 and val2 end, + {{"mesecons:mesecon", "", ""}, + {"", "mesecons_materials:silicon", "mesecons:mesecon"}, + {"mesecons:mesecon", "", ""}}, + "AND Gate") + +register_gate("nand", 2, function (val1, val2) return not (val1 and val2) end, + {{"mesecons:mesecon", "", ""}, + {"", "mesecons_materials:silicon", "mesecons_torch:mesecon_torch_on"}, + {"mesecons:mesecon", "", ""}}, + "NAND Gate") + +register_gate("xor", 2, function (val1, val2) return (val1 or val2) and not (val1 and val2) end, + {{"mesecons:mesecon", "", ""}, + {"", "mesecons_materials:silicon", "mesecons_materials:silicon"}, + {"mesecons:mesecon", "", ""}}, + "XOR Gate") + +register_gate("nor", 2, function (val1, val2) return not (val1 or val2) end, + {{"mesecons:mesecon", "", ""}, + {"", "mesecons:mesecon", "mesecons_torch:mesecon_torch_on"}, + {"mesecons:mesecon", "", ""}}, + "NOR Gate") + +register_gate("or", 2, function (val1, val2) return (val1 or val2) end, + {{"mesecons:mesecon", "", ""}, + {"", "mesecons:mesecon", "mesecons:mesecon"}, + {"mesecons:mesecon", "", ""}}, + "OR Gate") diff --git a/mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_and.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_and.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_and.png rename to mods/mesecons/mesecons_gates/textures/jeija_gate_and.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_diode.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_diode.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_diode.png rename to mods/mesecons/mesecons_gates/textures/jeija_gate_diode.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_nand.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_nand.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_nand.png rename to mods/mesecons/mesecons_gates/textures/jeija_gate_nand.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_nor.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_nor.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_nor.png rename to mods/mesecons/mesecons_gates/textures/jeija_gate_nor.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_not.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_not.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_not.png rename to mods/mesecons/mesecons_gates/textures/jeija_gate_not.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_off.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_off.png rename to mods/mesecons/mesecons_gates/textures/jeija_gate_off.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_on.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_on.png rename to mods/mesecons/mesecons_gates/textures/jeija_gate_on.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_or.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_or.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_or.png rename to mods/mesecons/mesecons_gates/textures/jeija_gate_or.png diff --git a/mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_xor.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_xor.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_gates/textures/jeija_gate_xor.png rename to mods/mesecons/mesecons_gates/textures/jeija_gate_xor.png diff --git a/mods/ITEMS/mesecons/mesecons_fpga/depends.txt b/mods/mesecons/mesecons_hydroturbine/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_fpga/depends.txt rename to mods/mesecons/mesecons_hydroturbine/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/doc/waterturbine/description.html b/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/doc/waterturbine/description.html rename to mods/mesecons/mesecons_hydroturbine/doc/waterturbine/description.html diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/doc/waterturbine/preview.png b/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/doc/waterturbine/preview.png rename to mods/mesecons/mesecons_hydroturbine/doc/waterturbine/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/doc/waterturbine/recipe.png b/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/doc/waterturbine/recipe.png rename to mods/mesecons/mesecons_hydroturbine/doc/waterturbine/recipe.png diff --git a/mods/mesecons/mesecons_hydroturbine/init.lua b/mods/mesecons/mesecons_hydroturbine/init.lua new file mode 100755 index 0000000..395b8f6 --- /dev/null +++ b/mods/mesecons/mesecons_hydroturbine/init.lua @@ -0,0 +1,103 @@ +-- HYDRO_TURBINE +-- Water turbine: +-- Active if flowing >water< above it +-- (does not work with other liquids) + +minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", { + drawtype = "mesh", + mesh = "jeija_hydro_turbine_off.obj", + tiles = { + "jeija_hydro_turbine_sides_off.png", + "jeija_hydro_turbine_top_bottom.png", + "jeija_hydro_turbine_turbine_top_bottom_off.png", + "jeija_hydro_turbine_turbine_misc_off.png" + }, + inventory_image = "jeija_hydro_turbine_inv.png", + is_ground_content = false, + wield_scale = {x=0.75, y=0.75, z=0.75}, + groups = {dig_immediate=2}, + description="Water Turbine", + paramtype = "light", + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }, + }, + sounds = default.node_sound_stone_defaults(), + mesecons = {receptor = { + state = mesecon.state.off + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", { + drawtype = "mesh", + is_ground_content = false, + mesh = "jeija_hydro_turbine_on.obj", + wield_scale = {x=0.75, y=0.75, z=0.75}, + tiles = { + "jeija_hydro_turbine_sides_on.png", + "jeija_hydro_turbine_top_bottom.png", + { name = "jeija_hydro_turbine_turbine_top_bottom_on.png", + animation = {type = "vertical_frames", aspect_w = 128, aspect_h = 16, length = 1.6} }, + { name = "jeija_hydro_turbine_turbine_misc_on.png", + animation = {type = "vertical_frames", aspect_w = 256, aspect_h = 32, length = 0.4} } + }, + inventory_image = "jeija_hydro_turbine_inv.png", + drop = "mesecons_hydroturbine:hydro_turbine_off 1", + groups = {dig_immediate=2,not_in_creative_inventory=1}, + description="Water Turbine", + paramtype = "light", + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }, + }, + sounds = default.node_sound_stone_defaults(), + mesecons = {receptor = { + state = mesecon.state.on + }}, + on_blast = mesecon.on_blastnode, +}) + + +local function is_flowing_water(pos) + local name = minetest.get_node(pos).name + local is_water = minetest.get_item_group(name, "water") > 0 + local is_flowing = minetest.registered_items[name].liquidtype == "flowing" + return (is_water and is_flowing) +end + +minetest.register_abm({ +nodenames = {"mesecons_hydroturbine:hydro_turbine_off"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local waterpos={x=pos.x, y=pos.y+1, z=pos.z} + if is_flowing_water(waterpos) then + minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_on"}) + mesecon.receptor_on(pos) + end + end, +}) + +minetest.register_abm({ +nodenames = {"mesecons_hydroturbine:hydro_turbine_on"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local waterpos={x=pos.x, y=pos.y+1, z=pos.z} + if not is_flowing_water(waterpos) then + minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_off"}) + mesecon.receptor_off(pos) + end + end, +}) + +minetest.register_craft({ + output = "mesecons_hydroturbine:hydro_turbine_off 2", + recipe = { + {"","default:stick", ""}, + {"default:stick", "default:steel_ingot", "default:stick"}, + {"","default:stick", ""}, + } +}) + diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine_off.obj b/mods/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine_off.obj similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine_off.obj rename to mods/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine_off.obj diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine_on.obj b/mods/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine_on.obj similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine_on.obj rename to mods/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine_on.obj diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_inv.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_inv.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_inv.png rename to mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_inv.png diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_off.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_off.png rename to mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_off.png diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_on.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_on.png rename to mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_on.png diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_top_bottom.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_top_bottom.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_top_bottom.png rename to mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_top_bottom.png diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc_off.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc_off.png rename to mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc_off.png diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc_on.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc_on.png rename to mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc_on.png diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom_off.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom_off.png rename to mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom_off.png diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom_on.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom_on.png rename to mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom_on.png diff --git a/mods/mesecons/mesecons_insulated/depends.txt b/mods/mesecons/mesecons_insulated/depends.txt new file mode 100755 index 0000000..a0ba1ef --- /dev/null +++ b/mods/mesecons/mesecons_insulated/depends.txt @@ -0,0 +1,2 @@ +mesecons +screwdriver? diff --git a/mods/ITEMS/mesecons/mesecons_insulated/doc/insulated/description.html b/mods/mesecons/mesecons_insulated/doc/insulated/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/doc/insulated/description.html rename to mods/mesecons/mesecons_insulated/doc/insulated/description.html diff --git a/mods/ITEMS/mesecons/mesecons_insulated/doc/insulated/preview.png b/mods/mesecons/mesecons_insulated/doc/insulated/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/doc/insulated/preview.png rename to mods/mesecons/mesecons_insulated/doc/insulated/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_insulated/doc/insulated/recipe.png b/mods/mesecons/mesecons_insulated/doc/insulated/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/doc/insulated/recipe.png rename to mods/mesecons/mesecons_insulated/doc/insulated/recipe.png diff --git a/mods/mesecons/mesecons_insulated/init.lua b/mods/mesecons/mesecons_insulated/init.lua new file mode 100755 index 0000000..92ff639 --- /dev/null +++ b/mods/mesecons/mesecons_insulated/init.lua @@ -0,0 +1,88 @@ +local screwdriver_exists = minetest.global_exists("screwdriver") + +local function insulated_wire_get_rules(node) + local rules = {{x = 1, y = 0, z = 0}, + {x =-1, y = 0, z = 0}} + if node.param2 == 1 or node.param2 == 3 then + return mesecon.rotate_rules_right(rules) + end + return rules +end + +minetest.register_node("mesecons_insulated:insulated_on", { + drawtype = "nodebox", + description = "Straight Insulated Mesecon", + tiles = { + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_ends_on.png", + "jeija_insulated_wire_ends_on.png", + "jeija_insulated_wire_sides_on.png", + "jeija_insulated_wire_sides_on.png" + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + walkable = false, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = { -16/32-0.001, -18/32, -7/32, 16/32+0.001, -12/32, 7/32 } + }, + node_box = { + type = "fixed", + fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 } + }, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, + drop = "mesecons_insulated:insulated_off", + mesecons = {conductor = { + state = mesecon.state.on, + offstate = "mesecons_insulated:insulated_off", + rules = insulated_wire_get_rules + }}, + on_blast = mesecon.on_blastnode, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, +}) + +minetest.register_node("mesecons_insulated:insulated_off", { + drawtype = "nodebox", + description = "Straight Insulated Mesecon", + tiles = { + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_ends_off.png", + "jeija_insulated_wire_ends_off.png", + "jeija_insulated_wire_sides_off.png", + "jeija_insulated_wire_sides_off.png" + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + walkable = false, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = { -16/32-0.001, -18/32, -7/32, 16/32+0.001, -12/32, 7/32 } + }, + node_box = { + type = "fixed", + fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 } + }, + groups = {dig_immediate = 3}, + mesecons = {conductor = { + state = mesecon.state.off, + onstate = "mesecons_insulated:insulated_on", + rules = insulated_wire_get_rules + }}, + on_blast = mesecon.on_blastnode, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, +}) + +minetest.register_craft({ + output = "mesecons_insulated:insulated_off 3", + recipe = { + {"mesecons_materials:fiber", "mesecons_materials:fiber", "mesecons_materials:fiber"}, + {"mesecons:wire_00000000_off", "mesecons:wire_00000000_off", "mesecons:wire_00000000_off"}, + {"mesecons_materials:fiber", "mesecons_materials:fiber", "mesecons_materials:fiber"}, + } +}) diff --git a/mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_off.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_off.png rename to mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_off.png diff --git a/mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_on.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_on.png rename to mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_on.png diff --git a/mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_off.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_off.png rename to mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_off.png diff --git a/mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_on.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_on.png rename to mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_on.png diff --git a/mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_off.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_off.png rename to mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_off.png diff --git a/mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_on.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_on.png rename to mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_on.png diff --git a/mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_off.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_off.png rename to mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_off.png diff --git a/mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_on.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_on.png rename to mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_on.png diff --git a/mods/ITEMS/mesecons/mesecons_hydroturbine/depends.txt b/mods/mesecons/mesecons_lamp/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_hydroturbine/depends.txt rename to mods/mesecons/mesecons_lamp/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_lamp/doc/lamp/description.html b/mods/mesecons/mesecons_lamp/doc/lamp/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lamp/doc/lamp/description.html rename to mods/mesecons/mesecons_lamp/doc/lamp/description.html diff --git a/mods/ITEMS/mesecons/mesecons_lamp/doc/lamp/preview.png b/mods/mesecons/mesecons_lamp/doc/lamp/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lamp/doc/lamp/preview.png rename to mods/mesecons/mesecons_lamp/doc/lamp/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_lamp/doc/lamp/recipe.png b/mods/mesecons/mesecons_lamp/doc/lamp/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lamp/doc/lamp/recipe.png rename to mods/mesecons/mesecons_lamp/doc/lamp/recipe.png diff --git a/mods/mesecons/mesecons_lamp/init.lua b/mods/mesecons/mesecons_lamp/init.lua new file mode 100755 index 0000000..14a3659 --- /dev/null +++ b/mods/mesecons/mesecons_lamp/init.lua @@ -0,0 +1,67 @@ +-- MESELAMPS +-- A lamp is "is an electrical device used to create artificial light" (wikipedia) +-- guess what? + +local mesecon_lamp_box = { + type = "wallmounted", + wall_top = {-0.3125,0.375,-0.3125,0.3125,0.5,0.3125}, + wall_bottom = {-0.3125,-0.5,-0.3125,0.3125,-0.375,0.3125}, + wall_side = {-0.375,-0.3125,-0.3125,-0.5,0.3125,0.3125}, +} + +minetest.register_node("mesecons_lamp:lamp_on", { + drawtype = "nodebox", + tiles = {"jeija_meselamp_on.png"}, + paramtype = "light", + paramtype2 = "wallmounted", + is_ground_content = false, + legacy_wallmounted = true, + sunlight_propagates = true, + walkable = true, + light_source = minetest.LIGHT_MAX, + node_box = mesecon_lamp_box, + selection_box = mesecon_lamp_box, + groups = {dig_immediate = 3,not_in_creative_inventory = 1, mesecon_effector_on = 1}, + drop = "mesecons_lamp:lamp_off 1", + sounds = default.node_sound_glass_defaults(), + mesecons = {effector = { + action_off = function (pos, node) + minetest.swap_node(pos, {name = "mesecons_lamp:lamp_off", param2 = node.param2}) + end, + rules = mesecon.rules.wallmounted_get, + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_lamp:lamp_off", { + drawtype = "nodebox", + tiles = {"jeija_meselamp_off.png"}, + inventory_image = "jeija_meselamp.png", + wield_image = "jeija_meselamp.png", + paramtype = "light", + paramtype2 = "wallmounted", + is_ground_content = false, + sunlight_propagates = true, + walkable = true, + node_box = mesecon_lamp_box, + selection_box = mesecon_lamp_box, + groups = {dig_immediate=3, mesecon_receptor_off = 1, mesecon_effector_off = 1}, + description = "Mesecon Lamp", + sounds = default.node_sound_glass_defaults(), + mesecons = {effector = { + action_on = function (pos, node) + minetest.swap_node(pos, {name = "mesecons_lamp:lamp_on", param2 = node.param2}) + end, + rules = mesecon.rules.wallmounted_get, + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_craft({ + output = "mesecons_lamp:lamp_off 1", + recipe = { + {"", "default:glass", ""}, + {"group:mesecon_conductor_craftable", "default:steel_ingot", "group:mesecon_conductor_craftable"}, + {"", "default:glass", ""}, + } +}) diff --git a/mods/ITEMS/mesecons/mesecons_lamp/textures/jeija_meselamp.png b/mods/mesecons/mesecons_lamp/textures/jeija_meselamp.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lamp/textures/jeija_meselamp.png rename to mods/mesecons/mesecons_lamp/textures/jeija_meselamp.png diff --git a/mods/ITEMS/mesecons/mesecons_lamp/textures/jeija_meselamp_off.png b/mods/mesecons/mesecons_lamp/textures/jeija_meselamp_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lamp/textures/jeija_meselamp_off.png rename to mods/mesecons/mesecons_lamp/textures/jeija_meselamp_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lamp/textures/jeija_meselamp_on.png b/mods/mesecons/mesecons_lamp/textures/jeija_meselamp_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lamp/textures/jeija_meselamp_on.png rename to mods/mesecons/mesecons_lamp/textures/jeija_meselamp_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/depends.txt b/mods/mesecons/mesecons_lightstone/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/depends.txt rename to mods/mesecons/mesecons_lightstone/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_blue/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_blue/description.html rename to mods/mesecons/mesecons_lightstone/doc/lightstone_blue/description.html diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_blue/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_blue/preview.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_blue/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_blue/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_blue/recipe.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_blue/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/description.html rename to mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/description.html diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/preview.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/recipe.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_green/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_green/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_green/description.html rename to mods/mesecons/mesecons_lightstone/doc/lightstone_green/description.html diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_green/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_green/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_green/preview.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_green/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_green/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_green/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_green/recipe.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_green/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/description.html rename to mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/description.html diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/preview.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/recipe.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_red/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_red/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_red/description.html rename to mods/mesecons/mesecons_lightstone/doc/lightstone_red/description.html diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_red/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_red/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_red/preview.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_red/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_red/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_red/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_red/recipe.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_red/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_yellow/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_yellow/description.html rename to mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/description.html diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_yellow/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_yellow/preview.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_yellow/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/doc/lightstone_yellow/recipe.png rename to mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/recipe.png diff --git a/mods/mesecons/mesecons_lightstone/init.lua b/mods/mesecons/mesecons_lightstone/init.lua new file mode 100755 index 0000000..4e56ba2 --- /dev/null +++ b/mods/mesecons/mesecons_lightstone/init.lua @@ -0,0 +1,73 @@ +local lightstone_rules = { + {x=0, y=0, z=-1}, + {x=1, y=0, z=0}, + {x=-1, y=0, z=0}, + {x=0, y=0, z=1}, + {x=1, y=1, z=0}, + {x=1, y=-1, z=0}, + {x=-1, y=1, z=0}, + {x=-1, y=-1, z=0}, + {x=0, y=1, z=1}, + {x=0, y=-1, z=1}, + {x=0, y=1, z=-1}, + {x=0, y=-1, z=-1}, + {x=0, y=-1, z=0}, +} + +function mesecon.lightstone_add(name, base_item, texture_off, texture_on, desc) + if not desc then + desc = name .. " Lightstone" + end + minetest.register_node("mesecons_lightstone:lightstone_" .. name .. "_off", { + tiles = {texture_off}, + is_ground_content = false, + groups = {cracky = 2, mesecon_effector_off = 1, mesecon = 2}, + description = desc, + sounds = default.node_sound_stone_defaults(), + mesecons = {effector = { + rules = lightstone_rules, + action_on = function (pos, node) + minetest.swap_node(pos, {name = "mesecons_lightstone:lightstone_" .. name .. "_on", param2 = node.param2}) + end, + }}, + on_blast = mesecon.on_blastnode, + }) + minetest.register_node("mesecons_lightstone:lightstone_" .. name .. "_on", { + tiles = {texture_on}, + is_ground_content = false, + groups = {cracky = 2, not_in_creative_inventory = 1, mesecon = 2}, + drop = "mesecons_lightstone:lightstone_" .. name .. "_off", + light_source = minetest.LIGHT_MAX - 2, + sounds = default.node_sound_stone_defaults(), + mesecons = {effector = { + rules = lightstone_rules, + action_off = function (pos, node) + minetest.swap_node(pos, {name = "mesecons_lightstone:lightstone_" .. name .. "_off", param2 = node.param2}) + end, + }}, + on_blast = mesecon.on_blastnode, + }) + + minetest.register_craft({ + output = "mesecons_lightstone:lightstone_" .. name .. "_off", + recipe = { + {"",base_item,""}, + {base_item,"default:torch",base_item}, + {"","group:mesecon_conductor_craftable",""} + } + }) +end + + +mesecon.lightstone_add("red", "dye:red", "jeija_lightstone_red_off.png", "jeija_lightstone_red_on.png", "Red Lightstone") +mesecon.lightstone_add("green", "dye:green", "jeija_lightstone_green_off.png", "jeija_lightstone_green_on.png", "Green Lightstone") +mesecon.lightstone_add("blue", "dye:blue", "jeija_lightstone_blue_off.png", "jeija_lightstone_blue_on.png", "Blue Lightstone") +mesecon.lightstone_add("gray", "dye:grey", "jeija_lightstone_gray_off.png", "jeija_lightstone_gray_on.png", "Grey Lightstone") +mesecon.lightstone_add("darkgray", "dye:dark_grey", "jeija_lightstone_darkgray_off.png", "jeija_lightstone_darkgray_on.png", "Dark Grey Lightstone") +mesecon.lightstone_add("yellow", "dye:yellow", "jeija_lightstone_yellow_off.png", "jeija_lightstone_yellow_on.png", "Yellow Lightstone") +mesecon.lightstone_add("orange", "dye:orange", "jeija_lightstone_orange_off.png", "jeija_lightstone_orange_on.png", "Orange Lightstone") +mesecon.lightstone_add("white", "dye:white", "jeija_lightstone_white_off.png", "jeija_lightstone_white_on.png", "White Lightstone") +mesecon.lightstone_add("pink", "dye:pink", "jeija_lightstone_pink_off.png", "jeija_lightstone_pink_on.png", "Pink Lightstone") +mesecon.lightstone_add("magenta", "dye:magenta", "jeija_lightstone_magenta_off.png", "jeija_lightstone_magenta_on.png", "Magenta Lightstone") +mesecon.lightstone_add("cyan", "dye:cyan", "jeija_lightstone_cyan_off.png", "jeija_lightstone_cyan_on.png", "Cyan Lightstone") +mesecon.lightstone_add("violet", "dye:violet", "jeija_lightstone_violet_off.png", "jeija_lightstone_violet_on.png", "Violet Lightstone") diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_cyan_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_cyan_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_cyan_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_cyan_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_cyan_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_cyan_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_cyan_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_cyan_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_magenta_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_magenta_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_magenta_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_magenta_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_magenta_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_magenta_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_magenta_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_magenta_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_orange_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_orange_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_orange_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_orange_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_orange_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_orange_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_orange_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_orange_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_pink_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_pink_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_pink_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_pink_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_pink_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_pink_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_pink_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_pink_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_violet_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_violet_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_violet_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_violet_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_violet_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_violet_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_violet_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_violet_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_white_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_white_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_white_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_white_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_white_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_white_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_white_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_white_on.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_off.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_off.png diff --git a/mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_on.png rename to mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_on.png diff --git a/mods/ITEMS/mesecons/mesecons_insulated/depends.txt b/mods/mesecons/mesecons_luacontroller/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_insulated/depends.txt rename to mods/mesecons/mesecons_luacontroller/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/doc/luacontroller/description.html b/mods/mesecons/mesecons_luacontroller/doc/luacontroller/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/doc/luacontroller/description.html rename to mods/mesecons/mesecons_luacontroller/doc/luacontroller/description.html diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/doc/luacontroller/preview.png b/mods/mesecons/mesecons_luacontroller/doc/luacontroller/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/doc/luacontroller/preview.png rename to mods/mesecons/mesecons_luacontroller/doc/luacontroller/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/doc/luacontroller/recipe.png b/mods/mesecons/mesecons_luacontroller/doc/luacontroller/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/doc/luacontroller/recipe.png rename to mods/mesecons/mesecons_luacontroller/doc/luacontroller/recipe.png diff --git a/mods/mesecons/mesecons_luacontroller/init.lua b/mods/mesecons/mesecons_luacontroller/init.lua new file mode 100755 index 0000000..325e16f --- /dev/null +++ b/mods/mesecons/mesecons_luacontroller/init.lua @@ -0,0 +1,876 @@ +-- ______ +-- | +-- | +-- | __ ___ _ __ _ _ +-- | | | | | |\ | | |_| | | | | |_ |_| +-- |___| |______ |__| | \| | | \ |__| |_ |_ |_ |\ +-- | +-- | +-- + +-- Reference +-- ports = get_real_port_states(pos): gets if inputs are powered from outside +-- newport = merge_port_states(state1, state2): just does result = state1 or state2 for every port +-- set_port(pos, rule, state): activates/deactivates the mesecons according to the port states +-- set_port_states(pos, ports): Applies new port states to a Luacontroller at pos +-- run_inner(pos, code, event): runs code on the controller at pos and event +-- reset_formspec(pos, code, errmsg): installs new code and prints error messages, without resetting LCID +-- reset_meta(pos, code, errmsg): performs a software-reset, installs new code and prints error message +-- run(pos, event): a wrapper for run_inner which gets code & handles errors via reset_meta +-- resetn(pos): performs a hardware reset, turns off all ports +-- +-- The Sandbox +-- The whole code of the controller runs in a sandbox, +-- a very restricted environment. +-- Actually the only way to damage the server is to +-- use too much memory from the sandbox. +-- You can add more functions to the environment +-- (see where local env is defined) +-- Something nice to play is is appending minetest.env to it. + +local BASENAME = "mesecons_luacontroller:luacontroller" + +local rules = { + a = {x = -1, y = 0, z = 0, name="A"}, + b = {x = 0, y = 0, z = 1, name="B"}, + c = {x = 1, y = 0, z = 0, name="C"}, + d = {x = 0, y = 0, z = -1, name="D"}, +} + + +------------------ +-- Action stuff -- +------------------ +-- These helpers are required to set the port states of the luacontroller + +local function update_real_port_states(pos, rule_name, new_state) + local meta = minetest.get_meta(pos) + if rule_name == nil then + meta:set_int("real_portstates", 1) + return + end + local n = meta:get_int("real_portstates") - 1 + local L = {} + for i = 1, 4 do + L[i] = n % 2 + n = math.floor(n / 2) + end + -- (0,-1) (-1,0) (1,0) (0,1) + local pos_to_side = { 4, 1, nil, 3, 2 } + if rule_name.x == nil then + for _, rname in ipairs(rule_name) do + local port = pos_to_side[rname.x + (2 * rname.z) + 3] + L[port] = (newstate == "on") and 1 or 0 + end + else + local port = pos_to_side[rule_name.x + (2 * rule_name.z) + 3] + L[port] = (new_state == "on") and 1 or 0 + end + meta:set_int("real_portstates", + 1 + + 1 * L[1] + + 2 * L[2] + + 4 * L[3] + + 8 * L[4]) +end + + +local port_names = {"a", "b", "c", "d"} + +local function get_real_port_states(pos) + -- Determine if ports are powered (by itself or from outside) + local meta = minetest.get_meta(pos) + local L = {} + local n = meta:get_int("real_portstates") - 1 + for _, name in ipairs(port_names) do + L[name] = ((n % 2) == 1) + n = math.floor(n / 2) + end + return L +end + + +local function merge_port_states(ports, vports) + return { + a = ports.a or vports.a, + b = ports.b or vports.b, + c = ports.c or vports.c, + d = ports.d or vports.d, + } +end + +local function generate_name(ports) + local d = ports.d and 1 or 0 + local c = ports.c and 1 or 0 + local b = ports.b and 1 or 0 + local a = ports.a and 1 or 0 + return BASENAME..d..c..b..a +end + + +local function set_port(pos, rule, state) + if state then + mesecon.receptor_on(pos, {rule}) + else + mesecon.receptor_off(pos, {rule}) + end +end + + +local function clean_port_states(ports) + ports.a = ports.a and true or false + ports.b = ports.b and true or false + ports.c = ports.c and true or false + ports.d = ports.d and true or false +end + + +local function set_port_states(pos, ports) + local node = minetest.get_node(pos) + local name = node.name + clean_port_states(ports) + local vports = minetest.registered_nodes[name].virtual_portstates + local new_name = generate_name(ports) + + if name ~= new_name and vports then + -- Problem: + -- We need to place the new node first so that when turning + -- off some port, it won't stay on because the rules indicate + -- there is an onstate output port there. + -- When turning the output off then, it will however cause feedback + -- so that the luacontroller will receive an "off" event by turning + -- its output off. + -- Solution / Workaround: + -- Remember which output was turned off and ignore next "off" event. + local meta = minetest.get_meta(pos) + local ign = minetest.deserialize(meta:get_string("ignore_offevents"), true) or {} + if ports.a and not vports.a and not mesecon.is_powered(pos, rules.a) then ign.A = true end + if ports.b and not vports.b and not mesecon.is_powered(pos, rules.b) then ign.B = true end + if ports.c and not vports.c and not mesecon.is_powered(pos, rules.c) then ign.C = true end + if ports.d and not vports.d and not mesecon.is_powered(pos, rules.d) then ign.D = true end + meta:set_string("ignore_offevents", minetest.serialize(ign)) + + minetest.swap_node(pos, {name = new_name, param2 = node.param2}) + + if ports.a ~= vports.a then set_port(pos, rules.a, ports.a) end + if ports.b ~= vports.b then set_port(pos, rules.b, ports.b) end + if ports.c ~= vports.c then set_port(pos, rules.c, ports.c) end + if ports.d ~= vports.d then set_port(pos, rules.d, ports.d) end + end +end + + +----------------- +-- Overheating -- +----------------- +local function burn_controller(pos) + local node = minetest.get_node(pos) + node.name = BASENAME.."_burnt" + minetest.swap_node(pos, node) + minetest.get_meta(pos):set_string("lc_memory", ""); + -- Wait for pending operations + minetest.after(0.2, mesecon.receptor_off, pos, mesecon.rules.flat) +end + +local function overheat(pos, meta) + if mesecon.do_overheat(pos) then -- If too hot + burn_controller(pos) + return true + end +end + +------------------------ +-- Ignored off events -- +------------------------ + +local function ignore_event(event, meta) + if event.type ~= "off" then return false end + local ignore_offevents = minetest.deserialize(meta:get_string("ignore_offevents"), true) or {} + if ignore_offevents[event.pin.name] then + ignore_offevents[event.pin.name] = nil + meta:set_string("ignore_offevents", minetest.serialize(ignore_offevents)) + return true + end +end + +------------------------- +-- Parsing and running -- +------------------------- + +local function safe_print(param) + print(dump(param)) +end + +local function safe_date() + return(os.date("*t",os.time())) +end + +-- string.rep(str, n) with a high value for n can be used to DoS +-- the server. Therefore, limit max. length of generated string. +local function safe_string_rep(str, n) + if #str * n > mesecon.setting("luacontroller_string_rep_max", 64000) then + debug.sethook() -- Clear hook + error("string.rep: string length overflow", 2) + end + + return string.rep(str, n) +end + +-- string.find with a pattern can be used to DoS the server. +-- Therefore, limit string.find to patternless matching. +local function safe_string_find(...) + if (select(4, ...)) ~= true then + debug.sethook() -- Clear hook + error("string.find: 'plain' (fourth parameter) must always be true in a Luacontroller") + end + + return string.find(...) +end + +local function remove_functions(x) + local tp = type(x) + if tp == "function" then + return nil + end + + -- Make sure to not serialize the same table multiple times, otherwise + -- writing mem.test = mem in the Luacontroller will lead to infinite recursion + local seen = {} + + local function rfuncs(x) + if x == nil then return end + if seen[x] then return end + seen[x] = true + if type(x) ~= "table" then return end + + for key, value in pairs(x) do + if type(key) == "function" or type(value) == "function" then + x[key] = nil + else + if type(key) == "table" then + rfuncs(key) + end + if type(value) == "table" then + rfuncs(value) + end + end + end + end + + rfuncs(x) + + return x +end + +-- itbl: Flat table of functions to run after sandbox cleanup, used to prevent various security hazards +local function get_interrupt(pos, itbl, send_warning) + -- iid = interrupt id + local function interrupt(time, iid) + -- NOTE: This runs within string metatable sandbox, so don't *rely* on anything of the form (""):y + -- Hence the values get moved out. Should take less time than original, so totally compatible + if type(time) ~= "number" then return end + table.insert(itbl, function () + -- Outside string metatable sandbox, can safely run this now + local luac_id = minetest.get_meta(pos):get_int("luac_id") + -- Check if IID is dodgy, so you can't use interrupts to store an infinite amount of data. + -- Note that this is safe from alter-after-free because this code gets run after the sandbox has ended. + -- This runs outside of the timer and *shouldn't* harm perf. unless dodgy data is being sent in the first place + iid = remove_functions(iid) + local msg_ser = minetest.serialize(iid) + if #msg_ser <= mesecon.setting("luacontroller_interruptid_maxlen", 256) then + mesecon.queue:add_action(pos, "lc_interrupt", {luac_id, iid}, time, iid, 1) + else + send_warning("An interrupt ID was too large!") + end + end) + end + return interrupt +end + + +-- Given a message object passed to digiline_send, clean it up into a form +-- which is safe to transmit over the network and compute its "cost" (a very +-- rough estimate of its memory usage). +-- +-- The cleaning comprises the following: +-- 1. Functions (and userdata, though user scripts ought not to get hold of +-- those in the first place) are removed, because they break the model of +-- Digilines as a network that carries basic data, and they could exfiltrate +-- references to mutable objects from one Luacontroller to another, allowing +-- inappropriate high-bandwidth, no-wires communication. +-- 2. Tables are duplicated because, being mutable, they could otherwise be +-- modified after the send is complete in order to change what data arrives +-- at the recipient, perhaps in violation of the previous cleaning rule or +-- in violation of the message size limit. +-- +-- The cost indication is only approximate; it’s not a perfect measurement of +-- the number of bytes of memory used by the message object. +-- +-- Parameters: +-- msg -- the message to clean +-- back_references -- for internal use only; do not provide +-- +-- Returns: +-- 1. The cleaned object. +-- 2. The approximate cost of the object. +local function clean_and_weigh_digiline_message(msg, back_references) + local t = type(msg) + if t == "string" then + -- Strings are immutable so can be passed by reference, and cost their + -- length plus the size of the Lua object header (24 bytes on a 64-bit + -- platform) plus one byte for the NUL terminator. + return msg, #msg + 25 + elseif t == "number" then + -- Numbers are passed by value so need not be touched, and cost 8 bytes + -- as all numbers in Lua are doubles. + return msg, 8 + elseif t == "boolean" then + -- Booleans are passed by value so need not be touched, and cost 1 + -- byte. + return msg, 1 + elseif t == "table" then + -- Tables are duplicated. Check if this table has been seen before + -- (self-referential or shared table); if so, reuse the cleaned value + -- of the previous occurrence, maintaining table topology and avoiding + -- infinite recursion, and charge zero bytes for this as the object has + -- already been counted. + back_references = back_references or {} + local bref = back_references[msg] + if bref then + return bref, 0 + end + -- Construct a new table by cleaning all the keys and values and adding + -- up their costs, plus 8 bytes as a rough estimate of table overhead. + local cost = 8 + local ret = {} + back_references[msg] = ret + for k, v in pairs(msg) do + local k_cost, v_cost + k, k_cost = clean_and_weigh_digiline_message(k, back_references) + v, v_cost = clean_and_weigh_digiline_message(v, back_references) + if k ~= nil and v ~= nil then + -- Only include an element if its key and value are of legal + -- types. + ret[k] = v + end + -- If we only counted the cost of a table element when we actually + -- used it, we would be vulnerable to the following attack: + -- 1. Construct a huge table (too large to pass the cost limit). + -- 2. Insert it somewhere in a table, with a function as a key. + -- 3. Insert it somewhere in another table, with a number as a key. + -- 4. The first occurrence doesn’t pay the cost because functions + -- are stripped and therefore the element is dropped. + -- 5. The second occurrence doesn’t pay the cost because it’s in + -- back_references. + -- By counting the costs regardless of whether the objects will be + -- included, we avoid this attack; it may overestimate the cost of + -- some messages, but only those that won’t be delivered intact + -- anyway because they contain illegal object types. + cost = cost + k_cost + v_cost + end + return ret, cost + else + return nil, 0 + end +end + + +-- itbl: Flat table of functions to run after sandbox cleanup, used to prevent various security hazards +local function get_digiline_send(pos, itbl, send_warning) + if not minetest.global_exists("digilines") then return end + local chan_maxlen = mesecon.setting("luacontroller_digiline_channel_maxlen", 256) + local maxlen = mesecon.setting("luacontroller_digiline_maxlen", 50000) + return function(channel, msg) + -- NOTE: This runs within string metatable sandbox, so don't *rely* on anything of the form (""):y + -- or via anything that could. + -- Make sure channel is string, number or boolean + if type(channel) == "string" then + if #channel > chan_maxlen then + send_warning("Channel string too long.") + return false + end + elseif (type(channel) ~= "string" and type(channel) ~= "number" and type(channel) ~= "boolean") then + send_warning("Channel must be string, number or boolean.") + return false + end + + local msg_cost + msg, msg_cost = clean_and_weigh_digiline_message(msg) + if msg == nil or msg_cost > maxlen then + send_warning("Message was too complex, or contained invalid data.") + return false + end + + table.insert(itbl, function () + -- Runs outside of string metatable sandbox + local luac_id = minetest.get_meta(pos):get_int("luac_id") + mesecon.queue:add_action(pos, "lc_digiline_relay", {channel, luac_id, msg}) + end) + return true + end +end + + +local safe_globals = { + -- Don't add pcall/xpcall unless willing to deal with the consequences (unless very careful, incredibly likely to allow killing server indirectly) + "assert", "error", "ipairs", "next", "pairs", "select", + "tonumber", "tostring", "type", "unpack", "_VERSION" +} + +local function create_environment(pos, mem, event, itbl, send_warning) + -- Gather variables for the environment + local vports = minetest.registered_nodes[minetest.get_node(pos).name].virtual_portstates + local vports_copy = {} + for k, v in pairs(vports) do vports_copy[k] = v end + local rports = get_real_port_states(pos) + + -- Create new library tables on each call to prevent one Luacontroller + -- from breaking a library and messing up other Luacontrollers. + local env = { + pin = merge_port_states(vports, rports), + port = vports_copy, + event = event, + mem = mem, + heat = mesecon.get_heat(pos), + heat_max = mesecon.setting("overheat_max", 20), + print = safe_print, + interrupt = get_interrupt(pos, itbl, send_warning), + digiline_send = get_digiline_send(pos, itbl, send_warning), + string = { + byte = string.byte, + char = string.char, + format = string.format, + len = string.len, + lower = string.lower, + upper = string.upper, + rep = safe_string_rep, + reverse = string.reverse, + sub = string.sub, + find = safe_string_find, + }, + math = { + abs = math.abs, + acos = math.acos, + asin = math.asin, + atan = math.atan, + atan2 = math.atan2, + ceil = math.ceil, + cos = math.cos, + cosh = math.cosh, + deg = math.deg, + exp = math.exp, + floor = math.floor, + fmod = math.fmod, + frexp = math.frexp, + huge = math.huge, + ldexp = math.ldexp, + log = math.log, + log10 = math.log10, + max = math.max, + min = math.min, + modf = math.modf, + pi = math.pi, + pow = math.pow, + rad = math.rad, + random = math.random, + sin = math.sin, + sinh = math.sinh, + sqrt = math.sqrt, + tan = math.tan, + tanh = math.tanh, + }, + table = { + concat = table.concat, + insert = table.insert, + maxn = table.maxn, + remove = table.remove, + sort = table.sort, + }, + os = { + clock = os.clock, + difftime = os.difftime, + time = os.time, + datetable = safe_date, + }, + } + env._G = env + + for _, name in pairs(safe_globals) do + env[name] = _G[name] + end + + return env +end + + +local function timeout() + debug.sethook() -- Clear hook + error("Code timed out!", 2) +end + + +local function create_sandbox(code, env) + if code:byte(1) == 27 then + return nil, "Binary code prohibited." + end + local f, msg = loadstring(code) + if not f then return nil, msg end + setfenv(f, env) + + -- Turn off JIT optimization for user code so that count + -- events are generated when adding debug hooks + if rawget(_G, "jit") then + jit.off(f, true) + end + + local maxevents = mesecon.setting("luacontroller_maxevents", 10000) + return function(...) + -- NOTE: This runs within string metatable sandbox, so the setting's been moved out for safety + -- Use instruction counter to stop execution + -- after luacontroller_maxevents + debug.sethook(timeout, "", maxevents) + local ok, ret = pcall(f, ...) + debug.sethook() -- Clear hook + if not ok then error(ret, 0) end + return ret + end +end + + +local function load_memory(meta) + return minetest.deserialize(meta:get_string("lc_memory"), true) or {} +end + + +local function save_memory(pos, meta, mem) + local memstring = minetest.serialize(remove_functions(mem)) + local memsize_max = mesecon.setting("luacontroller_memsize", 100000) + + if (#memstring <= memsize_max) then + meta:set_string("lc_memory", memstring) + else + print("Error: Luacontroller memory overflow. "..memsize_max.." bytes available, " + ..#memstring.." required. Controller overheats.") + burn_controller(pos) + end +end + +-- Returns success (boolean), errmsg (string) +-- run (as opposed to run_inner) is responsible for setting up meta according to this output +local function run_inner(pos, code, event) + local meta = minetest.get_meta(pos) + -- Note: These return success, presumably to avoid changing LC ID. + if overheat(pos) then return true, "" end + if ignore_event(event, meta) then return true, "" end + + -- Load code & mem from meta + local mem = load_memory(meta) + local code = meta:get_string("code") + + -- 'Last warning' label. + local warning = "" + local function send_warning(str) + warning = "Warning: " .. str + end + + -- Create environment + local itbl = {} + local env = create_environment(pos, mem, event, itbl, send_warning) + + -- Create the sandbox and execute code + local f, msg = create_sandbox(code, env) + if not f then return false, msg end + -- Start string true sandboxing + local onetruestring = getmetatable("") + -- If a string sandbox is already up yet inconsistent, something is very wrong + assert(onetruestring.__index == string) + onetruestring.__index = env.string + local success, msg = pcall(f) + onetruestring.__index = string + -- End string true sandboxing + if not success then return false, msg end + if type(env.port) ~= "table" then + return false, "Ports set are invalid." + end + + -- Actually set the ports + set_port_states(pos, env.port) + + -- Save memory. This may burn the luacontroller if a memory overflow occurs. + save_memory(pos, meta, env.mem) + + -- Execute deferred tasks + for _, v in ipairs(itbl) do + local failure = v() + if failure then + return false, failure + end + end + return true, warning +end + +local function reset_formspec(meta, code, errmsg) + meta:set_string("code", code) + code = minetest.formspec_escape(code or "") + errmsg = minetest.formspec_escape(tostring(errmsg or "")) + meta:set_string("formspec", "size[12,10]".. + "background[-0.2,-0.25;12.4,10.75;jeija_luac_background.png]".. + "textarea[0.2,0.2;12.2,9.5;code;;"..code.."]".. + "image_button[4.75,8.75;2.5,1;jeija_luac_runbutton.png;program;]".. + "image_button_exit[11.72,-0.25;0.425,0.4;jeija_close_window.png;exit;]".. + "label[0.1,9;"..errmsg.."]") +end + +local function reset_meta(pos, code, errmsg) + local meta = minetest.get_meta(pos) + reset_formspec(meta, code, errmsg) + meta:set_int("luac_id", math.random(1, 65535)) +end + +-- Wraps run_inner with LC-reset-on-error +local function run(pos, event) + local meta = minetest.get_meta(pos) + local code = meta:get_string("code") + local ok, errmsg = run_inner(pos, code, event) + if not ok then + reset_meta(pos, code, errmsg) + else + reset_formspec(meta, code, errmsg) + end + return ok, errmsg +end + +local function reset(pos) + set_port_states(pos, {a=false, b=false, c=false, d=false}) +end + +----------------------- +-- A.Queue callbacks -- +----------------------- + +mesecon.queue:add_function("lc_interrupt", function (pos, luac_id, iid) + -- There is no luacontroller anymore / it has been reprogrammed / replaced / burnt + if (minetest.get_meta(pos):get_int("luac_id") ~= luac_id) then return end + if (minetest.registered_nodes[minetest.get_node(pos).name].is_burnt) then return end + run(pos, {type="interrupt", iid = iid}) +end) + +mesecon.queue:add_function("lc_digiline_relay", function (pos, channel, luac_id, msg) + if not digiline then return end + -- This check is only really necessary because in case of server crash, old actions can be thrown into the future + if (minetest.get_meta(pos):get_int("luac_id") ~= luac_id) then return end + if (minetest.registered_nodes[minetest.get_node(pos).name].is_burnt) then return end + -- The actual work + digiline:receptor_send(pos, digiline.rules.default, channel, msg) +end) + +----------------------- +-- Node Registration -- +----------------------- + +local output_rules = {} +local input_rules = {} + +local node_box = { + type = "fixed", + fixed = { + {-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}, -- Bottom slab + {-5/16, -7/16, -5/16, 5/16, -6/16, 5/16}, -- Circuit board + {-3/16, -6/16, -3/16, 3/16, -5/16, 3/16}, -- IC + } +} + +local selection_box = { + type = "fixed", + fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 }, +} + +local digiline = { + receptor = {}, + effector = { + action = function(pos, node, channel, msg) + msg = clean_and_weigh_digiline_message(msg) + run(pos, {type = "digiline", channel = channel, msg = msg}) + end + } +} + +local function get_program(pos) + local meta = minetest.get_meta(pos) + return meta:get_string("code") +end + +local function set_program(pos, code) + reset(pos) + reset_meta(pos, code) + return run(pos, {type="program"}) +end + +local function on_receive_fields(pos, form_name, fields, sender) + if not fields.program then + return + end + local name = sender:get_player_name() + if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, {protection_bypass=true}) then + minetest.record_protection_violation(pos, name) + return + end + local ok, err = set_program(pos, fields.code) + if not ok then + -- it's not an error from the server perspective + minetest.log("action", "Lua controller programming error: " .. err) + end +end + +for a = 0, 1 do -- 0 = off 1 = on +for b = 0, 1 do +for c = 0, 1 do +for d = 0, 1 do + local cid = tostring(d)..tostring(c)..tostring(b)..tostring(a) + local node_name = BASENAME..cid + local top = "jeija_luacontroller_top.png" + if a == 1 then + top = top.."^jeija_luacontroller_LED_A.png" + end + if b == 1 then + top = top.."^jeija_luacontroller_LED_B.png" + end + if c == 1 then + top = top.."^jeija_luacontroller_LED_C.png" + end + if d == 1 then + top = top.."^jeija_luacontroller_LED_D.png" + end + + local groups + if a + b + c + d ~= 0 then + groups = {dig_immediate=2, not_in_creative_inventory=1, overheat = 1} + else + groups = {dig_immediate=2, overheat = 1} + end + + output_rules[cid] = {} + input_rules[cid] = {} + if a == 1 then table.insert(output_rules[cid], rules.a) end + if b == 1 then table.insert(output_rules[cid], rules.b) end + if c == 1 then table.insert(output_rules[cid], rules.c) end + if d == 1 then table.insert(output_rules[cid], rules.d) end + + if a == 0 then table.insert( input_rules[cid], rules.a) end + if b == 0 then table.insert( input_rules[cid], rules.b) end + if c == 0 then table.insert( input_rules[cid], rules.c) end + if d == 0 then table.insert( input_rules[cid], rules.d) end + + local mesecons = { + effector = { + rules = input_rules[cid], + action_change = function (pos, _, rule_name, new_state) + update_real_port_states(pos, rule_name, new_state) + run(pos, {type=new_state, pin=rule_name}) + end, + }, + receptor = { + state = mesecon.state.on, + rules = output_rules[cid] + }, + luacontroller = { + get_program = get_program, + set_program = set_program, + }, + } + + minetest.register_node(node_name, { + description = "Luacontroller", + drawtype = "nodebox", + tiles = { + top, + "jeija_microcontroller_bottom.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png" + }, + inventory_image = top, + paramtype = "light", + is_ground_content = false, + groups = groups, + drop = BASENAME.."0000", + sunlight_propagates = true, + selection_box = selection_box, + node_box = node_box, + on_construct = reset_meta, + on_receive_fields = on_receive_fields, + sounds = default.node_sound_stone_defaults(), + mesecons = mesecons, + digiline = digiline, + -- Virtual portstates are the ports that + -- the node shows as powered up (light up). + virtual_portstates = { + a = a == 1, + b = b == 1, + c = c == 1, + d = d == 1, + }, + after_dig_node = function (pos, node) + mesecon.do_cooldown(pos) + mesecon.receptor_off(pos, output_rules) + end, + is_luacontroller = true, + on_blast = mesecon.on_blastnode, + }) +end +end +end +end + +------------------------------ +-- Overheated Luacontroller -- +------------------------------ + +minetest.register_node(BASENAME .. "_burnt", { + drawtype = "nodebox", + tiles = { + "jeija_luacontroller_burnt_top.png", + "jeija_microcontroller_bottom.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png" + }, + inventory_image = "jeija_luacontroller_burnt_top.png", + is_burnt = true, + paramtype = "light", + is_ground_content = false, + groups = {dig_immediate=2, not_in_creative_inventory=1}, + drop = BASENAME.."0000", + sunlight_propagates = true, + selection_box = selection_box, + node_box = node_box, + on_construct = reset_meta, + on_receive_fields = on_receive_fields, + sounds = default.node_sound_stone_defaults(), + virtual_portstates = {a = false, b = false, c = false, d = false}, + mesecons = { + effector = { + rules = mesecon.rules.flat, + action_change = function(pos, _, rule_name, new_state) + update_real_port_states(pos, rule_name, new_state) + end, + }, + }, + on_blast = mesecon.on_blastnode, +}) + +------------------------ +-- Craft Registration -- +------------------------ + +minetest.register_craft({ + output = BASENAME.."0000 2", + recipe = { + {'mesecons_materials:silicon', 'mesecons_materials:silicon', 'group:mesecon_conductor_craftable'}, + {'mesecons_materials:silicon', 'mesecons_materials:silicon', 'group:mesecon_conductor_craftable'}, + {'group:mesecon_conductor_craftable', 'group:mesecon_conductor_craftable', ''}, + } +}) + diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luac_background.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luac_background.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luac_background.png rename to mods/mesecons/mesecons_luacontroller/textures/jeija_luac_background.png diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luac_runbutton.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luac_runbutton.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luac_runbutton.png rename to mods/mesecons/mesecons_luacontroller/textures/jeija_luac_runbutton.png diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_A.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_A.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_A.png rename to mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_A.png diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_B.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_B.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_B.png rename to mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_B.png diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_C.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_C.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_C.png rename to mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_C.png diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_D.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_D.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_D.png rename to mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_D.png diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_burnt_top.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_burnt_top.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_burnt_top.png rename to mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_burnt_top.png diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_top.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_top.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_top.png rename to mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_top.png diff --git a/mods/ITEMS/mesecons/mesecons_lamp/depends.txt b/mods/mesecons/mesecons_materials/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_lamp/depends.txt rename to mods/mesecons/mesecons_materials/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_materials/doc/fiber/description.html b/mods/mesecons/mesecons_materials/doc/fiber/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/doc/fiber/description.html rename to mods/mesecons/mesecons_materials/doc/fiber/description.html diff --git a/mods/ITEMS/mesecons/mesecons_materials/doc/fiber/preview.png b/mods/mesecons/mesecons_materials/doc/fiber/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/doc/fiber/preview.png rename to mods/mesecons/mesecons_materials/doc/fiber/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_materials/doc/fiber/recipe.png b/mods/mesecons/mesecons_materials/doc/fiber/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/doc/fiber/recipe.png rename to mods/mesecons/mesecons_materials/doc/fiber/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_materials/doc/glue/description.html b/mods/mesecons/mesecons_materials/doc/glue/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/doc/glue/description.html rename to mods/mesecons/mesecons_materials/doc/glue/description.html diff --git a/mods/ITEMS/mesecons/mesecons_materials/doc/glue/preview.png b/mods/mesecons/mesecons_materials/doc/glue/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/doc/glue/preview.png rename to mods/mesecons/mesecons_materials/doc/glue/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_materials/doc/glue/recipe.png b/mods/mesecons/mesecons_materials/doc/glue/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/doc/glue/recipe.png rename to mods/mesecons/mesecons_materials/doc/glue/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_materials/doc/silicon/description.html b/mods/mesecons/mesecons_materials/doc/silicon/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/doc/silicon/description.html rename to mods/mesecons/mesecons_materials/doc/silicon/description.html diff --git a/mods/ITEMS/mesecons/mesecons_materials/doc/silicon/preview.png b/mods/mesecons/mesecons_materials/doc/silicon/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/doc/silicon/preview.png rename to mods/mesecons/mesecons_materials/doc/silicon/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_materials/doc/silicon/recipe.png b/mods/mesecons/mesecons_materials/doc/silicon/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/doc/silicon/recipe.png rename to mods/mesecons/mesecons_materials/doc/silicon/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_materials/init.lua b/mods/mesecons/mesecons_materials/init.lua similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/init.lua rename to mods/mesecons/mesecons_materials/init.lua diff --git a/mods/ITEMS/mesecons/mesecons_materials/textures/mesecons_fiber.png b/mods/mesecons/mesecons_materials/textures/mesecons_fiber.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/textures/mesecons_fiber.png rename to mods/mesecons/mesecons_materials/textures/mesecons_fiber.png diff --git a/mods/ITEMS/mesecons/mesecons_materials/textures/mesecons_glue.png b/mods/mesecons/mesecons_materials/textures/mesecons_glue.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/textures/mesecons_glue.png rename to mods/mesecons/mesecons_materials/textures/mesecons_glue.png diff --git a/mods/ITEMS/mesecons/mesecons_materials/textures/mesecons_silicon.png b/mods/mesecons/mesecons_materials/textures/mesecons_silicon.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/textures/mesecons_silicon.png rename to mods/mesecons/mesecons_materials/textures/mesecons_silicon.png diff --git a/mods/ITEMS/mesecons/mesecons_luacontroller/depends.txt b/mods/mesecons/mesecons_microcontroller/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_luacontroller/depends.txt rename to mods/mesecons/mesecons_microcontroller/depends.txt diff --git a/mods/mesecons/mesecons_microcontroller/init.lua b/mods/mesecons/mesecons_microcontroller/init.lua new file mode 100755 index 0000000..46272b9 --- /dev/null +++ b/mods/mesecons/mesecons_microcontroller/init.lua @@ -0,0 +1,709 @@ +local EEPROM_SIZE = 255 + +local microc_rules = {} +local yc = {} + +for a = 0, 1 do +for b = 0, 1 do +for c = 0, 1 do +for d = 0, 1 do +local nodename = "mesecons_microcontroller:microcontroller"..tostring(d)..tostring(c)..tostring(b)..tostring(a) +local top = "jeija_microcontroller_top.png" +if tostring(a) == "1" then + top = top.."^jeija_microcontroller_LED_A.png" +end +if tostring(b) == "1" then + top = top.."^jeija_microcontroller_LED_B.png" +end +if tostring(c) == "1" then + top = top.."^jeija_microcontroller_LED_C.png" +end +if tostring(d) == "1" then + top = top.."^jeija_microcontroller_LED_D.png" +end +local groups +if tostring(d)..tostring(c)..tostring(b)..tostring(a) ~= "0000" then + groups = {dig_immediate=2, not_in_creative_inventory=1, mesecon = 3, overheat = 1} +else + groups = {dig_immediate=2, mesecon = 3, overheat = 1} +end +local rules={} +if (a == 1) then table.insert(rules, {x = -1, y = 0, z = 0}) end +if (b == 1) then table.insert(rules, {x = 0, y = 0, z = 1}) end +if (c == 1) then table.insert(rules, {x = 1, y = 0, z = 0}) end +if (d == 1) then table.insert(rules, {x = 0, y = 0, z = -1}) end + +local input_rules={} +if (a == 0) then table.insert(input_rules, {x = -1, y = 0, z = 0, name = "A"}) end +if (b == 0) then table.insert(input_rules, {x = 0, y = 0, z = 1, name = "B"}) end +if (c == 0) then table.insert(input_rules, {x = 1, y = 0, z = 0, name = "C"}) end +if (d == 0) then table.insert(input_rules, {x = 0, y = 0, z = -1, name = "D"}) end +microc_rules[nodename] = rules + +local mesecons = {effector = +{ + rules = input_rules, + action_change = function (pos, node, rulename, newstate) + yc.update_real_portstates(pos, node, rulename, newstate) + yc.update(pos) + end +}} +if nodename ~= "mesecons_microcontroller:microcontroller0000" then + mesecons.receptor = { + state = mesecon.state.on, + rules = rules + } +end + +minetest.register_node(nodename, { + description = "Microcontroller", + drawtype = "nodebox", + tiles = { + top, + "jeija_microcontroller_bottom.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png" + }, + + sunlight_propagates = true, + paramtype = "light", + is_ground_content = false, + walkable = true, + groups = groups, + drop = "mesecons_microcontroller:microcontroller0000 1", + selection_box = { + type = "fixed", + fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 }, + }, + node_box = { + type = "fixed", + fixed = { + { -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }, -- bottom slab + { -5/16, -7/16, -5/16, 5/16, -6/16, 5/16 }, -- circuit board + { -3/16, -6/16, -3/16, 3/16, -5/16, 3/16 }, -- IC + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("code", "") + meta:set_string("formspec", "size[9,2.5]".. + "field[0.256,-0.2;9,2;code;Code:;]".. + "button[0 ,0.2;1.5,3;band;AND]".. + "button[1.5,0.2;1.5,3;bxor;XOR]".. + "button[3 ,0.2;1.5,3;bnot;NOT]".. + "button[4.5,0.2;1.5,3;bnand;NAND]".. + "button[6 ,0.2;1.5,3;btflop;T-Flop]".. + "button[7.5,0.2;1.5,3;brsflop;RS-Flop]".. + "button_exit[3.5,1;2,3;program;Program]") + meta:set_string("infotext", "Unprogrammed Microcontroller") + local r = "" + for i=1, EEPROM_SIZE+1 do r=r.."0" end --Generate a string with EEPROM_SIZE*"0" + meta:set_string("eeprom", r) + end, + on_receive_fields = function(pos, formanme, fields, sender) + local meta = minetest.get_meta(pos) + if fields.band then + fields.code = "sbi(C, A&B) :A and B are inputs, C is output" + elseif fields.bxor then + fields.code = "sbi(C, A~B) :A and B are inputs, C is output" + elseif fields.bnot then + fields.code = "sbi(B, !A) :A is input, B is output" + elseif fields.bnand then + fields.code = "sbi(C, !A|!B) :A and B are inputs, C is output" + elseif fields.btflop then + fields.code = "if(A)sbi(1,1);if(!A)sbi(B,!B)sbi(1,0); if(C)off(B,1); :A is input, B is output (Q), C is reset, toggles with falling edge" + elseif fields.brsflop then + fields.code = "if(A)on(C);if(B)off(C); :A is S (Set), B is R (Reset), C is output (R dominates)" + end + if fields.code == nil then return end + + meta:set_string("code", fields.code) + meta:set_string("formspec", "size[9,2.5]".. + "field[0.256,-0.2;9,2;code;Code:;"..minetest.formspec_escape(fields.code).."]".. + "button[0 ,0.2;1.5,3;band;AND]".. + "button[1.5,0.2;1.5,3;bxor;XOR]".. + "button[3 ,0.2;1.5,3;bnot;NOT]".. + "button[4.5,0.2;1.5,3;bnand;NAND]".. + "button[6 ,0.2;1.5,3;btflop;T-Flop]".. + "button[7.5,0.2;1.5,3;brsflop;RS-Flop]".. + "button_exit[3.5,1;2,3;program;Program]") + meta:set_string("infotext", "Programmed Microcontroller") + yc.reset (pos) + yc.update(pos) + end, + sounds = default.node_sound_stone_defaults(), + mesecons = mesecons, + after_dig_node = function (pos, node) + rules = microc_rules[node.name] + mesecon.receptor_off(pos, rules) + end, + on_blast = mesecon.on_blastnode, +}) +end +end +end +end + +if minetest.get_modpath("mesecons_luacontroller") then + minetest.register_craft({ + type = "shapeless", + output = "mesecons_microcontroller:microcontroller0000", + recipe = {"mesecons_luacontroller:luacontroller0000"}, + }) + minetest.register_craft({ + type = "shapeless", + output = "mesecons_luacontroller:luacontroller0000", + recipe = {"mesecons_microcontroller:microcontroller0000"}, + }) +else + minetest.register_craft({ + output = 'craft "mesecons_microcontroller:microcontroller0000" 2', + recipe = { + {'mesecons_materials:silicon', 'mesecons_materials:silicon', 'group:mesecon_conductor_craftable'}, + {'mesecons_materials:silicon', 'mesecons_materials:silicon', 'group:mesecon_conductor_craftable'}, + {'group:mesecon_conductor_craftable', 'group:mesecon_conductor_craftable', ''}, + } + }) +end + +yc.reset = function(pos) + yc.action(pos, {a=false, b=false, c=false, d=false}) + local meta = minetest.get_meta(pos) + meta:set_int("afterid", 0) + local r = "" + for i=1, EEPROM_SIZE+1 do r=r.."0" end --Generate a string with EEPROM_SIZE*"0" + meta:set_string("eeprom", r) +end + +yc.update = function(pos) + local meta = minetest.get_meta(pos) + + if (mesecon.do_overheat(pos)) then + minetest.remove_node(pos) + minetest.after(0.2, function (pos) + mesecon.receptor_off(pos, mesecon.rules.flat) + end , pos) -- wait for pending parsings + minetest.add_item(pos, "mesecons_microcontroller:microcontroller0000") + end + + local code = meta:get_string("code") + code = yc.code_remove_commentary(code) + code = string.gsub(code, " ", "") --Remove all spaces + code = string.gsub(code, " ", "") --Remove all tabs + if yc.parsecode(code, pos) == nil then + meta:set_string("infotext", "Code not valid!\n"..code) + else + meta:set_string("infotext", "Working Microcontroller\n"..code) + end +end + + +--Code Parsing +yc.code_remove_commentary = function(code) + local is_string = false + for i = 1, #code do + if code:sub(i, i) == '"' then + is_string = not is_string --toggle is_string + elseif code:sub(i, i) == ":" and not is_string then + return code:sub(1, i-1) + end + end + return code +end + +yc.parsecode = function(code, pos) + local meta = minetest.get_meta(pos) + local endi = 1 + local Lreal = yc.get_real_portstates(pos) + local Lvirtual = yc.get_virtual_portstates(pos) + if Lvirtual == nil then return nil end + local c + local eeprom = meta:get_string("eeprom") + while true do + local command, params + command, endi = yc.parse_get_command(code, endi) + if command == nil then return nil end + if command == true then break end --end of code + if command == "if" then + local r + r, endi = yc.command_if(code, endi, yc.merge_portstates(Lreal, Lvirtual), eeprom) + if r == nil then return nil end + if r == true then -- nothing + elseif r == false then + local endi_new = yc.skip_to_else (code, endi) + if endi_new == nil then --else > not found + endi = yc.skip_to_endif(code, endi) + else + endi = endi_new + end + if endi == nil then return nil end + end + else + params, endi = yc.parse_get_params(code, endi) + if not params then return nil end + end + if command == "on" then + L = yc.command_on (params, Lvirtual) + elseif command == "off" then + L = yc.command_off(params, Lvirtual) + elseif command == "print" then + local su = yc.command_print(params, eeprom, yc.merge_portstates(Lreal, Lvirtual)) + if su ~= true then return nil end + elseif command == "after" then + local su = yc.command_after(params, pos) + if su == nil then return nil end + elseif command == "sbi" then + local new_eeprom + new_eeprom, Lvirtual = yc.command_sbi (params, eeprom, yc.merge_portstates(Lreal, Lvirtual), Lvirtual) + if new_eeprom == nil then return nil + else eeprom = new_eeprom end + elseif command == "if" then --nothing + else + return nil + end + if Lvirtual == nil then return nil end + if eeprom == nil then return nil else + minetest.get_meta(pos):set_string("eeprom", eeprom) end + end + yc.action(pos, Lvirtual) + return true +end + +yc.parse_get_command = function(code, starti) + i = starti + local s + while s ~= "" do + s = string.sub(code, i, i) + if s == "(" then + return string.sub(code, starti, i-1), i + 1 -- i: ( i+1 after ( + end + if s == ";" and starti == i then + starti = starti + 1 + i = starti + elseif s == ">" then + starti = yc.skip_to_endif(code, starti) + if starti == nil then return nil end + i = starti + else + i = i + 1 + end + end + + if starti == i-1 then + return true, true + end + return nil, nil +end + +yc.parse_get_params = function(code, starti) + i = starti + local s + local params = {} + local is_string = false + while s ~= "" do + s = string.sub(code, i, i) + if code:sub(i, i) == '"' then + is_string = (is_string==false) --toggle is_string + end + if s == ")" and is_string == false then + table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after ) + return params, i + 1 + end + if s == "," and is_string == false then + table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after ) + starti = i + 1 + end + i = i + 1 + end + return nil, nil +end + +yc.parse_get_eeprom_param = function(cond, starti) + i = starti + local s + local addr + while s ~= "" do + s = string.sub(cond, i, i) + if string.find("0123456789", s) == nil or s == "" then + addr = string.sub(cond, starti, i-1) -- i: last number i+1 after last number + return addr, i + end + if s == "," then return nil, nil end + i = i + 1 + end + return nil, nil +end + +yc.skip_to_endif = function(code, starti) + local i = starti + local s = false + local open_ifs = 1 + while s ~= nil and s~= "" do + s = code:sub(i, i) + if s == "i" and code:sub(i+1, i+1) == "f" then --if in µCScript + open_ifs = open_ifs + 1 + end + if s == ";" then + open_ifs = open_ifs - 1 + end + if open_ifs == 0 then + return i + 1 + end + i = i + 1 + end + return nil +end + +yc.skip_to_else = function(code, starti) + local i = starti + local s = false + local open_ifs = 1 + while s ~= nil and s~= "" do + s = code:sub(i, i) + if s == "i" and code:sub(i+1, i+1) == "f" then --if in µCScript + open_ifs = open_ifs + 1 + end + if s == ";" then + open_ifs = open_ifs - 1 + end + if open_ifs == 1 and s == ">" then + return i + 1 + end + i = i + 1 + end + return nil +end + +--Commands +yc.command_on = function(params, L) + local rules = {} + for i, port in ipairs(params) do + L = yc.set_portstate (port, true, L) + end + return L +end + +yc.command_off = function(params, L) + local rules = {} + for i, port in ipairs(params) do + L = yc.set_portstate (port, false, L) + end + return L +end + +yc.command_print = function(params, eeprom, L) + local s = "" + for i, param in ipairs(params) do + if param:sub(1,1) == '"' and param:sub(#param, #param) == '"' then + s = s..param:sub(2, #param-1) + else + r = yc.command_parsecondition(param, L, eeprom) + if r == "1" or r == "0" then + s = s..r + else return nil end + end + end + print(s) --don't remove + return true +end + +yc.command_sbi = function(params, eeprom, L, Lv) + if params[1]==nil or params[2]==nil or params[3] ~=nil then return nil end + local status = yc.command_parsecondition(params[2], L, eeprom) + + if status == nil then return nil, nil end + + if string.find("ABCD", params[1])~=nil and #params[1]==1 then --is a port + if status == "1" then + Lv = yc.set_portstate (params[1], true, Lv) + else + Lv = yc.set_portstate (params[1], false, Lv) + end + return eeprom, Lv; + end + + --is an eeprom address + local new_eeprom = ""; + for i=1, #eeprom do + if tonumber(params[1])==i then + new_eeprom = new_eeprom..status + else + new_eeprom = new_eeprom..eeprom:sub(i, i) + end + end + return new_eeprom, Lv +end + +-- after (delay) +yc.command_after = function(params, pos) + if params[1] == nil or params[2] == nil or params[3] ~= nil then return nil end + + --get time (maximum time is 200) + local time = tonumber(params[1]) + if time == nil or time > 200 then + return nil + end + + --get code in quotes "code" + if string.sub(params[2], 1, 1) ~= '"' or string.sub(params[2], #params[2], #params[2]) ~= '"' then return nil end + local code = string.sub(params[2], 2, #params[2] - 1) + + local afterid = math.random(10000) + local meta = minetest.get_meta(pos) + meta:set_int("afterid", afterid) + minetest.after(time, yc.command_after_execute, {pos = pos, code = code, afterid = afterid}) + return true +end + +yc.command_after_execute = function(params) + local meta = minetest.get_meta(params.pos) + if meta:get_int("afterid") == params.afterid then --make sure the node has not been changed + if yc.parsecode(params.code, params.pos) == nil then + meta:set_string("infotext", "Code in after() not valid!") + else + if code ~= nil then + meta:set_string("infotext", "Working Microcontroller\n"..code) + else + meta:set_string("infotext", "Working Microcontroller") + end + end + end +end + +--If +yc.command_if = function(code, starti, L, eeprom) + local cond, endi = yc.command_if_getcondition(code, starti) + if cond == nil then return nil end + + cond = yc.command_parsecondition(cond, L, eeprom) + + local result + if cond == "0" then result = false + elseif cond == "1" then result = true end + if not result then end + return result, endi --endi from local cond, endi = yc.command_if_getcondition(code, starti) +end + +--Condition parsing +yc.command_if_getcondition = function(code, starti) + i = starti + local s + local brackets = 1 --1 Bracket to close + while s ~= "" do + s = string.sub(code, i, i) + + if s == ")" then + brackets = brackets - 1 + end + + if s == "(" then + brackets = brackets + 1 + end + + if brackets == 0 then + return string.sub(code, starti, i-1), i + 1 -- i: ( i+1 after ( + end + + i = i + 1 + end + return nil, nil +end + +yc.command_parsecondition = function(cond, L, eeprom) + cond = string.gsub(cond, "A", tonumber(L.a and 1 or 0)) + cond = string.gsub(cond, "B", tonumber(L.b and 1 or 0)) + cond = string.gsub(cond, "C", tonumber(L.c and 1 or 0)) + cond = string.gsub(cond, "D", tonumber(L.d and 1 or 0)) + + + local i = 1 + local l = string.len(cond) + while i<=l do + local s = cond:sub(i,i) + if s == "#" then + local addr, endi = yc.parse_get_eeprom_param(cond, i+1) + local buf = yc.eeprom_read(tonumber(addr), eeprom) + if buf == nil then return nil end + local call = cond:sub(i, endi-1) + cond = string.gsub(cond, call, buf) + i = 0 + l = string.len(cond) + end + i = i + 1 + end + + cond = string.gsub(cond, "!0", "1") + cond = string.gsub(cond, "!1", "0") + + local i = 2 + local l = string.len(cond) + while i<=l do + local s = cond:sub(i,i) + local b = tonumber(cond:sub(i-1, i-1)) + local a = tonumber(cond:sub(i+1, i+1)) + if cond:sub(i+1, i+1) == nil then break end + if s == "=" then + if a==nil then return nil end + if b==nil then return nil end + if a == b then buf = "1" end + if a ~= b then buf = "0" end + cond = string.gsub(cond, b..s..a, buf) + i = 1 + l = string.len(cond) + end + i = i + 1 + end + + local i = 2 + local l = string.len(cond) + while i<=l do + local s = cond:sub(i,i) + local b = tonumber(cond:sub(i-1, i-1)) + local a = tonumber(cond:sub(i+1, i+1)) + if cond:sub(i+1, i+1) == nil then break end + if s == "&" then + if a==nil then return nil end + local buf = ((a==1) and (b==1)) + if buf == true then buf = "1" end + if buf == false then buf = "0" end + cond = string.gsub(cond, b..s..a, buf) + i = 1 + l = string.len(cond) + end + if s == "|" then + if a==nil then return nil end + local buf = ((a == 1) or (b == 1)) + if buf == true then buf = "1" end + if buf == false then buf = "0" end + cond = string.gsub(cond, b..s..a, buf) + i = 1 + l = string.len(cond) + end + if s == "~" then + if a==nil then return nil end + local buf = (((a == 1) or (b == 1)) and not((a==1) and (b==1))) + if buf == true then buf = "1" end + if buf == false then buf = "0" end + cond = string.gsub(cond, b..s..a, buf) + i = 1 + l = string.len(cond) + end + i = i + 1 + end + + return cond +end + +--Virtual-Hardware functions +yc.eeprom_read = function(number, eeprom) + if not number then return end + return eeprom:sub(number, number) +end + +--Real I/O functions +yc.action = function(pos, L) --L-->Lvirtual + local Lv = yc.get_virtual_portstates(pos) + local name = "mesecons_microcontroller:microcontroller" + ..tonumber(L.d and 1 or 0) + ..tonumber(L.c and 1 or 0) + ..tonumber(L.b and 1 or 0) + ..tonumber(L.a and 1 or 0) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = name, param2 = node.param2}) + + yc.action_setports(pos, L, Lv) +end + +yc.action_setports = function(pos, L, Lv) + local name = "mesecons_microcontroller:microcontroller" + local rules + if Lv.a ~= L.a then + rules = microc_rules[name.."0001"] + if L.a == true then mesecon.receptor_on(pos, rules) + else mesecon.receptor_off(pos, rules) end + end + if Lv.b ~= L.b then + rules = microc_rules[name.."0010"] + if L.b == true then mesecon.receptor_on(pos, rules) + else mesecon.receptor_off(pos, rules) end + end + if Lv.c ~= L.c then + rules = microc_rules[name.."0100"] + if L.c == true then mesecon.receptor_on(pos, rules) + else mesecon.receptor_off(pos, rules) end + end + if Lv.d ~= L.d then + rules = microc_rules[name.."1000"] + if L.d == true then mesecon.receptor_on(pos, rules) + else mesecon.receptor_off(pos, rules) end + end +end + +yc.set_portstate = function(port, state, L) + if port == "A" then L.a = state + elseif port == "B" then L.b = state + elseif port == "C" then L.c = state + elseif port == "D" then L.d = state + else return nil end + return L +end + +yc.update_real_portstates = function(pos, node, rulename, newstate) + local meta = minetest.get_meta(pos) + if rulename == nil then + meta:set_int("real_portstates", 1) + return + end + local n = meta:get_int("real_portstates") - 1 + local L = {} + for i = 1, 4 do + L[i] = n%2 + n = math.floor(n/2) + end + if rulename.x == nil then + for _, rname in ipairs(rulename) do + local port = ({4, 1, nil, 3, 2})[rname.x+2*rname.z+3] + L[port] = (newstate == "on") and 1 or 0 + end + else + local port = ({4, 1, nil, 3, 2})[rulename.x+2*rulename.z+3] + L[port] = (newstate == "on") and 1 or 0 + end + meta:set_int("real_portstates", 1 + L[1] + 2*L[2] + 4*L[3] + 8*L[4]) +end + +yc.get_real_portstates = function(pos) -- determine if ports are powered (by itself or from outside) + local meta = minetest.get_meta(pos) + local L = {} + local n = meta:get_int("real_portstates") - 1 + for _, index in ipairs({"a", "b", "c", "d"}) do + L[index] = ((n%2) == 1) + n = math.floor(n/2) + end + return L +end + +yc.get_virtual_portstates = function(pos) -- portstates according to the name + local name = minetest.get_node(pos).name + local b, a = string.find(name, ":microcontroller") + if a == nil then return nil end + a = a + 1 + + local Lvirtual = {a=false, b=false, c=false, d=false} + if name:sub(a , a ) == "1" then Lvirtual.d = true end + if name:sub(a+1, a+1) == "1" then Lvirtual.c = true end + if name:sub(a+2, a+2) == "1" then Lvirtual.b = true end + if name:sub(a+3, a+3) == "1" then Lvirtual.a = true end + return Lvirtual +end + +yc.merge_portstates = function(Lreal, Lvirtual) + local L = {a=false, b=false, c=false, d=false} + if Lvirtual.a or Lreal.a then L.a = true end + if Lvirtual.b or Lreal.b then L.b = true end + if Lvirtual.c or Lreal.c then L.c = true end + if Lvirtual.d or Lreal.d then L.d = true end + return L +end diff --git a/mods/ITEMS/mesecons/mesecons_microcontroller/textures/jeija_microcontroller_top.png b/mods/mesecons/mesecons_microcontroller/textures/jeija_microcontroller_top.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_microcontroller/textures/jeija_microcontroller_top.png rename to mods/mesecons/mesecons_microcontroller/textures/jeija_microcontroller_top.png diff --git a/mods/ITEMS/mesecons/mesecons_movestones/depends.txt b/mods/mesecons/mesecons_movestones/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/depends.txt rename to mods/mesecons/mesecons_movestones/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_movestones/doc/movestone/description.html b/mods/mesecons/mesecons_movestones/doc/movestone/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/doc/movestone/description.html rename to mods/mesecons/mesecons_movestones/doc/movestone/description.html diff --git a/mods/ITEMS/mesecons/mesecons_movestones/doc/movestone/preview.png b/mods/mesecons/mesecons_movestones/doc/movestone/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/doc/movestone/preview.png rename to mods/mesecons/mesecons_movestones/doc/movestone/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_movestones/doc/movestone/recipe.png b/mods/mesecons/mesecons_movestones/doc/movestone/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/doc/movestone/recipe.png rename to mods/mesecons/mesecons_movestones/doc/movestone/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_movestones/doc/movestone_sticky/description.html b/mods/mesecons/mesecons_movestones/doc/movestone_sticky/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/doc/movestone_sticky/description.html rename to mods/mesecons/mesecons_movestones/doc/movestone_sticky/description.html diff --git a/mods/ITEMS/mesecons/mesecons_movestones/doc/movestone_sticky/preview.png b/mods/mesecons/mesecons_movestones/doc/movestone_sticky/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/doc/movestone_sticky/preview.png rename to mods/mesecons/mesecons_movestones/doc/movestone_sticky/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_movestones/doc/movestone_sticky/recipe.png b/mods/mesecons/mesecons_movestones/doc/movestone_sticky/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/doc/movestone_sticky/recipe.png rename to mods/mesecons/mesecons_movestones/doc/movestone_sticky/recipe.png diff --git a/mods/mesecons/mesecons_movestones/init.lua b/mods/mesecons/mesecons_movestones/init.lua new file mode 100755 index 0000000..76fd3cd --- /dev/null +++ b/mods/mesecons/mesecons_movestones/init.lua @@ -0,0 +1,215 @@ +-- MOVESTONE +-- Non-sticky: +-- Moves along mesecon lines +-- Pushes all blocks in front of it +-- +-- Sticky one +-- Moves along mesecon lines +-- Pushes all block in front of it +-- Pull all blocks in its back + +-- settings: +local timer_interval = 1 / mesecon.setting("movestone_speed", 3) +local max_push = mesecon.setting("movestone_max_push", 50) +local max_pull = mesecon.setting("movestone_max_pull", 50) + +-- helper functions: +local function get_movestone_direction(rulename, is_vertical) + if is_vertical then + if rulename.z > 0 then + return {x = 0, y = -1, z = 0} + elseif rulename.z < 0 then + return {x = 0, y = 1, z = 0} + elseif rulename.x > 0 then + return {x = 0, y = -1, z = 0} + elseif rulename.x < 0 then + return {x = 0, y = 1, z = 0} + end + else + if rulename.z > 0 then + return {x = -1, y = 0, z = 0} + elseif rulename.z < 0 then + return {x = 1, y = 0, z = 0} + elseif rulename.x > 0 then + return {x = 0, y = 0, z = -1} + elseif rulename.x < 0 then + return {x = 0, y = 0, z = 1} + end + end +end + +-- registration functions: +function mesecon.register_movestone(name, def, is_sticky, is_vertical) + local function movestone_move(pos, node, rulename) + local direction = get_movestone_direction(rulename, is_vertical) + local frontpos = vector.add(pos, direction) + + -- ### Step 1: Push nodes in front ### + local success, stack, oldstack = mesecon.mvps_push(frontpos, direction, max_push) + if not success then + minetest.get_node_timer(pos):start(timer_interval) + return + end + mesecon.mvps_move_objects(frontpos, direction, oldstack) + + -- ### Step 2: Move the movestone ### + minetest.set_node(frontpos, node) + minetest.remove_node(pos) + mesecon.on_dignode(pos, node) + mesecon.on_placenode(frontpos, node) + minetest.get_node_timer(frontpos):start(timer_interval) + + -- ### Step 3: If sticky, pull stack behind ### + if not is_sticky then + return + end + local backpos = vector.subtract(pos, direction) + success, stack, oldstack = mesecon.mvps_pull_all(backpos, direction, max_pull) + if success then + mesecon.mvps_move_objects(backpos, vector.multiply(direction, -1), oldstack, -1) + end + end + + def.is_ground_content = false + + def.mesecons = {effector = { + action_on = function(pos, node, rulename) + if rulename and not minetest.get_node_timer(pos):is_started() then + movestone_move(pos, node, rulename) + end + end, + rules = mesecon.rules.default, + }} + + def.on_timer = function(pos, elapsed) + local sourcepos = mesecon.is_powered(pos) + if not sourcepos then + return + end + local rulename = vector.subtract(sourcepos[1], pos) + mesecon.activate(pos, minetest.get_node(pos), rulename, 0) + end + + def.on_blast = mesecon.on_blastnode + + minetest.register_node(name, def) +end + + +-- registration: +mesecon.register_movestone("mesecons_movestones:movestone", { + tiles = { + "jeija_movestone_side.png", + "jeija_movestone_side.png", + "jeija_movestone_arrows.png^[transformFX", + "jeija_movestone_arrows.png^[transformFX", + "jeija_movestone_arrows.png", + "jeija_movestone_arrows.png", + }, + groups = {cracky = 3}, + description = "Movestone", + sounds = default.node_sound_stone_defaults() +}, false, false) + +mesecon.register_movestone("mesecons_movestones:sticky_movestone", { + tiles = { + "jeija_movestone_side.png", + "jeija_movestone_side.png", + "jeija_sticky_movestone.png^[transformFX", + "jeija_sticky_movestone.png^[transformFX", + "jeija_sticky_movestone.png", + "jeija_sticky_movestone.png", + }, + groups = {cracky = 3}, + description = "Sticky Movestone", + sounds = default.node_sound_stone_defaults(), +}, true, false) + +mesecon.register_movestone("mesecons_movestones:movestone_vertical", { + tiles = { + "jeija_movestone_side.png", + "jeija_movestone_side.png", + "jeija_movestone_arrows.png^[transformFXR90", + "jeija_movestone_arrows.png^[transformR90", + "jeija_movestone_arrows.png^[transformFXR90", + "jeija_movestone_arrows.png^[transformR90", + }, + groups = {cracky = 3}, + description = "Vertical Movestone", + sounds = default.node_sound_stone_defaults() +}, false, true) + +mesecon.register_movestone("mesecons_movestones:sticky_movestone_vertical", { + tiles = { + "jeija_movestone_side.png", + "jeija_movestone_side.png", + "jeija_sticky_movestone.png^[transformFXR90", + "jeija_sticky_movestone.png^[transformR90", + "jeija_sticky_movestone.png^[transformFXR90", + "jeija_sticky_movestone.png^[transformR90", + }, + groups = {cracky = 3}, + description = "Vertical Sticky Movestone", + sounds = default.node_sound_stone_defaults(), +}, true, true) + + +-- crafting: +-- base recipe: +minetest.register_craft({ + output = "mesecons_movestones:movestone 2", + recipe = { + {"default:stone", "default:stone", "default:stone"}, + {"group:mesecon_conductor_craftable", "group:mesecon_conductor_craftable", "group:mesecon_conductor_craftable"}, + {"default:stone", "default:stone", "default:stone"}, + } +}) + +-- conversation: +minetest.register_craft({ + type = "shapeless", + output = "mesecons_movestones:movestone", + recipe = {"mesecons_movestones:movestone_vertical"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mesecons_movestones:movestone_vertical", + recipe = {"mesecons_movestones:movestone"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mesecons_movestones:sticky_movestone", + recipe = {"mesecons_movestones:sticky_movestone_vertical"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mesecons_movestones:sticky_movestone_vertical", + recipe = {"mesecons_movestones:sticky_movestone"}, +}) + +-- make sticky: +minetest.register_craft({ + output = "mesecons_movestones:sticky_movestone", + recipe = { + {"mesecons_materials:glue", "mesecons_movestones:movestone", "mesecons_materials:glue"}, + } +}) + +minetest.register_craft({ + output = "mesecons_movestones:sticky_movestone_vertical", + recipe = { + {"mesecons_materials:glue"}, + {"mesecons_movestones:movestone_vertical"}, + {"mesecons_materials:glue"}, + } +}) + + +-- legacy code: +minetest.register_alias("mesecons_movestones:movestone_active", + "mesecons_movestones:movestone") +minetest.register_alias("mesecons_movestones:sticky_movestone_active", + "mesecons_movestones:sticky_movestone") diff --git a/mods/ITEMS/mesecons/mesecons_movestones/textures/jeija_movestone_arrows.png b/mods/mesecons/mesecons_movestones/textures/jeija_movestone_arrows.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/textures/jeija_movestone_arrows.png rename to mods/mesecons/mesecons_movestones/textures/jeija_movestone_arrows.png diff --git a/mods/ITEMS/mesecons/mesecons_movestones/textures/jeija_movestone_side.png b/mods/mesecons/mesecons_movestones/textures/jeija_movestone_side.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/textures/jeija_movestone_side.png rename to mods/mesecons/mesecons_movestones/textures/jeija_movestone_side.png diff --git a/mods/ITEMS/mesecons/mesecons_movestones/textures/jeija_sticky_movestone.png b/mods/mesecons/mesecons_movestones/textures/jeija_sticky_movestone.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_movestones/textures/jeija_sticky_movestone.png rename to mods/mesecons/mesecons_movestones/textures/jeija_sticky_movestone.png diff --git a/mods/ITEMS/mesecons/mesecons_materials/depends.txt b/mods/mesecons/mesecons_mvps/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_materials/depends.txt rename to mods/mesecons/mesecons_mvps/depends.txt diff --git a/mods/mesecons/mesecons_mvps/init.lua b/mods/mesecons/mesecons_mvps/init.lua new file mode 100755 index 0000000..428c78a --- /dev/null +++ b/mods/mesecons/mesecons_mvps/init.lua @@ -0,0 +1,283 @@ +--register stoppers for movestones/pistons + +mesecon.mvps_stoppers = {} +mesecon.on_mvps_move = {} +mesecon.mvps_unmov = {} + +--- Objects (entities) that cannot be moved +function mesecon.register_mvps_unmov(objectname) + mesecon.mvps_unmov[objectname] = true; +end + +function mesecon.is_mvps_unmov(objectname) + return mesecon.mvps_unmov[objectname] +end + +-- Nodes that cannot be pushed / pulled by movestones, pistons +function mesecon.is_mvps_stopper(node, pushdir, stack, stackid) + -- unknown nodes are always stoppers + if not minetest.registered_nodes[node.name] then + return true + end + + local get_stopper = mesecon.mvps_stoppers[node.name] + if type (get_stopper) == "function" then + get_stopper = get_stopper(node, pushdir, stack, stackid) + end + + return get_stopper +end + +function mesecon.register_mvps_stopper(nodename, get_stopper) + if get_stopper == nil then + get_stopper = true + end + mesecon.mvps_stoppers[nodename] = get_stopper +end + +-- Functions to be called on mvps movement +function mesecon.register_on_mvps_move(callback) + mesecon.on_mvps_move[#mesecon.on_mvps_move+1] = callback +end + +local function on_mvps_move(moved_nodes) + for _, callback in ipairs(mesecon.on_mvps_move) do + callback(moved_nodes) + end +end + +function mesecon.mvps_process_stack(stack) + -- update mesecons for placed nodes ( has to be done after all nodes have been added ) + for _, n in ipairs(stack) do + mesecon.on_placenode(n.pos, minetest.get_node(n.pos)) + end +end + +-- tests if the node can be pushed into, e.g. air, water, grass +local function node_replaceable(name) + if name == "ignore" then return true end + + if minetest.registered_nodes[name] then + return minetest.registered_nodes[name].buildable_to or false + end + + return false +end + +function mesecon.mvps_get_stack(pos, dir, maximum, all_pull_sticky) + -- determine the number of nodes to be pushed + local nodes = {} + local frontiers = {pos} + + while #frontiers > 0 do + local np = frontiers[1] + local nn = minetest.get_node(np) + + if not node_replaceable(nn.name) then + table.insert(nodes, {node = nn, pos = np}) + if #nodes > maximum then return nil end + + -- add connected nodes to frontiers, connected is a vector list + -- the vectors must be absolute positions + local connected = {} + if minetest.registered_nodes[nn.name] + and minetest.registered_nodes[nn.name].mvps_sticky then + connected = minetest.registered_nodes[nn.name].mvps_sticky(np, nn) + end + + table.insert(connected, vector.add(np, dir)) + + -- If adjacent node is sticky block and connects add that + -- position to the connected table + for _, r in ipairs(mesecon.rules.alldirs) do + local adjpos = vector.add(np, r) + local adjnode = minetest.get_node(adjpos) + if minetest.registered_nodes[adjnode.name] + and minetest.registered_nodes[adjnode.name].mvps_sticky then + local sticksto = minetest.registered_nodes[adjnode.name] + .mvps_sticky(adjpos, adjnode) + + -- connects to this position? + for _, link in ipairs(sticksto) do + if vector.equals(link, np) then + table.insert(connected, adjpos) + end + end + end + end + + if all_pull_sticky then + table.insert(connected, vector.subtract(np, dir)) + end + + -- Make sure there are no duplicates in frontiers / nodes before + -- adding nodes in "connected" to frontiers + for _, cp in ipairs(connected) do + local duplicate = false + for _, rp in ipairs(nodes) do + if vector.equals(cp, rp.pos) then + duplicate = true + end + end + for _, fp in ipairs(frontiers) do + if vector.equals(cp, fp) then + duplicate = true + end + end + if not duplicate then + table.insert(frontiers, cp) + end + end + end + table.remove(frontiers, 1) + end + + return nodes +end + +function mesecon.mvps_push(pos, dir, maximum) + return mesecon.mvps_push_or_pull(pos, dir, dir, maximum) +end + +function mesecon.mvps_pull_all(pos, dir, maximum) + return mesecon.mvps_push_or_pull(pos, vector.multiply(dir, -1), dir, maximum, true) +end + +function mesecon.mvps_pull_single(pos, dir, maximum) + return mesecon.mvps_push_or_pull(pos, vector.multiply(dir, -1), dir, maximum) +end + +-- pos: pos of mvps; stackdir: direction of building the stack +-- movedir: direction of actual movement +-- maximum: maximum nodes to be pushed +-- all_pull_sticky: All nodes are sticky in the direction that they are pulled from +function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, all_pull_sticky) + local nodes = mesecon.mvps_get_stack(pos, movedir, maximum, all_pull_sticky) + + if not nodes then return end + -- determine if one of the nodes blocks the push / pull + for id, n in ipairs(nodes) do + if mesecon.is_mvps_stopper(n.node, movedir, nodes, id) then + return + end + end + + -- remove all nodes + for _, n in ipairs(nodes) do + n.meta = minetest.get_meta(n.pos):to_table() + local node_timer = minetest.get_node_timer(n.pos) + if node_timer:is_started() then + n.node_timer = {node_timer:get_timeout(), node_timer:get_elapsed()} + end + minetest.remove_node(n.pos) + end + + -- update mesecons for removed nodes ( has to be done after all nodes have been removed ) + for _, n in ipairs(nodes) do + mesecon.on_dignode(n.pos, n.node) + end + + -- add nodes + for _, n in ipairs(nodes) do + local np = vector.add(n.pos, movedir) + + minetest.set_node(np, n.node) + minetest.get_meta(np):from_table(n.meta) + if n.node_timer then + minetest.get_node_timer(np):set(unpack(n.node_timer)) + end + end + + local moved_nodes = {} + local oldstack = mesecon.tablecopy(nodes) + for i in ipairs(nodes) do + moved_nodes[i] = {} + moved_nodes[i].oldpos = nodes[i].pos + nodes[i].pos = vector.add(nodes[i].pos, movedir) + moved_nodes[i].pos = nodes[i].pos + moved_nodes[i].node = nodes[i].node + moved_nodes[i].meta = nodes[i].meta + moved_nodes[i].node_timer = nodes[i].node_timer + end + + on_mvps_move(moved_nodes) + + return true, nodes, oldstack +end + +function mesecon.mvps_move_objects(pos, dir, nodestack, movefactor) + local objects_to_move = {} + local dir_k + local dir_l + for k, v in pairs(dir) do + if v ~= 0 then + dir_k = k + dir_l = v + break + end + end + movefactor = movefactor or 1 + dir = vector.multiply(dir, movefactor) + for id, obj in pairs(minetest.object_refs) do + local obj_pos = obj:getpos() + local cbox = obj:get_properties().collisionbox + local min_pos = vector.add(obj_pos, vector.new(cbox[1], cbox[2], cbox[3])) + local max_pos = vector.add(obj_pos, vector.new(cbox[4], cbox[5], cbox[6])) + local ok = true + for k, v in pairs(pos) do + local edge1, edge2 + if k ~= dir_k then + edge1 = v - 0.51 -- More than 0.5 to move objects near to the stack. + edge2 = v + 0.51 + else + edge1 = v - 0.5 * dir_l + edge2 = v + (#nodestack + 0.5 * movefactor) * dir_l + -- Make sure, edge1 is bigger than edge2: + if edge1 > edge2 then + edge1, edge2 = edge2, edge1 + end + end + if min_pos[k] > edge2 or max_pos[k] < edge1 then + ok = false + break + end + end + if ok then + local ent = obj:get_luaentity() + if obj:is_player() or (ent and not mesecon.is_mvps_unmov(ent.name)) then + local np = vector.add(obj_pos, dir) + -- Move only if destination is not solid or object is inside stack: + local nn = minetest.get_node(np) + local node_def = minetest.registered_nodes[nn.name] + local obj_offset = dir_l * (obj_pos[dir_k] - pos[dir_k]) + if (node_def and not node_def.walkable) or + (obj_offset >= 0 and + obj_offset <= #nodestack - 0.5) then + obj:move_to(np) + end + end + end + end +end + +mesecon.register_mvps_stopper("doors:door_steel_b_1") +mesecon.register_mvps_stopper("doors:door_steel_t_1") +mesecon.register_mvps_stopper("doors:door_steel_b_2") +mesecon.register_mvps_stopper("doors:door_steel_t_2") +mesecon.register_mvps_stopper("default:chest_locked") +mesecon.register_on_mvps_move(mesecon.move_hot_nodes) +mesecon.register_on_mvps_move(function(moved_nodes) + for i = 1, #moved_nodes do + local moved_node = moved_nodes[i] + mesecon.on_placenode(moved_node.pos, moved_node.node) + minetest.after(0, function() + minetest.check_for_falling(moved_node.oldpos) + minetest.check_for_falling(moved_node.pos) + end) + local node_def = minetest.registered_nodes[moved_node.node.name] + if node_def and node_def.mesecon and node_def.mesecon.on_mvps_move then + node_def.mesecon.on_mvps_move(moved_node.pos, moved_node.node, + moved_node.oldpos, moved_node.meta) + end + end +end) diff --git a/mods/ITEMS/mesecons/mesecons_microcontroller/depends.txt b/mods/mesecons/mesecons_noteblock/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_microcontroller/depends.txt rename to mods/mesecons/mesecons_noteblock/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/doc/noteblock/description.html b/mods/mesecons/mesecons_noteblock/doc/noteblock/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/doc/noteblock/description.html rename to mods/mesecons/mesecons_noteblock/doc/noteblock/description.html diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/doc/noteblock/preview.png b/mods/mesecons/mesecons_noteblock/doc/noteblock/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/doc/noteblock/preview.png rename to mods/mesecons/mesecons_noteblock/doc/noteblock/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/doc/noteblock/recipe.png b/mods/mesecons/mesecons_noteblock/doc/noteblock/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/doc/noteblock/recipe.png rename to mods/mesecons/mesecons_noteblock/doc/noteblock/recipe.png diff --git a/mods/mesecons/mesecons_noteblock/init.lua b/mods/mesecons/mesecons_noteblock/init.lua new file mode 100755 index 0000000..9fa59ea --- /dev/null +++ b/mods/mesecons/mesecons_noteblock/init.lua @@ -0,0 +1,71 @@ +minetest.register_node("mesecons_noteblock:noteblock", { + description = "Noteblock", + tiles = {"mesecons_noteblock.png"}, + is_ground_content = false, + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2}, + on_punch = function(pos, node) -- change sound when punched + node.param2 = (node.param2+1)%12 + mesecon.noteblock_play(pos, node.param2) + minetest.set_node(pos, node) + end, + sounds = default.node_sound_wood_defaults(), + mesecons = {effector = { -- play sound when activated + action_on = function(pos, node) + mesecon.noteblock_play(pos, node.param2) + end + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_craft({ + output = "mesecons_noteblock:noteblock 1", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:mesecon_conductor_craftable", "default:steel_ingot", "group:mesecon_conductor_craftable"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +local soundnames = { + [0] = "mesecons_noteblock_csharp", + "mesecons_noteblock_d", + "mesecons_noteblock_dsharp", + "mesecons_noteblock_e", + "mesecons_noteblock_f", + "mesecons_noteblock_fsharp", + "mesecons_noteblock_g", + "mesecons_noteblock_gsharp", + + "mesecons_noteblock_a", + "mesecons_noteblock_asharp", + "mesecons_noteblock_b", + "mesecons_noteblock_c" +} + +local node_sounds = { + ["default:glass"] = "mesecons_noteblock_hihat", + ["default:stone"] = "mesecons_noteblock_kick", + ["default:lava_source"] = "fire_large", + ["default:chest"] = "mesecons_noteblock_snare", + ["default:tree"] = "mesecons_noteblock_crash", + ["default:wood"] = "mesecons_noteblock_litecrash", + ["default:coalblock"] = "tnt_explode", +} + +mesecon.noteblock_play = function(pos, param2) + pos.y = pos.y-1 + local nodeunder = minetest.get_node(pos).name + local soundname = node_sounds[nodeunder] + if not soundname then + soundname = soundnames[param2] + if not soundname then + minetest.log("error", "[mesecons_noteblock] No soundname found, test param2") + return + end + if nodeunder == "default:steelblock" then + soundname = soundname.. 2 + end + end + pos.y = pos.y+1 + minetest.sound_play(soundname, {pos = pos}) +end diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_crash.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_crash.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_crash.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_crash.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_hihat.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_hihat.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_hihat.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_hihat.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_kick.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_kick.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_kick.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_kick.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_litecrash.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_litecrash.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_litecrash.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_litecrash.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg rename to mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/textures/mesecons_noteblock.png b/mods/mesecons/mesecons_noteblock/textures/mesecons_noteblock.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/textures/mesecons_noteblock.png rename to mods/mesecons/mesecons_noteblock/textures/mesecons_noteblock.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/depends.txt b/mods/mesecons/mesecons_pistons/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/depends.txt rename to mods/mesecons/mesecons_pistons/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_pistons/doc/piston/description.html b/mods/mesecons/mesecons_pistons/doc/piston/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/doc/piston/description.html rename to mods/mesecons/mesecons_pistons/doc/piston/description.html diff --git a/mods/ITEMS/mesecons/mesecons_pistons/doc/piston/preview.png b/mods/mesecons/mesecons_pistons/doc/piston/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/doc/piston/preview.png rename to mods/mesecons/mesecons_pistons/doc/piston/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/doc/piston/recipe.png b/mods/mesecons/mesecons_pistons/doc/piston/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/doc/piston/recipe.png rename to mods/mesecons/mesecons_pistons/doc/piston/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/doc/piston_sticky/description.html b/mods/mesecons/mesecons_pistons/doc/piston_sticky/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/doc/piston_sticky/description.html rename to mods/mesecons/mesecons_pistons/doc/piston_sticky/description.html diff --git a/mods/ITEMS/mesecons/mesecons_pistons/doc/piston_sticky/preview.png b/mods/mesecons/mesecons_pistons/doc/piston_sticky/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/doc/piston_sticky/preview.png rename to mods/mesecons/mesecons_pistons/doc/piston_sticky/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/doc/piston_sticky/recipe.png b/mods/mesecons/mesecons_pistons/doc/piston_sticky/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/doc/piston_sticky/recipe.png rename to mods/mesecons/mesecons_pistons/doc/piston_sticky/recipe.png diff --git a/mods/mesecons/mesecons_pistons/init.lua b/mods/mesecons/mesecons_pistons/init.lua new file mode 100755 index 0000000..e10b604 --- /dev/null +++ b/mods/mesecons/mesecons_pistons/init.lua @@ -0,0 +1,487 @@ +local specs = { + normal = { + offname = "mesecons_pistons:piston_normal_off", + onname = "mesecons_pistons:piston_normal_on", + pusher = "mesecons_pistons:piston_pusher_normal", + }, + sticky = { + offname = "mesecons_pistons:piston_sticky_off", + onname = "mesecons_pistons:piston_sticky_on", + pusher = "mesecons_pistons:piston_pusher_sticky", + sticky = true, + }, +} + +local function get_pistonspec_name(name, part) + if part then + for spec_name, spec in pairs(specs) do + if name == spec[part] then + return spec_name, part + end + end + return + end + for spec_name, spec in pairs(specs) do + for part, value in pairs(spec) do + if name == value then + return spec_name, part + end + end + end +end + +local function get_pistonspec(name, part) + return specs[get_pistonspec_name(name, part)] +end + +local max_push = mesecon.setting("piston_max_push", 15) +local max_pull = mesecon.setting("piston_max_pull", 15) + +-- Get mesecon rules of pistons +local function piston_get_rules(node) + local dir = minetest.facedir_to_dir(node.param2) + for k, v in pairs(dir) do + if v ~= 0 then + dir = {k, -v} + break + end + end + local rules = table.copy(mesecon.rules.default) + for i, rule in ipairs(rules) do + if rule[dir[1]] == dir[2] then + table.remove(rules, i) + end + end + return rules +end + +local function piston_remove_pusher(pos, node) + local pistonspec = get_pistonspec(node.name, "onname") + local dir = vector.multiply(minetest.facedir_to_dir(node.param2), -1) + local pusherpos = vector.add(pos, dir) + local pushername = minetest.get_node(pusherpos).name + + -- make sure there actually is a pusher (for compatibility reasons mainly) + if pushername ~= pistonspec.pusher then + return + end + + minetest.remove_node(pusherpos) + minetest.sound_play("piston_retract", { + pos = pos, + max_hear_distance = 20, + gain = 0.3, + }) + minetest.check_for_falling(pusherpos) +end + +local piston_on = function(pos, node) + local pistonspec = get_pistonspec(node.name, "offname") + local dir = vector.multiply(minetest.facedir_to_dir(node.param2), -1) + local pusher_pos = vector.add(pos, dir) + local success, stack, oldstack = mesecon.mvps_push(pusher_pos, dir, max_push) + if not success then + return + end + minetest.set_node(pos, {param2 = node.param2, name = pistonspec.onname}) + minetest.set_node(pusher_pos, {param2 = node.param2, name = pistonspec.pusher}) + minetest.sound_play("piston_extend", { + pos = pos, + max_hear_distance = 20, + gain = 0.3, + }) + mesecon.mvps_process_stack(stack) + mesecon.mvps_move_objects(pusher_pos, dir, oldstack) +end + +local function piston_off(pos, node) + local pistonspec = get_pistonspec(node.name, "onname") + minetest.set_node(pos, {param2 = node.param2, name = pistonspec.offname}) + piston_remove_pusher(pos, node) + + if not pistonspec.sticky then + return + end + local dir = minetest.facedir_to_dir(node.param2) + local pullpos = vector.add(pos, vector.multiply(dir, -2)) + local success, stack, oldstack = mesecon.mvps_pull_single(pullpos, dir, max_pull) + if success then + mesecon.mvps_move_objects(pullpos, vector.multiply(dir, -1), oldstack, -1) + end +end + +local orientations = { + [0] = { 4, 8}, + {13, 17}, + {10, 6}, + {20, 15}, +} + +local function piston_orientate(pos, placer) + if not placer then + return + end + local pitch = math.deg(placer:get_look_vertical()) + local node = minetest.get_node(pos) + if pitch > 55 then + node.param2 = orientations[node.param2][1] + elseif pitch < -55 then + node.param2 = orientations[node.param2][2] + else + return + end + minetest.swap_node(pos, node) + -- minetest.after, because on_placenode for unoriented piston must be processed first + minetest.after(0, mesecon.on_placenode, pos, node) +end + +local rotations = { + {0, 16, 20, 12}, + {2, 14, 22, 18}, + {1, 5, 23, 9}, + {3, 11, 21, 7}, + {4, 13, 10, 19}, + {6, 15, 8, 17}, +} + +local function get_rotation(param2) + for a = 1, #rotations do + for f = 1, #rotations[a] do + if rotations[a][f] == param2 then + return a, f + end + end + end +end + +local function rotate(param2, mode) + local axis, face = get_rotation(param2) + if mode == screwdriver.ROTATE_FACE then + face = face + 1 + if face > 4 then + face = 1 + end + elseif mode == screwdriver.ROTATE_AXIS then + axis = axis + 1 + if axis > 6 then + axis = 1 + end + face = 1 + else + return param2 + end + return rotations[axis][face] +end + +local function piston_rotate(pos, node, _, mode) + node.param2 = rotate(node.param2, mode) + minetest.swap_node(pos, node) + mesecon.execute_autoconnect_hooks_now(pos, node) + return true +end + +local function piston_rotate_on(pos, node, player, mode) + local pistonspec = get_pistonspec(node.name, "onname") + local dir = vector.multiply(minetest.facedir_to_dir(node.param2), -1) + local pusher_pos = vector.add(dir, pos) + local pusher_node = minetest.get_node(pusher_pos) + if pusher_node.name ~= pistonspec.pusher then + return piston_rotate(pos, node, nil, mode) + end + if mode == screwdriver.ROTATE_FACE then + piston_rotate(pusher_pos, pusher_node, nil, mode) + return piston_rotate(pos, node, nil, mode) + elseif mode ~= screwdriver.ROTATE_AXIS then + return false + end + local player_name = player and player:is_player() and player:get_player_name() or "" + local ok, dir_after, pusher_pos_after + for i = 1, 5 do + node.param2 = rotate(node.param2, mode) + dir_after = vector.multiply(minetest.facedir_to_dir(node.param2), -1) + pusher_pos_after = vector.add(dir_after, pos) + local pusher_pos_after_node_name = minetest.get_node(pusher_pos_after).name + local pusher_pos_after_node_def = minetest.registered_nodes[pusher_pos_after_node_name] + if pusher_pos_after_node_def and pusher_pos_after_node_def.buildable_to and + not minetest.is_protected(pusher_pos_after, player_name) then + ok = true + break + end + end + if not ok then + return false + end + pusher_node.param2 = node.param2 + minetest.remove_node(pusher_pos) + minetest.set_node(pusher_pos_after, pusher_node) + minetest.swap_node(pos, node) + mesecon.execute_autoconnect_hooks_now(pos, node) + return true +end + +local function piston_rotate_pusher(pos, node, player, mode) + local pistonspec = get_pistonspec(node.name, "pusher") + local piston_pos = vector.add(pos, minetest.facedir_to_dir(node.param2)) + local piston_node = minetest.get_node(piston_pos) + if piston_node.name ~= pistonspec.onname then + minetest.remove_node(pos) -- Make it possible to remove alone pushers. + return false + end + return piston_rotate_on(piston_pos, piston_node, player, mode) +end + + +-- Boxes: + +local pt = 3/16 -- pusher thickness + +local piston_pusher_box = { + type = "fixed", + fixed = { + {-2/16, -2/16, -.5 + pt, 2/16, 2/16, .5 + pt}, + {-.5 , -.5 , -.5 , .5 , .5 , -.5 + pt}, + }, +} + +local piston_on_box = { + type = "fixed", + fixed = { + {-.5, -.5, -.5 + pt, .5, .5, .5} + }, +} + + +-- Normal (non-sticky) Pistons: +-- offstate +minetest.register_node("mesecons_pistons:piston_normal_off", { + description = "Piston", + tiles = { + "mesecons_piston_top.png", + "mesecons_piston_bottom.png", + "mesecons_piston_left.png", + "mesecons_piston_right.png", + "mesecons_piston_back.png", + "mesecons_piston_pusher_front.png" + }, + groups = {cracky = 3}, + paramtype2 = "facedir", + is_ground_content = false, + after_place_node = piston_orientate, + sounds = default.node_sound_wood_defaults(), + mesecons = {effector={ + action_on = piston_on, + rules = piston_get_rules, + }}, + on_rotate = piston_rotate, + on_blast = mesecon.on_blastnode, +}) + +-- onstate +minetest.register_node("mesecons_pistons:piston_normal_on", { + description = "Activated Piston Base", + drawtype = "nodebox", + tiles = { + "mesecons_piston_top.png", + "mesecons_piston_bottom.png", + "mesecons_piston_left.png", + "mesecons_piston_right.png", + "mesecons_piston_back.png", + "mesecons_piston_on_front.png" + }, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + drop = "mesecons_pistons:piston_normal_off", + after_dig_node = piston_remove_pusher, + node_box = piston_on_box, + selection_box = piston_on_box, + sounds = default.node_sound_wood_defaults(), + mesecons = {effector={ + action_off = piston_off, + rules = piston_get_rules, + }}, + on_rotate = piston_rotate_on, + on_blast = mesecon.on_blastnode, +}) + +-- pusher +minetest.register_node("mesecons_pistons:piston_pusher_normal", { + description = "Piston Pusher", + drawtype = "nodebox", + tiles = { + "mesecons_piston_pusher_top.png", + "mesecons_piston_pusher_bottom.png", + "mesecons_piston_pusher_left.png", + "mesecons_piston_pusher_right.png", + "mesecons_piston_pusher_back.png", + "mesecons_piston_pusher_front.png" + }, + groups = {not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + diggable = false, + selection_box = piston_pusher_box, + node_box = piston_pusher_box, + on_rotate = piston_rotate_pusher, + drop = "", +}) + +-- Sticky ones +-- offstate +minetest.register_node("mesecons_pistons:piston_sticky_off", { + description = "Sticky Piston", + tiles = { + "mesecons_piston_top.png", + "mesecons_piston_bottom.png", + "mesecons_piston_left.png", + "mesecons_piston_right.png", + "mesecons_piston_back.png", + "mesecons_piston_pusher_front_sticky.png" + }, + groups = {cracky = 3}, + paramtype2 = "facedir", + is_ground_content = false, + after_place_node = piston_orientate, + sounds = default.node_sound_wood_defaults(), + mesecons = {effector={ + action_on = piston_on, + rules = piston_get_rules, + }}, + on_rotate = piston_rotate, + on_blast = mesecon.on_blastnode, +}) + +-- onstate +minetest.register_node("mesecons_pistons:piston_sticky_on", { + description = "Activated Sticky Piston Base", + drawtype = "nodebox", + tiles = { + "mesecons_piston_top.png", + "mesecons_piston_bottom.png", + "mesecons_piston_left.png", + "mesecons_piston_right.png", + "mesecons_piston_back.png", + "mesecons_piston_on_front.png" + }, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + drop = "mesecons_pistons:piston_sticky_off", + after_dig_node = piston_remove_pusher, + node_box = piston_on_box, + selection_box = piston_on_box, + sounds = default.node_sound_wood_defaults(), + mesecons = {effector={ + action_off = piston_off, + rules = piston_get_rules, + }}, + on_rotate = piston_rotate_on, + on_blast = mesecon.on_blastnode, +}) + +-- pusher +minetest.register_node("mesecons_pistons:piston_pusher_sticky", { + description = "Sticky Piston Pusher", + drawtype = "nodebox", + tiles = { + "mesecons_piston_pusher_top.png", + "mesecons_piston_pusher_bottom.png", + "mesecons_piston_pusher_left.png", + "mesecons_piston_pusher_right.png", + "mesecons_piston_pusher_back.png", + "mesecons_piston_pusher_front_sticky.png" + }, + groups = {not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + diggable = false, + selection_box = piston_pusher_box, + node_box = piston_pusher_box, + on_rotate = piston_rotate_pusher, + drop = "", +}) + + +-- Register pushers as stoppers if they would be seperated from the piston +local function piston_pusher_get_stopper(node, dir, stack, stackid) + if (stack[stackid + 1] + and stack[stackid + 1].node.name == get_pistonspec(node.name, "pusher").onname + and stack[stackid + 1].node.param2 == node.param2) + or (stack[stackid - 1] + and stack[stackid - 1].node.name == get_pistonspec(node.name, "pusher").onname + and stack[stackid - 1].node.param2 == node.param2) then + return false + end + return true +end + +local function piston_pusher_up_down_get_stopper(node, dir, stack, stackid) + if (stack[stackid + 1] + and stack[stackid + 1].node.name == get_pistonspec(node.name, "pusher").onname) + or (stack[stackid - 1] + and stack[stackid - 1].node.name == get_pistonspec(node.name, "pusher").onname) then + return false + end + return true +end + +mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_normal", piston_pusher_get_stopper) +mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_sticky", piston_pusher_get_stopper) + + +-- Register pistons as stoppers if they would be seperated from the stopper +local piston_up_down_get_stopper = function (node, dir, stack, stackid) + if (stack[stackid + 1] + and stack[stackid + 1].node.name == get_pistonspec(node.name, "onname").pusher) + or (stack[stackid - 1] + and stack[stackid - 1].node.name == get_pistonspec(node.name, "onname").pusher) then + return false + end + return true +end + +local function piston_get_stopper(node, dir, stack, stackid) + local pistonspec = get_pistonspec(node.name, "onname") + local dir = vector.multiply(minetest.facedir_to_dir(node.param2), -1) + local pusherpos = vector.add(stack[stackid].pos, dir) + local pushernode = minetest.get_node(pusherpos) + if pistonspec.pusher == pushernode.name then + for _, s in ipairs(stack) do + if vector.equals(s.pos, pusherpos) -- pusher is also to be pushed + and s.node.param2 == node.param2 then + return false + end + end + end + return true +end + +mesecon.register_mvps_stopper("mesecons_pistons:piston_normal_on", piston_get_stopper) +mesecon.register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_get_stopper) + + +--craft recipes +minetest.register_craft({ + output = "mesecons_pistons:piston_normal_off 2", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"default:cobble", "default:steel_ingot", "default:cobble"}, + {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"}, + } +}) + +minetest.register_craft({ + output = "mesecons_pistons:piston_sticky_off", + recipe = { + {"mesecons_materials:glue"}, + {"mesecons_pistons:piston_normal_off"}, + } +}) + + +-- load legacy code +dofile(minetest.get_modpath("mesecons_pistons")..DIR_DELIM.."legacy.lua") diff --git a/mods/mesecons/mesecons_pistons/legacy.lua b/mods/mesecons/mesecons_pistons/legacy.lua new file mode 100755 index 0000000..0c6dcb3 --- /dev/null +++ b/mods/mesecons/mesecons_pistons/legacy.lua @@ -0,0 +1,48 @@ +local ground_dir = { + [0] = {x = 0, y = -1, z = 0}, + {x = 0, y = 0, z = -1}, + {x = 0, y = 0, z = 1}, + {x = -1, y = 0, z = 0}, + {x = 1, y = 0, z = 0}, + {x = 0, y = 1, z = 0}, +} + +minetest.register_lbm({ + label = "Upgrade legacy pistons pointing up", + name = "mesecons_pistons:replace_legacy_piston_up", + nodenames = { + "mesecons_pistons:piston_up_normal_off", + "mesecons_pistons:piston_up_normal_on", + "mesecons_pistons:piston_up_pusher_normal", + "mesecons_pistons:piston_up_sticky_off", + "mesecons_pistons:piston_up_sticky_on", + "mesecons_pistons:piston_up_pusher_sticky", + }, + run_at_every_load = false, + action = function(pos, node) + local dir = ground_dir[math.floor(node.param2/4)] + node.param2 = minetest.dir_to_facedir(dir, true) + node.name = node.name:sub(1, 24)..node.name:sub(28) + minetest.swap_node(pos, node) + end, +}) + +minetest.register_lbm({ + label = "Upgrade legacy pistons pointing down", + name = "mesecons_pistons:replace_legacy_piston_down", + nodenames = { + "mesecons_pistons:piston_down_normal_off", + "mesecons_pistons:piston_down_normal_on", + "mesecons_pistons:piston_down_pusher_normal", + "mesecons_pistons:piston_down_sticky_off", + "mesecons_pistons:piston_down_sticky_on", + "mesecons_pistons:piston_down_pusher_sticky", + }, + run_at_every_load = false, + action = function(pos, node) + local dir = vector.multiply(ground_dir[math.floor(node.param2/4)], -1) + node.param2 = minetest.dir_to_facedir(dir, true) + node.name = node.name:sub(1, 24)..node.name:sub(30) + minetest.swap_node(pos, node) + end, +}) diff --git a/mods/ITEMS/mesecons/mesecons_pistons/sounds/piston_extend.ogg b/mods/mesecons/mesecons_pistons/sounds/piston_extend.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/sounds/piston_extend.ogg rename to mods/mesecons/mesecons_pistons/sounds/piston_extend.ogg diff --git a/mods/ITEMS/mesecons/mesecons_pistons/sounds/piston_retract.ogg b/mods/mesecons/mesecons_pistons/sounds/piston_retract.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/sounds/piston_retract.ogg rename to mods/mesecons/mesecons_pistons/sounds/piston_retract.ogg diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_back.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_back.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_back.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_back.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_bottom.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_bottom.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_bottom.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_bottom.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_left.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_left.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_left.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_left.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_on_front.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_on_front.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_on_front.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_on_front.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_back.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_back.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_back.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_back.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_left.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_left.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_left.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_left.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_right.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_right.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_right.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_right.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_top.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_top.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_top.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_top.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_right.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_right.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_right.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_right.png diff --git a/mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_top.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_top.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pistons/textures/mesecons_piston_top.png rename to mods/mesecons/mesecons_pistons/textures/mesecons_piston_top.png diff --git a/mods/ITEMS/mesecons/mesecons_mvps/depends.txt b/mods/mesecons/mesecons_powerplant/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_mvps/depends.txt rename to mods/mesecons/mesecons_powerplant/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_powerplant/doc/powerplant/description.html b/mods/mesecons/mesecons_powerplant/doc/powerplant/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_powerplant/doc/powerplant/description.html rename to mods/mesecons/mesecons_powerplant/doc/powerplant/description.html diff --git a/mods/ITEMS/mesecons/mesecons_powerplant/doc/powerplant/preview.png b/mods/mesecons/mesecons_powerplant/doc/powerplant/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_powerplant/doc/powerplant/preview.png rename to mods/mesecons/mesecons_powerplant/doc/powerplant/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_powerplant/doc/powerplant/recipe.png b/mods/mesecons/mesecons_powerplant/doc/powerplant/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_powerplant/doc/powerplant/recipe.png rename to mods/mesecons/mesecons_powerplant/doc/powerplant/recipe.png diff --git a/mods/mesecons/mesecons_powerplant/init.lua b/mods/mesecons/mesecons_powerplant/init.lua new file mode 100755 index 0000000..28cad25 --- /dev/null +++ b/mods/mesecons/mesecons_powerplant/init.lua @@ -0,0 +1,33 @@ +-- The POWER_PLANT +-- Just emits power. always. + +minetest.register_node("mesecons_powerplant:power_plant", { + drawtype = "plantlike", + visual_scale = 1, + tiles = {"jeija_power_plant.png"}, + inventory_image = "jeija_power_plant.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + groups = {dig_immediate=3, mesecon = 2}, + light_source = default.LIGHT_MAX-9, + description="Power Plant", + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, -0.5+0.7, 0.3}, + }, + sounds = default.node_sound_leaves_defaults(), + mesecons = {receptor = { + state = mesecon.state.on + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_craft({ + output = "mesecons_powerplant:power_plant 1", + recipe = { + {"group:mesecon_conductor_craftable"}, + {"group:mesecon_conductor_craftable"}, + {"group:sapling"}, + } +}) diff --git a/mods/ITEMS/mesecons/mesecons_powerplant/textures/jeija_power_plant.png b/mods/mesecons/mesecons_powerplant/textures/jeija_power_plant.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_powerplant/textures/jeija_power_plant.png rename to mods/mesecons/mesecons_powerplant/textures/jeija_power_plant.png diff --git a/mods/ITEMS/mesecons/mesecons_noteblock/depends.txt b/mods/mesecons/mesecons_pressureplates/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_noteblock/depends.txt rename to mods/mesecons/mesecons_pressureplates/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_stone/description.html b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_stone/description.html rename to mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/description.html diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_stone/preview.png b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_stone/preview.png rename to mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_stone/recipe.png b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_stone/recipe.png rename to mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_wood/description.html b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_wood/description.html rename to mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/description.html diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_wood/preview.png b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_wood/preview.png rename to mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_wood/recipe.png b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/doc/pressureplate_wood/recipe.png rename to mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/recipe.png diff --git a/mods/mesecons/mesecons_pressureplates/init.lua b/mods/mesecons/mesecons_pressureplates/init.lua new file mode 100755 index 0000000..6337941 --- /dev/null +++ b/mods/mesecons/mesecons_pressureplates/init.lua @@ -0,0 +1,95 @@ +local pp_box_off = { + type = "fixed", + fixed = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, +} + +local pp_box_on = { + type = "fixed", + fixed = { -7/16, -8/16, -7/16, 7/16, -7.5/16, 7/16 }, +} + +local function pp_on_timer(pos, elapsed) + local node = minetest.get_node(pos) + local basename = minetest.registered_nodes[node.name].pressureplate_basename + + -- This is a workaround for a strange bug that occurs when the server is started + -- For some reason the first time on_timer is called, the pos is wrong + if not basename then return end + + local objs = minetest.get_objects_inside_radius(pos, 1) + local two_below = vector.add(pos, vector.new(0, -2, 0)) + + if objs[1] == nil and node.name == basename .. "_on" then + minetest.set_node(pos, {name = basename .. "_off"}) + mesecon.receptor_off(pos, mesecon.rules.pplate) + elseif node.name == basename .. "_off" then + for k, obj in pairs(objs) do + local objpos = obj:getpos() + if objpos.y > pos.y-1 and objpos.y < pos.y then + minetest.set_node(pos, {name = basename .. "_on"}) + mesecon.receptor_on(pos, mesecon.rules.pplate ) + end + end + end + return true +end + +-- Register a Pressure Plate +-- offstate: name of the pressure plate when inactive +-- onstate: name of the pressure plate when active +-- description: description displayed in the player's inventory +-- tiles_off: textures of the pressure plate when inactive +-- tiles_on: textures of the pressure plate when active +-- image: inventory and wield image of the pressure plate +-- recipe: crafting recipe of the pressure plate + +function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe) + mesecon.register_node(basename, { + drawtype = "nodebox", + inventory_image = image_i, + wield_image = image_w, + paramtype = "light", + is_ground_content = false, + description = description, + pressureplate_basename = basename, + on_timer = pp_on_timer, + on_construct = function(pos) + minetest.get_node_timer(pos):start(mesecon.setting("pplate_interval", 0.1)) + end, + },{ + mesecons = {receptor = { state = mesecon.state.off, rules = mesecon.rules.pplate }}, + node_box = pp_box_off, + selection_box = pp_box_off, + groups = {snappy = 2, oddly_breakable_by_hand = 3}, + tiles = textures_off + },{ + mesecons = {receptor = { state = mesecon.state.on, rules = mesecon.rules.pplate }}, + node_box = pp_box_on, + selection_box = pp_box_on, + groups = {snappy = 2, oddly_breakable_by_hand = 3, not_in_creative_inventory = 1}, + tiles = textures_on + }) + + minetest.register_craft({ + output = basename .. "_off", + recipe = recipe, + }) +end + +mesecon.register_pressure_plate( + "mesecons_pressureplates:pressure_plate_wood", + "Wooden Pressure Plate", + {"jeija_pressure_plate_wood_off.png","jeija_pressure_plate_wood_off.png","jeija_pressure_plate_wood_off_edges.png"}, + {"jeija_pressure_plate_wood_on.png","jeija_pressure_plate_wood_on.png","jeija_pressure_plate_wood_on_edges.png"}, + "jeija_pressure_plate_wood_wield.png", + "jeija_pressure_plate_wood_inv.png", + {{"group:wood", "group:wood"}}) + +mesecon.register_pressure_plate( + "mesecons_pressureplates:pressure_plate_stone", + "Stone Pressure Plate", + {"jeija_pressure_plate_stone_off.png","jeija_pressure_plate_stone_off.png","jeija_pressure_plate_stone_off_edges.png"}, + {"jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on_edges.png"}, + "jeija_pressure_plate_stone_wield.png", + "jeija_pressure_plate_stone_inv.png", + {{"default:cobble", "default:cobble"}}) diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_inv.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_inv.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_inv.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_inv.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off_edges.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off_edges.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off_edges.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off_edges.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on_edges.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on_edges.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on_edges.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on_edges.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_wield.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_wield.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_wield.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_wield.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_inv.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_inv.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_inv.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_inv.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off_edges.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off_edges.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off_edges.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off_edges.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on_edges.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on_edges.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on_edges.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on_edges.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_wield.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_wield.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_wield.png rename to mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_wield.png diff --git a/mods/ITEMS/mesecons/mesecons_powerplant/depends.txt b/mods/mesecons/mesecons_random/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_powerplant/depends.txt rename to mods/mesecons/mesecons_random/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_random/doc/ghoststone/description.html b/mods/mesecons/mesecons_random/doc/ghoststone/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/doc/ghoststone/description.html rename to mods/mesecons/mesecons_random/doc/ghoststone/description.html diff --git a/mods/ITEMS/mesecons/mesecons_random/doc/ghoststone/preview.png b/mods/mesecons/mesecons_random/doc/ghoststone/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/doc/ghoststone/preview.png rename to mods/mesecons/mesecons_random/doc/ghoststone/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_random/doc/ghoststone/recipe.png b/mods/mesecons/mesecons_random/doc/ghoststone/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/doc/ghoststone/recipe.png rename to mods/mesecons/mesecons_random/doc/ghoststone/recipe.png diff --git a/mods/ITEMS/mesecons/mesecons_random/doc/removestone/description.html b/mods/mesecons/mesecons_random/doc/removestone/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/doc/removestone/description.html rename to mods/mesecons/mesecons_random/doc/removestone/description.html diff --git a/mods/ITEMS/mesecons/mesecons_random/doc/removestone/preview.png b/mods/mesecons/mesecons_random/doc/removestone/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/doc/removestone/preview.png rename to mods/mesecons/mesecons_random/doc/removestone/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_random/doc/removestone/recipe.png b/mods/mesecons/mesecons_random/doc/removestone/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/doc/removestone/recipe.png rename to mods/mesecons/mesecons_random/doc/removestone/recipe.png diff --git a/mods/mesecons/mesecons_random/init.lua b/mods/mesecons/mesecons_random/init.lua new file mode 100755 index 0000000..0536007 --- /dev/null +++ b/mods/mesecons/mesecons_random/init.lua @@ -0,0 +1,78 @@ +-- REMOVESTONE + +minetest.register_node("mesecons_random:removestone", { + tiles = {"jeija_removestone.png"}, + is_ground_content = false, + inventory_image = minetest.inventorycube("jeija_removestone_inv.png"), + groups = {cracky=3}, + description="Removestone", + sounds = default.node_sound_stone_defaults(), + mesecons = {effector = { + action_on = function (pos, node) + minetest.remove_node(pos) + mesecon.on_dignode(pos, node) + minetest.check_for_falling(vector.add(pos, vector.new(0, 1, 0))) + end + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_craft({ + output = 'mesecons_random:removestone 4', + recipe = { + {"", "default:cobble", ""}, + {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"}, + {"", "default:cobble", ""}, + } +}) + +-- GHOSTSTONE + +minetest.register_node("mesecons_random:ghoststone", { + description="Ghoststone", + tiles = {"jeija_ghoststone.png"}, + is_ground_content = false, + inventory_image = minetest.inventorycube("jeija_ghoststone_inv.png"), + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), + mesecons = {conductor = { + state = mesecon.state.off, + rules = mesecon.rules.alldirs, + onstate = "mesecons_random:ghoststone_active" + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_random:ghoststone_active", { + drawtype = "airlike", + pointable = false, + walkable = false, + diggable = false, + is_ground_content = false, + sunlight_propagates = true, + paramtype = "light", + drop = "mesecons_random:ghoststone", + mesecons = {conductor = { + state = mesecon.state.on, + rules = mesecon.rules.alldirs, + offstate = "mesecons_random:ghoststone" + }}, + on_construct = function(pos) + -- remove shadow + shadowpos = vector.add(pos, vector.new(0, 1, 0)) + if (minetest.get_node(shadowpos).name == "air") then + minetest.dig_node(shadowpos) + end + end, + on_blast = mesecon.on_blastnode, +}) + + +minetest.register_craft({ + output = 'mesecons_random:ghoststone 4', + recipe = { + {"default:steel_ingot", "default:cobble", "default:steel_ingot"}, + {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"}, + {"default:steel_ingot", "default:cobble", "default:steel_ingot"}, + } +}) diff --git a/mods/ITEMS/mesecons/mesecons_random/textures/jeija_ghoststone.png b/mods/mesecons/mesecons_random/textures/jeija_ghoststone.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/textures/jeija_ghoststone.png rename to mods/mesecons/mesecons_random/textures/jeija_ghoststone.png diff --git a/mods/ITEMS/mesecons/mesecons_random/textures/jeija_ghoststone_inv.png b/mods/mesecons/mesecons_random/textures/jeija_ghoststone_inv.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/textures/jeija_ghoststone_inv.png rename to mods/mesecons/mesecons_random/textures/jeija_ghoststone_inv.png diff --git a/mods/ITEMS/mesecons/mesecons_random/textures/jeija_removestone.png b/mods/mesecons/mesecons_random/textures/jeija_removestone.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/textures/jeija_removestone.png rename to mods/mesecons/mesecons_random/textures/jeija_removestone.png diff --git a/mods/ITEMS/mesecons/mesecons_random/textures/jeija_removestone_inv.png b/mods/mesecons/mesecons_random/textures/jeija_removestone_inv.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/textures/jeija_removestone_inv.png rename to mods/mesecons/mesecons_random/textures/jeija_removestone_inv.png diff --git a/mods/ITEMS/mesecons/mesecons_pressureplates/depends.txt b/mods/mesecons/mesecons_receiver/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_pressureplates/depends.txt rename to mods/mesecons/mesecons_receiver/depends.txt diff --git a/mods/mesecons/mesecons_receiver/init.lua b/mods/mesecons/mesecons_receiver/init.lua new file mode 100755 index 0000000..edf6622 --- /dev/null +++ b/mods/mesecons/mesecons_receiver/init.lua @@ -0,0 +1,262 @@ +local rcvboxes = { + { -3/16, -3/16, -8/16 , 3/16, 3/16 , -13/32 }, -- the smaller bump + { -1/32, -1/32, -3/2 , 1/32, 1/32 , -1/2 }, -- the wire through the block + { -2/32, -1/2 , -.5 , 2/32, 0 , -.5002+3/32 }, -- the vertical wire bit + { -2/32, -1/2 , -7/16+0.002 , 2/32, -14/32, 16/32+0.001 } -- the horizontal wire +} + +local down_rcvboxes = { + {-6/16, -8/16, -6/16, 6/16, -7/16, 6/16}, -- Top plate + {-2/16, -6/16, -2/16, 2/16, -7/16, 2/16}, -- Bump + {-1/16, -8/16, -1/16, 1/16, -24/16, 1/16}, -- Wire through the block + {-1/16, -8/16, 6/16, 1/16, -7/16, 8/16}, -- Plate extension (North) + {-1/16, -8/16, -6/16, 1/16, -7/16, -8/16}, -- Plate extension (South) + {-8/16, -8/16, 1/16, -6/16, -7/16, -1/16}, -- Plate extension (West) + {6/16, -8/16, 1/16, 8/16, -7/16, -1/16}, -- Plate extension (East) +} + +local up_rcvboxes = { + {-6/16, -8/16, -6/16, 6/16, -7/16, 6/16}, -- Top plate + {-2/16, -6/16, -2/16, 2/16, -7/16, 2/16}, -- Bump + {-1/16, -6/16, -1/16, 1/16, 24/16, 1/16}, -- Wire through the block + {-1/16, -8/16, 6/16, 1/16, -7/16, 8/16}, -- Plate extension (North) + {-1/16, -8/16, -6/16, 1/16, -7/16, -8/16}, -- Plate extension (South) + {-8/16, -8/16, 1/16, -6/16, -7/16, -1/16}, -- Plate extension (West) + {6/16, -8/16, 1/16, 8/16, -7/16, -1/16}, -- Plate extension (East) +} + +local receiver_get_rules = function (node) + local rules = { {x = 1, y = 0, z = 0}, + {x = -2, y = 0, z = 0}} + if node.param2 == 2 then + rules = mesecon.rotate_rules_left(rules) + elseif node.param2 == 3 then + rules = mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) + elseif node.param2 == 0 then + rules = mesecon.rotate_rules_right(rules) + end + return rules +end + +mesecon.register_node("mesecons_receiver:receiver", { + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + on_rotate = false, + selection_box = { + type = "fixed", + fixed = { -3/16, -8/16, -8/16, 3/16, 3/16, 8/16 } + }, + node_box = { + type = "fixed", + fixed = rcvboxes + }, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, + drop = "mesecons:wire_00000000_off", +}, { + tiles = { + "receiver_top_off.png", + "receiver_bottom_off.png", + "receiver_lr_off.png", + "receiver_lr_off.png", + "receiver_fb_off.png", + "receiver_fb_off.png", + }, + mesecons = {conductor = { + state = mesecon.state.off, + rules = receiver_get_rules, + onstate = "mesecons_receiver:receiver_on" + }} +}, { + tiles = { + "receiver_top_on.png", + "receiver_bottom_on.png", + "receiver_lr_on.png", + "receiver_lr_on.png", + "receiver_fb_on.png", + "receiver_fb_on.png", + }, + mesecons = {conductor = { + state = mesecon.state.on, + rules = receiver_get_rules, + offstate = "mesecons_receiver:receiver_off" + }} +}) + +mesecon.register_node("mesecons_receiver:receiver_up", { + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + on_rotate = false, + selection_box = { + type = "fixed", + fixed = up_rcvboxes + }, + node_box = { + type = "fixed", + fixed = up_rcvboxes + }, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, + drop = "mesecons:wire_00000000_off", +}, { + tiles = {"mesecons_wire_off.png"}, + mesecons = {conductor = { + state = mesecon.state.off, + rules = {{x=1, y=0, z=0}, + {x=-1, y=0, z=0}, + {x=0, y=0, z=1}, + {x=0, y=0, z=-1}, + {x=0, y=1, z=0}, + {x=0, y=2, z=0}}, + onstate = "mesecons_receiver:receiver_up_on" + }} +}, { + tiles = {"mesecons_wire_on.png"}, + mesecons = {conductor = { + state = mesecon.state.on, + rules = {{x=1, y=0, z=0}, + {x=-1, y=0, z=0}, + {x=0, y=0, z=1}, + {x=0, y=0, z=-1}, + {x=0, y=1, z=0}, + {x=0, y=2, z=0}}, + offstate = "mesecons_receiver:receiver_up_off" + }} +}) + +mesecon.register_node("mesecons_receiver:receiver_down", { + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + on_rotate = false, + selection_box = { + type = "fixed", + fixed = down_rcvboxes + }, + node_box = { + type = "fixed", + fixed = down_rcvboxes + }, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, + drop = "mesecons:wire_00000000_off", +}, { + tiles = {"mesecons_wire_off.png"}, + mesecons = {conductor = { + state = mesecon.state.off, + rules = {{x=1,y=0, z=0}, + {x=-1,y=0, z=0}, + {x=0, y=0, z=1}, + {x=0, y=0, z=-1}, + {x=0, y=-2,z=0}}, + onstate = "mesecons_receiver:receiver_down_on" + }} +}, { + tiles = {"mesecons_wire_on.png"}, + mesecons = {conductor = { + state = mesecon.state.on, + rules = {{x=1,y=0, z=0}, + {x=-1,y=0, z=0}, + {x=0, y=0, z=1}, + {x=0, y=0, z=-1}, + {x=0, y=-2,z=0}}, + offstate = "mesecons_receiver:receiver_down_off" + }} +}) + +function mesecon.receiver_get_pos_from_rcpt(pos, param2) + local rules = {{x = 2, y = 0, z = 0}} + if param2 == nil then param2 = minetest.get_node(pos).param2 end + local rcvtype = "mesecons_receiver:receiver_off" + local dir = minetest.facedir_to_dir(param2) + + if dir.x == 1 then + -- No action needed + elseif dir.z == -1 then + rules = mesecon.rotate_rules_left(rules) + elseif dir.x == -1 then + rules = mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) + elseif dir.z == 1 then + rules = mesecon.rotate_rules_right(rules) + elseif dir.y == -1 then + rules = mesecon.rotate_rules_up(rules) + rcvtype = "mesecons_receiver:receiver_up_off" + elseif dir.y == 1 then + rules = mesecon.rotate_rules_down(rules) + rcvtype = "mesecons_receiver:receiver_down_off" + end + local np = { x = pos.x + rules[1].x, + y = pos.y + rules[1].y, + z = pos.z + rules[1].z} + return np, rcvtype +end + +function mesecon.receiver_place(rcpt_pos) + local node = minetest.get_node(rcpt_pos) + local pos, rcvtype = mesecon.receiver_get_pos_from_rcpt(rcpt_pos, node.param2) + local nn = minetest.get_node(pos) + local param2 = minetest.dir_to_facedir(minetest.facedir_to_dir(node.param2)) + + if string.find(nn.name, "mesecons:wire_") ~= nil then + minetest.dig_node(pos) + minetest.set_node(pos, {name = rcvtype, param2 = param2}) + mesecon.on_placenode(pos, nn) + end +end + +function mesecon.receiver_remove(rcpt_pos, dugnode) + local pos = mesecon.receiver_get_pos_from_rcpt(rcpt_pos, dugnode.param2) + local nn = minetest.get_node(pos) + if string.find(nn.name, "mesecons_receiver:receiver_") ~=nil then + minetest.dig_node(pos) + local node = {name = "mesecons:wire_00000000_off"} + minetest.set_node(pos, node) + mesecon.on_placenode(pos, node) + end +end + +minetest.register_on_placenode(function (pos, node) + if minetest.get_item_group(node.name, "mesecon_needs_receiver") == 1 then + mesecon.receiver_place(pos) + end +end) + +minetest.register_on_dignode(function(pos, node) + if minetest.get_item_group(node.name, "mesecon_needs_receiver") == 1 then + mesecon.receiver_remove(pos, node) + end +end) + +minetest.register_on_placenode(function (pos, node) + if string.find(node.name, "mesecons:wire_") ~= nil then + local rules = { {x = 2, y = 0, z = 0}, + {x =-2, y = 0, z = 0}, + {x = 0, y = 0, z = 2}, + {x = 0, y = 0, z =-2}, + {x = 0, y = 2, z = 0}, + {x = 0, y = -2, z = 0}} + local i = 1 + while rules[i] ~= nil do + local np = { x = pos.x + rules[i].x, + y = pos.y + rules[i].y, + z = pos.z + rules[i].z} + if minetest.get_item_group(minetest.get_node(np).name, "mesecon_needs_receiver") == 1 then + mesecon.receiver_place(np) + end + i = i + 1 + end + end +end) + +function mesecon.buttonlike_onrotate(pos, node) + minetest.after(0, mesecon.receiver_remove, pos, node) + minetest.after(0, mesecon.receiver_place, pos) +end diff --git a/mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_bottom_off.png b/mods/mesecons/mesecons_receiver/textures/receiver_bottom_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_bottom_off.png rename to mods/mesecons/mesecons_receiver/textures/receiver_bottom_off.png diff --git a/mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_bottom_on.png b/mods/mesecons/mesecons_receiver/textures/receiver_bottom_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_bottom_on.png rename to mods/mesecons/mesecons_receiver/textures/receiver_bottom_on.png diff --git a/mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_fb_off.png b/mods/mesecons/mesecons_receiver/textures/receiver_fb_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_fb_off.png rename to mods/mesecons/mesecons_receiver/textures/receiver_fb_off.png diff --git a/mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_fb_on.png b/mods/mesecons/mesecons_receiver/textures/receiver_fb_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_fb_on.png rename to mods/mesecons/mesecons_receiver/textures/receiver_fb_on.png diff --git a/mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_lr_off.png b/mods/mesecons/mesecons_receiver/textures/receiver_lr_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_lr_off.png rename to mods/mesecons/mesecons_receiver/textures/receiver_lr_off.png diff --git a/mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_lr_on.png b/mods/mesecons/mesecons_receiver/textures/receiver_lr_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_lr_on.png rename to mods/mesecons/mesecons_receiver/textures/receiver_lr_on.png diff --git a/mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_top_off.png b/mods/mesecons/mesecons_receiver/textures/receiver_top_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_top_off.png rename to mods/mesecons/mesecons_receiver/textures/receiver_top_off.png diff --git a/mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_top_on.png b/mods/mesecons/mesecons_receiver/textures/receiver_top_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_receiver/textures/receiver_top_on.png rename to mods/mesecons/mesecons_receiver/textures/receiver_top_on.png diff --git a/mods/ITEMS/mesecons/mesecons_solarpanel/depends.txt b/mods/mesecons/mesecons_solarpanel/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_solarpanel/depends.txt rename to mods/mesecons/mesecons_solarpanel/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_solarpanel/doc/solarpanel/description.html b/mods/mesecons/mesecons_solarpanel/doc/solarpanel/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_solarpanel/doc/solarpanel/description.html rename to mods/mesecons/mesecons_solarpanel/doc/solarpanel/description.html diff --git a/mods/ITEMS/mesecons/mesecons_solarpanel/doc/solarpanel/preview.png b/mods/mesecons/mesecons_solarpanel/doc/solarpanel/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_solarpanel/doc/solarpanel/preview.png rename to mods/mesecons/mesecons_solarpanel/doc/solarpanel/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_solarpanel/doc/solarpanel/recipe.png b/mods/mesecons/mesecons_solarpanel/doc/solarpanel/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_solarpanel/doc/solarpanel/recipe.png rename to mods/mesecons/mesecons_solarpanel/doc/solarpanel/recipe.png diff --git a/mods/mesecons/mesecons_solarpanel/init.lua b/mods/mesecons/mesecons_solarpanel/init.lua new file mode 100755 index 0000000..ccc5882 --- /dev/null +++ b/mods/mesecons/mesecons_solarpanel/init.lua @@ -0,0 +1,101 @@ +-- Solar Panel +minetest.register_node("mesecons_solarpanel:solar_panel_on", { + drawtype = "nodebox", + tiles = { "jeija_solar_panel.png", }, + inventory_image = "jeija_solar_panel.png", + wield_image = "jeija_solar_panel.png", + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + is_ground_content = false, + node_box = { + type = "wallmounted", + wall_bottom = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, + wall_top = { -7/16, 7/16, -7/16, 7/16, 8/16, 7/16 }, + wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 }, + }, + selection_box = { + type = "wallmounted", + wall_bottom = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, + wall_top = { -7/16, 7/16, -7/16, 7/16, 8/16, 7/16 }, + wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 }, + }, + drop = "mesecons_solarpanel:solar_panel_off", + groups = {dig_immediate=3, not_in_creative_inventory = 1}, + sounds = default.node_sound_glass_defaults(), + mesecons = {receptor = { + state = mesecon.state.on, + rules = mesecon.rules.wallmounted_get, + }}, + on_blast = mesecon.on_blastnode, +}) + +-- Solar Panel +minetest.register_node("mesecons_solarpanel:solar_panel_off", { + drawtype = "nodebox", + tiles = { "jeija_solar_panel.png", }, + inventory_image = "jeija_solar_panel.png", + wield_image = "jeija_solar_panel.png", + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + is_ground_content = false, + node_box = { + type = "wallmounted", + wall_bottom = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, + wall_top = { -7/16, 7/16, -7/16, 7/16, 8/16, 7/16 }, + wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 }, + }, + selection_box = { + type = "wallmounted", + wall_bottom = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, + wall_top = { -7/16, 7/16, -7/16, 7/16, 8/16, 7/16 }, + wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 }, + }, + groups = {dig_immediate=3}, + description = "Solar Panel", + sounds = default.node_sound_glass_defaults(), + mesecons = {receptor = { + state = mesecon.state.off, + rules = mesecon.rules.wallmounted_get, + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_craft({ + output = "mesecons_solarpanel:solar_panel_off 1", + recipe = { + {"mesecons_materials:silicon", "mesecons_materials:silicon"}, + {"mesecons_materials:silicon", "mesecons_materials:silicon"}, + } +}) + +minetest.register_abm( + {nodenames = {"mesecons_solarpanel:solar_panel_off"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local light = minetest.get_node_light(pos, nil) + + if light >= 12 then + node.name = "mesecons_solarpanel:solar_panel_on" + minetest.swap_node(pos, node) + mesecon.receptor_on(pos, mesecon.rules.wallmounted_get(node)) + end + end, +}) + +minetest.register_abm( + {nodenames = {"mesecons_solarpanel:solar_panel_on"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local light = minetest.get_node_light(pos, nil) + + if light < 12 then + node.name = "mesecons_solarpanel:solar_panel_off" + minetest.swap_node(pos, node) + mesecon.receptor_off(pos, mesecon.rules.wallmounted_get(node)) + end + end, +}) diff --git a/mods/ITEMS/mesecons/mesecons_solarpanel/textures/jeija_solar_panel.png b/mods/mesecons/mesecons_solarpanel/textures/jeija_solar_panel.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_solarpanel/textures/jeija_solar_panel.png rename to mods/mesecons/mesecons_solarpanel/textures/jeija_solar_panel.png diff --git a/mods/ITEMS/mesecons/mesecons_stickyblocks/depends.txt b/mods/mesecons/mesecons_stickyblocks/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_stickyblocks/depends.txt rename to mods/mesecons/mesecons_stickyblocks/depends.txt diff --git a/mods/mesecons/mesecons_stickyblocks/init.lua b/mods/mesecons/mesecons_stickyblocks/init.lua new file mode 100755 index 0000000..094af09 --- /dev/null +++ b/mods/mesecons/mesecons_stickyblocks/init.lua @@ -0,0 +1,19 @@ +-- Sticky blocks can be used together with pistons or movestones to push / pull +-- structures that are "glued" together using sticky blocks + +-- All sides sticky block +minetest.register_node("mesecons_stickyblocks:sticky_block_all", { + -- TODO: Rename to “All-Faces Sticky Block” when other sticky blocks become available + description = "Sticky Block", + tiles = {"mesecons_stickyblocks_sticky.png"}, + is_ground_content = false, + groups = {choppy=3, oddly_breakable_by_hand=2}, + mvps_sticky = function (pos, node) + local connected = {} + for _, r in ipairs(mesecon.rules.alldirs) do + table.insert(connected, vector.add(pos, r)) + end + return connected + end, + sounds = default.node_sound_wood_defaults(), +}) diff --git a/mods/mesecons/mesecons_stickyblocks/textures/mesecons_stickyblocks_sticky.png b/mods/mesecons/mesecons_stickyblocks/textures/mesecons_stickyblocks_sticky.png new file mode 100755 index 0000000..3a5f6f1 Binary files /dev/null and b/mods/mesecons/mesecons_stickyblocks/textures/mesecons_stickyblocks_sticky.png differ diff --git a/mods/ITEMS/mesecons/mesecons_random/depends.txt b/mods/mesecons/mesecons_switch/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_random/depends.txt rename to mods/mesecons/mesecons_switch/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_switch/doc/switch/description.html b/mods/mesecons/mesecons_switch/doc/switch/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_switch/doc/switch/description.html rename to mods/mesecons/mesecons_switch/doc/switch/description.html diff --git a/mods/ITEMS/mesecons/mesecons_switch/doc/switch/preview.png b/mods/mesecons/mesecons_switch/doc/switch/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_switch/doc/switch/preview.png rename to mods/mesecons/mesecons_switch/doc/switch/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_switch/doc/switch/recipe.png b/mods/mesecons/mesecons_switch/doc/switch/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_switch/doc/switch/recipe.png rename to mods/mesecons/mesecons_switch/doc/switch/recipe.png diff --git a/mods/mesecons/mesecons_switch/init.lua b/mods/mesecons/mesecons_switch/init.lua new file mode 100755 index 0000000..7f42253 --- /dev/null +++ b/mods/mesecons/mesecons_switch/init.lua @@ -0,0 +1,36 @@ +-- mesecons_switch + +mesecon.register_node("mesecons_switch:mesecon_switch", { + paramtype2="facedir", + description="Switch", + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + on_rightclick = function (pos, node) + if(mesecon.flipstate(pos, node) == "on") then + mesecon.receptor_on(pos) + else + mesecon.receptor_off(pos) + end + minetest.sound_play("mesecons_switch", {pos=pos}) + end +},{ + groups = {dig_immediate=2}, + tiles = { "mesecons_switch_side.png", "mesecons_switch_side.png", + "mesecons_switch_side.png", "mesecons_switch_side.png", + "mesecons_switch_side.png", "mesecons_switch_off.png"}, + mesecons = {receptor = { state = mesecon.state.off }} +},{ + groups = {dig_immediate=2, not_in_creative_inventory=1}, + tiles = { "mesecons_switch_side.png", "mesecons_switch_side.png", + "mesecons_switch_side.png", "mesecons_switch_side.png", + "mesecons_switch_side.png", "mesecons_switch_on.png"}, + mesecons = {receptor = { state = mesecon.state.on }} +}) + +minetest.register_craft({ + output = "mesecons_switch:mesecon_switch_off 2", + recipe = { + {"default:steel_ingot", "default:cobble", "default:steel_ingot"}, + {"group:mesecon_conductor_craftable","", "group:mesecon_conductor_craftable"}, + } +}) diff --git a/mods/ITEMS/mesecons/mesecons_switch/sounds/mesecons_switch.ogg b/mods/mesecons/mesecons_switch/sounds/mesecons_switch.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_switch/sounds/mesecons_switch.ogg rename to mods/mesecons/mesecons_switch/sounds/mesecons_switch.ogg diff --git a/mods/ITEMS/mesecons/mesecons_switch/textures/mesecons_switch_off.png b/mods/mesecons/mesecons_switch/textures/mesecons_switch_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_switch/textures/mesecons_switch_off.png rename to mods/mesecons/mesecons_switch/textures/mesecons_switch_off.png diff --git a/mods/ITEMS/mesecons/mesecons_switch/textures/mesecons_switch_on.png b/mods/mesecons/mesecons_switch/textures/mesecons_switch_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_switch/textures/mesecons_switch_on.png rename to mods/mesecons/mesecons_switch/textures/mesecons_switch_on.png diff --git a/mods/ITEMS/mesecons/mesecons_switch/textures/mesecons_switch_side.png b/mods/mesecons/mesecons_switch/textures/mesecons_switch_side.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_switch/textures/mesecons_switch_side.png rename to mods/mesecons/mesecons_switch/textures/mesecons_switch_side.png diff --git a/mods/ITEMS/mesecons/mesecons_receiver/depends.txt b/mods/mesecons/mesecons_torch/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_receiver/depends.txt rename to mods/mesecons/mesecons_torch/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_torch/doc/torch/description.html b/mods/mesecons/mesecons_torch/doc/torch/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_torch/doc/torch/description.html rename to mods/mesecons/mesecons_torch/doc/torch/description.html diff --git a/mods/ITEMS/mesecons/mesecons_torch/doc/torch/preview.png b/mods/mesecons/mesecons_torch/doc/torch/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_torch/doc/torch/preview.png rename to mods/mesecons/mesecons_torch/doc/torch/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_torch/doc/torch/recipe.png b/mods/mesecons/mesecons_torch/doc/torch/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_torch/doc/torch/recipe.png rename to mods/mesecons/mesecons_torch/doc/torch/recipe.png diff --git a/mods/mesecons/mesecons_torch/init.lua b/mods/mesecons/mesecons_torch/init.lua new file mode 100755 index 0000000..5f1d25a --- /dev/null +++ b/mods/mesecons/mesecons_torch/init.lua @@ -0,0 +1,122 @@ +--MESECON TORCHES + +local rotate_torch_rules = function (rules, param2) + if param2 == 5 then + return mesecon.rotate_rules_right(rules) + elseif param2 == 2 then + return mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) --180 degrees + elseif param2 == 4 then + return mesecon.rotate_rules_left(rules) + elseif param2 == 1 then + return mesecon.rotate_rules_down(rules) + elseif param2 == 0 then + return mesecon.rotate_rules_up(rules) + else + return rules + end +end + +local torch_get_output_rules = function(node) + local rules = { + {x = 1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z =-1}, + {x = 0, y = 1, z = 0}, + {x = 0, y =-1, z = 0}} + + return rotate_torch_rules(rules, node.param2) +end + +local torch_get_input_rules = function(node) + local rules = {{x = -2, y = 0, z = 0}, + {x = -1, y = 1, z = 0}} + + return rotate_torch_rules(rules, node.param2) +end + +minetest.register_craft({ + output = "mesecons_torch:mesecon_torch_on 4", + recipe = { + {"group:mesecon_conductor_craftable"}, + {"default:stick"},} +}) + +local torch_selectionbox = +{ + type = "wallmounted", + wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1}, + wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1}, + wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1}, +} + +minetest.register_node("mesecons_torch:mesecon_torch_off", { + drawtype = "torchlike", + tiles = {"jeija_torches_off.png", "jeija_torches_off_ceiling.png", "jeija_torches_off_side.png"}, + inventory_image = "jeija_torches_off.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + paramtype2 = "wallmounted", + selection_box = torch_selectionbox, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, + drop = "mesecons_torch:mesecon_torch_on", + mesecons = {receptor = { + state = mesecon.state.off, + rules = torch_get_output_rules + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_node("mesecons_torch:mesecon_torch_on", { + drawtype = "torchlike", + tiles = {"jeija_torches_on.png", "jeija_torches_on_ceiling.png", "jeija_torches_on_side.png"}, + inventory_image = "jeija_torches_on.png", + wield_image = "jeija_torches_on.png", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + paramtype2 = "wallmounted", + selection_box = torch_selectionbox, + groups = {dig_immediate=3}, + light_source = default.LIGHT_MAX-5, + description="Mesecon Torch", + mesecons = {receptor = { + state = mesecon.state.on, + rules = torch_get_output_rules + }}, + on_blast = mesecon.on_blastnode, +}) + +minetest.register_abm({ + nodenames = {"mesecons_torch:mesecon_torch_off","mesecons_torch:mesecon_torch_on"}, + interval = 1, + chance = 1, + action = function(pos, node) + local is_powered = false + for _, rule in ipairs(torch_get_input_rules(node)) do + local src = vector.add(pos, rule) + if mesecon.is_power_on(src) then + is_powered = true + end + end + + if is_powered then + if node.name == "mesecons_torch:mesecon_torch_on" then + minetest.swap_node(pos, {name = "mesecons_torch:mesecon_torch_off", param2 = node.param2}) + mesecon.receptor_off(pos, torch_get_output_rules(node)) + end + elseif node.name == "mesecons_torch:mesecon_torch_off" then + minetest.swap_node(pos, {name = "mesecons_torch:mesecon_torch_on", param2 = node.param2}) + mesecon.receptor_on(pos, torch_get_output_rules(node)) + end + end +}) + +-- Param2 Table (Block Attached To) +-- 5 = z-1 +-- 3 = x-1 +-- 4 = z+1 +-- 2 = x+1 +-- 0 = y+1 +-- 1 = y-1 diff --git a/mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_off.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_off.png rename to mods/mesecons/mesecons_torch/textures/jeija_torches_off.png diff --git a/mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_off_ceiling.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_off_ceiling.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_off_ceiling.png rename to mods/mesecons/mesecons_torch/textures/jeija_torches_off_ceiling.png diff --git a/mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_off_side.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_off_side.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_off_side.png rename to mods/mesecons/mesecons_torch/textures/jeija_torches_off_side.png diff --git a/mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_on.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_on.png rename to mods/mesecons/mesecons_torch/textures/jeija_torches_on.png diff --git a/mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_on_ceiling.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_on_ceiling.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_on_ceiling.png rename to mods/mesecons/mesecons_torch/textures/jeija_torches_on_ceiling.png diff --git a/mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_on_side.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_on_side.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_torch/textures/jeija_torches_on_side.png rename to mods/mesecons/mesecons_torch/textures/jeija_torches_on_side.png diff --git a/mods/ITEMS/mesecons/mesecons_walllever/depends.txt b/mods/mesecons/mesecons_walllever/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/depends.txt rename to mods/mesecons/mesecons_walllever/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_walllever/doc/walllever/description.html b/mods/mesecons/mesecons_walllever/doc/walllever/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/doc/walllever/description.html rename to mods/mesecons/mesecons_walllever/doc/walllever/description.html diff --git a/mods/ITEMS/mesecons/mesecons_walllever/doc/walllever/preview.png b/mods/mesecons/mesecons_walllever/doc/walllever/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/doc/walllever/preview.png rename to mods/mesecons/mesecons_walllever/doc/walllever/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_walllever/doc/walllever/recipe.png b/mods/mesecons/mesecons_walllever/doc/walllever/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/doc/walllever/recipe.png rename to mods/mesecons/mesecons_walllever/doc/walllever/recipe.png diff --git a/mods/mesecons/mesecons_walllever/init.lua b/mods/mesecons/mesecons_walllever/init.lua new file mode 100755 index 0000000..1dc08f0 --- /dev/null +++ b/mods/mesecons/mesecons_walllever/init.lua @@ -0,0 +1,64 @@ +-- WALL LEVER +-- Basically a switch that can be attached to a wall +-- Powers the block 2 nodes behind (using a receiver) +mesecon.register_node("mesecons_walllever:wall_lever", { + description="Lever", + drawtype = "mesh", + inventory_image = "jeija_wall_lever_inv.png", + wield_image = "jeija_wall_lever_inv.png", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = { -8/16, -8/16, 3/16, 8/16, 8/16, 8/16 }, + }, + sounds = default.node_sound_wood_defaults(), + on_rightclick = function (pos, node) + if(mesecon.flipstate(pos, node) == "on") then + mesecon.receptor_on(pos, mesecon.rules.buttonlike_get(node)) + else + mesecon.receptor_off(pos, mesecon.rules.buttonlike_get(node)) + end + minetest.sound_play("mesecons_lever", {pos=pos}) + end +},{ + tiles = { + "jeija_wall_lever_lever_light_off.png", + "jeija_wall_lever_front.png", + "jeija_wall_lever_front_bump.png", + "jeija_wall_lever_back_edges.png" + }, + mesh="jeija_wall_lever_off.obj", + on_rotate = mesecon.buttonlike_onrotate, + mesecons = {receptor = { + rules = mesecon.rules.buttonlike_get, + state = mesecon.state.off + }}, + groups = {dig_immediate = 2, mesecon_needs_receiver = 1} +},{ + tiles = { + "jeija_wall_lever_lever_light_on.png", + "jeija_wall_lever_front.png", + "jeija_wall_lever_front_bump.png", + "jeija_wall_lever_back_edges.png" + }, + mesh="jeija_wall_lever_on.obj", + on_rotate = false, + mesecons = {receptor = { + rules = mesecon.rules.buttonlike_get, + state = mesecon.state.on + }}, + groups = {dig_immediate = 2, mesecon_needs_receiver = 1, not_in_creative_inventory = 1} +}) + +minetest.register_craft({ + output = "mesecons_walllever:wall_lever_off 2", + recipe = { + {"group:mesecon_conductor_craftable"}, + {"default:stone"}, + {"default:stick"}, + } +}) diff --git a/mods/ITEMS/mesecons/mesecons_walllever/models/jeija_wall_lever_off.obj b/mods/mesecons/mesecons_walllever/models/jeija_wall_lever_off.obj similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/models/jeija_wall_lever_off.obj rename to mods/mesecons/mesecons_walllever/models/jeija_wall_lever_off.obj diff --git a/mods/ITEMS/mesecons/mesecons_walllever/models/jeija_wall_lever_on.obj b/mods/mesecons/mesecons_walllever/models/jeija_wall_lever_on.obj similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/models/jeija_wall_lever_on.obj rename to mods/mesecons/mesecons_walllever/models/jeija_wall_lever_on.obj diff --git a/mods/ITEMS/mesecons/mesecons_walllever/sounds/mesecons_lever.ogg b/mods/mesecons/mesecons_walllever/sounds/mesecons_lever.ogg similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/sounds/mesecons_lever.ogg rename to mods/mesecons/mesecons_walllever/sounds/mesecons_lever.ogg diff --git a/mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_back_edges.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_back_edges.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_back_edges.png rename to mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_back_edges.png diff --git a/mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_front.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_front.png rename to mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front.png diff --git a/mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_front_bump.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front_bump.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_front_bump.png rename to mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front_bump.png diff --git a/mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_inv.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_inv.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_inv.png rename to mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_inv.png diff --git a/mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_off.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_off.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_off.png rename to mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_off.png diff --git a/mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_on.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_on.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_on.png rename to mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_on.png diff --git a/mods/ITEMS/mesecons/mesecons_switch/depends.txt b/mods/mesecons/mesecons_wires/depends.txt similarity index 100% rename from mods/ITEMS/mesecons/mesecons_switch/depends.txt rename to mods/mesecons/mesecons_wires/depends.txt diff --git a/mods/ITEMS/mesecons/mesecons_wires/doc/mesecon/description.html b/mods/mesecons/mesecons_wires/doc/mesecon/description.html similarity index 100% rename from mods/ITEMS/mesecons/mesecons_wires/doc/mesecon/description.html rename to mods/mesecons/mesecons_wires/doc/mesecon/description.html diff --git a/mods/ITEMS/mesecons/mesecons_wires/doc/mesecon/preview.png b/mods/mesecons/mesecons_wires/doc/mesecon/preview.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_wires/doc/mesecon/preview.png rename to mods/mesecons/mesecons_wires/doc/mesecon/preview.png diff --git a/mods/ITEMS/mesecons/mesecons_wires/doc/mesecon/recipe.png b/mods/mesecons/mesecons_wires/doc/mesecon/recipe.png similarity index 100% rename from mods/ITEMS/mesecons/mesecons_wires/doc/mesecon/recipe.png rename to mods/mesecons/mesecons_wires/doc/mesecon/recipe.png diff --git a/mods/mesecons/mesecons_wires/init.lua b/mods/mesecons/mesecons_wires/init.lua new file mode 100755 index 0000000..1766a99 --- /dev/null +++ b/mods/mesecons/mesecons_wires/init.lua @@ -0,0 +1,249 @@ +-- naming scheme: wire:(xp)(zp)(xm)(zm)(xpyp)(zpyp)(xmyp)(zmyp)_on/off +-- where x= x direction, z= z direction, y= y direction, p = +1, m = -1, e.g. xpym = {x=1, y=-1, z=0} +-- The (xp)/(zpyp)/.. statements shall be replaced by either 0 or 1 +-- Where 0 means the wire has no visual connection to that direction and +-- 1 means that the wire visually connects to that other node. + +-- ####################### +-- ## Update wire looks ## +-- ####################### + +-- self_pos = pos of any mesecon node, from_pos = pos of conductor to getconnect for +local wire_getconnect = function (from_pos, self_pos) + local node = minetest.get_node(self_pos) + if minetest.registered_nodes[node.name] + and minetest.registered_nodes[node.name].mesecons then + -- rules of node to possibly connect to + local rules = {} + if (minetest.registered_nodes[node.name].mesecon_wire) then + rules = mesecon.rules.default + else + rules = mesecon.get_any_rules(node) + end + + for _, r in ipairs(mesecon.flattenrules(rules)) do + if (vector.equals(vector.add(self_pos, r), from_pos)) then + return true + end + end + end + return false +end + +-- Update this node +local wire_updateconnect = function (pos) + local connections = {} + + for _, r in ipairs(mesecon.rules.default) do + if wire_getconnect(pos, vector.add(pos, r)) then + table.insert(connections, r) + end + end + + local nid = {} + for _, vec in ipairs(connections) do + -- flat component + if vec.x == 1 then nid[0] = "1" end + if vec.z == 1 then nid[1] = "1" end + if vec.x == -1 then nid[2] = "1" end + if vec.z == -1 then nid[3] = "1" end + + -- slopy component + if vec.y == 1 then + if vec.x == 1 then nid[4] = "1" end + if vec.z == 1 then nid[5] = "1" end + if vec.x == -1 then nid[6] = "1" end + if vec.z == -1 then nid[7] = "1" end + end + end + + local nodeid = (nid[0] or "0")..(nid[1] or "0")..(nid[2] or "0")..(nid[3] or "0") + ..(nid[4] or "0")..(nid[5] or "0")..(nid[6] or "0")..(nid[7] or "0") + + local state_suffix = string.find(minetest.get_node(pos).name, "_off") and "_off" or "_on" + minetest.set_node(pos, {name = "mesecons:wire_"..nodeid..state_suffix}) +end + +local update_on_place_dig = function (pos, node) + -- Update placed node (get_node again as it may have been dug) + local nn = minetest.get_node(pos) + if (minetest.registered_nodes[nn.name]) + and (minetest.registered_nodes[nn.name].mesecon_wire) then + wire_updateconnect(pos) + end + + -- Update nodes around it + local rules = {} + if minetest.registered_nodes[node.name] + and minetest.registered_nodes[node.name].mesecon_wire then + rules = mesecon.rules.default + else + rules = mesecon.get_any_rules(node) + end + if (not rules) then return end + + for _, r in ipairs(mesecon.flattenrules(rules)) do + local np = vector.add(pos, r) + if minetest.registered_nodes[minetest.get_node(np).name] + and minetest.registered_nodes[minetest.get_node(np).name].mesecon_wire then + wire_updateconnect(np) + end + end +end + +mesecon.register_autoconnect_hook("wire", update_on_place_dig) + +-- ############################ +-- ## Wire node registration ## +-- ############################ +-- Nodeboxes: +local box_center = {-1/16, -.5, -1/16, 1/16, -.5+1/16, 1/16} +local box_bump1 = { -2/16, -8/16, -2/16, 2/16, -13/32, 2/16 } + +local nbox_nid = +{ + [0] = {1/16, -.5, -1/16, 8/16, -.5+1/16, 1/16}, -- x positive + [1] = {-1/16, -.5, 1/16, 1/16, -.5+1/16, 8/16}, -- z positive + [2] = {-8/16, -.5, -1/16, -1/16, -.5+1/16, 1/16}, -- x negative + [3] = {-1/16, -.5, -8/16, 1/16, -.5+1/16, -1/16}, -- z negative + + [4] = {.5-1/16, -.5+1/16, -1/16, .5, .4999+1/16, 1/16}, -- x positive up + [5] = {-1/16, -.5+1/16, .5-1/16, 1/16, .4999+1/16, .5}, -- z positive up + [6] = {-.5, -.5+1/16, -1/16, -.5+1/16, .4999+1/16, 1/16}, -- x negative up + [7] = {-1/16, -.5+1/16, -.5, 1/16, .4999+1/16, -.5+1/16} -- z negative up +} + +local tiles_off = { "mesecons_wire_off.png" } +local tiles_on = { "mesecons_wire_on.png" } + +local selectionbox = +{ + type = "fixed", + fixed = {-.5, -.5, -.5, .5, -.5+4/16, .5} +} + +-- go to the next nodeid (ex.: 01000011 --> 01000100) +local nid_inc = function() end +nid_inc = function (nid) + local i = 0 + while nid[i-1] ~= 1 do + nid[i] = (nid[i] ~= 1) and 1 or 0 + i = i + 1 + end + + -- BUT: Skip impossible nodeids: + if ((nid[0] == 0 and nid[4] == 1) or (nid[1] == 0 and nid[5] == 1) + or (nid[2] == 0 and nid[6] == 1) or (nid[3] == 0 and nid[7] == 1)) then + return nid_inc(nid) + end + + return i <= 8 +end + +local function register_wires() + local nid = {} + while true do + -- Create group specifiction and nodeid string (see note above for details) + local nodeid = (nid[0] or "0")..(nid[1] or "0")..(nid[2] or "0")..(nid[3] or "0") + ..(nid[4] or "0")..(nid[5] or "0")..(nid[6] or "0")..(nid[7] or "0") + + -- Calculate nodebox + local nodebox = {type = "fixed", fixed={box_center}} + for i=0,7 do + if nid[i] == 1 then + table.insert(nodebox.fixed, nbox_nid[i]) + end + end + + -- Add bump to nodebox if curved + if (nid[0] == 1 and nid[1] == 1) or (nid[1] == 1 and nid[2] == 1) + or (nid[2] == 1 and nid[3] == 1) or (nid[3] == 1 and nid[0] == 1) then + table.insert(nodebox.fixed, box_bump1) + end + + -- If nothing to connect to, still make a nodebox of a straight wire + if nodeid == "00000000" then + nodebox.fixed = {-8/16, -.5, -1/16, 8/16, -.5+1/16, 1/16} + end + + local rules = {} + if (nid[0] == 1) then table.insert(rules, vector.new( 1, 0, 0)) end + if (nid[1] == 1) then table.insert(rules, vector.new( 0, 0, 1)) end + if (nid[2] == 1) then table.insert(rules, vector.new(-1, 0, 0)) end + if (nid[3] == 1) then table.insert(rules, vector.new( 0, 0, -1)) end + + if (nid[0] == 1) then table.insert(rules, vector.new( 1, -1, 0)) end + if (nid[1] == 1) then table.insert(rules, vector.new( 0, -1, 1)) end + if (nid[2] == 1) then table.insert(rules, vector.new(-1, -1, 0)) end + if (nid[3] == 1) then table.insert(rules, vector.new( 0, -1, -1)) end + + if (nid[4] == 1) then table.insert(rules, vector.new( 1, 1, 0)) end + if (nid[5] == 1) then table.insert(rules, vector.new( 0, 1, 1)) end + if (nid[6] == 1) then table.insert(rules, vector.new(-1, 1, 0)) end + if (nid[7] == 1) then table.insert(rules, vector.new( 0, 1, -1)) end + + local meseconspec_off = { conductor = { + rules = rules, + state = mesecon.state.off, + onstate = "mesecons:wire_"..nodeid.."_on" + }} + + local meseconspec_on = { conductor = { + rules = rules, + state = mesecon.state.on, + offstate = "mesecons:wire_"..nodeid.."_off" + }} + + local groups_on = {dig_immediate = 3, mesecon_conductor_craftable = 1, + not_in_creative_inventory = 1} + local groups_off = {dig_immediate = 3, mesecon_conductor_craftable = 1} + if nodeid ~= "00000000" then + groups_off["not_in_creative_inventory"] = 1 + end + + mesecon.register_node(":mesecons:wire_"..nodeid, { + description = "Mesecon", + drawtype = "nodebox", + inventory_image = "mesecons_wire_inv.png", + wield_image = "mesecons_wire_inv.png", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + selection_box = selectionbox, + node_box = nodebox, + walkable = false, + drop = "mesecons:wire_00000000_off", + mesecon_wire = true, + on_rotate = false, + }, {tiles = tiles_off, mesecons = meseconspec_off, groups = groups_off}, + {tiles = tiles_on, mesecons = meseconspec_on, groups = groups_on}) + + if (nid_inc(nid) == false) then return end + end +end +register_wires() + +-- ############## +-- ## Crafting ## +-- ############## +minetest.register_craft({ + type = "cooking", + output = "mesecons:wire_00000000_off 2", + recipe = "default:mese_crystal_fragment", + cooktime = 3, +}) + +minetest.register_craft({ + type = "cooking", + output = "mesecons:wire_00000000_off 18", + recipe = "default:mese_crystal", + cooktime = 15, +}) + +minetest.register_craft({ + type = "cooking", + output = "mesecons:wire_00000000_off 162", + recipe = "default:mese", + cooktime = 30, +}) diff --git a/mods/ITEMS/mesecons/modpack.txt b/mods/mesecons/modpack.txt similarity index 100% rename from mods/ITEMS/mesecons/modpack.txt rename to mods/mesecons/modpack.txt diff --git a/mods/outback/config.lua b/mods/outback/config.lua new file mode 100644 index 0000000..44dff57 --- /dev/null +++ b/mods/outback/config.lua @@ -0,0 +1,40 @@ +--[[ + Config + The main Outback game configuration file. +--]] + + +--[[ + Biomes +--]] + +-- Set the following variables to true to enable each biome +outback.deep_underground = true +outback.underground = true +outback.mangroves = true +outback.tasman_sea = true +outback.great_australian_bight = true +outback.indian_ocean = true +outback.great_barrier_reef = true +outback.timor_sea = true +outback.tasmania = true +outback.victoria = true +outback.jarrah_karri_forests = true +outback.eastern_coasts = true +outback.flinders_lofty = true +outback.murray_darling = true +outback.nullabor = true +outback.mulga_lands = true +outback.far_north_queensland = true +outback.central_australia = true +outback.top_end = true +outback.pilbara = true +outback.simpson_desert = true +outback.australian_alps = true + + +-- Enable decorations (mostly plants) +outback.decorations = true + +-- Enable trees +outback.trees = true diff --git a/mods/outback/crafting.lua b/mods/outback/crafting.lua new file mode 100644 index 0000000..8359400 --- /dev/null +++ b/mods/outback/crafting.lua @@ -0,0 +1,434 @@ +--[[ + Crafting +--]] + + +minetest.register_craft({ + output = "default:pine_wood 4", + recipe = { + {"outback:arnhem_cypress_pine_tree"} + } +}) + +minetest.register_craft({ + output = "outback:eucalyptus_wood 4", + recipe = { + {"outback:black_box_tree"} + } +}) + +minetest.register_craft({ + output = "outback:blackwood 4", + recipe = { + {"outback:black_wattle_tree"} + } +}) + +minetest.register_craft({ + output = "outback:blue_gum 4", + recipe = { + {"outback:blue_gum_tree"} + } +}) + +minetest.register_craft({ + output = "default:wood 4", + recipe = { + {"outback:boab_tree"} + } +}) + +minetest.register_craft({ + output = "outback:celery_top_pine 4", + recipe = { + {"outback:celery_top_pine_tree"} + } +}) + +minetest.register_craft({ + output = "default:acacia_wood 4", + recipe = { + {"outback:coast_banksia_tree"} + } +}) + +minetest.register_craft({ + output = "outback:eucalyptus_wood 4", + recipe = { + {"outback:coolabah_tree"} + } +}) + +minetest.register_craft({ + output = "outback:red_mahogany 4", + recipe = { + {"outback:daintree_stringybark_tree"} + } +}) + +-- Darwin Woollybutt +minetest.register_craft({ + output = "outback:eucalyptus_wood 4", + recipe = { + {"outback:darwin_woollybutt_tree"} + } +}) + +minetest.register_craft({ + output = "default:acacia_wood 4", + recipe = { + {"outback:desert_oak_tree"} + } +}) + +minetest.register_craft({ + output = "outback:huon_pine 4", + recipe = { + {"outback:huon_pine_tree"} + } +}) + +minetest.register_craft({ + output = "default:wood 4", + recipe = { + {"outback:illawarra_flame_tree"} + } +}) + +minetest.register_craft({ + output = "outback:jarrah 4", + recipe = { + {"outback:jarrah_tree"} + } +}) + +minetest.register_craft({ + output = "outback:karri 4", + recipe = { + {"outback:karri_tree"} + } +}) + +minetest.register_craft({ + output = "outback:eucalyptus_wood 4", + recipe = { + {"outback:lemon_eucalyptus_tree"} + } +}) + +minetest.register_craft({ + output = "default:wood 4", + recipe = { + {"outback:macadamia_tree"} + } +}) + +minetest.register_craft({ + output = "outback:marri 4", + recipe = { + {"outback:marri_tree"} + } +}) + +minetest.register_craft({ + output = "outback:merbau 4", + recipe = { + {"outback:merbau_tree"} + } +}) + +minetest.register_craft({ + output = "default:wood 4", + recipe = { + {"outback:moreton_bay_fig_tree"} + } +}) + +minetest.register_craft({ + output = "default:acacia_wood 4", + recipe = { + {"outback:mulga_tree"} + } +}) + +minetest.register_craft({ + output = "default:acacia_wood 4", + recipe = { + {"outback:paperbark_tree"} + } +}) + +minetest.register_craft({ + output = "default:acacia_wood 4", + recipe = { + {"outback:river_oak_tree"} + } +}) + +minetest.register_craft({ + output = "outback:red_gum 4", + recipe = { + {"outback:river_red_gum_tree"} + } +}) + +minetest.register_craft({ + output = "default:pine_wood 4", + recipe = { + {"outback:rottnest_island_pine_tree"} + } +}) + +minetest.register_craft({ + output = "outback:eucalyptus_wood 4", + recipe = { + {"outback:scribbly_gum_tree"} + } +}) + +minetest.register_craft({ + output = "default:acacia_wood 4", + recipe = { + {"outback:shoestring_acacia_tree"} + } +}) + +minetest.register_craft({ + output = "outback:eucalyptus_wood 4", + recipe = { + {"outback:snow_gum_tree"} + } +}) + +minetest.register_craft({ + output = "outback:southern_sassafras 4", + recipe = { + {"outback:southern_sassafras_tree"} + } +}) + +minetest.register_craft({ + output = "outback:eucalyptus_wood 4", + recipe = { + {"outback:sugar_gum_tree"} + } +}) + +minetest.register_craft({ + output = "outback:eucalyptus_wood 4", + recipe = { + {"outback:swamp_bloodwood_tree"} + } +}) + +minetest.register_craft({ + output = "outback:tasmanian_oak 4", + recipe = { + {"outback:swamp_gum_tree"} + } +}) + +minetest.register_craft({ + output = "outback:tasmanian_myrtle 4", + recipe = { + {"outback:tasmanian_myrtle_tree"} + } +}) + +minetest.register_craft({ + output = "outback:eucalyptus_wood 4", + recipe = { + {"outback:white_box_tree"} + } +}) + +minetest.register_craft({ + output = "outback:aluminiumblock", + recipe = { + {"outback:aluminium_ingot", "outback:aluminium_ingot", "outback:aluminium_ingot"}, + {"outback:aluminium_ingot", "outback:aluminium_ingot", "outback:aluminium_ingot"}, + {"outback:aluminium_ingot", "outback:aluminium_ingot", "outback:aluminium_ingot"}, + } +}) + +minetest.register_craft({ + output = "outback:aluminium_ingot 9", + recipe = { + {"outback:aluminiumblock"}, + } +}) + +minetest.register_craft({ + output = "outback:nickelblock", + recipe = { + {"outback:nickel_ingot", "outback:nickel_ingot", "outback:nickel_ingot"}, + {"outback:nickel_ingot", "outback:nickel_ingot", "outback:nickel_ingot"}, + {"outback:nickel_ingot", "outback:nickel_ingot", "outback:nickel_ingot"}, + } +}) + +minetest.register_craft({ + output = "outback:nickel_ingot 9", + recipe = { + {"outback:nickelblock"}, + } +}) + +minetest.register_craft({ + output = 'outback:silverblock', + recipe = { + {'outback:silver_ingot', 'outback:silver_ingot', 'outback:silver_ingot'}, + {'outback:silver_ingot', 'outback:silver_ingot', 'outback:silver_ingot'}, + {'outback:silver_ingot', 'outback:silver_ingot', 'outback:silver_ingot'}, + } +}) + +minetest.register_craft({ + output = 'outback:silver_ingot 9', + recipe = { + {'outback:silverblock'}, + } +}) + +minetest.register_craft({ + output = "outback:salt_block", + recipe = { + {"outback:salt", "outback:salt", "outback:salt"}, + {"outback:salt", "outback:salt", "outback:salt"}, + {"outback:salt", "outback:salt", "outback:salt"}, + } +}) + +minetest.register_craft({ + output = "outback:salt 9", + recipe = { + {"outback:salt_block"}, + } +}) + +minetest.register_craft({ + output = "outback:basalt_brick 4", + recipe = { + {"outback:basalt", "outback:basalt"}, + {"outback:basalt", "outback:basalt"}, + } +}) + +minetest.register_craft({ + output = "outback:diorite_brick 4", + recipe = { + {"outback:diorite", "outback:diorite"}, + {"outback:diorite", "outback:diorite"}, + } +}) + +minetest.register_craft({ + output = "outback:slate_tile 4", + recipe = { + {"outback:slate","outback:slate"}, + {"outback:slate","outback:slate"}, + {"default:sand","default:clay"}, + } +}) + +minetest.register_craft({ + output = "outback:marble_tile 4", + recipe = { + {"outback:marble","outback:marble"}, + {"outback:marble","outback:marble"}, + {"default:sand","default:clay"}, + } +}) + +-- Small rocks can be used to create cobblestone. +minetest.register_craft({ + output = "outback:red_sandstone_cobble", + recipe = { + {"outback:small_red_rocks", "outback:small_red_rocks", "outback:small_red_rocks"}, + {"outback:small_red_rocks", "outback:small_red_rocks", "outback:small_red_rocks"}, + {"outback:small_red_rocks", "outback:small_red_rocks", "outback:small_red_rocks"}, + } +}) + +minetest.register_craft({ + output = "outback:sandstone_cobble", + recipe = { + {"outback:small_sandstone_rocks", "outback:small_sandstone_rocks", "outback:small_sandstone_rocks"}, + {"outback:small_sandstone_rocks", "outback:small_sandstone_rocks", "outback:small_sandstone_rocks"}, + {"outback:small_sandstone_rocks", "outback:small_sandstone_rocks", "outback:small_sandstone_rocks"}, + } +}) + +minetest.register_craft({ + output = "default:cobble", + recipe = { + {"outback:small_stone_rocks", "outback:small_stone_rocks", "outback:small_stone_rocks"}, + {"outback:small_stone_rocks", "outback:small_stone_rocks", "outback:small_stone_rocks"}, + {"outback:small_stone_rocks", "outback:small_stone_rocks", "outback:small_stone_rocks"}, + } +}) + + +--[[ + Cooking recipes +--]] + +minetest.register_craft({ + type = "cooking", + output = "outback:aluminium_ingot", + recipe = "outback:aluminium_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "outback:nickel_ingot", + recipe = "outback:nickel_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "outback:silver_ingot", + recipe = "outback:silver_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "outback:basalt", + recipe = "outback:basalt_cobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "outback:diorite", + recipe = "outback:diorite_cobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "outback:limestone", + recipe = "outback:limestone_cobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "outback:red_sandstone", + recipe = "outback:red_sandstone_cobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "outback:slate", + recipe = "outback:shale", +}) + +minetest.register_craft({ + type = "cooking", + output = "outback:slate", + recipe = "outback:slate_cobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "outback:shale", + recipe = "outback:mangrove_mud", +}) diff --git a/mods/outback/craftitems.lua b/mods/outback/craftitems.lua new file mode 100644 index 0000000..8fe1715 --- /dev/null +++ b/mods/outback/craftitems.lua @@ -0,0 +1,33 @@ +--[[ + Craftitems +--]] + +minetest.register_craftitem("outback:aluminium_lump", { + description = "Aluminium Lump", + inventory_image = "ob_aluminium_lump.png", +}) + +minetest.register_craftitem("outback:nickel_lump", { + description = "Nickel Lump", + inventory_image = "ob_nickel_lump.png", +}) + +minetest.register_craftitem("outback:silver_lump", { + description = "Silver Lump", + inventory_image = "ob_silver_lump.png", +}) + +minetest.register_craftitem("outback:aluminium_ingot", { + description = "Aluminium Ingot", + inventory_image = "ob_aluminium_ingot.png", +}) + +minetest.register_craftitem("outback:nickel_ingot", { + description = "Nickel Ingot", + inventory_image = "ob_nickel_ingot.png", +}) + +minetest.register_craftitem("outback:silver_ingot", { + description = "Silver Ingot", + inventory_image = "ob_silver_ingot.png", +}) diff --git a/mods/ITEMS/mushrooms/depends.txt b/mods/outback/depends.txt similarity index 100% rename from mods/ITEMS/mushrooms/depends.txt rename to mods/outback/depends.txt diff --git a/mods/outback/functions.lua b/mods/outback/functions.lua new file mode 100644 index 0000000..8f2b7ab --- /dev/null +++ b/mods/outback/functions.lua @@ -0,0 +1,9 @@ +--[[ + Functions +--]] + + +-- Push an element onto a stack (table). +function outback.push(t, x) + t[#t+1] = x +end diff --git a/mods/outback/init.lua b/mods/outback/init.lua new file mode 100644 index 0000000..2386fad --- /dev/null +++ b/mods/outback/init.lua @@ -0,0 +1,17 @@ +--[[ + Outback: The Outback game base mod +--]] + +outback = {} + +-- Load files +local modpath = minetest.get_modpath("outback") +dofile(modpath.."/config.lua") -- Outback game configuration +dofile(modpath.."/functions.lua") +dofile(modpath.."/nodes_base.lua") -- Simple nodes with simple definitions +dofile(modpath.."/nodes_liquid.lua") -- Liquids +dofile(modpath.."/nodes_plants.lua") -- Plants +dofile(modpath.."/nodes_trees.lua") -- Tree nodes: wood, planks, sapling, leaves +dofile(modpath.."/nodes_misc.lua") -- Other and special nodes +dofile(modpath.."/craftitems.lua") +dofile(modpath.."/crafting.lua") diff --git a/mods/outback/mod.conf b/mods/outback/mod.conf new file mode 100644 index 0000000..4381251 --- /dev/null +++ b/mods/outback/mod.conf @@ -0,0 +1 @@ +name = outback \ No newline at end of file diff --git a/mods/ITEMS/australia/models/aus_pebble.obj b/mods/outback/models/ob_pebble.obj similarity index 100% rename from mods/ITEMS/australia/models/aus_pebble.obj rename to mods/outback/models/ob_pebble.obj diff --git a/mods/outback/nodes_base.lua b/mods/outback/nodes_base.lua new file mode 100644 index 0000000..7652783 --- /dev/null +++ b/mods/outback/nodes_base.lua @@ -0,0 +1,414 @@ +--[[ + Base nodes +--]] + + +-- +-- Stone +-- + +minetest.register_node("outback:red_sandstone", { + description = "Red Sandstone", + tiles = {"ob_red_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + drop = 'outback:red_sandstone_cobble', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:red_sandstone_cobble", { + description = "Red Sandstone Cobble", + tiles = {"ob_red_sandstone_cobble.png"}, + groups = {crumbly = 1, cracky = 3, oddly_breakable_by_hand = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:red_sandstonebrick", { + description = "Red Sandstone Brick", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"ob_red_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:sandstone_cobble", { + description = "Sandstone Cobble", + tiles = {"ob_sandstone_cobble.png"}, + groups = {crumbly = 1, cracky = 3, oddly_breakable_by_hand = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:basalt", { + description = "Basalt", + tiles = {"ob_basalt.png"}, + groups = {cracky = 2, stone = 1}, + drop = "outback:basalt_cobble", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:basalt_cobble", { + description = "Basalt Cobble", + tiles = {"ob_basalt_cobble.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:basalt_brick", { + description = "Basalt Brick", + tiles = {"ob_basalt_brick.png"}, + is_ground_content = false, + groups = {cracky = 1, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:diorite", { + description = "Diorite", + tiles = {"ob_diorite.png"}, + groups = {cracky = 2, stone = 1}, + drop = 'outback:diorite_cobble', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:diorite_cobble", { + description = "Diorite Cobble", + tiles = {"ob_diorite_cobble.png"}, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:diorite_brick", { + description = "Diorite Brick", + tiles = {"ob_diorite_brick.png"}, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:limestone", { + description = "Limestone", + tiles = {"ob_limestone.png"}, + drop = 'outback:limestone_cobble', + groups = {cracky = 3, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:limestone_cobble", { + description = "Limestone Cobble", + tiles = {"ob_limestone_cobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:limestone_brick", { + description = "Limestone Brick", + tiles = {"ob_limestone_brick.png"}, + groups = {cracky = 3, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:marble", { + description = "Marble", + tiles = {"ob_marble.png"}, + groups = {cracky = 3, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:marble_tile", { + description = "Marble Tile", + tiles = {"ob_marble_tile.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("outback:shale", { + description = "Shale", + tiles = {"ob_shale.png","ob_shale.png","ob_shale_side.png"}, + is_ground_content = true, + groups = {crumbly = 2, cracky = 2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("outback:slate", { + description = "Slate", + tiles = {"ob_slate.png","ob_slate.png","ob_slate_side.png"}, + is_ground_content = true, + drop = 'outback:slate_rubble', + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("outback:slate_rubble", { + description = "Slate Rubble", + tiles = {"ob_slate_rubble.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("outback:slate_brick", { + description = "Slate Brick", + tiles = {"ob_slate_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("outback:slate_tile", { + description = "Slate Tile", + tiles = {"ob_slate_tile.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults() +}) + + +-- +-- Soft / Non-Stone +-- + +minetest.register_node("outback:red_dirt", { + description = "Red Dirt", + tiles = {"ob_red_dirt.png"}, + groups = {crumbly = 3, soil = 1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("outback:red_sand", { + description = "Red Sand", + tiles = {"ob_red_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), +}) + +minetest.register_node("outback:red_gravel", { + description = "Red Gravel", + tiles = {"ob_red_gravel.png"}, + groups = {crumbly = 2, falling_node = 1}, + sounds = default.node_sound_gravel_defaults(), +}) + +minetest.register_node("outback:mangrove_mud", { + description = "Mangrove Mud", + tiles = {"ob_mangrove_mud.png"}, + groups = {crumbly = 1, soil = 1, disable_jump = 1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "ob_mangrove_mud", gain = 0.4}, + dug = {name = "ob_mangrove_mud", gain = 0.4}, + }), +}) + +minetest.register_node("outback:mineral_salt", { + description = "Salt Mineral", + tiles = {"ob_red_sand.png^ob_mineral_salt.png"}, + paramtype = "light", + is_ground_content = true, + groups = {crumbly = 2, cracky = 2}, + drop = { + items = { + {items = {"outback:red_sand"} }, + {items = {"outback:salt"} } + } + }, + sounds = default.node_sound_dirt_defaults, +}) + +minetest.register_node("outback:salt_block", { + description = "Salt Block", + tiles = {"default_clay.png^ob_mineral_salt.png"}, + is_ground_content = false, + groups = {crumbly = 2, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +-- +-- Ores +-- + +minetest.register_node("outback:diorite_with_coal", { + description = "Coal Ore", + tiles = {"ob_diorite.png^default_mineral_coal.png"}, + groups = {cracky = 3}, + drop = 'default:coal_lump', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:granite_with_iron", { + description = "Iron Ore", + tiles = {"technic_granite.png^default_mineral_iron.png"}, + groups = {cracky = 2}, + drop = 'default:iron_lump', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:granite_with_copper", { + description = "Copper Ore", + tiles = {"technic_granite.png^default_mineral_copper.png"}, + groups = {cracky = 2}, + drop = 'default:copper_lump', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:granite_with_opal", { + description = "Opal Ore", + tiles = {"technic_granite.png^ob_mineral_opal.png"}, + groups = {cracky = 2}, + drop = "outback:opal", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:granite_with_tin", { + description = "Tin Ore", + tiles = {"technic_granite.png^default_mineral_tin.png"}, + groups = {cracky = 2}, + drop = "default:tin_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:stone_with_aluminium", { + description = "Aluminium Ore", + tiles = {"default_stone.png^ob_mineral_aluminium.png"}, + groups = {cracky = 2}, + drop = "outback:aluminium_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:aluminiumblock", { + description = "Aluminium Block", + tiles = {"ob_aluminium_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + +minetest.register_node("outback:stone_with_nickel", { + description = "Nickel Ore", + tiles = {"default_stone.png^ob_mineral_nickel.png"}, + groups = {cracky = 2}, + drop = "outback:nickel_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:nickelblock", { + description = "Nickel Block", + tiles = {"ob_nickel_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + +minetest.register_node("outback:stone_with_silver", { + description = "Silver Ore", + tiles = {"default_stone.png^ob_mineral_silver.png" }, + groups = {cracky = 3}, + drop = "outback:silver_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:silverblock", { + description = "Silver Block", + tiles = {"ob_silver_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + +minetest.register_node("outback:basalt_with_diamond", { + description = "Diamond Ore", + tiles = {"ob_basalt.png^default_mineral_diamond.png"}, + groups = {cracky = 1}, + drop = "default:diamond", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:stone_with_agate", { + description = "Agate Ore", + tiles = {"default_stone.png^ob_mineral_agate.png"}, + groups = {cracky = 1}, + drop = "outback:agate", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:stone_with_amethyst", { + description = "Amethyst Ore", + tiles = {"default_stone.png^ob_mineral_amethyst.png"}, + groups = {cracky = 1}, + drop = "outback:amethyst", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:granite_with_amethyst", { + description = "Amethyst Ore", + tiles = {"technic_granite.png^ob_mineral_amethyst.png"}, + groups = {cracky = 1}, + drop = "outback:amethyst", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:stone_with_citrine", { + description = "Citrine Ore", + tiles = {"default_stone.png^ob_mineral_citrine.png"}, + groups = {cracky = 1}, + drop = "outback:citrine", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:stone_with_emerald", { + description = "Emerald Ore", + tiles = {"default_stone.png^ob_mineral_emerald.png"}, + groups = {cracky = 1}, + drop = "outback:emerald", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:granite_with_emerald", { + description = "Emerald Ore", + tiles = {"technic_granite.png^ob_mineral_emerald.png"}, + groups = {cracky = 1}, + drop = "outback:emerald", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:stone_with_jade", { + description = "Jade Ore", + tiles = {"default_stone.png^ob_mineral_jade.png"}, + groups = {cracky = 1}, + drop = "outback:jade", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:stone_with_ruby", { + description = "Ruby Ore", + tiles = {"default_stone.png^ob_mineral_ruby.png"}, + groups = {cracky = 1}, + drop = "outback:ruby", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:stone_with_sapphire", { + description = "Sapphire Ore", + tiles = {"default_stone.png^ob_mineral_sapphire.png"}, + groups = {cracky = 1}, + drop = "outback:sapphire", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:stone_with_smoky_quartz", { + description = "Smoky Quartz Ore", + tiles = {"default_stone.png^ob_mineral_smoky_quartz.png"}, + groups = {cracky = 1}, + drop = "outback:smoky_quartz", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("outback:granite_with_smoky_quartz", { + description = "Smoky Quartz Ore", + tiles = {"technic_granite.png^ob_mineral_smoky_quartz.png"}, + groups = {cracky = 1}, + drop = "outback:smoky_quartz", + sounds = default.node_sound_stone_defaults(), +}) + diff --git a/mods/outback/nodes_liquid.lua b/mods/outback/nodes_liquid.lua new file mode 100644 index 0000000..c3f1e67 --- /dev/null +++ b/mods/outback/nodes_liquid.lua @@ -0,0 +1,96 @@ +--[[ + Liquid nodes +--]] + +minetest.register_node("outback:muddy_water_source", { + description = "Muddy Water Source", + drawtype = "liquid", + tiles = { + { + name="ob_muddy_water_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + special_tiles = { + { + name="ob_muddy_water_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + backface_culling = false, + }, + }, + alpha = 224, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "outback:muddy_water_flowing", + liquid_alternative_source = "outback:muddy_water_source", + liquid_viscosity = 1, + liquid_renewable = true, + liquid_range = 2, + post_effect_color = {a = 232, r = 92, g = 80, b = 48}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + +minetest.register_node("outback:muddy_water_flowing", { + description = "Flowing Muddy Water", + drawtype = "flowingliquid", + tiles = {"ob_muddy_water.png"}, + special_tiles = { + { + image="ob_muddy_water_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + { + image="ob_muddy_water_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + }, + alpha = 224, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "outback:muddy_water_flowing", + liquid_alternative_source = "outback:muddy_water_source", + liquid_viscosity = 1, + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a = 232, r = 92, g = 80, b = 48}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, + not_in_creative_inventory = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) \ No newline at end of file diff --git a/mods/outback/nodes_misc.lua b/mods/outback/nodes_misc.lua new file mode 100644 index 0000000..63573af --- /dev/null +++ b/mods/outback/nodes_misc.lua @@ -0,0 +1,257 @@ +--[[ + Miscellaneous nodes +--]] + +minetest.register_node("outback:salt", { + description = "Salt", + drawtype = "plantlike", + visual_scale = 0.6, + tiles = {"ob_salt.png"}, + inventory_image = "ob_salt.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + groups = {fleshy = 3, dig_immediate = 3, flammable = 1}, + on_use = minetest.item_eat(1), + sounds = default.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, + }, + collision_box = { + type = "fixed", + fixed = {-3/32, -8/16, -3/32, 3/32, -4/16, 3/32}, + }, +}) + +minetest.register_node("outback:opal",{ + description = "Opal", + drawtype = "mesh", + mesh = "ob_pebble.obj", + tiles = {"ob_opal.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=2, stone=1, dig_immediate = 1}, + selection_box = { + type = "fixed", + fixed = {-5/16, -8/16, -6/16, 5/16, -1/32, 5/16}, + }, + collision_box = { + type = "fixed", + fixed = {-5/16, -8/16, -6/16, 5/16, -1/32, 5/16}, + }, + sounds = default.node_sound_stone_defaults(), +}) + + +--[[ + Small Rocks +--]] + +-- Place a small nodebox. +local function small_cube(grid, pos, diameters) + local rock = {} + + rock[1] = pos.x + rock[2] = pos.y + rock[3] = pos.z + rock[4] = pos.x + diameters.x + rock[5] = pos.y + diameters.y + rock[6] = pos.z + diameters.z + outback.push(grid, rock) +end + +-- Small red rocks +local default_grid_red_rocks + +for grid_count = 1, 6 do + local grid = {} + for rock_count = 2, math.random(1, 4) + 1 do + local diameter = math.random(15, 25) / 100 + local x = math.random(1, 80) / 100 - 0.5 + local z = math.random(1, 80) / 100 - 0.5 + small_cube(grid, {x = x, y = -0.5, z = z}, {x = diameter, y = diameter, z = diameter}) + end + + minetest.register_node("outback:small_red_rocks"..grid_count, { + description = "Small Red Rocks", + tiles = {"technic_granite.png"}, + is_ground_content = true, + walkable = false, + paramtype = "light", + drawtype = "nodebox", + buildable_to = true, + node_box = {type = "fixed", fixed = grid}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = {stone = 1, oddly_breakable_by_hand = 3}, + drop = "outback:small_red_rocks", + sounds = default.node_sound_stone_defaults(), + }) + + default_grid_red_rocks = grid +end + +minetest.register_node("outback:small_red_rocks", { + description = "Small Red Rocks", + tiles = {"technic_granite.png"}, + inventory_image = "ob_small_red_rocks.png", + is_ground_content = true, + walkable = false, + paramtype = "light", + drawtype = "nodebox", + node_box = {type = "fixed", fixed = default_grid_red_rocks}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = {stone = 1, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local player_name = placer:get_player_name() + -- place a random small red rocks node + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, {name = "outback:small_red_rocks"..math.random(1, 6)}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) + end + return itemstack + end +}) + +-- Small sandstone rocks +local default_grid_sandstone_rocks + +for grid_count = 1, 6 do + local grid = {} + for rock_count = 2, math.random(1, 4) + 1 do + local diameter = math.random(15, 25) / 100 + local x = math.random(1, 80) / 100 - 0.5 + local z = math.random(1, 80) / 100 - 0.5 + small_cube(grid, {x = x, y = -0.5, z = z}, {x = diameter, y = diameter, z = diameter}) + end + + minetest.register_node("outback:small_sandstone_rocks"..grid_count, { + description = "Small Sandstone Rocks", + tiles = {"default_sandstone.png"}, + is_ground_content = true, + walkable = false, + paramtype = "light", + drawtype = "nodebox", + buildable_to = true, + node_box = {type = "fixed", fixed = grid}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = {stone = 1, oddly_breakable_by_hand = 3}, + drop = "outback:small_sandstone_rocks", + sounds = default.node_sound_stone_defaults(), + }) + + default_grid_sandstone_rocks = grid +end + +minetest.register_node("outback:small_sandstone_rocks", { + description = "Small Sandstone Rocks", + tiles = {"default_sandstone.png"}, + inventory_image = "ob_small_sandstone_rocks.png", + is_ground_content = true, + walkable = false, + paramtype = "light", + drawtype = "nodebox", + node_box = {type = "fixed", fixed = default_grid_sandstone_rocks}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = {stone = 1, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local player_name = placer:get_player_name() + -- place a random small sandstone rocks node + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, {name = "outback:small_sandstone_rocks"..math.random(1, 6)}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) + end + return itemstack + end +}) + +-- Small stone rocks +local default_grid_stone_rocks + +for grid_count = 1, 6 do + local grid = {} + for rock_count = 2, math.random(1, 4) + 1 do + local diameter = math.random(15, 25) / 100 + local x = math.random(1, 80) / 100 - 0.5 + local z = math.random(1, 80) / 100 - 0.5 + small_cube(grid, {x = x, y = -0.5, z = z}, {x = diameter, y = diameter, z = diameter}) + end + + minetest.register_node("outback:small_stone_rocks"..grid_count, { + description = "Small Stone Rocks", + tiles = {"default_stone.png"}, + is_ground_content = true, + walkable = false, + paramtype = "light", + drawtype = "nodebox", + buildable_to = true, + node_box = {type = "fixed", fixed = grid}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = {stone = 1, oddly_breakable_by_hand = 3}, + drop = "outback:small_stone_rocks", + sounds = default.node_sound_stone_defaults(), + }) + + default_grid_stone_rocks = grid +end + +minetest.register_node("outback:small_stone_rocks", { + description = "Small Stone Rocks", + tiles = {"default_stone.png"}, + inventory_image = "ob_small_stone_rocks.png", + is_ground_content = true, + walkable = false, + paramtype = "light", + drawtype = "nodebox", + node_box = {type = "fixed", fixed = default_grid_stone_rocks}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = {stone = 1, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_stone_defaults(), + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local player_name = placer:get_player_name() + -- place a random small stone rocks node + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, {name = "outback:small_stone_rocks"..math.random(1, 6)}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) + end + return itemstack + end +}) diff --git a/mods/outback/nodes_plants.lua b/mods/outback/nodes_plants.lua new file mode 100644 index 0000000..a7eb7fe --- /dev/null +++ b/mods/outback/nodes_plants.lua @@ -0,0 +1,82 @@ +--[[ + Plant nodes +--]] + +minetest.register_node("outback:mangrove_fern", { + description = "Mangrove Fern", + drawtype = "plantlike", + waving = 1, + tiles = {"ob_mangrove_fern.png"}, + inventory_image = "ob_mangrove_fern.png", + wield_image = "ob_mangrove_fern.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = false, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16}, + }, +}) + +-- Nipa Palm +minetest.register_node("outback:mangrove_palm_trunk", { + description = "Nipa Palm", + tiles = {"ob_mangrove_palm_trunk.png", "ob_mangrove_mud.png", + "ob_mangrove_palm_trunk.png"}, + inventory_image = "ob_mangrove_palm_trunk.png", + wield_image = "ob_mangrove_palm_trunk.png", + paramtype = "light", + paramtype2 = "facedir", + groups = {choppy = 2, flammable = 3, flora = 1, attached_node = 1, oddly_breakable_by_hand = 1}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node, + selection_box = { + type = "fixed", + fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, + }, +}) + +minetest.register_node("outback:mangrove_palm_leaf_bot", { + description = "Nipa Palm", + tiles = {"ob_mangrove_palm_leaf_bot.png", "ob_mangrove_palm_leaf_bot.png", + "ob_mangrove_palm_leaf_bot.png"}, + inventory_image = "ob_mangrove_palm_leaf_bot.png", + wield_image = "ob_mangrove_palm_leaf_bot.png", + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + drawtype = "nodebox", + nodebox = { + type = "fixed", + fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, + }, + selection_box = { + type = "fixed", + fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, + }, +}) + +minetest.register_node("outback:mangrove_palm_leaf_top", { + description = "Nipa Palm", + tiles = {"ob_mangrove_palm_leaf_top.png", "ob_mangrove_palm_leaf_top.png", + "ob_mangrove_palm_leaf_top.png"}, + inventory_image = "ob_mangrove_palm_leaf_top.png", + wield_image = "ob_mangrove_palm_leaf_top.png", + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + drawtype = "nodebox", + nodebox = { + type = "fixed", + fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, + }, + selection_box = { + type = "fixed", + fixed = {-8/16, -8/16, -8/16, 8/16, 8/16, 8/16}, + }, +}) diff --git a/mods/outback/nodes_trees.lua b/mods/outback/nodes_trees.lua new file mode 100644 index 0000000..a6c30e6 --- /dev/null +++ b/mods/outback/nodes_trees.lua @@ -0,0 +1,453 @@ +--[[ + Tree nodes +--]] + + +outback.schematics = {} + +-- Grey Mangrove +minetest.register_node("outback:grey_mangrove_tree", { + description = "Grey Mangrove Tree", + tiles = { + "ob_grey_mangrove_tree_top.png", + "ob_grey_mangrove_tree_top.png", + "ob_grey_mangrove_tree.png" + }, + paramtype2 = "facedir", + paramtype = "light", + drawtype = "nodebox", + is_ground_content = false, + node_box = { + type = "fixed", + fixed = {-3/32, -8/16, -3/32, 3/32, 8/16, 3/32}, + }, + selection_box = { + type = "fixed", + fixed = {-3/32, -8/16, -3/32, 3/32, 8/16, 3/32}, + }, + drop = 'default:stick 4', + groups = {tree = 1, choppy = 3, flammable = 1}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node +}) + +minetest.register_node("outback:grey_mangrove_leaves", { + description = "Grey Mangrove Leaves", + drawtype = "allfaces_optional", + waving = 1, + visual_scale = 1.0, + tiles = {"ob_grey_mangrove_leaves.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"outback:grey_mangrove_sapling"}, rarity = 20,}, + {items = {"outback:grey_mangrove_leaves"},} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("outback:grey_mangrove_sapling", { + description = "Grey Mangrove Sapling", + drawtype = "plantlike", + visual_scale = 1.0, + tiles = {"ob_mangrove_sapling.png"}, + inventory_image = "ob_mangrove_sapling.png", + wield_image = "ob_mangrove_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} + }, + groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(2400,4800)) + end, + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "outback:grey_mangrove_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 5, z = 2}, + -- maximum interval of interior volume check + 4) + return itemstack + end, +}) + + +-- Create and initialize a table for a schematic. +function outback.schematic_array(width, height, depth) + -- Dimensions of data array. + local s = {size = {x = width, y = height, z = depth}} + s.data = {} + + for z = 0, depth - 1 do + for y = 0, height - 1 do + for x = 0, width - 1 do + local i = z * width * height + y * width + x + 1 + s.data[i] = {} + s.data[i].name = "air" + s.data[i].param1 = 000 + end + end + end + + s.yslice_prob = {} + + return s +end + +-- Make a tree trunk 2-nodes wide. +local function make_treetrunk2(x0, y0, z0, data, area, height, trunk, air, base) + local ystride = area.ystride + local ybot = y0 - 1 + for x = x0, x0 + 1 do + for y = 1,height do + for z = z0, z0 + 1 do -- iterate in a 2x2 square around the trunk + local iv = area:index(x, ybot, z) + for i = 0, height + 1 do + if data[iv] == air then -- find the ground level + if math.random() < base then + data[iv-ystride] = trunk -- make tree trunk below + if math.random() < base then + data[iv] = trunk -- make tree trunk at this air node + end + end + break + end + iv = iv + ystride -- increment by one node up + end + end + end + end +end + +-- Make a tree trunk 3-nodes wide. +local function make_treetrunk3(x0, y0, z0, data, area, height, trunk, air, base) + local ystride = area.ystride + local ybot = y0 - 1 + for x = x0 - 1, x0 + 1 do + for y = 1, height do + for z = z0 - 1, z0 + 1 do -- iterate in a 3x3 square around the trunk + local iv = area:index(x, ybot, z) + for i = 0, height + 1 do + if data[iv] == air then -- find the ground level + if math.random() < base then + data[iv-ystride] = trunk -- make tree trunk below + if math.random() < base then + data[iv] = trunk -- make tree trunk at this air node + end + end + break + end + iv = iv + ystride -- increment by one node up + end + end + end + end +end + + +-- Make leaves on a tree in a noise blob. +function outback.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, radius, np, limbs, fruit_chance, fruit) + limbs = limbs + fruit_chance = fruit_chance or 0 + np.seed = math.random(0, 16777215) -- noise seed + local minp = vector.subtract(pos, radius) -- minimal corner of the leavesblob + local maxp = vector.add(pos, radius) -- maximal corner of the leavesblob + -- Same positions, but with integer coordinates + local int_minp = {x = math.floor(minp.x), y = math.floor(minp.y), z = math.floor(minp.z)} + local int_maxp = {x = math.ceil(maxp.x), y = math.ceil(maxp.y), z = math.ceil(maxp.z)} + + local length = vector.subtract(int_maxp, int_minp) + local chulens = vector.add(length, 1) + local obj = minetest.get_perlin_map(np, chulens) + local pmap = obj:get3dMap_flat(minp) + local i = 1 + -- iterate for every position + -- calculate the distance from the center by the Pythagorean theorem: d = sqrt(x²+y²+z²) + for x = int_minp.x, int_maxp.x do + -- calculate x², y², z² separately, to avoid recalculating x² for every + -- y or z iteration. Divided by the radius to scale it to 0…1 + local xval = ((x - pos.x) / radius.x) ^ 2 + for y = int_minp.y, int_maxp.y do + local yval = ((y - pos.y) / radius.y) ^ 2 + for z = int_minp.z, int_maxp.z do + local zval = ((z - pos.z) / radius.z) ^ 2 + local dist = math.sqrt(xval + yval + zval) -- Calculate the distance + local nval = pmap[i] -- Get the noise value + if nval > dist then -- if the noise is bigger than the distance, make leaves + local iv = area:index(x, y, z) + if data[iv] == air or data[iv] == ignore then + -- make some branches within the leaf structure + if nval > dist * 1.5 and limbs and math.random(5) == 1 then + data[iv] = trunk + -- if a fruit tree add fruit + elseif math.random() < fruit_chance then + data[iv] = fruit + else + data[iv] = leaves + end + end + end + i = i + 1 -- increment noise index + end + end + end +end + +-- Generic bush function. +function outback.make_bush(pos, data, area, height, radius, stem, leaves, air, + ignore) + local ystride = area.ystride -- Useful to get the index above + local iv = area:indexp(pos) + for i = 1, height do -- Build the trunk + data[iv] = stem + iv = iv + ystride -- increment by one node up + end + local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} + pos.y = pos.y + height + outback.make_leavesblob(pos, data, area, stem, leaves, air, ignore, + {x = radius, y = radius, z = radius}, np) +end + +-- Generic tree function. +function outback.make_tree(pos, data, area, height, radius, trunk, leaves, air, + ignore, limbs, fruit_chance, fruit) + local ystride = area.ystride -- Useful to get the index above + local iv = area:indexp(pos) + for i = 1, height do -- Build the trunk + data[iv] = trunk + iv = iv + ystride -- increment by one node up + end + local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} + pos.y = pos.y + height - 1 + outback.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, + {x = radius, y = radius, z = radius}, np, limbs, fruit_chance, fruit) +end + +function outback.make_mangrove(pos, data, area, height, radius, trunk, leaves, air, ignore) + local x, y, z = pos.x, pos.y, pos.z + local ystride = area.ystride -- Useful to get the index above + local iv = area:indexp(pos) + for i = 1, height do -- Build the trunk + data[iv] = trunk + iv = iv + ystride -- increment by one node up + end + local np = {offset = 0.8, scale = 0.4, spread = {x = 8, y = 4, z = 8}, octaves = 3, persist = 0.5} + pos.y = pos.y + height + outback.make_leavesblob(pos, data, area, trunk, leaves, air, ignore, + {x = radius, y = radius * 0.5, z = radius}, np) + for z_dist = -1, 1 do + local vi_1 = area:index(x - 1, y - 1, z + z_dist) + local vi_2 = area:index(x - 1, y, z + z_dist) + local vi_3 = area:index(x - 1, y + 1, z + z_dist) + for x_dist = -1, 1 do + if math.random(1, 3) >= 2 then + if data[vi_1] == air or data[vi_1] == ignore then + data[vi_1] = trunk + elseif data[vi_2] == air or data[vi_2] == ignore then + data[vi_2] = trunk + elseif data[vi_3] == air or data[vi_3] == ignore then + data[vi_3] = trunk + end + end + vi_1 = vi_1 + 1 + vi_2 = vi_2 + 1 + end + end +end + +-- Mangrove trees use schematic placement because the vocelmanipulator cannot place nodes under sea level. +function outback.generate_mangrove_tree_schematic(trunk_height, trunk, leaf) + local height = trunk_height * 2 + 1 + local radius = 2 + local width = 2 * radius + 1 + local trunk_top = height - 3 + local s = outback.schematic_array(width, height, width) + + -- roots, trunk, and extra leaves + for z = -1, 1 do + for y = 1, trunk_top do + for x = -1, 1 do + local i = (z + radius) * width * height + y * width + (x + radius) + 1 + if x == 0 and z == 0 then + s.data[i].name = trunk + s.data[i].param1 = 255 + s.data[i].force_place = true + elseif (x == 0 or z == 0) and y < 3 then + s.data[i].name = trunk + s.data[i].param1 = 255 + s.data[i].force_place = true + elseif y > 3 then + s.data[i].name = leaf + s.data[i].param1 = 50 + end + end + end + end + + -- canopy + for y = 1, trunk_top + 2 do + if y > trunk_height and (y == trunk_top or math.random(1, height - y) == 1) then + local x, z = 0, 0 + while x == 0 and z == 0 do + x = math.random(-1, 1) * 2 + z = math.random(-1, 1) * 2 + end + for j = -1, 1, 2 do + outback.generate_canopy(s, leaf, {x = j * x, y = y, z = j * z}) + end + end + end + return s +end + +-- Create a canopy of leaves. +function outback.generate_canopy(s, leaf, pos) + local height = s.size.y + local width = s.size.x + local rx = math.floor(s.size.x / 2) + local rz = math.floor(s.size.z / 2) + local r1 = 4 -- leaf decay radius + local probs = {255, 200, 150, 100, 75} + + for z = -r1, r1 do + for y = 0, 1 do + for x = -r1, r1 do + if x+pos.x >= -rx and x + pos.x <= rx and y + pos.y >= 0 and + y + pos.y < height and z + pos.z >= -rz and z + pos.z <= rz then + local i = (z + pos.z + rz) * width * height + (y + pos.y) * width + (x + pos.x + rx) + 1 + local dist1 = math.sqrt(x^2 + y^2 + z^2) + local dist2 = math.sqrt((x+pos.x)^2 + (z+pos.z)^2) + if dist1 <= r1 then + local newprob = probs[math.max(1, math.ceil(dist1))] + if s.data[i].name == "air" then + s.data[i].name = leaf + s.data[i].param1 = newprob + elseif s.data[i].name == leaf then + s.data[i].param1 = math.max(s.data[i].param1, newprob) + end + end + end + end + end + end +end + +function outback.grow_grey_mangrove(pos) + -- individual parameters + local height = math.random(3, 4) + local radius = 2 + -- voxelmanip stuff + local trunk = minetest.get_content_id("outback:grey_mangrove_tree") + local leaves = minetest.get_content_id("outback:grey_mangrove_leaves") + local air = minetest.get_content_id("air") + local ignore = minetest.get_content_id("ignore") + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + {x = pos.x + 2, y = pos.y + height + 1, z = pos.z + 2} + ) + local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + outback.make_mangrove(pos, data, area, height, radius, trunk, leaves, air, ignore) + vm:set_data(data) + vm:write_to_map() + vm:update_map() +end + +-- Palm Tree +minetest.register_node("outback:palm_tree", { + description = "Palm Tree", + tiles = { + "ob_palm_tree_top.png", + "ob_palm_tree_top.png", + "ob_palm_tree.png" + }, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node +}) + +minetest.register_node("outback:palm_leaves", { + description = "Palm Leaves", + drawtype = "allfaces_optional", + waving = 1, + visual_scale = 1.0, + tiles = {"ob_palm_leaves.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 5, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"outback:palm_sapling"}, rarity = 20,}, + {items = {"outback:palm_leaves"},} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("outback:palm_sapling", { + description = "Palm Sapling", + drawtype = "plantlike", + visual_scale = 1.0, + tiles = {"ob_palm_sapling.png"}, + inventory_image = "ob_palm_sapling.png", + wield_image = "ob_palm_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-5/16, -8/16, -5/16, 5/16, 11/32, 5/16} + }, + groups = {snappy = 2, dig_immediate = 2, flammable = 2, attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(2400,4800)) + end, + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "outback:palm_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -5, y = 1, z = -5}, + {x = 5, y = 15, z = 5}, + -- maximum interval of interior volume check + 4) + return itemstack + end, +}) + +outback.palm_model={ + axiom="FFcccccc&FFFFFdddRA//A//A//A//A//A", + rules_a="[&fb&bbb[++f--&ffff&ff][--f++&ffff&ff]&ffff&bbbb&b]", + rules_b="f", + rules_c="/", + rules_d="F", + trunk="outback:palm_tree", + leaves="outback:palm_leaves", + angle=30, + iterations=2, + random_level=0, + trunk_type="single", + thin_branches=true, + fruit="outback:palm_tree", + fruit_chance=0 +} diff --git a/mods/ITEMS/australia/sounds/aus_mangrove_mud.1.ogg b/mods/outback/sounds/ob_mangrove_mud.1.ogg similarity index 100% rename from mods/ITEMS/australia/sounds/aus_mangrove_mud.1.ogg rename to mods/outback/sounds/ob_mangrove_mud.1.ogg diff --git a/mods/ITEMS/australia/sounds/aus_mangrove_mud.2.ogg b/mods/outback/sounds/ob_mangrove_mud.2.ogg similarity index 100% rename from mods/ITEMS/australia/sounds/aus_mangrove_mud.2.ogg rename to mods/outback/sounds/ob_mangrove_mud.2.ogg diff --git a/mods/ITEMS/australia/sounds/aus_mangrove_mud.3.ogg b/mods/outback/sounds/ob_mangrove_mud.3.ogg similarity index 100% rename from mods/ITEMS/australia/sounds/aus_mangrove_mud.3.ogg rename to mods/outback/sounds/ob_mangrove_mud.3.ogg diff --git a/mods/ITEMS/australia/sounds/aus_mangrove_mud.4.ogg b/mods/outback/sounds/ob_mangrove_mud.4.ogg similarity index 100% rename from mods/ITEMS/australia/sounds/aus_mangrove_mud.4.ogg rename to mods/outback/sounds/ob_mangrove_mud.4.ogg diff --git a/mods/ITEMS/australia/sounds/aus_mangrove_mud.5.ogg b/mods/outback/sounds/ob_mangrove_mud.5.ogg similarity index 100% rename from mods/ITEMS/australia/sounds/aus_mangrove_mud.5.ogg rename to mods/outback/sounds/ob_mangrove_mud.5.ogg diff --git a/mods/ITEMS/australia/sounds/aus_mangrove_mud.6.ogg b/mods/outback/sounds/ob_mangrove_mud.6.ogg similarity index 100% rename from mods/ITEMS/australia/sounds/aus_mangrove_mud.6.ogg rename to mods/outback/sounds/ob_mangrove_mud.6.ogg diff --git a/mods/ITEMS/australia/textures/aus_basalt.png b/mods/outback/textures/ob_basalt.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_basalt.png rename to mods/outback/textures/ob_basalt.png diff --git a/mods/ITEMS/australia/textures/aus_basalt_brick.png b/mods/outback/textures/ob_basalt_brick.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_basalt_brick.png rename to mods/outback/textures/ob_basalt_brick.png diff --git a/mods/ITEMS/australia/textures/aus_basalt_cobble.png b/mods/outback/textures/ob_basalt_cobble.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_basalt_cobble.png rename to mods/outback/textures/ob_basalt_cobble.png diff --git a/mods/ITEMS/australia/textures/aus_diorite.png b/mods/outback/textures/ob_diorite.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_diorite.png rename to mods/outback/textures/ob_diorite.png diff --git a/mods/ITEMS/australia/textures/aus_diorite_brick.png b/mods/outback/textures/ob_diorite_brick.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_diorite_brick.png rename to mods/outback/textures/ob_diorite_brick.png diff --git a/mods/ITEMS/australia/textures/aus_diorite_cobble.png b/mods/outback/textures/ob_diorite_cobble.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_diorite_cobble.png rename to mods/outback/textures/ob_diorite_cobble.png diff --git a/mods/ITEMS/australia/textures/aus_grey_mangrove_leaves.png b/mods/outback/textures/ob_grey_mangrove_leaves.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_grey_mangrove_leaves.png rename to mods/outback/textures/ob_grey_mangrove_leaves.png diff --git a/mods/ITEMS/australia/textures/aus_grey_mangrove_tree.png b/mods/outback/textures/ob_grey_mangrove_tree.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_grey_mangrove_tree.png rename to mods/outback/textures/ob_grey_mangrove_tree.png diff --git a/mods/ITEMS/australia/textures/aus_grey_mangrove_tree_top.png b/mods/outback/textures/ob_grey_mangrove_tree_top.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_grey_mangrove_tree_top.png rename to mods/outback/textures/ob_grey_mangrove_tree_top.png diff --git a/mods/outback/textures/ob_limestone.png b/mods/outback/textures/ob_limestone.png new file mode 100644 index 0000000..23057be Binary files /dev/null and b/mods/outback/textures/ob_limestone.png differ diff --git a/mods/ITEMS/australia/textures/aus_limestone_brick.png b/mods/outback/textures/ob_limestone_brick.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_limestone_brick.png rename to mods/outback/textures/ob_limestone_brick.png diff --git a/mods/ITEMS/australia/textures/aus_limestone_cobble.png b/mods/outback/textures/ob_limestone_cobble.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_limestone_cobble.png rename to mods/outback/textures/ob_limestone_cobble.png diff --git a/mods/ITEMS/australia/textures/aus_mangrove_fern.png b/mods/outback/textures/ob_mangrove_fern.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mangrove_fern.png rename to mods/outback/textures/ob_mangrove_fern.png diff --git a/mods/ITEMS/australia/textures/aus_mangrove_mud.png b/mods/outback/textures/ob_mangrove_mud.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mangrove_mud.png rename to mods/outback/textures/ob_mangrove_mud.png diff --git a/mods/ITEMS/australia/textures/aus_mangrove_palm_leaf_bot.png b/mods/outback/textures/ob_mangrove_palm_leaf_bot.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mangrove_palm_leaf_bot.png rename to mods/outback/textures/ob_mangrove_palm_leaf_bot.png diff --git a/mods/ITEMS/australia/textures/aus_mangrove_palm_leaf_top.png b/mods/outback/textures/ob_mangrove_palm_leaf_top.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mangrove_palm_leaf_top.png rename to mods/outback/textures/ob_mangrove_palm_leaf_top.png diff --git a/mods/ITEMS/australia/textures/aus_mangrove_palm_trunk.png b/mods/outback/textures/ob_mangrove_palm_trunk.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mangrove_palm_trunk.png rename to mods/outback/textures/ob_mangrove_palm_trunk.png diff --git a/mods/ITEMS/australia/textures/aus_marble.png b/mods/outback/textures/ob_marble.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_marble.png rename to mods/outback/textures/ob_marble.png diff --git a/mods/ITEMS/australia/textures/aus_marble_tile.png b/mods/outback/textures/ob_marble_tile.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_marble_tile.png rename to mods/outback/textures/ob_marble_tile.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_agate.png b/mods/outback/textures/ob_mineral_agate.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_agate.png rename to mods/outback/textures/ob_mineral_agate.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_aluminium.png b/mods/outback/textures/ob_mineral_aluminium.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_aluminium.png rename to mods/outback/textures/ob_mineral_aluminium.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_amethyst.png b/mods/outback/textures/ob_mineral_amethyst.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_amethyst.png rename to mods/outback/textures/ob_mineral_amethyst.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_citrine.png b/mods/outback/textures/ob_mineral_citrine.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_citrine.png rename to mods/outback/textures/ob_mineral_citrine.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_emerald.png b/mods/outback/textures/ob_mineral_emerald.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_emerald.png rename to mods/outback/textures/ob_mineral_emerald.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_jade.png b/mods/outback/textures/ob_mineral_jade.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_jade.png rename to mods/outback/textures/ob_mineral_jade.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_nickel.png b/mods/outback/textures/ob_mineral_nickel.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_nickel.png rename to mods/outback/textures/ob_mineral_nickel.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_opal.png b/mods/outback/textures/ob_mineral_opal.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_opal.png rename to mods/outback/textures/ob_mineral_opal.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_ruby.png b/mods/outback/textures/ob_mineral_ruby.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_ruby.png rename to mods/outback/textures/ob_mineral_ruby.png diff --git a/mods/outback/textures/ob_mineral_salt.png b/mods/outback/textures/ob_mineral_salt.png new file mode 100644 index 0000000..e4b981b Binary files /dev/null and b/mods/outback/textures/ob_mineral_salt.png differ diff --git a/mods/ITEMS/australia/textures/aus_mineral_sapphire.png b/mods/outback/textures/ob_mineral_sapphire.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_sapphire.png rename to mods/outback/textures/ob_mineral_sapphire.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_silver.png b/mods/outback/textures/ob_mineral_silver.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_silver.png rename to mods/outback/textures/ob_mineral_silver.png diff --git a/mods/ITEMS/australia/textures/aus_mineral_smoky_quartz.png b/mods/outback/textures/ob_mineral_smoky_quartz.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_mineral_smoky_quartz.png rename to mods/outback/textures/ob_mineral_smoky_quartz.png diff --git a/mods/ITEMS/australia/textures/aus_muddy_water.png b/mods/outback/textures/ob_muddy_water.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_muddy_water.png rename to mods/outback/textures/ob_muddy_water.png diff --git a/mods/ITEMS/australia/textures/aus_muddy_water_flowing_animated.png b/mods/outback/textures/ob_muddy_water_flowing_animated.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_muddy_water_flowing_animated.png rename to mods/outback/textures/ob_muddy_water_flowing_animated.png diff --git a/mods/ITEMS/australia/textures/aus_muddy_water_source_animated.png b/mods/outback/textures/ob_muddy_water_source_animated.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_muddy_water_source_animated.png rename to mods/outback/textures/ob_muddy_water_source_animated.png diff --git a/mods/ITEMS/australia/textures/aus_opal.png b/mods/outback/textures/ob_opal.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_opal.png rename to mods/outback/textures/ob_opal.png diff --git a/mods/ITEMS/australia/textures/aus_palm_leaves.png b/mods/outback/textures/ob_palm_leaves.png old mode 100755 new mode 100644 similarity index 100% rename from mods/ITEMS/australia/textures/aus_palm_leaves.png rename to mods/outback/textures/ob_palm_leaves.png diff --git a/mods/ITEMS/australia/textures/aus_palm_sapling.png b/mods/outback/textures/ob_palm_sapling.png old mode 100755 new mode 100644 similarity index 100% rename from mods/ITEMS/australia/textures/aus_palm_sapling.png rename to mods/outback/textures/ob_palm_sapling.png diff --git a/mods/ITEMS/australia/textures/aus_palm_tree.png b/mods/outback/textures/ob_palm_tree.png old mode 100755 new mode 100644 similarity index 100% rename from mods/ITEMS/australia/textures/aus_palm_tree.png rename to mods/outback/textures/ob_palm_tree.png diff --git a/mods/ITEMS/australia/textures/aus_palm_tree_top.png b/mods/outback/textures/ob_palm_tree_top.png old mode 100755 new mode 100644 similarity index 100% rename from mods/ITEMS/australia/textures/aus_palm_tree_top.png rename to mods/outback/textures/ob_palm_tree_top.png diff --git a/mods/ITEMS/australia/textures/aus_red_dirt.png b/mods/outback/textures/ob_red_dirt.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_red_dirt.png rename to mods/outback/textures/ob_red_dirt.png diff --git a/mods/outback/textures/ob_red_gravel.png b/mods/outback/textures/ob_red_gravel.png new file mode 100644 index 0000000..e0c91d4 Binary files /dev/null and b/mods/outback/textures/ob_red_gravel.png differ diff --git a/mods/outback/textures/ob_red_sand.png b/mods/outback/textures/ob_red_sand.png new file mode 100644 index 0000000..a30af30 Binary files /dev/null and b/mods/outback/textures/ob_red_sand.png differ diff --git a/mods/outback/textures/ob_red_sandstone.png b/mods/outback/textures/ob_red_sandstone.png new file mode 100644 index 0000000..b497f12 Binary files /dev/null and b/mods/outback/textures/ob_red_sandstone.png differ diff --git a/mods/ITEMS/australia/textures/aus_red_sandstone_brick.png b/mods/outback/textures/ob_red_sandstone_brick.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_red_sandstone_brick.png rename to mods/outback/textures/ob_red_sandstone_brick.png diff --git a/mods/ITEMS/australia/textures/aus_red_sandstone_cobble.png b/mods/outback/textures/ob_red_sandstone_cobble.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_red_sandstone_cobble.png rename to mods/outback/textures/ob_red_sandstone_cobble.png diff --git a/mods/ITEMS/australia/textures/aus_salt.png b/mods/outback/textures/ob_salt.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_salt.png rename to mods/outback/textures/ob_salt.png diff --git a/mods/ITEMS/australia/textures/aus_sandstone_cobble.png b/mods/outback/textures/ob_sandstone_cobble.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_sandstone_cobble.png rename to mods/outback/textures/ob_sandstone_cobble.png diff --git a/mods/ITEMS/australia/textures/aus_shale.png b/mods/outback/textures/ob_shale.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_shale.png rename to mods/outback/textures/ob_shale.png diff --git a/mods/ITEMS/australia/textures/aus_shale_side.png b/mods/outback/textures/ob_shale_side.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_shale_side.png rename to mods/outback/textures/ob_shale_side.png diff --git a/mods/ITEMS/australia/textures/aus_slate.png b/mods/outback/textures/ob_slate.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_slate.png rename to mods/outback/textures/ob_slate.png diff --git a/mods/ITEMS/australia/textures/aus_slate_brick.png b/mods/outback/textures/ob_slate_brick.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_slate_brick.png rename to mods/outback/textures/ob_slate_brick.png diff --git a/mods/ITEMS/australia/textures/aus_slate_rubble.png b/mods/outback/textures/ob_slate_rubble.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_slate_rubble.png rename to mods/outback/textures/ob_slate_rubble.png diff --git a/mods/ITEMS/australia/textures/aus_slate_side.png b/mods/outback/textures/ob_slate_side.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_slate_side.png rename to mods/outback/textures/ob_slate_side.png diff --git a/mods/ITEMS/australia/textures/aus_slate_tile.png b/mods/outback/textures/ob_slate_tile.png similarity index 100% rename from mods/ITEMS/australia/textures/aus_slate_tile.png rename to mods/outback/textures/ob_slate_tile.png diff --git a/mods/pipeworks/.gitignore b/mods/pipeworks/.gitignore new file mode 100755 index 0000000..ef02689 --- /dev/null +++ b/mods/pipeworks/.gitignore @@ -0,0 +1,22 @@ +## Files related to minetest development cycle +/*.patch +# GNU Patch reject file +*.rej + +## Editors and Development environments +*~ +*.swp +*.bak* +*.orig +# Vim +*.vim +# Kate +.*.kate-swp +.swp.* +# Eclipse (LDT) +.project +.settings/ +.buildpath +.metadata +# Idea IDE +.idea/* diff --git a/mods/pipeworks/LICENSE b/mods/pipeworks/LICENSE new file mode 100755 index 0000000..ecbf212 --- /dev/null +++ b/mods/pipeworks/LICENSE @@ -0,0 +1,693 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey 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) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + +-------------------------------------------------------------------------------- + +Some code in lua_tube.lua is copied from The Mesecons Mod for Minetest: + +License of source code +---------------------- +Copyright (C) 2011-2016 Mesecons Mod Developer Team and contributors + +This program is free software; you can redistribute the Mesecons Mod and/or +modify it under the terms of the GNU Lesser General Public License version 3 +published by the Free Software Foundation. + +This library 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the +Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +Boston, MA 02110-1301, USA. + + +GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 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. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser 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 +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + diff --git a/mods/ITEMS/pipeworks/README b/mods/pipeworks/README old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/README rename to mods/pipeworks/README diff --git a/mods/pipeworks/autocrafter.lua b/mods/pipeworks/autocrafter.lua new file mode 100755 index 0000000..7ddc312 --- /dev/null +++ b/mods/pipeworks/autocrafter.lua @@ -0,0 +1,413 @@ +local autocrafterCache = {} -- caches some recipe data to avoid to call the slow function minetest.get_craft_result() every second + +local craft_time = 1 + +local function count_index(invlist) + local index = {} + for _, stack in pairs(invlist) do + if not stack:is_empty() then + local stack_name = stack:get_name() + index[stack_name] = (index[stack_name] or 0) + stack:get_count() + end + end + return index +end + +local function get_item_info(stack) + local name = stack:get_name() + local def = minetest.registered_items[name] + local description = def and def.description or "Unknown item" + return description, name +end + +local function get_craft(pos, inventory, hash) + local hash = hash or minetest.hash_node_position(pos) + local craft = autocrafterCache[hash] + if not craft then + local recipe = inventory:get_list("recipe") + local output, decremented_input = minetest.get_craft_result({method = "normal", width = 3, items = recipe}) + craft = {recipe = recipe, consumption=count_index(recipe), output = output, decremented_input = decremented_input} + autocrafterCache[hash] = craft + end + return craft +end + +local function autocraft(inventory, craft) + if not craft then return false end + local output_item = craft.output.item + + -- check if we have enough room in dst + if not inventory:room_for_item("dst", output_item) then return false end + local consumption = craft.consumption + local inv_index = count_index(inventory:get_list("src")) + -- check if we have enough material available + for itemname, number in pairs(consumption) do + if (not inv_index[itemname]) or inv_index[itemname] < number then return false end + end + -- consume material + for itemname, number in pairs(consumption) do + for i = 1, number do -- We have to do that since remove_item does not work if count > stack_max + inventory:remove_item("src", ItemStack(itemname)) + end + end + + -- craft the result into the dst inventory and add any "replacements" as well + inventory:add_item("dst", output_item) + for i = 1, 9 do + inventory:add_item("dst", craft.decremented_input.items[i]) + end + return true +end + +-- returns false to stop the timer, true to continue running +-- is started only from start_autocrafter(pos) after sanity checks and cached recipe +local function run_autocrafter(pos, elapsed) + local meta = minetest.get_meta(pos) + local inventory = meta:get_inventory() + local craft = get_craft(pos, inventory) + local output_item = craft.output.item + -- only use crafts that have an actual result + if output_item:is_empty() then + meta:set_string("infotext", "unconfigured Autocrafter: unknown recipe") + return false + end + + for step = 1, math.floor(elapsed/craft_time) do + local continue = autocraft(inventory, craft) + if not continue then return false end + end + return true +end + +local function start_crafter(pos) + local meta = minetest.get_meta(pos) + if meta:get_int("enabled") == 1 then + local timer = minetest.get_node_timer(pos) + if not timer:is_started() then + timer:start(craft_time) + end + end +end + +local function after_inventory_change(pos) + start_crafter(pos) +end + +-- note, that this function assumes allready being updated to virtual items +-- and doesn't handle recipes with stacksizes > 1 +local function after_recipe_change(pos, inventory) + local meta = minetest.get_meta(pos) + -- if we emptied the grid, there's no point in keeping it running or cached + if inventory:is_empty("recipe") then + minetest.get_node_timer(pos):stop() + autocrafterCache[minetest.hash_node_position(pos)] = nil + meta:set_string("infotext", "unconfigured Autocrafter") + inventory:set_stack("output", 1, "") + return + end + local recipe_changed = false + local recipe = inventory:get_list("recipe") + + local hash = minetest.hash_node_position(pos) + local craft = autocrafterCache[hash] + + if craft then + -- check if it changed + local cached_recipe = craft.recipe + for i = 1, 9 do + if recipe[i]:get_name() ~= cached_recipe[i]:get_name() then + autocrafterCache[hash] = nil -- invalidate recipe + craft = nil + break + end + end + end + + craft = craft or get_craft(pos, inventory, hash) + local output_item = craft.output.item + local description, name = get_item_info(output_item) + meta:set_string("infotext", string.format("'%s' Autocrafter (%s)", description, name)) + inventory:set_stack("output", 1, output_item) + + after_inventory_change(pos) +end + +-- clean out unknown items and groups, which would be handled like unknown items in the crafting grid +-- if minetest supports query by group one day, this might replace them +-- with a canonical version instead +local function normalize(item_list) + for i = 1, #item_list do + local name = item_list[i] + if not minetest.registered_items[name] then + item_list[i] = "" + end + end + return item_list +end + +local function on_output_change(pos, inventory, stack) + if not stack then + inventory:set_list("output", {}) + inventory:set_list("recipe", {}) + else + local input = minetest.get_craft_recipe(stack:get_name()) + if not input.items or input.type ~= "normal" then return end + local items, width = normalize(input.items), input.width + local item_idx, width_idx = 1, 1 + for i = 1, 9 do + if width_idx <= width then + inventory:set_stack("recipe", i, items[item_idx]) + item_idx = item_idx + 1 + else + inventory:set_stack("recipe", i, ItemStack("")) + end + width_idx = (width_idx < 3) and (width_idx + 1) or 1 + end + -- we'll set the output slot in after_recipe_change to the actual result of the new recipe + end + after_recipe_change(pos, inventory) +end + +-- returns false if we shouldn't bother attempting to start the timer again after this +local function update_meta(meta, enabled) + local state = enabled and "on" or "off" + meta:set_int("enabled", enabled and 1 or 0) + local fs = "size[8,12]".. + "list[context;recipe;0,0;3,3;]".. + "image[3,1;1,1;gui_hb_bg.png^[colorize:#141318:255]".. + "list[context;output;3,1;1,1;]".. + "image_button[3,2;1,0.6;pipeworks_button_" .. state .. ".png;" .. state .. ";;;false;pipeworks_button_interm.png]" .. + "list[context;src;0,4.5;8,3;]".. + "list[context;dst;4,0;4,3;]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + default.get_hotbar_bg(0,8) .. + "list[current_player;main;0,8;8,4;]" .. + "listring[current_player;main]".. + "listring[context;src]" .. + "listring[current_player;main]".. + "listring[context;dst]" .. + "listring[current_player;main]" + if minetest.get_modpath("digilines") then + fs = fs.."field[1,3.5;4,1;channel;Channel;${channel}]" + fs = fs.."button_exit[5,3.2;2,1;save;Save]" + end + meta:set_string("formspec",fs) + + -- toggling the button doesn't quite call for running a recipe change check + -- so instead we run a minimal version for infotext setting only + -- this might be more written code, but actually executes less + local output = meta:get_inventory():get_stack("output", 1) + if output:is_empty() then -- doesn't matter if paused or not + meta:set_string("infotext", "unconfigured Autocrafter") + return false + end + + local description, name = get_item_info(output) + local infotext = enabled and string.format("'%s' Autocrafter (%s)", description, name) + or string.format("paused '%s' Autocrafter", description) + + meta:set_string("infotext", infotext) + return enabled +end + +-- 1st version of the autocrafter had actual items in the crafting grid +-- the 2nd replaced these with virtual items, dropped the content on update and set "virtual_items" to string "1" +-- the third added an output inventory, changed the formspec and added a button for enabling/disabling +-- so we work out way backwards on this history and update each single case to the newest version +local function upgrade_autocrafter(pos, meta) + local meta = meta or minetest.get_meta(pos) + local inv = meta:get_inventory() + + if inv:get_size("output") == 0 then -- we are version 2 or 1 + inv:set_size("output", 1) + -- migrate the old autocrafters into an "enabled" state + update_meta(meta, true) + + if meta:get_string("virtual_items") == "1" then -- we are version 2 + -- we allready dropped stuff, so lets remove the metadatasetting (we are not being called again for this node) + meta:set_string("virtual_items", "") + else -- we are version 1 + local recipe = inv:get_list("recipe") + if not recipe then return end + for idx, stack in ipairs(recipe) do + if not stack:is_empty() then + minetest.add_item(pos, stack) + stack:set_count(1) + stack:set_wear(0) + inv:set_stack("recipe", idx, stack) + end + end + end + + -- update the recipe, cache, and start the crafter + autocrafterCache[minetest.hash_node_position(pos)] = nil + after_recipe_change(pos, inv) + end +end + +minetest.register_node("pipeworks:autocrafter", { + description = "Autocrafter", + drawtype = "normal", + tiles = {"pipeworks_autocrafter.png"}, + groups = {snappy = 3, tubedevice = 1, tubedevice_receiver = 1}, + tube = {insert_object = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local added = inv:add_item("src", stack) + after_inventory_change(pos) + return added + end, + can_insert = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:room_for_item("src", stack) + end, + input_inventory = "dst", + connect_sides = {left = 1, right = 1, front = 1, back = 1, top = 1, bottom = 1}}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("src", 3*8) + inv:set_size("recipe", 3*3) + inv:set_size("dst", 4*3) + inv:set_size("output", 1) + update_meta(meta, false) + end, + on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end + local meta = minetest.get_meta(pos) + if fields.on then + update_meta(meta, false) + minetest.get_node_timer(pos):stop() + elseif fields.off then + if update_meta(meta, true) then + start_crafter(pos) + end + elseif fields.save then + meta:set_string("channel",fields.channel) + end + end, + can_dig = function(pos, player) + upgrade_autocrafter(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return (inv:is_empty("src") and inv:is_empty("dst")) + end, + after_place_node = pipeworks.scan_for_tube_objects, + after_dig_node = function(pos) + pipeworks.scan_for_tube_objects(pos) + end, + on_destruct = function(pos) + autocrafterCache[minetest.hash_node_position(pos)] = nil + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end + upgrade_autocrafter(pos) + local inv = minetest.get_meta(pos):get_inventory() + if listname == "recipe" then + stack:set_count(1) + inv:set_stack(listname, index, stack) + after_recipe_change(pos, inv) + return 0 + elseif listname == "output" then + on_output_change(pos, inv, stack) + return 0 + end + after_inventory_change(pos) + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then + minetest.log("action", string.format("%s attempted to take from autocrafter at %s", player:get_player_name(), minetest.pos_to_string(pos))) + return 0 + end + upgrade_autocrafter(pos) + local inv = minetest.get_meta(pos):get_inventory() + if listname == "recipe" then + inv:set_stack(listname, index, ItemStack("")) + after_recipe_change(pos, inv) + return 0 + elseif listname == "output" then + on_output_change(pos, inv, nil) + return 0 + end + after_inventory_change(pos) + return stack:get_count() + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if not pipeworks.may_configure(pos, player) then return 0 end + upgrade_autocrafter(pos) + local inv = minetest.get_meta(pos):get_inventory() + local stack = inv:get_stack(from_list, from_index) + + if to_list == "output" then + on_output_change(pos, inv, stack) + return 0 + elseif from_list == "output" then + on_output_change(pos, inv, nil) + if to_list ~= "recipe" then + return 0 + end -- else fall through to recipe list handling + end + + if from_list == "recipe" or to_list == "recipe" then + if from_list == "recipe" then + inv:set_stack(from_list, from_index, ItemStack("")) + end + if to_list == "recipe" then + stack:set_count(1) + inv:set_stack(to_list, to_index, stack) + end + after_recipe_change(pos, inv) + return 0 + end + + after_inventory_change(pos) + return count + end, + on_timer = run_autocrafter, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if channel ~= meta:get_string("channel") then return end + if type(msg) == "table" then + if #msg < 3 then return end + local inv = meta:get_inventory() + for y=0,2,1 do + for x=1,3,1 do + local slot = y*3+x + if minetest.registered_items[msg[y+1][x]] then + inv:set_stack("recipe",slot,ItemStack(msg[y+1][x])) + else + inv:set_stack("recipe",slot,ItemStack("")) + end + end + end + after_recipe_change(pos,inv) + elseif msg == "off" then + update_meta(meta, false) + minetest.get_node_timer(pos):stop() + elseif msg == "on" then + if update_meta(meta, true) then + start_crafter(pos) + end + elseif msg == "single" then + run_autocrafter(pos,1) + end + end, + }, + }, +}) + +minetest.register_craft( { + output = "pipeworks:autocrafter 2", + recipe = { + { "default:steel_ingot", "default:mese_crystal", "default:steel_ingot" }, + { "homedecor:plastic_sheeting", "default:steel_ingot", "homedecor:plastic_sheeting" }, + { "default:steel_ingot", "default:mese_crystal", "default:steel_ingot" } + }, +}) diff --git a/mods/pipeworks/autodetect-finite-water.lua b/mods/pipeworks/autodetect-finite-water.lua new file mode 100755 index 0000000..d218e80 --- /dev/null +++ b/mods/pipeworks/autodetect-finite-water.lua @@ -0,0 +1,9 @@ +-- enable finite liquid in the presence of dynamic liquid to preserve water volume. +local enable = false + +if minetest.get_modpath("dynamic_liquid") then + pipeworks.logger("detected mod dynamic_liquid, enabling finite liquid flag") + enable = true +end + +pipeworks.toggles.finite_water = enable diff --git a/mods/pipeworks/autoplace_pipes.lua b/mods/pipeworks/autoplace_pipes.lua new file mode 100755 index 0000000..ec4b27e --- /dev/null +++ b/mods/pipeworks/autoplace_pipes.lua @@ -0,0 +1,226 @@ +--[[ + + autorouting for pipes + + To connect pipes to some node, include this in the node def... + + pipe_connections = { + pattern = , -- if supplied, search for this pattern instead of the exact node name + left = , -- true (or 1) if the left side of the node needs to connect to a pipe + right = , -- or from the right side, etc. + top = , + bottom = , + front = , + back = , + left_param2 = , -- the node must have this param2 to connect from the left + right_param2 = , -- or right, etc. + top_param2 = , -- Omit some or all of these to skip checking param2 for those sides + bottom_param2 = , + front_param2 = , + back_param2 = , + }, + + ...then add, pipeworks.scan_for_pipe_objects(pos) + to your node's after_dig_node and after_place_node callbacks. + +]]-- + +-- get the axis dir (just 6 faces) of target node, assumes the pipe is the axis + +function pipeworks.get_axis_dir(nodetable, pattern) + local pxm,pxp,pym,pyp,pzm,pzp + + if string.find(nodetable.nxm.name, pattern) + and minetest.facedir_to_dir(nodetable.nxm.param2).x ~= 0 then + pxm=1 + end + + if string.find(nodetable.nxp.name, pattern) + and minetest.facedir_to_dir(nodetable.nxp.param2).x ~= 0 then + pxp=1 + end + + if string.find(nodetable.nzm.name, pattern) + and minetest.facedir_to_dir(nodetable.nzm.param2).z ~= 0 then + pzm=1 + end + + if string.find(nodetable.nzp.name, pattern) + and minetest.facedir_to_dir(nodetable.nzp.param2).z ~= 0 then + pzp=1 + end + + if string.find(nodetable.nym.name, pattern) + and minetest.facedir_to_dir(nodetable.nym.param2).y ~= 0 then + pym=1 + end + + if string.find(nodetable.nyp.name, pattern) + and minetest.facedir_to_dir(nodetable.nyp.param2).y ~= 0 then + pyp=1 + end + local match = pxm or pxp or pym or pyp or pzm or pzp + return match,pxm,pxp,pym,pyp,pzm,pzp +end + +local tube_table = {[0] = 1, 2, 2, 4, 2, 4, 4, 5, 2, 3, 4, 6, 4, 6, 5, 7, 2, 4, 3, 6, 4, 5, 6, 7, 4, 6, 6, 8, 5, 7, 7, 9, 2, 4, 4, 5, 3, 6, 6, 7, 4, 6, 5, 7, 6, 8, 7, 9, 4, 5, 6, 7, 6, 7, 8, 9, 5, 7, 7, 9, 7, 9, 9, 10} +local tube_table_facedirs = {[0] = 0, 0, 5, 0, 3, 4, 3, 0, 2, 0, 2, 0, 6, 4, 3, 0, 7, 12, 5, 12, 7, 4, 5, 5, 18, 20, 16, 0, 7, 4, 7, 0, 1, 8, 1, 1, 1, 13, 1, 1, 10, 8, 2, 2, 17, 4, 3, 6, 9, 9, 9, 9, 21, 13, 1, 1, 10, 10, 11, 2, 19, 4, 3, 0} + +local function autoroute_pipes(pos) + local nctr = minetest.get_node(pos) + local state = "_empty" + if (string.find(nctr.name, "pipeworks:pipe_") == nil) then return end + if (string.find(nctr.name, "_loaded") ~= nil) then state = "_loaded" end + local nsurround = pipeworks.scan_pipe_surroundings(pos) + + if nsurround == 0 then nsurround = 9 end + minetest.swap_node(pos, {name = "pipeworks:pipe_"..tube_table[nsurround]..state, + param2 = tube_table_facedirs[nsurround]}) +end + +function pipeworks.scan_for_pipe_objects(pos) + autoroute_pipes({ x=pos.x-1, y=pos.y , z=pos.z }) + autoroute_pipes({ x=pos.x+1, y=pos.y , z=pos.z }) + autoroute_pipes({ x=pos.x , y=pos.y-1, z=pos.z }) + autoroute_pipes({ x=pos.x , y=pos.y+1, z=pos.z }) + autoroute_pipes({ x=pos.x , y=pos.y , z=pos.z-1 }) + autoroute_pipes({ x=pos.x , y=pos.y , z=pos.z+1 }) + autoroute_pipes(pos) +end + +-- auto-rotation code for various devices the pipes attach to + +function pipeworks.scan_pipe_surroundings(pos) + local pxm=0 + local pxp=0 + local pym=0 + local pyp=0 + local pzm=0 + local pzp=0 + + local nxm = minetest.get_node({ x=pos.x-1, y=pos.y , z=pos.z }) + local nxp = minetest.get_node({ x=pos.x+1, y=pos.y , z=pos.z }) + local nym = minetest.get_node({ x=pos.x , y=pos.y-1, z=pos.z }) + local nyp = minetest.get_node({ x=pos.x , y=pos.y+1, z=pos.z }) + local nzm = minetest.get_node({ x=pos.x , y=pos.y , z=pos.z-1 }) + local nzp = minetest.get_node({ x=pos.x , y=pos.y , z=pos.z+1 }) + + local nodetable = { + nxm = nxm, + nxp = nxp, + nym = nym, + nyp = nyp, + nzm = nzm, + nzp = nzp + } + +-- standard handling for pipes... + + if string.find(nxm.name, "pipeworks:pipe_") then pxm=1 end + if string.find(nxp.name, "pipeworks:pipe_") then pxp=1 end + if string.find(nym.name, "pipeworks:pipe_") then pym=1 end + if string.find(nyp.name, "pipeworks:pipe_") then pyp=1 end + if string.find(nzm.name, "pipeworks:pipe_") then pzm=1 end + if string.find(nzp.name, "pipeworks:pipe_") then pzp=1 end + +-- Special handling for valves... + + local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:valve") + if match then + pxm = a or pxm + pxp = b or pxp + pym = c or pym + pyp = d or pyp + pzm = e or pzm + pzp = f or pzp + end + +-- ...flow sensors... + + local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:flow_sensor") + if match then + pxm = a or pxm + pxp = b or pxp + pym = c or pym + pyp = d or pyp + pzm = e or pzm + pzp = f or pzp + end + +-- ...sealed pipe entry/exit... + + local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:entry_panel") + if match then + pxm = a or pxm + pxp = b or pxp + pym = c or pym + pyp = d or pyp + pzm = e or pzm + pzp = f or pzp + end + +-- ...straight-only pipe... + + local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:straight_pipe") + if match then + pxm = a or pxm + pxp = b or pxp + pym = c or pym + pyp = d or pyp + pzm = e or pzm + pzp = f or pzp + end + +-- ... other nodes + + local def_left = minetest.registered_nodes[nxp.name] -- the node that {pos} is to the left of (not the + local def_right = minetest.registered_nodes[nxm.name] -- ...note that is AT the left!), etc. + local def_bottom = minetest.registered_nodes[nyp.name] + local def_top = minetest.registered_nodes[nym.name] + local def_front = minetest.registered_nodes[nzp.name] + local def_back = minetest.registered_nodes[nzm.name] + + if def_left and def_left.pipe_connections and def_left.pipe_connections.left + and (not def_left.pipe_connections.pattern or string.find(nxp.name, def_left.pipe_connections.pattern)) + and (not def_left.pipe_connections.left_param2 or (nxp.param2 == def_left.pipe_connections.left_param2)) then + pxp = 1 + end + if def_right and def_right.pipe_connections and def_right.pipe_connections.right + and (not def_right.pipe_connections.pattern or string.find(nxm.name, def_right.pipe_connections.pattern)) + and (not def_right.pipe_connections.right_param2 or (nxm.param2 == def_right.pipe_connections.right_param2)) then + pxm = 1 + end + if def_top and def_top.pipe_connections and def_top.pipe_connections.top + and (not def_top.pipe_connections.pattern or string.find(nym.name, def_top.pipe_connections.pattern)) + and (not def_top.pipe_connections.top_param2 or (nym.param2 == def_top.pipe_connections.top_param2)) then + pym = 1 + end + if def_bottom and def_bottom.pipe_connections and def_bottom.pipe_connections.bottom + and (not def_bottom.pipe_connections.pattern or string.find(nyp.name, def_bottom.pipe_connections.pattern)) + and (not def_bottom.pipe_connections.bottom_param2 or (nyp.param2 == def_bottom.pipe_connections.bottom_param2)) then + pyp = 1 + end + if def_front and def_front.pipe_connections and def_front.pipe_connections.front + and (not def_front.pipe_connections.pattern or string.find(nzp.name, def_front.pipe_connections.pattern)) + and (not def_front.pipe_connections.front_param2 or (nzp.param2 == def_front.pipe_connections.front_param2)) then + pzp = 1 + end + if def_back and def_back.pipe_connections and def_back.pipe_connections.back + and (not def_back.pipe_connections.pattern or string.find(nzm.name, def_back.pipe_connections.pattern)) + and (not def_back.pipe_connections.back_param2 or (nzm.param2 == def_back.pipe_connections.back_param2)) then + pzm = 1 + end + + print("stage 2 returns "..pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp.. + " for nodes surrounding "..minetest.get_node(pos).name.." at "..minetest.pos_to_string(pos)) + return pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp +end + +function pipeworks.look_for_stackable_tanks(pos) + local tym = minetest.get_node({ x=pos.x , y=pos.y-1, z=pos.z }) + + if string.find(tym.name, "pipeworks:storage_tank_") ~= nil or + string.find(tym.name, "pipeworks:expansion_tank_") ~= nil then + minetest.add_node(pos, { name = "pipeworks:expansion_tank_0", param2 = tym.param2}) + end +end diff --git a/mods/ITEMS/pipeworks/autoplace_tubes.lua b/mods/pipeworks/autoplace_tubes.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/autoplace_tubes.lua rename to mods/pipeworks/autoplace_tubes.lua diff --git a/mods/pipeworks/changelog.txt b/mods/pipeworks/changelog.txt new file mode 100755 index 0000000..d33ed87 --- /dev/null +++ b/mods/pipeworks/changelog.txt @@ -0,0 +1,142 @@ +Changelog +--------- + + + +2017-10-19 (thetaepsilon) +Directional flowables are now implemented. +All devices for which it is relevant (valve, flow sensor etc.) have been converted so that they only flow on their connecting sides, so pressure propogation now works as expected for these devices when pressure logic is enabled. +Classic mode continues to be preserved by default as before. + + + +2017-10-14 (thetaepsilon, VanessaE) +Node breakers have been updated to not have a tool by default, and determine if the node that they are trying to break can be dug with the tool in it's inventory slot. +The crafting recipe for the node breakers has been updated, using a new gear crafting item that requires iron instead of mese, which should be a more accessible cost in most cases. +Existing node breakers in worlds will get their mese pick back if their slot is empty via LBM - the mese pick will show up in the inventory slot so you can reclaim your hard-earned mese crystals. +Gear item texture and updated node breaker textures provided by VanessaE. + + + +2017-10-08 (thetaepsilon) +A lot more of the new flow logic work. +There are two sub-modes of this now, non-finite and finite mode. +Non-finite mode most closely resembles "classic mode", whereas finite mode is more intended for use with mods such as dynamic_liquids which enable water sources to move themselves. +Everything that was functional in classic mode more or less works correctly now. +Still TODO: ++ Flow directionality - things like flow sensors and airtight panels will flow in directions that don't make sense from their visuals. +Possible feature requests: ++ Making tanks and gratings do something useful. + + + +2017-09-27 (thetaepsilon) +Start of new flow logic re-implementation. +This mode is current *very* incomplete, and requires a per-world setting to enable. +Adds a pressure value stored in all pipe node metadata, and a mechanism to balance it out with nearby nodes on ABM trigger. +Currently, this inhibits the old behaviour when enabled, and (again WHEN ENABLED) breaks pretty much everything but normal pipes, spigots and pumps. +For this reason it is far from being intended as the default for some time to come yet. +What *does* work: ++ Pumps will try to take in water (and removes it!) as long as internal pressure does not exceed a threshold. + - a TODO is to make this pressure threshold configurable. ++ Pipes will balance this pressure between themselves, and will slowly average out over time. ++ Spigots will try to make the node beneath them a water source if the pressure is great enough and the existing node is flowing water or air. + - This is admittedly of fairly limited use with default water mechanics; those looking for more realistic mechanics might want to look at the dynamic_liquid mod, though that mod comes with it's own caveats (most notably drastic changes to previous worlds...). +What *does not* work: ++ Flow sensors, valves. Valves in particular currently do not function as a barrier to water's path under the experimental logic. + - TODO: internal code to allow this to be overriden. + + + +*seems this hasn't been updated in a while* + +2013-01-13: Tubes can transport items now! Namely, I added Novatux/Nore's item +transport mod as a default part of this mod, to make tubes do something useful! +Thanks to Nore and RealBadAngel for the code contributions! + +2013-01-05: made storage tanks connect from top/bottom, made storage tank and +pipe textures use the ^ combine operator so they can show the actual liquid +going through the pipes/tanks. + +2013-01-04 (a bit later): Made pipes able to carry water! It was just a minor +logic error resulting from moving the water flowing code into it's own file +when I originally imported it. Many thanks to Mauvebic for writing it! + +2013-01-04: First stage of integrating Mauvebic's water flowing code. This is +experimental and doesn't move water yet - but at least it doesn't break +anything :-) + +2013-01-01: Various minor tweaks to textures, facedir settings, some other +stuff. Changed crafting recipes to account for revamped pumps, valves, etc. +Now requires the moreores mod and most recent git (for mese crystal fragments) +to craft a pump. Added a "sealed" entry/exit panel (really just a horizontal +pipe with a metal panel overlayed into the middle). Also, tweaked pipes to +always drop the empty ones. Revamped pumps so that now they should sit in/on +liquid and be connected only from the top, relegated grates to decorational- +only, added outlet spigot. Got rid of a few obsolete textures. Got rid of +that whole _x and _z naming thing - now all directional devices (pumps, valves, +spigots, tanks) use facedir. Valves, spigots no longer auto-rotate to find +nearby pipes. + +2012-09-17: Added test object for pneumatic tube autorouting code, made tubes +connect to it and any object that bears groups={tubedevice=1} (connects to any +side) + +2012-09-05: All recipes doubled except for junglegrass -> plastic sheet (since +that is derived from home decor) + +2012-09-02: Fixed plastic sheeting recipe. Added crafting recipes for various +objects, with options: If homedecor is installed, use the plastic sheeting +therein. If not, we define it manually. If the Technic mod is installed, +don't define any recipes at all. Also removed the extra "loaded!" messages and +tweaked the default pipe alias to point to something that is actually visible +:-) + +2012-09-01: flattened wielded pipe segment. + +2012-08-24: Added square-ish pneumatic tubes with their own autoplace code +(does not connect to steel pipes or pipe-oriented devices), then revised their +textures shortly after. Fixed a recursion bug that sometimes caused a stack +overflow. Old pipes were overriding the pipeworks:pipe defintion that belongs +with the new pipes. + +2012-08-22: Added outlet grate, made it participate in autoplace algorithm. +Extended storage tank to show fill level in 10% steps (0% to 100%). Added +"expansion tank" that appears if the user stacks tanks upwards. (Downwards is +not checked). + +2012-08-21: Made storage tank participate in autoplace algorithm. Tuned API a +little to allow for more flexible placement. Re-organized code a bit to allow +for some upcoming rules changes. Made storage tanks' upper/lower fittins and +intake grate participate in autoplace algorithm. + +2012-08-20: Added temporary nodes for storage tank and intake grating, but +without autoplace. + +2012-08-19: Pumps and valves now fully participate in the +auto-rotate/auto-place algorithm. + +2012-08-18: Total rewrite again. All pipes are now nice and round-looking, and +they auto-connect! Also added temporary nodes for pump and valve (each with an +on/off setting - punch to change). No crafting recipes yet and the pipes still +don't do anything useful yet. Soon. + +2012-08-06: Moved this changelog off the forum post and into a separate file. + +2012-08-05 (multiple updates): Rewrote pipeworks to use loops and tables to +create the nodes. Requires far less code now. Added -X, +X, -Y, +Y, -Z, +Z +capped stubs and a short centered horizontal segment. Changed node definitions +so that the aforementioned "short centered" segment is given on dig/drop. +Renamed it to just "pipeworks:pipe" (and pipe_loaded). Added empty/loaded +indicator images to the capped ends, removed some redundant comments. Made the +empty/loaded indication at the capped end more prominent. + +2012-07-21: Added screenshot showing pipes as they look now that nodebox +texture rotation is fixed. + +2012-07-18: Changed the mod name and all internals to 'pipeworks' instead of +'pipes'... after a couple of mistakes :-) + +2012-07-12: moved project to github. + +2012-06-23: Initial release, followed by reworking the textures a bit. diff --git a/mods/ITEMS/pipeworks/common.lua b/mods/pipeworks/common.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/common.lua rename to mods/pipeworks/common.lua diff --git a/mods/pipeworks/compat-chests.lua b/mods/pipeworks/compat-chests.lua new file mode 100755 index 0000000..78d865b --- /dev/null +++ b/mods/pipeworks/compat-chests.lua @@ -0,0 +1,243 @@ +-- this bit of code modifies the default chests and furnaces to be compatible +-- with pipeworks. +-- +-- the formspecs found here are basically copies of the ones from minetest_game +-- plus bits from pipeworks' sorting tubes + +-- Pipeworks Specific +local fs_helpers = pipeworks.fs_helpers +local tube_entry = "^pipeworks_tube_connection_wooden.png" + +-- Chest Locals +local open_chests = {} + +local function get_chest_formspec(pos) + 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;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[nodemeta:" .. spos .. ";main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + + -- Pipeworks Switch + formspec = formspec .. + fs_helpers.cycling_button( + minetest.get_meta(pos), + pipeworks.button_base, + "splitstacks", + { + pipeworks.button_off, + pipeworks.button_on + } + )..pipeworks.button_label + + return formspec +end + +local function chest_lid_obstructed(pos) + local above = { x = pos.x, y = pos.y + 1, z = pos.z } + local def = minetest.registered_nodes[minetest.get_node(above).name] + -- allow ladders, signs, wallmounted things and torches to not obstruct + if not def then return true end + if def.drawtype == "airlike" or + def.drawtype == "signlike" or + def.drawtype == "torchlike" or + (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted") then + return false + end + return true +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname == "pipeworks:chest_formspec" and player then + local pn = player:get_player_name() + if open_chests[pn] then + local pos = open_chests[pn].pos + if fields.quit then + local sound = open_chests[pn].sound + local swap = open_chests[pn].swap + local node = minetest.get_node(pos) + + open_chests[pn] = nil + for k, v in pairs(open_chests) do + if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then + return true + end + end + minetest.after(0.2, function() + minetest.swap_node(pos, { name = "default:" .. swap, param2 = node.param2 }) + + -- Pipeworks notification + pipeworks.after_place(pos) + end) + minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}) + end + + -- Pipeworks Switch + if pipeworks.may_configure(pos, player) and not fields.quit then + fs_helpers.on_receive_fields(pos, fields) + minetest.show_formspec(player:get_player_name(), "pipeworks:chest_formspec", get_chest_formspec(pos)) + end + return true + end + end +end) + +-- Original Definitions +local old_chest_def = table.copy(minetest.registered_items["default:chest"]) +local old_chest_open_def = table.copy(minetest.registered_items["default:chest_open"]) +local old_chest_locked_def = table.copy(minetest.registered_items["default:chest_locked"]) +local old_chest_locked_open_def = table.copy(minetest.registered_items["default:chest_locked_open"]) + +-- Override Construction +local override_protected, override, override_open, override_protected_open +override_protected = { + tiles = { + "default_chest_top.png"..tube_entry, + "default_chest_top.png"..tube_entry, + "default_chest_side.png"..tube_entry, + "default_chest_side.png"..tube_entry, + "default_chest_lock.png", + "default_chest_inside.png" + }, + after_place_node = function(pos, placer) + old_chest_locked_def.after_place_node(pos, placer) + pipeworks.after_place(pos) + end, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + if not default.can_interact_with_node(clicker, pos) then + return itemstack + end + + minetest.sound_play(old_chest_locked_def.sound_open, {gain = 0.3, + pos = pos, max_hear_distance = 10}) + if not chest_lid_obstructed(pos) then + minetest.swap_node(pos, + { name = "default:" .. "chest_locked" .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "pipeworks:chest_formspec", get_chest_formspec(pos)) + open_chests[clicker:get_player_name()] = { pos = pos, + sound = old_chest_locked_def.sound_close, swap = "chest_locked" } + end, + groups = table.copy(old_chest_locked_def.groups), + 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() + if meta:get_int("splitstacks") == 1 then + stack = stack:peek_item(1) + end + return inv:room_for_item("main", stack) + end, + input_inventory = "main", + connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} + }, + after_dig_node = pipeworks.after_dig +} +override = { + tiles = { + "default_chest_top.png"..tube_entry, + "default_chest_top.png"..tube_entry, + "default_chest_side.png"..tube_entry, + "default_chest_side.png"..tube_entry, + "default_chest_front.png", + "default_chest_inside.png" + }, + on_rightclick = function(pos, node, clicker) + minetest.sound_play(old_chest_def.sound_open, {gain = 0.3, pos = pos, + max_hear_distance = 10}) + if not chest_lid_obstructed(pos) then + minetest.swap_node(pos, { + name = "default:" .. "chest" .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "pipeworks:chest_formspec", get_chest_formspec(pos)) + open_chests[clicker:get_player_name()] = { pos = pos, + sound = old_chest_def.sound_close, swap = "chest" } + end, + groups = table.copy(old_chest_def.groups), + 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() + if meta:get_int("splitstacks") == 1 then + stack = stack:peek_item(1) + end + return inv:room_for_item("main", stack) + end, + input_inventory = "main", + connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} + }, + after_place_node = pipeworks.after_place, + after_dig_node = pipeworks.after_dig +} +--[[local override_common = { + +} +for k,v in pairs(override_common) do + override_protected[k] = v + override[k] = v +end]] + +override_open = table.copy(override) +override_open.groups = table.copy(old_chest_open_def.groups) +override_open.tube = table.copy(override.tube) +override_open.tube.connect_sides = table.copy(override.tube.connect_sides) +override_open.tube.connect_sides.top = nil + +override_protected_open = table.copy(override_protected) +override_protected_open.groups = table.copy(old_chest_locked_open_def.groups) +override_protected_open.tube = table.copy(override_protected.tube) +override_protected_open.tube.connect_sides = table.copy(override_protected.tube.connect_sides) +override_protected_open.tube.connect_sides.top = nil + +override_protected.tiles = { -- Rearranged according to the chest registration in Minetest_Game. + "default_chest_top.png"..tube_entry, + "default_chest_top.png"..tube_entry, + "default_chest_side.png"..tube_entry.."^[transformFX", + "default_chest_side.png"..tube_entry, + "default_chest_side.png"..tube_entry, + "default_chest_lock.png", +} +override.tiles = { + "default_chest_top.png"..tube_entry, + "default_chest_top.png"..tube_entry, + "default_chest_side.png"..tube_entry.."^[transformFX", + "default_chest_side.png"..tube_entry, + "default_chest_side.png"..tube_entry, + "default_chest_front.png", +} + +-- Add the extra groups +for i,v in ipairs({override_protected, override, override_open, override_protected_open}) do + v.groups.tubedevice = 1 + v.groups.tubedevice_receiver = 1 +end + +-- Override with the new modifications. +minetest.override_item("default:chest", override) +minetest.override_item("default:chest_open", override_open) +minetest.override_item("default:chest_locked", override_protected) +minetest.override_item("default:chest_locked_open", override_protected_open) + diff --git a/mods/pipeworks/compat-furnaces.lua b/mods/pipeworks/compat-furnaces.lua new file mode 100755 index 0000000..492332a --- /dev/null +++ b/mods/pipeworks/compat-furnaces.lua @@ -0,0 +1,433 @@ + +-- this file is basically a modified copy of +-- minetest_game/mods/default/furnaces.lua + +local fs_helpers = pipeworks.fs_helpers + +tube_entry = "^pipeworks_tube_connection_stony.png" + +local function active_formspec(fuel_percent, item_percent, pos, meta) + local formspec = + "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "list[current_name;src;2.75,0.5;1,1;]".. + "list[current_name;fuel;2.75,2.5;1,1;]".. + "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. + (100-fuel_percent)..":default_furnace_fire_fg.png]".. + "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:".. + (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. + "list[current_name;dst;4.75,0.96;2,2;]".. + "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]".. + "listring[current_player;main]".. + "listring[current_name;fuel]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) .. + fs_helpers.cycling_button( + meta, + "image_button[0,3.5;1,0.6", + "split_material_stacks", + { + pipeworks.button_off, + pipeworks.button_on + } + ).."label[0.9,3.51;Allow splitting incoming material (not fuel) stacks from tubes]" + return formspec +end + +local function inactive_formspec(pos, meta) + local formspec = "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "list[current_name;src;2.75,0.5;1,1;]".. + "list[current_name;fuel;2.75,2.5;1,1;]".. + "image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. + "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. + "list[current_name;dst;4.75,0.96;2,2;]".. + "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]".. + "listring[current_player;main]".. + "listring[current_name;fuel]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) .. + fs_helpers.cycling_button( + meta, + "image_button[0,3.5;1,0.6", + "split_material_stacks", + { + pipeworks.button_off, + pipeworks.button_on + } + ).."label[0.9,3.51;Allow splitting incoming material (not fuel) stacks from tubes]" + return formspec +end + +-- +-- Node callback functions that are the same for active and inactive furnace +-- + +local function can_dig(pos, player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src") +end + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if listname == "fuel" then + if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then + if inv:is_empty("src") then + meta:set_string("infotext", "Furnace is empty") + end + return stack:get_count() + else + return 0 + end + elseif listname == "src" then + return stack:get_count() + elseif listname == "dst" then + return 0 + end +end + +local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local stack = inv:get_stack(from_list, from_index) + return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) +end + +local function allow_metadata_inventory_take(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + return stack:get_count() +end + +local function swap_node(pos, name) + local node = minetest.get_node(pos) + if node.name == name then + return + end + node.name = name + minetest.swap_node(pos, node) +end + +local function furnace_node_timer(pos, elapsed) + -- + -- Inizialize metadata + -- + local meta = minetest.get_meta(pos) + local fuel_time = meta:get_float("fuel_time") or 0 + local src_time = meta:get_float("src_time") or 0 + local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 + + local inv = meta:get_inventory() + local srclist, fuellist + + local cookable, cooked + local fuel + + local update = true + while update do + update = false + + srclist = inv:get_list("src") + fuellist = inv:get_list("fuel") + + -- + -- Cooking + -- + + -- Check if we have cookable content + local aftercooked + cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + cookable = cooked.time ~= 0 + + -- Check if we have enough fuel to burn + if fuel_time < fuel_totaltime then + -- The furnace is currently active and has enough fuel + fuel_time = fuel_time + elapsed + -- If there is a cookable item then check if it is ready yet + if cookable then + src_time = src_time + elapsed + if src_time >= cooked.time then + -- Place result in dst list if possible + if inv:room_for_item("dst", cooked.item) then + inv:add_item("dst", cooked.item) + inv:set_stack("src", 1, aftercooked.items[1]) + src_time = src_time - cooked.time + update = true + end + end + end + else + -- Furnace ran out of fuel + if cookable then + -- We need to get new fuel + local afterfuel + fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) + + if fuel.time == 0 then + -- No valid fuel in fuel list + fuel_totaltime = 0 + src_time = 0 + else + -- Take fuel from fuel list + inv:set_stack("fuel", 1, afterfuel.items[1]) + update = true + fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) + src_time = src_time + elapsed + end + else + -- We don't need to get new fuel since there is no cookable item + fuel_totaltime = 0 + src_time = 0 + end + fuel_time = 0 + end + + elapsed = 0 + end + + if fuel and fuel_totaltime > fuel.time then + fuel_totaltime = fuel.time + end + if srclist[1]:is_empty() then + src_time = 0 + end + + -- + -- Update formspec, infotext and node + -- + local formspec = inactive_formspec(pos, meta) + local item_state + local item_percent = 0 + if cookable then + item_percent = math.floor(src_time / cooked.time * 100) + if item_percent > 100 then + item_state = "100% (output full)" + else + item_state = item_percent .. "%" + end + else + if srclist[1]:is_empty() then + item_state = "Empty" + else + item_state = "Not cookable" + end + end + + local fuel_state = "Empty" + local active = "inactive " + local result = false + + if fuel_totaltime ~= 0 then + active = "active " + local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) + fuel_state = fuel_percent .. "%" + formspec = active_formspec(fuel_percent, item_percent, pos, meta) + swap_node(pos, "default:furnace_active") + -- make sure timer restarts automatically + result = true + else + if not fuellist[1]:is_empty() then + fuel_state = "0%" + end + swap_node(pos, "default:furnace") + -- stop timer on the inactive furnace + minetest.get_node_timer(pos):stop() + end + + local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")" + + -- + -- Set meta values + -- + meta:set_float("fuel_totaltime", fuel_totaltime) + meta:set_float("fuel_time", fuel_time) + meta:set_float("src_time", src_time) + meta:set_string("formspec", formspec) + meta:set_string("infotext", infotext) + + return result +end + +-- +-- Node definitions +-- + +minetest.register_node(":default:furnace", { + description = "Furnace", + tiles = { + "default_furnace_top.png"..tube_entry, + "default_furnace_bottom.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_front.png" + }, + groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1}, + tube = { + insert_object = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local timer = minetest.get_node_timer(pos) + if not timer:is_started() then + timer:start(1.0) + end + if direction.y == 1 then + return inv:add_item("fuel", stack) + else + return inv:add_item("src", stack) + end + end, + can_insert = function(pos,node,stack,direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if direction.y == 1 then + return inv:room_for_item("fuel", stack) + else + if meta:get_int("split_material_stacks") == 1 then + stack = stack:peek_item(1) + end + return inv:room_for_item("src", stack) + end + end, + input_inventory = "dst", + connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} + }, + paramtype2 = "facedir", + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + + can_dig = can_dig, + + on_timer = furnace_node_timer, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", inactive_formspec(pos, meta)) + local inv = meta:get_inventory() + inv:set_size('src', 1) + inv:set_size('fuel', 1) + inv:set_size('dst', 4) + end, + + on_metadata_inventory_move = function(pos) + minetest.get_node_timer(pos):start(1.0) + end, + on_metadata_inventory_put = function(pos) + -- start timer function, it will sort out whether furnace can burn or not. + minetest.get_node_timer(pos):start(1.0) + end, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "src", drops) + default.get_inventory_drops(pos, "fuel", drops) + default.get_inventory_drops(pos, "dst", drops) + drops[#drops+1] = "default:furnace" + minetest.remove_node(pos) + return drops + 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, + on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + local meta = minetest.get_meta(pos) + local formspec = inactive_formspec(pos, meta) + meta:set_string("formspec", formspec) + end, + after_place_node = pipeworks.after_place, + after_dig_node = pipeworks.after_dig +}) + +minetest.register_node(":default:furnace_active", { + description = "Furnace", + tiles = { + "default_furnace_top.png"..tube_entry, + "default_furnace_bottom.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + "default_furnace_side.png"..tube_entry, + { + image = "default_furnace_front_active.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5 + }, + } + }, + groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1, not_in_creative_inventory = 1}, + tube = { + insert_object = function(pos,node,stack,direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local timer = minetest.get_node_timer(pos) + if not timer:is_started() then + timer:start(1.0) + end + if direction.y == 1 then + return inv:add_item("fuel", stack) + else + return inv:add_item("src", stack) + end + end, + can_insert = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if direction.y == 1 then + return inv:room_for_item("fuel", stack) + else + if meta:get_int("split_material_stacks") == 1 then + stack = stack:peek_item(1) + end + return inv:room_for_item("src", stack) + end + end, + input_inventory = "dst", + connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} + }, + paramtype2 = "facedir", + light_source = 8, + drop = "default:furnace", + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + on_timer = furnace_node_timer, + + can_dig = can_dig, + + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_take = allow_metadata_inventory_take, + on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + local meta = minetest.get_meta(pos) + local formspec = active_formspec(0, 0, pos, meta) + meta:set_string("formspec", formspec) + end, + after_place_node = pipeworks.after_place, + after_dig_node = pipeworks.after_dig +}) + diff --git a/mods/pipeworks/crafts.lua b/mods/pipeworks/crafts.lua new file mode 100755 index 0000000..2ee5710 --- /dev/null +++ b/mods/pipeworks/crafts.lua @@ -0,0 +1,172 @@ +-- Crafting recipes for pipes + +minetest.register_craft( { + output = "pipeworks:pipe_1_empty 12", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + { "", "", "" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:straight_pipe_empty 3", + recipe = { + { "pipeworks:pipe_1_empty", "pipeworks:pipe_1_empty", "pipeworks:pipe_1_empty" }, + }, +}) + +minetest.register_craft( { + output = "pipeworks:spigot 3", + recipe = { + { "pipeworks:pipe_1_empty", "" }, + { "", "pipeworks:pipe_1_empty" }, + }, +}) + +minetest.register_craft( { + output = "pipeworks:entry_panel_empty 2", + recipe = { + { "", "default:steel_ingot", "" }, + { "", "pipeworks:pipe_1_empty", "" }, + { "", "default:steel_ingot", "" }, + }, +}) + +-- Various ancillary pipe devices + +minetest.register_craft( { + output = "pipeworks:pump_off 2", + recipe = { + { "default:stone", "default:steel_ingot", "default:stone" }, + { "default:copper_ingot", "default:mese_crystal_fragment", "default:copper_ingot" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:valve_off_empty 2", + recipe = { + { "", "group:stick", "" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + { "", "default:steel_ingot", "" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:storage_tank_0 2", + recipe = { + { "", "default:steel_ingot", "default:steel_ingot" }, + { "default:steel_ingot", "default:glass", "default:steel_ingot" }, + { "default:steel_ingot", "default:steel_ingot", "" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:grating 2", + recipe = { + { "default:steel_ingot", "", "default:steel_ingot" }, + { "", "pipeworks:pipe_1_empty", "" }, + { "default:steel_ingot", "", "default:steel_ingot" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:flow_sensor_empty 2", + recipe = { + { "pipeworks:pipe_1_empty", "mesecons:mesecon", "pipeworks:pipe_1_empty" }, + }, +}) + +minetest.register_craft( { + output = "pipeworks:fountainhead 2", + recipe = { + { "pipeworks:pipe_1_empty" }, + { "pipeworks:pipe_1_empty" } + }, +}) + + +-- Crafting recipes for pneumatic tubes + +-- If homedecor is not installed, we need to register its crafting chain for +-- plastic sheeting so that pipeworks remains compatible with it. + +if minetest.get_modpath("homedecor") == nil then + + minetest.register_craftitem(":homedecor:oil_extract", { + description = "Oil extract", + inventory_image = "homedecor_oil_extract.png", + }) + + minetest.register_craftitem(":homedecor:paraffin", { + description = "Unprocessed paraffin", + inventory_image = "homedecor_paraffin.png", + }) + + minetest.register_alias("homedecor:plastic_base", "homedecor:paraffin") + + minetest.register_craftitem(":homedecor:plastic_sheeting", { + description = "Plastic sheet", + inventory_image = "homedecor_plastic_sheeting.png", + }) + + minetest.register_craft({ + type = "shapeless", + output = "homedecor:oil_extract 4", + recipe = { + "group:leaves", + "group:leaves", + "group:leaves", + "group:leaves", + "group:leaves", + "group:leaves" + } + }) + + minetest.register_craft({ + type = "cooking", + output = "homedecor:paraffin", + recipe = "homedecor:oil_extract", + }) + + minetest.register_craft({ + type = "cooking", + output = "homedecor:plastic_sheeting", + recipe = "homedecor:paraffin", + }) + + minetest.register_craft({ + type = "fuel", + recipe = "homedecor:oil_extract", + burntime = 30, + }) + + minetest.register_craft({ + type = "fuel", + recipe = "homedecor:paraffin", + burntime = 30, + }) + + minetest.register_craft({ + type = "fuel", + recipe = "homedecor:plastic_sheeting", + burntime = 30, + }) +end + +-- crafting items for creating node breakers +minetest.register_craftitem("pipeworks:gear", { + description = "Gear", + inventory_image = "pipeworks_gear.png", +}) + +minetest.register_craft( { + output = "pipeworks:gear 6", + recipe = { + { "", "default:steel_ingot", "" }, + { "default:steel_ingot","default:stone", "default:steel_ingot" }, + { "", "default:steel_ingot", "" } + }, +}) + diff --git a/mods/ITEMS/pipeworks/decorative_tubes.lua b/mods/pipeworks/decorative_tubes.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/decorative_tubes.lua rename to mods/pipeworks/decorative_tubes.lua diff --git a/mods/pipeworks/default_settings.lua b/mods/pipeworks/default_settings.lua new file mode 100755 index 0000000..9f21778 --- /dev/null +++ b/mods/pipeworks/default_settings.lua @@ -0,0 +1,72 @@ +-- Various settings + +local prefix = "pipeworks_" + +local settings = { + enable_pipes = true, + enable_lowpoly = false, + enable_autocrafter = true, + enable_deployer = true, + enable_dispenser = true, + enable_node_breaker = true, + enable_teleport_tube = true, + enable_pipe_devices = true, + enable_redefines = true, + enable_mese_tube = true, + enable_detector_tube = true, + enable_digiline_detector_tube = true, + enable_conductor_tube = true, + enable_digiline_conductor_tube = true, + enable_accelerator_tube = true, + enable_crossing_tube = true, + enable_sand_tube = true, + enable_mese_sand_tube = true, + enable_one_way_tube = true, + enable_priority_tube = true, + enable_lua_tube = true, + enable_cyclic_mode = true, + drop_on_routing_fail = false, + delete_item_on_clearobject = true, +} + +pipeworks.toggles = {} +-- documentation for toggles controlling pressure logic features. +-- do not edit this file directly; +-- instead, create pipeworks_settings.txt in your world directory, +-- and copy the uncommented lines from the block comments below into it. +--[[ +-- flow logic implementation. +-- set to one of the following strings. +-- "classic": classic mode written by VanessaE +-- "pressure": pressure metadata based, written by thetaepsilon. +-- has caveats such as water speed issues though. +-- setting to nil inhibits all flow logic, useful for debugging ABM crashes, +-- or for rendering the pipes purely decorative. +]] +pipeworks.toggles.pipe_mode = "classic" +--[[ +-- force-enable finite water handling mode. +-- this changes the way that water node placement is handled; +-- volume will always be preserved, +-- and water is assumed to move itself downwards. +-- nil (the default) means autodetect from installed finite liquid mods, +-- true is force-on, false is force-off. +-- note that you should NOT normally explicitly set this to true/false, +-- unless the mod you want this for is not covered by auto-detection +-- (please see autodetect-finite-water.lua). +-- please file an issue if you have a finite water mod not covered there, +-- and feel it necessary to explicitly set this toggle +pipeworks.toggles.finite_water = nil +]] + +for name, value in pairs(settings) do + local setting_type = type(value) + if setting_type == "boolean" then + pipeworks[name] = minetest.settings:get_bool(prefix..name) + if pipeworks[name] == nil then + pipeworks[name] = value + end + else + pipeworks[name] = value + end +end diff --git a/mods/pipeworks/depends.txt b/mods/pipeworks/depends.txt new file mode 100755 index 0000000..0cb7406 --- /dev/null +++ b/mods/pipeworks/depends.txt @@ -0,0 +1,4 @@ +default +mesecons +mesecons_mvps +digilines? diff --git a/mods/ITEMS/pipeworks/description.txt b/mods/pipeworks/description.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/description.txt rename to mods/pipeworks/description.txt diff --git a/mods/pipeworks/devices.lua b/mods/pipeworks/devices.lua new file mode 100755 index 0000000..07cf6fe --- /dev/null +++ b/mods/pipeworks/devices.lua @@ -0,0 +1,758 @@ +local new_flow_logic_register = pipeworks.flowables.register + +local polys = "" +if pipeworks.enable_lowpoly then polys = "_lowpoly" end + +-- rotation handlers + +function pipeworks.fix_after_rotation(pos, node, user, mode, new_param2) + + if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end + + newnode = string.gsub(node.name, "_on", "_off") + minetest.swap_node(pos, { name = newnode, param2 = new_param2 }) + pipeworks.scan_for_pipe_objects(pos) + + return true +end + +function pipeworks.rotate_on_place(itemstack, placer, pointed_thing) + + local playername = placer:get_player_name() + if not minetest.is_protected(pointed_thing.under, playername) + and not minetest.is_protected(pointed_thing.above, playername) then + + local node = minetest.get_node(pointed_thing.under) + + if (not placer:get_player_control().sneak) + and minetest.registered_nodes[node.name] + and minetest.registered_nodes[node.name].on_rightclick then + minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) + else + + local pitch = placer:get_look_pitch() + local above = pointed_thing.above + local under = pointed_thing.under + local fdir = minetest.dir_to_facedir(placer:get_look_dir()) + local undernode = minetest.get_node(under) + local abovenode = minetest.get_node(above) + local uname = undernode.name + local aname = abovenode.name + local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0) + local pos1 = above + + -- check if the object should be turned vertically + if above.x == under.x + and above.z == under.z + and ( + string.find(uname, "pipeworks:pipe_") + or string.find(uname, "pipeworks:storage_") + or string.find(uname, "pipeworks:expansion_") + or ( string.find(uname, "pipeworks:grating") and not isabove ) + or ( string.find(uname, "pipeworks:pump_") and not isabove ) + + or ( + ( string.find(uname, "pipeworks:valve") + or string.find(uname, "pipeworks:entry_panel") + or string.find(uname, "pipeworks:flow_sensor") ) + and minetest.facedir_to_dir(undernode.param2).y ~= 0 ) + ) + then + fdir = 17 + end + + if minetest.registered_nodes[uname] + and minetest.registered_nodes[uname]["buildable_to"] then + pos1 = under + end + + if minetest.registered_nodes[minetest.get_node(pos1).name] + and not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end + + local placednode = string.gsub(itemstack:get_name(), "_loaded", "_empty") + placednode = string.gsub(placednode, "_on", "_off") + + minetest.swap_node(pos1, {name = placednode, param2 = fdir }) + pipeworks.scan_for_pipe_objects(pos1) + + if not pipeworks.expect_infinite_stacks then + itemstack:take_item() + end + end + end + return itemstack +end + +-- List of devices that should participate in the autoplace algorithm + +local pipereceptor_on = nil +local pipereceptor_off = nil + +if minetest.get_modpath("mesecons") then + pipereceptor_on = { + receptor = { + state = mesecon.state.on, + rules = pipeworks.mesecons_rules + } + } + + pipereceptor_off = { + receptor = { + state = mesecon.state.off, + rules = pipeworks.mesecons_rules + } + } +end + +local pipes_devicelist = { + "pump", + "valve", + "storage_tank_0", + "storage_tank_1", + "storage_tank_2", + "storage_tank_3", + "storage_tank_4", + "storage_tank_5", + "storage_tank_6", + "storage_tank_7", + "storage_tank_8", + "storage_tank_9", + "storage_tank_10" +} + +-- Now define the nodes. + +local states = { "on", "off" } +local dgroups = "" + +for s in ipairs(states) do + + if states[s] == "off" then + dgroups = {snappy=3, pipe=1} + else + dgroups = {snappy=3, pipe=1, not_in_creative_inventory=1} + end + + local pumpname = "pipeworks:pump_"..states[s] + minetest.register_node(pumpname, { + description = "Pump/Intake Module", + drawtype = "mesh", + mesh = "pipeworks_pump"..polys..".obj", + tiles = { "pipeworks_pump_"..states[s]..".png" }, + paramtype = "light", + paramtype2 = "facedir", + groups = dgroups, + sounds = default.node_sound_wood_defaults(), + walkable = true, + pipe_connections = { top = 1 }, + after_place_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + drop = "pipeworks:pump_off", + mesecons = {effector = { + action_on = function (pos, node) + minetest.swap_node(pos,{name="pipeworks:pump_on", param2 = node.param2}) + end, + action_off = function (pos, node) + minetest.swap_node(pos,{name="pipeworks:pump_off", param2 = node.param2}) + end + }}, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local fdir = node.param2 + minetest.swap_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir }) + end, + on_rotate = screwdriver.rotate_simple + }) + + -- FIXME: this currently assumes that pumps can only rotate around the fixed axis pointing Y+. + new_flow_logic_register.directional_vertical_fixed(pumpname, true) + local pump_drive = 4 + if states[s] ~= "off" then + new_flow_logic_register.intake_simple(pumpname, pump_drive) + end + + + + local nodename_valve_empty = "pipeworks:valve_"..states[s].."_empty" + minetest.register_node(nodename_valve_empty, { + description = "Valve", + drawtype = "mesh", + mesh = "pipeworks_valve_"..states[s]..polys..".obj", + tiles = { "pipeworks_valve.png" }, + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 } + }, + collision_box = { + type = "fixed", + fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 } + }, + groups = dgroups, + sounds = default.node_sound_wood_defaults(), + walkable = true, + on_place = pipeworks.rotate_on_place, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + drop = "pipeworks:valve_off_empty", + mesecons = {effector = { + action_on = function (pos, node) + minetest.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2}) + end, + action_off = function (pos, node) + minetest.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2}) + end + }}, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local fdir = node.param2 + minetest.swap_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir }) + end, + on_rotate = pipeworks.fix_after_rotation + }) + -- only register flow logic for the "on" ABM. + -- this means that the off state automatically blocks flow by not participating in the balancing operation. + if states[s] ~= "off" then + new_flow_logic_register.directional_horizonal_rotate(nodename_valve_empty, true) + end +end + +local nodename_valve_loaded = "pipeworks:valve_on_loaded" +minetest.register_node(nodename_valve_loaded, { + description = "Valve", + drawtype = "mesh", + mesh = "pipeworks_valve_on"..polys..".obj", + tiles = { "pipeworks_valve.png" }, + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 } + }, + collision_box = { + type = "fixed", + fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 } + }, + groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + on_place = pipeworks.rotate_on_place, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + drop = "pipeworks:valve_off_empty", + mesecons = {effector = { + action_on = function (pos, node) + minetest.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2}) + end, + action_off = function (pos, node) + minetest.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2}) + end + }}, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local fdir = node.param2 + minetest.swap_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir }) + end, + on_rotate = pipeworks.fix_after_rotation +}) +-- register this the same as the on-but-empty variant, so existing nodes of this type work also. +-- note that as new_flow_logic code does not distinguish empty/full in node states, +-- right-clicking a "loaded" valve (becoming an off valve) then turning it on again will yield a on-but-empty valve, +-- but the flow logic will still function. +-- thus under new_flow_logic this serves as a kind of migration. +new_flow_logic_register.directional_horizonal_rotate(nodename_valve_loaded, true) + +-- grating + +-- FIXME: should this do anything useful in the new flow logic? +minetest.register_node("pipeworks:grating", { + description = "Decorative grating", + tiles = { + "pipeworks_grating_top.png", + "pipeworks_grating_sides.png", + "pipeworks_grating_sides.png", + "pipeworks_grating_sides.png", + "pipeworks_grating_sides.png", + "pipeworks_grating_sides.png" + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { -0.49, -0.49, -0.49, 0.49, 0.5, 0.49 } + }, + sunlight_propagates = true, + paramtype = "light", + groups = {snappy=3, pipe=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + pipe_connections = { top = 1 }, + after_place_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_rotate = false +}) + +-- outlet spigot + +local nodename_spigot_empty = "pipeworks:spigot" +minetest.register_node(nodename_spigot_empty, { + description = "Spigot outlet", + drawtype = "mesh", + mesh = "pipeworks_spigot"..polys..".obj", + tiles = { "pipeworks_spigot.png" }, + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + pipe_connections = { left=1, right=1, front=1, back=1, + left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 }, + after_place_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + selection_box = { + type = "fixed", + fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 } + }, + collision_box = { + type = "fixed", + fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 } + }, + on_rotate = pipeworks.fix_after_rotation +}) + +local nodename_spigot_loaded = "pipeworks:spigot_pouring" +minetest.register_node(nodename_spigot_loaded, { + description = "Spigot outlet", + drawtype = "mesh", + mesh = "pipeworks_spigot_pouring"..polys..".obj", + tiles = { + { + name = "default_water_flowing_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + { name = "pipeworks_spigot.png" } + }, + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + pipe_connections = { left=1, right=1, front=1, back=1, + left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 }, + after_place_node = function(pos) + minetest.set_node(pos, { name = "pipeworks:spigot", param2 = minetest.get_node(pos).param2 }) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + selection_box = { + type = "fixed", + fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 } + }, + collision_box = { + type = "fixed", + fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 } + }, + drop = "pipeworks:spigot", + on_rotate = pipeworks.fix_after_rotation +}) +-- new flow logic does not currently distinguish between these two visual states. +-- register both so existing flowing spigots continue to work (even if the visual doesn't match the spigot's behaviour). +new_flow_logic_register.directional_horizonal_rotate(nodename_spigot_empty, false) +new_flow_logic_register.directional_horizonal_rotate(nodename_spigot_loaded, false) +local spigot_upper = 1.0 +local spigot_lower = 1.0 +local spigot_neighbours={{x=0, y=-1, z=0}} +new_flow_logic_register.output_simple(nodename_spigot_empty, spigot_upper, spigot_lower, spigot_neighbours) +new_flow_logic_register.output_simple(nodename_spigot_loaded, spigot_upper, spigot_lower, spigot_neighbours) + + + +-- sealed pipe entry/exit (horizontal pipe passing through a metal +-- wall, for use in places where walls should look like they're airtight) + +local panel_cbox = { + type = "fixed", + fixed = { + { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, + { -8/16, -8/16, -1/16, 8/16, 8/16, 1/16 } + } +} + +local nodename_panel_empty = "pipeworks:entry_panel_empty" +minetest.register_node(nodename_panel_empty, { + description = "Airtight Pipe entry/exit", + drawtype = "mesh", + mesh = "pipeworks_entry_panel"..polys..".obj", + tiles = { "pipeworks_entry_panel.png" }, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + on_place = pipeworks.rotate_on_place, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + selection_box = panel_cbox, + collision_box = panel_cbox, + on_rotate = pipeworks.fix_after_rotation +}) + +local nodename_panel_loaded = "pipeworks:entry_panel_loaded" +minetest.register_node(nodename_panel_loaded, { + description = "Airtight Pipe entry/exit", + drawtype = "mesh", + mesh = "pipeworks_entry_panel"..polys..".obj", + tiles = { "pipeworks_entry_panel.png" }, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + on_place = pipeworks.rotate_on_place, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + selection_box = panel_cbox, + collision_box = panel_cbox, + drop = "pipeworks:entry_panel_empty", + on_rotate = pipeworks.fix_after_rotation +}) +-- TODO: AFAIK the two panels have no visual difference, so are redundant under new flow logic - alias? +new_flow_logic_register.directional_horizonal_rotate(nodename_panel_empty, true) +new_flow_logic_register.directional_horizonal_rotate(nodename_panel_loaded, true) + + + +local nodename_sensor_empty = "pipeworks:flow_sensor_empty" +minetest.register_node(nodename_sensor_empty, { + description = "Flow Sensor", + drawtype = "mesh", + mesh = "pipeworks_flow_sensor"..polys..".obj", + tiles = { "pipeworks_flow_sensor_off.png" }, + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + on_place = pipeworks.rotate_on_place, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_construct = function(pos) + if mesecon then + mesecon.receptor_off(pos, rules) + end + end, + selection_box = { + type = "fixed", + fixed = { + { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, + { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 }, + } + }, + collision_box = { + type = "fixed", + fixed = { + { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, + { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 }, + } + }, + mesecons = pipereceptor_off, + on_rotate = pipeworks.fix_after_rotation +}) + +local nodename_sensor_loaded = "pipeworks:flow_sensor_loaded" +minetest.register_node(nodename_sensor_loaded, { + description = "Flow sensor (on)", + drawtype = "mesh", + mesh = "pipeworks_flow_sensor"..polys..".obj", + tiles = { "pipeworks_flow_sensor_on.png" }, + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + on_place = pipeworks.rotate_on_place, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_construct = function(pos) + if mesecon then + mesecon.receptor_on(pos, rules) + end + end, + selection_box = { + type = "fixed", + fixed = { + { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, + { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 }, + } + }, + collision_box = { + type = "fixed", + fixed = { + { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }, + { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 }, + } + }, + drop = "pipeworks:flow_sensor_empty", + mesecons = pipereceptor_on, + on_rotate = pipeworks.fix_after_rotation +}) +new_flow_logic_register.directional_horizonal_rotate(nodename_sensor_empty, true) +new_flow_logic_register.directional_horizonal_rotate(nodename_sensor_loaded, true) +-- activate flow sensor at roughly half the pressure pumps drive pipes +local sensor_pressure_set = { { nodename_sensor_empty, 0.0 }, { nodename_sensor_loaded, 1.0 } } +new_flow_logic_register.transition_simple_set(sensor_pressure_set, { mesecons=pipeworks.mesecons_rules }) + + + +-- tanks + +-- TODO flow-logic-stub: these don't currently do anything under the new flow logic. +for fill = 0, 10 do + local filldesc="empty" + local sgroups = {snappy=3, pipe=1, tankfill=fill+1} + local image = nil + + if fill ~= 0 then + filldesc=fill.."0% full" + sgroups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1} + image = "pipeworks_storage_tank_fittings.png" + end + + minetest.register_node("pipeworks:expansion_tank_"..fill, { + description = "Expansion Tank ("..filldesc..")... You hacker, you.", + tiles = { + "pipeworks_storage_tank_fittings.png", + "pipeworks_storage_tank_fittings.png", + "pipeworks_storage_tank_back.png", + "pipeworks_storage_tank_back.png", + "pipeworks_storage_tank_back.png", + pipeworks.liquid_texture.."^pipeworks_storage_tank_front_"..fill..".png" + }, + inventory_image = image, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + drop = "pipeworks:storage_tank_0", + pipe_connections = { top = 1, bottom = 1}, + after_place_node = function(pos) + pipeworks.look_for_stackable_tanks(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_rotate = false + }) + + minetest.register_node("pipeworks:storage_tank_"..fill, { + description = "Fluid Storage Tank ("..filldesc..")", + tiles = { + "pipeworks_storage_tank_fittings.png", + "pipeworks_storage_tank_fittings.png", + "pipeworks_storage_tank_back.png", + "pipeworks_storage_tank_back.png", + "pipeworks_storage_tank_back.png", + pipeworks.liquid_texture.."^pipeworks_storage_tank_front_"..fill..".png" + }, + inventory_image = image, + paramtype = "light", + paramtype2 = "facedir", + groups = sgroups, + sounds = default.node_sound_wood_defaults(), + walkable = true, + drop = "pipeworks:storage_tank_0", + pipe_connections = { top = 1, bottom = 1}, + after_place_node = function(pos) + pipeworks.look_for_stackable_tanks(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_rotate = false + }) +end + +-- fountainhead + +local nodename_fountain_empty = "pipeworks:fountainhead" +minetest.register_node(nodename_fountain_empty, { + description = "Fountainhead", + drawtype = "mesh", + mesh = "pipeworks_fountainhead"..polys..".obj", + tiles = { "pipeworks_fountainhead.png" }, + sunlight_propagates = true, + paramtype = "light", + groups = {snappy=3, pipe=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + pipe_connections = { bottom = 1 }, + after_place_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_construct = function(pos) + if mesecon then + mesecon.receptor_on(pos, rules) + end + end, + selection_box = { + type = "fixed", + fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 } + }, + collision_box = { + type = "fixed", + fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 } + }, + on_rotate = false +}) + +local nodename_fountain_loaded = "pipeworks:fountainhead_pouring" +minetest.register_node(nodename_fountain_loaded, { + description = "Fountainhead", + drawtype = "mesh", + mesh = "pipeworks_fountainhead"..polys..".obj", + tiles = { "pipeworks_fountainhead.png" }, + sunlight_propagates = true, + paramtype = "light", + groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + pipe_connections = { bottom = 1 }, + after_place_node = function(pos) + minetest.set_node(pos, { name = "pipeworks:fountainhead", param2 = minetest.get_node(pos).param2 }) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_construct = function(pos) + if mesecon then + mesecon.receptor_on(pos, rules) + end + end, + selection_box = { + type = "fixed", + fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 } + }, + collision_box = { + type = "fixed", + fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 } + }, + drop = "pipeworks:fountainhead", + on_rotate = false +}) +new_flow_logic_register.directional_vertical_fixed(nodename_fountain_empty, false) +new_flow_logic_register.directional_vertical_fixed(nodename_fountain_loaded, false) +local fountain_upper = 1.0 +local fountain_lower = 1.0 +local fountain_neighbours={{x=0, y=1, z=0}} +new_flow_logic_register.output_simple(nodename_fountain_empty, fountain_upper, fountain_lower, fountain_neighbours) +new_flow_logic_register.output_simple(nodename_fountain_loaded, fountain_upper, fountain_lower, fountain_neighbours) + +local sp_cbox = { + type = "fixed", + fixed = { + { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 } + } +} + +local nodename_sp_empty = "pipeworks:straight_pipe_empty" +minetest.register_node(nodename_sp_empty, { + description = "Straight-only Pipe", + drawtype = "mesh", + mesh = "pipeworks_straight_pipe"..polys..".obj", + tiles = { "pipeworks_straight_pipe_empty.png" }, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + on_place = pipeworks.rotate_on_place, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + selection_box = sp_cbox, + collision_box = sp_cbox, + on_rotate = pipeworks.fix_after_rotation +}) + +local nodename_sp_loaded = "pipeworks:straight_pipe_loaded" +minetest.register_node(nodename_sp_loaded, { + description = "Straight-only Pipe", + drawtype = "mesh", + mesh = "pipeworks_straight_pipe"..polys..".obj", + tiles = { "pipeworks_straight_pipe_loaded.png" }, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + on_place = pipeworks.rotate_on_place, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + selection_box = sp_cbox, + collision_box = sp_cbox, + drop = "pipeworks:straight_pipe_empty", + on_rotate = pipeworks.fix_after_rotation +}) + +new_flow_logic_register.directional_horizonal_rotate(nodename_sp_empty, true) +new_flow_logic_register.directional_horizonal_rotate(nodename_sp_loaded, true) + +-- Other misc stuff + +minetest.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty") +minetest.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty") + +minetest.register_lbm({ + name = "pipeworks:rotate_valves_flowsensors", + label = "Flip pipeworks valves and flow sensors around X/Z", + run_at_every_load = false, + nodenames = { + "pipeworks:flow_sensor_empty", + "pipeworks:flow_sensor_loaded", + "pipeworks:valve_off_empty", + "pipeworks:valve_on_empty", + "pipeworks:valve_off_loaded", + }, + action = function(pos, node) + local dir = minetest.facedir_to_dir(node.param2) + local newdir = { x=dir.z, y=dir.y, z=dir.x } + local newfdir = minetest.dir_to_facedir(newdir) + minetest.swap_node(pos, { name = node.name, param2 = newfdir }) + end +}) diff --git a/mods/pipeworks/filter-injector.lua b/mods/pipeworks/filter-injector.lua new file mode 100755 index 0000000..0f651fb --- /dev/null +++ b/mods/pipeworks/filter-injector.lua @@ -0,0 +1,562 @@ +local fs_helpers = pipeworks.fs_helpers + +local function delay(x) + return (function() return x end) +end + +local function set_filter_infotext(data, meta) + local infotext = data.wise_desc.." Filter-Injector" + if meta:get_int("slotseq_mode") == 2 then + infotext = infotext .. " (slot #"..meta:get_int("slotseq_index").." next)" + end + meta:set_string("infotext", infotext) +end + +local function set_filter_formspec(data, meta) + local itemname = data.wise_desc.." Filter-Injector" + + local formspec + if data.digiline then + formspec = "size[8,2.7]".. + "item_image[0,0;1,1;pipeworks:"..data.name.."]".. + "label[1,0;"..minetest.formspec_escape(itemname).."]".. + "field[0.3,1.5;8.0,1;channel;Channel;${channel}]".. + fs_helpers.cycling_button(meta, "button[0,2;4,1", "slotseq_mode", + {"Sequence slots by Priority", + "Sequence slots Randomly", + "Sequence slots by Rotation"}).. + fs_helpers.cycling_button(meta, "button[4,2;4,1", "exmatch_mode", + {"Exact match - off", + "Exact match - on "}) + else + local exmatch_button = "" + if data.stackwise then + exmatch_button = + fs_helpers.cycling_button(meta, "button[4,3.5;4,1", "exmatch_mode", + {"Exact match - off", + "Exact match - on "}) + end + + formspec = "size[8,8.5]".. + "item_image[0,0;1,1;pipeworks:"..data.name.."]".. + "label[1,0;"..minetest.formspec_escape(itemname).."]".. + "label[0,1;Prefer item types:]".. + "list[context;main;0,1.5;8,2;]".. + fs_helpers.cycling_button(meta, "button[0,3.5;4,1", "slotseq_mode", + {"Sequence slots by Priority", + "Sequence slots Randomly", + "Sequence slots by Rotation"}).. + exmatch_button.. + "list[current_player;main;0,4.5;8,4;]" .. + "listring[]" + end + meta:set_string("formspec", formspec) +end + +-- todo SOON: this function has *way too many* parameters +local function grabAndFire(data,slotseq_mode,exmatch_mode,filtmeta,frominv,frominvname,frompos,fromnode,filterfor,fromtube,fromdef,dir,fakePlayer,all,digiline) + local sposes = {} + if not frominvname or not frominv:get_list(frominvname) then return end + for spos,stack in ipairs(frominv:get_list(frominvname)) do + local matches + if filterfor == "" then + matches = stack:get_name() ~= "" + else + local fname = filterfor.name + local fgroup = filterfor.group + local fwear = filterfor.wear + local fmetadata = filterfor.metadata + matches = (not fname -- If there's a name filter, + or stack:get_name() == fname) -- it must match. + + and (not fgroup -- If there's a group filter, + or (type(fgroup) == "string" -- it must be a string + and minetest.get_item_group( -- and it must match. + stack:get_name(), fgroup) ~= 0)) + + and (not fwear -- If there's a wear filter: + or (type(fwear) == "number" -- If it's a number, + and stack:get_wear() == fwear) -- it must match. + or (type(fwear) == "table" -- If it's a table: + and (not fwear[1] -- If there's a lower bound, + or (type(fwear[1]) == "number" -- it must be a number + and fwear[1] <= stack:get_wear())) -- and it must be <= the actual wear. + and (not fwear[2] -- If there's an upper bound + or (type(fwear[2]) == "number" -- it must be a number + and stack:get_wear() < fwear[2])))) -- and it must be > the actual wear. + -- If the wear filter is of any other type, fail. + -- + and (not fmetadata -- If there's a matadata filter, + or (type(fmetadata) == "string" -- it must be a string + and stack:get_metadata() == fmetadata)) -- and it must match. + end + if matches then table.insert(sposes, spos) end + end + if #sposes == 0 then return false end + if slotseq_mode == 1 then + for i = #sposes, 2, -1 do + local j = math.random(i) + local t = sposes[j] + sposes[j] = sposes[i] + sposes[i] = t + end + elseif slotseq_mode == 2 then + local headpos = filtmeta:get_int("slotseq_index") + table.sort(sposes, function (a, b) + if a >= headpos then + if b < headpos then return true end + else + if b >= headpos then return false end + end + return a < b + end) + end + for _, spos in ipairs(sposes) do + local stack = frominv:get_stack(frominvname, spos) + local doRemove = stack:get_count() + if fromtube.can_remove then + doRemove = fromtube.can_remove(frompos, fromnode, stack, dir, frominvname, spos) + elseif fromdef.allow_metadata_inventory_take then + doRemove = fromdef.allow_metadata_inventory_take(frompos, frominvname,spos, stack, fakePlayer) + end + -- stupid lack of continue statements grumble + if doRemove > 0 then + if slotseq_mode == 2 then + local nextpos = spos + 1 + if nextpos > frominv:get_size(frominvname) then + nextpos = 1 + end + filtmeta:set_int("slotseq_index", nextpos) + set_filter_infotext(data, filtmeta) + end + local item + local count + if all then + count = math.min(stack:get_count(), doRemove) + if filterfor.count and (filterfor.count > 1 or digiline) then + if exmatch_mode ~= 0 and filterfor.count > count then + return false -- not enough, fail + else + -- limit quantity to filter amount + count = math.min(filterfor.count, count) + end + end + else + count = 1 + end + if fromtube.remove_items then + -- it could be the entire stack... + item = fromtube.remove_items(frompos, fromnode, stack, dir, count, frominvname, spos) + else + item = stack:take_item(count) + frominv:set_stack(frominvname, spos, stack) + if fromdef.on_metadata_inventory_take then + fromdef.on_metadata_inventory_take(frompos, frominvname, spos, item, fakePlayer) + end + end + local pos = vector.add(frompos, vector.multiply(dir, 1.4)) + local start_pos = vector.add(frompos, dir) + local item1 = pipeworks.tube_inject_item(pos, start_pos, dir, item, fakePlayer:get_player_name()) + return true-- only fire one item, please + end + end + return false +end + +local function punch_filter(data, filtpos, filtnode, msg) + local filtmeta = minetest.get_meta(filtpos) + local filtinv = filtmeta:get_inventory() + local owner = filtmeta:get_string("owner") + local fakePlayer = { + get_player_name = delay(owner), + is_fake_player = ":pipeworks", + get_wielded_item = delay(ItemStack(nil)) + } -- TODO: use a mechanism as the wielder one + local dir = pipeworks.facedir_to_right_dir(filtnode.param2) + local frompos = vector.subtract(filtpos, dir) + local fromnode = minetest.get_node(frompos) + if not fromnode then return end + local fromdef = minetest.registered_nodes[fromnode.name] + if not fromdef then return end + local fromtube = fromdef.tube + local input_special_cases = { + ["technic:mv_furnace"] = "dst", + ["technic:mv_furnace_active"] = "dst", + ["technic:mv_electric_furnace"] = "dst", + ["technic:mv_electric_furnace_active"] = "dst", + ["technic:mv_alloy_furnace"] = "dst", + ["technic:mv_alloy_furnace_active"] = "dst", + ["technic:mv_centrifuge"] = "dst", + ["technic:mv_centrifuge_active"] = "dst", + ["technic:mv_compressor"] = "dst", + ["technic:mv_compressor_active"] = "dst", + ["technic:mv_extractor"] = "dst", + ["technic:mv_extractor_active"] = "dst", + ["technic:mv_grinder"] = "dst", + ["technic:mv_grinder_active"] = "dst", + ["technic:tool_workshop"] = "src", + } + + -- make sure there's something appropriate to inject the item into + local todir = pipeworks.facedir_to_right_dir(filtnode.param2) + local topos = vector.add(filtpos, todir) + local tonode = minetest.get_node(topos) + local todef = minetest.registered_nodes[tonode.name] + + if not todef + or not (minetest.get_item_group(tonode.name, "tube") == 1 + or minetest.get_item_group(tonode.name, "tubedevice") == 1 + or minetest.get_item_group(tonode.name, "tubedevice_receiver") == 1) then + return + end + + if fromtube then fromtube.input_inventory = input_special_cases[fromnode.name] or fromtube.input_inventory end + if not (fromtube and fromtube.input_inventory) then return end + + local slotseq_mode + local exact_match + + local filters = {} + if data.digiline then + local function add_filter(name, group, count, wear, metadata) + table.insert(filters, {name = name, group = group, count = tonumber(count), wear = wear, metadata = metadata}) + end + + local function add_itemstring_filter(filter) + local filterstack = ItemStack(filter) + local filtername = filterstack:get_name() + local filtercount = filterstack:get_count() + local filterwear = string.match(filter, "%S*:%S*%s%d%s(%d)") and filterstack:get_wear() + local filtermetadata = string.match(filter, "%S*:%S*%s%d%s%d(%s.*)") and filterstack:get_metadata() + + add_filter(filtername, nil, filtercount, filterwear, filtermetadata) + end + + local t_msg = type(msg) + if t_msg == "table" then + local slotseq = msg.slotseq + local t_slotseq = type(slotseq) + if t_slotseq == "number" and slotseq >= 0 and slotseq <= 2 then + slotseq_mode = slotseq + elseif t_slotseq == "string" then + slotseq = string.lower(slotseq) + if slotseq == "priority" then + slotseq_mode = 0 + elseif slotseq == "random" then + slotseq_mode = 1 + elseif slotseq == "rotation" then + slotseq_mode = 2 + end + end + + local exmatch = msg.exmatch + local t_exmatch = type(exmatch) + if t_exmatch == "number" and exmatch >= 0 and exmatch <= 1 then + exact_match = exmatch + elseif t_exmatch == "boolean" then + exact_match = exmatch and 1 or 0 + end + + local slotseq_index = msg.slotseq_index + if type(slotseq_index) == "number" then + -- This should allow any valid index, but I'm not completely sure what + -- constitutes a valid index, so I'm only allowing resetting it to 1. + if slotseq_index == 1 then + filtmeta:set_int("slotseq_index", slotseq_index) + set_filter_infotext(data, filtmeta) + end + end + + if slotseq_mode ~= nil then + filtmeta:set_int("slotseq_mode", slotseq_mode) + end + + if exact_match ~= nil then + filtmeta:set_int("exmatch_mode", exact_match) + end + + if slotseq_mode ~= nil or exact_match ~= nil then + set_filter_formspec(data, filtmeta) + end + + if msg.nofire then + return + end + + if msg.name or msg.group or msg.count or msg.wear or msg.metadata then + add_filter(msg.name, msg.group, msg.count, msg.wear, msg.metadata) + else + for _, filter in ipairs(msg) do + local t_filter = type(filter) + if t_filter == "table" then + if filter.name or filter.group or filter.count or filter.wear or filter.metadata then + add_filter(filter.name, filter.group, filter.count, filter.wear, filter.metadata) + end + elseif t_filter == "string" then + add_itemstring_filter(filter) + end + end + end + elseif t_msg == "string" then + add_itemstring_filter(msg) + end + else + for _, filterstack in ipairs(filtinv:get_list("main")) do + local filtername = filterstack:get_name() + local filtercount = filterstack:get_count() + if filtername ~= "" then table.insert(filters, {name = filtername, count = filtercount}) end + end + end + if #filters == 0 then table.insert(filters, "") end + + if slotseq_mode == nil then + slotseq_mode = filtmeta:get_int("slotseq_mode") + end + + if exact_match == nil then + exact_match = filtmeta:get_int("exmatch_mode") + end + + local frominv + if fromtube.return_input_invref then + frominv = fromtube.return_input_invref(frompos, fromnode, dir, owner) + if not frominv then + return + end + else + local frommeta = minetest.get_meta(frompos) + frominv = frommeta:get_inventory() + end + if fromtube.before_filter then fromtube.before_filter(frompos) end + for _, frominvname in ipairs(type(fromtube.input_inventory) == "table" and fromtube.input_inventory or {fromtube.input_inventory}) do + local done = false + for _, filterfor in ipairs(filters) do + if grabAndFire(data, slotseq_mode, exact_match, filtmeta, frominv, frominvname, frompos, fromnode, filterfor, fromtube, fromdef, dir, fakePlayer, data.stackwise, data.digiline) then + done = true + break + end + end + if done then break end + end + if fromtube.after_filter then fromtube.after_filter(frompos) end +end + +for _, data in ipairs({ + { + name = "filter", + wise_desc = "Itemwise", + stackwise = false, + }, + { + name = "mese_filter", + wise_desc = "Stackwise", + stackwise = true, + }, + { -- register even if no digilines + name = "digiline_filter", + wise_desc = "Digiline", + stackwise = true, + digiline = true, + }, +}) do + local node = { + description = data.wise_desc.." Filter-Injector", + tiles = { + "pipeworks_"..data.name.."_top.png", + "pipeworks_"..data.name.."_top.png", + "pipeworks_"..data.name.."_output.png", + "pipeworks_"..data.name.."_input.png", + "pipeworks_"..data.name.."_side.png", + "pipeworks_"..data.name.."_top.png", + }, + paramtype2 = "facedir", + groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, mesecon = 2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + set_filter_formspec(data, meta) + set_filter_infotext(data, meta) + local inv = meta:get_inventory() + inv:set_size("main", 8*2) + end, + after_place_node = function (pos, placer) + minetest.get_meta(pos):set_string("owner", placer:get_player_name()) + pipeworks.after_place(pos) + end, + after_dig_node = pipeworks.after_dig, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then + return 0 + end + local inv = minetest.get_meta(pos):get_inventory() + inv:set_stack("main", index, stack) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then + return 0 + end + local inv = minetest.get_meta(pos):get_inventory() + local fake_stack = inv:get_stack("main", index) + fake_stack:take_item(stack:get_count()) + inv:set_stack("main", index, fake_stack) + return 0 + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if not pipeworks.may_configure(pos, player) then return 0 end + return count + end, + can_dig = function(pos, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + tube = {connect_sides = {right = 1}}, + } + + if data.digiline then + node.groups.mesecon = nil + if not minetest.get_modpath("digilines") then + node.groups.not_in_creative_inventory = 1 + end + + node.on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + + if fields.channel then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + + local meta = minetest.get_meta(pos) + --meta:set_int("slotseq_index", 1) + set_filter_formspec(data, meta) + set_filter_infotext(data, meta) + end + node.digiline = { + effector = { + action = function(pos, node, channel, msg) + local meta = minetest.get_meta(pos) + local setchan = meta:get_string("channel") + if setchan ~= channel then return end + + punch_filter(data, pos, node, msg) + end, + }, + } + else + node.on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + local meta = minetest.get_meta(pos) + meta:set_int("slotseq_index", 1) + set_filter_formspec(data, meta) + set_filter_infotext(data, meta) + end + node.mesecons = { + effector = { + action_on = function(pos, node) + punch_filter(data, pos, node) + end, + }, + } + node.on_punch = function (pos, node, puncher) + punch_filter(data, pos, node) + end + end + + + + minetest.register_node("pipeworks:"..data.name, node) +end + +minetest.register_craft( { + output = "pipeworks:filter 2", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }, + { "group:stick", "default:mese_crystal", "homedecor:plastic_sheeting" }, + { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:mese_filter 2", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }, + { "group:stick", "default:mese", "homedecor:plastic_sheeting" }, + { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" } + }, +}) + +if minetest.get_modpath("digilines") then + minetest.register_craft( { + output = "pipeworks:digiline_filter 2", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }, + { "group:stick", "digilines:wire_std_00000000", "homedecor:plastic_sheeting" }, + { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" } + }, + }) +end + +--[[ +In the past the filter-injectors had real items in their inventories. This code +puts them to the input to the filter-injector if possible. Else the items are +dropped. +]] +local function put_to_inputinv(pos, node, filtmeta, list) + local dir = pipeworks.facedir_to_right_dir(node.param2) + local frompos = vector.subtract(pos, dir) + local fromnode = minetest.get_node(frompos) + local fromdef = minetest.registered_nodes[fromnode.name] + if not fromdef or not fromdef.tube then + return + end + local fromtube = fromdef.tube + local frominv + if fromtube.return_input_invref then + local owner = filtmeta:get_string("owner") + frominv = fromtube.return_input_invref(frompos, fromnode, dir, owner) + if not frominv then + return + end + else + frominv = minetest.get_meta(frompos):get_inventory() + end + local listname = type(fromtube.input_inventory) == "table" and + fromtube.input_inventory[1] or fromtube.input_inventory + if not listname then + return + end + for i = 1, #list do + local item = list[i] + if not item:is_empty() then + local leftover = frominv:add_item(listname, item) + if not leftover:is_empty() then + minetest.add_item(pos, leftover) + end + end + end + return true +end +minetest.register_lbm({ + label = "Give back items of old filters that had real inventories", + name = "pipeworks:give_back_old_filter_items", + nodenames = {"pipeworks:filter", "pipeworks:mese_filter"}, + run_at_every_load = false, + action = function(pos, node) + local meta = minetest.get_meta(pos) + local list = meta:get_inventory():get_list("main") + if put_to_inputinv(pos, node, meta, list) then + return + end + pos.y = pos.y + 1 + for i = 1, #list do + local item = list[i] + if not item:is_empty() then + minetest.add_item(pos, item) + end + end + end, +}) diff --git a/mods/pipeworks/flowing_logic.lua b/mods/pipeworks/flowing_logic.lua new file mode 100755 index 0000000..0c80a77 --- /dev/null +++ b/mods/pipeworks/flowing_logic.lua @@ -0,0 +1,135 @@ +-- This file provides the actual flow and pathfinding logic that makes water +-- move through the pipes. +-- +-- Contributed by mauvebic, 2013-01-03, rewritten a bit by Vanessa Ezekowitz +-- + +local finitewater = minetest.settings:get_bool("liquid_finite") + +pipeworks.check_for_liquids = function(pos) + local coords = { + {x=pos.x,y=pos.y-1,z=pos.z}, + {x=pos.x,y=pos.y+1,z=pos.z}, + {x=pos.x-1,y=pos.y,z=pos.z}, + {x=pos.x+1,y=pos.y,z=pos.z}, + {x=pos.x,y=pos.y,z=pos.z-1}, + {x=pos.x,y=pos.y,z=pos.z+1}, } + for i =1,6 do + local name = minetest.get_node(coords[i]).name + if name and string.find(name,"water") then + if finitewater then minetest.remove_node(coords[i]) end + return true + end + end + return false +end + +pipeworks.check_for_inflows = function(pos,node) + local coords = { + {x=pos.x,y=pos.y-1,z=pos.z}, + {x=pos.x,y=pos.y+1,z=pos.z}, + {x=pos.x-1,y=pos.y,z=pos.z}, + {x=pos.x+1,y=pos.y,z=pos.z}, + {x=pos.x,y=pos.y,z=pos.z-1}, + {x=pos.x,y=pos.y,z=pos.z+1}, + } + local newnode = false + local source = false + for i = 1, 6 do + if newnode then break end + local testnode = minetest.get_node(coords[i]) + local name = testnode.name + if name and (name == "pipeworks:pump_on" and pipeworks.check_for_liquids(coords[i])) or string.find(name,"_loaded") then + if string.find(name,"_loaded") then + source = minetest.get_meta(coords[i]):get_string("source") + if source == minetest.pos_to_string(pos) then break end + end + if string.find(name, "valve") or string.find(name, "sensor") + or string.find(name, "straight_pipe") or string.find(name, "panel") then + + if ((i == 3 or i == 4) and minetest.facedir_to_dir(testnode.param2).x ~= 0) + or ((i == 5 or i == 6) and minetest.facedir_to_dir(testnode.param2).z ~= 0) + or ((i == 1 or i == 2) and minetest.facedir_to_dir(testnode.param2).y ~= 0) then + + newnode = string.gsub(node.name,"empty","loaded") + source = {x=coords[i].x,y=coords[i].y,z=coords[i].z} + end + else + newnode = string.gsub(node.name,"empty","loaded") + source = {x=coords[i].x,y=coords[i].y,z=coords[i].z} + end + end + end + if newnode then + minetest.add_node(pos,{name=newnode, param2 = node.param2}) + minetest.get_meta(pos):set_string("source",minetest.pos_to_string(source)) + end +end + +pipeworks.check_sources = function(pos,node) + local sourcepos = minetest.string_to_pos(minetest.get_meta(pos):get_string("source")) + if not sourcepos then return end + local source = minetest.get_node(sourcepos).name + local newnode = false + if source and not ((source == "pipeworks:pump_on" and pipeworks.check_for_liquids(sourcepos)) or string.find(source,"_loaded") or source == "ignore" ) then + newnode = string.gsub(node.name,"loaded","empty") + end + + if newnode then + minetest.add_node(pos,{name=newnode, param2 = node.param2}) + minetest.get_meta(pos):set_string("source","") + end +end + +pipeworks.spigot_check = function(pos, node) + local belowname = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name + if belowname and (belowname == "air" or belowname == "default:water_flowing" or belowname == "default:water_source") then + local spigotname = minetest.get_node(pos).name + local fdir=node.param2 % 4 + local check = { + {x=pos.x,y=pos.y,z=pos.z+1}, + {x=pos.x+1,y=pos.y,z=pos.z}, + {x=pos.x,y=pos.y,z=pos.z-1}, + {x=pos.x-1,y=pos.y,z=pos.z} + } + local near_node = minetest.get_node(check[fdir+1]) + if near_node and string.find(near_node.name, "_loaded") then + if spigotname and spigotname == "pipeworks:spigot" then + minetest.add_node(pos,{name = "pipeworks:spigot_pouring", param2 = fdir}) + if finitewater or belowname ~= "default:water_source" then + minetest.add_node({x=pos.x,y=pos.y-1,z=pos.z},{name = "default:water_source"}) + end + end + else + if spigotname == "pipeworks:spigot_pouring" then + minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:spigot", param2 = fdir}) + if belowname == "default:water_source" and not finitewater then + minetest.remove_node({x=pos.x,y=pos.y-1,z=pos.z}) + end + end + end + end +end + +pipeworks.fountainhead_check = function(pos, node) + local abovename = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name + if abovename and (abovename == "air" or abovename == "default:water_flowing" or abovename == "default:water_source") then + local fountainhead_name = minetest.get_node(pos).name + local near_node = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}) + if near_node and string.find(near_node.name, "_loaded") then + if fountainhead_name and fountainhead_name == "pipeworks:fountainhead" then + minetest.add_node(pos,{name = "pipeworks:fountainhead_pouring"}) + if finitewater or abovename ~= "default:water_source" then + minetest.add_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "default:water_source"}) + end + end + else + if fountainhead_name == "pipeworks:fountainhead_pouring" then + minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:fountainhead"}) + if abovename == "default:water_source" and not finitewater then + minetest.remove_node({x=pos.x,y=pos.y+1,z=pos.z}) + end + end + end + end +end diff --git a/mods/pipeworks/init.lua b/mods/pipeworks/init.lua new file mode 100755 index 0000000..e908bcc --- /dev/null +++ b/mods/pipeworks/init.lua @@ -0,0 +1,149 @@ +-- Pipeworks mod by Vanessa Ezekowitz - 2013-07-13 +-- +-- This mod supplies various steel pipes and plastic pneumatic tubes +-- and devices that they can connect to. +-- +-- License: WTFPL +-- + +pipeworks = {} + +local DEBUG = false + +pipeworks.worldpath = minetest.get_worldpath() +pipeworks.modpath = minetest.get_modpath("pipeworks") + +dofile(pipeworks.modpath.."/default_settings.lua") +-- Read the external config file if it exists. +local worldsettingspath = pipeworks.worldpath.."/pipeworks_settings.txt" +local worldsettingsfile = io.open(worldsettingspath, "r") +if worldsettingsfile then + worldsettingsfile:close() + dofile(worldsettingspath) +end +if pipeworks.toggles.pipe_mode == "pressure" then + minetest.log("warning", "pipeworks pressure logic mode comes with caveats and differences in behaviour, you have been warned!") +end + +-- Random variables + +pipeworks.expect_infinite_stacks = true +if minetest.get_modpath("unified_inventory") or not minetest.settings:get_bool("creative_mode") then + pipeworks.expect_infinite_stacks = false +end + +pipeworks.meseadjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}} + +pipeworks.rules_all = {{x=0, y=0, z=1},{x=0, y=0, z=-1},{x=1, y=0, z=0},{x=-1, y=0, z=0}, + {x=0, y=1, z=1},{x=0, y=1, z=-1},{x=1, y=1, z=0},{x=-1, y=1, z=0}, + {x=0, y=-1, z=1},{x=0, y=-1, z=-1},{x=1, y=-1, z=0},{x=-1, y=-1, z=0}, + {x=0, y=1, z=0}, {x=0, y=-1, z=0}} + +pipeworks.mesecons_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=1,z=0},{x=0,y=-1,z=0}} +pipeworks.digilines_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=1,z=0},{x=0,y=-1,z=0}} + +pipeworks.liquid_texture = "default_water.png" + +pipeworks.button_off = {text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"} +pipeworks.button_on = {text="", texture="pipeworks_button_on.png", addopts="false;false;pipeworks_button_interm.png"} +pipeworks.button_base = "image_button[0,4.3;1,0.6" +pipeworks.button_label = "label[0.9,4.31;Allow splitting incoming stacks from tubes]" + +-- Helper functions + +function pipeworks.fix_image_names(table, replacement) + local outtable={} + for i in ipairs(table) do + outtable[i]=string.gsub(table[i], "_XXXXX", replacement) + end + + return outtable +end + +function pipeworks.add_node_box(t, b) + if not t or not b then return end + for i in ipairs(b) + do table.insert(t, b[i]) + end +end + +function pipeworks.may_configure(pos, player) + local name = player:get_player_name() + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + + if owner ~= "" then -- wielders and filters + return owner == name + end + return not minetest.is_protected(pos, name) +end + +function pipeworks.replace_name(tbl,tr,name) + local ntbl={} + for key,i in pairs(tbl) do + if type(i)=="string" then + ntbl[key]=string.gsub(i,tr,name) + elseif type(i)=="table" then + ntbl[key]=pipeworks.replace_name(i,tr,name) + else + ntbl[key]=i + end + end + return ntbl +end + +pipeworks.logger = function(msg) + print("[pipeworks] "..msg) +end + +------------------------------------------- +-- Load the various other parts of the mod + +-- early auto-detection for finite water mode if not explicitly disabled +if pipeworks.toggles.finite_water == nil then + dofile(pipeworks.modpath.."/autodetect-finite-water.lua") +end + +dofile(pipeworks.modpath.."/common.lua") +dofile(pipeworks.modpath.."/models.lua") +dofile(pipeworks.modpath.."/autoplace_pipes.lua") +dofile(pipeworks.modpath.."/autoplace_tubes.lua") +dofile(pipeworks.modpath.."/luaentity.lua") +dofile(pipeworks.modpath.."/item_transport.lua") +dofile(pipeworks.modpath.."/flowing_logic.lua") +dofile(pipeworks.modpath.."/crafts.lua") +dofile(pipeworks.modpath.."/tube_registration.lua") +dofile(pipeworks.modpath.."/routing_tubes.lua") +dofile(pipeworks.modpath.."/sorting_tubes.lua") +dofile(pipeworks.modpath.."/vacuum_tubes.lua") +dofile(pipeworks.modpath.."/signal_tubes.lua") +dofile(pipeworks.modpath.."/decorative_tubes.lua") +dofile(pipeworks.modpath.."/filter-injector.lua") +dofile(pipeworks.modpath.."/trashcan.lua") +dofile(pipeworks.modpath.."/wielder.lua") + +local logicdir = "/pressure_logic/" + +-- note that even with these files the new flow logic is not yet default. +-- registration will take place but no actual ABMs/node logic will be installed, +-- unless the toggle flag is specifically enabled in the per-world settings flag. +dofile(pipeworks.modpath..logicdir.."flowable_node_registry.lua") +dofile(pipeworks.modpath..logicdir.."abms.lua") +dofile(pipeworks.modpath..logicdir.."abm_register.lua") +dofile(pipeworks.modpath..logicdir.."flowable_node_registry_install.lua") + +if pipeworks.enable_pipes then dofile(pipeworks.modpath.."/pipes.lua") end +if pipeworks.enable_teleport_tube then dofile(pipeworks.modpath.."/teleport_tube.lua") end +if pipeworks.enable_pipe_devices then dofile(pipeworks.modpath.."/devices.lua") end + +if pipeworks.enable_redefines then + dofile(pipeworks.modpath.."/compat-chests.lua") + dofile(pipeworks.modpath.."/compat-furnaces.lua") +end +if pipeworks.enable_autocrafter then dofile(pipeworks.modpath.."/autocrafter.lua") end +if pipeworks.enable_lua_tube then dofile(pipeworks.modpath.."/lua_tube.lua") end + +minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty") + +print("Pipeworks loaded!") + diff --git a/mods/pipeworks/item_transport.lua b/mods/pipeworks/item_transport.lua new file mode 100755 index 0000000..7219f7e --- /dev/null +++ b/mods/pipeworks/item_transport.lua @@ -0,0 +1,401 @@ +local luaentity = pipeworks.luaentity +local enable_max_limit = minetest.settings:get("pipeworks_enable_items_per_tube_limit") +local max_tube_limit = tonumber(minetest.settings:get("pipeworks_max_items_per_tube")) or 30 +if enable_max_limit == nil then enable_max_limit = true end + +function pipeworks.tube_item(pos, item) + error("obsolete pipeworks.tube_item() called; change caller to use pipeworks.tube_inject_item() instead") +end + +function pipeworks.tube_inject_item(pos, start_pos, velocity, item, owner) + -- Take item in any format + local stack = ItemStack(item) + local obj = luaentity.add_entity(pos, "pipeworks:tubed_item") + obj:set_item(stack:to_string()) + obj.start_pos = vector.new(start_pos) + obj:setvelocity(velocity) + obj.owner = owner + --obj:set_color("red") -- todo: this is test-only code + return obj +end + +-- adding two tube functions +-- can_remove(pos,node,stack,dir) returns the maximum number of items of that stack that can be removed +-- remove_items(pos,node,stack,dir,count) removes count items and returns them +-- both optional w/ sensible defaults and fallback to normal allow_* function +-- XXX: possibly change insert_object to insert_item + +local adjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}} + +function pipeworks.notvel(tbl, vel) + local tbl2={} + for _,val in ipairs(tbl) do + if val.x ~= -vel.x or val.y ~= -vel.y or val.z ~= -vel.z then table.insert(tbl2, val) end + end + return tbl2 +end + +local tube_item_count = {} + +minetest.register_globalstep(function(dtime) + if not luaentity.entities then + return + end + tube_item_count = {} + for id, entity in pairs(luaentity.entities) do + if entity.name == "pipeworks:tubed_item" then + local h = minetest.hash_node_position(vector.round(entity._pos)) + tube_item_count[h] = (tube_item_count[h] or 0) + 1 + end + end +end) + + + +-- tube overload mechanism: +-- when the tube's item count (tracked in the above tube_item_count table) +-- exceeds the limit configured per tube, replace it with a broken one. +local crunch_tube = function(pos, cnode, cmeta) + if enable_max_limit then + local h = minetest.hash_node_position(pos) + local itemcount = tube_item_count[h] or 0 + if itemcount > max_tube_limit then + cmeta:set_string("the_tube_was", minetest.serialize(cnode)) + print("[Pipeworks] Warning - a tube at "..minetest.pos_to_string(pos).." broke due to too many items ("..itemcount..")") + minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) + pipeworks.scan_for_tube_objects(pos) + end + end +end + + + +-- compatibility behaviour for the existing can_go() callbacks, +-- which can only specify a list of possible positions. +local function go_next_compat(pos, cnode, cmeta, cycledir, vel, stack, owner) + local next_positions = {} + local max_priority = 0 + local can_go + + if minetest.registered_nodes[cnode.name] and minetest.registered_nodes[cnode.name].tube and minetest.registered_nodes[cnode.name].tube.can_go then + can_go = minetest.registered_nodes[cnode.name].tube.can_go(pos, cnode, vel, stack) + else + can_go = pipeworks.notvel(adjlist, vel) + end + -- can_go() is expected to return an array-like table of candidate offsets. + -- for each one, look at the node at that offset and determine if it can accept the item. + -- also note the prioritisation: + -- if any tube is found with a greater priority than previously discovered, + -- then the valid positions are reset and and subsequent positions under this are skipped. + -- this has the effect of allowing only equal priorities to co-exist. + for _, vect in ipairs(can_go) do + local npos = vector.add(pos, vect) + pipeworks.load_position(npos) + local node = minetest.get_node(npos) + local reg_node = minetest.registered_nodes[node.name] + if reg_node then + local tube_def = reg_node.tube + local tubedevice = minetest.get_item_group(node.name, "tubedevice") + local tube_priority = (tube_def and tube_def.priority) or 100 + if tubedevice > 0 and tube_priority >= max_priority then + if not tube_def or not tube_def.can_insert or + tube_def.can_insert(npos, node, stack, vect, owner) then + if tube_priority > max_priority then + max_priority = tube_priority + next_positions = {} + end + next_positions[#next_positions + 1] = {pos = npos, vect = vect} + end + end + end + end + + -- indicate not found if no valid rules were picked up, + -- and don't change the counter. + if not next_positions[1] then + return cycledir, false, nil, nil + end + + -- otherwise rotate to the next output direction and return that + local n = (cycledir % (#next_positions)) + 1 + local new_velocity = vector.multiply(next_positions[n].vect, vel.speed) + return n, true, new_velocity, nil +end + + + + +-- function called by the on_step callback of the pipeworks tube luaentity. +-- the routine is passed the current node position, velocity, itemstack, +-- and owner name. +-- returns three values: +-- * a boolean "found destination" status; +-- * a new velocity vector that the tubed item should use, or nil if not found; +-- * a "multi-mode" data table (or nil if N/A) where a stack was split apart. +-- if this is not nil, the luaentity spawns new tubed items for each new fragment stack, +-- then deletes itself (i.e. the original item stack). +local function go_next(pos, velocity, stack, owner) + local cnode = minetest.get_node(pos) + local cmeta = minetest.get_meta(pos) + local speed = math.abs(velocity.x + velocity.y + velocity.z) + if speed == 0 then + speed = 1 + end + local vel = {x = velocity.x/speed, y = velocity.y/speed, z = velocity.z/speed,speed=speed} + if speed >= 4.1 then + speed = 4 + elseif speed >= 1.1 then + speed = speed - 0.1 + else + speed = 1 + end + vel.speed = speed + + crunch_tube(pos, cnode, cmeta) + -- cycling of outputs: + -- an integer counter is kept in each pipe's metadata, + -- which allows tracking which output was previously chosen. + -- note reliance on get_int returning 0 for uninitialised. + local cycledir = cmeta:get_int("tubedir") + + -- pulled out and factored out into go_next_compat() above. + -- n is the new value of the cycle counter. + -- XXX: this probably needs cleaning up after being split out, + -- seven args is a bit too many + local n, found, new_velocity, multimode = go_next_compat(pos, cnode, cmeta, cycledir, vel, stack, owner) + + -- if not using output cycling, + -- don't update the field so it stays the same for the next item. + if pipeworks.enable_cyclic_mode then + cmeta:set_int("tubedir", n) + end + return found, new_velocity, multimode +end + + + +minetest.register_entity("pipeworks:tubed_item", { + initial_properties = { + hp_max = 1, + physical = false, + collisionbox = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1}, + visual = "wielditem", + visual_size = {x = 0.15, y = 0.15}, + textures = {""}, + spritediv = {x = 1, y = 1}, + initial_sprite_basepos = {x = 0, y = 0}, + is_visible = false, + }, + + physical_state = false, + + from_data = function(self, itemstring) + local stack = ItemStack(itemstring) + local itemtable = stack:to_table() + local itemname = nil + if itemtable then + itemname = stack:to_table().name + end + local item_texture = nil + local item_type = "" + if minetest.registered_items[itemname] then + item_texture = minetest.registered_items[itemname].inventory_image + item_type = minetest.registered_items[itemname].type + end + self.object:set_properties({ + is_visible = true, + textures = {stack:get_name()} + }) + local def = stack:get_definition() + self.object:setyaw((def and def.type == "node") and 0 or math.pi * 0.25) + end, + + get_staticdata = luaentity.get_staticdata, + on_activate = function(self, staticdata) -- Legacy code, should be replaced later by luaentity.on_activate + if staticdata == "" or staticdata == nil then + return + end + if staticdata == "toremove" then + self.object:remove() + return + end + local item = minetest.deserialize(staticdata) + pipeworks.tube_inject_item(self.object:getpos(), item.start_pos, item.velocity, item.itemstring) + self.object:remove() + end, +}) + +minetest.register_entity("pipeworks:color_entity", { + initial_properties = { + hp_max = 1, + physical = false, + collisionbox = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1}, + visual = "cube", + visual_size = {x = 3.5, y = 3.5, z = 3.5}, -- todo: find correct size + textures = {""}, + is_visible = false, + }, + + physical_state = false, + + from_data = function(self, color) + local t = "pipeworks_color_"..color..".png" + local prop = { + is_visible = true, + visual = "cube", + textures = {t, t, t, t, t, t} -- todo: textures + } + self.object:set_properties(prop) + end, + + get_staticdata = luaentity.get_staticdata, + on_activate = luaentity.on_activate, +}) + +-- see below for usage: +-- determine if go_next returned a multi-mode set. +local is_multimode = function(v) + return (type(v) == "table") and (v.__multimode) +end + +luaentity.register_entity("pipeworks:tubed_item", { + itemstring = '', + item_entity = nil, + color_entity = nil, + color = nil, + start_pos = nil, + + set_item = function(self, item) + local itemstring = ItemStack(item):to_string() -- Accept any input format + if self.itemstring == itemstring then + return + end + if self.item_entity then + self:remove_attached_entity(self.item_entity) + end + self.itemstring = itemstring + self.item_entity = self:add_attached_entity("pipeworks:tubed_item", itemstring) + end, + + set_color = function(self, color) + if self.color == color then + return + end + self.color = color + if self.color_entity then + self:remove_attached_entity(self.color_entity) + end + if color then + self.color_entity = self:add_attached_entity("pipeworks:color_entity", color) + else + self.color_entity = nil + end + end, + + on_step = function(self, dtime) + local pos = self:getpos() + if self.start_pos == nil then + self.start_pos = vector.round(pos) + self:setpos(pos) + end + + local stack = ItemStack(self.itemstring) + + local velocity = self:getvelocity() + + local moved = false + local speed = math.abs(velocity.x + velocity.y + velocity.z) + if speed == 0 then + speed = 1 + moved = true + end + local vel = {x = velocity.x / speed, y = velocity.y / speed, z = velocity.z / speed, speed = speed} + local moved_by = vector.distance(pos, self.start_pos) + + if moved_by >= 1 then + self.start_pos = vector.add(self.start_pos, vel) + moved = true + end + + pipeworks.load_position(self.start_pos) + local node = minetest.get_node(self.start_pos) + if moved and minetest.get_item_group(node.name, "tubedevice_receiver") == 1 then + local leftover + if minetest.registered_nodes[node.name].tube and minetest.registered_nodes[node.name].tube.insert_object then + leftover = minetest.registered_nodes[node.name].tube.insert_object(self.start_pos, node, stack, vel, self.owner) + else + leftover = stack + end + if leftover:is_empty() then + self:remove() + return + end + velocity = vector.multiply(velocity, -1) + self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) + self:setvelocity(velocity) + self:set_item(leftover:to_string()) + return + end + + if moved then + local found_next, new_velocity, multimode = go_next(self.start_pos, velocity, stack, self.owner) -- todo: color + local rev_vel = vector.multiply(velocity, -1) + local rev_dir = vector.direction(self.start_pos,vector.add(self.start_pos,rev_vel)) + local rev_node = minetest.get_node(vector.round(vector.add(self.start_pos,rev_dir))) + local tube_present = minetest.get_item_group(rev_node.name,"tubedevice") == 1 + if not found_next then + if pipeworks.drop_on_routing_fail or not tube_present or + minetest.get_item_group(rev_node.name,"tube") ~= 1 then + -- Using add_item instead of item_drop since this makes pipeworks backward + -- compatible with Minetest 0.4.13. + -- Using item_drop here makes Minetest 0.4.13 crash. + local dropped_item = minetest.add_item(self.start_pos, stack) + dropped_item:setvelocity(vector.multiply(velocity, 5)) + self:remove() + return + else + velocity = vector.multiply(velocity, -1) + self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) + self:setvelocity(velocity) + end + elseif is_multimode(multimode) then + -- create new stacks according to returned data. + local s = self.start_pos + for _, split in ipairs(multimode) do + pipeworks.tube_inject_item(s, s, split.velocity, split.itemstack, self.owner) + end + -- remove ourself now the splits are sent + self:remove() + return + end + + if new_velocity and not vector.equals(velocity, new_velocity) then + local nvelr = math.abs(new_velocity.x + new_velocity.y + new_velocity.z) + self:setpos(vector.add(self.start_pos, vector.multiply(new_velocity, (moved_by - 1) / nvelr))) + self:setvelocity(new_velocity) + end + end + end +}) + +if minetest.get_modpath("mesecons_mvps") then + mesecon.register_mvps_unmov("pipeworks:tubed_item") + mesecon.register_mvps_unmov("pipeworks:color_entity") + mesecon.register_on_mvps_move(function(moved_nodes) + local moved = {} + for _, n in ipairs(moved_nodes) do + moved[minetest.hash_node_position(n.oldpos)] = vector.subtract(n.pos, n.oldpos) + end + for id, entity in pairs(luaentity.entities) do + if entity.name == "pipeworks:tubed_item" then + local pos = entity:getpos() + local rpos = vector.round(pos) + local dir = moved[minetest.hash_node_position(rpos)] + if dir then + entity:setpos(vector.add(pos, dir)) + entity.start_pos = vector.add(entity.start_pos, dir) + end + end + end + end) +end diff --git a/mods/pipeworks/legacy.lua b/mods/pipeworks/legacy.lua new file mode 100755 index 0000000..b36cded --- /dev/null +++ b/mods/pipeworks/legacy.lua @@ -0,0 +1,59 @@ + +if not minetest.get_modpath("auto_tree_tap") and + minetest.get_modpath("technic") then + + minetest.register_abm({ + nodenames = { "auto_tree_tap:off", "auto_tree_tap:on" }, + chance = 1, + interval = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local fdir = node.param2 + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("pick", 1) + inv:set_size("ghost_pick", 1) + inv:set_size("main", 100) + minetest.set_node(pos, {name = "pipeworks:nodebreaker_off", param2 = fdir}) + minetest.registered_nodes["pipeworks:nodebreaker_off"].on_punch(pos, node) + inv:set_stack("pick", 1, ItemStack("technic:treetap")) + end + }) + + minetest.register_node(":auto_tree_tap:off", { + description = "Auto-Tap", + tiles = {"pipeworks_nodebreaker_top_off.png","pipeworks_nodebreaker_bottom_off.png","pipeworks_nodebreaker_side2_off.png","pipeworks_nodebreaker_side1_off.png", + "pipeworks_nodebreaker_back.png","pipeworks_nodebreaker_front_off.png"}, + is_ground_content = true, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, not_in_creative_inventory=1 }, + sounds = default.node_sound_stone_defaults(), + tube = {connect_sides={back=1}}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("pick", 1) + inv:set_stack("pick", 1, ItemStack("default:pick_mese")) + end, + after_place_node = function (pos, placer) + pipeworks.scan_for_tube_objects(pos, placer) + local placer_pos = placer:getpos() + + --correct for the player's height + if placer:is_player() then placer_pos.y = placer_pos.y + 1.5 end + + --correct for 6d facedir + if placer_pos then + local dir = { + x = pos.x - placer_pos.x, + y = pos.y - placer_pos.y, + z = pos.z - placer_pos.z + } + local node = minetest.get_node(pos) + node.param2 = minetest.dir_to_facedir(dir, true) + minetest.set_node(pos, node) + minetest.log("action", "real (6d) facedir: " .. node.param2) + end + end, + after_dig_node = pipeworks.scan_for_tube_objects, + }) +end diff --git a/mods/pipeworks/lua_tube.lua b/mods/pipeworks/lua_tube.lua new file mode 100755 index 0000000..8cc4468 --- /dev/null +++ b/mods/pipeworks/lua_tube.lua @@ -0,0 +1,859 @@ +-- ______ +-- | +-- | +-- | __ ___ _ __ _ _ +-- | | | | | |\ | | |_| | | | | |_ |_| +-- |___| |______ |__| | \| | | \ |__| |_ |_ |_ |\ tube +-- | +-- | +-- + +-- Reference +-- ports = get_real_port_states(pos): gets if inputs are powered from outside +-- newport = merge_port_states(state1, state2): just does result = state1 or state2 for every port +-- set_port(pos, rule, state): activates/deactivates the mesecons according to the port states +-- set_port_states(pos, ports): Applies new port states to a Luacontroller at pos +-- run(pos): runs the code in the controller at pos +-- reset_meta(pos, code, errmsg): performs a software-reset, installs new code and prints error messages +-- resetn(pos): performs a hardware reset, turns off all ports +-- +-- The Sandbox +-- The whole code of the controller runs in a sandbox, +-- a very restricted environment. +-- Actually the only way to damage the server is to +-- use too much memory from the sandbox. +-- You can add more functions to the environment +-- (see where local env is defined) +-- Something nice to play is is appending minetest.env to it. + +local BASENAME = "pipeworks:lua_tube" + +local rules = { + red = {x = -1, y = 0, z = 0, name = "red"}, + blue = {x = 1, y = 0, z = 0, name = "blue"}, + yellow = {x = 0, y = -1, z = 0, name = "yellow"}, + green = {x = 0, y = 1, z = 0, name = "green"}, + black = {x = 0, y = 0, z = -1, name = "black"}, + white = {x = 0, y = 0, z = 1, name = "white"}, +} + + +------------------ +-- Action stuff -- +------------------ +-- These helpers are required to set the port states of the lua_tube + +local function update_real_port_states(pos, rule_name, new_state) + local meta = minetest.get_meta(pos) + if rule_name == nil then + meta:set_int("real_portstates", 1) + return + end + local n = meta:get_int("real_portstates") - 1 + local L = {} + for i = 1, 6 do + L[i] = n % 2 + n = math.floor(n / 2) + end + -- (0,0,-1) (0,-1,0) (-1,0,0) (1,0,0) (0,1,0) (0,0,1) + local pos_to_side = { 5, 3, 1, nil, 2, 4, 6 } + if rule_name.x == nil then + for _, rname in ipairs(rule_name) do + local port = pos_to_side[rname.x + (2 * rname.y) + (3 * rname.z) + 4] + L[port] = (newstate == "on") and 1 or 0 + end + else + local port = pos_to_side[rule_name.x + (2 * rule_name.y) + (3 * rule_name.z) + 4] + L[port] = (new_state == "on") and 1 or 0 + end + meta:set_int("real_portstates", + 1 + + 1 * L[1] + + 2 * L[2] + + 4 * L[3] + + 8 * L[4] + + 16 * L[5] + + 32 * L[6]) +end + + +local port_names = {"red", "blue", "yellow", "green", "black", "white"} + +local function get_real_port_states(pos) + -- Determine if ports are powered (by itself or from outside) + local meta = minetest.get_meta(pos) + local L = {} + local n = meta:get_int("real_portstates") - 1 + for _, name in ipairs(port_names) do + L[name] = ((n % 2) == 1) + n = math.floor(n / 2) + end + return L +end + + +local function merge_port_states(ports, vports) + return { + red = ports.red or vports.red, + blue = ports.blue or vports.blue, + yellow = ports.yellow or vports.yellow, + green = ports.green or vports.green, + black = ports.black or vports.black, + white = ports.white or vports.white, + } +end + +local function generate_name(ports) + local red = ports.red and 1 or 0 + local blue = ports.blue and 1 or 0 + local yellow = ports.yellow and 1 or 0 + local green = ports.green and 1 or 0 + local black = ports.black and 1 or 0 + local white = ports.white and 1 or 0 + return BASENAME..white..black..green..yellow..blue..red +end + + +local function set_port(pos, rule, state) + if state then + mesecon.receptor_on(pos, {rule}) + else + mesecon.receptor_off(pos, {rule}) + end +end + + +local function clean_port_states(ports) + ports.red = ports.red and true or false + ports.blue = ports.blue and true or false + ports.yellow = ports.yellow and true or false + ports.green = ports.green and true or false + ports.black = ports.black and true or false + ports.white = ports.white and true or false +end + + +local function set_port_states(pos, ports) + local node = minetest.get_node(pos) + local name = node.name + clean_port_states(ports) + local vports = minetest.registered_nodes[name].virtual_portstates + local new_name = generate_name(ports) + + if name ~= new_name and vports then + -- Problem: + -- We need to place the new node first so that when turning + -- off some port, it won't stay on because the rules indicate + -- there is an onstate output port there. + -- When turning the output off then, it will however cause feedback + -- so that the lua_tube will receive an "off" event by turning + -- its output off. + -- Solution / Workaround: + -- Remember which output was turned off and ignore next "off" event. + local meta = minetest.get_meta(pos) + local ign = minetest.deserialize(meta:get_string("ignore_offevents")) or {} + if ports.red and not vports.red and not mesecon.is_powered(pos, rules.red) then ign.red = true end + if ports.blue and not vports.blue and not mesecon.is_powered(pos, rules.blue) then ign.blue = true end + if ports.yellow and not vports.yellow and not mesecon.is_powered(pos, rules.yellow) then ign.yellow = true end + if ports.green and not vports.green and not mesecon.is_powered(pos, rules.green) then ign.green = true end + if ports.black and not vports.black and not mesecon.is_powered(pos, rules.black) then ign.black = true end + if ports.white and not vports.white and not mesecon.is_powered(pos, rules.white) then ign.white = true end + meta:set_string("ignore_offevents", minetest.serialize(ign)) + + minetest.swap_node(pos, {name = new_name, param2 = node.param2}) + + if ports.red ~= vports.red then set_port(pos, rules.red, ports.red) end + if ports.blue ~= vports.blue then set_port(pos, rules.blue, ports.blue) end + if ports.yellow ~= vports.yellow then set_port(pos, rules.yellow, ports.yellow) end + if ports.green ~= vports.green then set_port(pos, rules.green, ports.green) end + if ports.black ~= vports.black then set_port(pos, rules.black, ports.black) end + if ports.white ~= vports.white then set_port(pos, rules.white, ports.white) end + end +end + + +----------------- +-- Overheating -- +----------------- +local function burn_controller(pos) + local node = minetest.get_node(pos) + node.name = BASENAME.."_burnt" + minetest.swap_node(pos, node) + minetest.get_meta(pos):set_string("lc_memory", ""); + -- Wait for pending operations + minetest.after(0.2, mesecon.receptor_off, pos, mesecon.rules.flat) +end + +local function overheat(pos, meta) + if mesecon.do_overheat(pos) then -- If too hot + burn_controller(pos) + return true + end +end + +------------------------ +-- Ignored off events -- +------------------------ + +local function ignore_event(event, meta) + if event.type ~= "off" then return false end + local ignore_offevents = minetest.deserialize(meta:get_string("ignore_offevents")) or {} + if ignore_offevents[event.pin.name] then + ignore_offevents[event.pin.name] = nil + meta:set_string("ignore_offevents", minetest.serialize(ignore_offevents)) + return true + end +end + +------------------------- +-- Parsing and running -- +------------------------- + +local function safe_print(param) + print(dump(param)) +end + +local function safe_date() + return(os.date("*t",os.time())) +end + +-- string.rep(str, n) with a high value for n can be used to DoS +-- the server. Therefore, limit max. length of generated string. +local function safe_string_rep(str, n) + if #str * n > mesecon.setting("luacontroller_string_rep_max", 64000) then + debug.sethook() -- Clear hook + error("string.rep: string length overflow", 2) + end + + return string.rep(str, n) +end + +-- string.find with a pattern can be used to DoS the server. +-- Therefore, limit string.find to patternless matching. +local function safe_string_find(...) + if (select(4, ...)) ~= true then + debug.sethook() -- Clear hook + error("string.find: 'plain' (fourth parameter) must always be true in a lua controlled tube") + end + + return string.find(...) +end + +local function remove_functions(x) + local tp = type(x) + if tp == "function" then + return nil + end + + -- Make sure to not serialize the same table multiple times, otherwise + -- writing mem.test = mem in the lua controlled tube will lead to infinite recursion + local seen = {} + + local function rfuncs(x) + if seen[x] then return end + seen[x] = true + if type(x) ~= "table" then return end + + for key, value in pairs(x) do + if type(key) == "function" or type(value) == "function" then + x[key] = nil + else + if type(key) == "table" then + rfuncs(key) + end + if type(value) == "table" then + rfuncs(value) + end + end + end + end + + rfuncs(x) + + return x +end + +local function get_interrupt(pos) + -- iid = interrupt id + local function interrupt(time, iid) + if type(time) ~= "number" then return end + local luac_id = minetest.get_meta(pos):get_int("luac_id") + mesecon.queue:add_action(pos, "pipeworks:lc_tube_interrupt", {luac_id, iid}, time, iid, 1) + end + return interrupt +end + + +local function get_digiline_send(pos) + if not digiline then return end + return function(channel, msg) + -- Make sure channel is string, number or boolean + if (type(channel) ~= "string" and type(channel) ~= "number" and type(channel) ~= "boolean") then + return false + end + + -- It is technically possible to send functions over the wire since + -- the high performance impact of stripping those from the data has + -- been decided to not be worth the added realism. + -- Make sure serialized version of the data is not insanely long to + -- prevent DoS-like attacks + local msg_ser = minetest.serialize(msg) + if #msg_ser > mesecon.setting("luacontroller_digiline_maxlen", 50000) then + return false + end + + minetest.after(0, function() + digilines.receptor_send(pos, digiline.rules.default, channel, msg) + end) + return true + end +end + + +local safe_globals = { + "assert", "error", "ipairs", "next", "pairs", "select", + "tonumber", "tostring", "type", "unpack", "_VERSION" +} + +local function create_environment(pos, mem, event) + -- Gather variables for the environment + local vports = minetest.registered_nodes[minetest.get_node(pos).name].virtual_portstates + local vports_copy = {} + for k, v in pairs(vports) do vports_copy[k] = v end + local rports = get_real_port_states(pos) + + -- Create new library tables on each call to prevent one Luacontroller + -- from breaking a library and messing up other Luacontrollers. + local env = { + pin = merge_port_states(vports, rports), + port = vports_copy, + event = event, + mem = mem, + heat = mesecon.get_heat(pos), + heat_max = mesecon.setting("overheat_max", 20), + print = safe_print, + interrupt = get_interrupt(pos), + digiline_send = get_digiline_send(pos), + string = { + byte = string.byte, + char = string.char, + format = string.format, + len = string.len, + lower = string.lower, + upper = string.upper, + rep = safe_string_rep, + reverse = string.reverse, + sub = string.sub, + find = safe_string_find, + }, + math = { + abs = math.abs, + acos = math.acos, + asin = math.asin, + atan = math.atan, + atan2 = math.atan2, + ceil = math.ceil, + cos = math.cos, + cosh = math.cosh, + deg = math.deg, + exp = math.exp, + floor = math.floor, + fmod = math.fmod, + frexp = math.frexp, + huge = math.huge, + ldexp = math.ldexp, + log = math.log, + log10 = math.log10, + max = math.max, + min = math.min, + modf = math.modf, + pi = math.pi, + pow = math.pow, + rad = math.rad, + random = math.random, + sin = math.sin, + sinh = math.sinh, + sqrt = math.sqrt, + tan = math.tan, + tanh = math.tanh, + }, + table = { + concat = table.concat, + insert = table.insert, + maxn = table.maxn, + remove = table.remove, + sort = table.sort, + }, + os = { + clock = os.clock, + difftime = os.difftime, + time = os.time, + datetable = safe_date, + }, + } + env._G = env + + for _, name in pairs(safe_globals) do + env[name] = _G[name] + end + + return env +end + + +local function timeout() + debug.sethook() -- Clear hook + error("Code timed out!", 2) +end + + +local function create_sandbox(code, env) + if code:byte(1) == 27 then + return nil, "Binary code prohibited." + end + local f, msg = loadstring(code) + if not f then return nil, msg end + setfenv(f, env) + + -- Turn off JIT optimization for user code so that count + -- events are generated when adding debug hooks + if rawget(_G, "jit") then + jit.off(f, true) + end + + return function(...) + -- Use instruction counter to stop execution + -- after luacontroller_maxevents + local maxevents = mesecon.setting("luacontroller_maxevents", 10000) + debug.sethook(timeout, "", maxevents) + local ok, ret = pcall(f, ...) + debug.sethook() -- Clear hook + if not ok then error(ret, 0) end + return ret + end +end + + +local function load_memory(meta) + return minetest.deserialize(meta:get_string("lc_memory")) or {} +end + + +local function save_memory(pos, meta, mem) + local memstring = minetest.serialize(remove_functions(mem)) + local memsize_max = mesecon.setting("luacontroller_memsize", 100000) + + if (#memstring <= memsize_max) then + meta:set_string("lc_memory", memstring) + else + print("Error: lua_tube memory overflow. "..memsize_max.." bytes available, " + ..#memstring.." required. Controller overheats.") + burn_controller(pos) + end +end + + +local function run(pos, event) + local meta = minetest.get_meta(pos) + if overheat(pos) then return end + if ignore_event(event, meta) then return end + + -- Load code & mem from meta + local mem = load_memory(meta) + local code = meta:get_string("code") + + -- Create environment + local env = create_environment(pos, mem, event) + + -- Create the sandbox and execute code + local f, msg = create_sandbox(code, env) + if not f then return false, msg end + local succ, msg = pcall(f) + if not succ then return false, msg end + if type(env.port) ~= "table" then + return false, "Ports set are invalid." + end + + -- Actually set the ports + set_port_states(pos, env.port) + + -- Save memory. This may burn the luacontroller if a memory overflow occurs. + save_memory(pos, meta, env.mem) + + return succ, msg +end + +mesecon.queue:add_function("pipeworks:lc_tube_interrupt", function (pos, luac_id, iid) + -- There is no lua_tube anymore / it has been reprogrammed / replaced / burnt + if (minetest.get_meta(pos):get_int("luac_id") ~= luac_id) then return end + if (minetest.registered_nodes[minetest.get_node(pos).name].is_burnt) then return end + run(pos, {type = "interrupt", iid = iid}) +end) + +local function reset_meta(pos, code, errmsg) + local meta = minetest.get_meta(pos) + meta:set_string("code", code) + code = minetest.formspec_escape(code or "") + errmsg = minetest.formspec_escape(tostring(errmsg or "")) + meta:set_string("formspec", "size[12,10]".. + "background[-0.2,-0.25;12.4,10.75;jeija_luac_background.png]".. + "textarea[0.2,0.2;12.2,9.5;code;;"..code.."]".. + "image_button[4.75,8.75;2.5,1;jeija_luac_runbutton.png;program;]".. + "image_button_exit[11.72,-0.25;0.425,0.4;jeija_close_window.png;exit;]".. + "label[0.1,9;"..errmsg.."]") + meta:set_int("luac_id", math.random(1, 65535)) +end + +local function reset(pos) + set_port_states(pos, {red = false, blue = false, yellow = false, + green = false, black = false, white = false}) +end + + +----------------------- +-- Node Registration -- +----------------------- + +local output_rules = {} +local input_rules = {} + +local node_box = { + type = "fixed", + fixed = { + pipeworks.tube_leftstub[1], -- tube segment against -X face + pipeworks.tube_rightstub[1], -- tube segment against +X face + pipeworks.tube_bottomstub[1], -- tube segment against -Y face + pipeworks.tube_topstub[1], -- tube segment against +Y face + pipeworks.tube_frontstub[1], -- tube segment against -Z face + pipeworks.tube_backstub[1], -- tube segment against +Z face + } +} + +local selection_box = { + type = "fixed", + fixed = pipeworks.tube_selectboxes, +} + +local digiline = { + receptor = {}, + effector = { + action = function(pos, node, channel, msg) + run(pos, {type = "digiline", channel = channel, msg = msg}) + end + } +} +local function on_receive_fields(pos, form_name, fields, sender) + if not fields.program then + return + end + local name = sender:get_player_name() + if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, {protection_bypass=true}) then + minetest.record_protection_violation(pos, name) + return + end + reset(pos) + reset_meta(pos, fields.code) + local succ, err = run(pos, {type="program"}) + if not succ then + print(err) + reset_meta(pos, fields.code, err) + end +end + +local function go_back(velocity) + local adjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}} + local speed = math.abs(velocity.x + velocity.y + velocity.z) + if speed == 0 then + speed = 1 + end + local vel = {x = velocity.x/speed, y = velocity.y/speed, z = velocity.z/speed,speed=speed} + if speed >= 4.1 then + speed = 4 + elseif speed >= 1.1 then + speed = speed - 0.1 + else + speed = 1 + end + vel.speed = speed + return pipeworks.notvel(adjlist, vel) +end + +local tiles_base = { + "pipeworks_mese_tube_plain_4.png", "pipeworks_mese_tube_plain_3.png", + "pipeworks_mese_tube_plain_2.png", "pipeworks_mese_tube_plain_1.png", + "pipeworks_mese_tube_plain_6.png", "pipeworks_mese_tube_plain_5.png"} + +for red = 0, 1 do -- 0 = off 1 = on +for blue = 0, 1 do +for yellow = 0, 1 do +for green = 0, 1 do +for black = 0, 1 do +for white = 0, 1 do + local cid = tostring(white)..tostring(black)..tostring(green).. + tostring(yellow)..tostring(blue)..tostring(red) + local node_name = BASENAME..cid + local tiles = table.copy(tiles_base) + if red == 1 then + tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_on.png^[transformR90)" + tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_on.png^[transformR90)" + tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_on.png^[transformR270)" + tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_on.png^[transformR90)" + else + tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_off.png^[transformR90)" + tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_off.png^[transformR90)" + tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_off.png^[transformR270)" + tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_off.png^[transformR90)" + end + if blue == 1 then + tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_on.png^[transformR270)" + tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_on.png^[transformR270)" + tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_on.png^[transformR90)" + tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_on.png^[transformR270)" + else + tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_off.png^[transformR270)" + tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_off.png^[transformR270)" + tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_off.png^[transformR90)" + tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_off.png^[transformR270)" + end + if yellow == 1 then + tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_on.png^[transformR180)" + tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_on.png^[transformR180)" + tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_on.png^[transformR180)" + tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_on.png^[transformR180)" + else + tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_off.png^[transformR180)" + tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_off.png^[transformR180)" + tiles[5] = tiles[5].."^(pipeworks_lua_tube_port_off.png^[transformR180)" + tiles[6] = tiles[6].."^(pipeworks_lua_tube_port_off.png^[transformR180)" + end + if green == 1 then + tiles[3] = tiles[3].."^pipeworks_lua_tube_port_on.png" + tiles[4] = tiles[4].."^pipeworks_lua_tube_port_on.png" + tiles[5] = tiles[5].."^pipeworks_lua_tube_port_on.png" + tiles[6] = tiles[6].."^pipeworks_lua_tube_port_on.png" + else + tiles[3] = tiles[3].."^pipeworks_lua_tube_port_off.png" + tiles[4] = tiles[4].."^pipeworks_lua_tube_port_off.png" + tiles[5] = tiles[5].."^pipeworks_lua_tube_port_off.png" + tiles[6] = tiles[6].."^pipeworks_lua_tube_port_off.png" + end + if black == 1 then + tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_on.png^[transformR180)" + tiles[2] = tiles[2].."^pipeworks_lua_tube_port_on.png" + tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_on.png^[transformR90)" + tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_on.png^[transformR270)" + else + tiles[1] = tiles[1].."^(pipeworks_lua_tube_port_off.png^[transformR180)" + tiles[2] = tiles[2].."^pipeworks_lua_tube_port_off.png" + tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_off.png^[transformR90)" + tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_off.png^[transformR270)" + end + if white == 1 then + tiles[1] = tiles[1].."^pipeworks_lua_tube_port_on.png" + tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_on.png^[transformR180)" + tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_on.png^[transformR270)" + tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_on.png^[transformR90)" + else + tiles[1] = tiles[1].."^pipeworks_lua_tube_port_off.png" + tiles[2] = tiles[2].."^(pipeworks_lua_tube_port_off.png^[transformR180)" + tiles[3] = tiles[3].."^(pipeworks_lua_tube_port_off.png^[transformR270)" + tiles[4] = tiles[4].."^(pipeworks_lua_tube_port_off.png^[transformR90)" + end + + local groups = {snappy = 3, tube = 1, tubedevice = 1, overheat = 1} + if red + blue + yellow + green + black + white ~= 0 then + groups.not_in_creative_inventory = 1 + end + + output_rules[cid] = {} + input_rules[cid] = {} + if red == 1 then table.insert(output_rules[cid], rules.red) end + if blue == 1 then table.insert(output_rules[cid], rules.blue) end + if yellow == 1 then table.insert(output_rules[cid], rules.yellow) end + if green == 1 then table.insert(output_rules[cid], rules.green) end + if black == 1 then table.insert(output_rules[cid], rules.black) end + if white == 1 then table.insert(output_rules[cid], rules.white) end + + if red == 0 then table.insert( input_rules[cid], rules.red) end + if blue == 0 then table.insert( input_rules[cid], rules.blue) end + if yellow == 0 then table.insert( input_rules[cid], rules.yellow) end + if green == 0 then table.insert( input_rules[cid], rules.green) end + if black == 0 then table.insert( input_rules[cid], rules.black) end + if white == 0 then table.insert( input_rules[cid], rules.white) end + + local mesecons = { + effector = { + rules = input_rules[cid], + action_change = function (pos, _, rule_name, new_state) + update_real_port_states(pos, rule_name, new_state) + run(pos, {type=new_state, pin=rule_name}) + end, + }, + receptor = { + state = mesecon.state.on, + rules = output_rules[cid] + } + } + + minetest.register_node(node_name, { + description = "Lua controlled Tube", + drawtype = "nodebox", + tiles = tiles, + paramtype = "light", + groups = groups, + drop = BASENAME.."000000", + sunlight_propagates = true, + selection_box = selection_box, + node_box = node_box, + on_construct = reset_meta, + on_receive_fields = on_receive_fields, + sounds = default.node_sound_wood_defaults(), + mesecons = mesecons, + digiline = digiline, + -- Virtual portstates are the ports that + -- the node shows as powered up (light up). + virtual_portstates = { + red = red == 1, + blue = blue == 1, + yellow = yellow == 1, + green = green == 1, + black = black == 1, + white = white == 1, + }, + after_dig_node = function(pos, node) + mesecon.do_cooldown(pos) + mesecon.receptor_off(pos, output_rules) + pipeworks.after_dig(pos, node) + end, + is_luacontroller = true, + tubelike = 1, + tube = { + connect_sides = {front = 1, back = 1, left = 1, right = 1, top = 1, bottom = 1}, + priority = 50, + can_go = function(pos, node, velocity, stack) + local src = {name = nil} + -- add color of the incoming tube explicitly; referring to rules, in case they change later + for color, rule in pairs(rules) do + if (-velocity.x == rule.x and -velocity.y == rule.y and -velocity.z == rule.z) then + src.name = rule.name + break + end + end + local succ, msg = run(pos, { + type = "item", + pin = src, + itemstring = stack:to_string(), + item = stack:to_table(), + velocity = velocity, + }) + if not succ or type(msg) ~= "string" then + return go_back(velocity) + end + local r = rules[msg] + return r and {r} or go_back(velocity) + end, + }, + after_place_node = pipeworks.after_place, + on_blast = function(pos, intensity) + if not intensity or intensity > 1 + 3^0.5 then + minetest.remove_node(pos) + return {string.format("%s_%s", name, dropname)} + end + minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) + pipeworks.scan_for_tube_objects(pos) + end, + on_blast = function(pos, intensity) + if not intensity or intensity > 1 + 3^0.5 then + minetest.remove_node(pos) + return {string.format("%s_%s", name, dropname)} + end + minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) + pipeworks.scan_for_tube_objects(pos) + end, + }) +end +end +end +end +end +end + +------------------------------------ +-- Overheated Lua controlled Tube -- +------------------------------------ + +local tiles_burnt = table.copy(tiles_base) +tiles_burnt[1] = tiles_burnt[1].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" +tiles_burnt[2] = tiles_burnt[2].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" +tiles_burnt[5] = tiles_burnt[5].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" +tiles_burnt[6] = tiles_burnt[6].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" +tiles_burnt[1] = tiles_burnt[1].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" +tiles_burnt[2] = tiles_burnt[2].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" +tiles_burnt[5] = tiles_burnt[5].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" +tiles_burnt[6] = tiles_burnt[6].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" +tiles_burnt[3] = tiles_burnt[3].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" +tiles_burnt[4] = tiles_burnt[4].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" +tiles_burnt[5] = tiles_burnt[5].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" +tiles_burnt[6] = tiles_burnt[6].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" +tiles_burnt[3] = tiles_burnt[3].."^pipeworks_lua_tube_port_burnt.png" +tiles_burnt[4] = tiles_burnt[4].."^pipeworks_lua_tube_port_burnt.png" +tiles_burnt[5] = tiles_burnt[5].."^pipeworks_lua_tube_port_burnt.png" +tiles_burnt[6] = tiles_burnt[6].."^pipeworks_lua_tube_port_burnt.png" +tiles_burnt[1] = tiles_burnt[1].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" +tiles_burnt[2] = tiles_burnt[2].."^pipeworks_lua_tube_port_burnt.png" +tiles_burnt[3] = tiles_burnt[3].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" +tiles_burnt[4] = tiles_burnt[4].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" +tiles_burnt[1] = tiles_burnt[1].."^pipeworks_lua_tube_port_burnt.png" +tiles_burnt[2] = tiles_burnt[2].."^(pipeworks_lua_tube_port_burnt.png^[transformR180)" +tiles_burnt[3] = tiles_burnt[3].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)" +tiles_burnt[4] = tiles_burnt[4].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)" + +minetest.register_node(BASENAME .. "_burnt", { + drawtype = "nodebox", + tiles = tiles_burnt, + is_burnt = true, + paramtype = "light", + groups = {snappy = 3, tube = 1, tubedevice = 1, not_in_creative_inventory=1}, + drop = BASENAME.."000000", + sunlight_propagates = true, + selection_box = selection_box, + node_box = node_box, + on_construct = reset_meta, + on_receive_fields = on_receive_fields, + sounds = default.node_sound_wood_defaults(), + virtual_portstates = {red = false, blue = false, yellow = false, + green = false, black = false, white = false}, + mesecons = { + effector = { + rules = mesecon.rules.alldirs, + action_change = function(pos, _, rule_name, new_state) + update_real_port_states(pos, rule_name, new_state) + end, + }, + }, + tubelike = 1, + tube = { + connect_sides = {front = 1, back = 1, left = 1, right = 1, top = 1, bottom = 1}, + priority = 50, + }, + after_place_node = pipeworks.after_place, + after_dig_node = pipeworks.after_dig, + on_blast = function(pos, intensity) + if not intensity or intensity > 1 + 3^0.5 then + minetest.remove_node(pos) + return {string.format("%s_%s", name, dropname)} + end + minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) + pipeworks.scan_for_tube_objects(pos) + end, +}) + +------------------------ +-- Craft Registration -- +------------------------ + +minetest.register_craft({ + type = "shapeless", + output = BASENAME.."000000", + recipe = {"pipeworks:mese_tube_000000", "mesecons_luacontroller:luacontroller0000"}, +}) diff --git a/mods/pipeworks/luaentity.lua b/mods/pipeworks/luaentity.lua new file mode 100755 index 0000000..34b6665 --- /dev/null +++ b/mods/pipeworks/luaentity.lua @@ -0,0 +1,374 @@ +local max_entity_id = 1000000000000 -- If you need more, there's a problem with your code + +local luaentity = {} +pipeworks.luaentity = luaentity + +luaentity.registered_entities = {} + +local filename = minetest.get_worldpath().."/luaentities" +local function read_file() + local f = io.open(filename, "r") + if f == nil then return {} end + local t = f:read("*all") + f:close() + if t == "" or t == nil then return {} end + return minetest.deserialize(t) or {} +end + +local function write_file(tbl) + local f = io.open(filename, "w") + f:write(minetest.serialize(tbl)) + f:close() +end + +local function read_entities() + local t = read_file() + for _, entity in pairs(t) do + + local x=entity.start_pos.x + local y=entity.start_pos.y + local z=entity.start_pos.z + + x=math.max(-30912,x) + y=math.max(-30912,y) + z=math.max(-30912,z) + x=math.min(30927,x) + y=math.min(30927,y) + z=math.min(30927,z) + + entity.start_pos.x = x + entity.start_pos.y = y + entity.start_pos.z = z + + setmetatable(entity, luaentity.registered_entities[entity.name]) + end + return t +end + +local function write_entities() + for _, entity in pairs(luaentity.entities) do + setmetatable(entity, nil) + for _, attached in pairs(entity._attached_entities) do + if attached.entity then + attached.entity:remove() + attached.entity = nil + end + end + entity._attached_entities_master = nil + end + write_file(luaentity.entities) +end + +minetest.register_on_shutdown(write_entities) +luaentity.entities_index = 0 + +local function get_blockpos(pos) + return {x = math.floor(pos.x / 16), + y = math.floor(pos.y / 16), + z = math.floor(pos.z / 16)} +end + +local active_blocks = {} -- These only contain active blocks near players (i.e., not forceloaded ones) + +local move_entities_globalstep_part1 = function(dtime) + local active_block_range = tonumber(minetest.settings:get("active_block_range")) or 2 + local new_active_blocks = {} + for _, player in ipairs(minetest.get_connected_players()) do + local blockpos = get_blockpos(player:getpos()) + local minp = vector.subtract(blockpos, active_block_range) + local maxp = vector.add(blockpos, active_block_range) + + for x = minp.x, maxp.x do + for y = minp.y, maxp.y do + for z = minp.z, maxp.z do + local pos = {x = x, y = y, z = z} + new_active_blocks[minetest.hash_node_position(pos)] = pos + end + end + end + end + active_blocks = new_active_blocks + -- todo: callbacks on block load/unload +end + +local function is_active(pos) + return active_blocks[minetest.hash_node_position(get_blockpos(pos))] ~= nil +end + +local entitydef_default = { + _attach = function(self, attached, attach_to) + local attached_def = self._attached_entities[attached] + local attach_to_def = self._attached_entities[attach_to] + attached_def.entity:set_attach( + attach_to_def.entity, "", + vector.subtract(attached_def.offset, attach_to_def.offset), -- todo: Does not work because is object space + vector.new(0, 0, 0) + ) + end, + _set_master = function(self, index) + self._attached_entities_master = index + if not index then + return + end + local def = self._attached_entities[index] + if not def.entity then + return + end + def.entity:setpos(vector.add(self._pos, def.offset)) + def.entity:setvelocity(self._velocity) + def.entity:setacceleration(self._acceleration) + end, + _attach_all = function(self) + local master = self._attached_entities_master + if not master then + return + end + for id, entity in pairs(self._attached_entities) do + if id ~= master and entity.entity then + self:_attach(id, master) + end + end + end, + _detach_all = function(self) + local master = self._attached_entities_master + for id, entity in pairs(self._attached_entities) do + if id ~= master and entity.entity then + entity.entity:set_detach() + end + end + end, + _add_attached = function(self, index) + local entity = self._attached_entities[index] + if entity.entity then + return + end + local entity_pos = vector.add(self._pos, entity.offset) + if not is_active(entity_pos) then + return + end + local ent = minetest.add_entity(entity_pos, entity.name):get_luaentity() + ent:from_data(entity.data) + ent.parent_id = self._id + ent.attached_id = index + entity.entity = ent.object + local master = self._attached_entities_master + if master then + self:_attach(index, master) + else + self:_set_master(index) + end + end, + _remove_attached = function(self, index) + local master = self._attached_entities_master + local entity = self._attached_entities[index] + local ent = entity and entity.entity + if entity then entity.entity = nil end + if index == master then + self:_detach_all() + local newmaster + for id, attached in pairs(self._attached_entities) do + if id ~= master and attached.entity then + newmaster = id + break + end + end + self:_set_master(newmaster) + self:_attach_all() + elseif master and ent then + ent:set_detach() + end + if ent then + ent:remove() + end + end, + _add_loaded = function(self) + for id, _ in pairs(self._attached_entities) do + self:_add_attached(id) + end + end, + getid = function(self) + return self._id + end, + getpos = function(self) + return vector.new(self._pos) + end, + setpos = function(self, pos) + self._pos = vector.new(pos) + --for _, entity in pairs(self._attached_entities) do + -- if entity.entity then + -- entity.entity:setpos(vector.add(self._pos, entity.offset)) + -- end + --end + local master = self._attached_entities_master + if master then + local master_def = self._attached_entities[master] + master_def.entity:setpos(vector.add(self._pos, master_def.offset)) + end + end, + getvelocity = function(self) + return vector.new(self._velocity) + end, + setvelocity = function(self, velocity) + self._velocity = vector.new(velocity) + local master = self._attached_entities_master + if master then + self._attached_entities[master].entity:setvelocity(self._velocity) + end + end, + getacceleration = function(self) + return vector.new(self._acceleration) + end, + setacceleration = function(self, acceleration) + self._acceleration = vector.new(acceleration) + local master = self._attached_entities_master + if master then + self._attached_entities[master].entity:setacceleration(self._acceleration) + end + end, + remove = function(self) + self:_detach_all() + for _, entity in pairs(self._attached_entities) do + if entity.entity then + entity.entity:remove() + end + end + luaentity.entities[self._id] = nil + end, + add_attached_entity = function(self, name, data, offset) + local index = #self._attached_entities + 1 + self._attached_entities[index] = { + name = name, + data = data, + offset = vector.new(offset), + } + self:_add_attached(index) + return index + end, + remove_attached_entity = function(self, index) + self:_remove_attached(index) + self._attached_entities[index] = nil + end, +} + +function luaentity.register_entity(name, prototype) + -- name = check_modname_prefix(name) + prototype.name = name + setmetatable(prototype, {__index = entitydef_default}) + prototype.__index = prototype -- Make it possible to use it as metatable + luaentity.registered_entities[name] = prototype +end + +-- function luaentity.get_entity_definition(entity) +-- return luaentity.registered_entities[entity.name] +-- end + +function luaentity.add_entity(pos, name) + if not luaentity.entities then + minetest.after(0, luaentity.add_entity, vector.new(pos), name) + return + end + local index = luaentity.entities_index + while luaentity.entities[index] do + index = index + 1 + if index >= max_entity_id then + index = 0 + end + end + luaentity.entities_index = index + + local entity = { + name = name, + _id = index, + _pos = vector.new(pos), + _velocity = {x = 0, y = 0, z = 0}, + _acceleration = {x = 0, y = 0, z = 0}, + _attached_entities = {}, + } + + local prototype = luaentity.registered_entities[name] + setmetatable(entity, prototype) -- Default to prototype for other methods + luaentity.entities[index] = entity + + if entity.on_activate then + entity:on_activate() + end + return entity +end + +-- todo: check if remove in get_staticdata works +function luaentity.get_staticdata(self) + local parent = luaentity.entities[self.parent_id] + if parent and parent._remove_attached then + parent:_remove_attached(self.attached_id) + end + return "toremove" +end + +function luaentity.on_activate(self, staticdata) + if staticdata == "toremove" then + self.object:remove() + end +end + +function luaentity.get_objects_inside_radius(pos, radius) + local objects = {} + local index = 1 + for id, entity in pairs(luaentity.entities) do + if vector.distance(pos, entity:getpos()) <= radius then + objects[index] = entity + index = index + 1 + end + end +end + +local move_entities_globalstep_part2 = function(dtime) + if not luaentity.entities then + luaentity.entities = read_entities() + end + for id, entity in pairs(luaentity.entities) do + local master = entity._attached_entities_master + local master_def = master and entity._attached_entities[master] + local master_entity = master_def and master_def.entity + local master_entity_pos = master_entity and master_entity:getpos() + if master_entity_pos then + entity._pos = vector.subtract(master_entity_pos, master_def.offset) + entity._velocity = master_entity:getvelocity() + entity._acceleration = master_entity:getacceleration() + else + entity._pos = vector.add(vector.add( + entity._pos, + vector.multiply(entity._velocity, dtime)), + vector.multiply(entity._acceleration, 0.5 * dtime * dtime)) + entity._velocity = vector.add( + entity._velocity, + vector.multiply(entity._acceleration, dtime)) + end + if master and not master_entity_pos then -- The entity has somehow been cleared + if pipeworks.delete_item_on_clearobject then + entity:remove() + else + entity:_remove_attached(master) + entity:_add_loaded() + if entity.on_step then + entity:on_step(dtime) + end + end + else + entity:_add_loaded() + if entity.on_step then + entity:on_step(dtime) + end + end + end +end + +local handle_active_blocks_timer = 0.1 + +minetest.register_globalstep(function(dtime) + handle_active_blocks_timer = handle_active_blocks_timer + dtime + if dtime < 0.2 or handle_active_blocks_timer >= (dtime * 3) then + handle_active_blocks_timer = 0.1 + move_entities_globalstep_part1(dtime) + move_entities_globalstep_part2(dtime) + end +end) diff --git a/mods/ITEMS/pipeworks/mod.conf b/mods/pipeworks/mod.conf old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/mod.conf rename to mods/pipeworks/mod.conf diff --git a/mods/ITEMS/pipeworks/models.lua b/mods/pipeworks/models.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/models.lua rename to mods/pipeworks/models.lua diff --git a/mods/pipeworks/models/pipeworks_entry_panel.obj b/mods/pipeworks/models/pipeworks_entry_panel.obj new file mode 100755 index 0000000..055a28d --- /dev/null +++ b/mods/pipeworks/models/pipeworks_entry_panel.obj @@ -0,0 +1,2482 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-entry-panel.blend' +# www.blender.org +o Cube.001 +v 0.038455 0.126770 0.468750 +v 0.012985 0.131837 0.468750 +v -0.012984 0.131837 0.468750 +v -0.038455 0.126770 0.468750 +v -0.062448 0.116832 0.468750 +v -0.084041 0.102404 0.468750 +v -0.102404 0.084041 0.468750 +v -0.116832 0.062448 0.468750 +v -0.126770 0.038455 0.468750 +v -0.131837 0.012985 0.468750 +v -0.131837 -0.012985 0.468750 +v -0.116832 -0.062448 0.468750 +v -0.102404 -0.084041 0.468750 +v -0.084041 -0.102404 0.468750 +v -0.062448 -0.116832 0.468750 +v -0.038455 -0.126770 0.468750 +v -0.012985 -0.131836 0.468750 +v 0.012985 -0.131836 0.468750 +v 0.038455 -0.126770 0.468750 +v 0.062448 -0.116832 0.468750 +v 0.102404 -0.084041 0.468750 +v 0.084041 -0.102404 0.468750 +v 0.116832 -0.062448 0.468750 +v 0.126770 -0.038455 0.468750 +v 0.131836 0.012985 0.468750 +v 0.116832 0.062448 0.468750 +v 0.126770 0.038455 0.468750 +v 0.102404 0.084041 0.468750 +v 0.084041 0.102404 0.468750 +v 0.062448 0.116832 0.468750 +v -0.126770 -0.038455 0.468750 +v 0.131836 -0.012985 0.468750 +v 0.059210 0.110774 0.437501 +v 0.036461 0.120197 0.437501 +v 0.012312 0.125000 0.437501 +v -0.012311 0.125001 0.437501 +v -0.036461 0.120197 0.437501 +v -0.059210 0.110774 0.437501 +v -0.079683 0.097094 0.437501 +v -0.097094 0.079683 0.437501 +v -0.110774 0.059210 0.437501 +v -0.120197 0.036461 0.437501 +v -0.125001 0.012312 0.437501 +v -0.125000 -0.012311 0.437501 +v -0.120197 -0.036461 0.437501 +v -0.110774 -0.059210 0.437501 +v -0.097094 -0.079683 0.437501 +v -0.079683 -0.097094 0.437501 +v -0.059210 -0.110774 0.437501 +v -0.036461 -0.120197 0.437501 +v -0.012311 -0.125000 0.437501 +v 0.012311 -0.125000 0.437501 +v 0.036461 -0.120197 0.437501 +v 0.059210 -0.110774 0.437501 +v 0.079683 -0.097094 0.437501 +v 0.097094 -0.079683 0.437501 +v 0.110774 -0.059210 0.437501 +v 0.120197 -0.036461 0.437501 +v 0.125000 -0.012311 0.437501 +v 0.125000 0.012311 0.437501 +v 0.120197 0.036461 0.437501 +v 0.110774 0.059210 0.437501 +v 0.097094 0.079683 0.437501 +v 0.079683 0.097094 0.437501 +v -0.120197 0.036461 -0.437501 +v -0.125000 0.012312 -0.437501 +v -0.125000 -0.012311 -0.437501 +v -0.120197 -0.036461 -0.437501 +v -0.110774 0.059210 -0.437501 +v -0.131836 0.012985 -0.468750 +v -0.126770 0.038455 -0.468750 +v -0.131836 -0.012985 -0.468750 +v -0.110774 -0.059210 -0.437501 +v -0.126770 -0.038455 -0.468750 +v -0.097094 0.079683 -0.437501 +v -0.116832 0.062448 -0.468750 +v -0.097094 -0.079683 -0.437501 +v -0.116832 -0.062448 -0.468750 +v -0.079683 0.097094 -0.437501 +v -0.102404 0.084041 -0.468750 +v -0.079683 -0.097094 -0.437501 +v -0.102404 -0.084041 -0.468750 +v -0.059210 0.110774 -0.437501 +v -0.084041 0.102404 -0.468750 +v -0.059210 -0.110774 -0.437501 +v -0.084041 -0.102404 -0.468750 +v -0.036461 0.120197 -0.437501 +v -0.062448 0.116832 -0.468750 +v -0.036461 -0.120197 -0.437501 +v -0.062448 -0.116832 -0.468750 +v -0.012311 0.125000 -0.437501 +v -0.038455 0.126770 -0.468750 +v -0.012311 -0.125001 -0.437501 +v -0.038455 -0.126770 -0.468750 +v 0.012312 0.125000 -0.437501 +v -0.012985 0.131836 -0.468750 +v 0.012312 -0.125001 -0.437501 +v -0.012985 -0.131837 -0.468750 +v 0.036461 0.120197 -0.437501 +v 0.012985 0.131836 -0.468750 +v 0.036461 -0.120197 -0.437501 +v 0.012985 -0.131837 -0.468750 +v 0.059210 0.110774 -0.437501 +v 0.038455 0.126770 -0.468750 +v 0.059210 -0.110774 -0.437501 +v 0.038455 -0.126770 -0.468750 +v 0.079683 0.097094 -0.437501 +v 0.062448 0.116832 -0.468750 +v 0.079683 -0.097094 -0.437501 +v 0.062448 -0.116832 -0.468750 +v 0.097094 0.079683 -0.437501 +v 0.084041 0.102404 -0.468750 +v 0.097094 -0.079683 -0.437501 +v 0.084041 -0.102404 -0.468750 +v 0.110774 0.059210 -0.437501 +v 0.102404 0.084041 -0.468750 +v 0.110774 -0.059210 -0.437501 +v 0.102404 -0.084041 -0.468750 +v 0.120197 0.036461 -0.437501 +v 0.116832 0.062448 -0.468750 +v 0.120197 -0.036461 -0.437501 +v 0.116832 -0.062448 -0.468750 +v 0.125001 0.012311 -0.437501 +v 0.126770 0.038455 -0.468750 +v 0.125001 -0.012311 -0.437501 +v 0.126770 -0.038455 -0.468750 +v 0.131837 0.012985 -0.468750 +v 0.131837 -0.012985 -0.468750 +v 0.063644 0.130078 -0.460912 +v 0.063644 0.130078 -0.468749 +v 0.062467 0.139022 -0.468749 +v 0.062467 0.139022 -0.460912 +v 0.054133 0.142474 -0.460912 +v 0.046976 0.136982 -0.460912 +v 0.048153 0.128039 -0.460912 +v 0.056487 0.124587 -0.460912 +v 0.056487 0.124587 -0.468749 +v 0.054133 0.142474 -0.468749 +v 0.046976 0.136982 -0.468749 +v 0.048153 0.128039 -0.468749 +v 0.046976 0.136982 0.460914 +v 0.046976 0.136982 0.468751 +v 0.054133 0.142474 0.468751 +v 0.054133 0.142474 0.460914 +v 0.062467 0.139022 0.460914 +v 0.063644 0.130078 0.460914 +v 0.056487 0.124587 0.460914 +v 0.048153 0.128039 0.460914 +v 0.048153 0.128039 0.468751 +v 0.062467 0.139022 0.468751 +v 0.063644 0.130078 0.468751 +v 0.056487 0.124587 0.468751 +v 0.136982 0.046976 -0.460912 +v 0.136982 0.046976 -0.468749 +v 0.142474 0.054133 -0.468749 +v 0.142474 0.054133 -0.460912 +v 0.139022 0.062467 -0.460912 +v 0.130078 0.063644 -0.460912 +v 0.124587 0.056488 -0.460912 +v 0.128039 0.048154 -0.460912 +v 0.128039 0.048154 -0.468749 +v 0.139022 0.062467 -0.468749 +v 0.130078 0.063644 -0.468749 +v 0.124587 0.056488 -0.468749 +v 0.130078 0.063644 0.460914 +v 0.130078 0.063644 0.468751 +v 0.139022 0.062467 0.468751 +v 0.139022 0.062467 0.460914 +v 0.142474 0.054133 0.460914 +v 0.136982 0.046976 0.460914 +v 0.128039 0.048153 0.460914 +v 0.124587 0.056487 0.460914 +v 0.124587 0.056487 0.468751 +v 0.142474 0.054133 0.468751 +v 0.136982 0.046976 0.468751 +v 0.128039 0.048153 0.468751 +v 0.130078 -0.063644 -0.460912 +v 0.130078 -0.063644 -0.468749 +v 0.139022 -0.062467 -0.468749 +v 0.139022 -0.062467 -0.460912 +v 0.142474 -0.054132 -0.460912 +v 0.136982 -0.046976 -0.460912 +v 0.128039 -0.048153 -0.460912 +v 0.124587 -0.056487 -0.460912 +v 0.124587 -0.056487 -0.468749 +v 0.142474 -0.054132 -0.468749 +v 0.136982 -0.046976 -0.468749 +v 0.128039 -0.048153 -0.468749 +v 0.136982 -0.046976 0.460914 +v 0.136982 -0.046976 0.468751 +v 0.142474 -0.054133 0.468751 +v 0.142474 -0.054133 0.460914 +v 0.139022 -0.062467 0.460914 +v 0.130078 -0.063644 0.460914 +v 0.124587 -0.056488 0.460914 +v 0.128039 -0.048153 0.460914 +v 0.128039 -0.048153 0.468751 +v 0.139022 -0.062467 0.468751 +v 0.130078 -0.063644 0.468751 +v 0.124587 -0.056488 0.468751 +v 0.046976 -0.136982 -0.460912 +v 0.046976 -0.136982 -0.468749 +v 0.054133 -0.142474 -0.468749 +v 0.054133 -0.142474 -0.460912 +v 0.062467 -0.139022 -0.460912 +v 0.063644 -0.130078 -0.460912 +v 0.056488 -0.124587 -0.460912 +v 0.048154 -0.128039 -0.460912 +v 0.048154 -0.128039 -0.468749 +v 0.062467 -0.139022 -0.468749 +v 0.063644 -0.130078 -0.468749 +v 0.056488 -0.124587 -0.468749 +v 0.063644 -0.130078 0.460914 +v 0.063644 -0.130078 0.468751 +v 0.062467 -0.139022 0.468751 +v 0.062467 -0.139022 0.460914 +v 0.054133 -0.142474 0.460914 +v 0.046976 -0.136982 0.460914 +v 0.048153 -0.128039 0.460914 +v 0.056487 -0.124587 0.460914 +v 0.056487 -0.124587 0.468751 +v 0.054133 -0.142474 0.468751 +v 0.046976 -0.136982 0.468751 +v 0.048153 -0.128039 0.468751 +v -0.063644 -0.130078 -0.460912 +v -0.063644 -0.130078 -0.468749 +v -0.062466 -0.139022 -0.468749 +v -0.062467 -0.139022 -0.460912 +v -0.054132 -0.142474 -0.460912 +v -0.046976 -0.136982 -0.460912 +v -0.048153 -0.128039 -0.460912 +v -0.056487 -0.124587 -0.460912 +v -0.056487 -0.124587 -0.468749 +v -0.054132 -0.142474 -0.468749 +v -0.046976 -0.136982 -0.468749 +v -0.048153 -0.128039 -0.468749 +v -0.046976 -0.136982 0.460914 +v -0.046976 -0.136982 0.468751 +v -0.054133 -0.142474 0.468751 +v -0.054133 -0.142474 0.460914 +v -0.062467 -0.139022 0.460914 +v -0.063644 -0.130078 0.460914 +v -0.056488 -0.124587 0.460914 +v -0.048153 -0.128039 0.460914 +v -0.048153 -0.128039 0.468751 +v -0.062467 -0.139022 0.468751 +v -0.063644 -0.130078 0.468751 +v -0.056488 -0.124587 0.468751 +v -0.136982 -0.046976 -0.460912 +v -0.136982 -0.046976 -0.468749 +v -0.142474 -0.054133 -0.468749 +v -0.142474 -0.054133 -0.460912 +v -0.139022 -0.062467 -0.460912 +v -0.130078 -0.063644 -0.460912 +v -0.124587 -0.056488 -0.460912 +v -0.128039 -0.048153 -0.460912 +v -0.128039 -0.048153 -0.468749 +v -0.139022 -0.062467 -0.468749 +v -0.130078 -0.063644 -0.468749 +v -0.124587 -0.056488 -0.468749 +v -0.130078 -0.063644 0.460914 +v -0.130078 -0.063644 0.468751 +v -0.139022 -0.062467 0.468751 +v -0.139022 -0.062467 0.460914 +v -0.142474 -0.054132 0.460914 +v -0.136982 -0.046976 0.460914 +v -0.128039 -0.048153 0.460914 +v -0.124587 -0.056487 0.460914 +v -0.124587 -0.056487 0.468751 +v -0.142474 -0.054132 0.468751 +v -0.136982 -0.046976 0.468751 +v -0.128039 -0.048153 0.468751 +v -0.130078 0.063644 -0.460912 +v -0.130078 0.063644 -0.468749 +v -0.139022 0.062467 -0.468749 +v -0.139022 0.062467 -0.460912 +v -0.142474 0.054132 -0.460912 +v -0.136982 0.046976 -0.460912 +v -0.128039 0.048153 -0.460912 +v -0.124587 0.056487 -0.460912 +v -0.124587 0.056487 -0.468749 +v -0.142474 0.054132 -0.468749 +v -0.136982 0.046976 -0.468749 +v -0.128039 0.048153 -0.468749 +v -0.136982 0.046976 0.460914 +v -0.136982 0.046976 0.468751 +v -0.142474 0.054133 0.468751 +v -0.142474 0.054133 0.460914 +v -0.139022 0.062467 0.460914 +v -0.130078 0.063644 0.460914 +v -0.124587 0.056487 0.460914 +v -0.128039 0.048153 0.460914 +v -0.128039 0.048153 0.468751 +v -0.139022 0.062467 0.468751 +v -0.130078 0.063644 0.468751 +v -0.124587 0.056487 0.468751 +v -0.046976 0.136982 -0.460912 +v -0.046976 0.136982 -0.468749 +v -0.054133 0.142474 -0.468749 +v -0.054133 0.142474 -0.460912 +v -0.062467 0.139022 -0.460912 +v -0.063644 0.130078 -0.460912 +v -0.056488 0.124587 -0.460912 +v -0.048153 0.128039 -0.460912 +v -0.048153 0.128039 -0.468749 +v -0.062467 0.139022 -0.468749 +v -0.063644 0.130078 -0.468749 +v -0.056488 0.124587 -0.468749 +v -0.063644 0.130078 0.460914 +v -0.063644 0.130078 0.468751 +v -0.062467 0.139022 0.468751 +v -0.062467 0.139022 0.460914 +v -0.054133 0.142474 0.460914 +v -0.046976 0.136982 0.460914 +v -0.048153 0.128039 0.460914 +v -0.056487 0.124587 0.460914 +v -0.056487 0.124587 0.468751 +v -0.054133 0.142474 0.468751 +v -0.046976 0.136982 0.468751 +v -0.048153 0.128039 0.468751 +v -0.121367 0.099603 0.500000 +v -0.138467 0.074012 0.500000 +v -0.150245 0.045577 0.500000 +v -0.156250 0.015390 0.500000 +v -0.156250 -0.015389 0.500000 +v -0.150245 -0.045576 0.500000 +v -0.138467 -0.074012 0.500000 +v -0.121367 -0.099603 0.500000 +v -0.099603 -0.121367 0.500000 +v -0.045576 -0.150245 0.500000 +v 0.015389 -0.156250 0.500000 +v 0.045576 -0.150245 0.500000 +v 0.099603 -0.121367 0.500000 +v 0.121367 -0.099603 0.500000 +v 0.138467 -0.074012 0.500000 +v 0.150245 -0.045576 0.500000 +v 0.156250 -0.015389 0.500000 +v 0.150245 0.045576 0.500000 +v 0.138467 0.074012 0.500000 +v 0.121367 0.099603 0.500000 +v 0.074012 0.138467 0.500000 +v 0.015389 0.156250 0.500000 +v -0.015389 0.156250 0.500000 +v -0.045576 0.150245 0.500000 +v -0.074012 0.138467 0.500000 +v -0.099603 0.121367 0.500000 +v -0.074012 -0.138466 0.500000 +v -0.015389 -0.156250 0.500000 +v 0.074012 -0.138467 0.500000 +v 0.156250 0.015389 0.500000 +v 0.099603 0.121367 0.500000 +v 0.045576 0.150245 0.500000 +v -0.121367 0.099603 0.468750 +v -0.099603 0.121367 0.468750 +v -0.138467 0.074012 0.468750 +v -0.150245 0.045577 0.468750 +v -0.156250 0.015390 0.468750 +v -0.156250 -0.015389 0.468750 +v -0.150245 -0.045576 0.468750 +v -0.138467 -0.074012 0.468750 +v -0.121367 -0.099603 0.468750 +v -0.099603 -0.121367 0.468750 +v -0.074012 -0.138466 0.468750 +v -0.045576 -0.150245 0.468750 +v -0.015389 -0.156250 0.468750 +v 0.015389 -0.156250 0.468750 +v 0.045576 -0.150245 0.468750 +v 0.074012 -0.138467 0.468750 +v 0.099603 -0.121367 0.468750 +v 0.121367 -0.099603 0.468750 +v 0.138467 -0.074012 0.468750 +v 0.150245 -0.045576 0.468750 +v 0.156250 -0.015389 0.468750 +v 0.156250 0.015389 0.468750 +v 0.138467 0.074012 0.468750 +v 0.150245 0.045576 0.468750 +v 0.121367 0.099603 0.468750 +v 0.099603 0.121367 0.468750 +v 0.074012 0.138467 0.468750 +v 0.045576 0.150245 0.468750 +v -0.015389 0.156250 0.468750 +v 0.015389 0.156250 0.468750 +v -0.045576 0.150245 0.468750 +v -0.074012 0.138467 0.468750 +v -0.074012 -0.138466 -0.468750 +v -0.045576 -0.150245 -0.468750 +v -0.015389 -0.156250 -0.468750 +v -0.099603 -0.121367 -0.468750 +v 0.015389 -0.156250 -0.468750 +v -0.138467 -0.074012 -0.468750 +v -0.121367 -0.099603 -0.468750 +v -0.099603 -0.121367 -0.500000 +v -0.074012 -0.138467 -0.500000 +v -0.045576 -0.150245 -0.500000 +v -0.015389 -0.156250 -0.500000 +v 0.015389 -0.156250 -0.500000 +v -0.150245 -0.045576 -0.468750 +v -0.121367 -0.099603 -0.500000 +v 0.045576 -0.150245 -0.468750 +v 0.045576 -0.150245 -0.500000 +v -0.156250 -0.015389 -0.468750 +v -0.150245 -0.045576 -0.500000 +v -0.138467 -0.074012 -0.500000 +v 0.074012 -0.138467 -0.468750 +v 0.074012 -0.138467 -0.500000 +v -0.156250 0.015389 -0.468750 +v -0.156250 -0.015389 -0.500000 +v 0.099603 -0.121367 -0.468750 +v 0.099603 -0.121367 -0.500000 +v -0.150245 0.045576 -0.468750 +v -0.156250 0.015389 -0.500000 +v 0.121367 -0.099603 -0.468750 +v 0.121367 -0.099603 -0.500000 +v -0.138467 0.074012 -0.468750 +v -0.150245 0.045576 -0.500000 +v 0.150245 -0.045576 -0.468750 +v 0.138467 -0.074012 -0.468750 +v 0.138467 -0.074012 -0.500000 +v -0.121367 0.099603 -0.468750 +v -0.138467 0.074012 -0.500000 +v 0.156250 -0.015389 -0.468750 +v 0.150245 -0.045576 -0.500000 +v -0.099603 0.121367 -0.468750 +v -0.121367 0.099603 -0.500000 +v 0.156250 0.015389 -0.468750 +v 0.156250 -0.015389 -0.500000 +v -0.074012 0.138466 -0.468750 +v -0.099603 0.121367 -0.500000 +v 0.150245 0.045576 -0.468750 +v 0.156250 0.015389 -0.500000 +v -0.045576 0.150245 -0.468750 +v -0.074012 0.138466 -0.500000 +v 0.138467 0.074012 -0.468750 +v 0.150245 0.045576 -0.500000 +v -0.015389 0.156249 -0.468750 +v -0.045576 0.150245 -0.500000 +v 0.015389 0.156250 -0.500000 +v 0.121367 0.099603 -0.468750 +v 0.138467 0.074012 -0.500000 +v 0.015389 0.156250 -0.468750 +v -0.015389 0.156250 -0.500000 +v 0.074012 0.138467 -0.500000 +v 0.045576 0.150245 -0.500000 +v 0.099603 0.121367 -0.500000 +v 0.121367 0.099603 -0.500000 +v 0.045576 0.150245 -0.468750 +v 0.099603 0.121367 -0.468750 +v 0.074012 0.138467 -0.468750 +v 0.108578 0.095821 -0.460912 +v 0.108578 0.095821 -0.468749 +v 0.110913 0.104534 -0.468749 +v 0.110913 0.104534 -0.460912 +v 0.104534 0.110913 -0.460912 +v 0.095821 0.108578 -0.460912 +v 0.093486 0.099865 -0.460912 +v 0.099865 0.093486 -0.460912 +v 0.099865 0.093486 -0.468749 +v 0.104534 0.110913 -0.468749 +v 0.095821 0.108578 -0.468749 +v 0.093486 0.099865 -0.468749 +v 0.095821 0.108578 0.460914 +v 0.095821 0.108578 0.468751 +v 0.104534 0.110913 0.468751 +v 0.104534 0.110913 0.460914 +v 0.110913 0.104534 0.460914 +v 0.108578 0.095821 0.460914 +v 0.099865 0.093486 0.460914 +v 0.093486 0.099865 0.460914 +v 0.093486 0.099865 0.468751 +v 0.110913 0.104534 0.468751 +v 0.108578 0.095821 0.468751 +v 0.099865 0.093486 0.468751 +v 0.144532 -0.009021 -0.460912 +v 0.144532 -0.009021 -0.468749 +v 0.152344 -0.004510 -0.468749 +v 0.152344 -0.004510 -0.460912 +v 0.152344 0.004510 -0.460912 +v 0.144532 0.009021 -0.460912 +v 0.136720 0.004510 -0.460912 +v 0.136720 -0.004510 -0.460912 +v 0.136720 -0.004510 -0.468749 +v 0.152344 0.004510 -0.468749 +v 0.144532 0.009021 -0.468749 +v 0.136720 0.004510 -0.468749 +v 0.144532 0.009021 0.460914 +v 0.144532 0.009021 0.468751 +v 0.152344 0.004510 0.468751 +v 0.152344 0.004510 0.460914 +v 0.152344 -0.004510 0.460914 +v 0.144532 -0.009021 0.460914 +v 0.136720 -0.004510 0.460914 +v 0.136720 0.004510 0.460914 +v 0.136720 0.004510 0.468751 +v 0.152344 -0.004510 0.468751 +v 0.144532 -0.009021 0.468751 +v 0.136720 -0.004510 0.468751 +v 0.095821 -0.108578 -0.460912 +v 0.095821 -0.108578 -0.468749 +v 0.104534 -0.110913 -0.468749 +v 0.104534 -0.110913 -0.460912 +v 0.110913 -0.104534 -0.460912 +v 0.108578 -0.095821 -0.460912 +v 0.099865 -0.093486 -0.460912 +v 0.093486 -0.099865 -0.460912 +v 0.093486 -0.099865 -0.468749 +v 0.110913 -0.104534 -0.468749 +v 0.108578 -0.095821 -0.468749 +v 0.099865 -0.093486 -0.468749 +v 0.108578 -0.095821 0.460914 +v 0.108578 -0.095821 0.468751 +v 0.110913 -0.104534 0.468751 +v 0.110913 -0.104534 0.460914 +v 0.104534 -0.110913 0.460914 +v 0.095821 -0.108578 0.460914 +v 0.093486 -0.099865 0.460914 +v 0.099865 -0.093486 0.460914 +v 0.099865 -0.093486 0.468751 +v 0.104534 -0.110913 0.468751 +v 0.095821 -0.108578 0.468751 +v 0.093486 -0.099865 0.468751 +v -0.009021 -0.144532 -0.460912 +v -0.009021 -0.144532 -0.468749 +v -0.004510 -0.152344 -0.468749 +v -0.004510 -0.152344 -0.460912 +v 0.004511 -0.152344 -0.460912 +v 0.009021 -0.144532 -0.460912 +v 0.004510 -0.136720 -0.460912 +v -0.004510 -0.136720 -0.460912 +v -0.004510 -0.136720 -0.468749 +v 0.004511 -0.152344 -0.468749 +v 0.009021 -0.144532 -0.468749 +v 0.004511 -0.136720 -0.468749 +v 0.009021 -0.144532 0.460914 +v 0.009021 -0.144532 0.468751 +v 0.004510 -0.152344 0.468751 +v 0.004510 -0.152344 0.460914 +v -0.004510 -0.152344 0.460914 +v -0.009021 -0.144532 0.460914 +v -0.004510 -0.136720 0.460914 +v 0.004510 -0.136720 0.460914 +v 0.004510 -0.136720 0.468751 +v -0.004510 -0.152344 0.468751 +v -0.009021 -0.144532 0.468751 +v -0.004510 -0.136720 0.468751 +v -0.108578 -0.095821 -0.460912 +v -0.108578 -0.095821 -0.468749 +v -0.110913 -0.104534 -0.468749 +v -0.110913 -0.104534 -0.460912 +v -0.104534 -0.110913 -0.460912 +v -0.095821 -0.108578 -0.460912 +v -0.093486 -0.099865 -0.460912 +v -0.099865 -0.093486 -0.460912 +v -0.099865 -0.093486 -0.468749 +v -0.104534 -0.110913 -0.468749 +v -0.095821 -0.108578 -0.468749 +v -0.093486 -0.099865 -0.468749 +v -0.095821 -0.108578 0.460914 +v -0.095821 -0.108578 0.468751 +v -0.104534 -0.110913 0.468751 +v -0.104534 -0.110913 0.460914 +v -0.110913 -0.104534 0.460914 +v -0.108578 -0.095821 0.460914 +v -0.099865 -0.093486 0.460914 +v -0.093486 -0.099865 0.460914 +v -0.093486 -0.099865 0.468751 +v -0.110913 -0.104534 0.468751 +v -0.108578 -0.095821 0.468751 +v -0.099865 -0.093486 0.468751 +v -0.144532 0.009021 -0.460912 +v -0.144532 0.009021 -0.468749 +v -0.152344 0.004510 -0.468749 +v -0.152344 0.004510 -0.460912 +v -0.152344 -0.004510 -0.460912 +v -0.144532 -0.009021 -0.460912 +v -0.136720 -0.004510 -0.460912 +v -0.136720 0.004510 -0.460912 +v -0.136720 0.004510 -0.468749 +v -0.152344 -0.004510 -0.468749 +v -0.144532 -0.009021 -0.468749 +v -0.136720 -0.004510 -0.468749 +v -0.144532 -0.009021 0.460914 +v -0.144532 -0.009021 0.468751 +v -0.152344 -0.004510 0.468751 +v -0.152344 -0.004510 0.460914 +v -0.152344 0.004510 0.460914 +v -0.144532 0.009021 0.460914 +v -0.136720 0.004510 0.460914 +v -0.136720 -0.004510 0.460914 +v -0.136720 -0.004510 0.468751 +v -0.152344 0.004510 0.468751 +v -0.144532 0.009021 0.468751 +v -0.136720 0.004510 0.468751 +v -0.095821 0.108578 -0.460912 +v -0.095821 0.108578 -0.468749 +v -0.104534 0.110913 -0.468749 +v -0.104534 0.110913 -0.460912 +v -0.110913 0.104534 -0.460912 +v -0.108578 0.095821 -0.460912 +v -0.099865 0.093486 -0.460912 +v -0.093486 0.099865 -0.460912 +v -0.093486 0.099865 -0.468749 +v -0.110913 0.104534 -0.468749 +v -0.108578 0.095821 -0.468749 +v -0.099865 0.093486 -0.468749 +v -0.108578 0.095821 0.460914 +v -0.108578 0.095821 0.468751 +v -0.110913 0.104534 0.468751 +v -0.110913 0.104534 0.460914 +v -0.104534 0.110913 0.460914 +v -0.095821 0.108578 0.460914 +v -0.093486 0.099865 0.460914 +v -0.099865 0.093486 0.460914 +v -0.099865 0.093486 0.468751 +v -0.104534 0.110913 0.468751 +v -0.095821 0.108578 0.468751 +v -0.093486 0.099865 0.468751 +v 0.009021 0.144532 -0.460912 +v 0.009021 0.144532 -0.468749 +v 0.004510 0.152344 -0.468749 +v 0.004510 0.152344 -0.460912 +v -0.004510 0.152344 -0.460912 +v -0.009021 0.144532 -0.460912 +v -0.004510 0.136720 -0.460912 +v 0.004510 0.136720 -0.460912 +v 0.004510 0.136720 -0.468749 +v -0.004510 0.152344 -0.468749 +v -0.009021 0.144532 -0.468749 +v -0.004510 0.136720 -0.468749 +v -0.009021 0.144532 0.460914 +v -0.009021 0.144532 0.468751 +v -0.004510 0.152344 0.468751 +v -0.004510 0.152344 0.460914 +v 0.004510 0.152344 0.460914 +v 0.009021 0.144532 0.460914 +v 0.004510 0.136720 0.460914 +v -0.004510 0.136720 0.460914 +v -0.004510 0.136720 0.468751 +v 0.004510 0.152344 0.468751 +v 0.009021 0.144532 0.468751 +v 0.004510 0.136720 0.468751 +v -0.473864 -0.473864 -0.062500 +v -0.500000 -0.500000 -0.036364 +v 0.500000 -0.500000 -0.036364 +v 0.473864 -0.473864 -0.062500 +v 0.473864 -0.473864 0.062500 +v 0.500000 -0.500000 0.036364 +v -0.500000 -0.500000 0.036364 +v -0.473864 -0.473864 0.062500 +v -0.500000 0.500000 -0.036364 +v -0.473864 0.473864 -0.062500 +v 0.500000 0.500000 -0.036364 +v 0.473864 0.473864 -0.062500 +v 0.473864 0.473864 0.062500 +v 0.500000 0.500000 0.036364 +v -0.500000 0.500000 0.036364 +v -0.473864 0.473864 0.062500 +vt 0.2070 0.0076 +vt 0.2070 0.4924 +vt 0.1718 0.4924 +vt 0.1718 0.0076 +vt 0.4798 0.9798 +vt 0.0202 0.9798 +vt 0.0202 0.5202 +vt 0.4798 0.5202 +vt 0.0960 0.4924 +vt 0.0960 0.0076 +vt 0.1313 0.0076 +vt 0.1313 0.4924 +vt 0.0555 0.4924 +vt 0.0202 0.4924 +vt 0.0202 0.0076 +vt 0.0555 0.0076 +vt 0.2828 0.4924 +vt 0.2475 0.4924 +vt 0.2475 0.0076 +vt 0.2828 0.0076 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.7231 0.4496 +vt 0.7334 0.4601 +vt 0.7455 0.4683 +vt 0.7590 0.4740 +vt 0.7732 0.4769 +vt 0.7878 0.4769 +vt 0.8021 0.4740 +vt 0.8155 0.4683 +vt 0.8276 0.4601 +vt 0.8379 0.4496 +vt 0.8460 0.4373 +vt 0.8516 0.4236 +vt 0.8544 0.4090 +vt 0.8544 0.3942 +vt 0.8516 0.3796 +vt 0.8460 0.3659 +vt 0.8379 0.3536 +vt 0.8276 0.3431 +vt 0.8155 0.3349 +vt 0.8021 0.3292 +vt 0.7878 0.3263 +vt 0.7732 0.3263 +vt 0.7590 0.3292 +vt 0.7455 0.3349 +vt 0.7334 0.3431 +vt 0.7231 0.3536 +vt 0.7150 0.3659 +vt 0.7095 0.3796 +vt 0.7066 0.3942 +vt 0.7066 0.4090 +vt 0.7095 0.4236 +vt 0.7150 0.4373 +vt 0.6201 0.3292 +vt 0.6335 0.3349 +vt 0.6456 0.3431 +vt 0.6559 0.3536 +vt 0.6640 0.3659 +vt 0.6696 0.3796 +vt 0.6724 0.3942 +vt 0.6724 0.4090 +vt 0.6696 0.4236 +vt 0.6640 0.4373 +vt 0.6559 0.4496 +vt 0.6456 0.4601 +vt 0.6335 0.4683 +vt 0.6201 0.4740 +vt 0.6058 0.4769 +vt 0.5912 0.4769 +vt 0.5770 0.4740 +vt 0.5635 0.4683 +vt 0.5514 0.4601 +vt 0.5411 0.4496 +vt 0.5330 0.4373 +vt 0.5275 0.4236 +vt 0.5246 0.4090 +vt 0.5246 0.3942 +vt 0.5275 0.3796 +vt 0.5330 0.3659 +vt 0.5411 0.3536 +vt 0.5514 0.3431 +vt 0.5635 0.3349 +vt 0.5770 0.3292 +vt 0.5912 0.3263 +vt 0.6058 0.3263 +vt 0.7878 0.3263 +vt 0.8021 0.3292 +vt 0.8155 0.3349 +vt 0.8276 0.3431 +vt 0.8379 0.3536 +vt 0.8460 0.3659 +vt 0.8516 0.3796 +vt 0.8544 0.3942 +vt 0.8544 0.4090 +vt 0.8516 0.4236 +vt 0.8460 0.4373 +vt 0.8379 0.4496 +vt 0.8276 0.4601 +vt 0.8155 0.4683 +vt 0.8021 0.4740 +vt 0.7878 0.4769 +vt 0.7732 0.4769 +vt 0.7590 0.4740 +vt 0.7455 0.4683 +vt 0.7334 0.4601 +vt 0.7231 0.4496 +vt 0.7150 0.4373 +vt 0.7095 0.4236 +vt 0.7066 0.4090 +vt 0.7066 0.3942 +vt 0.7095 0.3796 +vt 0.7150 0.3659 +vt 0.7231 0.3536 +vt 0.7334 0.3431 +vt 0.7455 0.3349 +vt 0.7590 0.3292 +vt 0.7732 0.3263 +vt 0.5635 0.3349 +vt 0.5514 0.3431 +vt 0.5411 0.3536 +vt 0.5330 0.3659 +vt 0.5275 0.3796 +vt 0.5246 0.3942 +vt 0.5246 0.4090 +vt 0.5275 0.4236 +vt 0.5330 0.4373 +vt 0.5411 0.4496 +vt 0.5514 0.4601 +vt 0.5635 0.4683 +vt 0.5770 0.4740 +vt 0.5912 0.4769 +vt 0.6058 0.4769 +vt 0.6201 0.4740 +vt 0.6335 0.4683 +vt 0.6456 0.4601 +vt 0.6559 0.4496 +vt 0.6640 0.4373 +vt 0.6696 0.4236 +vt 0.6724 0.4090 +vt 0.6724 0.3942 +vt 0.6696 0.3796 +vt 0.6640 0.3659 +vt 0.6559 0.3536 +vt 0.6456 0.3431 +vt 0.6335 0.3349 +vt 0.6201 0.3292 +vt 0.6058 0.3263 +vt 0.5912 0.3263 +vt 0.5770 0.3292 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.8410 0.3482 +vt 0.8473 0.3445 +vt 0.8473 0.3370 +vt 0.8410 0.3332 +vt 0.8346 0.3370 +vt 0.8346 0.3445 +vt 0.2348 0.4798 +vt 0.2348 0.0202 +vt 0.1439 0.0202 +vt 0.1439 0.4798 +vt 0.0682 0.0202 +vt 0.0682 0.4798 +vt 0.2197 0.0202 +vt 0.2197 0.4798 +vt 0.4924 0.5076 +vt 0.4924 0.9924 +vt 0.0833 0.4798 +vt 0.0833 0.0202 +vt 0.2955 0.0202 +vt 0.2955 0.4798 +vt 0.1591 0.4798 +vt 0.1591 0.0202 +vt 0.5202 0.5202 +vt 0.9798 0.5202 +vt 0.9798 0.9798 +vt 0.5202 0.9798 +vt 0.7348 0.2879 +vt 0.7348 0.2727 +vt 0.7500 0.2727 +vt 0.7500 0.2879 +vt 0.7197 0.2879 +vt 0.7197 0.2727 +vt 0.7045 0.2879 +vt 0.7045 0.2727 +vt 0.6894 0.2879 +vt 0.6894 0.2727 +vt 0.6742 0.2879 +vt 0.6742 0.2727 +vt 0.6591 0.2879 +vt 0.6591 0.2727 +vt 0.6439 0.2879 +vt 0.6439 0.2727 +vt 0.6288 0.2879 +vt 0.6288 0.2727 +vt 0.6136 0.2879 +vt 0.6136 0.2727 +vt 0.5985 0.2879 +vt 0.5985 0.2727 +vt 0.5833 0.2879 +vt 0.5833 0.2727 +vt 0.5682 0.2879 +vt 0.5682 0.2727 +vt 0.5530 0.2879 +vt 0.5530 0.2727 +vt 0.5379 0.2879 +vt 0.5379 0.2727 +vt 0.5227 0.2879 +vt 0.5227 0.2727 +vt 0.5076 0.2879 +vt 0.5076 0.2727 +vt 0.9773 0.2879 +vt 0.9773 0.2727 +vt 0.9924 0.2727 +vt 0.9924 0.2879 +vt 0.9621 0.2879 +vt 0.9621 0.2727 +vt 0.9470 0.2879 +vt 0.9470 0.2727 +vt 0.9318 0.2879 +vt 0.9318 0.2727 +vt 0.9015 0.2879 +vt 0.9015 0.2727 +vt 0.9167 0.2727 +vt 0.9167 0.2879 +vt 0.8864 0.2879 +vt 0.8864 0.2727 +vt 0.8712 0.2879 +vt 0.8712 0.2727 +vt 0.8561 0.2879 +vt 0.8561 0.2727 +vt 0.8409 0.2879 +vt 0.8409 0.2727 +vt 0.8106 0.2879 +vt 0.8106 0.2727 +vt 0.8258 0.2727 +vt 0.8258 0.2879 +vt 0.7955 0.2879 +vt 0.7955 0.2727 +vt 0.7803 0.2879 +vt 0.7803 0.2727 +vt 0.7208 0.2473 +vt 0.7208 0.2404 +vt 0.7358 0.2404 +vt 0.7358 0.2473 +vt 0.7508 0.2473 +vt 0.7508 0.2404 +vt 0.7658 0.2473 +vt 0.7658 0.2404 +vt 0.7808 0.2473 +vt 0.7808 0.2404 +vt 0.7957 0.2473 +vt 0.7957 0.2404 +vt 0.8107 0.2473 +vt 0.8107 0.2404 +vt 0.8257 0.2404 +vt 0.8257 0.2473 +vt 0.8407 0.2474 +vt 0.8407 0.2405 +vt 0.8557 0.2474 +vt 0.8557 0.2405 +vt 0.8707 0.2475 +vt 0.8708 0.2405 +vt 0.8858 0.2406 +vt 0.8858 0.2475 +vt 0.9009 0.2406 +vt 0.9008 0.2475 +vt 0.9158 0.2475 +vt 0.9159 0.2406 +vt 0.9309 0.2406 +vt 0.9309 0.2475 +vt 0.9459 0.2406 +vt 0.9460 0.2475 +vt 0.9612 0.2475 +vt 0.9610 0.2406 +vt 0.9759 0.2405 +vt 0.9764 0.2474 +vt 0.9918 0.2472 +vt 0.9907 0.2403 +vt 0.5098 0.2471 +vt 0.5108 0.2402 +vt 0.5256 0.2404 +vt 0.5251 0.2474 +vt 0.5405 0.2475 +vt 0.5407 0.2405 +vt 0.5558 0.2406 +vt 0.5558 0.2475 +vt 0.5709 0.2405 +vt 0.5709 0.2475 +vt 0.5859 0.2405 +vt 0.5859 0.2474 +vt 0.6008 0.2405 +vt 0.6009 0.2474 +vt 0.6158 0.2405 +vt 0.6159 0.2474 +vt 0.6308 0.2404 +vt 0.6308 0.2473 +vt 0.6608 0.2474 +vt 0.6458 0.2473 +vt 0.6458 0.2404 +vt 0.6608 0.2404 +vt 0.6908 0.2473 +vt 0.6758 0.2473 +vt 0.6758 0.2404 +vt 0.6908 0.2404 +vt 0.7058 0.2473 +vt 0.7058 0.2404 +vt 0.8868 0.0171 +vt 0.8719 0.0171 +vt 0.8719 0.0102 +vt 0.8570 0.0171 +vt 0.8570 0.0103 +vt 0.8868 0.0102 +vt 0.9018 0.0102 +vt 0.9017 0.0171 +vt 0.8421 0.0171 +vt 0.8272 0.0171 +vt 0.8421 0.0103 +vt 0.9168 0.0102 +vt 0.9167 0.0171 +vt 0.8272 0.0102 +vt 0.9317 0.0102 +vt 0.9316 0.0172 +vt 0.8123 0.0102 +vt 0.8123 0.0171 +vt 0.8409 0.2879 +vt 0.8409 0.2727 +vt 0.8561 0.2727 +vt 0.8561 0.2879 +vt 0.8864 0.2879 +vt 0.8864 0.2727 +vt 0.9015 0.2727 +vt 0.9015 0.2879 +vt 0.9467 0.0103 +vt 0.9465 0.0172 +vt 0.8258 0.2879 +vt 0.8258 0.2727 +vt 0.7974 0.0101 +vt 0.7973 0.0170 +vt 0.9167 0.2727 +vt 0.9167 0.2879 +vt 0.9617 0.0104 +vt 0.9614 0.0173 +vt 0.8106 0.2879 +vt 0.8106 0.2727 +vt 0.7825 0.0101 +vt 0.7824 0.0170 +vt 0.7955 0.2879 +vt 0.7955 0.2727 +vt 0.9768 0.0105 +vt 0.9761 0.0174 +vt 0.7652 0.2879 +vt 0.7652 0.2727 +vt 0.7803 0.2727 +vt 0.7803 0.2879 +vt 0.7675 0.0100 +vt 0.7674 0.0169 +vt 0.9318 0.2727 +vt 0.9318 0.2879 +vt 0.9918 0.0109 +vt 0.9906 0.0176 +vt 0.7500 0.2879 +vt 0.7500 0.2727 +vt 0.7526 0.0100 +vt 0.7525 0.0169 +vt 0.9470 0.2727 +vt 0.9470 0.2879 +vt 0.5261 0.0090 +vt 0.5264 0.0161 +vt 0.5113 0.0163 +vt 0.5105 0.0093 +vt 0.7652 0.2727 +vt 0.7652 0.2879 +vt 0.7348 0.2879 +vt 0.7348 0.2727 +vt 0.6022 0.0162 +vt 0.5871 0.0162 +vt 0.7376 0.0099 +vt 0.7375 0.0169 +vt 0.9621 0.2727 +vt 0.9621 0.2879 +vt 0.5416 0.0090 +vt 0.5417 0.0161 +vt 0.7197 0.2879 +vt 0.7197 0.2727 +vt 0.7226 0.0099 +vt 0.7225 0.0168 +vt 0.9773 0.2727 +vt 0.9773 0.2879 +vt 0.5570 0.0090 +vt 0.5569 0.0161 +vt 0.7045 0.2879 +vt 0.7045 0.2727 +vt 0.7077 0.0098 +vt 0.7076 0.0168 +vt 0.5076 0.2879 +vt 0.5076 0.2727 +vt 0.5227 0.2727 +vt 0.5227 0.2879 +vt 0.5722 0.0092 +vt 0.5720 0.0161 +vt 0.9924 0.2727 +vt 0.9924 0.2879 +vt 0.6927 0.0098 +vt 0.6926 0.0167 +vt 0.5379 0.2727 +vt 0.5379 0.2879 +vt 0.8712 0.2727 +vt 0.8712 0.2879 +vt 0.5873 0.0092 +vt 0.6894 0.2879 +vt 0.6894 0.2727 +vt 0.6625 0.0166 +vt 0.6776 0.0166 +vt 0.6777 0.0097 +vt 0.5530 0.2727 +vt 0.5530 0.2879 +vt 0.6024 0.0093 +vt 0.6742 0.2879 +vt 0.6742 0.2727 +vt 0.6627 0.0096 +vt 0.5682 0.2727 +vt 0.5682 0.2879 +vt 0.6175 0.0094 +vt 0.6174 0.0163 +vt 0.6591 0.2879 +vt 0.6591 0.2727 +vt 0.6477 0.0095 +vt 0.6475 0.0165 +vt 0.5833 0.2727 +vt 0.5833 0.2879 +vt 0.6326 0.0094 +vt 0.6325 0.0164 +vt 0.6439 0.2879 +vt 0.6439 0.2727 +vt 0.6288 0.2879 +vt 0.6288 0.2727 +vt 0.5985 0.2727 +vt 0.5985 0.2879 +vt 0.6136 0.2879 +vt 0.6136 0.2727 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vt 0.8409 0.3258 +vt 0.8409 0.3182 +vt 0.8485 0.3182 +vt 0.8485 0.3258 +vt 0.8333 0.3258 +vt 0.8333 0.3182 +vt 0.8561 0.3182 +vt 0.8561 0.3258 +vt 0.8636 0.3182 +vt 0.8636 0.3258 +vt 0.8182 0.3258 +vt 0.8182 0.3182 +vt 0.8258 0.3182 +vt 0.8258 0.3258 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 0.0000 1.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.7071 0.0000 -0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.0000 0.7071 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.0000 -0.7071 0.7071 +vn -0.6965 0.2113 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.6419 0.3431 0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.7244 0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.6419 -0.3431 0.6857 +vn -0.5626 -0.4617 -0.6857 +vn -0.5626 -0.4617 0.6857 +vn -0.4617 -0.5626 -0.6857 +vn -0.4617 -0.5626 0.6857 +vn -0.3431 -0.6419 -0.6857 +vn -0.3431 -0.6419 0.6857 +vn -0.2113 -0.6965 -0.6857 +vn -0.2113 -0.6965 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn 0.0713 -0.7244 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.3431 -0.6419 0.6857 +vn 0.4617 -0.5626 -0.6857 +vn 0.4617 -0.5626 0.6857 +vn 0.5626 -0.4617 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.6419 -0.3431 -0.6857 +vn 0.6419 -0.3431 0.6857 +vn 0.6965 -0.2113 -0.6857 +vn 0.6965 -0.2113 0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.6965 0.2113 -0.6857 +vn 0.6965 0.2113 0.6857 +vn 0.5626 0.4617 -0.6857 +vn 0.5626 0.4617 0.6857 +vn 0.6419 0.3431 0.6857 +vn 0.6419 0.3431 -0.6857 +vn 0.4617 0.5626 -0.6857 +vn 0.4617 0.5626 0.6857 +vn 0.3431 0.6419 -0.6857 +vn 0.3431 0.6419 0.6857 +vn 0.2113 0.6965 -0.6857 +vn 0.2113 0.6965 0.6857 +vn 0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn -0.2113 0.6965 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.4617 0.5626 0.6857 +vn 0.4604 0.8614 -0.2147 +vn 0.4686 0.8767 -0.1087 +vn 0.2886 0.9513 -0.1087 +vn 0.2835 0.9346 -0.2147 +vn 0.0957 0.9720 -0.2147 +vn 0.0974 0.9893 -0.1087 +vn -0.0957 0.9720 -0.2147 +vn -0.0974 0.9893 -0.1087 +vn -0.2835 0.9346 -0.2147 +vn -0.2886 0.9513 -0.1087 +vn -0.4604 0.8614 -0.2147 +vn -0.4686 0.8767 -0.1087 +vn -0.6196 0.7550 -0.2147 +vn -0.6306 0.7684 -0.1087 +vn -0.7684 0.6306 -0.1087 +vn -0.7550 0.6196 -0.2147 +vn -0.8614 0.4604 -0.2147 +vn -0.8767 0.4686 -0.1087 +vn -0.9346 0.2835 -0.2147 +vn -0.9513 0.2886 -0.1087 +vn -0.9720 0.0957 -0.2147 +vn -0.9893 0.0974 -0.1087 +vn -0.9893 -0.0974 -0.1087 +vn -0.9720 -0.0957 -0.2147 +vn -0.9513 -0.2886 -0.1087 +vn -0.9346 -0.2835 -0.2147 +vn -0.8614 -0.4604 -0.2147 +vn -0.8767 -0.4686 -0.1087 +vn -0.7684 -0.6306 -0.1087 +vn -0.7550 -0.6196 -0.2147 +vn -0.6306 -0.7684 -0.1087 +vn -0.6196 -0.7550 -0.2147 +vn -0.4604 -0.8614 -0.2147 +vn -0.4686 -0.8767 -0.1087 +vn -0.2886 -0.9513 -0.1087 +vn -0.2835 -0.9346 -0.2147 +vn -0.0957 -0.9720 -0.2147 +vn -0.0974 -0.9893 -0.1087 +vn 0.0974 -0.9893 -0.1087 +vn 0.0957 -0.9720 -0.2147 +vn 0.2835 -0.9346 -0.2147 +vn 0.2886 -0.9513 -0.1087 +vn 0.4686 -0.8767 -0.1087 +vn 0.4604 -0.8614 -0.2147 +vn 0.6306 -0.7684 -0.1087 +vn 0.6196 -0.7550 -0.2147 +vn 0.7684 -0.6306 -0.1087 +vn 0.7550 -0.6196 -0.2147 +vn 0.8767 -0.4686 -0.1087 +vn 0.8614 -0.4604 -0.2147 +vn 0.9513 -0.2886 -0.1087 +vn 0.9346 -0.2835 -0.2147 +vn 0.9893 -0.0974 -0.1087 +vn 0.9720 -0.0957 -0.2147 +vn 0.9346 0.2835 -0.2147 +vn 0.9720 0.0957 -0.2147 +vn 0.9893 0.0974 -0.1087 +vn 0.9513 0.2886 -0.1087 +vn 0.7550 0.6196 -0.2147 +vn 0.8614 0.4604 -0.2147 +vn 0.8767 0.4686 -0.1087 +vn 0.7684 0.6306 -0.1087 +vn 0.6196 0.7550 -0.2147 +vn 0.6306 0.7684 -0.1087 +vn -0.9893 -0.0974 0.1087 +vn -0.9893 0.0974 0.1087 +vn -0.9720 0.0957 0.2147 +vn -0.9513 0.2886 0.1087 +vn -0.9346 0.2835 0.2147 +vn -0.9720 -0.0957 0.2147 +vn -0.9346 -0.2835 0.2147 +vn -0.9513 -0.2886 0.1087 +vn -0.8767 0.4686 0.1087 +vn -0.7684 0.6306 0.1087 +vn -0.8614 0.4604 0.2147 +vn -0.8614 -0.4604 0.2147 +vn -0.8767 -0.4686 0.1087 +vn -0.7550 0.6196 0.2147 +vn -0.7550 -0.6196 0.2147 +vn -0.7684 -0.6306 0.1087 +vn -0.6196 0.7550 0.2147 +vn -0.6306 0.7684 0.1087 +vn -0.6196 -0.7550 0.2147 +vn -0.6306 -0.7684 0.1087 +vn -0.4604 0.8614 0.2147 +vn -0.4686 0.8767 0.1087 +vn -0.4604 -0.8614 0.2147 +vn -0.4686 -0.8767 0.1087 +vn -0.2835 0.9346 0.2147 +vn -0.2886 0.9513 0.1087 +vn -0.2835 -0.9346 0.2147 +vn -0.2886 -0.9513 0.1087 +vn -0.0957 0.9720 0.2147 +vn -0.0974 0.9893 0.1087 +vn -0.0957 -0.9720 0.2147 +vn -0.0974 -0.9893 0.1087 +vn 0.0957 0.9720 0.2147 +vn 0.0974 0.9893 0.1087 +vn 0.0957 -0.9720 0.2147 +vn 0.0974 -0.9893 0.1087 +vn -0.5626 0.4617 0.6857 +vn -0.5626 0.4617 -0.6857 +vn 0.8767 -0.4686 0.1087 +vn 0.7684 -0.6306 0.1087 +vn 0.2835 0.9346 0.2147 +vn 0.2886 0.9513 0.1087 +vn 0.2835 -0.9346 0.2147 +vn 0.2886 -0.9513 0.1087 +vn 0.4604 0.8614 0.2147 +vn 0.4686 0.8767 0.1087 +vn 0.4604 -0.8614 0.2147 +vn 0.4686 -0.8767 0.1087 +vn 0.6196 0.7550 0.2147 +vn 0.6306 0.7684 0.1087 +vn 0.6196 -0.7550 0.2147 +vn 0.6306 -0.7684 0.1087 +vn 0.7550 0.6196 0.2147 +vn 0.7684 0.6306 0.1087 +vn 0.7550 -0.6196 0.2147 +vn 0.9513 0.2886 0.1087 +vn 0.8767 0.4686 0.1087 +vn 0.8614 0.4604 0.2147 +vn 0.8614 -0.4604 0.2147 +vn 0.9346 0.2835 0.2147 +vn 0.9346 -0.2835 0.2147 +vn 0.9513 -0.2886 0.1087 +vn 0.9720 0.0957 0.2147 +vn 0.9893 0.0974 0.1087 +vn 0.9720 -0.0957 0.2147 +vn 0.9893 -0.0974 0.1087 +vn 0.7321 -0.3032 0.6100 +vn 0.9239 -0.3827 0.0000 +vn 0.7933 0.6088 0.0000 +vn 0.6287 0.4824 0.6100 +vn 0.1034 -0.7856 0.6100 +vn 0.1305 -0.9914 0.0000 +vn -0.1305 0.9914 0.0000 +vn -0.1034 0.7856 0.6100 +vn -0.9239 0.3827 0.0000 +vn -0.7321 0.3032 0.6100 +vn -0.7933 -0.6088 0.0000 +vn -0.6287 -0.4824 0.6100 +vn -0.7321 0.3032 -0.6100 +vn -0.1034 0.7856 -0.6100 +vn -0.6287 -0.4824 -0.6100 +vn 0.6287 0.4824 -0.6100 +vn 0.7321 -0.3032 -0.6100 +vn 0.1034 -0.7856 -0.6100 +vn 0.3032 -0.7321 0.6100 +vn 0.3827 -0.9239 0.0000 +vn 0.9914 -0.1305 0.0000 +vn 0.7856 -0.1034 0.6100 +vn -0.4824 -0.6287 0.6100 +vn -0.6088 -0.7933 0.0000 +vn 0.6088 0.7933 0.0000 +vn 0.4824 0.6287 0.6100 +vn -0.3827 0.9239 0.0000 +vn -0.3032 0.7321 0.6100 +vn -0.9914 0.1305 0.0000 +vn -0.7856 0.1034 0.6100 +vn -0.3032 0.7321 -0.6100 +vn 0.4824 0.6287 -0.6100 +vn -0.7856 0.1034 -0.6100 +vn 0.7856 -0.1034 -0.6100 +vn 0.3032 -0.7321 -0.6100 +vn -0.4824 -0.6287 -0.6100 +vn -0.3032 -0.7321 0.6100 +vn -0.3827 -0.9239 0.0000 +vn 0.6088 -0.7933 0.0000 +vn 0.4824 -0.6287 0.6100 +vn -0.7856 -0.1034 0.6100 +vn -0.9914 -0.1305 0.0000 +vn 0.9914 0.1305 0.0000 +vn 0.7856 0.1034 0.6100 +vn 0.3827 0.9239 0.0000 +vn 0.3032 0.7321 0.6100 +vn -0.6088 0.7933 0.0000 +vn -0.4824 0.6287 0.6100 +vn 0.3032 0.7321 -0.6100 +vn 0.7856 0.1034 -0.6100 +vn -0.4824 0.6287 -0.6100 +vn 0.4824 -0.6287 -0.6100 +vn -0.3032 -0.7321 -0.6100 +vn -0.7856 -0.1034 -0.6100 +vn -0.7321 -0.3032 0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.1305 -0.9914 0.0000 +vn -0.1034 -0.7856 0.6100 +vn -0.6287 0.4824 0.6100 +vn -0.7933 0.6088 0.0000 +vn 0.7933 -0.6088 0.0000 +vn 0.6287 -0.4824 0.6100 +vn 0.9239 0.3827 0.0000 +vn 0.7321 0.3032 0.6100 +vn 0.1305 0.9914 0.0000 +vn 0.1034 0.7856 0.6100 +vn 0.7321 0.3032 -0.6100 +vn 0.6287 -0.4824 -0.6100 +vn 0.1034 0.7856 -0.6100 +vn -0.1034 -0.7856 -0.6100 +vn -0.7321 -0.3032 -0.6100 +vn -0.6287 0.4824 -0.6100 +vn 0.5603 -0.5603 0.6100 +vn 0.7071 -0.7071 0.0000 +vn 0.9659 0.2588 0.0000 +vn 0.7654 0.2051 0.6100 +vn -0.2051 -0.7654 0.6100 +vn -0.2588 -0.9659 0.0000 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 0.6100 +vn -0.7071 0.7071 0.0000 +vn -0.5603 0.5603 0.6100 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 0.6100 +vn -0.5603 0.5603 -0.6100 +vn 0.2051 0.7654 -0.6100 +vn -0.7654 -0.2051 -0.6100 +vn 0.7654 0.2051 -0.6100 +vn 0.5603 -0.5603 -0.6100 +vn -0.2051 -0.7654 -0.6100 +vn 0.0000 -0.7924 0.6100 +vn 0.8660 -0.5000 0.0000 +vn 0.6862 -0.3962 0.6100 +vn -0.6862 -0.3962 0.6100 +vn -0.8660 -0.5000 0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.6862 0.3962 0.6100 +vn 0.0000 0.7924 0.6100 +vn -0.8660 0.5000 0.0000 +vn -0.6862 0.3962 0.6100 +vn 0.0000 0.7924 -0.6100 +vn 0.6862 0.3962 -0.6100 +vn -0.6862 0.3962 -0.6100 +vn 0.6862 -0.3962 -0.6100 +vn 0.0000 -0.7924 -0.6100 +vn -0.6862 -0.3962 -0.6100 +vn -0.5603 -0.5603 0.6100 +vn -0.7071 -0.7071 0.0000 +vn 0.2588 -0.9659 0.0000 +vn 0.2051 -0.7654 0.6100 +vn -0.7654 0.2051 0.6100 +vn -0.9659 0.2588 0.0000 +vn 0.9659 -0.2588 0.0000 +vn 0.7654 -0.2051 0.6100 +vn 0.7071 0.7071 0.0000 +vn 0.5603 0.5603 0.6100 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 0.6100 +vn 0.5603 0.5603 -0.6100 +vn 0.7654 -0.2051 -0.6100 +vn -0.2051 0.7654 -0.6100 +vn 0.2051 -0.7654 -0.6100 +vn -0.5603 -0.5603 -0.6100 +vn -0.7654 0.2051 -0.6100 +vn -0.7924 0.0000 0.6100 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 0.6100 +vn -0.3962 0.6862 0.6100 +vn -0.5000 0.8660 0.0000 +vn 0.5000 -0.8660 0.0000 +vn 0.3962 -0.6862 0.6100 +vn 0.7924 0.0000 0.6100 +vn 0.5000 0.8660 0.0000 +vn 0.3962 0.6862 0.6100 +vn 0.7924 0.0000 -0.6100 +vn 0.3962 -0.6862 -0.6100 +vn 0.3962 0.6862 -0.6100 +vn -0.3962 -0.6862 -0.6100 +vn -0.7924 0.0000 -0.6100 +vn -0.3962 0.6862 -0.6100 +g Cube.001_Cube.001_None +s off +f 642/1/1 643/2/1 646/3/1 647/4/1 +f 653/5/2 656/6/2 648/7/2 645/8/2 +f 655/9/3 654/10/3 651/11/3 649/12/3 +f 651/13/4 654/14/4 646/15/4 643/16/4 +f 655/17/5 649/18/5 642/19/5 647/20/5 +f 129/21/2 132/22/2 133/23/2 134/24/2 135/25/2 136/26/2 +f 141/27/6 144/28/6 145/29/6 146/30/6 147/31/6 148/32/6 +f 153/33/2 156/34/2 157/35/2 158/36/2 159/37/2 160/38/2 +f 165/39/6 168/40/6 169/41/6 170/42/6 171/43/6 172/44/6 +f 177/45/2 180/46/2 181/47/2 182/48/2 183/49/2 184/50/2 +f 189/51/6 192/52/6 193/53/6 194/54/6 195/55/6 196/56/6 +f 201/57/2 204/58/2 205/59/2 206/60/2 207/61/2 208/62/2 +f 213/63/6 216/64/6 217/65/6 218/66/6 219/67/6 220/68/6 +f 225/69/2 228/70/2 229/71/2 230/72/2 231/73/2 232/74/2 +f 237/75/6 240/76/6 241/77/6 242/78/6 243/79/6 244/80/6 +f 249/81/2 252/82/2 253/83/2 254/84/2 255/85/2 256/86/2 +f 261/87/6 264/88/6 265/89/6 266/90/6 267/91/6 268/92/6 +f 273/93/2 276/94/2 277/95/2 278/96/2 279/97/2 280/98/2 +f 285/99/6 288/100/6 289/101/6 290/102/6 291/103/6 292/104/6 +f 297/105/2 300/106/2 301/107/2 302/108/2 303/109/2 304/110/2 +f 309/111/6 312/112/6 313/113/6 314/114/6 315/115/6 316/116/6 +f 353/117/6 354/118/6 384/119/6 383/120/6 381/121/6 382/122/6 380/123/6 379/124/6 378/125/6 377/126/6 375/127/6 376/128/6 374/129/6 373/130/6 372/131/6 371/132/6 370/133/6 369/134/6 368/135/6 367/136/6 366/137/6 365/138/6 364/139/6 363/140/6 362/141/6 361/142/6 360/143/6 359/144/6 358/145/6 357/146/6 356/147/6 355/148/6 +f 332/149/2 349/150/2 333/151/2 334/152/2 335/153/2 336/154/2 337/155/2 350/156/2 338/157/2 339/158/2 340/159/2 351/160/2 341/161/2 352/162/2 342/163/2 343/164/2 344/165/2 345/166/2 346/167/2 321/168/2 322/169/2 323/170/2 324/171/2 325/172/2 326/173/2 327/174/2 328/175/2 329/176/2 347/177/2 330/178/2 348/179/2 331/180/2 +f 389/181/2 399/182/2 404/183/2 408/184/2 412/185/2 417/186/2 416/187/2 421/188/2 425/189/2 429/190/2 433/191/2 438/192/2 447/193/2 448/194/2 446/195/2 440/196/2 435/197/2 431/198/2 427/199/2 423/200/2 419/201/2 414/202/2 410/203/2 406/204/2 401/205/2 397/206/2 390/207/2 391/208/2 388/209/2 385/210/2 386/211/2 387/212/2 +f 393/213/6 392/214/6 398/215/6 403/216/6 402/217/6 407/218/6 411/219/6 415/220/6 420/221/6 424/222/6 428/223/6 432/224/6 436/225/6 441/226/6 437/227/6 443/228/6 442/229/6 444/230/6 445/231/6 439/232/6 434/233/6 430/234/6 426/235/6 422/236/6 418/237/6 413/238/6 409/239/6 405/240/6 400/241/6 396/242/6 395/243/6 394/244/6 +f 449/245/2 452/246/2 453/247/2 454/248/2 455/249/2 456/250/2 +f 461/251/6 464/252/6 465/253/6 466/254/6 467/255/6 468/256/6 +f 473/257/2 476/258/2 477/259/2 478/260/2 479/261/2 480/262/2 +f 485/263/6 488/264/6 489/265/6 490/266/6 491/267/6 492/268/6 +f 497/269/2 500/270/2 501/271/2 502/272/2 503/273/2 504/274/2 +f 509/275/6 512/276/6 513/277/6 514/278/6 515/279/6 516/280/6 +f 521/281/2 524/282/2 525/283/2 526/284/2 527/285/2 528/286/2 +f 533/287/6 536/288/6 537/289/6 538/290/6 539/291/6 540/292/6 +f 545/293/2 548/294/2 549/295/2 550/296/2 551/297/2 552/298/2 +f 557/299/6 560/300/6 561/301/6 562/302/6 563/303/6 564/304/6 +f 569/305/2 572/306/2 573/307/2 574/308/2 575/309/2 576/310/2 +f 581/311/6 584/312/6 585/313/6 586/314/6 587/315/6 588/316/6 +f 593/317/2 596/318/2 597/319/2 598/320/2 599/321/2 600/322/2 +f 605/323/6 608/324/6 609/325/6 610/326/6 611/327/6 612/328/6 +f 617/329/2 620/330/2 621/331/2 622/332/2 623/333/2 624/334/2 +f 629/335/6 632/336/6 633/337/6 634/338/6 635/339/6 636/340/6 +f 642/19/7 649/18/7 650/341/7 641/342/7 +f 649/12/8 651/11/8 652/343/8 650/344/8 +f 651/13/9 643/16/9 644/345/9 652/346/9 +f 643/2/10 642/1/10 641/347/10 644/348/10 +f 653/5/11 645/8/11 646/349/11 654/350/11 +f 654/10/12 655/9/12 656/351/12 653/352/12 +f 655/17/13 647/20/13 648/353/13 656/354/13 +f 647/4/14 646/3/14 645/355/14 648/356/14 +f 650/357/6 652/358/6 644/359/6 641/360/6 +s 1 +f 356/361/15 323/362/16 322/363/17 355/364/18 +f 357/365/19 324/366/20 323/362/16 356/361/15 +f 358/367/21 325/368/22 324/366/20 357/365/19 +f 359/369/23 326/370/24 325/368/22 358/367/21 +f 360/371/25 327/372/26 326/370/24 359/369/23 +f 361/373/27 328/374/28 327/372/26 360/371/25 +f 362/375/29 329/376/30 328/374/28 361/373/27 +f 363/377/31 347/378/32 329/376/30 362/375/29 +f 364/379/33 330/380/34 347/378/32 363/377/31 +f 365/381/35 348/382/36 330/380/34 364/379/33 +f 366/383/37 331/384/38 348/382/36 365/381/35 +f 367/385/39 332/386/40 331/384/38 366/383/37 +f 368/387/41 349/388/42 332/386/40 367/385/39 +f 369/389/43 333/390/44 349/388/42 368/387/41 +f 370/391/45 334/392/46 333/390/44 369/389/43 +f 371/393/47 335/394/48 334/392/46 370/391/45 +f 372/395/49 336/396/50 335/397/48 371/398/47 +f 373/399/51 337/400/52 336/396/50 372/395/49 +f 374/401/53 350/402/54 337/400/52 373/399/51 +f 376/403/55 338/404/56 350/402/54 374/401/53 +f 377/405/57 340/406/58 339/407/59 375/408/60 +f 375/408/60 339/407/59 338/404/56 376/403/55 +f 378/409/61 351/410/62 340/406/58 377/405/57 +f 379/411/63 341/412/64 351/410/62 378/409/61 +f 380/413/65 352/414/66 341/412/64 379/411/63 +f 382/415/67 342/416/68 352/414/66 380/413/65 +f 383/417/69 344/418/70 343/419/71 381/420/72 +f 381/420/72 343/419/71 342/416/68 382/415/67 +f 384/421/73 345/422/74 344/418/70 383/417/69 +f 354/423/75 346/424/76 345/422/74 384/421/73 +f 30/425/77 33/426/78 34/427/79 1/428/80 +f 2/429/81 1/428/80 34/427/79 35/430/82 +f 3/431/83 2/429/81 35/430/82 36/432/84 +f 4/433/85 3/431/83 36/432/84 37/434/86 +f 5/435/87 4/433/85 37/434/86 38/436/88 +f 6/437/89 5/435/87 38/436/88 39/438/90 +f 6/437/89 39/438/90 40/439/91 7/440/92 +f 8/441/93 7/440/92 40/439/91 41/442/94 +f 9/443/95 8/441/93 41/442/94 42/444/96 +f 10/445/97 9/443/95 42/444/96 43/446/98 +f 10/445/97 43/446/98 44/447/99 11/448/100 +f 11/448/100 44/447/99 45/449/101 31/450/102 +f 12/451/103 46/452/104 47/453/105 13/454/106 +f 31/450/102 45/449/101 46/452/104 12/451/103 +f 13/454/106 47/453/105 48/455/107 14/456/108 +f 15/457/109 14/456/108 48/455/107 49/458/110 +f 15/457/109 49/458/110 50/459/111 16/460/112 +f 17/461/113 16/460/112 50/459/111 51/462/114 +f 17/463/113 51/464/114 52/465/115 18/466/116 +f 19/467/117 18/466/116 52/465/115 53/468/118 +f 19/467/117 53/468/118 54/469/119 20/470/120 +f 20/470/120 54/469/119 55/471/121 22/472/122 +f 22/472/122 55/471/121 56/473/123 21/474/124 +f 21/474/124 56/473/123 57/475/125 23/476/126 +f 23/476/126 57/475/125 58/477/127 24/478/128 +f 24/478/128 58/477/127 59/479/129 32/480/130 +f 27/481/131 25/482/132 60/483/133 61/484/134 +f 25/482/132 32/480/130 59/479/129 60/483/133 +f 28/485/135 26/486/136 62/487/137 63/488/138 +f 27/481/131 61/484/134 62/487/137 26/486/136 +f 29/489/139 28/485/135 63/488/138 64/490/140 +f 29/489/139 64/490/140 33/426/78 30/425/77 +f 67/491/141 44/447/99 43/446/98 66/492/142 +f 70/493/143 66/492/142 65/494/144 71/495/145 +f 72/496/146 67/491/141 66/492/142 70/493/143 +f 74/497/147 68/498/148 67/491/141 72/496/146 +f 69/499/149 41/442/94 40/439/91 75/500/150 +f 71/495/145 65/494/144 69/499/149 76/501/151 +f 78/502/152 73/503/153 68/498/148 74/497/147 +f 80/504/154 76/501/151 69/499/149 75/500/150 +f 82/505/155 77/506/156 73/503/153 78/502/152 +f 84/507/157 80/504/154 75/500/150 79/508/158 +f 388/509/30 392/510/29 393/511/31 385/512/32 +f 387/513/36 395/514/35 396/515/37 389/516/38 +f 86/517/159 81/518/160 77/506/156 82/505/155 +f 391/519/28 398/520/27 392/510/29 388/509/30 +f 88/521/161 84/507/157 79/508/158 83/522/162 +f 389/516/38 396/515/37 400/523/39 399/524/40 +f 90/525/163 85/526/164 81/518/160 86/517/159 +f 390/527/26 403/528/25 398/520/27 391/519/28 +f 92/529/165 88/521/161 83/522/162 87/530/166 +f 397/531/24 402/532/23 403/528/25 390/527/26 +f 94/533/167 89/534/168 85/526/164 90/525/163 +f 406/535/20 411/536/19 407/537/21 401/538/22 +f 96/539/169 92/529/165 87/530/166 91/540/170 +f 399/524/40 400/523/39 405/541/41 404/542/42 +f 98/543/171 93/544/172 89/534/168 94/533/167 +f 410/545/16 415/546/15 411/536/19 406/535/20 +f 100/547/173 96/539/169 91/540/170 95/548/174 +f 404/542/42 405/541/41 409/549/43 408/550/44 +f 102/551/175 97/552/176 93/553/172 98/554/171 +f 355/364/18 322/363/17 321/555/177 353/556/178 +f 414/557/17 420/558/18 415/546/15 410/545/16 +f 36/432/84 91/540/170 87/530/166 37/434/86 +f 117/559/179 57/475/125 56/473/123 113/560/180 +f 104/561/181 100/547/173 95/548/174 99/562/182 +f 408/550/44 409/549/43 413/563/45 412/564/46 +f 106/565/183 101/566/184 97/552/176 102/551/175 +f 419/567/177 424/568/178 420/558/18 414/557/17 +f 108/569/185 104/561/181 99/562/182 103/570/186 +f 412/564/46 413/563/45 418/571/47 417/572/48 +f 110/573/187 105/574/188 101/566/184 106/565/183 +f 423/575/76 428/576/75 424/568/178 419/567/177 +f 112/577/189 108/569/185 103/570/186 107/578/190 +f 416/579/50 422/580/49 426/581/51 421/582/52 +f 110/573/187 114/583/191 109/584/192 105/574/188 +f 417/572/48 418/571/47 422/585/49 416/586/50 +f 116/587/193 112/577/189 107/578/190 111/588/194 +f 421/582/52 426/581/51 430/589/53 425/590/54 +f 385/512/32 393/511/31 394/591/33 386/592/34 +f 118/593/195 113/560/180 109/584/192 114/583/191 +f 427/594/74 432/595/73 428/576/75 423/575/76 +f 61/484/134 119/596/196 115/597/197 62/487/137 +f 120/598/198 116/587/193 111/588/194 115/597/197 +f 425/590/54 430/589/53 434/599/55 429/600/56 +f 118/593/195 122/601/199 117/559/179 113/560/180 +f 431/602/70 436/603/69 432/595/73 427/594/74 +f 124/604/200 120/598/198 115/597/197 119/596/196 +f 429/600/56 434/599/55 439/605/60 433/606/59 +f 122/601/199 126/607/201 121/608/202 117/559/179 +f 435/609/71 441/610/72 436/603/69 431/602/70 +f 401/538/22 407/537/21 402/532/23 397/531/24 +f 127/611/203 124/604/200 119/596/196 123/612/204 +f 433/606/59 439/605/60 445/613/57 438/614/58 +f 126/607/201 128/615/205 125/616/206 121/608/202 +f 440/617/68 437/618/67 441/610/72 435/609/71 +f 128/615/205 127/611/203 123/612/204 125/616/206 +f 386/592/34 394/591/33 395/514/35 387/513/36 +f 446/619/66 443/620/65 437/618/67 440/617/68 +f 438/614/58 445/613/57 444/621/61 447/622/62 +f 448/623/64 442/624/63 443/620/65 446/619/66 +f 447/622/62 444/621/61 442/624/63 448/623/64 +f 129/625/207 130/626/208 131/627/209 132/628/210 +f 136/629/211 137/630/212 130/626/208 129/625/207 +f 132/628/210 131/627/209 138/631/213 133/632/214 +f 133/632/214 138/631/213 139/633/215 134/634/216 +f 134/635/216 139/636/215 140/637/217 135/638/218 +f 135/638/218 140/637/217 137/630/212 136/629/211 +f 141/639/219 142/640/215 143/641/213 144/642/220 +f 148/643/221 149/644/217 142/640/215 141/639/219 +f 144/642/220 143/641/213 150/645/209 145/646/222 +f 145/646/222 150/645/209 151/647/208 146/648/223 +f 146/649/223 151/650/208 152/651/212 147/652/224 +f 147/652/224 152/651/212 149/644/217 148/643/221 +f 153/653/225 154/654/226 155/655/227 156/656/228 +f 160/657/229 161/658/230 154/654/226 153/653/225 +f 156/656/228 155/655/227 162/659/231 157/660/232 +f 157/660/232 162/659/231 163/661/233 158/662/234 +f 158/663/234 163/664/233 164/665/235 159/666/236 +f 159/666/236 164/665/235 161/658/230 160/657/229 +f 165/667/237 166/668/233 167/669/231 168/670/238 +f 172/671/239 173/672/235 166/668/233 165/667/237 +f 168/670/238 167/669/231 174/673/227 169/674/240 +f 169/674/240 174/673/227 175/675/226 170/676/241 +f 170/677/241 175/678/226 176/679/230 171/680/242 +f 171/680/242 176/679/230 173/672/235 172/671/239 +f 177/681/243 178/682/244 179/683/245 180/684/246 +f 184/685/247 185/686/248 178/682/244 177/681/243 +f 180/684/246 179/683/245 186/687/249 181/688/250 +f 181/688/250 186/687/249 187/689/251 182/690/252 +f 182/691/252 187/692/251 188/693/253 183/694/254 +f 183/694/254 188/693/253 185/686/248 184/685/247 +f 189/695/255 190/696/251 191/697/249 192/698/256 +f 196/699/257 197/700/253 190/696/251 189/695/255 +f 192/698/256 191/697/249 198/701/245 193/702/258 +f 193/702/258 198/701/245 199/703/244 194/704/259 +f 194/705/259 199/706/244 200/707/248 195/708/260 +f 195/708/260 200/707/248 197/700/253 196/699/257 +f 201/709/261 202/710/262 203/711/263 204/712/264 +f 208/713/265 209/714/266 202/710/262 201/709/261 +f 204/712/264 203/711/263 210/715/267 205/716/268 +f 205/716/268 210/715/267 211/717/269 206/718/270 +f 206/719/270 211/720/269 212/721/271 207/722/272 +f 207/722/272 212/721/271 209/714/266 208/713/265 +f 213/723/273 214/724/269 215/725/267 216/726/274 +f 220/727/275 221/728/271 214/724/269 213/723/273 +f 216/726/274 215/725/267 222/729/263 217/730/276 +f 217/730/276 222/729/263 223/731/262 218/732/277 +f 218/733/277 223/734/262 224/735/266 219/736/278 +f 219/736/278 224/735/266 221/728/271 220/727/275 +f 225/737/216 226/738/215 227/739/217 228/740/218 +f 232/741/214 233/742/213 226/738/215 225/737/216 +f 228/740/218 227/739/217 234/743/212 229/744/211 +f 229/744/211 234/743/212 235/745/208 230/746/207 +f 230/747/207 235/748/208 236/749/209 231/750/210 +f 231/750/210 236/749/209 233/742/213 232/741/214 +f 237/751/223 238/752/208 239/753/212 240/754/224 +f 244/755/222 245/756/209 238/752/208 237/751/223 +f 240/754/224 239/753/212 246/757/217 241/758/221 +f 241/758/221 246/757/217 247/759/215 242/760/219 +f 242/761/219 247/762/215 248/763/213 243/764/220 +f 243/764/220 248/763/213 245/756/209 244/755/222 +f 249/765/234 250/766/233 251/767/235 252/768/236 +f 256/769/232 257/770/231 250/766/233 249/765/234 +f 252/768/236 251/767/235 258/771/230 253/772/229 +f 253/772/229 258/771/230 259/773/226 254/774/225 +f 254/775/225 259/776/226 260/777/227 255/778/228 +f 255/778/228 260/777/227 257/770/231 256/769/232 +f 261/779/241 262/780/226 263/781/230 264/782/242 +f 268/783/240 269/784/227 262/780/226 261/779/241 +f 264/782/242 263/781/230 270/785/235 265/786/239 +f 265/786/239 270/785/235 271/787/233 266/788/237 +f 266/789/237 271/790/233 272/791/231 267/792/238 +f 267/792/238 272/791/231 269/784/227 268/783/240 +f 273/793/252 274/794/251 275/795/253 276/796/254 +f 280/797/250 281/798/249 274/794/251 273/793/252 +f 276/796/254 275/795/253 282/799/248 277/800/247 +f 277/800/247 282/799/248 283/801/244 278/802/243 +f 278/803/243 283/804/244 284/805/245 279/806/246 +f 279/806/246 284/805/245 281/798/249 280/797/250 +f 285/807/259 286/808/244 287/809/248 288/810/260 +f 292/811/258 293/812/245 286/808/244 285/807/259 +f 288/810/260 287/809/248 294/813/253 289/814/257 +f 289/814/257 294/813/253 295/815/251 290/816/255 +f 290/817/255 295/818/251 296/819/249 291/820/256 +f 291/820/256 296/819/249 293/812/245 292/811/258 +f 297/821/270 298/822/269 299/823/271 300/824/272 +f 304/825/268 305/826/267 298/822/269 297/821/270 +f 300/824/272 299/823/271 306/827/266 301/828/265 +f 301/828/265 306/827/266 307/829/262 302/830/261 +f 302/831/261 307/832/262 308/833/263 303/834/264 +f 303/834/264 308/833/263 305/826/267 304/825/268 +f 309/835/277 310/836/262 311/837/266 312/838/278 +f 316/839/276 317/840/263 310/836/262 309/835/277 +f 312/838/278 311/837/266 318/841/271 313/842/275 +f 313/842/275 318/841/271 319/843/269 314/844/273 +f 314/845/273 319/846/269 320/847/267 315/848/274 +f 315/848/274 320/847/267 317/840/263 316/839/276 +f 54/469/119 53/468/118 101/566/184 105/574/188 +f 64/490/140 107/578/190 103/570/186 33/426/78 +f 125/616/206 59/479/129 58/477/127 121/608/202 +f 65/494/144 42/444/96 41/442/94 69/499/149 +f 62/487/137 115/597/197 111/588/194 63/488/138 +f 89/534/168 93/544/172 51/462/114 50/459/111 +f 38/436/88 37/434/86 87/530/166 83/522/162 +f 121/608/202 58/477/127 57/475/125 117/559/179 +f 61/484/134 60/483/133 123/612/204 119/596/196 +f 64/490/140 63/488/138 111/588/194 107/578/190 +f 125/616/206 123/612/204 60/483/133 59/479/129 +f 39/438/90 79/508/158 75/500/150 40/439/91 +f 35/430/82 34/427/79 99/562/182 95/548/174 +f 55/471/121 109/584/192 113/560/180 56/473/123 +f 55/471/121 54/469/119 105/574/188 109/584/192 +f 49/458/110 48/455/107 81/518/160 85/526/164 +f 353/556/178 321/555/177 346/424/76 354/423/75 +f 36/432/84 35/430/82 95/548/174 91/540/170 +f 43/446/98 42/444/96 65/494/144 66/492/142 +f 45/449/101 68/498/148 73/503/153 46/452/104 +f 46/452/104 73/503/153 77/506/156 47/453/105 +f 44/447/99 67/491/141 68/498/148 45/449/101 +f 52/465/115 97/552/176 101/566/184 53/468/118 +f 34/427/79 33/426/78 103/570/186 99/562/182 +f 89/534/168 50/459/111 49/458/110 85/526/164 +f 449/849/279 450/850/280 451/851/281 452/852/282 +f 456/853/283 457/854/284 450/850/280 449/849/279 +f 452/852/282 451/851/281 458/855/285 453/856/286 +f 453/856/286 458/855/285 459/857/287 454/858/288 +f 454/859/288 459/860/287 460/861/289 455/862/290 +f 455/862/290 460/861/289 457/854/284 456/853/283 +f 461/863/291 462/864/287 463/865/285 464/866/292 +f 468/867/293 469/868/289 462/864/287 461/863/291 +f 464/866/292 463/865/285 470/869/281 465/870/294 +f 465/870/294 470/869/281 471/871/280 466/872/295 +f 466/873/295 471/874/280 472/875/284 467/876/296 +f 467/876/296 472/875/284 469/868/289 468/867/293 +f 473/877/297 474/878/1 475/879/298 476/880/299 +f 480/881/300 481/882/301 474/878/1 473/877/297 +f 476/880/299 475/879/298 482/883/302 477/884/303 +f 477/884/303 482/883/302 483/885/3 478/886/304 +f 478/887/304 483/888/3 484/889/305 479/890/306 +f 479/890/306 484/889/305 481/882/301 480/881/300 +f 485/891/307 486/892/3 487/893/302 488/894/308 +f 492/895/309 493/896/305 486/892/3 485/891/307 +f 488/894/308 487/893/302 494/897/298 489/898/310 +f 489/898/310 494/897/298 495/899/1 490/900/311 +f 490/901/311 495/902/1 496/903/301 491/904/312 +f 491/904/312 496/903/301 493/896/305 492/895/309 +f 497/905/313 498/906/314 499/907/315 500/908/316 +f 504/909/317 505/910/318 498/906/314 497/905/313 +f 500/908/316 499/907/315 506/911/319 501/912/320 +f 501/912/320 506/911/319 507/913/321 502/914/322 +f 502/915/322 507/916/321 508/917/323 503/918/324 +f 503/918/324 508/917/323 505/910/318 504/909/317 +f 509/919/325 510/920/321 511/921/319 512/922/326 +f 516/923/327 517/924/323 510/920/321 509/919/325 +f 512/922/326 511/921/319 518/925/315 513/926/328 +f 513/926/328 518/925/315 519/927/314 514/928/329 +f 514/929/329 519/930/314 520/931/318 515/932/330 +f 515/932/330 520/931/318 517/924/323 516/923/327 +f 521/933/331 522/934/5 523/935/332 524/936/333 +f 528/937/334 529/938/335 522/934/5 521/933/331 +f 524/936/333 523/935/332 530/939/336 525/940/337 +f 525/940/337 530/939/336 531/941/4 526/942/338 +f 526/943/338 531/944/4 532/945/339 527/946/340 +f 527/946/340 532/945/339 529/938/335 528/937/334 +f 533/947/341 534/948/4 535/949/336 536/950/342 +f 540/951/343 541/952/339 534/948/4 533/947/341 +f 536/950/342 535/949/336 542/953/332 537/954/344 +f 537/954/344 542/953/332 543/955/5 538/956/345 +f 538/957/345 543/958/5 544/959/335 539/960/346 +f 539/960/346 544/959/335 541/952/339 540/951/343 +f 545/961/288 546/962/287 547/963/289 548/964/290 +f 552/965/286 553/966/285 546/962/287 545/961/288 +f 548/964/290 547/963/289 554/967/284 549/968/283 +f 549/968/283 554/967/284 555/969/280 550/970/279 +f 550/971/279 555/972/280 556/973/281 551/974/282 +f 551/974/282 556/973/281 553/966/285 552/965/286 +f 557/975/295 558/976/280 559/977/284 560/978/296 +f 564/979/294 565/980/281 558/976/280 557/975/295 +f 560/978/296 559/977/284 566/981/289 561/982/293 +f 561/982/293 566/981/289 567/983/287 562/984/291 +f 562/985/291 567/986/287 568/987/285 563/988/292 +f 563/988/292 568/987/285 565/980/281 564/979/294 +f 569/989/304 570/990/3 571/991/305 572/992/306 +f 576/993/303 577/994/302 570/990/3 569/989/304 +f 572/992/306 571/991/305 578/995/301 573/996/300 +f 573/996/300 578/995/301 579/997/1 574/998/297 +f 574/999/297 579/1000/1 580/1001/298 575/1002/299 +f 575/1002/299 580/1001/298 577/994/302 576/993/303 +f 581/1003/311 582/1004/1 583/1005/301 584/1006/312 +f 588/1007/310 589/1008/298 582/1004/1 581/1003/311 +f 584/1006/312 583/1005/301 590/1009/305 585/1010/309 +f 585/1010/309 590/1009/305 591/1011/3 586/1012/307 +f 586/1013/307 591/1014/3 592/1015/302 587/1016/308 +f 587/1016/308 592/1015/302 589/1008/298 588/1007/310 +f 593/1017/322 594/1018/321 595/1019/323 596/1020/324 +f 600/1021/320 601/1022/319 594/1018/321 593/1017/322 +f 596/1020/324 595/1019/323 602/1023/318 597/1024/317 +f 597/1024/317 602/1023/318 603/1025/314 598/1026/313 +f 598/1027/313 603/1028/314 604/1029/315 599/1030/316 +f 599/1030/316 604/1029/315 601/1022/319 600/1021/320 +f 605/1031/329 606/1032/314 607/1033/318 608/1034/330 +f 612/1035/328 613/1036/315 606/1032/314 605/1031/329 +f 608/1034/330 607/1033/318 614/1037/323 609/1038/327 +f 609/1038/327 614/1037/323 615/1039/321 610/1040/325 +f 610/1041/325 615/1042/321 616/1043/319 611/1044/326 +f 611/1044/326 616/1043/319 613/1036/315 612/1035/328 +f 617/1045/338 618/1046/4 619/1047/339 620/1048/340 +f 624/1049/337 625/1050/336 618/1046/4 617/1045/338 +f 620/1048/340 619/1047/339 626/1051/335 621/1052/334 +f 621/1052/334 626/1051/335 627/1053/5 622/1054/331 +f 622/1055/331 627/1056/5 628/1057/332 623/1058/333 +f 623/1058/333 628/1057/332 625/1050/336 624/1049/337 +f 629/1059/345 630/1060/5 631/1061/335 632/1062/346 +f 636/1063/344 637/1064/332 630/1060/5 629/1059/345 +f 632/1062/346 631/1061/335 638/1065/339 633/1066/343 +f 633/1066/343 638/1065/339 639/1067/4 634/1068/341 +f 634/1069/341 639/1070/4 640/1071/336 635/1072/342 +f 635/1072/342 640/1071/336 637/1064/332 636/1063/344 +f 38/436/88 83/522/162 79/508/158 39/438/90 +f 81/518/160 48/455/107 47/453/105 77/506/156 +f 51/464/114 93/553/172 97/552/176 52/465/115 diff --git a/mods/pipeworks/models/pipeworks_entry_panel_lowpoly.obj b/mods/pipeworks/models/pipeworks_entry_panel_lowpoly.obj new file mode 100755 index 0000000..aa4b4fd --- /dev/null +++ b/mods/pipeworks/models/pipeworks_entry_panel_lowpoly.obj @@ -0,0 +1,236 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-entry-panel-lowpoly.blend' +# www.blender.org +o Cylinder.000 +v -0.500000 0.500000 -0.062500 +v 0.500000 0.500000 -0.062500 +v 0.500000 -0.500000 -0.062500 +v -0.500000 -0.500000 -0.062500 +v 0.500000 0.500000 0.062500 +v 0.500000 -0.500000 0.062500 +v -0.500000 0.500000 0.062500 +v -0.500000 -0.500000 0.062500 +v -0.156250 -0.064721 0.500000 +v -0.156250 -0.064721 0.468750 +v -0.064721 -0.156250 0.500000 +v -0.064721 -0.156250 0.468750 +v 0.064721 -0.156250 0.500000 +v 0.064721 -0.156250 0.468750 +v 0.156250 -0.064721 0.500000 +v 0.156250 -0.064721 0.468750 +v 0.156250 0.064721 0.500000 +v 0.156250 0.064721 0.468750 +v 0.064721 0.156250 0.500000 +v 0.064721 0.156250 0.468750 +v -0.064721 0.156250 0.500000 +v -0.064721 0.156250 0.468750 +v -0.156250 0.064721 0.500000 +v -0.156250 0.064721 0.468750 +v -0.125000 -0.051777 0.468750 +v -0.125000 -0.051777 -0.468750 +v -0.051777 -0.125000 0.468750 +v -0.051777 -0.125000 -0.468750 +v 0.051777 -0.125000 0.468750 +v 0.051777 -0.125000 -0.468750 +v 0.125000 -0.051777 0.468750 +v 0.125000 -0.051777 -0.468750 +v 0.125000 0.051777 0.468750 +v 0.125000 0.051777 -0.468750 +v 0.051777 0.125000 0.468750 +v 0.051777 0.125000 -0.468750 +v -0.051777 0.125000 0.468750 +v -0.051777 0.125000 -0.468750 +v -0.125000 0.051777 0.468750 +v -0.125000 0.051777 -0.468750 +v -0.156250 -0.064721 -0.468750 +v -0.156250 -0.064721 -0.500000 +v -0.064721 -0.156250 -0.468750 +v -0.064721 -0.156250 -0.500000 +v 0.064721 -0.156250 -0.468750 +v 0.064721 -0.156250 -0.500000 +v 0.156250 -0.064721 -0.468750 +v 0.156250 -0.064721 -0.500000 +v 0.156250 0.064721 -0.468750 +v 0.156250 0.064721 -0.500000 +v 0.064721 0.156250 -0.468750 +v 0.064721 0.156250 -0.500000 +v -0.064721 0.156250 -0.468750 +v -0.064721 0.156250 -0.500000 +v -0.156250 0.064721 -0.468750 +v -0.156250 0.064721 -0.500000 +vt 0.5076 0.5076 +vt 0.9924 0.5076 +vt 0.9924 0.9924 +vt 0.5076 0.9924 +vt 0.0682 0.4924 +vt 0.0076 0.4924 +vt 0.0076 0.0076 +vt 0.0682 0.0076 +vt 0.4924 0.9924 +vt 0.0076 0.9924 +vt 0.0076 0.5076 +vt 0.4924 0.5076 +vt 0.2955 0.4924 +vt 0.2348 0.4924 +vt 0.2348 0.0076 +vt 0.2955 0.0076 +vt 0.2197 0.0076 +vt 0.2197 0.4924 +vt 0.1591 0.4924 +vt 0.1591 0.0076 +vt 0.0833 0.4924 +vt 0.0833 0.0076 +vt 0.1439 0.0076 +vt 0.1439 0.4924 +vt 0.8561 0.4318 +vt 0.8106 0.4773 +vt 0.7500 0.4773 +vt 0.7045 0.4318 +vt 0.7045 0.3712 +vt 0.7500 0.3258 +vt 0.8106 0.3258 +vt 0.8561 0.3712 +vt 0.6288 0.4773 +vt 0.6742 0.4318 +vt 0.6742 0.3712 +vt 0.6288 0.3258 +vt 0.5682 0.3258 +vt 0.5227 0.3712 +vt 0.5227 0.4318 +vt 0.5682 0.4773 +vt 0.6742 0.4318 +vt 0.6288 0.4773 +vt 0.5682 0.4773 +vt 0.5227 0.4318 +vt 0.5227 0.3712 +vt 0.5682 0.3258 +vt 0.6288 0.3258 +vt 0.6742 0.3712 +vt 0.8106 0.4773 +vt 0.8561 0.4318 +vt 0.8561 0.3712 +vt 0.8106 0.3258 +vt 0.7500 0.3258 +vt 0.7045 0.3712 +vt 0.7045 0.4318 +vt 0.7500 0.4773 +vt 0.9015 0.2879 +vt 0.9015 0.2727 +vt 0.9318 0.2727 +vt 0.9318 0.2879 +vt 0.9621 0.2727 +vt 0.9621 0.2879 +vt 0.9924 0.2727 +vt 0.9924 0.2879 +vt 0.7500 0.2879 +vt 0.7500 0.2727 +vt 0.7803 0.2727 +vt 0.7803 0.2879 +vt 0.8106 0.2727 +vt 0.8106 0.2879 +vt 0.8409 0.2727 +vt 0.8409 0.2879 +vt 0.8712 0.2727 +vt 0.8712 0.2879 +vt 0.6894 0.2879 +vt 0.6894 0.2727 +vt 0.7197 0.2727 +vt 0.7197 0.2879 +vt 0.6591 0.2879 +vt 0.6591 0.2727 +vt 0.7500 0.2727 +vt 0.7500 0.2879 +vt 0.5076 0.2879 +vt 0.5076 0.2727 +vt 0.5379 0.2727 +vt 0.5379 0.2879 +vt 0.5682 0.2727 +vt 0.5682 0.2879 +vt 0.5985 0.2727 +vt 0.5985 0.2879 +vt 0.6288 0.2727 +vt 0.6288 0.2879 +vt 0.5227 0.2197 +vt 0.5227 0.1894 +vt 0.9924 0.1894 +vt 0.9924 0.2197 +vt 0.9924 0.2500 +vt 0.5227 0.2500 +vt 0.9924 0.0379 +vt 0.9924 0.0682 +vt 0.5227 0.0682 +vt 0.5227 0.0379 +vt 0.5227 0.1591 +vt 0.9924 0.1591 +vt 0.5227 0.1288 +vt 0.5227 0.0985 +vt 0.9924 0.0985 +vt 0.9924 0.1288 +vt 0.9924 0.0076 +vt 0.5227 0.0076 +vn 0.0000 -0.0000 -1.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 -0.6302 +vn -0.2971 -0.7173 -0.6302 +vn -0.2971 -0.7173 0.6302 +vn 0.2971 -0.7173 -0.6302 +vn 0.2971 -0.7173 0.6302 +vn 0.7173 -0.2971 -0.6302 +vn 0.7173 -0.2971 0.6302 +vn 0.7173 0.2971 -0.6302 +vn 0.7173 0.2971 0.6302 +vn 0.2971 0.7173 -0.6302 +vn 0.2971 0.7173 0.6302 +vn -0.2971 0.7173 -0.6302 +vn -0.2971 0.7173 0.6302 +vn -0.7173 0.2971 -0.6302 +vn -0.7173 0.2971 0.6302 +vn 0.9239 -0.3827 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.9239 -0.3827 0.0000 +vn 0.3827 0.9239 0.0000 +vn -0.3827 0.9239 0.0000 +vn -0.9239 0.3827 0.0000 +g Cylinder.000_Cylinder.000_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/5/2 5/6/2 6/7/2 3/8/2 +f 5/9/3 7/10/3 8/11/3 6/12/3 +f 7/13/4 1/14/4 4/15/4 8/16/4 +f 4/17/5 3/18/5 6/19/5 8/20/5 +f 7/21/6 5/22/6 2/23/6 1/24/6 +f 12/25/1 10/26/1 24/27/1 22/28/1 20/29/1 18/30/1 16/31/1 14/32/1 +f 9/33/3 11/34/3 13/35/3 15/36/3 17/37/3 19/38/3 21/39/3 23/40/3 +f 44/41/1 42/42/1 56/43/1 54/44/1 52/45/1 50/46/1 48/47/1 46/48/1 +f 41/49/3 43/50/3 45/51/3 47/52/3 49/53/3 51/54/3 53/55/3 55/56/3 +s 1 +f 9/57/7 10/58/8 12/59/9 11/60/10 +f 11/60/10 12/59/9 14/61/11 13/62/12 +f 13/62/12 14/61/11 16/63/13 15/64/14 +f 15/65/14 16/66/13 18/67/15 17/68/16 +f 17/68/16 18/67/15 20/69/17 19/70/18 +f 19/70/18 20/69/17 22/71/19 21/72/20 +f 21/72/20 22/71/19 24/73/21 23/74/22 +f 23/74/22 24/73/21 10/58/8 9/57/7 +f 43/75/10 44/76/9 46/77/11 45/78/12 +f 41/79/7 42/80/8 44/76/9 43/75/10 +f 45/78/12 46/77/11 48/81/13 47/82/14 +f 47/83/14 48/84/13 50/85/15 49/86/16 +f 49/86/16 50/85/15 52/87/17 51/88/18 +f 51/88/18 52/87/17 54/89/19 53/90/20 +f 53/90/20 54/89/19 56/91/21 55/92/22 +f 55/92/22 56/91/21 42/80/8 41/79/7 +f 32/93/23 34/94/24 33/95/24 31/96/23 +f 32/93/23 31/96/23 29/97/25 30/98/25 +f 27/99/26 25/100/27 26/101/27 28/102/26 +f 34/94/24 36/103/28 35/104/28 33/95/24 +f 38/105/29 40/106/30 39/107/30 37/108/29 +f 38/105/29 37/108/29 35/104/28 36/103/28 +f 29/109/25 27/99/26 28/102/26 30/110/25 +f 25/100/27 39/107/30 40/106/30 26/101/27 diff --git a/mods/pipeworks/models/pipeworks_flow_sensor.obj b/mods/pipeworks/models/pipeworks_flow_sensor.obj new file mode 100755 index 0000000..3545c1b --- /dev/null +++ b/mods/pipeworks/models/pipeworks_flow_sensor.obj @@ -0,0 +1,6675 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-flow-sensor.blend' +# www.blender.org +o Cube.001 +v -0.187500 -0.055390 -0.000000 +v -0.188167 0.054326 0.010598 +v -0.188807 0.051174 0.020790 +v -0.189398 0.046055 0.030182 +v -0.189916 0.039167 0.038414 +v -0.190340 0.030773 0.045170 +v -0.190656 0.021197 0.050191 +v -0.190850 0.010806 0.053282 +v -0.190916 0.000000 0.054326 +v -0.190850 -0.010806 0.053282 +v -0.190656 -0.021197 0.050191 +v -0.190340 -0.030773 0.045170 +v -0.189916 -0.039167 0.038414 +v -0.189398 -0.046055 0.030182 +v -0.188807 -0.051174 0.020790 +v -0.188167 -0.054326 0.010598 +v -0.188807 0.054326 0.009983 +v -0.190064 0.051174 0.019583 +v -0.191223 0.046055 0.028431 +v -0.192238 0.039167 0.036185 +v -0.193071 0.030773 0.042549 +v -0.193690 0.021197 0.047278 +v -0.194072 0.010806 0.050191 +v -0.194200 0.000000 0.051174 +v -0.194072 -0.010806 0.050191 +v -0.193690 -0.021197 0.047278 +v -0.193071 -0.030773 0.042549 +v -0.192238 -0.039167 0.036185 +v -0.191223 -0.046055 0.028431 +v -0.190064 -0.051174 0.019583 +v -0.188807 -0.054326 0.009983 +v -0.189398 0.054326 0.008985 +v -0.191223 0.051174 0.017624 +v -0.192904 0.046055 0.025587 +v -0.194378 0.039167 0.032566 +v -0.195588 0.030773 0.038293 +v -0.196487 0.021197 0.042549 +v -0.197040 0.010806 0.045170 +v -0.197227 0.000000 0.046055 +v -0.197040 -0.010806 0.045170 +v -0.196487 -0.021197 0.042549 +v -0.195588 -0.030773 0.038293 +v -0.194378 -0.039167 0.032566 +v -0.192904 -0.046055 0.025587 +v -0.191223 -0.051174 0.017624 +v -0.189398 -0.054326 0.008985 +v -0.189916 0.054326 0.007641 +v -0.192238 0.051174 0.014988 +v -0.194378 0.046055 0.021760 +v -0.196254 0.039167 0.027695 +v -0.197794 0.030773 0.032566 +v -0.198938 0.021197 0.036185 +v -0.199643 0.010806 0.038414 +v -0.199880 0.000000 0.039167 +v -0.199643 -0.010806 0.038414 +v -0.198938 -0.021197 0.036185 +v -0.197794 -0.030773 0.032566 +v -0.196254 -0.039167 0.027695 +v -0.194378 -0.046055 0.021760 +v -0.192238 -0.051174 0.014988 +v -0.189916 -0.054326 0.007641 +v -0.190340 0.054326 0.006003 +v -0.193071 0.051174 0.011776 +v -0.195588 0.046055 0.017097 +v -0.197794 0.039167 0.021760 +v -0.199604 0.030773 0.025587 +v -0.200950 0.021197 0.028431 +v -0.201778 0.010806 0.030182 +v -0.202058 0.000000 0.030773 +v -0.201778 -0.010806 0.030182 +v -0.200950 -0.021197 0.028431 +v -0.199604 -0.030773 0.025587 +v -0.197794 -0.039167 0.021760 +v -0.195588 -0.046055 0.017097 +v -0.193071 -0.051174 0.011776 +v -0.190340 -0.054326 0.006003 +v -0.190656 0.054326 0.004135 +v -0.193690 0.051174 0.008112 +v -0.196487 0.046055 0.011776 +v -0.198938 0.039167 0.014988 +v -0.200950 0.030773 0.017624 +v -0.202444 0.021197 0.019583 +v -0.203365 0.010806 0.020789 +v -0.203676 0.000000 0.021197 +v -0.203365 -0.010806 0.020789 +v -0.202444 -0.021197 0.019583 +v -0.200950 -0.030773 0.017624 +v -0.198938 -0.039167 0.014988 +v -0.196487 -0.046055 0.011776 +v -0.193690 -0.051174 0.008112 +v -0.190656 -0.054326 0.004135 +v -0.190850 0.054326 0.002108 +v -0.194072 0.051174 0.004135 +v -0.197040 0.046055 0.006003 +v -0.199643 0.039167 0.007641 +v -0.201778 0.030773 0.008985 +v -0.203365 0.021197 0.009983 +v -0.204342 0.010806 0.010598 +v -0.204672 0.000000 0.010806 +v -0.204342 -0.010806 0.010598 +v -0.203365 -0.021197 0.009983 +v -0.201778 -0.030773 0.008985 +v -0.199643 -0.039167 0.007641 +v -0.197040 -0.046055 0.006003 +v -0.194072 -0.051174 0.004135 +v -0.190850 -0.054326 0.002108 +v -0.190916 0.054326 -0.000000 +v -0.194200 0.051174 -0.000000 +v -0.197227 0.046055 -0.000000 +v -0.199880 0.039167 -0.000000 +v -0.202058 0.030773 -0.000000 +v -0.203676 0.021197 -0.000000 +v -0.204672 0.010806 -0.000000 +v -0.205008 0.000000 -0.000000 +v -0.204672 -0.010806 -0.000000 +v -0.203676 -0.021197 -0.000000 +v -0.202058 -0.030773 -0.000000 +v -0.199880 -0.039167 -0.000000 +v -0.197227 -0.046055 -0.000000 +v -0.194200 -0.051174 -0.000000 +v -0.190916 -0.054326 -0.000000 +v -0.190850 0.054326 -0.002108 +v -0.194072 0.051174 -0.004136 +v -0.197040 0.046055 -0.006004 +v -0.199643 0.039167 -0.007641 +v -0.201778 0.030773 -0.008985 +v -0.203365 0.021197 -0.009984 +v -0.204342 0.010806 -0.010599 +v -0.204672 0.000000 -0.010806 +v -0.204342 -0.010806 -0.010599 +v -0.203365 -0.021197 -0.009984 +v -0.201778 -0.030773 -0.008985 +v -0.199643 -0.039167 -0.007641 +v -0.197040 -0.046055 -0.006004 +v -0.194072 -0.051174 -0.004136 +v -0.190850 -0.054326 -0.002108 +v -0.190656 0.054326 -0.004136 +v -0.193690 0.051174 -0.008112 +v -0.196487 0.046055 -0.011777 +v -0.198938 0.039167 -0.014989 +v -0.200950 0.030773 -0.017625 +v -0.202444 0.021197 -0.019584 +v -0.203365 0.010806 -0.020790 +v -0.203676 0.000000 -0.021197 +v -0.203365 -0.010806 -0.020790 +v -0.202444 -0.021197 -0.019584 +v -0.200950 -0.030773 -0.017625 +v -0.198938 -0.039167 -0.014989 +v -0.196487 -0.046055 -0.011777 +v -0.193690 -0.051174 -0.008112 +v -0.190656 -0.054326 -0.004136 +v -0.190340 0.054326 -0.006004 +v -0.193071 0.051174 -0.011777 +v -0.195588 0.046055 -0.017097 +v -0.197794 0.039167 -0.021760 +v -0.199604 0.030773 -0.025587 +v -0.200950 0.021197 -0.028431 +v -0.201778 0.010806 -0.030182 +v -0.202058 0.000000 -0.030773 +v -0.201778 -0.010806 -0.030182 +v -0.200950 -0.021197 -0.028431 +v -0.199604 -0.030773 -0.025587 +v -0.197794 -0.039167 -0.021760 +v -0.195588 -0.046055 -0.017097 +v -0.193071 -0.051174 -0.011777 +v -0.190340 -0.054326 -0.006004 +v -0.189916 0.054326 -0.007641 +v -0.192238 0.051174 -0.014989 +v -0.194378 0.046055 -0.021760 +v -0.196254 0.039167 -0.027695 +v -0.197794 0.030773 -0.032566 +v -0.198938 0.021197 -0.036186 +v -0.199643 0.010806 -0.038415 +v -0.199880 0.000000 -0.039167 +v -0.199643 -0.010806 -0.038415 +v -0.198938 -0.021197 -0.036186 +v -0.197794 -0.030773 -0.032566 +v -0.196254 -0.039167 -0.027695 +v -0.194378 -0.046055 -0.021760 +v -0.192238 -0.051174 -0.014989 +v -0.189916 -0.054326 -0.007641 +v -0.189398 0.054326 -0.008985 +v -0.191223 0.051174 -0.017625 +v -0.192904 0.046055 -0.025587 +v -0.194378 0.039167 -0.032566 +v -0.195588 0.030773 -0.038294 +v -0.196487 0.021197 -0.042550 +v -0.197040 0.010806 -0.045171 +v -0.197227 0.000000 -0.046056 +v -0.197040 -0.010806 -0.045171 +v -0.196487 -0.021197 -0.042550 +v -0.195588 -0.030773 -0.038294 +v -0.194378 -0.039167 -0.032566 +v -0.192904 -0.046055 -0.025587 +v -0.191223 -0.051174 -0.017625 +v -0.189398 -0.054326 -0.008985 +v -0.188807 0.054326 -0.009984 +v -0.190064 0.051174 -0.019584 +v -0.191223 0.046055 -0.028431 +v -0.192238 0.039167 -0.036186 +v -0.193071 0.030773 -0.042550 +v -0.193690 0.021197 -0.047279 +v -0.194072 0.010806 -0.050191 +v -0.194200 0.000000 -0.051174 +v -0.194072 -0.010806 -0.050191 +v -0.193690 -0.021197 -0.047279 +v -0.193071 -0.030773 -0.042550 +v -0.192238 -0.039167 -0.036186 +v -0.191223 -0.046055 -0.028431 +v -0.190064 -0.051174 -0.019584 +v -0.188807 -0.054326 -0.009984 +v -0.188167 0.054326 -0.010599 +v -0.188807 0.051174 -0.020790 +v -0.189398 0.046055 -0.030182 +v -0.189916 0.039167 -0.038415 +v -0.190340 0.030773 -0.045171 +v -0.190656 0.021197 -0.050191 +v -0.190850 0.010806 -0.053282 +v -0.190916 0.000000 -0.054326 +v -0.190850 -0.010806 -0.053282 +v -0.190656 -0.021197 -0.050191 +v -0.190340 -0.030773 -0.045171 +v -0.189916 -0.039167 -0.038415 +v -0.189398 -0.046055 -0.030182 +v -0.188807 -0.051174 -0.020790 +v -0.188167 -0.054326 -0.010599 +v -0.187500 0.054326 -0.010806 +v -0.187500 0.051174 -0.021197 +v -0.187500 0.046055 -0.030773 +v -0.187500 0.039167 -0.039167 +v -0.187500 0.030773 -0.046056 +v -0.187500 0.021197 -0.051174 +v -0.187500 0.010806 -0.054326 +v -0.187500 0.000000 -0.055391 +v -0.187500 -0.010806 -0.054326 +v -0.187500 -0.021197 -0.051174 +v -0.187500 -0.030773 -0.046056 +v -0.187500 -0.039167 -0.039167 +v -0.187500 -0.046055 -0.030773 +v -0.187500 -0.051174 -0.021197 +v -0.187500 -0.054326 -0.010806 +v 0.188807 0.051174 -0.020790 +v 0.189398 0.046055 -0.030182 +v 0.189916 0.039167 -0.038415 +v 0.190340 0.030773 -0.045171 +v 0.190656 0.021197 -0.050191 +v 0.190850 0.010806 -0.053282 +v 0.190916 -0.000000 -0.054326 +v 0.190850 -0.010806 -0.053282 +v 0.190656 -0.021197 -0.050191 +v 0.190340 -0.030773 -0.045171 +v 0.189916 -0.039167 -0.038415 +v 0.189398 -0.046055 -0.030182 +v 0.188807 -0.051174 -0.020790 +v 0.188167 -0.054326 -0.010599 +v 0.188807 0.054326 -0.009984 +v -0.187500 0.055390 -0.000000 +v 0.190064 0.051174 -0.019584 +v 0.191223 0.046055 -0.028431 +v 0.192238 0.039167 -0.036186 +v 0.193071 0.030773 -0.042550 +v 0.193690 0.021197 -0.047279 +v 0.194072 0.010806 -0.050191 +v 0.194200 -0.000000 -0.051174 +v 0.194072 -0.010806 -0.050191 +v 0.193690 -0.021197 -0.047279 +v 0.193071 -0.030773 -0.042550 +v 0.192238 -0.039167 -0.036186 +v 0.191223 -0.046055 -0.028431 +v 0.190064 -0.051174 -0.019584 +v 0.188807 -0.054326 -0.009984 +v 0.189398 0.054326 -0.008985 +v 0.191223 0.051174 -0.017625 +v 0.192904 0.046055 -0.025587 +v 0.194378 0.039167 -0.032566 +v 0.195588 0.030773 -0.038294 +v 0.196487 0.021197 -0.042550 +v 0.197040 0.010806 -0.045171 +v 0.197227 -0.000000 -0.046056 +v 0.197040 -0.010806 -0.045171 +v 0.196487 -0.021197 -0.042550 +v 0.195588 -0.030773 -0.038294 +v 0.194378 -0.039167 -0.032566 +v 0.192904 -0.046055 -0.025587 +v 0.191223 -0.051174 -0.017625 +v 0.189398 -0.054326 -0.008985 +v 0.189916 0.054326 -0.007641 +v 0.192238 0.051174 -0.014989 +v 0.194378 0.046055 -0.021760 +v 0.196254 0.039167 -0.027695 +v 0.197794 0.030773 -0.032566 +v 0.198938 0.021197 -0.036186 +v 0.199643 0.010806 -0.038415 +v 0.199880 -0.000000 -0.039167 +v 0.199643 -0.010806 -0.038415 +v 0.198938 -0.021197 -0.036186 +v 0.197794 -0.030773 -0.032566 +v 0.196254 -0.039167 -0.027695 +v 0.194378 -0.046055 -0.021760 +v 0.192238 -0.051174 -0.014989 +v 0.189916 -0.054326 -0.007641 +v 0.190340 0.054326 -0.006004 +v 0.193071 0.051174 -0.011777 +v 0.195588 0.046055 -0.017097 +v 0.197794 0.039167 -0.021760 +v 0.199604 0.030773 -0.025587 +v 0.200950 0.021197 -0.028431 +v 0.201778 0.010806 -0.030182 +v 0.202058 -0.000000 -0.030773 +v 0.201778 -0.010806 -0.030182 +v 0.200950 -0.021197 -0.028431 +v 0.199604 -0.030773 -0.025587 +v 0.197794 -0.039167 -0.021760 +v 0.195588 -0.046055 -0.017097 +v 0.193071 -0.051174 -0.011777 +v 0.190340 -0.054326 -0.006004 +v 0.190656 0.054326 -0.004136 +v 0.193690 0.051174 -0.008112 +v 0.196487 0.046055 -0.011777 +v 0.198938 0.039167 -0.014989 +v 0.200950 0.030773 -0.017625 +v 0.202444 0.021197 -0.019584 +v 0.203365 0.010806 -0.020790 +v 0.203676 -0.000000 -0.021197 +v 0.203365 -0.010806 -0.020790 +v 0.202444 -0.021197 -0.019584 +v 0.200950 -0.030773 -0.017625 +v 0.198938 -0.039167 -0.014989 +v 0.196487 -0.046055 -0.011777 +v 0.193690 -0.051174 -0.008112 +v 0.190656 -0.054326 -0.004136 +v 0.190850 0.054326 -0.002108 +v 0.194072 0.051174 -0.004136 +v 0.197040 0.046055 -0.006004 +v 0.199643 0.039167 -0.007641 +v 0.201778 0.030773 -0.008985 +v 0.203365 0.021197 -0.009984 +v 0.204342 0.010806 -0.010599 +v 0.204672 -0.000000 -0.010806 +v 0.204342 -0.010806 -0.010599 +v 0.203365 -0.021197 -0.009984 +v 0.201778 -0.030773 -0.008985 +v 0.199643 -0.039167 -0.007641 +v 0.197040 -0.046055 -0.006004 +v 0.194072 -0.051174 -0.004136 +v 0.190850 -0.054326 -0.002108 +v 0.190916 0.054326 -0.000000 +v 0.194200 0.051174 -0.000000 +v 0.197227 0.046055 -0.000000 +v 0.199880 0.039167 -0.000000 +v 0.202058 0.030773 -0.000000 +v 0.203676 0.021197 -0.000000 +v 0.204672 0.010806 -0.000000 +v 0.205008 -0.000000 -0.000000 +v 0.204672 -0.010806 -0.000000 +v 0.203676 -0.021197 -0.000000 +v 0.202058 -0.030773 -0.000000 +v 0.199880 -0.039167 -0.000000 +v 0.197227 -0.046055 -0.000000 +v 0.194200 -0.051174 -0.000000 +v 0.190916 -0.054326 -0.000000 +v 0.190850 0.054326 0.002108 +v 0.194072 0.051174 0.004135 +v 0.197040 0.046055 0.006003 +v 0.199643 0.039167 0.007641 +v 0.201778 0.030773 0.008985 +v 0.203365 0.021197 0.009983 +v 0.204342 0.010806 0.010598 +v 0.204672 -0.000000 0.010806 +v 0.204342 -0.010806 0.010598 +v 0.203365 -0.021197 0.009983 +v 0.201778 -0.030773 0.008985 +v 0.199643 -0.039167 0.007641 +v 0.197040 -0.046055 0.006003 +v 0.194072 -0.051174 0.004135 +v 0.190850 -0.054326 0.002108 +v 0.190656 0.054326 0.004135 +v 0.193690 0.051174 0.008112 +v 0.196487 0.046055 0.011776 +v 0.198938 0.039167 0.014988 +v 0.200950 0.030773 0.017624 +v 0.202444 0.021197 0.019583 +v 0.203365 0.010806 0.020789 +v 0.203676 -0.000000 0.021197 +v 0.203365 -0.010806 0.020789 +v 0.202444 -0.021197 0.019583 +v 0.200950 -0.030773 0.017624 +v 0.198938 -0.039167 0.014988 +v 0.196487 -0.046055 0.011776 +v 0.193690 -0.051174 0.008112 +v 0.190656 -0.054326 0.004135 +v 0.190340 0.054326 0.006003 +v 0.193071 0.051174 0.011776 +v 0.195588 0.046055 0.017097 +v 0.197794 0.039167 0.021760 +v 0.199604 0.030773 0.025587 +v 0.200950 0.021197 0.028431 +v 0.201778 0.010806 0.030182 +v 0.202058 -0.000000 0.030773 +v 0.201778 -0.010806 0.030182 +v 0.200950 -0.021197 0.028431 +v 0.199604 -0.030773 0.025587 +v 0.197794 -0.039167 0.021760 +v 0.195588 -0.046055 0.017097 +v 0.193071 -0.051174 0.011776 +v 0.190340 -0.054326 0.006003 +v 0.189916 0.054326 0.007641 +v 0.192238 0.051174 0.014988 +v 0.194378 0.046055 0.021760 +v 0.196254 0.039167 0.027695 +v 0.197794 0.030773 0.032566 +v 0.198938 0.021197 0.036185 +v 0.199643 0.010806 0.038414 +v 0.199880 -0.000000 0.039167 +v 0.199643 -0.010806 0.038414 +v 0.198938 -0.021197 0.036185 +v 0.197794 -0.030773 0.032566 +v 0.196254 -0.039167 0.027695 +v 0.194378 -0.046055 0.021760 +v 0.192238 -0.051174 0.014988 +v 0.189916 -0.054326 0.007641 +v 0.189398 0.054326 0.008985 +v 0.191223 0.051174 0.017624 +v 0.192904 0.046055 0.025587 +v 0.194378 0.039167 0.032566 +v 0.195588 0.030773 0.038293 +v 0.196487 0.021197 0.042549 +v 0.197040 0.010806 0.045170 +v 0.197227 -0.000000 0.046055 +v 0.197040 -0.010806 0.045170 +v 0.196487 -0.021197 0.042549 +v 0.195588 -0.030773 0.038294 +v 0.194378 -0.039167 0.032566 +v 0.192904 -0.046055 0.025587 +v 0.191223 -0.051174 0.017624 +v 0.189398 -0.054326 0.008985 +v 0.188807 0.054326 0.009983 +v 0.190064 0.051174 0.019583 +v 0.191223 0.046055 0.028431 +v 0.192238 0.039167 0.036185 +v 0.193071 0.030773 0.042549 +v 0.193690 0.021197 0.047278 +v 0.194072 0.010806 0.050191 +v 0.194200 -0.000000 0.051174 +v 0.194072 -0.010806 0.050191 +v 0.193690 -0.021197 0.047279 +v 0.193071 -0.030773 0.042550 +v 0.192238 -0.039167 0.036185 +v 0.191223 -0.046055 0.028431 +v 0.190064 -0.051174 0.019583 +v 0.188807 -0.054326 0.009983 +v 0.188167 0.054326 0.010598 +v 0.188807 0.051174 0.020789 +v 0.189398 0.046055 0.030182 +v 0.189916 0.039167 0.038414 +v 0.190340 0.030773 0.045170 +v 0.190656 0.021197 0.050191 +v 0.190850 0.010806 0.053282 +v 0.190916 -0.000000 0.054326 +v 0.190850 -0.010806 0.053282 +v 0.190656 -0.021197 0.050191 +v 0.190340 -0.030773 0.045170 +v 0.189916 -0.039167 0.038414 +v 0.189398 -0.046055 0.030182 +v 0.188807 -0.051174 0.020790 +v 0.188167 -0.054326 0.010598 +v 0.187500 0.055390 -0.000000 +v -0.187500 0.054326 0.010806 +v -0.187500 0.051174 0.021197 +v -0.187500 0.046055 0.030773 +v -0.187500 0.039167 0.039167 +v -0.187500 0.030773 0.046055 +v -0.187500 0.021197 0.051174 +v -0.187500 0.010806 0.054326 +v -0.187500 0.000000 0.055390 +v -0.187500 -0.010806 0.054326 +v -0.187500 -0.021197 0.051174 +v -0.187500 -0.030773 0.046055 +v -0.187500 -0.039167 0.039167 +v -0.187500 -0.046055 0.030773 +v -0.187500 -0.051174 0.021197 +v -0.187500 -0.054326 0.010806 +v 0.188167 0.054326 -0.010599 +v 0.187500 -0.054326 -0.010806 +v 0.187500 -0.051174 -0.021197 +v 0.187500 -0.046055 -0.030773 +v 0.187500 -0.039167 -0.039167 +v 0.187500 -0.030773 -0.046056 +v 0.187500 -0.021197 -0.051174 +v 0.187500 -0.010806 -0.054326 +v 0.187500 -0.000000 -0.055391 +v 0.187500 0.010806 -0.054326 +v 0.187500 0.021197 -0.051174 +v 0.187500 0.030773 -0.046056 +v 0.187500 0.039167 -0.039167 +v 0.187500 0.046055 -0.030773 +v 0.187500 0.051174 -0.021197 +v 0.187500 0.054326 -0.010806 +v 0.187500 -0.055390 -0.000000 +v 0.187500 -0.054326 0.010806 +v 0.187500 -0.051174 0.021197 +v 0.187500 -0.046055 0.030773 +v 0.187500 -0.039167 0.039167 +v 0.187500 -0.030773 0.046055 +v 0.187500 -0.021197 0.051174 +v 0.187500 -0.010806 0.054326 +v 0.187500 -0.000000 0.055390 +v 0.187500 0.010806 0.054326 +v 0.187500 0.021197 0.051174 +v 0.187500 0.030773 0.046055 +v 0.187500 0.039167 0.039167 +v 0.187500 0.046055 0.030773 +v 0.187500 0.051174 0.021197 +v 0.187500 0.054326 0.010806 +v 0.131357 -0.131358 -0.250000 +v 0.187500 -0.131358 -0.193858 +v 0.131357 -0.187500 -0.193858 +v 0.143844 -0.131358 -0.248594 +v 0.155711 -0.131358 -0.244443 +v 0.166360 -0.131358 -0.237753 +v 0.131357 -0.143844 -0.248594 +v 0.144380 -0.144245 -0.246927 +v 0.156136 -0.144191 -0.242574 +v 0.165872 -0.144029 -0.236286 +v 0.131357 -0.155711 -0.244443 +v 0.144302 -0.156129 -0.242548 +v 0.155460 -0.155427 -0.238486 +v 0.164055 -0.154536 -0.233172 +v 0.131357 -0.166360 -0.237753 +v 0.144068 -0.165927 -0.236229 +v 0.154549 -0.164063 -0.233157 +v 0.162048 -0.162048 -0.229469 +v 0.186094 -0.143844 -0.193858 +v 0.181943 -0.155711 -0.193858 +v 0.175253 -0.166360 -0.193858 +v 0.186094 -0.131358 -0.206344 +v 0.184426 -0.144380 -0.206745 +v 0.180074 -0.156136 -0.206692 +v 0.173786 -0.165872 -0.206529 +v 0.181943 -0.131358 -0.218211 +v 0.180048 -0.144302 -0.218629 +v 0.175985 -0.155461 -0.217928 +v 0.170672 -0.164055 -0.217036 +v 0.175253 -0.131358 -0.228860 +v 0.173729 -0.144068 -0.228427 +v 0.170657 -0.154549 -0.226563 +v 0.166969 -0.162048 -0.224548 +v 0.131357 -0.186094 -0.206344 +v 0.131357 -0.181943 -0.218211 +v 0.131357 -0.175253 -0.228860 +v 0.143844 -0.186094 -0.193858 +v 0.144245 -0.184427 -0.206880 +v 0.144191 -0.180074 -0.218636 +v 0.144029 -0.173786 -0.228372 +v 0.155711 -0.181943 -0.193858 +v 0.156129 -0.180048 -0.206802 +v 0.155427 -0.175986 -0.217961 +v 0.154536 -0.170672 -0.226555 +v 0.166360 -0.175253 -0.193858 +v 0.165927 -0.173729 -0.206568 +v 0.164063 -0.170657 -0.217049 +v 0.162048 -0.166969 -0.224548 +v 0.131357 -0.131358 0.250000 +v 0.131357 -0.187500 0.193857 +v 0.187500 -0.131358 0.193857 +v 0.131357 -0.143844 0.248594 +v 0.131357 -0.155711 0.244443 +v 0.131357 -0.166360 0.237753 +v 0.143844 -0.131358 0.248594 +v 0.144245 -0.144380 0.246927 +v 0.144191 -0.156136 0.242574 +v 0.144029 -0.165872 0.236286 +v 0.155711 -0.131358 0.244443 +v 0.156129 -0.144302 0.242548 +v 0.155427 -0.155461 0.238485 +v 0.154536 -0.164055 0.233172 +v 0.166360 -0.131358 0.237753 +v 0.165927 -0.144068 0.236229 +v 0.164063 -0.154549 0.233157 +v 0.162048 -0.162048 0.229469 +v 0.143844 -0.186094 0.193857 +v 0.155711 -0.181943 0.193857 +v 0.166360 -0.175253 0.193857 +v 0.131357 -0.186094 0.206344 +v 0.144380 -0.184427 0.206745 +v 0.156136 -0.180074 0.206691 +v 0.165872 -0.173786 0.206529 +v 0.131357 -0.181943 0.218211 +v 0.144302 -0.180048 0.218629 +v 0.155460 -0.175986 0.217927 +v 0.164055 -0.170672 0.217036 +v 0.131357 -0.175253 0.228860 +v 0.144068 -0.173729 0.228427 +v 0.154549 -0.170657 0.226563 +v 0.162048 -0.166969 0.224548 +v 0.186094 -0.131358 0.206344 +v 0.181943 -0.131358 0.218211 +v 0.175253 -0.131358 0.228860 +v 0.186094 -0.143844 0.193857 +v 0.184426 -0.144245 0.206880 +v 0.180074 -0.144191 0.218636 +v 0.173786 -0.144029 0.228372 +v 0.181943 -0.155711 0.193857 +v 0.180048 -0.156129 0.206802 +v 0.175985 -0.155427 0.217961 +v 0.170672 -0.154536 0.226555 +v 0.175253 -0.166360 0.193857 +v 0.173729 -0.165927 0.206568 +v 0.170657 -0.164063 0.217049 +v 0.166969 -0.162048 0.224548 +v -0.187500 -0.131358 0.193857 +v -0.131358 -0.187500 0.193857 +v -0.131358 -0.131358 0.250000 +v -0.186094 -0.143844 0.193857 +v -0.181943 -0.155711 0.193857 +v -0.175253 -0.166360 0.193857 +v -0.186094 -0.131358 0.206344 +v -0.184427 -0.144380 0.206745 +v -0.180074 -0.156136 0.206691 +v -0.173786 -0.165872 0.206529 +v -0.181943 -0.131358 0.218211 +v -0.180048 -0.144302 0.218629 +v -0.175986 -0.155461 0.217927 +v -0.170672 -0.164055 0.217036 +v -0.175253 -0.131358 0.228860 +v -0.173729 -0.144068 0.228427 +v -0.170658 -0.154549 0.226563 +v -0.166969 -0.162048 0.224548 +v -0.131358 -0.186094 0.206344 +v -0.131358 -0.181943 0.218211 +v -0.131358 -0.175253 0.228860 +v -0.143844 -0.186094 0.193857 +v -0.144245 -0.184427 0.206880 +v -0.144192 -0.180074 0.218636 +v -0.144029 -0.173786 0.228372 +v -0.155711 -0.181943 0.193857 +v -0.156129 -0.180048 0.206802 +v -0.155428 -0.175986 0.217961 +v -0.154536 -0.170672 0.226555 +v -0.166360 -0.175253 0.193857 +v -0.165927 -0.173729 0.206568 +v -0.164063 -0.170657 0.217049 +v -0.162048 -0.166969 0.224548 +v -0.143844 -0.131358 0.248594 +v -0.155711 -0.131358 0.244443 +v -0.166360 -0.131358 0.237753 +v -0.131358 -0.143844 0.248594 +v -0.144380 -0.144245 0.246927 +v -0.156136 -0.144191 0.242574 +v -0.165872 -0.144029 0.236286 +v -0.131358 -0.155711 0.244443 +v -0.144302 -0.156129 0.242548 +v -0.155461 -0.155427 0.238485 +v -0.164055 -0.154536 0.233172 +v -0.131358 -0.166360 0.237753 +v -0.144068 -0.165927 0.236229 +v -0.154549 -0.164063 0.233157 +v -0.162048 -0.162048 0.229469 +v -0.131358 -0.131358 -0.250000 +v -0.131358 -0.187500 -0.193858 +v -0.187500 -0.131358 -0.193858 +v -0.131358 -0.143844 -0.248594 +v -0.131358 -0.155711 -0.244443 +v -0.131358 -0.166360 -0.237753 +v -0.143844 -0.131358 -0.248594 +v -0.144245 -0.144380 -0.246927 +v -0.144192 -0.156136 -0.242574 +v -0.144029 -0.165872 -0.236286 +v -0.155711 -0.131358 -0.244443 +v -0.156129 -0.144302 -0.242548 +v -0.155428 -0.155461 -0.238486 +v -0.154536 -0.164055 -0.233172 +v -0.166360 -0.131358 -0.237753 +v -0.165927 -0.144068 -0.236229 +v -0.164063 -0.154549 -0.233157 +v -0.162048 -0.162048 -0.229469 +v -0.143845 -0.186094 -0.193858 +v -0.155711 -0.181943 -0.193858 +v -0.166360 -0.175253 -0.193858 +v -0.131358 -0.186094 -0.206344 +v -0.144380 -0.184427 -0.206745 +v -0.156136 -0.180074 -0.206692 +v -0.165872 -0.173786 -0.206529 +v -0.131358 -0.181943 -0.218211 +v -0.144302 -0.180048 -0.218629 +v -0.155461 -0.175986 -0.217928 +v -0.164055 -0.170672 -0.217036 +v -0.131358 -0.175253 -0.228860 +v -0.144068 -0.173729 -0.228427 +v -0.154549 -0.170657 -0.226563 +v -0.162048 -0.166969 -0.224548 +v -0.186094 -0.131358 -0.206344 +v -0.181943 -0.131358 -0.218211 +v -0.175253 -0.131358 -0.228860 +v -0.186094 -0.143844 -0.193858 +v -0.184427 -0.144245 -0.206880 +v -0.180074 -0.144191 -0.218636 +v -0.173786 -0.144029 -0.228372 +v -0.181943 -0.155711 -0.193858 +v -0.180048 -0.156129 -0.206802 +v -0.175986 -0.155427 -0.217961 +v -0.170672 -0.154536 -0.226555 +v -0.175253 -0.166360 -0.193858 +v -0.173729 -0.165927 -0.206568 +v -0.170658 -0.164063 -0.217049 +v -0.166969 -0.162048 -0.224548 +v 0.131357 0.131358 -0.250000 +v 0.131357 0.187500 -0.193858 +v 0.187500 0.131358 -0.193858 +v 0.131357 0.143844 -0.248594 +v 0.131357 0.155711 -0.244443 +v 0.131357 0.166360 -0.237753 +v 0.143844 0.131358 -0.248594 +v 0.144245 0.144380 -0.246927 +v 0.144191 0.156136 -0.242574 +v 0.144029 0.165872 -0.236286 +v 0.155711 0.131358 -0.244443 +v 0.156129 0.144302 -0.242548 +v 0.155427 0.155461 -0.238486 +v 0.154536 0.164055 -0.233172 +v 0.166360 0.131358 -0.237753 +v 0.165927 0.144068 -0.236229 +v 0.164063 0.154549 -0.233157 +v 0.162048 0.162048 -0.229469 +v 0.143844 0.186094 -0.193858 +v 0.155711 0.181943 -0.193858 +v 0.166360 0.175253 -0.193858 +v 0.131357 0.186094 -0.206344 +v 0.144379 0.184427 -0.206745 +v 0.156136 0.180074 -0.206692 +v 0.165872 0.173786 -0.206529 +v 0.131357 0.181943 -0.218211 +v 0.144302 0.180048 -0.218629 +v 0.155460 0.175986 -0.217928 +v 0.164055 0.170672 -0.217036 +v 0.131357 0.175253 -0.228860 +v 0.144068 0.173729 -0.228427 +v 0.154549 0.170657 -0.226563 +v 0.162048 0.166969 -0.224548 +v 0.186094 0.131358 -0.206344 +v 0.181943 0.131358 -0.218211 +v 0.175253 0.131358 -0.228860 +v 0.186094 0.143844 -0.193858 +v 0.184426 0.144245 -0.206880 +v 0.180074 0.144191 -0.218636 +v 0.173786 0.144029 -0.228372 +v 0.181943 0.155711 -0.193858 +v 0.180048 0.156129 -0.206802 +v 0.175985 0.155427 -0.217961 +v 0.170672 0.154536 -0.226555 +v 0.175253 0.166360 -0.193858 +v 0.173729 0.165927 -0.206568 +v 0.170657 0.164063 -0.217049 +v 0.166969 0.162048 -0.224548 +v 0.131357 0.187500 0.193857 +v 0.131357 0.131358 0.250000 +v 0.187500 0.131358 0.193857 +v 0.131357 0.186094 0.206344 +v 0.131357 0.181943 0.218211 +v 0.131357 0.175253 0.228860 +v 0.143844 0.186094 0.193857 +v 0.144245 0.184427 0.206880 +v 0.144191 0.180074 0.218636 +v 0.144029 0.173786 0.228372 +v 0.155711 0.181943 0.193857 +v 0.156129 0.180048 0.206802 +v 0.155427 0.175986 0.217961 +v 0.154536 0.170672 0.226555 +v 0.166360 0.175253 0.193857 +v 0.165927 0.173729 0.206568 +v 0.164063 0.170657 0.217049 +v 0.162048 0.166969 0.224548 +v 0.143844 0.131358 0.248594 +v 0.155711 0.131358 0.244443 +v 0.166360 0.131358 0.237753 +v 0.131357 0.143844 0.248594 +v 0.144380 0.144245 0.246927 +v 0.156136 0.144191 0.242574 +v 0.165872 0.144029 0.236286 +v 0.131357 0.155711 0.244443 +v 0.144302 0.156129 0.242548 +v 0.155460 0.155427 0.238485 +v 0.164055 0.154536 0.233172 +v 0.131357 0.166360 0.237753 +v 0.144068 0.165927 0.236229 +v 0.154549 0.164063 0.233157 +v 0.162048 0.162048 0.229469 +v 0.186094 0.143844 0.193857 +v 0.181943 0.155711 0.193857 +v 0.175253 0.166360 0.193857 +v 0.186094 0.131358 0.206344 +v 0.184427 0.144380 0.206745 +v 0.180074 0.156136 0.206691 +v 0.173786 0.165872 0.206529 +v 0.181943 0.131358 0.218211 +v 0.180048 0.144302 0.218629 +v 0.175985 0.155461 0.217927 +v 0.170672 0.164055 0.217036 +v 0.175253 0.131358 0.228860 +v 0.173729 0.144068 0.228427 +v 0.170657 0.154549 0.226563 +v 0.166969 0.162048 0.224548 +v -0.131358 0.187500 0.193857 +v -0.187500 0.131358 0.193857 +v -0.131358 0.131358 0.250000 +v -0.143844 0.186094 0.193857 +v -0.155711 0.181943 0.193857 +v -0.166360 0.175253 0.193857 +v -0.131358 0.186094 0.206344 +v -0.144380 0.184427 0.206745 +v -0.156136 0.180074 0.206691 +v -0.165872 0.173786 0.206529 +v -0.131358 0.181943 0.218211 +v -0.144302 0.180048 0.218629 +v -0.155461 0.175986 0.217927 +v -0.164055 0.170672 0.217036 +v -0.131358 0.175253 0.228860 +v -0.144068 0.173729 0.228427 +v -0.154549 0.170657 0.226563 +v -0.162048 0.166969 0.224548 +v -0.186094 0.131358 0.206344 +v -0.181943 0.131358 0.218211 +v -0.175253 0.131358 0.228860 +v -0.186094 0.143844 0.193857 +v -0.184427 0.144245 0.206880 +v -0.180074 0.144191 0.218636 +v -0.173786 0.144029 0.228372 +v -0.181943 0.155711 0.193857 +v -0.180048 0.156129 0.206802 +v -0.175986 0.155427 0.217961 +v -0.170672 0.154536 0.226555 +v -0.175253 0.166360 0.193857 +v -0.173729 0.165927 0.206568 +v -0.170658 0.164063 0.217049 +v -0.166969 0.162048 0.224548 +v -0.131358 0.143844 0.248594 +v -0.131358 0.155711 0.244443 +v -0.131358 0.166360 0.237753 +v -0.143844 0.131358 0.248594 +v -0.144245 0.144380 0.246927 +v -0.144192 0.156136 0.242574 +v -0.144029 0.165872 0.236286 +v -0.155711 0.131358 0.244443 +v -0.156129 0.144302 0.242548 +v -0.155428 0.155461 0.238485 +v -0.154536 0.164055 0.233172 +v -0.166360 0.131358 0.237753 +v -0.165927 0.144068 0.236229 +v -0.164063 0.154549 0.233157 +v -0.162048 0.162048 0.229469 +v -0.131358 0.187500 -0.193858 +v -0.131358 0.131358 -0.250000 +v -0.187500 0.131358 -0.193858 +v -0.131358 0.186094 -0.206344 +v -0.131358 0.181943 -0.218211 +v -0.131358 0.175253 -0.228860 +v -0.143845 0.186094 -0.193858 +v -0.144245 0.184427 -0.206880 +v -0.144192 0.180074 -0.218636 +v -0.144029 0.173786 -0.228372 +v -0.155711 0.181943 -0.193858 +v -0.156129 0.180048 -0.206802 +v -0.155428 0.175986 -0.217961 +v -0.154536 0.170672 -0.226555 +v -0.166360 0.175253 -0.193858 +v -0.165927 0.173729 -0.206568 +v -0.164063 0.170657 -0.217049 +v -0.162048 0.166969 -0.224548 +v -0.143845 0.131358 -0.248594 +v -0.155711 0.131358 -0.244443 +v -0.166360 0.131358 -0.237753 +v -0.131358 0.143844 -0.248594 +v -0.144380 0.144245 -0.246927 +v -0.156136 0.144191 -0.242574 +v -0.165872 0.144029 -0.236286 +v -0.131358 0.155711 -0.244443 +v -0.144302 0.156129 -0.242548 +v -0.155461 0.155427 -0.238486 +v -0.164055 0.154536 -0.233172 +v -0.131358 0.166360 -0.237753 +v -0.144068 0.165927 -0.236229 +v -0.154549 0.164063 -0.233157 +v -0.162048 0.162048 -0.229469 +v -0.186094 0.143844 -0.193858 +v -0.181943 0.155711 -0.193858 +v -0.175253 0.166360 -0.193858 +v -0.186094 0.131358 -0.206344 +v -0.184427 0.144380 -0.206745 +v -0.180074 0.156136 -0.206692 +v -0.173786 0.165872 -0.206529 +v -0.181943 0.131358 -0.218211 +v -0.180048 0.144302 -0.218629 +v -0.175986 0.155461 -0.217928 +v -0.170672 0.164055 -0.217036 +v -0.175253 0.131358 -0.228860 +v -0.173729 0.144068 -0.228427 +v -0.170658 0.154549 -0.226563 +v -0.166969 0.162048 -0.224548 +v -0.038455 0.126770 -0.468750 +v -0.012985 0.131837 -0.468750 +v 0.012984 0.131837 -0.468750 +v 0.038455 0.126770 -0.468750 +v 0.062448 0.116832 -0.468750 +v 0.084041 0.102404 -0.468750 +v 0.102404 0.084041 -0.468750 +v 0.116832 0.062448 -0.468750 +v 0.126770 0.038455 -0.468750 +v 0.131836 0.012985 -0.468750 +v 0.131836 -0.012985 -0.468750 +v 0.116832 -0.062448 -0.468750 +v 0.102404 -0.084041 -0.468750 +v 0.084041 -0.102404 -0.468750 +v 0.062448 -0.116832 -0.468750 +v 0.038455 -0.126770 -0.468750 +v 0.012985 -0.131836 -0.468750 +v -0.012985 -0.131836 -0.468750 +v -0.038455 -0.126770 -0.468750 +v -0.062448 -0.116832 -0.468750 +v -0.102404 -0.084041 -0.468750 +v -0.084041 -0.102404 -0.468750 +v -0.116832 -0.062448 -0.468750 +v -0.126770 -0.038455 -0.468750 +v -0.131837 0.012985 -0.468750 +v -0.116832 0.062448 -0.468750 +v -0.126770 0.038455 -0.468750 +v -0.102404 0.084041 -0.468750 +v -0.084041 0.102404 -0.468750 +v -0.062448 0.116832 -0.468750 +v 0.126770 -0.038455 -0.468750 +v -0.131837 -0.012985 -0.468750 +v -0.059210 0.110774 -0.437501 +v -0.036461 0.120197 -0.437501 +v -0.012312 0.125000 -0.437501 +v 0.012311 0.125001 -0.437501 +v 0.036461 0.120197 -0.437501 +v 0.059210 0.110774 -0.437501 +v 0.079683 0.097094 -0.437501 +v 0.097094 0.079683 -0.437501 +v 0.110774 0.059210 -0.437501 +v 0.120197 0.036461 -0.437501 +v 0.125000 0.012312 -0.437501 +v 0.125000 -0.012311 -0.437501 +v 0.120197 -0.036461 -0.437501 +v 0.110774 -0.059210 -0.437501 +v 0.097094 -0.079683 -0.437501 +v 0.079683 -0.097094 -0.437501 +v 0.059210 -0.110774 -0.437501 +v 0.036461 -0.120197 -0.437501 +v 0.012311 -0.125000 -0.437501 +v -0.012312 -0.125000 -0.437501 +v -0.036461 -0.120197 -0.437501 +v -0.059210 -0.110774 -0.437501 +v -0.079683 -0.097094 -0.437501 +v -0.097094 -0.079683 -0.437501 +v -0.110774 -0.059210 -0.437501 +v -0.120197 -0.036461 -0.437501 +v -0.125001 -0.012311 -0.437501 +v -0.125001 0.012311 -0.437501 +v -0.120197 0.036461 -0.437501 +v -0.110774 0.059210 -0.437501 +v -0.097094 0.079683 -0.437501 +v -0.079683 0.097094 -0.437501 +v 0.120197 0.036461 0.437501 +v 0.125001 0.012312 0.437501 +v 0.125001 -0.012311 0.437501 +v 0.120197 -0.036461 0.437501 +v 0.110774 0.059210 0.437501 +v 0.131837 0.012985 0.468750 +v 0.126770 0.038455 0.468750 +v 0.131837 -0.012985 0.468750 +v 0.110774 -0.059210 0.437501 +v 0.126770 -0.038455 0.468750 +v 0.097094 0.079683 0.437501 +v 0.116832 0.062448 0.468750 +v 0.097094 -0.079683 0.437501 +v 0.116832 -0.062448 0.468750 +v 0.079683 0.097094 0.437501 +v 0.102404 0.084041 0.468750 +v 0.079683 -0.097094 0.437501 +v 0.102404 -0.084041 0.468750 +v 0.059210 0.110774 0.437501 +v 0.084041 0.102404 0.468750 +v 0.059210 -0.110774 0.437501 +v 0.084041 -0.102404 0.468750 +v 0.036461 0.120197 0.437501 +v 0.062448 0.116832 0.468750 +v 0.036461 -0.120197 0.437501 +v 0.062448 -0.116832 0.468750 +v 0.012311 0.125000 0.437501 +v 0.038455 0.126770 0.468750 +v 0.012311 -0.125001 0.437501 +v 0.038455 -0.126770 0.468750 +v -0.012312 0.125000 0.437501 +v 0.012985 0.131836 0.468750 +v -0.012311 -0.125001 0.437501 +v 0.012985 -0.131837 0.468750 +v -0.036461 0.120197 0.437501 +v -0.012985 0.131836 0.468750 +v -0.036461 -0.120197 0.437501 +v -0.012985 -0.131837 0.468750 +v -0.059210 0.110774 0.437501 +v -0.038455 0.126770 0.468750 +v -0.059210 -0.110774 0.437501 +v -0.038455 -0.126770 0.468750 +v -0.079683 0.097094 0.437501 +v -0.062448 0.116832 0.468750 +v -0.079683 -0.097094 0.437501 +v -0.062448 -0.116832 0.468750 +v -0.097094 0.079683 0.437501 +v -0.084041 0.102404 0.468750 +v -0.097094 -0.079683 0.437501 +v -0.084041 -0.102404 0.468750 +v -0.110774 0.059210 0.437501 +v -0.102404 0.084041 0.468750 +v -0.110774 -0.059210 0.437501 +v -0.102404 -0.084041 0.468750 +v -0.120197 0.036461 0.437501 +v -0.116832 0.062448 0.468750 +v -0.120197 -0.036461 0.437501 +v -0.116832 -0.062448 0.468750 +v -0.125000 0.012311 0.437501 +v -0.126770 0.038455 0.468750 +v -0.125000 -0.012311 0.437501 +v -0.126770 -0.038455 0.468750 +v -0.131836 0.012985 0.468750 +v -0.131836 -0.012985 0.468750 +v -0.063644 0.130078 0.460912 +v -0.063644 0.130078 0.468749 +v -0.062467 0.139022 0.468749 +v -0.062467 0.139022 0.460912 +v -0.054132 0.142474 0.460912 +v -0.046976 0.136982 0.460912 +v -0.048153 0.128039 0.460912 +v -0.056487 0.124587 0.460912 +v -0.056487 0.124587 0.468749 +v -0.054132 0.142474 0.468749 +v -0.046976 0.136982 0.468749 +v -0.048153 0.128039 0.468749 +v -0.046976 0.136982 -0.460914 +v -0.046976 0.136982 -0.468751 +v -0.054133 0.142474 -0.468751 +v -0.054133 0.142474 -0.460914 +v -0.062467 0.139022 -0.460914 +v -0.063644 0.130078 -0.460914 +v -0.056488 0.124587 -0.460914 +v -0.048153 0.128039 -0.460914 +v -0.048153 0.128039 -0.468751 +v -0.062467 0.139022 -0.468751 +v -0.063644 0.130078 -0.468751 +v -0.056488 0.124587 -0.468751 +v -0.136982 0.046976 0.460912 +v -0.136982 0.046976 0.468749 +v -0.142474 0.054133 0.468749 +v -0.142474 0.054133 0.460912 +v -0.139022 0.062467 0.460912 +v -0.130078 0.063644 0.460912 +v -0.124587 0.056488 0.460912 +v -0.128039 0.048154 0.460912 +v -0.128039 0.048154 0.468749 +v -0.139022 0.062467 0.468749 +v -0.130078 0.063644 0.468749 +v -0.124587 0.056488 0.468749 +v -0.130078 0.063644 -0.460914 +v -0.130078 0.063644 -0.468751 +v -0.139022 0.062467 -0.468751 +v -0.139022 0.062467 -0.460914 +v -0.142474 0.054133 -0.460914 +v -0.136982 0.046976 -0.460914 +v -0.128039 0.048153 -0.460914 +v -0.124587 0.056487 -0.460914 +v -0.124587 0.056487 -0.468751 +v -0.142474 0.054133 -0.468751 +v -0.136982 0.046976 -0.468751 +v -0.128039 0.048153 -0.468751 +v -0.130078 -0.063644 0.460912 +v -0.130078 -0.063644 0.468749 +v -0.139022 -0.062467 0.468749 +v -0.139022 -0.062467 0.460912 +v -0.142474 -0.054132 0.460912 +v -0.136982 -0.046976 0.460912 +v -0.128039 -0.048153 0.460912 +v -0.124587 -0.056487 0.460912 +v -0.124587 -0.056487 0.468749 +v -0.142474 -0.054132 0.468749 +v -0.136982 -0.046976 0.468749 +v -0.128039 -0.048153 0.468749 +v -0.136982 -0.046976 -0.460914 +v -0.136982 -0.046976 -0.468751 +v -0.142474 -0.054133 -0.468751 +v -0.142474 -0.054133 -0.460914 +v -0.139022 -0.062467 -0.460914 +v -0.130078 -0.063644 -0.460914 +v -0.124587 -0.056488 -0.460914 +v -0.128039 -0.048153 -0.460914 +v -0.128039 -0.048153 -0.468751 +v -0.139022 -0.062467 -0.468751 +v -0.130078 -0.063644 -0.468751 +v -0.124587 -0.056488 -0.468751 +v -0.046976 -0.136982 0.460912 +v -0.046976 -0.136982 0.468749 +v -0.054133 -0.142474 0.468749 +v -0.054133 -0.142474 0.460912 +v -0.062467 -0.139022 0.460912 +v -0.063644 -0.130078 0.460912 +v -0.056488 -0.124587 0.460912 +v -0.048153 -0.128039 0.460912 +v -0.048153 -0.128039 0.468749 +v -0.062467 -0.139022 0.468749 +v -0.063644 -0.130078 0.468749 +v -0.056488 -0.124587 0.468749 +v -0.063644 -0.130078 -0.460914 +v -0.063644 -0.130078 -0.468751 +v -0.062467 -0.139022 -0.468751 +v -0.062467 -0.139022 -0.460914 +v -0.054133 -0.142474 -0.460914 +v -0.046976 -0.136982 -0.460914 +v -0.048153 -0.128039 -0.460914 +v -0.056488 -0.124587 -0.460914 +v -0.056488 -0.124587 -0.468751 +v -0.054133 -0.142474 -0.468751 +v -0.046976 -0.136982 -0.468751 +v -0.048153 -0.128039 -0.468751 +v 0.063644 -0.130078 0.460912 +v 0.063644 -0.130078 0.468749 +v 0.062467 -0.139022 0.468749 +v 0.062467 -0.139022 0.460912 +v 0.054132 -0.142474 0.460912 +v 0.046976 -0.136982 0.460912 +v 0.048153 -0.128039 0.460912 +v 0.056487 -0.124587 0.460912 +v 0.056487 -0.124587 0.468749 +v 0.054132 -0.142474 0.468749 +v 0.046976 -0.136982 0.468749 +v 0.048153 -0.128039 0.468749 +v 0.046976 -0.136982 -0.460914 +v 0.046976 -0.136982 -0.468751 +v 0.054133 -0.142474 -0.468751 +v 0.054133 -0.142474 -0.460914 +v 0.062467 -0.139022 -0.460914 +v 0.063644 -0.130078 -0.460914 +v 0.056487 -0.124587 -0.460914 +v 0.048153 -0.128039 -0.460914 +v 0.048153 -0.128039 -0.468751 +v 0.062467 -0.139022 -0.468751 +v 0.063644 -0.130078 -0.468751 +v 0.056487 -0.124587 -0.468751 +v 0.136982 -0.046976 0.460912 +v 0.136982 -0.046976 0.468749 +v 0.142474 -0.054133 0.468749 +v 0.142474 -0.054133 0.460912 +v 0.139022 -0.062467 0.460912 +v 0.130078 -0.063644 0.460912 +v 0.124587 -0.056488 0.460912 +v 0.128039 -0.048153 0.460912 +v 0.128039 -0.048153 0.468749 +v 0.139022 -0.062467 0.468749 +v 0.130078 -0.063644 0.468749 +v 0.124587 -0.056488 0.468749 +v 0.130078 -0.063644 -0.460914 +v 0.130078 -0.063644 -0.468751 +v 0.139022 -0.062467 -0.468751 +v 0.139022 -0.062467 -0.460914 +v 0.142474 -0.054132 -0.460914 +v 0.136982 -0.046976 -0.460914 +v 0.128039 -0.048153 -0.460914 +v 0.124587 -0.056487 -0.460914 +v 0.124587 -0.056487 -0.468751 +v 0.142474 -0.054132 -0.468751 +v 0.136982 -0.046976 -0.468751 +v 0.128039 -0.048153 -0.468751 +v 0.130078 0.063644 0.460912 +v 0.130078 0.063644 0.468749 +v 0.139022 0.062467 0.468749 +v 0.139022 0.062467 0.460912 +v 0.142474 0.054132 0.460912 +v 0.136982 0.046976 0.460912 +v 0.128039 0.048153 0.460912 +v 0.124587 0.056487 0.460912 +v 0.124587 0.056487 0.468749 +v 0.142474 0.054132 0.468749 +v 0.136982 0.046976 0.468749 +v 0.128039 0.048153 0.468749 +v 0.136982 0.046976 -0.460914 +v 0.136982 0.046976 -0.468751 +v 0.142474 0.054133 -0.468751 +v 0.142474 0.054133 -0.460914 +v 0.139022 0.062467 -0.460914 +v 0.130078 0.063644 -0.460914 +v 0.124587 0.056487 -0.460914 +v 0.128039 0.048153 -0.460914 +v 0.128039 0.048153 -0.468751 +v 0.139022 0.062467 -0.468751 +v 0.130078 0.063644 -0.468751 +v 0.124587 0.056487 -0.468751 +v 0.046976 0.136982 0.460912 +v 0.046976 0.136982 0.468749 +v 0.054133 0.142474 0.468749 +v 0.054133 0.142474 0.460912 +v 0.062467 0.139022 0.460912 +v 0.063644 0.130078 0.460912 +v 0.056488 0.124587 0.460912 +v 0.048154 0.128039 0.460912 +v 0.048154 0.128039 0.468749 +v 0.062467 0.139022 0.468749 +v 0.063644 0.130078 0.468749 +v 0.056488 0.124587 0.468749 +v 0.063644 0.130078 -0.460914 +v 0.063644 0.130078 -0.468751 +v 0.062467 0.139022 -0.468751 +v 0.062467 0.139022 -0.460914 +v 0.054132 0.142474 -0.460914 +v 0.046976 0.136982 -0.460914 +v 0.048153 0.128039 -0.460914 +v 0.056487 0.124587 -0.460914 +v 0.056487 0.124587 -0.468751 +v 0.054132 0.142474 -0.468751 +v 0.046976 0.136982 -0.468751 +v 0.048153 0.128039 -0.468751 +v 0.079683 0.097094 -0.097094 +v 0.097094 0.079683 -0.079683 +v 0.110774 0.059210 -0.059210 +v 0.120197 0.036461 -0.036461 +v 0.125000 0.012312 -0.012312 +v 0.125000 0.012312 0.012311 +v 0.120197 0.036461 0.036461 +v 0.125000 -0.012312 -0.012312 +v 0.120197 -0.036461 -0.036461 +v 0.110774 -0.059210 -0.059210 +v 0.097094 -0.079683 -0.079683 +v 0.079683 -0.097094 -0.097094 +v 0.059210 -0.110774 -0.110774 +v 0.036461 -0.120197 -0.120197 +v 0.012311 -0.125000 -0.125000 +v -0.012311 -0.125000 -0.125000 +v -0.036461 -0.120197 -0.120197 +v -0.059210 -0.110774 -0.110774 +v -0.079683 -0.097094 -0.097094 +v -0.097094 -0.079683 -0.079683 +v -0.120197 -0.036461 -0.036461 +v 0.110774 0.059210 0.059210 +v 0.097094 0.079683 0.079683 +v 0.079683 0.097094 0.097094 +v 0.059210 0.110774 0.110774 +v 0.036461 0.120197 0.120197 +v 0.012311 -0.125001 0.125000 +v -0.036461 0.120197 0.120197 +v -0.059210 -0.110774 0.110774 +v -0.079683 0.097094 0.097094 +v -0.079683 -0.097094 0.097094 +v -0.097094 -0.079683 0.079683 +v -0.110774 0.059210 0.059210 +v -0.120197 -0.036461 0.036461 +v -0.088389 -0.088389 0.088389 +v 0.088389 0.088389 0.088389 +v 0.088389 0.088389 -0.088389 +v -0.088389 0.088389 -0.088389 +v -0.088389 -0.088389 -0.088389 +v 0.088389 -0.088389 -0.088389 +v 0.125000 -0.012312 0.012312 +v 0.120197 -0.036461 0.036461 +v 0.110774 -0.059210 0.059210 +v 0.097094 -0.079683 0.079683 +v 0.079683 -0.097094 0.097094 +v 0.059210 -0.110774 0.110774 +v 0.036461 -0.120197 0.120197 +v -0.012311 -0.125000 0.125000 +v -0.036461 -0.120197 0.120197 +v -0.110774 -0.059210 0.059210 +v -0.125000 -0.012311 0.012311 +v -0.125000 -0.012311 -0.012311 +v -0.110774 -0.059210 -0.059210 +v 0.059210 0.110774 -0.110774 +v 0.036461 0.120197 -0.120197 +v 0.012311 0.125000 -0.125000 +v 0.012311 0.125001 0.125001 +v -0.012311 0.125001 -0.125000 +v -0.012311 0.125001 0.125000 +v -0.036461 0.120197 -0.120197 +v -0.059210 0.110774 -0.110774 +v -0.059210 0.110774 0.110774 +v -0.079683 0.097094 -0.097094 +v -0.097094 0.079683 -0.079683 +v -0.097094 0.079683 0.079683 +v -0.110774 0.059210 -0.059210 +v -0.120197 0.036461 -0.036461 +v -0.120197 0.036461 0.036461 +v -0.125000 0.012312 -0.012312 +v -0.125000 0.012312 0.012312 +v 0.125000 -0.012312 -0.125001 +v 0.125000 0.012311 -0.125001 +v 0.120197 0.036461 -0.120197 +v 0.110774 0.059210 -0.110774 +v 0.097094 0.079683 -0.097094 +v 0.079683 0.097094 -0.079683 +v 0.036461 0.120197 -0.036461 +v 0.012312 0.125000 -0.012312 +v -0.012311 0.125000 -0.012312 +v -0.036461 0.120197 -0.036461 +v -0.036461 0.120197 0.036461 +v -0.012311 0.125000 0.012312 +v 0.079683 0.097094 0.079683 +v 0.110774 0.059210 0.110774 +v 0.120197 0.036461 0.120197 +v 0.125000 0.012311 0.125000 +v 0.120197 -0.036461 0.120197 +v 0.097094 -0.079683 0.097094 +v 0.079683 -0.097094 0.079683 +v 0.036461 -0.120197 0.036461 +v -0.059210 0.110774 -0.059210 +v -0.059210 0.110774 0.059210 +v -0.079683 0.097094 -0.079683 +v -0.079683 0.097094 0.079683 +v -0.097094 0.079683 -0.097094 +v -0.097094 0.079683 0.097094 +v -0.110774 0.059210 -0.110774 +v -0.110774 0.059210 0.110774 +v -0.120197 0.036461 -0.120197 +v -0.120197 0.036461 0.120197 +v -0.125001 0.012311 -0.125000 +v -0.125000 0.012311 0.125001 +v -0.125001 -0.012311 -0.125000 +v -0.120197 -0.036461 -0.120197 +v -0.120197 -0.036461 0.120197 +v -0.110774 -0.059210 -0.110774 +v -0.097094 -0.079683 -0.097094 +v -0.079683 -0.097094 -0.079683 +v -0.059210 -0.110774 -0.059210 +v -0.036461 -0.120197 -0.036461 +v -0.012312 -0.125000 -0.012311 +v 0.036461 0.120197 0.036461 +v 0.012312 0.125000 0.012311 +v 0.059210 0.110774 -0.059210 +v 0.120197 -0.036461 -0.120197 +v 0.110774 -0.059210 -0.110774 +v 0.097094 -0.079683 -0.097094 +v 0.079683 -0.097094 -0.079683 +v 0.059210 -0.110774 -0.059210 +v 0.036461 -0.120197 -0.036461 +v 0.012311 -0.125000 -0.012311 +v 0.059210 0.110774 0.059210 +v 0.097094 0.079683 0.097094 +v -0.125000 -0.012311 0.125001 +v 0.125001 -0.012311 0.125000 +v -0.110774 -0.059210 0.110774 +v 0.110774 -0.059210 0.110774 +v -0.097094 -0.079683 0.097094 +v -0.079683 -0.097094 0.079683 +v -0.059210 -0.110774 0.059210 +v 0.059210 -0.110774 0.059210 +v -0.036461 -0.120197 0.036461 +v -0.012312 -0.125000 0.012311 +v 0.012312 -0.125000 0.012311 +v -0.088389 0.088389 0.088389 +v 0.088389 -0.088389 0.088389 +v 0.121367 0.099603 -0.500000 +v 0.138467 0.074012 -0.500000 +v 0.150245 0.045577 -0.500000 +v 0.156250 0.015390 -0.500000 +v 0.156250 -0.015389 -0.500000 +v 0.150245 -0.045576 -0.500000 +v 0.138467 -0.074012 -0.500000 +v 0.121367 -0.099603 -0.500000 +v 0.099603 -0.121367 -0.500000 +v 0.045576 -0.150245 -0.500000 +v -0.015389 -0.156250 -0.500000 +v -0.045576 -0.150245 -0.500000 +v -0.099603 -0.121367 -0.500000 +v -0.121367 -0.099603 -0.500000 +v -0.138467 -0.074012 -0.500000 +v -0.150245 -0.045576 -0.500000 +v -0.156250 -0.015389 -0.500000 +v -0.150245 0.045576 -0.500000 +v -0.138467 0.074012 -0.500000 +v -0.121367 0.099603 -0.500000 +v -0.074012 0.138467 -0.500000 +v -0.015389 0.156250 -0.500000 +v 0.015389 0.156250 -0.500000 +v 0.045576 0.150245 -0.500000 +v 0.074012 0.138467 -0.500000 +v 0.099603 0.121367 -0.500000 +v 0.074012 -0.138466 -0.500000 +v 0.015389 -0.156250 -0.500000 +v -0.074012 -0.138467 -0.500000 +v -0.156250 0.015389 -0.500000 +v -0.099603 0.121367 -0.500000 +v -0.045576 0.150245 -0.500000 +v 0.121367 0.099603 -0.468750 +v 0.099603 0.121367 -0.468750 +v 0.138467 0.074012 -0.468750 +v 0.150245 0.045577 -0.468750 +v 0.156250 0.015390 -0.468750 +v 0.156250 -0.015389 -0.468750 +v 0.150245 -0.045576 -0.468750 +v 0.138467 -0.074012 -0.468750 +v 0.121367 -0.099603 -0.468750 +v 0.099603 -0.121367 -0.468750 +v 0.074012 -0.138466 -0.468750 +v 0.045576 -0.150245 -0.468750 +v 0.015389 -0.156250 -0.468750 +v -0.015389 -0.156250 -0.468750 +v -0.045576 -0.150245 -0.468750 +v -0.074012 -0.138467 -0.468750 +v -0.099603 -0.121367 -0.468750 +v -0.121367 -0.099603 -0.468750 +v -0.138467 -0.074012 -0.468750 +v -0.150245 -0.045576 -0.468750 +v -0.156250 -0.015389 -0.468750 +v -0.156250 0.015389 -0.468750 +v -0.138467 0.074012 -0.468750 +v -0.150245 0.045576 -0.468750 +v -0.121367 0.099603 -0.468750 +v -0.099603 0.121367 -0.468750 +v -0.074012 0.138467 -0.468750 +v -0.045576 0.150245 -0.468750 +v 0.015389 0.156250 -0.468750 +v -0.015389 0.156250 -0.468750 +v 0.045576 0.150245 -0.468750 +v 0.074012 0.138467 -0.468750 +v 0.074012 -0.138466 0.468750 +v 0.045576 -0.150245 0.468750 +v 0.015389 -0.156250 0.468750 +v 0.099603 -0.121367 0.468750 +v -0.015389 -0.156250 0.468750 +v 0.138467 -0.074012 0.468750 +v 0.121367 -0.099603 0.468750 +v 0.099603 -0.121367 0.500000 +v 0.074012 -0.138467 0.500000 +v 0.045576 -0.150245 0.500000 +v 0.015389 -0.156250 0.500000 +v -0.015389 -0.156250 0.500000 +v 0.150245 -0.045576 0.468750 +v 0.121367 -0.099603 0.500000 +v -0.045576 -0.150245 0.468750 +v -0.045576 -0.150245 0.500000 +v 0.156250 -0.015389 0.468750 +v 0.150245 -0.045576 0.500000 +v 0.138467 -0.074012 0.500000 +v -0.074012 -0.138467 0.468750 +v -0.074012 -0.138467 0.500000 +v 0.156250 0.015389 0.468750 +v 0.156250 -0.015389 0.500000 +v -0.099603 -0.121367 0.468750 +v -0.099603 -0.121367 0.500000 +v 0.150245 0.045576 0.468750 +v 0.156250 0.015389 0.500000 +v -0.121367 -0.099603 0.468750 +v -0.121367 -0.099603 0.500000 +v 0.138467 0.074012 0.468750 +v 0.150245 0.045576 0.500000 +v -0.150245 -0.045576 0.468750 +v -0.138467 -0.074012 0.468750 +v -0.138467 -0.074012 0.500000 +v 0.121367 0.099603 0.468750 +v 0.138467 0.074012 0.500000 +v -0.156250 -0.015389 0.468750 +v -0.150245 -0.045576 0.500000 +v 0.099604 0.121367 0.468750 +v 0.121367 0.099603 0.500000 +v -0.156250 0.015389 0.468750 +v -0.156250 -0.015389 0.500000 +v 0.074012 0.138466 0.468750 +v 0.099604 0.121367 0.500000 +v -0.150245 0.045576 0.468750 +v -0.156250 0.015389 0.500000 +v 0.045577 0.150245 0.468750 +v 0.074012 0.138466 0.500000 +v -0.138467 0.074012 0.468750 +v -0.150245 0.045576 0.500000 +v 0.015389 0.156249 0.468750 +v 0.045577 0.150245 0.500000 +v -0.015389 0.156250 0.500000 +v -0.121367 0.099603 0.468750 +v -0.138467 0.074012 0.500000 +v -0.015389 0.156250 0.468750 +v 0.015389 0.156250 0.500000 +v -0.074012 0.138467 0.500000 +v -0.045576 0.150245 0.500000 +v -0.099603 0.121367 0.500000 +v -0.121367 0.099603 0.500000 +v -0.045576 0.150245 0.468750 +v -0.099603 0.121367 0.468750 +v -0.074012 0.138467 0.468750 +v -0.108578 0.095821 0.460912 +v -0.108578 0.095821 0.468749 +v -0.110913 0.104534 0.468749 +v -0.110913 0.104534 0.460912 +v -0.104534 0.110913 0.460912 +v -0.095821 0.108578 0.460912 +v -0.093486 0.099865 0.460912 +v -0.099865 0.093486 0.460912 +v -0.099865 0.093486 0.468749 +v -0.104534 0.110913 0.468749 +v -0.095821 0.108578 0.468749 +v -0.093486 0.099865 0.468749 +v -0.095821 0.108578 -0.460914 +v -0.095821 0.108578 -0.468751 +v -0.104534 0.110913 -0.468751 +v -0.104534 0.110913 -0.460914 +v -0.110913 0.104534 -0.460914 +v -0.108578 0.095821 -0.460914 +v -0.099865 0.093486 -0.460914 +v -0.093486 0.099865 -0.460914 +v -0.093486 0.099865 -0.468751 +v -0.110913 0.104534 -0.468751 +v -0.108578 0.095821 -0.468751 +v -0.099865 0.093486 -0.468751 +v -0.144532 -0.009021 0.460912 +v -0.144532 -0.009021 0.468749 +v -0.152344 -0.004510 0.468749 +v -0.152344 -0.004510 0.460912 +v -0.152344 0.004510 0.460912 +v -0.144532 0.009021 0.460912 +v -0.136720 0.004510 0.460912 +v -0.136720 -0.004510 0.460912 +v -0.136720 -0.004510 0.468749 +v -0.152344 0.004510 0.468749 +v -0.144532 0.009021 0.468749 +v -0.136720 0.004510 0.468749 +v -0.144532 0.009021 -0.460914 +v -0.144532 0.009021 -0.468751 +v -0.152344 0.004510 -0.468751 +v -0.152344 0.004510 -0.460914 +v -0.152344 -0.004510 -0.460914 +v -0.144532 -0.009021 -0.460914 +v -0.136720 -0.004510 -0.460914 +v -0.136720 0.004510 -0.460914 +v -0.136720 0.004510 -0.468751 +v -0.152344 -0.004510 -0.468751 +v -0.144532 -0.009021 -0.468751 +v -0.136720 -0.004510 -0.468751 +v -0.095821 -0.108578 0.460912 +v -0.095821 -0.108578 0.468749 +v -0.104534 -0.110913 0.468749 +v -0.104534 -0.110913 0.460912 +v -0.110913 -0.104534 0.460912 +v -0.108578 -0.095821 0.460912 +v -0.099865 -0.093486 0.460912 +v -0.093486 -0.099865 0.460912 +v -0.093486 -0.099865 0.468749 +v -0.110913 -0.104534 0.468749 +v -0.108578 -0.095821 0.468749 +v -0.099865 -0.093486 0.468749 +v -0.108578 -0.095821 -0.460914 +v -0.108578 -0.095821 -0.468751 +v -0.110913 -0.104534 -0.468751 +v -0.110913 -0.104534 -0.460914 +v -0.104534 -0.110913 -0.460914 +v -0.095821 -0.108578 -0.460914 +v -0.093486 -0.099865 -0.460914 +v -0.099865 -0.093486 -0.460914 +v -0.099865 -0.093486 -0.468751 +v -0.104534 -0.110913 -0.468751 +v -0.095821 -0.108578 -0.468751 +v -0.093486 -0.099865 -0.468751 +v 0.009021 -0.144532 0.460912 +v 0.009021 -0.144532 0.468749 +v 0.004510 -0.152344 0.468749 +v 0.004510 -0.152344 0.460912 +v -0.004510 -0.152344 0.460912 +v -0.009021 -0.144532 0.460912 +v -0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.468749 +v -0.004510 -0.152344 0.468749 +v -0.009021 -0.144532 0.468749 +v -0.004510 -0.136720 0.468749 +v -0.009021 -0.144532 -0.460914 +v -0.009021 -0.144532 -0.468751 +v -0.004510 -0.152344 -0.468751 +v -0.004510 -0.152344 -0.460914 +v 0.004510 -0.152344 -0.460914 +v 0.009021 -0.144532 -0.460914 +v 0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.468751 +v 0.004510 -0.152344 -0.468751 +v 0.009021 -0.144532 -0.468751 +v 0.004510 -0.136720 -0.468751 +v 0.108578 -0.095821 0.460912 +v 0.108578 -0.095821 0.468749 +v 0.110913 -0.104534 0.468749 +v 0.110913 -0.104534 0.460912 +v 0.104534 -0.110913 0.460912 +v 0.095821 -0.108578 0.460912 +v 0.093486 -0.099865 0.460912 +v 0.099865 -0.093486 0.460912 +v 0.099865 -0.093486 0.468749 +v 0.104534 -0.110913 0.468749 +v 0.095821 -0.108578 0.468749 +v 0.093486 -0.099865 0.468749 +v 0.095821 -0.108578 -0.460914 +v 0.095821 -0.108578 -0.468751 +v 0.104534 -0.110913 -0.468751 +v 0.104534 -0.110913 -0.460914 +v 0.110913 -0.104534 -0.460914 +v 0.108578 -0.095821 -0.460914 +v 0.099865 -0.093486 -0.460914 +v 0.093486 -0.099865 -0.460914 +v 0.093486 -0.099865 -0.468751 +v 0.110913 -0.104534 -0.468751 +v 0.108578 -0.095821 -0.468751 +v 0.099865 -0.093486 -0.468751 +v 0.144532 0.009021 0.460912 +v 0.144532 0.009021 0.468749 +v 0.152344 0.004510 0.468749 +v 0.152344 0.004510 0.460912 +v 0.152344 -0.004510 0.460912 +v 0.144532 -0.009021 0.460912 +v 0.136720 -0.004510 0.460912 +v 0.136720 0.004510 0.460912 +v 0.136720 0.004510 0.468749 +v 0.152344 -0.004510 0.468749 +v 0.144532 -0.009021 0.468749 +v 0.136720 -0.004510 0.468749 +v 0.144532 -0.009021 -0.460914 +v 0.144532 -0.009021 -0.468751 +v 0.152344 -0.004510 -0.468751 +v 0.152344 -0.004510 -0.460914 +v 0.152344 0.004510 -0.460914 +v 0.144532 0.009021 -0.460914 +v 0.136720 0.004510 -0.460914 +v 0.136720 -0.004510 -0.460914 +v 0.136720 -0.004510 -0.468751 +v 0.152344 0.004510 -0.468751 +v 0.144532 0.009021 -0.468751 +v 0.136720 0.004510 -0.468751 +v 0.095821 0.108578 0.460912 +v 0.095821 0.108578 0.468749 +v 0.104534 0.110913 0.468749 +v 0.104534 0.110913 0.460912 +v 0.110913 0.104534 0.460912 +v 0.108578 0.095821 0.460912 +v 0.099865 0.093486 0.460912 +v 0.093486 0.099865 0.460912 +v 0.093486 0.099865 0.468749 +v 0.110913 0.104534 0.468749 +v 0.108578 0.095821 0.468749 +v 0.099865 0.093486 0.468749 +v 0.108578 0.095821 -0.460914 +v 0.108578 0.095821 -0.468751 +v 0.110913 0.104534 -0.468751 +v 0.110913 0.104534 -0.460914 +v 0.104534 0.110913 -0.460914 +v 0.095821 0.108578 -0.460914 +v 0.093486 0.099865 -0.460914 +v 0.099865 0.093486 -0.460914 +v 0.099865 0.093486 -0.468751 +v 0.104534 0.110913 -0.468751 +v 0.095821 0.108578 -0.468751 +v 0.093486 0.099865 -0.468751 +v -0.009021 0.144532 0.460912 +v -0.009021 0.144532 0.468749 +v -0.004510 0.152344 0.468749 +v -0.004510 0.152344 0.460912 +v 0.004511 0.152344 0.460912 +v 0.009021 0.144532 0.460912 +v 0.004511 0.136720 0.460912 +v -0.004510 0.136720 0.460912 +v -0.004510 0.136720 0.468749 +v 0.004511 0.152344 0.468749 +v 0.009021 0.144532 0.468749 +v 0.004510 0.136720 0.468749 +v 0.009021 0.144532 -0.460914 +v 0.009021 0.144532 -0.468751 +v 0.004510 0.152344 -0.468751 +v 0.004510 0.152344 -0.460914 +v -0.004510 0.152344 -0.460914 +v -0.009021 0.144532 -0.460914 +v -0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.468751 +v -0.004510 0.152344 -0.468751 +v -0.009021 0.144532 -0.468751 +v -0.004510 0.136720 -0.468751 +v 0.125000 0.012312 -0.000000 +v -0.097094 -0.079683 0.000000 +v -0.110774 -0.059210 0.000000 +v -0.120197 -0.036461 0.000000 +v -0.120197 0.036461 0.000000 +v -0.110774 0.059210 0.000000 +v -0.097094 0.079683 0.000000 +v -0.036461 0.120197 -0.000000 +v -0.059210 0.110774 -0.000000 +v -0.079683 0.097094 -0.000000 +v 0.036461 0.120197 -0.000000 +v -0.125000 -0.012311 0.000000 +v 0.059210 0.110774 -0.000000 +v 0.079683 0.097094 -0.000000 +v 0.097094 0.079683 -0.000000 +v 0.110774 0.059210 -0.000000 +v 0.120197 0.036461 -0.000000 +v -0.125000 0.012312 0.000000 +v -0.012311 0.125000 -0.000000 +v 0.012312 -0.125000 0.000000 +v -0.012312 -0.125000 -0.000000 +v 0.012312 0.125000 -0.000000 +v 0.125000 -0.012312 0.000000 +v -0.079683 -0.097094 -0.000000 +v -0.059210 -0.110774 -0.000000 +v -0.036461 -0.120197 -0.000000 +v 0.097094 -0.079683 0.000000 +v 0.110774 -0.059210 0.000000 +v 0.120197 -0.036461 0.000000 +v 0.079683 -0.097094 0.000000 +v 0.059210 -0.110774 0.000000 +v 0.036461 -0.120197 -0.000000 +v 0.000000 0.125000 0.012312 +v 0.000000 0.125000 -0.012312 +v 0.000000 0.125000 -0.000000 +v 0.125000 0.000000 -0.012312 +v 0.125000 0.000000 0.012312 +v 0.125000 0.000000 0.000000 +v -0.125000 0.000000 0.012312 +v -0.125000 0.000000 -0.012311 +v -0.125000 0.000000 0.000000 +v 0.000000 -0.125000 0.012311 +v -0.000000 -0.125000 -0.012311 +v 0.000000 -0.125000 0.000000 +vt 0.2883 0.2099 +vt 0.0450 0.2099 +vt 0.0450 0.0450 +vt 0.2883 0.0450 +vt 0.7981 0.9549 +vt 0.5549 0.9549 +vt 0.5549 0.7901 +vt 0.7981 0.7901 +vt 0.0450 0.2901 +vt 0.2883 0.2901 +vt 0.2883 0.4550 +vt 0.0450 0.4550 +vt 0.2999 0.9550 +vt 0.2999 0.7901 +vt 0.4648 0.7901 +vt 0.4648 0.9550 +vt 0.2099 0.7901 +vt 0.2099 0.9550 +vt 0.0450 0.9550 +vt 0.0450 0.7901 +vt 0.0450 0.9628 +vt 0.0369 0.9631 +vt 0.0372 0.9550 +vt 0.0450 0.9703 +vt 0.0370 0.9705 +vt 0.0450 0.9769 +vt 0.0371 0.9766 +vt 0.0450 0.9902 +vt 0.0371 0.9902 +vt 0.0295 0.9631 +vt 0.0297 0.9550 +vt 0.0299 0.9701 +vt 0.0305 0.9755 +vt 0.0305 0.9902 +vt 0.0233 0.9629 +vt 0.0231 0.9550 +vt 0.0245 0.9695 +vt 0.0258 0.9742 +vt 0.0258 0.9902 +vt 0.5548 0.9550 +vt 0.5548 0.9628 +vt 0.5467 0.9631 +vt 0.5470 0.9550 +vt 0.5548 0.9703 +vt 0.5467 0.9705 +vt 0.5548 0.9769 +vt 0.5468 0.9766 +vt 0.5548 0.9902 +vt 0.5468 0.9902 +vt 0.5392 0.9631 +vt 0.5395 0.9550 +vt 0.5397 0.9701 +vt 0.5402 0.9755 +vt 0.5402 0.9902 +vt 0.5331 0.9630 +vt 0.5328 0.9550 +vt 0.5343 0.9695 +vt 0.5355 0.9742 +vt 0.5355 0.9902 +vt 0.2961 0.2099 +vt 0.2965 0.2180 +vt 0.2883 0.2177 +vt 0.3036 0.2099 +vt 0.3039 0.2179 +vt 0.3103 0.2099 +vt 0.3100 0.2178 +vt 0.3235 0.2099 +vt 0.3235 0.2178 +vt 0.2964 0.2254 +vt 0.2883 0.2252 +vt 0.3034 0.2250 +vt 0.3088 0.2244 +vt 0.3235 0.2244 +vt 0.2963 0.2316 +vt 0.2883 0.2318 +vt 0.3029 0.2304 +vt 0.3076 0.2291 +vt 0.3235 0.2291 +vt 0.0098 0.9742 +vt 0.4726 0.9550 +vt 0.4729 0.9631 +vt 0.4648 0.9628 +vt 0.4801 0.9550 +vt 0.4803 0.9630 +vt 0.4867 0.9550 +vt 0.4864 0.9629 +vt 0.5000 0.9550 +vt 0.5000 0.9629 +vt 0.4729 0.9705 +vt 0.4648 0.9703 +vt 0.4799 0.9701 +vt 0.4853 0.9695 +vt 0.5000 0.9695 +vt 0.4727 0.9767 +vt 0.4648 0.9769 +vt 0.4793 0.9755 +vt 0.4840 0.9742 +vt 0.5000 0.9742 +vt 0.0450 0.2177 +vt 0.0369 0.2180 +vt 0.0372 0.2099 +vt 0.0450 0.2252 +vt 0.0370 0.2254 +vt 0.0450 0.2318 +vt 0.0371 0.2315 +vt 0.0450 0.2451 +vt 0.0371 0.2451 +vt 0.0295 0.2180 +vt 0.0297 0.2099 +vt 0.0299 0.2250 +vt 0.0305 0.2304 +vt 0.0305 0.2451 +vt 0.0233 0.2178 +vt 0.0231 0.2099 +vt 0.0245 0.2244 +vt 0.0258 0.2291 +vt 0.0258 0.2451 +vt 0.7981 0.9550 +vt 0.8059 0.9550 +vt 0.8062 0.9631 +vt 0.7981 0.9628 +vt 0.8133 0.9550 +vt 0.8136 0.9630 +vt 0.8200 0.9550 +vt 0.8197 0.9629 +vt 0.8333 0.9550 +vt 0.8333 0.9630 +vt 0.8062 0.9705 +vt 0.7981 0.9703 +vt 0.8132 0.9701 +vt 0.8186 0.9695 +vt 0.8333 0.9695 +vt 0.8060 0.9767 +vt 0.7981 0.9769 +vt 0.8126 0.9755 +vt 0.8173 0.9742 +vt 0.8333 0.9742 +vt 0.4840 0.9902 +vt 0.7981 0.7823 +vt 0.8062 0.7820 +vt 0.8059 0.7901 +vt 0.7981 0.7749 +vt 0.8061 0.7746 +vt 0.7981 0.7682 +vt 0.8060 0.7685 +vt 0.7981 0.7549 +vt 0.8061 0.7549 +vt 0.8136 0.7820 +vt 0.8134 0.7901 +vt 0.8132 0.7750 +vt 0.8126 0.7696 +vt 0.8126 0.7549 +vt 0.8198 0.7822 +vt 0.8200 0.7901 +vt 0.8186 0.7756 +vt 0.8173 0.7709 +vt 0.8173 0.7549 +vt 0.0372 0.0450 +vt 0.0369 0.0369 +vt 0.0450 0.0372 +vt 0.0297 0.0450 +vt 0.0295 0.0370 +vt 0.0231 0.0450 +vt 0.0234 0.0371 +vt 0.0098 0.0450 +vt 0.0098 0.0371 +vt 0.0369 0.0295 +vt 0.0450 0.0297 +vt 0.0299 0.0299 +vt 0.0245 0.0305 +vt 0.0098 0.0305 +vt 0.0371 0.0233 +vt 0.0450 0.0231 +vt 0.0305 0.0245 +vt 0.0258 0.0258 +vt 0.0098 0.0258 +vt 0.4648 0.7823 +vt 0.4729 0.7820 +vt 0.4726 0.7901 +vt 0.4648 0.7748 +vt 0.4728 0.7746 +vt 0.4648 0.7682 +vt 0.4727 0.7685 +vt 0.4648 0.7549 +vt 0.4727 0.7549 +vt 0.4803 0.7820 +vt 0.4801 0.7901 +vt 0.4799 0.7750 +vt 0.4793 0.7696 +vt 0.4793 0.7549 +vt 0.4865 0.7822 +vt 0.4867 0.7901 +vt 0.4853 0.7756 +vt 0.4840 0.7709 +vt 0.4840 0.7549 +vt 0.8333 0.7709 +vt 0.0372 0.7901 +vt 0.0369 0.7820 +vt 0.0450 0.7823 +vt 0.0297 0.7901 +vt 0.0295 0.7821 +vt 0.0231 0.7901 +vt 0.0234 0.7822 +vt 0.0098 0.7901 +vt 0.0098 0.7822 +vt 0.0369 0.7746 +vt 0.0450 0.7748 +vt 0.0299 0.7750 +vt 0.0245 0.7756 +vt 0.0098 0.7756 +vt 0.0371 0.7684 +vt 0.0450 0.7682 +vt 0.0305 0.7696 +vt 0.0258 0.7709 +vt 0.0098 0.7709 +vt 0.2883 0.0372 +vt 0.2964 0.0369 +vt 0.2961 0.0450 +vt 0.2883 0.0297 +vt 0.2964 0.0295 +vt 0.2883 0.0231 +vt 0.2963 0.0234 +vt 0.2883 0.0098 +vt 0.2963 0.0098 +vt 0.3038 0.0369 +vt 0.3036 0.0450 +vt 0.3034 0.0299 +vt 0.3028 0.0245 +vt 0.3029 0.0098 +vt 0.3100 0.0371 +vt 0.3103 0.0450 +vt 0.3088 0.0305 +vt 0.3076 0.0258 +vt 0.3076 0.0098 +vt 0.5470 0.7901 +vt 0.5467 0.7820 +vt 0.5549 0.7823 +vt 0.5396 0.7901 +vt 0.5393 0.7821 +vt 0.5329 0.7901 +vt 0.5332 0.7822 +vt 0.5196 0.7901 +vt 0.5196 0.7822 +vt 0.5467 0.7746 +vt 0.5549 0.7749 +vt 0.5397 0.7750 +vt 0.5343 0.7756 +vt 0.5196 0.7756 +vt 0.5469 0.7684 +vt 0.5549 0.7682 +vt 0.5403 0.7696 +vt 0.5356 0.7709 +vt 0.5196 0.7709 +vt 0.0258 0.7549 +vt 0.2177 0.9550 +vt 0.2180 0.9631 +vt 0.2099 0.9628 +vt 0.2252 0.9550 +vt 0.2254 0.9630 +vt 0.2318 0.9550 +vt 0.2315 0.9629 +vt 0.2451 0.9550 +vt 0.2451 0.9629 +vt 0.2180 0.9705 +vt 0.2099 0.9703 +vt 0.2250 0.9701 +vt 0.2304 0.9695 +vt 0.2451 0.9695 +vt 0.2178 0.9767 +vt 0.2099 0.9769 +vt 0.2244 0.9755 +vt 0.2291 0.9742 +vt 0.2451 0.9742 +vt 0.0450 0.4628 +vt 0.0369 0.4631 +vt 0.0372 0.4550 +vt 0.0450 0.4703 +vt 0.0370 0.4705 +vt 0.0450 0.4769 +vt 0.0371 0.4766 +vt 0.0450 0.4902 +vt 0.0371 0.4902 +vt 0.0295 0.4631 +vt 0.0297 0.4550 +vt 0.0299 0.4701 +vt 0.0305 0.4755 +vt 0.0305 0.4902 +vt 0.0233 0.4629 +vt 0.0231 0.4550 +vt 0.0245 0.4695 +vt 0.0258 0.4742 +vt 0.0258 0.4902 +vt 0.5548 0.7901 +vt 0.5470 0.7901 +vt 0.5466 0.7820 +vt 0.5548 0.7823 +vt 0.5395 0.7901 +vt 0.5392 0.7821 +vt 0.5328 0.7901 +vt 0.5331 0.7822 +vt 0.5196 0.7901 +vt 0.5196 0.7822 +vt 0.5467 0.7746 +vt 0.5548 0.7749 +vt 0.5397 0.7750 +vt 0.5343 0.7756 +vt 0.5196 0.7756 +vt 0.5468 0.7684 +vt 0.5548 0.7682 +vt 0.5402 0.7696 +vt 0.5355 0.7709 +vt 0.5196 0.7709 +vt 0.2291 0.9902 +vt 0.2961 0.4550 +vt 0.2965 0.4631 +vt 0.2883 0.4628 +vt 0.3036 0.4550 +vt 0.3039 0.4630 +vt 0.3103 0.4550 +vt 0.3100 0.4629 +vt 0.3235 0.4550 +vt 0.3235 0.4629 +vt 0.2964 0.4705 +vt 0.2883 0.4703 +vt 0.3034 0.4701 +vt 0.3088 0.4695 +vt 0.3235 0.4695 +vt 0.2963 0.4767 +vt 0.2883 0.4769 +vt 0.3029 0.4755 +vt 0.3076 0.4742 +vt 0.3235 0.4742 +vt 0.2999 0.9628 +vt 0.2918 0.9631 +vt 0.2921 0.9550 +vt 0.2999 0.9703 +vt 0.2919 0.9705 +vt 0.2999 0.9769 +vt 0.2920 0.9766 +vt 0.2999 0.9902 +vt 0.2920 0.9902 +vt 0.2844 0.9631 +vt 0.2847 0.9550 +vt 0.2848 0.9701 +vt 0.2854 0.9755 +vt 0.2854 0.9902 +vt 0.2782 0.9629 +vt 0.2780 0.9550 +vt 0.2794 0.9695 +vt 0.2807 0.9742 +vt 0.2807 0.9902 +vt 0.7981 0.7901 +vt 0.7981 0.7823 +vt 0.8061 0.7820 +vt 0.8059 0.7901 +vt 0.7981 0.7749 +vt 0.8061 0.7746 +vt 0.7981 0.7682 +vt 0.8060 0.7685 +vt 0.7981 0.7549 +vt 0.8060 0.7549 +vt 0.8136 0.7820 +vt 0.8133 0.7901 +vt 0.8132 0.7750 +vt 0.8126 0.7696 +vt 0.8126 0.7549 +vt 0.8198 0.7822 +vt 0.8200 0.7901 +vt 0.8186 0.7756 +vt 0.8173 0.7709 +vt 0.8173 0.7549 +vt 0.3076 0.4902 +vt 0.2883 0.2823 +vt 0.2964 0.2820 +vt 0.2961 0.2901 +vt 0.2883 0.2748 +vt 0.2964 0.2746 +vt 0.2883 0.2682 +vt 0.2963 0.2685 +vt 0.2883 0.2549 +vt 0.2963 0.2549 +vt 0.3038 0.2820 +vt 0.3036 0.2901 +vt 0.3034 0.2750 +vt 0.3028 0.2696 +vt 0.3029 0.2549 +vt 0.3100 0.2822 +vt 0.3103 0.2901 +vt 0.3088 0.2756 +vt 0.3076 0.2709 +vt 0.3076 0.2549 +vt 0.8059 0.9549 +vt 0.8063 0.9630 +vt 0.7981 0.9628 +vt 0.8134 0.9549 +vt 0.8136 0.9630 +vt 0.8200 0.9549 +vt 0.8197 0.9629 +vt 0.8333 0.9549 +vt 0.8333 0.9629 +vt 0.8062 0.9705 +vt 0.7981 0.9702 +vt 0.8132 0.9700 +vt 0.8186 0.9695 +vt 0.8333 0.9695 +vt 0.8061 0.9766 +vt 0.7981 0.9769 +vt 0.8126 0.9755 +vt 0.8173 0.9742 +vt 0.8333 0.9742 +vt 0.2921 0.7901 +vt 0.2918 0.7820 +vt 0.2999 0.7823 +vt 0.2847 0.7901 +vt 0.2844 0.7821 +vt 0.2780 0.7901 +vt 0.2783 0.7822 +vt 0.2647 0.7901 +vt 0.2647 0.7822 +vt 0.2918 0.7746 +vt 0.2999 0.7748 +vt 0.2848 0.7750 +vt 0.2794 0.7756 +vt 0.2647 0.7756 +vt 0.2920 0.7684 +vt 0.2999 0.7682 +vt 0.2854 0.7696 +vt 0.2807 0.7709 +vt 0.2647 0.7709 +vt 0.3235 0.2709 +vt 0.0372 0.2901 +vt 0.0369 0.2820 +vt 0.0450 0.2823 +vt 0.0297 0.2901 +vt 0.0295 0.2821 +vt 0.0231 0.2901 +vt 0.0234 0.2822 +vt 0.0098 0.2901 +vt 0.0098 0.2822 +vt 0.0369 0.2746 +vt 0.0450 0.2748 +vt 0.0299 0.2750 +vt 0.0245 0.2756 +vt 0.0098 0.2756 +vt 0.0371 0.2684 +vt 0.0450 0.2682 +vt 0.0305 0.2696 +vt 0.0258 0.2709 +vt 0.0098 0.2709 +vt 0.2099 0.7823 +vt 0.2180 0.7820 +vt 0.2177 0.7901 +vt 0.2099 0.7748 +vt 0.2179 0.7746 +vt 0.2099 0.7682 +vt 0.2178 0.7685 +vt 0.2099 0.7549 +vt 0.2178 0.7549 +vt 0.2254 0.7820 +vt 0.2252 0.7901 +vt 0.2250 0.7750 +vt 0.2244 0.7696 +vt 0.2244 0.7549 +vt 0.2316 0.7822 +vt 0.2318 0.7901 +vt 0.2304 0.7756 +vt 0.2291 0.7709 +vt 0.2291 0.7549 +vt 0.5549 0.9628 +vt 0.5468 0.9631 +vt 0.5470 0.9549 +vt 0.5549 0.9702 +vt 0.5468 0.9705 +vt 0.5549 0.9769 +vt 0.5469 0.9766 +vt 0.5549 0.9902 +vt 0.5469 0.9902 +vt 0.5393 0.9631 +vt 0.5396 0.9549 +vt 0.5398 0.9701 +vt 0.5403 0.9755 +vt 0.5403 0.9902 +vt 0.5332 0.9629 +vt 0.5329 0.9549 +vt 0.5343 0.9695 +vt 0.5356 0.9742 +vt 0.5356 0.9902 +vt 0.0258 0.2549 +vt 0.2099 0.9902 +vt 0.2883 0.4902 +vt 0.4648 0.9902 +vt 0.2883 0.2451 +vt 0.3235 0.2901 +vt 0.8333 0.7901 +vt 0.0098 0.2099 +vt 0.0450 0.2549 +vt 0.0450 0.7549 +vt 0.0450 0.0098 +vt 0.0098 0.4550 +vt 0.3235 0.0450 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.6198 0.6996 +vt 0.6334 0.7133 +vt 0.6494 0.7240 +vt 0.6672 0.7313 +vt 0.6861 0.7351 +vt 0.7054 0.7351 +vt 0.7243 0.7313 +vt 0.7421 0.7240 +vt 0.7581 0.7133 +vt 0.7717 0.6996 +vt 0.7824 0.6836 +vt 0.7898 0.6658 +vt 0.7935 0.6469 +vt 0.7935 0.6277 +vt 0.7898 0.6088 +vt 0.7824 0.5910 +vt 0.7717 0.5750 +vt 0.7581 0.5614 +vt 0.7421 0.5507 +vt 0.7243 0.5433 +vt 0.7054 0.5396 +vt 0.6861 0.5396 +vt 0.6672 0.5433 +vt 0.6494 0.5507 +vt 0.6334 0.5614 +vt 0.6198 0.5750 +vt 0.6091 0.5910 +vt 0.6017 0.6088 +vt 0.5980 0.6277 +vt 0.5980 0.6469 +vt 0.6017 0.6658 +vt 0.6091 0.6836 +vt 0.4897 0.5433 +vt 0.5074 0.5507 +vt 0.5235 0.5614 +vt 0.5371 0.5750 +vt 0.5478 0.5910 +vt 0.5551 0.6088 +vt 0.5589 0.6277 +vt 0.5589 0.6469 +vt 0.5551 0.6658 +vt 0.5478 0.6836 +vt 0.5371 0.6996 +vt 0.5235 0.7133 +vt 0.5074 0.7240 +vt 0.4897 0.7313 +vt 0.4708 0.7351 +vt 0.4515 0.7351 +vt 0.4326 0.7313 +vt 0.4148 0.7240 +vt 0.3988 0.7133 +vt 0.3852 0.6996 +vt 0.3745 0.6836 +vt 0.3671 0.6658 +vt 0.3634 0.6469 +vt 0.3634 0.6277 +vt 0.3671 0.6088 +vt 0.3745 0.5910 +vt 0.3852 0.5750 +vt 0.3988 0.5614 +vt 0.4148 0.5507 +vt 0.4326 0.5433 +vt 0.4515 0.5396 +vt 0.4708 0.5396 +vt 0.7054 0.5396 +vt 0.7243 0.5433 +vt 0.7421 0.5507 +vt 0.7581 0.5614 +vt 0.7717 0.5750 +vt 0.7824 0.5910 +vt 0.7898 0.6088 +vt 0.7935 0.6277 +vt 0.7935 0.6469 +vt 0.7898 0.6658 +vt 0.7824 0.6836 +vt 0.7717 0.6996 +vt 0.7581 0.7133 +vt 0.7421 0.7240 +vt 0.7243 0.7313 +vt 0.7054 0.7351 +vt 0.6861 0.7351 +vt 0.6672 0.7313 +vt 0.6494 0.7240 +vt 0.6334 0.7133 +vt 0.6198 0.6996 +vt 0.6091 0.6836 +vt 0.6017 0.6658 +vt 0.5980 0.6469 +vt 0.5980 0.6277 +vt 0.6017 0.6088 +vt 0.6091 0.5910 +vt 0.6198 0.5750 +vt 0.6334 0.5614 +vt 0.6494 0.5507 +vt 0.6672 0.5433 +vt 0.6861 0.5396 +vt 0.4148 0.5507 +vt 0.3988 0.5614 +vt 0.3852 0.5750 +vt 0.3745 0.5910 +vt 0.3671 0.6088 +vt 0.3634 0.6277 +vt 0.3634 0.6469 +vt 0.3671 0.6658 +vt 0.3745 0.6836 +vt 0.3852 0.6996 +vt 0.3988 0.7133 +vt 0.4148 0.7240 +vt 0.4326 0.7313 +vt 0.4515 0.7351 +vt 0.4708 0.7351 +vt 0.4897 0.7313 +vt 0.5074 0.7240 +vt 0.5235 0.7133 +vt 0.5371 0.6996 +vt 0.5478 0.6836 +vt 0.5551 0.6658 +vt 0.5589 0.6469 +vt 0.5589 0.6277 +vt 0.5551 0.6088 +vt 0.5478 0.5910 +vt 0.5371 0.5750 +vt 0.5235 0.5614 +vt 0.5074 0.5507 +vt 0.4897 0.5433 +vt 0.4708 0.5396 +vt 0.4515 0.5396 +vt 0.4326 0.5433 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.7745 0.5685 +vt 0.7829 0.5637 +vt 0.7829 0.5540 +vt 0.7745 0.5491 +vt 0.7661 0.5540 +vt 0.7661 0.5637 +vt 0.9359 0.8967 +vt 0.9307 0.9009 +vt 0.9304 0.9009 +vt 0.9354 0.8967 +vt 0.9359 0.8484 +vt 0.9401 0.8536 +vt 0.9396 0.8536 +vt 0.9354 0.8484 +vt 0.9401 0.8915 +vt 0.9396 0.8915 +vt 0.9307 0.8442 +vt 0.9304 0.8442 +vt 0.9433 0.8856 +vt 0.9427 0.8856 +vt 0.9248 0.8410 +vt 0.9246 0.8410 +vt 0.9452 0.8792 +vt 0.9446 0.8792 +vt 0.9184 0.8391 +vt 0.9183 0.8391 +vt 0.9459 0.8725 +vt 0.9452 0.8725 +vt 0.9184 0.9060 +vt 0.9118 0.9067 +vt 0.9183 0.9060 +vt 0.9118 0.8384 +vt 0.9452 0.8659 +vt 0.9446 0.8659 +vt 0.9248 0.9041 +vt 0.9246 0.9041 +vt 0.9433 0.8595 +vt 0.9427 0.8595 +vt 0.9427 0.8659 +vt 0.9409 0.8595 +vt 0.9238 0.9041 +vt 0.9293 0.9009 +vt 0.9380 0.8536 +vt 0.9341 0.8967 +vt 0.9341 0.8484 +vt 0.9380 0.8915 +vt 0.9293 0.8442 +vt 0.9409 0.8856 +vt 0.9238 0.8410 +vt 0.9427 0.8792 +vt 0.9179 0.8391 +vt 0.9433 0.8725 +vt 0.9179 0.9060 +vt 0.9275 0.8442 +vt 0.9226 0.8410 +vt 0.9380 0.8856 +vt 0.9396 0.8792 +vt 0.9173 0.8391 +vt 0.9401 0.8725 +vt 0.9173 0.9060 +vt 0.9396 0.8659 +vt 0.9226 0.9041 +vt 0.9380 0.8595 +vt 0.9275 0.9009 +vt 0.9354 0.8536 +vt 0.9318 0.8967 +vt 0.9318 0.8484 +vt 0.9354 0.8915 +vt 0.9341 0.8595 +vt 0.9318 0.8536 +vt 0.9252 0.9009 +vt 0.9288 0.8967 +vt 0.9288 0.8484 +vt 0.9318 0.8915 +vt 0.9252 0.8442 +vt 0.9341 0.8856 +vt 0.9210 0.8410 +vt 0.9354 0.8792 +vt 0.9165 0.8391 +vt 0.9359 0.8725 +vt 0.9165 0.9060 +vt 0.9354 0.8659 +vt 0.9210 0.9041 +vt 0.9190 0.8410 +vt 0.9155 0.8391 +vt 0.9304 0.8792 +vt 0.9307 0.8725 +vt 0.9155 0.9060 +vt 0.9304 0.8659 +vt 0.9190 0.9041 +vt 0.9293 0.8595 +vt 0.9223 0.9009 +vt 0.9275 0.8536 +vt 0.9252 0.8967 +vt 0.9252 0.8484 +vt 0.9275 0.8915 +vt 0.9223 0.8442 +vt 0.9293 0.8856 +vt 0.9190 0.9009 +vt 0.9210 0.8967 +vt 0.9226 0.8536 +vt 0.9210 0.8484 +vt 0.9226 0.8915 +vt 0.9190 0.8442 +vt 0.9238 0.8856 +vt 0.9168 0.8410 +vt 0.9246 0.8792 +vt 0.9143 0.8391 +vt 0.9248 0.8725 +vt 0.9143 0.9060 +vt 0.9246 0.8659 +vt 0.9168 0.9041 +vt 0.9238 0.8595 +vt 0.9183 0.8792 +vt 0.9184 0.8725 +vt 0.9131 0.9060 +vt 0.9131 0.8391 +vt 0.9183 0.8659 +vt 0.9143 0.9041 +vt 0.9179 0.8595 +vt 0.9155 0.9009 +vt 0.9173 0.8536 +vt 0.9165 0.8967 +vt 0.9165 0.8484 +vt 0.9173 0.8915 +vt 0.9155 0.8442 +vt 0.9179 0.8856 +vt 0.9143 0.8410 +vt 0.9118 0.8536 +vt 0.9118 0.8484 +vt 0.9118 0.8967 +vt 0.9118 0.8915 +vt 0.9118 0.8442 +vt 0.9118 0.8856 +vt 0.9118 0.8410 +vt 0.9118 0.8792 +vt 0.9118 0.8391 +vt 0.9118 0.8725 +vt 0.9118 0.9060 +vt 0.9118 0.8659 +vt 0.9118 0.9041 +vt 0.9118 0.8595 +vt 0.9118 0.9009 +vt 0.9105 0.9060 +vt 0.9105 0.8391 +vt 0.9051 0.8725 +vt 0.9052 0.8659 +vt 0.9092 0.9041 +vt 0.9056 0.8595 +vt 0.9081 0.9009 +vt 0.9062 0.8536 +vt 0.9071 0.8967 +vt 0.9071 0.8484 +vt 0.9062 0.8915 +vt 0.9081 0.8442 +vt 0.9056 0.8856 +vt 0.9092 0.8410 +vt 0.9052 0.8792 +vt 0.9025 0.8967 +vt 0.9009 0.8915 +vt 0.9025 0.8484 +vt 0.9045 0.8442 +vt 0.8997 0.8856 +vt 0.9068 0.8410 +vt 0.8990 0.8792 +vt 0.9092 0.8391 +vt 0.8987 0.8725 +vt 0.9092 0.9060 +vt 0.8990 0.8659 +vt 0.9068 0.9041 +vt 0.8997 0.8595 +vt 0.9045 0.9009 +vt 0.9009 0.8536 +vt 0.8928 0.8725 +vt 0.8932 0.8659 +vt 0.9081 0.9060 +vt 0.9045 0.9041 +vt 0.8942 0.8595 +vt 0.9012 0.9009 +vt 0.8960 0.8536 +vt 0.8984 0.8967 +vt 0.8984 0.8484 +vt 0.8960 0.8915 +vt 0.9012 0.8442 +vt 0.8942 0.8856 +vt 0.9045 0.8410 +vt 0.8932 0.8792 +vt 0.9081 0.8391 +vt 0.8947 0.8484 +vt 0.8984 0.8442 +vt 0.8917 0.8915 +vt 0.8895 0.8856 +vt 0.9025 0.8410 +vt 0.8881 0.8792 +vt 0.9071 0.8391 +vt 0.8876 0.8725 +vt 0.9071 0.9060 +vt 0.8881 0.8659 +vt 0.9025 0.9041 +vt 0.8895 0.8595 +vt 0.8984 0.9009 +vt 0.8917 0.8536 +vt 0.8947 0.8967 +vt 0.8839 0.8659 +vt 0.8856 0.8595 +vt 0.9009 0.9041 +vt 0.8960 0.9009 +vt 0.8882 0.8536 +vt 0.8917 0.8967 +vt 0.8917 0.8484 +vt 0.8882 0.8915 +vt 0.8960 0.8442 +vt 0.8856 0.8856 +vt 0.9009 0.8410 +vt 0.8839 0.8792 +vt 0.9062 0.8391 +vt 0.8834 0.8725 +vt 0.9062 0.9060 +vt 0.8942 0.8442 +vt 0.8997 0.8410 +vt 0.8826 0.8856 +vt 0.8808 0.8792 +vt 0.9056 0.8391 +vt 0.8802 0.8725 +vt 0.9056 0.9060 +vt 0.8808 0.8659 +vt 0.8997 0.9041 +vt 0.8826 0.8595 +vt 0.8942 0.9009 +vt 0.8856 0.8536 +vt 0.8895 0.8967 +vt 0.8895 0.8484 +vt 0.8856 0.8915 +vt 0.8990 0.9041 +vt 0.8932 0.9009 +vt 0.8808 0.8595 +vt 0.8839 0.8536 +vt 0.8881 0.8967 +vt 0.8881 0.8484 +vt 0.8839 0.8915 +vt 0.8932 0.8442 +vt 0.8808 0.8856 +vt 0.8990 0.8410 +vt 0.8789 0.8792 +vt 0.9052 0.8391 +vt 0.8783 0.8725 +vt 0.9052 0.9060 +vt 0.8789 0.8659 +vt 0.8802 0.8856 +vt 0.8783 0.8792 +vt 0.8987 0.8410 +vt 0.9051 0.8391 +vt 0.8776 0.8725 +vt 0.9051 0.9060 +vt 0.8783 0.8659 +vt 0.8987 0.9041 +vt 0.8802 0.8595 +vt 0.8928 0.9009 +vt 0.8834 0.8536 +vt 0.8876 0.8967 +vt 0.8876 0.8484 +vt 0.8834 0.8915 +vt 0.8928 0.8442 +vt 0.8802 0.8725 +vt 0.8808 0.8792 +vt 0.8789 0.8792 +vt 0.8783 0.8725 +vt 0.8932 0.9009 +vt 0.8990 0.9041 +vt 0.8987 0.9041 +vt 0.8928 0.9009 +vt 0.8826 0.8856 +vt 0.8808 0.8856 +vt 0.9052 0.9060 +vt 0.9051 0.9060 +vt 0.8856 0.8915 +vt 0.8839 0.8915 +vt 0.9118 0.8384 +vt 0.9052 0.8391 +vt 0.9051 0.8391 +vt 0.8895 0.8967 +vt 0.8881 0.8967 +vt 0.8783 0.8792 +vt 0.8776 0.8725 +vt 0.8942 0.9009 +vt 0.8802 0.8856 +vt 0.8932 0.8442 +vt 0.8881 0.8484 +vt 0.8876 0.8484 +vt 0.8928 0.8442 +vt 0.8856 0.8536 +vt 0.8826 0.8595 +vt 0.8808 0.8595 +vt 0.8839 0.8536 +vt 0.8997 0.9041 +vt 0.9056 0.9060 +vt 0.8834 0.8915 +vt 0.9056 0.8391 +vt 0.8876 0.8967 +vt 0.8895 0.8484 +vt 0.8990 0.8410 +vt 0.8987 0.8410 +vt 0.8808 0.8659 +vt 0.8789 0.8659 +vt 0.8834 0.8536 +vt 0.9118 0.9067 +vt 0.8802 0.8595 +vt 0.8997 0.8410 +vt 0.8783 0.8659 +vt 0.8942 0.8442 +vt 0.8917 0.8484 +vt 0.8882 0.8536 +vt 0.9062 0.9060 +vt 0.8917 0.8967 +vt 0.8960 0.9009 +vt 0.8834 0.8725 +vt 0.8839 0.8792 +vt 0.8856 0.8595 +vt 0.9062 0.8391 +vt 0.9009 0.8410 +vt 0.9009 0.9041 +vt 0.8856 0.8856 +vt 0.8839 0.8659 +vt 0.8882 0.8915 +vt 0.8960 0.8442 +vt 0.9025 0.8410 +vt 0.8984 0.8442 +vt 0.8881 0.8659 +vt 0.8876 0.8725 +vt 0.8895 0.8595 +vt 0.8895 0.8856 +vt 0.8917 0.8915 +vt 0.9025 0.9041 +vt 0.9071 0.9060 +vt 0.8947 0.8484 +vt 0.9071 0.8391 +vt 0.8947 0.8967 +vt 0.8917 0.8536 +vt 0.8881 0.8792 +vt 0.8984 0.9009 +vt 0.9081 0.8391 +vt 0.9045 0.8410 +vt 0.9012 0.9009 +vt 0.9045 0.9041 +vt 0.8932 0.8792 +vt 0.8942 0.8856 +vt 0.8942 0.8595 +vt 0.8932 0.8659 +vt 0.9012 0.8442 +vt 0.9081 0.9060 +vt 0.8960 0.8915 +vt 0.8928 0.8725 +vt 0.8984 0.8484 +vt 0.8960 0.8536 +vt 0.8984 0.8967 +vt 0.8990 0.8659 +vt 0.8987 0.8725 +vt 0.9009 0.8915 +vt 0.9025 0.8967 +vt 0.9092 0.8391 +vt 0.9025 0.8484 +vt 0.9009 0.8536 +vt 0.8990 0.8792 +vt 0.9045 0.9009 +vt 0.9068 0.8410 +vt 0.8997 0.8595 +vt 0.8997 0.8856 +vt 0.9068 0.9041 +vt 0.9045 0.8442 +vt 0.9092 0.9060 +vt 0.9092 0.8410 +vt 0.9081 0.8442 +vt 0.9092 0.9041 +vt 0.9105 0.9060 +vt 0.9056 0.8856 +vt 0.9062 0.8915 +vt 0.9052 0.8659 +vt 0.9051 0.8725 +vt 0.9071 0.8484 +vt 0.9105 0.8391 +vt 0.9071 0.8967 +vt 0.9081 0.9009 +vt 0.9062 0.8536 +vt 0.9052 0.8792 +vt 0.9056 0.8595 +vt 0.9118 0.8725 +vt 0.9118 0.8792 +vt 0.9118 0.8536 +vt 0.9118 0.8595 +vt 0.9118 0.8856 +vt 0.9118 0.9009 +vt 0.9118 0.9041 +vt 0.9118 0.8410 +vt 0.9118 0.8442 +vt 0.9118 0.8659 +vt 0.9118 0.8915 +vt 0.9118 0.9060 +vt 0.9118 0.8484 +vt 0.9118 0.8967 +vt 0.9118 0.8391 +vt 0.9183 0.8659 +vt 0.9184 0.8725 +vt 0.9155 0.8442 +vt 0.9165 0.8484 +vt 0.9131 0.8391 +vt 0.9173 0.8915 +vt 0.9165 0.8967 +vt 0.9131 0.9060 +vt 0.9173 0.8536 +vt 0.9179 0.8595 +vt 0.9183 0.8792 +vt 0.9155 0.9009 +vt 0.9143 0.8410 +vt 0.9143 0.9041 +vt 0.9179 0.8856 +vt 0.9190 0.9009 +vt 0.9168 0.9041 +vt 0.9168 0.8410 +vt 0.9190 0.8442 +vt 0.9238 0.8595 +vt 0.9246 0.8659 +vt 0.9238 0.8856 +vt 0.9226 0.8915 +vt 0.9143 0.9060 +vt 0.9210 0.8484 +vt 0.9248 0.8725 +vt 0.9210 0.8967 +vt 0.9143 0.8391 +vt 0.9226 0.8536 +vt 0.9246 0.8792 +vt 0.9275 0.8915 +vt 0.9252 0.8967 +vt 0.9155 0.9060 +vt 0.9252 0.8484 +vt 0.9275 0.8536 +vt 0.9307 0.8725 +vt 0.9304 0.8792 +vt 0.9223 0.9009 +vt 0.9190 0.9041 +vt 0.9155 0.8391 +vt 0.9190 0.8410 +vt 0.9293 0.8595 +vt 0.9293 0.8856 +vt 0.9304 0.8659 +vt 0.9223 0.8442 +vt 0.9341 0.8856 +vt 0.9318 0.8915 +vt 0.9210 0.9041 +vt 0.9165 0.9060 +vt 0.9252 0.8442 +vt 0.9288 0.8484 +vt 0.9354 0.8659 +vt 0.9359 0.8725 +vt 0.9288 0.8967 +vt 0.9165 0.8391 +vt 0.9318 0.8536 +vt 0.9252 0.9009 +vt 0.9354 0.8792 +vt 0.9341 0.8595 +vt 0.9210 0.8410 +vt 0.9401 0.8725 +vt 0.9396 0.8792 +vt 0.9318 0.8967 +vt 0.9275 0.9009 +vt 0.9173 0.8391 +vt 0.9226 0.8410 +vt 0.9380 0.8595 +vt 0.9396 0.8659 +vt 0.9354 0.8536 +vt 0.9380 0.8856 +vt 0.9226 0.9041 +vt 0.9275 0.8442 +vt 0.9173 0.9060 +vt 0.9354 0.8915 +vt 0.9318 0.8484 +vt 0.9179 0.8391 +vt 0.9341 0.8484 +vt 0.9380 0.8536 +vt 0.9179 0.9060 +vt 0.9341 0.8967 +vt 0.9293 0.9009 +vt 0.9433 0.8725 +vt 0.9427 0.8792 +vt 0.9409 0.8595 +vt 0.9238 0.8410 +vt 0.9238 0.9041 +vt 0.9409 0.8856 +vt 0.9427 0.8659 +vt 0.9293 0.8442 +vt 0.9380 0.8915 +vt 0.9304 0.9009 +vt 0.9246 0.9041 +vt 0.9246 0.8410 +vt 0.9304 0.8442 +vt 0.9446 0.8659 +vt 0.9452 0.8725 +vt 0.9427 0.8595 +vt 0.9427 0.8856 +vt 0.9396 0.8915 +vt 0.9183 0.9060 +vt 0.9354 0.8484 +vt 0.9183 0.8391 +vt 0.9354 0.8967 +vt 0.9396 0.8536 +vt 0.9446 0.8792 +vt 0.9433 0.8856 +vt 0.9401 0.8915 +vt 0.9452 0.8659 +vt 0.9459 0.8725 +vt 0.9307 0.8442 +vt 0.9359 0.8484 +vt 0.9184 0.8391 +vt 0.9359 0.8967 +vt 0.9184 0.9060 +vt 0.9401 0.8536 +vt 0.9452 0.8792 +vt 0.9307 0.9009 +vt 0.9248 0.9041 +vt 0.9248 0.8410 +vt 0.9433 0.8595 +vt 0.6373 0.4902 +vt 0.6373 0.4706 +vt 0.6569 0.4706 +vt 0.6569 0.4902 +vt 0.6176 0.4902 +vt 0.6176 0.4706 +vt 0.5980 0.4902 +vt 0.5980 0.4706 +vt 0.5784 0.4902 +vt 0.5784 0.4706 +vt 0.5588 0.4902 +vt 0.5588 0.4706 +vt 0.5392 0.4902 +vt 0.5392 0.4706 +vt 0.5196 0.4902 +vt 0.5196 0.4706 +vt 0.5000 0.4902 +vt 0.5000 0.4706 +vt 0.4804 0.4902 +vt 0.4804 0.4706 +vt 0.4608 0.4902 +vt 0.4608 0.4706 +vt 0.4412 0.4902 +vt 0.4412 0.4706 +vt 0.4216 0.4902 +vt 0.4216 0.4706 +vt 0.4020 0.4902 +vt 0.4020 0.4706 +vt 0.3824 0.4902 +vt 0.3824 0.4706 +vt 0.3627 0.4902 +vt 0.3627 0.4706 +vt 0.3431 0.4902 +vt 0.3431 0.4706 +vt 0.9510 0.4902 +vt 0.9510 0.4706 +vt 0.9706 0.4706 +vt 0.9706 0.4902 +vt 0.9314 0.4902 +vt 0.9314 0.4706 +vt 0.9118 0.4902 +vt 0.9118 0.4706 +vt 0.8922 0.4902 +vt 0.8922 0.4706 +vt 0.8529 0.4902 +vt 0.8529 0.4706 +vt 0.8725 0.4706 +vt 0.8725 0.4902 +vt 0.8333 0.4902 +vt 0.8333 0.4706 +vt 0.8137 0.4902 +vt 0.8137 0.4706 +vt 0.7941 0.4902 +vt 0.7941 0.4706 +vt 0.7745 0.4902 +vt 0.7745 0.4706 +vt 0.7353 0.4902 +vt 0.7353 0.4706 +vt 0.7549 0.4706 +vt 0.7549 0.4902 +vt 0.7157 0.4902 +vt 0.7157 0.4706 +vt 0.6961 0.4902 +vt 0.6961 0.4706 +vt 0.7404 0.4399 +vt 0.7404 0.4309 +vt 0.7598 0.4309 +vt 0.7598 0.4398 +vt 0.7791 0.4399 +vt 0.7791 0.4309 +vt 0.7985 0.4399 +vt 0.7985 0.4309 +vt 0.8178 0.4398 +vt 0.8178 0.4309 +vt 0.8371 0.4399 +vt 0.8372 0.4309 +vt 0.8565 0.4399 +vt 0.8565 0.4309 +vt 0.8759 0.4309 +vt 0.8758 0.4399 +vt 0.8952 0.4400 +vt 0.8953 0.4310 +vt 0.9146 0.4400 +vt 0.9147 0.4310 +vt 0.9340 0.4401 +vt 0.9341 0.4311 +vt 0.9535 0.4311 +vt 0.9534 0.4401 +vt 0.9730 0.4311 +vt 0.9729 0.4402 +vt 0.9923 0.4402 +vt 0.9924 0.4311 +vt 1.0118 0.4311 +vt 1.0117 0.4402 +vt 1.0312 0.4311 +vt 1.0312 0.4402 +vt 1.0508 0.4402 +vt 1.0506 0.4311 +vt 1.0699 0.4310 +vt 1.0705 0.4400 +vt 1.0904 0.4397 +vt 1.0890 0.4307 +vt 0.4678 0.4397 +vt 0.4692 0.4307 +vt 0.4883 0.4309 +vt 0.4877 0.4400 +vt 0.5075 0.4402 +vt 0.5077 0.4310 +vt 0.5273 0.4311 +vt 0.5272 0.4402 +vt 0.5467 0.4310 +vt 0.5468 0.4401 +vt 0.5661 0.4310 +vt 0.5661 0.4400 +vt 0.5854 0.4310 +vt 0.5855 0.4400 +vt 0.6048 0.4310 +vt 0.6049 0.4399 +vt 0.6241 0.4309 +vt 0.6242 0.4399 +vt 0.6629 0.4399 +vt 0.6435 0.4399 +vt 0.6435 0.4309 +vt 0.6628 0.4309 +vt 0.7016 0.4399 +vt 0.6823 0.4399 +vt 0.6822 0.4309 +vt 0.7016 0.4309 +vt 0.7210 0.4399 +vt 0.7210 0.4309 +vt 0.9355 0.2444 +vt 0.9160 0.2460 +vt 0.9163 0.1405 +vt 0.9355 0.1405 +vt 0.9550 0.2444 +vt 0.9548 0.1405 +vt 0.9745 0.2459 +vt 0.9741 0.1405 +vt 0.8965 0.2491 +vt 0.8970 0.1405 +vt 0.9940 0.2490 +vt 0.9934 0.1405 +vt 0.8770 0.2536 +vt 0.8778 0.1405 +vt 1.0135 0.2535 +vt 1.0126 0.1406 +vt 0.8673 0.2564 +vt 0.8576 0.2536 +vt 0.8585 0.1404 +vt 0.9355 0.1316 +vt 0.9163 0.1316 +vt 0.9548 0.1315 +vt 0.9741 0.1315 +vt 1.0330 0.2535 +vt 1.0233 0.2564 +vt 1.0319 0.1406 +vt 0.8381 0.2491 +vt 0.8392 0.1404 +vt 0.8971 0.1316 +vt 0.9935 0.1316 +vt 1.0525 0.2490 +vt 1.0511 0.1407 +vt 0.8187 0.2459 +vt 0.8199 0.1403 +vt 0.8779 0.1315 +vt 1.0128 0.1316 +vt 1.0720 0.2458 +vt 1.0701 0.1409 +vt 0.7992 0.2443 +vt 0.8006 0.1403 +vt 0.8586 0.1315 +vt 0.7745 0.4902 +vt 0.7745 0.4706 +vt 0.7941 0.4706 +vt 0.7941 0.4902 +vt 0.8333 0.4902 +vt 0.8333 0.4706 +vt 0.8529 0.4706 +vt 0.8529 0.4902 +vt 1.0322 0.1316 +vt 0.7549 0.4902 +vt 0.7549 0.4706 +vt 0.8393 0.1314 +vt 0.8725 0.4706 +vt 0.8725 0.4902 +vt 1.0516 0.1317 +vt 0.7353 0.4902 +vt 0.7353 0.4706 +vt 0.4864 0.2438 +vt 0.4669 0.2437 +vt 0.4698 0.1394 +vt 0.4894 0.1392 +vt 0.7797 0.2443 +vt 0.7602 0.2459 +vt 0.7620 0.1402 +vt 0.7813 0.1402 +vt 0.8200 0.1314 +vt 0.7157 0.4902 +vt 0.7157 0.4706 +vt 1.0710 0.1319 +vt 0.6765 0.4902 +vt 0.6765 0.4706 +vt 0.6961 0.4706 +vt 0.6961 0.4902 +vt 0.8007 0.1313 +vt 0.8922 0.4706 +vt 0.8922 0.4902 +vt 1.0904 0.1324 +vt 1.0888 0.1411 +vt 0.6569 0.4902 +vt 0.6569 0.4706 +vt 0.5256 0.2486 +vt 0.5060 0.2454 +vt 0.5090 0.1392 +vt 0.5287 0.1392 +vt 0.7407 0.2489 +vt 0.7211 0.2534 +vt 0.7233 0.1400 +vt 0.7426 0.1401 +vt 0.7814 0.1312 +vt 0.9118 0.4706 +vt 0.9118 0.4902 +vt 0.4889 0.1300 +vt 0.4687 0.1303 +vt 0.6765 0.4706 +vt 0.6765 0.4902 +vt 0.6373 0.4902 +vt 0.6373 0.4706 +vt 0.5451 0.2532 +vt 0.5482 0.1392 +vt 0.7113 0.2563 +vt 0.7016 0.2534 +vt 0.7039 0.1400 +vt 0.7621 0.1312 +vt 0.9314 0.4706 +vt 0.9314 0.4902 +vt 0.5090 0.1300 +vt 0.6176 0.4902 +vt 0.6176 0.4706 +vt 0.7428 0.1311 +vt 0.9510 0.4706 +vt 0.9510 0.4902 +vt 0.5288 0.1300 +vt 0.5980 0.4902 +vt 0.5980 0.4706 +vt 0.7234 0.1310 +vt 0.3431 0.4902 +vt 0.3431 0.4706 +vt 0.3627 0.4706 +vt 0.3627 0.4902 +vt 0.5484 0.1302 +vt 0.9706 0.4706 +vt 0.9706 0.4902 +vt 0.6040 0.2456 +vt 0.5844 0.2487 +vt 0.5872 0.1394 +vt 0.6068 0.1395 +vt 0.6627 0.2457 +vt 0.6432 0.2441 +vt 0.6457 0.1397 +vt 0.6651 0.1398 +vt 0.7041 0.1309 +vt 0.3824 0.4706 +vt 0.3824 0.4902 +vt 0.8137 0.4706 +vt 0.8137 0.4902 +vt 0.5679 0.1302 +vt 0.5677 0.1393 +vt 0.5784 0.4902 +vt 0.5784 0.4706 +vt 0.6236 0.2441 +vt 0.6263 0.1396 +vt 0.6847 0.1309 +vt 0.6845 0.1399 +vt 0.4020 0.4706 +vt 0.4020 0.4902 +vt 0.5874 0.1303 +vt 0.5588 0.4902 +vt 0.5588 0.4706 +vt 0.6653 0.1308 +vt 0.4216 0.4706 +vt 0.4216 0.4902 +vt 0.6070 0.1304 +vt 0.5392 0.4902 +vt 0.5392 0.4706 +vt 0.6459 0.1306 +vt 0.4412 0.4706 +vt 0.4412 0.4902 +vt 0.6265 0.1305 +vt 0.5196 0.4902 +vt 0.5196 0.4706 +vt 0.5000 0.4902 +vt 0.5000 0.4706 +vt 0.4608 0.4706 +vt 0.4608 0.4902 +vt 0.4804 0.4902 +vt 0.4804 0.4706 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.9159 0.2976 +vt 0.9158 0.3253 +vt 0.8963 0.3222 +vt 0.8964 0.3051 +vt 0.9745 0.2977 +vt 0.9743 0.3254 +vt 0.9548 0.3269 +vt 0.9550 0.2897 +vt 0.9940 0.3052 +vt 0.9939 0.3223 +vt 0.8768 0.3176 +vt 0.8769 0.3119 +vt 0.8671 0.3147 +vt 0.6330 0.2854 +vt 0.6428 0.2854 +vt 0.6428 0.2895 +vt 0.6330 0.2895 +vt 1.0233 0.3149 +vt 1.0135 0.3178 +vt 1.0135 0.3120 +vt 0.9354 0.2897 +vt 0.9353 0.3269 +vt 0.9452 0.2897 +vt 0.9452 0.2856 +vt 0.9355 0.2856 +vt 0.9355 0.2816 +vt 0.9452 0.2816 +vt 0.7892 0.2855 +vt 0.7794 0.2855 +vt 0.7795 0.2815 +vt 0.7892 0.2815 +vt 0.4762 0.2853 +vt 0.4762 0.2894 +vt 0.4664 0.2894 +vt 0.4664 0.2853 +vt 0.9159 0.2856 +vt 0.8964 0.2856 +vt 0.8769 0.2856 +vt 1.0331 0.2856 +vt 1.0331 0.3120 +vt 1.0135 0.2856 +vt 0.8379 0.2856 +vt 0.8380 0.2660 +vt 0.8575 0.2593 +vt 0.8574 0.2856 +vt 0.8185 0.2856 +vt 0.8185 0.2735 +vt 0.7989 0.2855 +vt 0.7990 0.2815 +vt 1.0135 0.2593 +vt 0.9940 0.2661 +vt 0.9745 0.2736 +vt 0.9550 0.2816 +vt 0.9160 0.2736 +vt 0.8965 0.2661 +vt 0.8770 0.2593 +vt 0.7600 0.2735 +vt 0.7405 0.2660 +vt 0.7211 0.2592 +vt 0.8573 0.3176 +vt 0.8573 0.3119 +vt 0.8379 0.3051 +vt 0.8378 0.3221 +vt 0.8183 0.3252 +vt 0.8184 0.2976 +vt 0.7989 0.2896 +vt 0.7988 0.3268 +vt 0.7794 0.2896 +vt 0.7892 0.2896 +vt 0.7793 0.3268 +vt 0.7599 0.2975 +vt 0.7598 0.3252 +vt 0.7403 0.3221 +vt 0.7404 0.3050 +vt 0.7208 0.3118 +vt 0.7208 0.3175 +vt 0.7111 0.3147 +vt 0.7405 0.2855 +vt 0.7209 0.2855 +vt 0.7600 0.2855 +vt 0.6819 0.2855 +vt 0.6820 0.2659 +vt 0.7015 0.2592 +vt 0.7014 0.2855 +vt 0.6624 0.2854 +vt 0.6818 0.3050 +vt 0.6623 0.2975 +vt 0.6037 0.2854 +vt 0.6038 0.2733 +vt 0.6233 0.2813 +vt 0.6233 0.2854 +vt 0.5842 0.2854 +vt 0.5842 0.2658 +vt 0.5646 0.2854 +vt 0.5646 0.2590 +vt 0.7013 0.3118 +vt 0.5450 0.2854 +vt 0.5449 0.3118 +vt 0.5253 0.3050 +vt 0.5254 0.2854 +vt 0.5057 0.2975 +vt 0.5057 0.2853 +vt 0.4860 0.2853 +vt 0.4861 0.2812 +vt 0.5057 0.2732 +vt 0.5547 0.3147 +vt 0.5645 0.3118 +vt 0.5645 0.3176 +vt 0.5841 0.3050 +vt 0.5841 0.3221 +vt 0.6037 0.2975 +vt 0.6037 0.3252 +vt 0.6232 0.2895 +vt 0.6232 0.3268 +vt 0.6428 0.3267 +vt 0.6623 0.3252 +vt 0.6818 0.3220 +vt 0.7013 0.3175 +vt 0.6821 0.2489 +vt 0.6624 0.2734 +vt 0.6428 0.2814 +vt 0.6330 0.2814 +vt 0.5647 0.2532 +vt 0.5549 0.2561 +vt 0.9940 0.2856 +vt 0.9745 0.2856 +vt 0.9550 0.2856 +vt 1.0331 0.2593 +vt 1.0527 0.2660 +vt 1.0723 0.2735 +vt 1.0919 0.2815 +vt 1.0915 0.2441 +vt 0.4762 0.2812 +vt 0.4664 0.2812 +vt 0.5254 0.2657 +vt 0.5450 0.2589 +vt 1.0527 0.2856 +vt 1.0527 0.3053 +vt 1.0723 0.2856 +vt 1.0723 0.2977 +vt 1.0920 0.2856 +vt 1.0331 0.3178 +vt 1.0526 0.3224 +vt 1.0721 0.3255 +vt 1.0917 0.3272 +vt 1.0920 0.2897 +vt 0.4862 0.3269 +vt 0.4666 0.3269 +vt 0.4860 0.2894 +vt 0.5058 0.3253 +vt 0.5254 0.3221 +vt 0.5449 0.3176 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.1170 -0.1170 -0.9862 +vn 0.3366 -0.1159 -0.9345 +vn 0.5344 -0.1109 -0.8379 +vn 0.7029 -0.1083 -0.7030 +vn 0.1176 -0.3360 -0.9345 +vn 0.3346 -0.3336 -0.8813 +vn 0.5195 -0.3218 -0.7916 +vn 0.6706 -0.3155 -0.6714 +vn 0.1119 -0.5343 -0.8378 +vn 0.3225 -0.5199 -0.7911 +vn 0.4911 -0.4911 -0.7194 +vn 0.6227 -0.4735 -0.6229 +vn 0.9862 -0.1170 -0.1170 +vn 0.9345 -0.3366 -0.1159 +vn 0.8379 -0.5344 -0.1109 +vn 0.7030 -0.7029 -0.1083 +vn 0.9345 -0.1176 -0.3360 +vn 0.8813 -0.3346 -0.3336 +vn 0.7916 -0.5195 -0.3218 +vn 0.6714 -0.6706 -0.3155 +vn 0.8378 -0.1119 -0.5343 +vn 0.7911 -0.3225 -0.5199 +vn 0.7194 -0.4911 -0.4911 +vn 0.6229 -0.6227 -0.4735 +vn 0.1170 -0.9862 -0.1170 +vn 0.1159 -0.9345 -0.3366 +vn 0.1109 -0.8379 -0.5344 +vn 0.1083 -0.7030 -0.7029 +vn 0.3360 -0.9345 -0.1176 +vn 0.3336 -0.8813 -0.3346 +vn 0.3218 -0.7916 -0.5195 +vn 0.3155 -0.6714 -0.6706 +vn 0.5343 -0.8378 -0.1119 +vn 0.5199 -0.7911 -0.3224 +vn 0.4911 -0.7194 -0.4911 +vn 0.4735 -0.6229 -0.6227 +vn 0.5774 -0.5773 -0.5774 +vn 0.1170 -0.1170 0.9862 +vn 0.1159 -0.3366 0.9345 +vn 0.1109 -0.5344 0.8379 +vn 0.1083 -0.7029 0.7030 +vn 0.3360 -0.1176 0.9345 +vn 0.3336 -0.3346 0.8813 +vn 0.3218 -0.5195 0.7916 +vn 0.3155 -0.6706 0.6714 +vn 0.5343 -0.1119 0.8378 +vn 0.5199 -0.3224 0.7911 +vn 0.4911 -0.4911 0.7194 +vn 0.4735 -0.6227 0.6229 +vn 0.1170 -0.9862 0.1170 +vn 0.3366 -0.9345 0.1159 +vn 0.5344 -0.8379 0.1109 +vn 0.7029 -0.7030 0.1083 +vn 0.1176 -0.9345 0.3360 +vn 0.3346 -0.8813 0.3336 +vn 0.5195 -0.7916 0.3218 +vn 0.6706 -0.6714 0.3155 +vn 0.1119 -0.8378 0.5343 +vn 0.3225 -0.7911 0.5199 +vn 0.4911 -0.7194 0.4911 +vn 0.6227 -0.6229 0.4735 +vn 0.9862 -0.1170 0.1170 +vn 0.9345 -0.1159 0.3366 +vn 0.8379 -0.1109 0.5344 +vn 0.7030 -0.1083 0.7028 +vn 0.9345 -0.3360 0.1176 +vn 0.8813 -0.3336 0.3346 +vn 0.7916 -0.3218 0.5195 +vn 0.6714 -0.3155 0.6706 +vn 0.8378 -0.5343 0.1119 +vn 0.7911 -0.5199 0.3224 +vn 0.7194 -0.4911 0.4911 +vn 0.6229 -0.4735 0.6227 +vn 0.5774 -0.5773 0.5773 +vn -0.9862 -0.1170 0.1170 +vn -0.9345 -0.3366 0.1159 +vn -0.8379 -0.5344 0.1109 +vn -0.7030 -0.7029 0.1083 +vn -0.9345 -0.1176 0.3360 +vn -0.8813 -0.3346 0.3336 +vn -0.7916 -0.5195 0.3218 +vn -0.6714 -0.6706 0.3155 +vn -0.8378 -0.1119 0.5343 +vn -0.7911 -0.3225 0.5199 +vn -0.7194 -0.4911 0.4911 +vn -0.6229 -0.6227 0.4735 +vn -0.1170 -0.9862 0.1170 +vn -0.1159 -0.9345 0.3366 +vn -0.1109 -0.8379 0.5344 +vn -0.1083 -0.7030 0.7029 +vn -0.3360 -0.9345 0.1176 +vn -0.3336 -0.8813 0.3346 +vn -0.3218 -0.7916 0.5195 +vn -0.3155 -0.6714 0.6706 +vn -0.5343 -0.8378 0.1119 +vn -0.5199 -0.7911 0.3224 +vn -0.4911 -0.7194 0.4911 +vn -0.4735 -0.6229 0.6227 +vn -0.1170 -0.1170 0.9862 +vn -0.3366 -0.1159 0.9345 +vn -0.5344 -0.1109 0.8379 +vn -0.7029 -0.1083 0.7030 +vn -0.1176 -0.3360 0.9345 +vn -0.3346 -0.3336 0.8813 +vn -0.5195 -0.3218 0.7916 +vn -0.6706 -0.3155 0.6714 +vn -0.1119 -0.5343 0.8378 +vn -0.3225 -0.5199 0.7911 +vn -0.4911 -0.4911 0.7194 +vn -0.6227 -0.4735 0.6229 +vn -0.5773 -0.5774 0.5774 +vn -0.1170 -0.1170 -0.9862 +vn -0.1159 -0.3366 -0.9345 +vn -0.1109 -0.5344 -0.8379 +vn -0.1083 -0.7029 -0.7030 +vn -0.3360 -0.1176 -0.9345 +vn -0.3336 -0.3346 -0.8813 +vn -0.3218 -0.5195 -0.7916 +vn -0.3155 -0.6706 -0.6714 +vn -0.5343 -0.1119 -0.8378 +vn -0.5199 -0.3225 -0.7911 +vn -0.4911 -0.4911 -0.7194 +vn -0.4735 -0.6227 -0.6229 +vn -0.1170 -0.9862 -0.1170 +vn -0.3366 -0.9345 -0.1159 +vn -0.5344 -0.8379 -0.1109 +vn -0.7029 -0.7030 -0.1083 +vn -0.1176 -0.9345 -0.3360 +vn -0.3346 -0.8813 -0.3336 +vn -0.5195 -0.7916 -0.3218 +vn -0.6706 -0.6714 -0.3155 +vn -0.1119 -0.8378 -0.5343 +vn -0.3225 -0.7911 -0.5199 +vn -0.4911 -0.7194 -0.4911 +vn -0.6227 -0.6229 -0.4735 +vn -0.9862 -0.1170 -0.1170 +vn -0.9345 -0.1159 -0.3366 +vn -0.8379 -0.1109 -0.5344 +vn -0.7030 -0.1083 -0.7029 +vn -0.9345 -0.3360 -0.1176 +vn -0.8813 -0.3336 -0.3346 +vn -0.7916 -0.3218 -0.5195 +vn -0.6714 -0.3155 -0.6706 +vn -0.8378 -0.5343 -0.1119 +vn -0.7911 -0.5199 -0.3224 +vn -0.7194 -0.4911 -0.4911 +vn -0.6229 -0.4735 -0.6227 +vn -0.5774 -0.5773 -0.5773 +vn 0.1170 0.1170 -0.9862 +vn 0.1159 0.3366 -0.9345 +vn 0.1109 0.5344 -0.8379 +vn 0.1083 0.7029 -0.7030 +vn 0.3360 0.1176 -0.9345 +vn 0.3336 0.3346 -0.8813 +vn 0.3218 0.5195 -0.7916 +vn 0.3155 0.6706 -0.6714 +vn 0.5343 0.1119 -0.8378 +vn 0.5199 0.3224 -0.7911 +vn 0.4911 0.4911 -0.7194 +vn 0.4735 0.6227 -0.6229 +vn 0.1170 0.9862 -0.1170 +vn 0.3366 0.9345 -0.1159 +vn 0.5344 0.8379 -0.1109 +vn 0.7028 0.7030 -0.1083 +vn 0.1176 0.9345 -0.3360 +vn 0.3346 0.8813 -0.3336 +vn 0.5195 0.7916 -0.3218 +vn 0.6706 0.6714 -0.3155 +vn 0.1119 0.8378 -0.5343 +vn 0.3225 0.7911 -0.5199 +vn 0.4911 0.7194 -0.4911 +vn 0.6227 0.6229 -0.4735 +vn 0.9862 0.1170 -0.1170 +vn 0.9345 0.1159 -0.3366 +vn 0.8379 0.1109 -0.5344 +vn 0.7030 0.1083 -0.7029 +vn 0.9345 0.3360 -0.1176 +vn 0.8813 0.3336 -0.3346 +vn 0.7916 0.3218 -0.5195 +vn 0.6714 0.3155 -0.6706 +vn 0.8378 0.5343 -0.1119 +vn 0.7911 0.5199 -0.3224 +vn 0.7194 0.4911 -0.4911 +vn 0.6229 0.4735 -0.6227 +vn 0.5773 0.5773 -0.5774 +vn 0.1170 0.9862 0.1170 +vn 0.1159 0.9345 0.3366 +vn 0.1109 0.8379 0.5344 +vn 0.1083 0.7030 0.7029 +vn 0.3360 0.9345 0.1176 +vn 0.3336 0.8813 0.3346 +vn 0.3218 0.7916 0.5195 +vn 0.3155 0.6714 0.6706 +vn 0.5343 0.8378 0.1119 +vn 0.5199 0.7911 0.3224 +vn 0.4911 0.7194 0.4911 +vn 0.4735 0.6229 0.6227 +vn 0.1170 0.1170 0.9862 +vn 0.3366 0.1159 0.9345 +vn 0.5344 0.1109 0.8379 +vn 0.7029 0.1083 0.7030 +vn 0.1176 0.3360 0.9345 +vn 0.3346 0.3336 0.8813 +vn 0.5195 0.3218 0.7916 +vn 0.6706 0.3155 0.6714 +vn 0.1119 0.5343 0.8378 +vn 0.3225 0.5199 0.7911 +vn 0.4911 0.4911 0.7194 +vn 0.6227 0.4735 0.6229 +vn 0.9862 0.1170 0.1170 +vn 0.9345 0.3366 0.1159 +vn 0.8379 0.5344 0.1109 +vn 0.7030 0.7029 0.1083 +vn 0.9345 0.1176 0.3360 +vn 0.8813 0.3346 0.3336 +vn 0.7916 0.5195 0.3218 +vn 0.6714 0.6706 0.3155 +vn 0.8378 0.1119 0.5343 +vn 0.7911 0.3225 0.5199 +vn 0.7194 0.4911 0.4911 +vn 0.6229 0.6227 0.4735 +vn 0.5774 0.5773 0.5774 +vn -0.1170 0.9862 0.1170 +vn -0.3366 0.9345 0.1159 +vn -0.5344 0.8379 0.1109 +vn -0.7028 0.7030 0.1083 +vn -0.1176 0.9345 0.3360 +vn -0.3346 0.8813 0.3336 +vn -0.5195 0.7916 0.3218 +vn -0.6706 0.6714 0.3155 +vn -0.1119 0.8378 0.5343 +vn -0.3225 0.7911 0.5199 +vn -0.4911 0.7194 0.4911 +vn -0.6227 0.6229 0.4735 +vn -0.9862 0.1170 0.1170 +vn -0.9345 0.1159 0.3366 +vn -0.8379 0.1109 0.5344 +vn -0.7030 0.1083 0.7029 +vn -0.9345 0.3360 0.1176 +vn -0.8813 0.3336 0.3346 +vn -0.7916 0.3218 0.5195 +vn -0.6714 0.3155 0.6706 +vn -0.8378 0.5343 0.1119 +vn -0.7911 0.5199 0.3224 +vn -0.7194 0.4911 0.4911 +vn -0.6229 0.4735 0.6227 +vn -0.1170 0.1170 0.9862 +vn -0.1159 0.3366 0.9345 +vn -0.1109 0.5344 0.8379 +vn -0.1083 0.7029 0.7030 +vn -0.3360 0.1176 0.9345 +vn -0.3336 0.3346 0.8813 +vn -0.3218 0.5195 0.7916 +vn -0.3155 0.6706 0.6714 +vn -0.5343 0.1119 0.8378 +vn -0.5199 0.3225 0.7911 +vn -0.4911 0.4911 0.7194 +vn -0.4735 0.6227 0.6229 +vn -0.5773 0.5774 0.5774 +vn -0.1170 0.9862 -0.1170 +vn -0.1159 0.9345 -0.3366 +vn -0.1109 0.8379 -0.5344 +vn -0.1083 0.7030 -0.7029 +vn -0.3360 0.9345 -0.1176 +vn -0.3336 0.8813 -0.3346 +vn -0.3218 0.7916 -0.5195 +vn -0.3155 0.6714 -0.6706 +vn -0.5343 0.8378 -0.1119 +vn -0.5199 0.7911 -0.3224 +vn -0.4911 0.7194 -0.4911 +vn -0.4735 0.6229 -0.6227 +vn -0.1170 0.1170 -0.9862 +vn -0.3366 0.1159 -0.9345 +vn -0.5344 0.1109 -0.8379 +vn -0.7029 0.1083 -0.7030 +vn -0.1176 0.3360 -0.9345 +vn -0.3346 0.3336 -0.8813 +vn -0.5195 0.3218 -0.7916 +vn -0.6706 0.3155 -0.6714 +vn -0.1119 0.5343 -0.8378 +vn -0.3224 0.5199 -0.7911 +vn -0.4911 0.4911 -0.7194 +vn -0.6227 0.4735 -0.6229 +vn -0.9862 0.1170 -0.1170 +vn -0.9345 0.3366 -0.1159 +vn -0.8379 0.5344 -0.1109 +vn -0.7030 0.7029 -0.1083 +vn -0.9345 0.1176 -0.3360 +vn -0.8813 0.3346 -0.3336 +vn -0.7916 0.5195 -0.3218 +vn -0.6714 0.6706 -0.3155 +vn -0.8378 0.1119 -0.5343 +vn -0.7911 0.3225 -0.5199 +vn -0.7194 0.4911 -0.4911 +vn -0.6229 0.6227 -0.4735 +vn -0.5774 0.5773 -0.5774 +vn 0.1119 0.0000 -0.9937 +vn 0.3302 0.0000 -0.9439 +vn 0.5320 0.0000 -0.8468 +vn 0.7071 0.0000 -0.7071 +vn 0.8468 0.0000 -0.5320 +vn 0.9439 0.0000 -0.3302 +vn 0.9937 0.0000 -0.1119 +vn 0.1119 0.9937 -0.0000 +vn 0.3302 0.9439 -0.0000 +vn 0.5320 0.8468 -0.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.8468 0.5320 -0.0000 +vn 0.9439 0.3302 -0.0000 +vn 0.9937 0.1119 -0.0000 +vn 0.1119 0.0000 0.9937 +vn 0.3302 -0.0000 0.9439 +vn 0.5320 0.0000 0.8468 +vn 0.7071 0.0000 0.7071 +vn 0.8468 -0.0000 0.5320 +vn 0.9439 0.0000 0.3302 +vn 0.9937 0.0000 0.1119 +vn 0.1119 -0.9937 -0.0000 +vn 0.3302 -0.9439 -0.0000 +vn 0.5320 -0.8468 -0.0000 +vn 0.7071 -0.7071 -0.0000 +vn 0.8468 -0.5320 -0.0000 +vn 0.9439 -0.3302 -0.0000 +vn 0.9937 -0.1119 0.0000 +vn 0.0000 0.9937 0.1119 +vn 0.0000 0.9439 0.3302 +vn 0.0000 0.8468 0.5320 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.5320 0.8468 +vn 0.0000 0.3302 0.9439 +vn 0.0000 0.1119 0.9937 +vn -0.9937 0.0000 0.1119 +vn -0.9439 -0.0000 0.3302 +vn -0.8468 -0.0000 0.5320 +vn -0.7071 0.0000 0.7071 +vn -0.5320 0.0000 0.8468 +vn -0.3302 0.0000 0.9439 +vn -0.1119 0.0000 0.9937 +vn 0.0000 -0.9937 0.1119 +vn 0.0000 -0.9439 0.3302 +vn 0.0000 -0.8468 0.5320 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.5320 0.8468 +vn 0.0000 -0.3302 0.9439 +vn 0.0000 -0.1119 0.9937 +vn -0.1119 0.9937 0.0000 +vn -0.3302 0.9439 0.0000 +vn -0.5320 0.8468 0.0000 +vn -0.7071 0.7071 0.0000 +vn -0.8468 0.5320 0.0000 +vn -0.9439 0.3302 0.0000 +vn -0.9937 0.1119 0.0000 +vn -0.1119 0.0000 -0.9937 +vn -0.3302 -0.0000 -0.9439 +vn -0.5320 -0.0000 -0.8468 +vn -0.7071 0.0000 -0.7071 +vn -0.8468 -0.0000 -0.5320 +vn -0.9439 -0.0000 -0.3302 +vn -0.9937 0.0000 -0.1119 +vn -0.1119 -0.9937 0.0000 +vn -0.3302 -0.9439 0.0000 +vn -0.5320 -0.8468 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.8468 -0.5320 0.0000 +vn -0.9439 -0.3302 0.0000 +vn -0.9937 -0.1119 0.0000 +vn 0.0000 0.9937 -0.1119 +vn 0.0000 0.9439 -0.3302 +vn 0.0000 0.8468 -0.5320 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.5320 -0.8468 +vn -0.0000 0.3302 -0.9439 +vn 0.0000 0.1119 -0.9937 +vn -0.0000 -0.9937 -0.1119 +vn -0.0000 -0.9439 -0.3302 +vn -0.0000 -0.8468 -0.5320 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 -0.5320 -0.8468 +vn -0.0000 -0.3302 -0.9439 +vn -0.0000 -0.1119 -0.9937 +vn 1.0000 0.0000 0.0000 +vn -0.2178 0.6811 0.6990 +vn -0.1744 0.8102 0.5596 +vn -0.3247 0.7862 0.5257 +vn -0.3923 0.6518 0.6489 +vn -0.2178 -0.6811 0.6990 +vn -0.2524 -0.5294 0.8099 +vn -0.4424 -0.5007 0.7440 +vn -0.3923 -0.6518 0.6489 +vn -0.2524 0.5294 0.8099 +vn -0.4424 0.5007 0.7440 +vn -0.1744 -0.8102 0.5596 +vn -0.3247 -0.7862 0.5257 +vn -0.2774 0.3615 0.8901 +vn -0.4766 0.3388 0.8112 +vn -0.1232 -0.9102 0.3955 +vn -0.2386 -0.8957 0.3753 +vn -0.2924 0.1832 0.9385 +vn -0.4966 0.1708 0.8510 +vn -0.0662 -0.9749 0.2126 +vn -0.1346 -0.9701 0.2018 +vn -0.2975 0.0000 0.9547 +vn -0.5031 0.0000 0.8642 +vn -0.0662 0.9749 0.2126 +vn -0.2521 0.9677 0.0000 +vn -0.1346 0.9701 0.2018 +vn -0.2521 -0.9677 0.0000 +vn -0.2924 -0.1832 0.9385 +vn -0.4966 -0.1708 0.8510 +vn -0.1232 0.9102 0.3955 +vn -0.2386 0.8957 0.3753 +vn -0.2774 -0.3615 0.8901 +vn -0.4766 -0.3388 0.8112 +vn -0.7737 -0.1331 0.6193 +vn -0.7527 -0.2689 0.6008 +vn -0.4275 0.8438 0.3244 +vn -0.5608 0.7042 0.4353 +vn -0.7144 -0.4097 0.5672 +vn -0.6531 0.5559 0.5141 +vn -0.6531 -0.5559 0.5141 +vn -0.7144 0.4097 0.5672 +vn -0.5608 -0.7042 0.4353 +vn -0.7527 0.2689 0.6008 +vn -0.4275 -0.8438 0.3244 +vn -0.7737 0.1331 0.6193 +vn -0.2461 -0.9527 0.1784 +vn -0.7804 0.0000 0.6252 +vn -0.2461 0.9527 0.1784 +vn -0.7085 -0.6180 0.3405 +vn -0.5630 -0.7825 0.2659 +vn -0.8781 0.2134 0.4283 +vn -0.8937 0.1043 0.4363 +vn -0.3343 -0.9302 0.1512 +vn -0.8986 0.0000 0.4388 +vn -0.3343 0.9302 0.1512 +vn -0.8937 -0.1043 0.4363 +vn -0.5630 0.7825 0.2659 +vn -0.8781 -0.2134 0.4283 +vn -0.7085 0.6180 0.3405 +vn -0.8480 -0.3323 0.4128 +vn -0.7961 0.4661 0.3858 +vn -0.7961 -0.4661 0.3858 +vn -0.8480 0.3323 0.4128 +vn -0.9364 -0.1772 0.3028 +vn -0.9137 -0.2793 0.2952 +vn -0.7969 0.5473 0.2557 +vn -0.8724 0.3997 0.2814 +vn -0.8724 -0.3997 0.2814 +vn -0.9137 0.2793 0.2952 +vn -0.7969 -0.5473 0.2557 +vn -0.9364 0.1772 0.3028 +vn -0.6560 -0.7255 0.2076 +vn -0.9479 0.0861 0.3066 +vn -0.4021 -0.9074 0.1221 +vn -0.9514 0.0000 0.3078 +vn -0.4021 0.9074 0.1221 +vn -0.9479 -0.0861 0.3066 +vn -0.6561 0.7255 0.2076 +vn -0.7177 -0.6795 0.1522 +vn -0.4519 -0.8873 0.0919 +vn -0.9749 0.0748 0.2097 +vn -0.9776 0.0000 0.2103 +vn -0.4519 0.8873 0.0919 +vn -0.9749 -0.0748 0.2097 +vn -0.7177 0.6795 0.1522 +vn -0.9659 -0.1545 0.2078 +vn -0.8492 0.4956 0.1820 +vn -0.9478 -0.2451 0.2039 +vn -0.9140 0.3548 0.1965 +vn -0.9140 -0.3548 0.1965 +vn -0.9478 0.2451 0.2039 +vn -0.8492 -0.4956 0.1820 +vn -0.9659 0.1545 0.2078 +vn -0.8795 0.4612 0.1169 +vn -0.9370 0.3262 0.1248 +vn -0.9661 -0.2240 0.1286 +vn -0.9370 -0.3262 0.1248 +vn -0.9661 0.2240 0.1286 +vn -0.8795 -0.4612 0.1169 +vn -0.9814 0.1408 0.1306 +vn -0.7565 -0.6463 0.0998 +vn -0.9890 0.0681 0.1316 +vn -0.4858 -0.8719 0.0613 +vn -0.9912 0.0000 0.1318 +vn -0.4858 0.8719 0.0613 +vn -0.9890 -0.0681 0.1316 +vn -0.7565 0.6463 0.0998 +vn -0.9814 -0.1408 0.1306 +vn -0.9959 0.0644 0.0635 +vn -0.9980 0.0000 0.0637 +vn -0.5054 0.8623 0.0306 +vn -0.5054 -0.8623 0.0306 +vn -0.9959 -0.0644 0.0635 +vn -0.7779 0.6264 0.0494 +vn -0.9890 -0.1333 0.0631 +vn -0.8954 0.4415 0.0572 +vn -0.9752 -0.2125 0.0623 +vn -0.9486 0.3105 0.0606 +vn -0.9486 -0.3105 0.0606 +vn -0.9752 0.2125 0.0623 +vn -0.8954 -0.4415 0.0572 +vn -0.9890 0.1333 0.0631 +vn -0.7779 -0.6264 0.0494 +vn -0.9779 -0.2088 0.0000 +vn -0.9522 -0.3054 0.0000 +vn -0.9522 0.3054 0.0000 +vn -0.9779 0.2088 0.0000 +vn -0.9004 -0.4351 0.0000 +vn -0.9914 0.1310 0.0000 +vn -0.7848 -0.6197 0.0000 +vn -0.9980 0.0633 0.0000 +vn -0.5119 -0.8591 0.0000 +vn -0.5119 0.8591 0.0000 +vn -0.9980 -0.0633 0.0000 +vn -0.7848 0.6197 0.0000 +vn -0.9914 -0.1310 0.0000 +vn -0.9004 0.4351 0.0000 +vn -0.5054 0.8623 -0.0306 +vn -0.5054 -0.8623 -0.0306 +vn -0.9980 0.0000 -0.0637 +vn -0.9959 -0.0644 -0.0635 +vn -0.7779 0.6264 -0.0494 +vn -0.9890 -0.1333 -0.0631 +vn -0.8954 0.4415 -0.0572 +vn -0.9752 -0.2125 -0.0623 +vn -0.9486 0.3105 -0.0606 +vn -0.9486 -0.3105 -0.0606 +vn -0.9752 0.2125 -0.0623 +vn -0.8954 -0.4415 -0.0572 +vn -0.9890 0.1333 -0.0631 +vn -0.7779 -0.6264 -0.0494 +vn -0.9959 0.0644 -0.0635 +vn -0.9370 0.3262 -0.1248 +vn -0.9661 0.2240 -0.1286 +vn -0.9370 -0.3262 -0.1248 +vn -0.8795 -0.4612 -0.1169 +vn -0.9814 0.1408 -0.1306 +vn -0.7565 -0.6463 -0.0998 +vn -0.9890 0.0681 -0.1316 +vn -0.4858 -0.8719 -0.0613 +vn -0.9912 0.0000 -0.1318 +vn -0.4858 0.8719 -0.0613 +vn -0.9890 -0.0681 -0.1316 +vn -0.7565 0.6463 -0.0998 +vn -0.9814 -0.1408 -0.1306 +vn -0.8795 0.4612 -0.1169 +vn -0.9661 -0.2240 -0.1286 +vn -0.9776 0.0000 -0.2103 +vn -0.9749 -0.0748 -0.2097 +vn -0.4519 0.8873 -0.0919 +vn -0.7177 0.6795 -0.1522 +vn -0.9659 -0.1545 -0.2078 +vn -0.8492 0.4956 -0.1820 +vn -0.9478 -0.2451 -0.2039 +vn -0.9140 0.3548 -0.1965 +vn -0.9140 -0.3548 -0.1965 +vn -0.9478 0.2451 -0.2039 +vn -0.8492 -0.4956 -0.1820 +vn -0.9659 0.1545 -0.2078 +vn -0.7177 -0.6795 -0.1522 +vn -0.9749 0.0748 -0.2097 +vn -0.4519 -0.8873 -0.0919 +vn -0.8724 -0.3997 -0.2813 +vn -0.7969 -0.5473 -0.2557 +vn -0.9137 0.2793 -0.2952 +vn -0.9364 0.1772 -0.3028 +vn -0.6560 -0.7255 -0.2076 +vn -0.9479 0.0861 -0.3066 +vn -0.4021 -0.9074 -0.1221 +vn -0.9514 0.0000 -0.3078 +vn -0.4021 0.9074 -0.1221 +vn -0.9479 -0.0861 -0.3066 +vn -0.6560 0.7255 -0.2076 +vn -0.9364 -0.1772 -0.3028 +vn -0.7969 0.5473 -0.2557 +vn -0.9137 -0.2793 -0.2952 +vn -0.8724 0.3997 -0.2814 +vn -0.8937 -0.1043 -0.4363 +vn -0.8781 -0.2134 -0.4283 +vn -0.5630 0.7825 -0.2659 +vn -0.7085 0.6180 -0.3405 +vn -0.8480 -0.3323 -0.4128 +vn -0.7961 0.4661 -0.3858 +vn -0.7961 -0.4661 -0.3858 +vn -0.8480 0.3323 -0.4128 +vn -0.7085 -0.6180 -0.3405 +vn -0.8781 0.2134 -0.4283 +vn -0.5630 -0.7825 -0.2659 +vn -0.8937 0.1043 -0.4363 +vn -0.3343 -0.9302 -0.1512 +vn -0.8986 0.0000 -0.4388 +vn -0.3343 0.9302 -0.1512 +vn -0.5608 -0.7042 -0.4353 +vn -0.4275 -0.8438 -0.3244 +vn -0.7527 0.2689 -0.6009 +vn -0.7737 0.1331 -0.6193 +vn -0.2461 -0.9527 -0.1784 +vn -0.7804 0.0000 -0.6252 +vn -0.2461 0.9527 -0.1784 +vn -0.7737 -0.1331 -0.6193 +vn -0.4275 0.8438 -0.3244 +vn -0.7527 -0.2689 -0.6009 +vn -0.5608 0.7042 -0.4353 +vn -0.7144 -0.4097 -0.5672 +vn -0.6531 0.5559 -0.5141 +vn -0.6531 -0.5559 -0.5141 +vn -0.7144 0.4097 -0.5672 +vn -0.2386 0.8957 -0.3753 +vn -0.3247 0.7862 -0.5257 +vn -0.4766 -0.3388 -0.8112 +vn -0.4424 -0.5007 -0.7440 +vn -0.3923 0.6518 -0.6489 +vn -0.3923 -0.6518 -0.6489 +vn -0.4424 0.5007 -0.7440 +vn -0.3247 -0.7862 -0.5257 +vn -0.4766 0.3388 -0.8112 +vn -0.2386 -0.8957 -0.3753 +vn -0.4966 0.1708 -0.8510 +vn -0.1346 -0.9701 -0.2018 +vn -0.5031 0.0000 -0.8642 +vn -0.1346 0.9701 -0.2018 +vn -0.4966 -0.1708 -0.8510 +vn -0.2774 0.3615 -0.8901 +vn -0.2924 0.1832 -0.9385 +vn -0.1232 -0.9102 -0.3955 +vn -0.0662 -0.9749 -0.2126 +vn -0.2975 0.0000 -0.9547 +vn -0.0662 0.9749 -0.2126 +vn -0.2924 -0.1832 -0.9385 +vn -0.1232 0.9102 -0.3955 +vn -0.2774 -0.3615 -0.8901 +vn -0.1744 0.8102 -0.5596 +vn -0.2524 -0.5294 -0.8099 +vn -0.2178 0.6811 -0.6990 +vn -0.2178 -0.6811 -0.6990 +vn -0.2524 0.5294 -0.8099 +vn -0.1744 -0.8102 -0.5596 +vn 0.7804 0.0000 -0.6252 +vn 0.7737 -0.1331 -0.6193 +vn 0.4966 -0.1708 -0.8510 +vn 0.5031 0.0000 -0.8642 +vn 0.3247 -0.7862 -0.5257 +vn 0.2386 -0.8957 -0.3753 +vn 0.1232 -0.9102 -0.3955 +vn 0.1744 -0.8102 -0.5596 +vn 0.7527 -0.2689 -0.6008 +vn 0.4766 -0.3388 -0.8112 +vn 0.1346 -0.9701 -0.2018 +vn 0.0662 -0.9749 -0.2126 +vn 0.7144 -0.4097 -0.5672 +vn 0.4424 -0.5007 -0.7440 +vn 0.2521 0.9677 0.0000 +vn 0.1346 0.9701 -0.2018 +vn 0.0662 0.9749 -0.2126 +vn 0.6531 -0.5559 -0.5141 +vn 0.3923 -0.6518 -0.6489 +vn 0.2924 -0.1832 -0.9385 +vn 0.2975 0.0000 -0.9547 +vn 0.5608 -0.7042 -0.4353 +vn 0.2774 -0.3615 -0.8901 +vn 0.3247 0.7862 -0.5257 +vn 0.3923 0.6518 -0.6489 +vn 0.2178 0.6811 -0.6990 +vn 0.1744 0.8102 -0.5596 +vn 0.7144 0.4097 -0.5672 +vn 0.7527 0.2689 -0.6008 +vn 0.4766 0.3388 -0.8112 +vn 0.4424 0.5007 -0.7440 +vn 0.4275 -0.8438 -0.3244 +vn 0.2461 -0.9527 -0.1784 +vn 0.2524 -0.5294 -0.8099 +vn 0.2461 0.9527 -0.1784 +vn 0.2178 -0.6811 -0.6990 +vn 0.6531 0.5559 -0.5141 +vn 0.2386 0.8957 -0.3753 +vn 0.1232 0.9102 -0.3955 +vn 0.7737 0.1331 -0.6193 +vn 0.4966 0.1708 -0.8510 +vn 0.2524 0.5294 -0.8099 +vn 0.2521 -0.9677 0.0000 +vn 0.2774 0.3615 -0.8901 +vn 0.4275 0.8438 -0.3244 +vn 0.2924 0.1832 -0.9385 +vn 0.5608 0.7042 -0.4353 +vn 0.7961 0.4661 -0.3858 +vn 0.8480 0.3323 -0.4128 +vn 0.3343 -0.9302 -0.1512 +vn 0.7961 -0.4661 -0.3858 +vn 0.7085 -0.6180 -0.3405 +vn 0.8986 0.0000 -0.4388 +vn 0.8937 -0.1043 -0.4363 +vn 0.8781 0.2134 -0.4283 +vn 0.3343 0.9302 -0.1512 +vn 0.5630 0.7825 -0.2659 +vn 0.5630 -0.7825 -0.2659 +vn 0.8781 -0.2134 -0.4283 +vn 0.8937 0.1043 -0.4363 +vn 0.8480 -0.3323 -0.4128 +vn 0.7085 0.6180 -0.3405 +vn 0.6560 0.7256 -0.2077 +vn 0.7969 0.5473 -0.2557 +vn 0.9479 0.0861 -0.3066 +vn 0.9514 0.0000 -0.3078 +vn 0.9364 0.1772 -0.3028 +vn 0.9364 -0.1772 -0.3028 +vn 0.9137 -0.2793 -0.2952 +vn 0.6560 -0.7255 -0.2076 +vn 0.4021 -0.9074 -0.1221 +vn 0.8724 0.3997 -0.2813 +vn 0.4021 0.9074 -0.1221 +vn 0.8724 -0.3997 -0.2813 +vn 0.9137 0.2793 -0.2952 +vn 0.9479 -0.0861 -0.3066 +vn 0.7969 -0.5473 -0.2557 +vn 0.4519 0.8873 -0.0919 +vn 0.7177 0.6795 -0.1522 +vn 0.8492 -0.4956 -0.1820 +vn 0.7177 -0.6795 -0.1522 +vn 0.9749 -0.0748 -0.2097 +vn 0.9659 -0.1545 -0.2078 +vn 0.9659 0.1545 -0.2078 +vn 0.9749 0.0748 -0.2097 +vn 0.8492 0.4956 -0.1820 +vn 0.4519 -0.8873 -0.0919 +vn 0.9478 -0.2451 -0.2039 +vn 0.9776 0.0000 -0.2103 +vn 0.9140 0.3548 -0.1965 +vn 0.9478 0.2451 -0.2039 +vn 0.9140 -0.3548 -0.1965 +vn 0.9890 0.0681 -0.1316 +vn 0.9912 0.0000 -0.1318 +vn 0.9661 -0.2240 -0.1286 +vn 0.9370 -0.3262 -0.1248 +vn 0.4858 0.8719 -0.0613 +vn 0.9370 0.3262 -0.1248 +vn 0.9661 0.2240 -0.1286 +vn 0.9890 -0.0681 -0.1316 +vn 0.8795 -0.4612 -0.1170 +vn 0.7565 0.6463 -0.0998 +vn 0.9814 0.1408 -0.1306 +vn 0.9814 -0.1408 -0.1306 +vn 0.7565 -0.6463 -0.0998 +vn 0.8795 0.4612 -0.1169 +vn 0.4858 -0.8719 -0.0613 +vn 0.7779 0.6264 -0.0494 +vn 0.8954 0.4415 -0.0572 +vn 0.7779 -0.6264 -0.0494 +vn 0.5054 -0.8623 -0.0306 +vn 0.9890 -0.1333 -0.0631 +vn 0.9752 -0.2125 -0.0623 +vn 0.9959 0.0644 -0.0635 +vn 0.9980 0.0000 -0.0637 +vn 0.9486 0.3105 -0.0606 +vn 0.5054 0.8623 -0.0306 +vn 0.9486 -0.3105 -0.0606 +vn 0.8954 -0.4415 -0.0572 +vn 0.9752 0.2125 -0.0623 +vn 0.9959 -0.0644 -0.0635 +vn 0.9890 0.1333 -0.0631 +vn 0.9980 -0.0633 0.0000 +vn 0.9779 0.2088 0.0000 +vn 0.9914 0.1310 0.0000 +vn 0.9914 -0.1310 0.0000 +vn 0.9004 -0.4351 0.0000 +vn 0.7848 -0.6197 0.0000 +vn 0.7848 0.6197 0.0000 +vn 0.9004 0.4351 0.0000 +vn 0.9980 0.0633 0.0000 +vn 0.9779 -0.2088 0.0000 +vn 0.5119 -0.8591 0.0000 +vn 0.9522 0.3054 0.0000 +vn 0.9522 -0.3054 0.0000 +vn 0.5119 0.8591 0.0000 +vn 0.9959 0.0644 0.0635 +vn 0.9980 0.0000 0.0637 +vn 0.8954 0.4415 0.0572 +vn 0.9486 0.3105 0.0606 +vn 0.5054 0.8623 0.0306 +vn 0.9752 -0.2125 0.0623 +vn 0.9486 -0.3105 0.0606 +vn 0.5054 -0.8623 0.0306 +vn 0.9752 0.2125 0.0623 +vn 0.9890 0.1333 0.0631 +vn 0.9959 -0.0644 0.0635 +vn 0.8954 -0.4415 0.0572 +vn 0.7779 0.6264 0.0494 +vn 0.7779 -0.6264 0.0494 +vn 0.9890 -0.1333 0.0631 +vn 0.8795 -0.4612 0.1170 +vn 0.7565 -0.6463 0.0998 +vn 0.7565 0.6463 0.0998 +vn 0.8795 0.4612 0.1169 +vn 0.9814 0.1408 0.1306 +vn 0.9890 0.0681 0.1316 +vn 0.9814 -0.1408 0.1306 +vn 0.9661 -0.2240 0.1286 +vn 0.4858 -0.8719 0.0613 +vn 0.9370 0.3262 0.1248 +vn 0.9912 0.0000 0.1318 +vn 0.9370 -0.3262 0.1248 +vn 0.4858 0.8719 0.0613 +vn 0.9661 0.2240 0.1286 +vn 0.9890 -0.0681 0.1316 +vn 0.9478 -0.2451 0.2039 +vn 0.9140 -0.3548 0.1965 +vn 0.4519 -0.8873 0.0919 +vn 0.9140 0.3548 0.1965 +vn 0.9478 0.2451 0.2039 +vn 0.9776 0.0000 0.2103 +vn 0.9749 -0.0748 0.2097 +vn 0.8492 -0.4956 0.1820 +vn 0.7177 -0.6795 0.1522 +vn 0.4519 0.8873 0.0919 +vn 0.7177 0.6795 0.1522 +vn 0.9659 0.1545 0.2078 +vn 0.9659 -0.1545 0.2078 +vn 0.9749 0.0748 0.2097 +vn 0.8492 0.4956 0.1820 +vn 0.9364 -0.1772 0.3028 +vn 0.9137 -0.2793 0.2952 +vn 0.6560 -0.7255 0.2076 +vn 0.4021 -0.9074 0.1221 +vn 0.7969 0.5473 0.2557 +vn 0.8724 0.3997 0.2813 +vn 0.9479 0.0861 0.3066 +vn 0.9514 0.0000 0.3078 +vn 0.8724 -0.3997 0.2813 +vn 0.4021 0.9074 0.1221 +vn 0.9137 0.2793 0.2952 +vn 0.7969 -0.5473 0.2557 +vn 0.9479 -0.0861 0.3066 +vn 0.9364 0.1772 0.3028 +vn 0.6561 0.7255 0.2076 +vn 0.8986 0.0000 0.4388 +vn 0.8937 -0.1043 0.4363 +vn 0.7961 -0.4661 0.3858 +vn 0.7085 -0.6180 0.3405 +vn 0.3343 0.9302 0.1512 +vn 0.5630 0.7825 0.2659 +vn 0.8781 0.2134 0.4283 +vn 0.8937 0.1043 0.4363 +vn 0.8480 0.3323 0.4128 +vn 0.8781 -0.2134 0.4283 +vn 0.5630 -0.7825 0.2659 +vn 0.7085 0.6180 0.3405 +vn 0.3343 -0.9302 0.1512 +vn 0.8480 -0.3323 0.4128 +vn 0.7961 0.4661 0.3858 +vn 0.2461 0.9527 0.1784 +vn 0.6531 0.5559 0.5141 +vn 0.7144 0.4097 0.5672 +vn 0.2461 -0.9527 0.1784 +vn 0.6531 -0.5559 0.5141 +vn 0.5608 -0.7042 0.4353 +vn 0.7804 0.0000 0.6252 +vn 0.7737 -0.1331 0.6193 +vn 0.7527 0.2689 0.6008 +vn 0.4275 0.8438 0.3244 +vn 0.4275 -0.8438 0.3244 +vn 0.7527 -0.2689 0.6009 +vn 0.7737 0.1331 0.6193 +vn 0.5608 0.7042 0.4353 +vn 0.7144 -0.4097 0.5672 +vn 0.3247 -0.7862 0.5257 +vn 0.2386 -0.8957 0.3753 +vn 0.2386 0.8957 0.3753 +vn 0.3247 0.7862 0.5257 +vn 0.4966 0.1708 0.8510 +vn 0.5031 0.0000 0.8642 +vn 0.4766 0.3388 0.8112 +vn 0.4766 -0.3388 0.8112 +vn 0.4424 -0.5007 0.7440 +vn 0.1346 -0.9701 0.2018 +vn 0.3923 0.6518 0.6489 +vn 0.1346 0.9701 0.2018 +vn 0.3923 -0.6518 0.6489 +vn 0.4424 0.5007 0.7440 +vn 0.4966 -0.1708 0.8510 +vn 0.2774 -0.3615 0.8901 +vn 0.2524 -0.5294 0.8099 +vn 0.2924 0.1832 0.9385 +vn 0.2975 0.0000 0.9547 +vn 0.1744 0.8102 0.5596 +vn 0.2178 0.6811 0.6990 +vn 0.0662 0.9749 0.2126 +vn 0.2178 -0.6811 0.6990 +vn 0.0662 -0.9749 0.2126 +vn 0.2524 0.5294 0.8099 +vn 0.2924 -0.1832 0.9385 +vn 0.1743 -0.8102 0.5596 +vn 0.1232 -0.9102 0.3955 +vn 0.1232 0.9102 0.3955 +vn 0.2774 0.3615 0.8901 +vn 0.6965 0.2113 0.6857 +vn 0.6965 0.2113 -0.6857 +vn 0.6419 0.3431 -0.6857 +vn 0.6419 0.3431 0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.6965 -0.2113 0.6857 +vn 0.6965 -0.2113 -0.6857 +vn 0.6419 -0.3431 0.6857 +vn 0.6419 -0.3431 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.5626 -0.4617 -0.6857 +vn 0.4617 -0.5626 0.6857 +vn 0.4617 -0.5626 -0.6857 +vn 0.3431 -0.6419 0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn 0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn -0.2113 -0.6965 0.6857 +vn -0.2113 -0.6965 -0.6857 +vn -0.3431 -0.6419 0.6857 +vn -0.3431 -0.6419 -0.6857 +vn -0.4617 -0.5626 0.6857 +vn -0.4617 -0.5626 -0.6857 +vn -0.5626 -0.4617 0.6857 +vn -0.5626 -0.4617 -0.6857 +vn -0.6419 -0.3431 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.7244 0.0713 0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.6965 0.2113 -0.6857 +vn -0.5626 0.4617 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.6419 0.3431 0.6857 +vn -0.4617 0.5626 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.2113 0.6965 -0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn 0.2113 0.6965 0.6857 +vn 0.2113 0.6965 -0.6857 +vn 0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn 0.3431 0.6419 0.6857 +vn 0.3431 0.6419 -0.6857 +vn 0.4617 0.5626 0.6857 +vn 0.4617 0.5626 -0.6857 +vn -0.4604 0.8614 0.2147 +vn -0.4686 0.8767 0.1087 +vn -0.2886 0.9513 0.1087 +vn -0.2835 0.9346 0.2147 +vn -0.0957 0.9720 0.2147 +vn -0.0974 0.9893 0.1087 +vn 0.0957 0.9720 0.2147 +vn 0.0974 0.9893 0.1087 +vn 0.2835 0.9346 0.2147 +vn 0.2886 0.9513 0.1087 +vn 0.4604 0.8614 0.2147 +vn 0.4686 0.8767 0.1087 +vn 0.6196 0.7550 0.2147 +vn 0.6306 0.7684 0.1087 +vn 0.7684 0.6306 0.1087 +vn 0.7550 0.6196 0.2147 +vn 0.8614 0.4604 0.2147 +vn 0.8767 0.4686 0.1087 +vn 0.9346 0.2835 0.2147 +vn 0.9513 0.2886 0.1087 +vn 0.9720 0.0957 0.2147 +vn 0.9893 0.0974 0.1087 +vn 0.9893 -0.0974 0.1087 +vn 0.9720 -0.0957 0.2147 +vn 0.9513 -0.2886 0.1087 +vn 0.9346 -0.2835 0.2147 +vn 0.8614 -0.4604 0.2147 +vn 0.8767 -0.4686 0.1087 +vn 0.7684 -0.6306 0.1087 +vn 0.7550 -0.6196 0.2147 +vn 0.6306 -0.7684 0.1087 +vn 0.6196 -0.7550 0.2147 +vn 0.4604 -0.8614 0.2147 +vn 0.4686 -0.8767 0.1087 +vn 0.2886 -0.9513 0.1087 +vn 0.2835 -0.9346 0.2147 +vn 0.0957 -0.9720 0.2147 +vn 0.0974 -0.9893 0.1087 +vn -0.0974 -0.9893 0.1087 +vn -0.0957 -0.9720 0.2147 +vn -0.2835 -0.9346 0.2147 +vn -0.2886 -0.9513 0.1087 +vn -0.4686 -0.8767 0.1087 +vn -0.4604 -0.8614 0.2147 +vn -0.6306 -0.7684 0.1087 +vn -0.6196 -0.7550 0.2147 +vn -0.7684 -0.6306 0.1087 +vn -0.7550 -0.6196 0.2147 +vn -0.8767 -0.4686 0.1087 +vn -0.8614 -0.4604 0.2147 +vn -0.9513 -0.2886 0.1087 +vn -0.9346 -0.2835 0.2147 +vn -0.9893 -0.0974 0.1087 +vn -0.9720 -0.0957 0.2147 +vn -0.9346 0.2835 0.2147 +vn -0.9720 0.0957 0.2147 +vn -0.9893 0.0974 0.1087 +vn -0.9513 0.2886 0.1087 +vn -0.7550 0.6196 0.2147 +vn -0.8614 0.4604 0.2147 +vn -0.8767 0.4686 0.1087 +vn -0.7684 0.6306 0.1087 +vn -0.6196 0.7550 0.2147 +vn -0.6306 0.7684 0.1087 +vn 0.9952 0.0980 0.0000 +vn 0.9569 0.2903 0.0000 +vn 0.9513 0.2886 -0.1087 +vn 0.9893 0.0974 -0.1087 +vn 0.9952 -0.0980 0.0000 +vn 0.9893 -0.0974 -0.1087 +vn 0.9569 -0.2903 0.0000 +vn 0.9513 -0.2886 -0.1087 +vn 0.8819 0.4714 0.0000 +vn 0.8767 0.4686 -0.1087 +vn 0.8819 -0.4714 0.0000 +vn 0.8767 -0.4686 -0.1087 +vn 0.7730 0.6344 0.0000 +vn 0.7684 0.6306 -0.1087 +vn 0.7730 -0.6344 0.0000 +vn 0.7684 -0.6306 -0.1087 +vn 0.6344 0.7730 0.0000 +vn 0.6306 0.7684 -0.1087 +vn 0.9720 0.0957 -0.2147 +vn 0.9346 0.2835 -0.2147 +vn 0.9720 -0.0957 -0.2147 +vn 0.9346 -0.2835 -0.2147 +vn 0.6344 -0.7730 0.0000 +vn 0.6306 -0.7684 -0.1087 +vn 0.4714 0.8819 0.0000 +vn 0.4686 0.8767 -0.1087 +vn 0.8614 0.4604 -0.2147 +vn 0.8614 -0.4604 -0.2147 +vn 0.4714 -0.8819 0.0000 +vn 0.4686 -0.8767 -0.1087 +vn 0.2903 0.9569 0.0000 +vn 0.2886 0.9513 -0.1087 +vn 0.7550 0.6196 -0.2147 +vn 0.7550 -0.6196 -0.2147 +vn 0.2903 -0.9569 0.0000 +vn 0.2886 -0.9513 -0.1087 +vn 0.0980 0.9952 0.0000 +vn 0.0974 0.9893 -0.1087 +vn 0.6196 0.7550 -0.2147 +vn 0.6196 -0.7550 -0.2147 +vn 0.4604 0.8614 -0.2147 +vn 0.4604 -0.8614 -0.2147 +vn -0.0980 -0.9952 0.0000 +vn 0.0980 -0.9952 0.0000 +vn 0.0974 -0.9893 -0.1087 +vn -0.0974 -0.9893 -0.1087 +vn -0.0980 0.9952 0.0000 +vn -0.2903 0.9569 0.0000 +vn -0.2886 0.9513 -0.1087 +vn -0.0974 0.9893 -0.1087 +vn 0.2835 0.9346 -0.2147 +vn 0.2835 -0.9346 -0.2147 +vn 0.0957 0.9720 -0.2147 +vn 0.0957 -0.9720 -0.2147 +vn -0.4714 -0.8819 0.0000 +vn -0.2903 -0.9569 0.0000 +vn -0.2886 -0.9513 -0.1087 +vn -0.4686 -0.8767 -0.1087 +vn -0.4714 0.8819 0.0000 +vn -0.6344 0.7730 0.0000 +vn -0.6306 0.7684 -0.1087 +vn -0.4686 0.8767 -0.1087 +vn -0.0957 0.9720 -0.2147 +vn -0.0957 -0.9720 -0.2147 +vn 0.5626 0.4617 -0.6857 +vn 0.5626 0.4617 0.6857 +vn -0.6344 -0.7730 0.0000 +vn -0.6306 -0.7684 -0.1087 +vn -0.7730 0.6344 0.0000 +vn -0.7684 0.6306 -0.1087 +vn -0.2835 0.9346 -0.2147 +vn -0.2835 -0.9346 -0.2147 +vn -0.4604 0.8614 -0.2147 +vn -0.4604 -0.8614 -0.2147 +vn -0.6196 0.7550 -0.2147 +vn -0.6196 -0.7550 -0.2147 +vn -0.9569 -0.2903 0.0000 +vn -0.8819 -0.4714 0.0000 +vn -0.8767 -0.4686 -0.1087 +vn -0.9513 -0.2886 -0.1087 +vn -0.9569 0.2903 0.0000 +vn -0.9952 0.0980 0.0000 +vn -0.9893 0.0974 -0.1087 +vn -0.9513 0.2886 -0.1087 +vn -0.7550 0.6196 -0.2147 +vn -0.7550 -0.6196 -0.2147 +vn -0.7684 -0.6306 -0.1087 +vn -0.9952 -0.0980 0.0000 +vn -0.9893 -0.0974 -0.1087 +vn -0.8614 0.4604 -0.2147 +vn -0.8767 0.4686 -0.1087 +vn -0.8614 -0.4604 -0.2147 +vn -0.9346 0.2835 -0.2147 +vn -0.9346 -0.2835 -0.2147 +vn -0.9720 0.0957 -0.2147 +vn -0.9720 -0.0957 -0.2147 +vn -0.7321 -0.3032 -0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.7933 0.6088 0.0000 +vn -0.6287 0.4824 -0.6100 +vn -0.1034 -0.7856 -0.6100 +vn -0.1305 -0.9914 0.0000 +vn 0.1305 0.9914 0.0000 +vn 0.1034 0.7856 -0.6100 +vn 0.9239 0.3827 0.0000 +vn 0.7321 0.3032 -0.6100 +vn 0.7933 -0.6088 0.0000 +vn 0.6287 -0.4824 -0.6100 +vn 0.7321 0.3032 0.6100 +vn 0.1034 0.7856 0.6100 +vn 0.6287 -0.4824 0.6100 +vn -0.6287 0.4824 0.6100 +vn -0.7321 -0.3032 0.6100 +vn -0.1034 -0.7856 0.6100 +vn -0.3032 -0.7321 -0.6100 +vn -0.3827 -0.9239 0.0000 +vn -0.9914 -0.1305 0.0000 +vn -0.7856 -0.1034 -0.6100 +vn 0.4824 -0.6287 -0.6100 +vn 0.6088 -0.7933 0.0000 +vn -0.6088 0.7933 0.0000 +vn -0.4824 0.6287 -0.6100 +vn 0.3827 0.9239 0.0000 +vn 0.3032 0.7321 -0.6100 +vn 0.9914 0.1305 0.0000 +vn 0.7856 0.1034 -0.6100 +vn 0.3032 0.7321 0.6100 +vn -0.4824 0.6287 0.6100 +vn 0.7856 0.1034 0.6100 +vn -0.7856 -0.1034 0.6100 +vn -0.3032 -0.7321 0.6100 +vn 0.4824 -0.6287 0.6100 +vn 0.3032 -0.7321 -0.6100 +vn 0.3827 -0.9239 0.0000 +vn -0.6088 -0.7933 0.0000 +vn -0.4824 -0.6287 -0.6100 +vn 0.7856 -0.1034 -0.6100 +vn 0.9914 -0.1305 0.0000 +vn -0.9914 0.1305 0.0000 +vn -0.7856 0.1034 -0.6100 +vn -0.3827 0.9239 0.0000 +vn -0.3032 0.7321 -0.6100 +vn 0.6088 0.7933 0.0000 +vn 0.4824 0.6287 -0.6100 +vn -0.3032 0.7321 0.6100 +vn -0.7856 0.1034 0.6100 +vn 0.4824 0.6287 0.6100 +vn -0.4824 -0.6287 0.6100 +vn 0.3032 -0.7321 0.6100 +vn 0.7856 -0.1034 0.6100 +vn 0.7321 -0.3032 -0.6100 +vn 0.9239 -0.3827 0.0000 +vn 0.1305 -0.9914 0.0000 +vn 0.1034 -0.7856 -0.6100 +vn 0.6287 0.4824 -0.6100 +vn 0.7933 0.6088 0.0000 +vn -0.7933 -0.6088 0.0000 +vn -0.6287 -0.4824 -0.6100 +vn -0.9239 0.3827 0.0000 +vn -0.7321 0.3032 -0.6100 +vn -0.1305 0.9914 0.0000 +vn -0.1034 0.7856 -0.6100 +vn -0.7321 0.3032 0.6100 +vn -0.6287 -0.4824 0.6100 +vn -0.1034 0.7856 0.6100 +vn 0.1034 -0.7856 0.6100 +vn 0.7321 -0.3032 0.6100 +vn 0.6287 0.4824 0.6100 +vn -0.8819 0.4714 0.0000 +vn -0.7730 -0.6344 0.0000 +vn -0.5603 -0.5603 -0.6100 +vn -0.9659 0.2588 0.0000 +vn -0.7654 0.2051 -0.6100 +vn 0.2051 -0.7654 -0.6100 +vn 0.2588 -0.9659 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 -0.6100 +vn 0.5603 0.5603 -0.6100 +vn 0.9659 -0.2588 0.0000 +vn 0.7654 -0.2051 -0.6100 +vn 0.5603 0.5603 0.6100 +vn -0.2051 0.7654 0.6100 +vn 0.7654 -0.2051 0.6100 +vn -0.7654 0.2051 0.6100 +vn -0.5603 -0.5603 0.6100 +vn 0.2051 -0.7654 0.6100 +vn 0.0000 -0.7924 -0.6100 +vn -0.8660 -0.5000 0.0000 +vn -0.6862 -0.3962 -0.6100 +vn 0.6862 -0.3962 -0.6100 +vn 0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 -0.6100 +vn 0.8660 0.5000 0.0000 +vn 0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 0.6100 +vn -0.6862 0.3962 0.6100 +vn 0.6862 0.3962 0.6100 +vn -0.6862 -0.3962 0.6100 +vn 0.0000 -0.7924 0.6100 +vn 0.6862 -0.3962 0.6100 +vn 0.5603 -0.5603 -0.6100 +vn -0.2588 -0.9659 0.0000 +vn -0.2051 -0.7654 -0.6100 +vn 0.7654 0.2051 -0.6100 +vn 0.9659 0.2588 0.0000 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 -0.6100 +vn -0.5603 0.5603 -0.6100 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 -0.6100 +vn -0.5603 0.5603 0.6100 +vn -0.7654 -0.2051 0.6100 +vn 0.2051 0.7654 0.6100 +vn -0.2051 -0.7654 0.6100 +vn 0.5603 -0.5603 0.6100 +vn 0.7654 0.2051 0.6100 +vn 0.7924 0.0000 -0.6100 +vn 0.5000 -0.8660 0.0000 +vn 0.3962 -0.6862 -0.6100 +vn 0.3962 0.6862 -0.6100 +vn 0.5000 0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 -0.6100 +vn -0.7924 0.0000 -0.6100 +vn -0.5000 0.8660 0.0000 +vn -0.3962 0.6862 -0.6100 +vn -0.7924 0.0000 0.6100 +vn -0.3962 -0.6862 0.6100 +vn -0.3962 0.6862 0.6100 +vn 0.3962 -0.6862 0.6100 +vn 0.7924 0.0000 0.6100 +vn 0.3962 0.6862 0.6100 +g Cube.001_Cube.001_None +s off +f 517/1/1 564/2/1 612/3/1 660/4/1 +f 804/5/2 853/6/2 661/7/2 611/8/2 +f 851/9/3 803/10/3 755/11/3 708/12/3 +f 756/13/4 805/14/4 613/15/4 563/16/4 +f 852/17/5 707/18/5 515/19/5 659/20/5 +f 515/19/6 518/21/6 522/22/6 521/23/6 +f 518/21/7 519/24/7 523/25/7 522/22/7 +f 519/24/8 520/26/8 524/27/8 523/25/8 +f 520/26/9 544/28/9 545/29/9 524/27/9 +f 521/23/10 522/22/10 526/30/10 525/31/10 +f 522/22/11 523/25/11 527/32/11 526/30/11 +f 523/25/12 524/27/12 528/33/12 527/32/12 +f 524/27/13 545/29/13 546/34/13 528/33/13 +f 525/31/14 526/30/14 530/35/14 529/36/14 +f 526/30/15 527/32/15 531/37/15 530/35/15 +f 527/32/16 528/33/16 532/38/16 531/37/16 +f 528/33/17 546/34/17 547/39/17 532/38/17 +f 516/40/18 533/41/18 537/42/18 536/43/18 +f 533/41/19 534/44/19 538/45/19 537/42/19 +f 534/44/20 535/46/20 539/47/20 538/45/20 +f 535/46/21 559/48/21 560/49/21 539/47/21 +f 536/43/22 537/42/22 541/50/22 540/51/22 +f 537/42/23 538/45/23 542/52/23 541/50/23 +f 538/45/24 539/47/24 543/53/24 542/52/24 +f 539/47/25 560/49/25 561/54/25 543/53/25 +f 540/51/26 541/50/26 545/55/26 544/56/26 +f 541/50/27 542/52/27 546/57/27 545/55/27 +f 542/52/28 543/53/28 547/58/28 546/57/28 +f 543/53/29 561/54/29 562/59/29 547/58/29 +f 517/1/30 548/60/30 552/61/30 551/62/30 +f 548/60/31 549/63/31 553/64/31 552/61/31 +f 549/63/32 550/65/32 554/66/32 553/64/32 +f 550/65/33 529/67/33 530/68/33 554/66/33 +f 551/62/34 552/61/34 556/69/34 555/70/34 +f 552/61/35 553/64/35 557/71/35 556/69/35 +f 553/64/36 554/66/36 558/72/36 557/71/36 +f 554/66/37 530/68/37 531/73/37 558/72/37 +f 555/70/38 556/69/38 560/74/38 559/75/38 +f 556/69/39 557/71/39 561/76/39 560/74/39 +f 557/71/40 558/72/40 562/77/40 561/76/40 +f 558/72/41 531/73/41 532/78/41 562/77/41 +f 532/38/42 547/39/42 562/79/42 +f 563/16/43 566/80/43 570/81/43 569/82/43 +f 566/80/44 567/83/44 571/84/44 570/81/44 +f 567/83/45 568/85/45 572/86/45 571/84/45 +f 568/85/46 592/87/46 593/88/46 572/86/46 +f 569/82/47 570/81/47 574/89/47 573/90/47 +f 570/81/48 571/84/48 575/91/48 574/89/48 +f 571/84/49 572/86/49 576/92/49 575/91/49 +f 572/86/50 593/88/50 594/93/50 576/92/50 +f 573/90/51 574/89/51 578/94/51 577/95/51 +f 574/89/52 575/91/52 579/96/52 578/94/52 +f 575/91/53 576/92/53 580/97/53 579/96/53 +f 576/92/54 594/93/54 595/98/54 580/97/54 +f 564/2/55 581/99/55 585/100/55 584/101/55 +f 581/99/56 582/102/56 586/103/56 585/100/56 +f 582/102/57 583/104/57 587/105/57 586/103/57 +f 583/104/58 607/106/58 608/107/58 587/105/58 +f 584/101/59 585/100/59 589/108/59 588/109/59 +f 585/100/60 586/103/60 590/110/60 589/108/60 +f 586/103/61 587/105/61 591/111/61 590/110/61 +f 587/105/62 608/107/62 609/112/62 591/111/62 +f 588/109/63 589/108/63 593/113/63 592/114/63 +f 589/108/64 590/110/64 594/115/64 593/113/64 +f 590/110/65 591/111/65 595/116/65 594/115/65 +f 591/111/66 609/112/66 610/117/66 595/116/66 +f 565/118/67 596/119/67 600/120/67 599/121/67 +f 596/119/68 597/122/68 601/123/68 600/120/68 +f 597/122/69 598/124/69 602/125/69 601/123/69 +f 598/124/70 577/126/70 578/127/70 602/125/70 +f 599/121/71 600/120/71 604/128/71 603/129/71 +f 600/120/72 601/123/72 605/130/72 604/128/72 +f 601/123/73 602/125/73 606/131/73 605/130/73 +f 602/125/74 578/127/74 579/132/74 606/131/74 +f 603/129/75 604/128/75 608/133/75 607/134/75 +f 604/128/76 605/130/76 609/135/76 608/133/76 +f 605/130/77 606/131/77 610/136/77 609/135/77 +f 606/131/78 579/132/78 580/137/78 610/136/78 +f 580/97/79 595/98/79 610/138/79 +f 611/8/80 614/139/80 618/140/80 617/141/80 +f 614/139/81 615/142/81 619/143/81 618/140/81 +f 615/142/82 616/144/82 620/145/82 619/143/82 +f 616/144/83 640/146/83 641/147/83 620/145/83 +f 617/141/84 618/140/84 622/148/84 621/149/84 +f 618/140/85 619/143/85 623/150/85 622/148/85 +f 619/143/86 620/145/86 624/151/86 623/150/86 +f 620/145/87 641/147/87 642/152/87 624/151/87 +f 621/149/88 622/148/88 626/153/88 625/154/88 +f 622/148/89 623/150/89 627/155/89 626/153/89 +f 623/150/90 624/151/90 628/156/90 627/155/90 +f 624/151/91 642/152/91 643/157/91 628/156/91 +f 612/3/92 629/158/92 633/159/92 632/160/92 +f 629/158/93 630/161/93 634/162/93 633/159/93 +f 630/161/94 631/163/94 635/164/94 634/162/94 +f 631/163/95 655/165/95 656/166/95 635/164/95 +f 632/160/96 633/159/96 637/167/96 636/168/96 +f 633/159/97 634/162/97 638/169/97 637/167/97 +f 634/162/98 635/164/98 639/170/98 638/169/98 +f 635/164/99 656/166/99 657/171/99 639/170/99 +f 636/168/100 637/167/100 641/172/100 640/173/100 +f 637/167/101 638/169/101 642/174/101 641/172/101 +f 638/169/102 639/170/102 643/175/102 642/174/102 +f 639/170/103 657/171/103 658/176/103 643/175/103 +f 613/15/104 644/177/104 648/178/104 647/179/104 +f 644/177/105 645/180/105 649/181/105 648/178/105 +f 645/180/106 646/182/106 650/183/106 649/181/106 +f 646/182/107 625/184/107 626/185/107 650/183/107 +f 647/179/108 648/178/108 652/186/108 651/187/108 +f 648/178/109 649/181/109 653/188/109 652/186/109 +f 649/181/110 650/183/110 654/189/110 653/188/110 +f 650/183/111 626/185/111 627/190/111 654/189/111 +f 651/187/112 652/186/112 656/191/112 655/192/112 +f 652/186/113 653/188/113 657/193/113 656/191/113 +f 653/188/114 654/189/114 658/194/114 657/193/114 +f 654/189/115 627/190/115 628/195/115 658/194/115 +f 628/156/116 643/157/116 658/196/116 +f 659/20/117 662/197/117 666/198/117 665/199/117 +f 662/197/118 663/200/118 667/201/118 666/198/118 +f 663/200/119 664/202/119 668/203/119 667/201/119 +f 664/202/120 688/204/120 689/205/120 668/203/120 +f 665/199/121 666/198/121 670/206/121 669/207/121 +f 666/198/122 667/201/122 671/208/122 670/206/122 +f 667/201/123 668/203/123 672/209/123 671/208/123 +f 668/203/124 689/205/124 690/210/124 672/209/124 +f 669/207/125 670/206/125 674/211/125 673/212/125 +f 670/206/126 671/208/126 675/213/126 674/211/126 +f 671/208/127 672/209/127 676/214/127 675/213/127 +f 672/209/128 690/210/128 691/215/128 676/214/128 +f 660/4/129 677/216/129 681/217/129 680/218/129 +f 677/216/130 678/219/130 682/220/130 681/217/130 +f 678/219/131 679/221/131 683/222/131 682/220/131 +f 679/221/132 703/223/132 704/224/132 683/222/132 +f 680/218/133 681/217/133 685/225/133 684/226/133 +f 681/217/134 682/220/134 686/227/134 685/225/134 +f 682/220/135 683/222/135 687/228/135 686/227/135 +f 683/222/136 704/224/136 705/229/136 687/228/136 +f 684/226/137 685/225/137 689/230/137 688/231/137 +f 685/225/138 686/227/138 690/232/138 689/230/138 +f 686/227/139 687/228/139 691/233/139 690/232/139 +f 687/228/140 705/229/140 706/234/140 691/233/140 +f 661/7/141 692/235/141 696/236/141 695/237/141 +f 692/235/142 693/238/142 697/239/142 696/236/142 +f 693/238/143 694/240/143 698/241/143 697/239/143 +f 694/240/144 673/242/144 674/243/144 698/241/144 +f 695/237/145 696/236/145 700/244/145 699/245/145 +f 696/236/146 697/239/146 701/246/146 700/244/146 +f 697/239/147 698/241/147 702/247/147 701/246/147 +f 698/241/148 674/243/148 675/248/148 702/247/148 +f 699/245/149 700/244/149 704/249/149 703/250/149 +f 700/244/150 701/246/150 705/251/150 704/249/150 +f 701/246/151 702/247/151 706/252/151 705/251/151 +f 702/247/152 675/248/152 676/253/152 706/252/152 +f 676/214/153 691/215/153 706/254/153 +f 707/18/154 710/255/154 714/256/154 713/257/154 +f 710/255/155 711/258/155 715/259/155 714/256/155 +f 711/258/156 712/260/156 716/261/156 715/259/156 +f 712/260/157 736/262/157 737/263/157 716/261/157 +f 713/257/158 714/256/158 718/264/158 717/265/158 +f 714/256/159 715/259/159 719/266/159 718/264/159 +f 715/259/160 716/261/160 720/267/160 719/266/160 +f 716/261/161 737/263/161 738/268/161 720/267/161 +f 717/265/162 718/264/162 722/269/162 721/270/162 +f 718/264/163 719/266/163 723/271/163 722/269/163 +f 719/266/164 720/267/164 724/272/164 723/271/164 +f 720/267/165 738/268/165 739/273/165 724/272/165 +f 708/12/166 725/274/166 729/275/166 728/276/166 +f 725/274/167 726/277/167 730/278/167 729/275/167 +f 726/277/168 727/279/168 731/280/168 730/278/168 +f 727/279/169 751/281/169 752/282/169 731/280/169 +f 728/276/170 729/275/170 733/283/170 732/284/170 +f 729/275/171 730/278/171 734/285/171 733/283/171 +f 730/278/172 731/280/172 735/286/172 734/285/172 +f 731/280/173 752/282/173 753/287/173 735/286/173 +f 732/284/174 733/283/174 737/288/174 736/289/174 +f 733/283/175 734/285/175 738/290/175 737/288/175 +f 734/285/176 735/286/176 739/291/176 738/290/176 +f 735/286/177 753/287/177 754/292/177 739/291/177 +f 709/293/178 740/294/178 744/295/178 743/296/178 +f 740/294/179 741/297/179 745/298/179 744/295/179 +f 741/297/180 742/299/180 746/300/180 745/298/180 +f 742/299/181 721/301/181 722/302/181 746/300/181 +f 743/296/182 744/295/182 748/303/182 747/304/182 +f 744/295/183 745/298/183 749/305/183 748/303/183 +f 745/298/184 746/300/184 750/306/184 749/305/184 +f 746/300/185 722/302/185 723/307/185 750/306/185 +f 747/304/186 748/303/186 752/308/186 751/309/186 +f 748/303/187 749/305/187 753/310/187 752/308/187 +f 749/305/188 750/306/188 754/311/188 753/310/188 +f 750/306/189 723/307/189 724/312/189 754/311/189 +f 724/272/190 739/273/190 754/313/190 +f 755/11/191 758/314/191 762/315/191 761/316/191 +f 758/314/192 759/317/192 763/318/192 762/315/192 +f 759/317/193 760/319/193 764/320/193 763/318/193 +f 760/319/194 784/321/194 785/322/194 764/320/194 +f 761/316/195 762/315/195 766/323/195 765/324/195 +f 762/315/196 763/318/196 767/325/196 766/323/196 +f 763/318/197 764/320/197 768/326/197 767/325/197 +f 764/320/198 785/322/198 786/327/198 768/326/198 +f 765/324/199 766/323/199 770/328/199 769/329/199 +f 766/323/200 767/325/200 771/330/200 770/328/200 +f 767/325/201 768/326/201 772/331/201 771/330/201 +f 768/326/202 786/327/202 787/332/202 772/331/202 +f 756/13/203 773/333/203 777/334/203 776/335/203 +f 773/333/204 774/336/204 778/337/204 777/334/204 +f 774/336/205 775/338/205 779/339/205 778/337/205 +f 775/338/206 799/340/206 800/341/206 779/339/206 +f 776/335/207 777/334/207 781/342/207 780/343/207 +f 777/334/208 778/337/208 782/344/208 781/342/208 +f 778/337/209 779/339/209 783/345/209 782/344/209 +f 779/339/210 800/341/210 801/346/210 783/345/210 +f 780/343/211 781/342/211 785/347/211 784/348/211 +f 781/342/212 782/344/212 786/349/212 785/347/212 +f 782/344/213 783/345/213 787/350/213 786/349/213 +f 783/345/214 801/346/214 802/351/214 787/350/214 +f 757/352/215 788/353/215 792/354/215 791/355/215 +f 788/353/216 789/356/216 793/357/216 792/354/216 +f 789/356/217 790/358/217 794/359/217 793/357/217 +f 790/358/218 769/360/218 770/361/218 794/359/218 +f 791/355/219 792/354/219 796/362/219 795/363/219 +f 792/354/220 793/357/220 797/364/220 796/362/220 +f 793/357/221 794/359/221 798/365/221 797/364/221 +f 794/359/222 770/361/222 771/366/222 798/365/222 +f 795/363/223 796/362/223 800/367/223 799/368/223 +f 796/362/224 797/364/224 801/369/224 800/367/224 +f 797/364/225 798/365/225 802/370/225 801/369/225 +f 798/365/226 771/366/226 772/371/226 802/370/226 +f 772/331/227 787/332/227 802/372/227 +f 803/10/228 806/373/228 810/374/228 809/375/228 +f 806/373/229 807/376/229 811/377/229 810/374/229 +f 807/376/230 808/378/230 812/379/230 811/377/230 +f 808/378/231 832/380/231 833/381/231 812/379/231 +f 809/375/232 810/374/232 814/382/232 813/383/232 +f 810/374/233 811/377/233 815/384/233 814/382/233 +f 811/377/234 812/379/234 816/385/234 815/384/234 +f 812/379/235 833/381/235 834/386/235 816/385/235 +f 813/383/236 814/382/236 818/387/236 817/388/236 +f 814/382/237 815/384/237 819/389/237 818/387/237 +f 815/384/238 816/385/238 820/390/238 819/389/238 +f 816/385/239 834/386/239 835/391/239 820/390/239 +f 804/5/240 821/392/240 825/393/240 824/394/240 +f 821/392/241 822/395/241 826/396/241 825/393/241 +f 822/395/242 823/397/242 827/398/242 826/396/242 +f 823/397/243 847/399/243 848/400/243 827/398/243 +f 824/394/244 825/393/244 829/401/244 828/402/244 +f 825/393/245 826/396/245 830/403/245 829/401/245 +f 826/396/246 827/398/246 831/404/246 830/403/246 +f 827/398/247 848/400/247 849/405/247 831/404/247 +f 828/402/248 829/401/248 833/406/248 832/407/248 +f 829/401/249 830/403/249 834/408/249 833/406/249 +f 830/403/250 831/404/250 835/409/250 834/408/250 +f 831/404/251 849/405/251 850/410/251 835/409/251 +f 805/14/252 836/411/252 840/412/252 839/413/252 +f 836/411/253 837/414/253 841/415/253 840/412/253 +f 837/414/254 838/416/254 842/417/254 841/415/254 +f 838/416/255 817/418/255 818/419/255 842/417/255 +f 839/413/256 840/412/256 844/420/256 843/421/256 +f 840/412/257 841/415/257 845/422/257 844/420/257 +f 841/415/258 842/417/258 846/423/258 845/422/258 +f 842/417/259 818/419/259 819/424/259 846/423/259 +f 843/421/260 844/420/260 848/425/260 847/426/260 +f 844/420/261 845/422/261 849/427/261 848/425/261 +f 845/422/262 846/423/262 850/428/262 849/427/262 +f 846/423/263 819/424/263 820/429/263 850/428/263 +f 820/390/264 835/391/264 850/430/264 +f 851/9/265 854/431/265 858/432/265 857/433/265 +f 854/431/266 855/434/266 859/435/266 858/432/266 +f 855/434/267 856/436/267 860/437/267 859/435/267 +f 856/436/268 880/438/268 881/439/268 860/437/268 +f 857/433/269 858/432/269 862/440/269 861/441/269 +f 858/432/270 859/435/270 863/442/270 862/440/270 +f 859/435/271 860/437/271 864/443/271 863/442/271 +f 860/437/272 881/439/272 882/444/272 864/443/272 +f 861/441/273 862/440/273 866/445/273 865/446/273 +f 862/440/274 863/442/274 867/447/274 866/445/274 +f 863/442/275 864/443/275 868/448/275 867/447/275 +f 864/443/276 882/444/276 883/449/276 868/448/276 +f 852/17/277 869/450/277 873/451/277 872/452/277 +f 869/450/278 870/453/278 874/454/278 873/451/278 +f 870/453/279 871/455/279 875/456/279 874/454/279 +f 871/455/280 895/457/280 896/458/280 875/456/280 +f 872/452/281 873/451/281 877/459/281 876/460/281 +f 873/451/282 874/454/282 878/461/282 877/459/282 +f 874/454/283 875/456/283 879/462/283 878/461/283 +f 875/456/284 896/458/284 897/463/284 879/462/284 +f 876/460/285 877/459/285 881/464/285 880/465/285 +f 877/459/286 878/461/286 882/466/286 881/464/286 +f 878/461/287 879/462/287 883/467/287 882/466/287 +f 879/462/288 897/463/288 898/468/288 883/467/288 +f 853/6/289 884/469/289 888/470/289 887/471/289 +f 884/469/290 885/472/290 889/473/290 888/470/290 +f 885/472/291 886/474/291 890/475/291 889/473/291 +f 886/474/292 865/476/292 866/477/292 890/475/292 +f 887/471/293 888/470/293 892/478/293 891/479/293 +f 888/470/294 889/473/294 893/480/294 892/478/294 +f 889/473/295 890/475/295 894/481/295 893/480/295 +f 890/475/296 866/477/296 867/482/296 894/481/296 +f 891/479/297 892/478/297 896/483/297 895/484/297 +f 892/478/298 893/480/298 897/485/298 896/483/298 +f 893/480/299 894/481/299 898/486/299 897/485/299 +f 894/481/300 867/482/300 868/487/300 898/486/300 +f 868/448/301 883/449/301 898/488/301 +f 515/19/302 707/18/302 713/257/302 518/21/302 +f 518/21/303 713/257/303 717/265/303 519/24/303 +f 519/24/304 717/265/304 721/270/304 520/26/304 +f 520/26/305 721/270/305 742/489/305 544/28/305 +f 544/56/306 742/299/306 741/297/306 540/51/306 +f 540/51/307 741/297/307 740/294/307 536/43/307 +f 536/43/308 740/294/308 709/293/308 516/40/308 +f 708/12/309 755/11/309 761/316/309 725/274/309 +f 725/274/310 761/316/310 765/324/310 726/277/310 +f 726/277/311 765/324/311 769/329/311 727/279/311 +f 727/279/312 769/329/312 790/490/312 751/281/312 +f 751/309/313 790/358/313 789/356/313 747/304/313 +f 747/304/314 789/356/314 788/353/314 743/296/314 +f 743/296/315 788/353/315 757/352/315 709/293/315 +f 756/13/316 563/16/316 569/82/316 773/333/316 +f 773/333/317 569/82/317 573/90/317 774/336/317 +f 774/336/318 573/90/318 577/95/318 775/338/318 +f 775/338/319 577/95/319 598/491/319 799/340/319 +f 799/368/320 598/124/320 597/122/320 795/363/320 +f 795/363/321 597/122/321 596/119/321 791/355/321 +f 791/355/322 596/119/322 565/118/322 757/352/322 +f 564/2/323 517/1/323 551/62/323 581/99/323 +f 581/99/324 551/62/324 555/70/324 582/102/324 +f 582/102/325 555/70/325 559/75/325 583/104/325 +f 583/104/326 559/75/326 535/492/326 607/106/326 +f 607/134/327 535/46/327 534/44/327 603/129/327 +f 603/129/328 534/44/328 533/41/328 599/121/328 +f 599/121/329 533/41/329 516/40/329 565/118/329 +f 755/11/330 803/10/330 809/375/330 758/314/330 +f 758/314/331 809/375/331 813/383/331 759/317/331 +f 759/317/332 813/383/332 817/388/332 760/319/332 +f 760/319/333 817/388/333 838/493/333 784/321/333 +f 784/348/334 838/416/334 837/414/334 780/343/334 +f 780/343/335 837/414/335 836/411/335 776/335/335 +f 776/335/336 836/411/336 805/14/336 756/13/336 +f 804/5/337 611/8/337 617/141/337 821/392/337 +f 821/392/338 617/141/338 621/149/338 822/395/338 +f 822/395/339 621/149/339 625/154/339 823/397/339 +f 823/397/340 625/154/340 646/494/340 847/399/340 +f 847/426/341 646/182/341 645/180/341 843/421/341 +f 843/421/342 645/180/342 644/177/342 839/413/342 +f 839/413/343 644/177/343 613/15/343 805/14/343 +f 612/3/344 564/2/344 584/101/344 629/158/344 +f 629/158/345 584/101/345 588/109/345 630/161/345 +f 630/161/346 588/109/346 592/114/346 631/163/346 +f 631/163/347 592/114/347 568/495/347 655/165/347 +f 655/192/348 568/85/348 567/83/348 651/187/348 +f 651/187/349 567/83/349 566/80/349 647/179/349 +f 647/179/350 566/80/350 563/16/350 613/15/350 +f 803/10/351 851/9/351 857/433/351 806/373/351 +f 806/373/352 857/433/352 861/441/352 807/376/352 +f 807/376/353 861/441/353 865/446/353 808/378/353 +f 808/378/354 865/446/354 886/496/354 832/380/354 +f 832/407/355 886/474/355 885/472/355 828/402/355 +f 828/402/356 885/472/356 884/469/356 824/394/356 +f 824/394/357 884/469/357 853/6/357 804/5/357 +f 852/17/358 659/20/358 665/199/358 869/450/358 +f 869/450/359 665/199/359 669/207/359 870/453/359 +f 870/453/360 669/207/360 673/212/360 871/455/360 +f 871/455/361 673/212/361 694/497/361 895/457/361 +f 895/484/362 694/240/362 693/238/362 891/479/362 +f 891/479/363 693/238/363 692/235/363 887/471/363 +f 887/471/364 692/235/364 661/7/364 853/6/364 +f 660/4/365 612/3/365 632/160/365 677/216/365 +f 677/216/366 632/160/366 636/168/366 678/219/366 +f 678/219/367 636/168/367 640/173/367 679/221/367 +f 679/221/368 640/173/368 616/498/368 703/223/368 +f 703/250/369 616/144/369 615/142/369 699/245/369 +f 699/245/370 615/142/370 614/139/370 695/237/370 +f 695/237/371 614/139/371 611/8/371 661/7/371 +f 851/9/372 708/12/372 728/276/372 854/431/372 +f 854/431/373 728/276/373 732/284/373 855/434/373 +f 855/434/374 732/284/374 736/289/374 856/436/374 +f 856/436/375 736/289/375 712/499/375 880/438/375 +f 880/465/376 712/260/376 711/258/376 876/460/376 +f 876/460/377 711/258/377 710/255/377 872/452/377 +f 872/452/378 710/255/378 707/18/378 852/17/378 +f 517/1/379 660/4/379 680/218/379 548/60/379 +f 548/60/380 680/218/380 684/226/380 549/63/380 +f 549/63/381 684/226/381 688/231/381 550/65/381 +f 550/65/382 688/231/382 664/500/382 529/67/382 +f 529/36/383 664/202/383 663/200/383 525/31/383 +f 525/31/384 663/200/384 662/197/384 521/23/384 +f 521/23/385 662/197/385 659/20/385 515/19/385 +f 709/293/386 757/352/386 565/118/386 516/40/386 +f 1027/501/5 1030/502/5 1031/503/5 1032/504/5 1033/505/5 1034/506/5 +f 1039/507/4 1042/508/4 1043/509/4 1044/510/4 1045/511/4 1046/512/4 +f 1051/513/5 1054/514/5 1055/515/5 1056/516/5 1057/517/5 1058/518/5 +f 1063/519/4 1066/520/4 1067/521/4 1068/522/4 1069/523/4 1070/524/4 +f 1075/525/5 1078/526/5 1079/527/5 1080/528/5 1081/529/5 1082/530/5 +f 1087/531/4 1090/532/4 1091/533/4 1092/534/4 1093/535/4 1094/536/4 +f 1099/537/5 1102/538/5 1103/539/5 1104/540/5 1105/541/5 1106/542/5 +f 1111/543/4 1114/544/4 1115/545/4 1116/546/4 1117/547/4 1118/548/4 +f 1123/549/5 1126/550/5 1127/551/5 1128/552/5 1129/553/5 1130/554/5 +f 1135/555/4 1138/556/4 1139/557/4 1140/558/4 1141/559/4 1142/560/4 +f 1147/561/5 1150/562/5 1151/563/5 1152/564/5 1153/565/5 1154/566/5 +f 1159/567/4 1162/568/4 1163/569/4 1164/570/4 1165/571/4 1166/572/4 +f 1171/573/5 1174/574/5 1175/575/5 1176/576/5 1177/577/5 1178/578/5 +f 1183/579/4 1186/580/4 1187/581/4 1188/582/4 1189/583/4 1190/584/4 +f 1195/585/5 1198/586/5 1199/587/5 1200/588/5 1201/589/5 1202/590/5 +f 1207/591/4 1210/592/4 1211/593/4 1212/594/4 1213/595/4 1214/596/4 +f 1387/597/4 1388/598/4 1418/599/4 1417/600/4 1415/601/4 1416/602/4 1414/603/4 1413/604/4 1412/605/4 1411/606/4 1409/607/4 1410/608/4 1408/609/4 1407/610/4 1406/611/4 1405/612/4 1404/613/4 1403/614/4 1402/615/4 1401/616/4 1400/617/4 1399/618/4 1398/619/4 1397/620/4 1396/621/4 1395/622/4 1394/623/4 1393/624/4 1392/625/4 1391/626/4 1390/627/4 1389/628/4 +f 1366/629/5 1383/630/5 1367/631/5 1368/632/5 1369/633/5 1370/634/5 1371/635/5 1384/636/5 1372/637/5 1373/638/5 1374/639/5 1385/640/5 1375/641/5 1386/642/5 1376/643/5 1377/644/5 1378/645/5 1379/646/5 1380/647/5 1355/648/5 1356/649/5 1357/650/5 1358/651/5 1359/652/5 1360/653/5 1361/654/5 1362/655/5 1363/656/5 1381/657/5 1364/658/5 1382/659/5 1365/660/5 +f 1423/661/5 1433/662/5 1438/663/5 1442/664/5 1446/665/5 1451/666/5 1450/667/5 1455/668/5 1459/669/5 1463/670/5 1467/671/5 1472/672/5 1481/673/5 1482/674/5 1480/675/5 1474/676/5 1469/677/5 1465/678/5 1461/679/5 1457/680/5 1453/681/5 1448/682/5 1444/683/5 1440/684/5 1435/685/5 1431/686/5 1424/687/5 1425/688/5 1422/689/5 1419/690/5 1420/691/5 1421/692/5 +f 1427/693/4 1426/694/4 1432/695/4 1437/696/4 1436/697/4 1441/698/4 1445/699/4 1449/700/4 1454/701/4 1458/702/4 1462/703/4 1466/704/4 1470/705/4 1475/706/4 1471/707/4 1477/708/4 1476/709/4 1478/710/4 1479/711/4 1473/712/4 1468/713/4 1464/714/4 1460/715/4 1456/716/4 1452/717/4 1447/718/4 1443/719/4 1439/720/4 1434/721/4 1430/722/4 1429/723/4 1428/724/4 +f 1483/725/5 1486/726/5 1487/727/5 1488/728/5 1489/729/5 1490/730/5 +f 1495/731/4 1498/732/4 1499/733/4 1500/734/4 1501/735/4 1502/736/4 +f 1507/737/5 1510/738/5 1511/739/5 1512/740/5 1513/741/5 1514/742/5 +f 1519/743/4 1522/744/4 1523/745/4 1524/746/4 1525/747/4 1526/748/4 +f 1531/749/5 1534/750/5 1535/751/5 1536/752/5 1537/753/5 1538/754/5 +f 1543/755/4 1546/756/4 1547/757/4 1548/758/4 1549/759/4 1550/760/4 +f 1555/761/5 1558/762/5 1559/763/5 1560/764/5 1561/765/5 1562/766/5 +f 1567/767/4 1570/768/4 1571/769/4 1572/770/4 1573/771/4 1574/772/4 +f 1579/773/5 1582/774/5 1583/775/5 1584/776/5 1585/777/5 1586/778/5 +f 1591/779/4 1594/780/4 1595/781/4 1596/782/4 1597/783/4 1598/784/4 +f 1603/785/5 1606/786/5 1607/787/5 1608/788/5 1609/789/5 1610/790/5 +f 1615/791/4 1618/792/4 1619/793/4 1620/794/4 1621/795/4 1622/796/4 +f 1627/797/5 1630/798/5 1631/799/5 1632/800/5 1633/801/5 1634/802/5 +f 1639/803/4 1642/804/4 1643/805/4 1644/806/4 1645/807/4 1646/808/4 +f 1651/809/5 1654/810/5 1655/811/5 1656/812/5 1657/813/5 1658/814/5 +f 1663/815/4 1666/816/4 1667/817/4 1668/818/4 1669/819/4 1670/820/4 +s 1 +f 471/821/387 470/822/388 4/823/389 5/824/390 +f 479/825/391 478/826/392 12/827/393 13/828/394 +f 472/829/395 471/821/387 5/824/390 6/830/396 +f 480/831/397 479/825/391 13/828/394 14/832/398 +f 473/833/399 472/829/395 6/830/396 7/834/400 +f 481/835/401 480/831/397 14/832/398 15/836/402 +f 474/837/403 473/833/399 7/834/400 8/838/404 +f 482/839/405 481/835/401 15/836/402 16/840/406 +f 475/841/407 474/837/403 8/838/404 9/842/408 +f 468/843/409 257/844/410 2/845/411 +f 1/846/412 482/839/405 16/840/406 +f 476/847/413 475/841/407 9/842/408 10/848/414 +f 469/849/415 468/843/409 2/845/411 3/850/416 +f 477/851/417 476/847/413 10/848/414 11/852/418 +f 470/822/388 469/849/415 3/850/416 4/823/389 +f 478/826/392 477/851/417 11/852/418 12/827/393 +f 11/852/418 10/848/414 25/853/419 26/854/420 +f 4/823/389 3/850/416 18/855/421 19/856/422 +f 12/827/393 11/852/418 26/854/420 27/857/423 +f 5/824/390 4/823/389 19/856/422 20/858/424 +f 13/828/394 12/827/393 27/857/423 28/859/425 +f 6/830/396 5/824/390 20/858/424 21/860/426 +f 14/832/398 13/828/394 28/859/425 29/861/427 +f 7/834/400 6/830/396 21/860/426 22/862/428 +f 15/836/402 14/832/398 29/861/427 30/863/429 +f 8/838/404 7/834/400 22/862/428 23/864/430 +f 16/840/406 15/836/402 30/863/429 31/865/431 +f 9/842/408 8/838/404 23/864/430 24/866/432 +f 2/845/411 257/844/410 17/867/433 +f 1/846/412 16/840/406 31/865/431 +f 10/848/414 9/842/408 24/866/432 25/853/419 +f 3/850/416 2/845/411 17/867/433 18/855/421 +f 30/863/429 29/861/427 44/868/434 45/869/435 +f 23/864/430 22/862/428 37/870/436 38/871/437 +f 31/865/431 30/863/429 45/869/435 46/872/438 +f 24/866/432 23/864/430 38/871/437 39/873/439 +f 17/867/433 257/844/410 32/874/440 +f 1/846/412 31/865/431 46/872/438 +f 25/853/419 24/866/432 39/873/439 40/875/441 +f 18/855/421 17/867/433 32/874/440 33/876/442 +f 26/854/420 25/853/419 40/875/441 41/877/443 +f 19/856/422 18/855/421 33/876/442 34/878/444 +f 27/857/423 26/854/420 41/877/443 42/879/445 +f 20/858/424 19/856/422 34/878/444 35/880/446 +f 28/859/425 27/857/423 42/879/445 43/881/447 +f 21/860/426 20/858/424 35/880/446 36/882/448 +f 29/861/427 28/859/425 43/881/447 44/868/434 +f 22/862/428 21/860/426 36/882/448 37/870/436 +f 42/879/445 41/877/443 56/883/449 57/884/450 +f 35/880/446 34/878/444 49/885/451 50/886/452 +f 43/881/447 42/879/445 57/884/450 58/887/453 +f 36/882/448 35/880/446 50/886/452 51/888/454 +f 44/868/434 43/881/447 58/887/453 59/889/455 +f 37/870/436 36/882/448 51/888/454 52/890/456 +f 45/869/435 44/868/434 59/889/455 60/891/457 +f 38/871/437 37/870/436 52/890/456 53/892/458 +f 46/872/438 45/869/435 60/891/457 61/893/459 +f 39/873/439 38/871/437 53/892/458 54/894/460 +f 32/874/440 257/844/410 47/895/461 +f 1/846/412 46/872/438 61/893/459 +f 40/875/441 39/873/439 54/894/460 55/896/462 +f 33/876/442 32/874/440 47/895/461 48/897/463 +f 41/877/443 40/875/441 55/896/462 56/883/449 +f 34/878/444 33/876/442 48/897/463 49/885/451 +f 61/893/459 60/891/457 75/898/464 76/899/465 +f 54/894/460 53/892/458 68/900/466 69/901/467 +f 47/895/461 257/844/410 62/902/468 +f 1/846/412 61/893/459 76/899/465 +f 55/896/462 54/894/460 69/901/467 70/903/469 +f 48/897/463 47/895/461 62/902/468 63/904/470 +f 56/883/449 55/896/462 70/903/469 71/905/471 +f 49/885/451 48/897/463 63/904/470 64/906/472 +f 57/884/450 56/883/449 71/905/471 72/907/473 +f 50/886/452 49/885/451 64/906/472 65/908/474 +f 58/887/453 57/884/450 72/907/473 73/909/475 +f 51/888/454 50/886/452 65/908/474 66/910/476 +f 59/889/455 58/887/453 73/909/475 74/911/477 +f 52/890/456 51/888/454 66/910/476 67/912/478 +f 60/891/457 59/889/455 74/911/477 75/898/464 +f 53/892/458 52/890/456 67/912/478 68/900/466 +f 65/908/474 64/906/472 79/913/479 80/914/480 +f 73/909/475 72/907/473 87/915/481 88/916/482 +f 66/910/476 65/908/474 80/914/480 81/917/483 +f 74/911/477 73/909/475 88/916/482 89/918/484 +f 67/912/478 66/910/476 81/917/483 82/919/485 +f 75/898/464 74/911/477 89/918/484 90/920/486 +f 68/900/466 67/912/478 82/919/485 83/921/487 +f 76/899/465 75/898/464 90/920/486 91/922/488 +f 69/901/467 68/900/466 83/921/487 84/923/489 +f 62/902/468 257/844/410 77/924/490 +f 1/846/412 76/899/465 91/922/488 +f 70/903/469 69/901/467 84/923/489 85/925/491 +f 63/904/470 62/902/468 77/924/490 78/926/492 +f 71/905/471 70/903/469 85/925/491 86/927/493 +f 64/906/472 63/904/470 78/926/492 79/913/479 +f 72/907/473 71/905/471 86/927/493 87/915/481 +f 84/923/489 83/921/487 98/928/494 99/929/495 +f 77/924/490 257/844/410 92/930/496 +f 1/846/412 91/922/488 106/931/497 +f 85/925/491 84/923/489 99/929/495 100/932/498 +f 78/926/492 77/924/490 92/930/496 93/933/499 +f 86/927/493 85/925/491 100/932/498 101/934/500 +f 79/913/479 78/926/492 93/933/499 94/935/501 +f 87/915/481 86/927/493 101/934/500 102/936/502 +f 80/914/480 79/913/479 94/935/501 95/937/503 +f 88/916/482 87/915/481 102/936/502 103/938/504 +f 81/917/483 80/914/480 95/937/503 96/939/505 +f 89/918/484 88/916/482 103/938/504 104/940/506 +f 82/919/485 81/917/483 96/939/505 97/941/507 +f 90/920/486 89/918/484 104/940/506 105/942/508 +f 83/921/487 82/919/485 97/941/507 98/928/494 +f 91/922/488 90/920/486 105/942/508 106/931/497 +f 103/938/504 102/936/502 117/943/509 118/944/510 +f 96/939/505 95/937/503 110/945/511 111/946/512 +f 104/940/506 103/938/504 118/944/510 119/947/513 +f 97/941/507 96/939/505 111/946/512 112/948/514 +f 105/942/508 104/940/506 119/947/513 120/949/515 +f 98/928/494 97/941/507 112/948/514 113/950/516 +f 106/931/497 105/942/508 120/949/515 121/951/517 +f 99/929/495 98/928/494 113/950/516 114/952/2 +f 92/930/496 257/844/410 107/953/518 +f 1/846/412 106/931/497 121/951/517 +f 100/932/498 99/929/495 114/952/2 115/954/519 +f 93/933/499 92/930/496 107/953/518 108/955/520 +f 101/934/500 100/932/498 115/954/519 116/956/521 +f 94/935/501 93/933/499 108/955/520 109/957/522 +f 102/936/502 101/934/500 116/956/521 117/943/509 +f 95/937/503 94/935/501 109/957/522 110/945/511 +f 107/953/518 257/844/410 122/958/523 +f 1/846/412 121/951/517 136/959/524 +f 115/954/519 114/952/2 129/960/525 130/961/526 +f 108/955/520 107/953/518 122/958/523 123/962/527 +f 116/956/521 115/954/519 130/961/526 131/963/528 +f 109/957/522 108/955/520 123/962/527 124/964/529 +f 117/943/509 116/956/521 131/963/528 132/965/530 +f 110/945/511 109/957/522 124/964/529 125/966/531 +f 118/944/510 117/943/509 132/965/530 133/967/532 +f 111/946/512 110/945/511 125/966/531 126/968/533 +f 119/947/513 118/944/510 133/967/532 134/969/534 +f 112/948/514 111/946/512 126/968/533 127/970/535 +f 120/949/515 119/947/513 134/969/534 135/971/536 +f 113/950/516 112/948/514 127/970/535 128/972/537 +f 121/951/517 120/949/515 135/971/536 136/959/524 +f 114/952/2 113/950/516 128/972/537 129/960/525 +f 126/968/533 125/966/531 140/973/538 141/974/539 +f 134/969/534 133/967/532 148/975/540 149/976/541 +f 127/970/535 126/968/533 141/974/539 142/977/542 +f 135/971/536 134/969/534 149/976/541 150/978/543 +f 128/972/537 127/970/535 142/977/542 143/979/544 +f 136/959/524 135/971/536 150/978/543 151/980/545 +f 129/960/525 128/972/537 143/979/544 144/981/546 +f 122/958/523 257/844/410 137/982/547 +f 1/846/412 136/959/524 151/980/545 +f 130/961/526 129/960/525 144/981/546 145/983/548 +f 123/962/527 122/958/523 137/982/547 138/984/549 +f 131/963/528 130/961/526 145/983/548 146/985/550 +f 124/964/529 123/962/527 138/984/549 139/986/551 +f 132/965/530 131/963/528 146/985/550 147/987/552 +f 125/966/531 124/964/529 139/986/551 140/973/538 +f 133/967/532 132/965/530 147/987/552 148/975/540 +f 145/983/548 144/981/546 159/988/553 160/989/554 +f 138/984/549 137/982/547 152/990/555 153/991/556 +f 146/985/550 145/983/548 160/989/554 161/992/557 +f 139/986/551 138/984/549 153/991/556 154/993/558 +f 147/987/552 146/985/550 161/992/557 162/994/559 +f 140/973/538 139/986/551 154/993/558 155/995/560 +f 148/975/540 147/987/552 162/994/559 163/996/561 +f 141/974/539 140/973/538 155/995/560 156/997/562 +f 149/976/541 148/975/540 163/996/561 164/998/563 +f 142/977/542 141/974/539 156/997/562 157/999/564 +f 150/978/543 149/976/541 164/998/563 165/1000/565 +f 143/979/544 142/977/542 157/999/564 158/1001/566 +f 151/980/545 150/978/543 165/1000/565 166/1002/567 +f 144/981/546 143/979/544 158/1001/566 159/988/553 +f 137/982/547 257/844/410 152/990/555 +f 1/846/412 151/980/545 166/1002/567 +f 164/998/563 163/996/561 178/1003/568 179/1004/569 +f 157/999/564 156/997/562 171/1005/570 172/1006/571 +f 165/1000/565 164/998/563 179/1004/569 180/1007/572 +f 158/1001/566 157/999/564 172/1006/571 173/1008/573 +f 166/1002/567 165/1000/565 180/1007/572 181/1009/574 +f 159/988/553 158/1001/566 173/1008/573 174/1010/575 +f 152/990/555 257/844/410 167/1011/576 +f 1/846/412 166/1002/567 181/1009/574 +f 160/989/554 159/988/553 174/1010/575 175/1012/577 +f 153/991/556 152/990/555 167/1011/576 168/1013/578 +f 161/992/557 160/989/554 175/1012/577 176/1014/579 +f 154/993/558 153/991/556 168/1013/578 169/1015/580 +f 162/994/559 161/992/557 176/1014/579 177/1016/581 +f 155/995/560 154/993/558 169/1015/580 170/1017/582 +f 163/996/561 162/994/559 177/1016/581 178/1003/568 +f 156/997/562 155/995/560 170/1017/582 171/1005/570 +f 176/1014/579 175/1012/577 190/1018/583 191/1019/584 +f 169/1015/580 168/1013/578 183/1020/585 184/1021/586 +f 177/1016/581 176/1014/579 191/1019/584 192/1022/587 +f 170/1017/582 169/1015/580 184/1021/586 185/1023/588 +f 178/1003/568 177/1016/581 192/1022/587 193/1024/589 +f 171/1005/570 170/1017/582 185/1023/588 186/1025/590 +f 179/1004/569 178/1003/568 193/1024/589 194/1026/591 +f 172/1006/571 171/1005/570 186/1025/590 187/1027/592 +f 180/1007/572 179/1004/569 194/1026/591 195/1028/593 +f 173/1008/573 172/1006/571 187/1027/592 188/1029/594 +f 181/1009/574 180/1007/572 195/1028/593 196/1030/595 +f 174/1010/575 173/1008/573 188/1029/594 189/1031/596 +f 167/1011/576 257/844/410 182/1032/597 +f 1/846/412 181/1009/574 196/1030/595 +f 175/1012/577 174/1010/575 189/1031/596 190/1018/583 +f 168/1013/578 167/1011/576 182/1032/597 183/1020/585 +f 195/1028/593 194/1026/591 209/1033/598 210/1034/599 +f 188/1029/594 187/1027/592 202/1035/600 203/1036/601 +f 196/1030/595 195/1028/593 210/1034/599 211/1037/602 +f 189/1031/596 188/1029/594 203/1036/601 204/1038/603 +f 182/1032/597 257/844/410 197/1039/604 +f 1/846/412 196/1030/595 211/1037/602 +f 190/1018/583 189/1031/596 204/1038/603 205/1040/605 +f 183/1020/585 182/1032/597 197/1039/604 198/1041/606 +f 191/1019/584 190/1018/583 205/1040/605 206/1042/607 +f 184/1021/586 183/1020/585 198/1041/606 199/1043/608 +f 192/1022/587 191/1019/584 206/1042/607 207/1044/609 +f 185/1023/588 184/1021/586 199/1043/608 200/1045/610 +f 193/1024/589 192/1022/587 207/1044/609 208/1046/611 +f 186/1025/590 185/1023/588 200/1045/610 201/1047/612 +f 194/1026/591 193/1024/589 208/1046/611 209/1033/598 +f 187/1027/592 186/1025/590 201/1047/612 202/1035/600 +f 199/1043/608 198/1041/606 213/1048/613 214/1049/614 +f 207/1044/609 206/1042/607 221/1050/615 222/1051/616 +f 200/1045/610 199/1043/608 214/1049/614 215/1052/617 +f 208/1046/611 207/1044/609 222/1051/616 223/1053/618 +f 201/1047/612 200/1045/610 215/1052/617 216/1054/619 +f 209/1033/598 208/1046/611 223/1053/618 224/1055/620 +f 202/1035/600 201/1047/612 216/1054/619 217/1056/621 +f 210/1034/599 209/1033/598 224/1055/620 225/1057/622 +f 203/1036/601 202/1035/600 217/1056/621 218/1058/623 +f 211/1037/602 210/1034/599 225/1057/622 226/1059/624 +f 204/1038/603 203/1036/601 218/1058/623 219/1060/625 +f 197/1039/604 257/844/410 212/1061/626 +f 1/846/412 211/1037/602 226/1059/624 +f 205/1040/605 204/1038/603 219/1060/625 220/1062/627 +f 198/1041/606 197/1039/604 212/1061/626 213/1048/613 +f 206/1042/607 205/1040/605 220/1062/627 221/1050/615 +f 218/1058/623 217/1056/621 232/1063/628 233/1064/629 +f 226/1059/624 225/1057/622 240/1065/630 241/1066/631 +f 219/1060/625 218/1058/623 233/1064/629 234/1067/632 +f 212/1061/626 257/844/410 227/1068/633 +f 1/846/412 226/1059/624 241/1066/631 +f 220/1062/627 219/1060/625 234/1067/632 235/1069/634 +f 213/1048/613 212/1061/626 227/1068/633 228/1070/635 +f 221/1050/615 220/1062/627 235/1069/634 236/1071/636 +f 214/1049/614 213/1048/613 228/1070/635 229/1072/637 +f 222/1051/616 221/1050/615 236/1071/636 237/1073/638 +f 215/1052/617 214/1049/614 229/1072/637 230/1074/639 +f 223/1053/618 222/1051/616 237/1073/638 238/1075/640 +f 216/1054/619 215/1052/617 230/1074/639 231/1076/641 +f 224/1055/620 223/1053/618 238/1075/640 239/1077/642 +f 217/1056/621 216/1054/619 231/1076/641 232/1063/628 +f 225/1057/622 224/1055/620 239/1077/642 240/1065/630 +f 264/1078/643 265/1079/644 249/1080/645 248/1081/646 +f 253/1082/647 254/1083/648 485/1084/649 486/1085/650 +f 265/1079/644 266/1086/651 250/1087/652 249/1080/645 +f 254/1083/648 255/1088/653 484/1089/654 485/1084/649 +f 266/1086/651 267/1090/655 251/1091/656 250/1087/652 +f 467/1092/657 483/1093/658 498/1094/659 +f 267/1090/655 268/1095/660 252/1096/661 251/1091/656 +f 248/1081/646 249/1080/645 490/1097/662 491/1098/663 +f 268/1095/660 269/1099/664 253/1082/647 252/1096/661 +f 249/1080/645 250/1087/652 489/1100/665 490/1097/662 +f 243/1101/666 244/1102/667 495/1103/668 496/1104/669 +f 261/1105/670 262/1106/671 246/1107/672 245/1108/673 +f 270/1109/674 271/1110/675 255/1088/653 254/1083/648 +f 250/1087/652 251/1091/656 488/1111/676 489/1100/665 +f 467/1092/657 256/1112/677 483/1093/658 +f 252/1096/661 253/1082/647 486/1085/650 487/1113/678 +f 260/1114/679 261/1105/670 245/1108/673 244/1102/667 +f 483/1093/658 242/1115/680 497/1116/681 498/1094/659 +f 251/1091/656 252/1096/661 487/1113/678 488/1111/676 +f 269/1099/664 270/1109/674 254/1083/648 253/1082/647 +f 262/1106/671 263/1117/682 247/1118/683 246/1107/672 +f 242/1115/680 243/1101/666 496/1104/669 497/1116/681 +f 263/1117/682 264/1078/643 248/1081/646 247/1118/683 +f 244/1102/667 245/1108/673 494/1119/684 495/1103/668 +f 271/1110/675 499/1120/685 255/1088/653 +f 245/1108/673 246/1107/672 493/1121/686 494/1119/684 +f 256/1112/677 258/1122/687 242/1115/680 483/1093/658 +f 246/1107/672 247/1118/683 492/1123/688 493/1121/686 +f 258/1122/687 259/1124/689 243/1101/666 242/1115/680 +f 247/1118/683 248/1081/646 491/1098/663 492/1123/688 +f 259/1124/689 260/1114/679 244/1102/667 243/1101/666 +f 255/1088/653 499/1120/685 484/1089/654 +f 275/1125/690 276/1126/691 261/1105/670 260/1114/679 +f 286/1127/692 499/1120/685 271/1110/675 +f 283/1128/693 284/1129/694 269/1099/664 268/1095/660 +f 279/1130/695 280/1131/696 265/1079/644 264/1078/643 +f 276/1126/691 277/1132/697 262/1106/671 261/1105/670 +f 272/1133/698 273/1134/699 258/1122/687 256/1112/677 +f 284/1129/694 285/1135/700 270/1109/674 269/1099/664 +f 280/1131/696 281/1136/701 266/1086/651 265/1079/644 +f 277/1132/697 278/1137/702 263/1117/682 262/1106/671 +f 281/1136/701 282/1138/703 267/1090/655 266/1086/651 +f 273/1134/699 274/1139/704 259/1124/689 258/1122/687 +f 285/1135/700 286/1127/692 271/1110/675 270/1109/674 +f 274/1139/704 275/1125/690 260/1114/679 259/1124/689 +f 278/1137/702 279/1130/695 264/1078/643 263/1117/682 +f 282/1138/703 283/1128/693 268/1095/660 267/1090/655 +f 467/1092/657 272/1133/698 256/1112/677 +f 288/1140/705 289/1141/706 274/1139/704 273/1134/699 +f 293/1142/707 294/1143/708 279/1130/695 278/1137/702 +f 292/1144/709 293/1142/707 278/1137/702 277/1132/697 +f 296/1145/710 297/1146/711 282/1138/703 281/1136/701 +f 300/1147/712 301/1148/713 286/1127/692 285/1135/700 +f 289/1141/706 290/1149/714 275/1125/690 274/1139/704 +f 467/1092/657 287/1150/715 272/1133/698 +f 297/1146/711 298/1151/716 283/1128/693 282/1138/703 +f 301/1148/713 499/1120/685 286/1127/692 +f 290/1149/714 291/1152/717 276/1126/691 275/1125/690 +f 294/1143/708 295/1153/718 280/1131/696 279/1130/695 +f 298/1151/716 299/1154/719 284/1129/694 283/1128/693 +f 287/1150/715 288/1140/705 273/1134/699 272/1133/698 +f 291/1152/717 292/1144/709 277/1132/697 276/1126/691 +f 295/1153/718 296/1145/710 281/1136/701 280/1131/696 +f 299/1154/719 300/1147/712 285/1135/700 284/1129/694 +f 302/1155/720 303/1156/721 288/1140/705 287/1150/715 +f 314/1157/722 315/1158/723 300/1147/712 299/1154/719 +f 310/1159/724 311/1160/725 296/1145/710 295/1153/718 +f 307/1161/726 308/1162/727 293/1142/707 292/1144/709 +f 303/1156/721 304/1163/728 289/1141/706 288/1140/705 +f 315/1158/723 316/1164/729 301/1148/713 300/1147/712 +f 311/1160/725 312/1165/730 297/1146/711 296/1145/710 +f 308/1162/727 309/1166/731 294/1143/708 293/1142/707 +f 305/1167/732 306/1168/733 291/1152/717 290/1149/714 +f 304/1163/728 305/1167/732 290/1149/714 289/1141/706 +f 467/1092/657 302/1155/720 287/1150/715 +f 312/1165/730 313/1169/734 298/1151/716 297/1146/711 +f 316/1164/729 499/1120/685 301/1148/713 +f 313/1169/734 314/1157/722 299/1154/719 298/1151/716 +f 309/1166/731 310/1159/724 295/1153/718 294/1143/708 +f 306/1168/733 307/1161/726 292/1144/709 291/1152/717 +f 323/1170/735 324/1171/736 309/1166/731 308/1162/727 +f 327/1172/737 328/1173/738 313/1169/734 312/1165/730 +f 467/1092/657 317/1174/739 302/1155/720 +f 320/1175/740 321/1176/741 306/1168/733 305/1167/732 +f 324/1171/736 325/1177/742 310/1159/724 309/1166/731 +f 328/1173/738 329/1178/743 314/1157/722 313/1169/734 +f 317/1174/739 318/1179/744 303/1156/721 302/1155/720 +f 321/1176/741 322/1180/745 307/1161/726 306/1168/733 +f 325/1177/742 326/1181/746 311/1160/725 310/1159/724 +f 329/1178/743 330/1182/747 315/1158/723 314/1157/722 +f 318/1179/744 319/1183/748 304/1163/728 303/1156/721 +f 322/1180/745 323/1170/735 308/1162/727 307/1161/726 +f 326/1181/746 327/1172/737 312/1165/730 311/1160/725 +f 330/1182/747 331/1184/749 316/1164/729 315/1158/723 +f 319/1183/748 320/1175/740 305/1167/732 304/1163/728 +f 331/1184/749 499/1120/685 316/1164/729 +f 333/1185/750 334/1186/751 319/1183/748 318/1179/744 +f 345/1187/752 346/1188/753 331/1184/749 330/1182/747 +f 341/1189/754 342/1190/755 327/1172/737 326/1181/746 +f 338/1191/756 339/1192/757 324/1171/736 323/1170/735 +f 334/1186/751 335/1193/758 320/1175/740 319/1183/748 +f 467/1092/657 332/1194/759 317/1174/739 +f 343/1195/760 344/1196/761 329/1178/743 328/1173/738 +f 342/1190/755 343/1195/760 328/1173/738 327/1172/737 +f 346/1188/753 499/1120/685 331/1184/749 +f 335/1193/758 336/1197/762 321/1176/741 320/1175/740 +f 339/1192/757 340/1198/763 325/1177/742 324/1171/736 +f 336/1197/762 337/1199/764 322/1180/745 321/1176/741 +f 332/1194/759 333/1185/750 318/1179/744 317/1174/739 +f 344/1196/761 345/1187/752 330/1182/747 329/1178/743 +f 340/1198/763 341/1189/754 326/1181/746 325/1177/742 +f 337/1199/764 338/1191/756 323/1170/735 322/1180/745 +f 354/1200/386 355/1201/765 340/1198/763 339/1192/757 +f 351/1202/766 352/1203/767 337/1199/764 336/1197/762 +f 355/1201/765 356/1204/768 341/1189/754 340/1198/763 +f 359/1205/769 360/1206/770 345/1187/752 344/1196/761 +f 348/1207/771 349/1208/772 334/1186/751 333/1185/750 +f 352/1203/767 353/1209/773 338/1191/756 337/1199/764 +f 356/1204/768 357/1210/774 342/1190/755 341/1189/754 +f 360/1206/770 361/1211/775 346/1188/753 345/1187/752 +f 349/1208/772 350/1212/776 335/1193/758 334/1186/751 +f 353/1209/773 354/1200/386 339/1192/757 338/1191/756 +f 357/1210/774 358/1213/777 343/1195/760 342/1190/755 +f 467/1092/657 347/1214/778 332/1194/759 +f 350/1212/776 351/1202/766 336/1197/762 335/1193/758 +f 347/1214/778 348/1207/771 333/1185/750 332/1194/759 +f 361/1211/775 499/1120/685 346/1188/753 +f 358/1213/777 359/1205/769 344/1196/761 343/1195/760 +f 368/1215/779 369/1216/780 354/1200/386 353/1209/773 +f 364/1217/781 365/1218/782 350/1212/776 349/1208/772 +f 467/1092/657 362/1219/783 347/1214/778 +f 372/1220/784 373/1221/785 358/1213/777 357/1210/774 +f 376/1222/786 499/1120/685 361/1211/775 +f 366/1223/787 367/1224/788 352/1203/767 351/1202/766 +f 365/1218/782 366/1223/787 351/1202/766 350/1212/776 +f 369/1216/780 370/1225/789 355/1201/765 354/1200/386 +f 373/1221/785 374/1226/790 359/1205/769 358/1213/777 +f 362/1219/783 363/1227/791 348/1207/771 347/1214/778 +f 374/1226/790 375/1228/792 360/1206/770 359/1205/769 +f 370/1225/789 371/1229/793 356/1204/768 355/1201/765 +f 367/1224/788 368/1215/779 353/1209/773 352/1203/767 +f 363/1227/791 364/1217/781 349/1208/772 348/1207/771 +f 375/1228/792 376/1222/786 361/1211/775 360/1206/770 +f 371/1229/793 372/1220/784 357/1210/774 356/1204/768 +f 389/1230/794 390/1231/795 375/1228/792 374/1226/790 +f 378/1232/796 379/1233/797 364/1217/781 363/1227/791 +f 382/1234/798 383/1235/799 368/1215/779 367/1224/788 +f 386/1236/800 387/1237/801 372/1220/784 371/1229/793 +f 390/1231/795 391/1238/802 376/1222/786 375/1228/792 +f 379/1233/797 380/1239/803 365/1218/782 364/1217/781 +f 383/1235/799 384/1240/804 369/1216/780 368/1215/779 +f 387/1237/801 388/1241/805 373/1221/785 372/1220/784 +f 467/1092/657 377/1242/806 362/1219/783 +f 380/1239/803 381/1243/807 366/1223/787 365/1218/782 +f 391/1238/802 499/1120/685 376/1222/786 +f 388/1241/805 389/1230/794 374/1226/790 373/1221/785 +f 385/1244/808 386/1236/800 371/1229/793 370/1225/789 +f 384/1240/804 385/1244/808 370/1225/789 369/1216/780 +f 381/1243/807 382/1234/798 367/1224/788 366/1223/787 +f 377/1242/806 378/1232/796 363/1227/791 362/1219/783 +f 402/1245/809 403/1246/810 388/1241/805 387/1237/801 +f 406/1247/811 499/1120/685 391/1238/802 +f 395/1248/812 396/1249/813 381/1243/807 380/1239/803 +f 399/1250/814 400/1251/815 385/1244/808 384/1240/804 +f 404/1252/816 405/1253/817 390/1231/795 389/1230/794 +f 403/1246/810 404/1252/816 389/1230/794 388/1241/805 +f 392/1254/818 393/1255/819 378/1232/796 377/1242/806 +f 396/1249/813 397/1256/820 382/1234/798 381/1243/807 +f 400/1251/815 401/1257/821 386/1236/800 385/1244/808 +f 397/1256/820 398/1258/822 383/1235/799 382/1234/798 +f 393/1255/819 394/1259/823 379/1233/797 378/1232/796 +f 405/1253/817 406/1247/811 391/1238/802 390/1231/795 +f 401/1257/821 402/1245/809 387/1237/801 386/1236/800 +f 398/1258/822 399/1250/814 384/1240/804 383/1235/799 +f 394/1259/823 395/1248/812 380/1239/803 379/1233/797 +f 467/1092/657 392/1254/818 377/1242/806 +f 416/1260/824 417/1261/825 402/1245/809 401/1257/821 +f 420/1262/826 421/1263/827 406/1247/811 405/1253/817 +f 409/1264/828 410/1265/829 395/1248/812 394/1259/823 +f 413/1266/830 414/1267/831 399/1250/814 398/1258/822 +f 417/1261/825 418/1268/832 403/1246/810 402/1245/809 +f 467/1092/657 407/1269/833 392/1254/818 +f 410/1265/829 411/1270/834 396/1249/813 395/1248/812 +f 421/1263/827 499/1120/685 406/1247/811 +f 418/1268/832 419/1271/835 404/1252/816 403/1246/810 +f 414/1267/831 415/1272/836 400/1251/815 399/1250/814 +f 411/1270/834 412/1273/837 397/1256/820 396/1249/813 +f 408/1274/838 409/1264/828 394/1259/823 393/1255/819 +f 407/1269/833 408/1274/838 393/1255/819 392/1254/818 +f 419/1271/835 420/1262/826 405/1253/817 404/1252/816 +f 415/1272/836 416/1260/824 401/1257/821 400/1251/815 +f 412/1273/837 413/1266/830 398/1258/822 397/1256/820 +f 429/1275/839 430/1276/840 415/1272/836 414/1267/831 +f 433/1277/841 434/1278/842 419/1271/835 418/1268/832 +f 422/1279/843 423/1280/844 408/1274/838 407/1269/833 +f 427/1281/845 428/1282/846 413/1266/830 412/1273/837 +f 426/1283/847 427/1281/845 412/1273/837 411/1270/834 +f 430/1276/840 431/1284/848 416/1260/824 415/1272/836 +f 434/1278/842 435/1285/849 420/1262/826 419/1271/835 +f 423/1280/844 424/1286/850 409/1264/828 408/1274/838 +f 435/1285/849 436/1287/851 421/1263/827 420/1262/826 +f 431/1284/848 432/1288/852 417/1261/825 416/1260/824 +f 428/1282/846 429/1275/839 414/1267/831 413/1266/830 +f 424/1286/850 425/1289/853 410/1265/829 409/1264/828 +f 467/1092/657 422/1279/843 407/1269/833 +f 432/1288/852 433/1277/841 418/1268/832 417/1261/825 +f 436/1287/851 499/1120/685 421/1263/827 +f 425/1289/853 426/1283/847 411/1270/834 410/1265/829 +f 467/1092/657 437/1290/854 422/1279/843 +f 440/1291/855 441/1292/856 426/1283/847 425/1289/853 +f 451/1293/857 499/1120/685 436/1287/851 +f 448/1294/858 449/1295/859 434/1278/842 433/1277/841 +f 444/1296/860 445/1297/861 430/1276/840 429/1275/839 +f 441/1292/856 442/1298/862 427/1281/845 426/1283/847 +f 437/1290/854 438/1299/863 423/1280/844 422/1279/843 +f 449/1295/859 450/1300/864 435/1285/849 434/1278/842 +f 445/1297/861 446/1301/865 431/1284/848 430/1276/840 +f 442/1298/862 443/1302/866 428/1282/846 427/1281/845 +f 439/1303/867 440/1291/855 425/1289/853 424/1286/850 +f 438/1299/863 439/1303/867 424/1286/850 423/1280/844 +f 450/1300/864 451/1293/857 436/1287/851 435/1285/849 +f 446/1301/865 447/1304/868 432/1288/852 431/1284/848 +f 443/1302/866 444/1296/860 429/1275/839 428/1282/846 +f 447/1304/868 448/1294/858 433/1277/841 432/1288/852 +f 464/1305/869 465/1306/870 450/1300/864 449/1295/859 +f 453/1307/871 454/1308/872 439/1303/867 438/1299/863 +f 458/1309/873 459/1310/874 444/1296/860 443/1302/866 +f 457/1311/875 458/1309/873 443/1302/866 442/1298/862 +f 461/1312/876 462/1313/877 447/1304/868 446/1301/865 +f 465/1306/870 466/1314/878 451/1293/857 450/1300/864 +f 454/1308/872 455/1315/879 440/1291/855 439/1303/867 +f 467/1092/657 452/1316/880 437/1290/854 +f 462/1313/877 463/1317/881 448/1294/858 447/1304/868 +f 466/1314/878 499/1120/685 451/1293/857 +f 455/1315/879 456/1318/882 441/1292/856 440/1291/855 +f 459/1310/874 460/1319/883 445/1297/861 444/1296/860 +f 463/1317/881 464/1305/869 449/1295/859 448/1294/858 +f 452/1316/880 453/1307/871 438/1299/863 437/1290/854 +f 456/1318/882 457/1311/875 442/1298/862 441/1292/856 +f 460/1319/883 461/1312/876 446/1301/865 445/1297/861 +f 505/1320/884 504/1321/885 462/1313/877 461/1312/876 +f 508/1322/886 507/1323/887 459/1310/874 458/1309/873 +f 512/1324/888 511/1325/889 455/1315/879 454/1308/872 +f 467/1092/657 514/1326/890 452/1316/880 +f 504/1321/885 503/1327/891 463/1317/881 462/1313/877 +f 500/1328/892 499/1120/685 466/1314/878 +f 511/1325/889 510/1329/893 456/1318/882 455/1315/879 +f 507/1323/887 506/1330/894 460/1319/883 459/1310/874 +f 502/1331/895 501/1332/896 465/1306/870 464/1305/869 +f 503/1327/891 502/1331/895 464/1305/869 463/1317/881 +f 514/1326/890 513/1333/897 453/1307/871 452/1316/880 +f 510/1329/893 509/1334/898 457/1311/875 456/1318/882 +f 506/1330/894 505/1320/884 461/1312/876 460/1319/883 +f 509/1334/898 508/1322/886 458/1309/873 457/1311/875 +f 513/1333/897 512/1324/888 454/1308/872 453/1307/871 +f 501/1332/896 500/1328/892 466/1314/878 465/1306/870 +f 1390/1335/899 1357/1336/900 1356/1337/901 1389/1338/902 +f 1391/1339/903 1358/1340/904 1357/1336/900 1390/1335/899 +f 1392/1341/905 1359/1342/906 1358/1340/904 1391/1339/903 +f 1393/1343/907 1360/1344/908 1359/1342/906 1392/1341/905 +f 1394/1345/909 1361/1346/910 1360/1344/908 1393/1343/907 +f 1395/1347/911 1362/1348/912 1361/1346/910 1394/1345/909 +f 1396/1349/913 1363/1350/914 1362/1348/912 1395/1347/911 +f 1397/1351/915 1381/1352/916 1363/1350/914 1396/1349/913 +f 1398/1353/917 1364/1354/918 1381/1352/916 1397/1351/915 +f 1399/1355/919 1382/1356/920 1364/1354/918 1398/1353/917 +f 1400/1357/921 1365/1358/922 1382/1356/920 1399/1355/919 +f 1401/1359/923 1366/1360/924 1365/1358/922 1400/1357/921 +f 1402/1361/925 1383/1362/926 1366/1360/924 1401/1359/923 +f 1403/1363/927 1367/1364/928 1383/1362/926 1402/1361/925 +f 1404/1365/929 1368/1366/930 1367/1364/928 1403/1363/927 +f 1405/1367/931 1369/1368/932 1368/1366/930 1404/1365/929 +f 1406/1369/933 1370/1370/934 1369/1371/932 1405/1372/931 +f 1407/1373/935 1371/1374/936 1370/1370/934 1406/1369/933 +f 1408/1375/937 1384/1376/938 1371/1374/936 1407/1373/935 +f 1410/1377/939 1372/1378/940 1384/1376/938 1408/1375/937 +f 1411/1379/941 1374/1380/942 1373/1381/943 1409/1382/944 +f 1409/1382/944 1373/1381/943 1372/1378/940 1410/1377/939 +f 1412/1383/945 1385/1384/946 1374/1380/942 1411/1379/941 +f 1413/1385/947 1375/1386/948 1385/1384/946 1412/1383/945 +f 1414/1387/949 1386/1388/950 1375/1386/948 1413/1385/947 +f 1416/1389/951 1376/1390/952 1386/1388/950 1414/1387/949 +f 1417/1391/953 1378/1392/954 1377/1393/955 1415/1394/956 +f 1415/1394/956 1377/1393/955 1376/1390/952 1416/1389/951 +f 1418/1395/957 1379/1396/958 1378/1392/954 1417/1391/953 +f 1388/1397/959 1380/1398/960 1379/1396/958 1418/1395/957 +f 928/1399/961 931/1400/962 932/1401/963 899/1402/964 +f 900/1403/965 899/1402/964 932/1401/963 933/1404/966 +f 901/1405/967 900/1403/965 933/1404/966 934/1406/968 +f 902/1407/969 901/1405/967 934/1406/968 935/1408/970 +f 903/1409/971 902/1407/969 935/1408/970 936/1410/972 +f 904/1411/973 903/1409/971 936/1410/972 937/1412/974 +f 904/1411/973 937/1412/974 938/1413/975 905/1414/976 +f 906/1415/977 905/1414/976 938/1413/975 939/1416/978 +f 907/1417/979 906/1415/977 939/1416/978 940/1418/980 +f 908/1419/981 907/1417/979 940/1418/980 941/1420/982 +f 908/1419/981 941/1420/982 942/1421/983 909/1422/984 +f 909/1422/984 942/1421/983 943/1423/985 929/1424/986 +f 910/1425/987 944/1426/988 945/1427/989 911/1428/990 +f 929/1424/986 943/1423/985 944/1426/988 910/1425/987 +f 911/1428/990 945/1427/989 946/1429/991 912/1430/992 +f 913/1431/993 912/1430/992 946/1429/991 947/1432/994 +f 913/1431/993 947/1432/994 948/1433/995 914/1434/996 +f 915/1435/997 914/1434/996 948/1433/995 949/1436/998 +f 915/1437/997 949/1438/998 950/1439/999 916/1440/1000 +f 917/1441/1001 916/1440/1000 950/1439/999 951/1442/1002 +f 917/1441/1001 951/1442/1002 952/1443/1003 918/1444/1004 +f 918/1444/1004 952/1443/1003 953/1445/1005 920/1446/1006 +f 920/1446/1006 953/1445/1005 954/1447/1007 919/1448/1008 +f 919/1448/1008 954/1447/1007 955/1449/1009 921/1450/1010 +f 921/1450/1010 955/1449/1009 956/1451/1011 922/1452/1012 +f 922/1452/1012 956/1451/1011 957/1453/1013 930/1454/1014 +f 925/1455/1015 923/1456/1016 958/1457/1017 959/1458/1018 +f 923/1456/1016 930/1454/1014 957/1453/1013 958/1457/1017 +f 926/1459/1019 924/1460/1020 960/1461/1021 961/1462/1022 +f 925/1455/1015 959/1458/1018 960/1461/1021 924/1460/1020 +f 927/1463/1023 926/1459/1019 961/1462/1022 962/1464/1024 +f 927/1463/1023 962/1464/1024 931/1400/962 928/1399/961 +f 1304/1465/1025 1303/1466/1026 963/1467/1027 964/1468/1028 +f 1343/1469/1029 1304/1465/1025 964/1468/1028 965/1470/1030 +f 1305/1471/1031 1343/1469/1029 965/1470/1030 966/1472/1032 +f 963/1467/1027 1303/1466/1026 1302/1473/1033 967/1474/1034 +f 1345/1475/1035 1305/1471/1031 966/1472/1032 971/1476/1036 +f 967/1474/1034 1302/1473/1033 1341/1477/1037 973/1478/1038 +f 1306/1479/1039 1345/1475/1035 971/1476/1036 975/1480/1040 +f 973/1478/1038 1341/1477/1037 1254/1481/312 1242/1482/1041 977/1483/1042 +f 968/1484/1043 964/1468/1028 963/1467/1027 969/1485/1044 +f 970/1486/1045 965/1470/1030 964/1468/1028 968/1484/1043 +f 972/1487/1046 966/1472/1032 965/1470/1030 970/1486/1045 +f 1263/1488/1047 1354/1489/326 1306/1479/1039 975/1480/1040 979/1490/1048 +f 977/1483/1042 1242/1482/1041 1243/1491/1049 981/1492/1050 +f 969/1485/1044 963/1467/1027 967/1474/1034 974/1493/1051 +f 976/1494/1052 971/1476/1036 966/1472/1032 972/1487/1046 +f 1264/1495/1053 1263/1488/1047 979/1490/1048 983/1496/1054 +f 981/1492/1050 1243/1491/1049 1244/1497/1055 985/1498/1056 +f 978/1499/1057 974/1493/1051 967/1474/1034 973/1478/1038 +f 980/1500/1058 975/1480/1040 971/1476/1036 976/1494/1052 +f 1265/1501/1059 1264/1495/1053 983/1496/1054 987/1502/1060 +f 985/1498/1056 1244/1497/1055 1275/1503/1061 989/1504/1062 +f 982/1505/1063 978/1499/1057 973/1478/1038 977/1483/1042 +f 1422/1506/914 1426/1507/913 1427/1508/915 1419/1509/916 +f 1421/1510/920 1429/1511/919 1430/1512/921 1423/1513/922 +f 984/1514/1064 979/1490/1048 975/1480/1040 980/1500/1058 +f 1425/1515/912 1432/1516/911 1426/1507/913 1422/1506/914 +f 986/1517/1065 982/1505/1063 977/1483/1042 981/1492/1050 +f 1423/1513/922 1430/1512/921 1434/1518/923 1433/1519/924 +f 988/1520/1066 983/1496/1054 979/1490/1048 984/1514/1064 +f 1424/1521/910 1437/1522/909 1432/1516/911 1425/1515/912 +f 1266/1523/1067 1245/1524/1068 991/1525/1069 995/1526/1070 +f 1277/1527/1071 1246/1528/1072 997/1529/1073 993/1530/1074 +f 990/1531/1075 986/1517/1065 981/1492/1050 985/1498/1056 +f 1431/1532/908 1436/1533/907 1437/1522/909 1424/1521/910 +f 992/1534/1076 987/1502/1060 983/1496/1054 988/1520/1066 +f 1440/1535/904 1445/1536/903 1441/1537/905 1435/1538/906 +f 994/1539/1077 990/1531/1075 985/1498/1056 989/1504/1062 +f 1433/1519/924 1434/1518/923 1439/1540/925 1438/1541/926 +f 996/1542/1078 991/1543/1069 987/1502/1060 992/1534/1076 +f 1444/1544/900 1449/1545/899 1445/1536/903 1440/1535/904 +f 1247/1546/1079 1267/1547/1080 999/1548/1081 1003/1549/1082 +f 1280/1550/1083 1248/1551/1084 1005/1552/1085 1001/1553/1086 +f 998/1554/1087 994/1539/1077 989/1504/1062 993/1530/1074 +f 1438/1541/926 1439/1540/925 1443/1555/927 1442/1556/928 +f 1000/1557/1088 995/1526/1070 991/1525/1069 996/1558/1078 +f 1389/1338/902 1356/1337/901 1355/1559/1089 1387/1560/1090 +f 1448/1561/901 1454/1562/902 1449/1545/899 1444/1544/900 +f 1249/1563/1091 1247/1546/1079 1003/1549/1082 1007/1564/1092 +f 1005/1552/1085 1248/1551/1084 1353/1565/354 1314/1566/1093 1009/1567/1094 +f 1002/1568/1095 998/1554/1087 993/1530/1074 997/1529/1073 +f 1442/1556/928 1443/1555/927 1447/1569/929 1446/1570/930 +f 1004/1571/1096 999/1548/1081 995/1526/1070 1000/1557/1088 +f 1453/1572/1089 1458/1573/1090 1454/1562/902 1448/1561/901 +f 1006/1574/1097 1002/1568/1095 997/1529/1073 1001/1553/1086 +f 1446/1570/930 1447/1569/929 1452/1575/931 1451/1576/932 +f 1008/1577/1098 1003/1549/1082 999/1548/1081 1004/1571/1096 +f 1457/1578/960 1462/1579/959 1458/1573/1090 1453/1572/1089 +f 1010/1580/1099 1006/1574/1097 1001/1553/1086 1005/1552/1085 +f 1450/1581/934 1456/1582/933 1460/1583/935 1455/1584/936 +f 1008/1577/1098 1012/1585/1100 1007/1564/1092 1003/1549/1082 +f 1451/1576/932 1452/1575/931 1456/1586/933 1450/1587/934 +f 1323/1588/1101 1344/1589/1102 1015/1590/1103 1019/1591/1104 +f 1318/1592/1105 1320/1593/1106 1021/1594/1107 1017/1595/1108 +f 1014/1596/1109 1010/1580/1099 1005/1552/1085 1009/1567/1094 +f 1455/1584/936 1460/1583/935 1464/1597/937 1459/1598/938 +f 1419/1509/916 1427/1508/915 1428/1599/917 1420/1600/918 +f 1016/1601/1110 1011/1602/1111 1007/1564/1092 1012/1585/1100 +f 1461/1603/958 1466/1604/957 1462/1579/959 1457/1578/960 +f 1342/1605/1112 1323/1588/1101 1019/1591/1104 1023/1606/1113 +f 1021/1594/1107 1320/1593/1106 1342/1605/1112 1023/1606/1113 +f 1018/1607/1114 1014/1596/1109 1009/1567/1094 1013/1608/1115 +f 1459/1598/938 1464/1597/937 1468/1609/939 1463/1610/940 +f 1016/1601/1110 1020/1611/1116 1015/1590/1103 1011/1602/1111 +f 1465/1612/954 1470/1613/953 1466/1604/957 1461/1603/958 +f 1022/1614/1117 1018/1607/1114 1013/1608/1115 1017/1595/1108 +f 1463/1610/940 1468/1609/939 1473/1615/944 1467/1616/943 +f 1020/1611/1116 1024/1617/1118 1019/1591/1104 1015/1590/1103 +f 1469/1618/955 1475/1619/956 1470/1613/953 1465/1612/954 +f 1435/1538/906 1441/1537/905 1436/1533/907 1431/1532/908 +f 1025/1620/1119 1022/1614/1117 1017/1595/1108 1021/1594/1107 +f 1467/1616/943 1473/1615/944 1479/1621/941 1472/1622/942 +f 1024/1617/1118 1026/1623/1120 1023/1606/1113 1019/1591/1104 +f 1474/1624/952 1471/1625/951 1475/1619/956 1469/1618/955 +f 1026/1623/1120 1025/1620/1119 1021/1594/1107 1023/1606/1113 +f 1420/1600/918 1428/1599/917 1429/1511/919 1421/1510/920 +f 1480/1626/950 1477/1627/949 1471/1625/951 1474/1624/952 +f 1472/1622/942 1479/1621/941 1478/1628/945 1481/1629/946 +f 1482/1630/948 1476/1631/947 1477/1627/949 1480/1626/950 +f 1481/1629/946 1478/1628/945 1476/1631/947 1482/1630/948 +f 1027/1632/1121 1028/1633/1122 1029/1634/1123 1030/1635/1124 +f 1034/1636/1125 1035/1637/1126 1028/1633/1122 1027/1632/1121 +f 1030/1635/1124 1029/1634/1123 1036/1638/1127 1031/1639/1128 +f 1031/1639/1128 1036/1638/1127 1037/1640/1129 1032/1641/1130 +f 1032/1642/1130 1037/1643/1129 1038/1644/1131 1033/1645/1132 +f 1033/1645/1132 1038/1644/1131 1035/1637/1126 1034/1636/1125 +f 1039/1646/1133 1040/1647/1129 1041/1648/1127 1042/1649/1134 +f 1046/1650/1135 1047/1651/1131 1040/1647/1129 1039/1646/1133 +f 1042/1649/1134 1041/1648/1127 1048/1652/1123 1043/1653/1136 +f 1043/1653/1136 1048/1652/1123 1049/1654/1122 1044/1655/1137 +f 1044/1656/1137 1049/1657/1122 1050/1658/1126 1045/1659/1138 +f 1045/1659/1138 1050/1658/1126 1047/1651/1131 1046/1650/1135 +f 1051/1660/1139 1052/1661/1140 1053/1662/1141 1054/1663/1142 +f 1058/1664/1143 1059/1665/1144 1052/1661/1140 1051/1660/1139 +f 1054/1663/1142 1053/1662/1141 1060/1666/1145 1055/1667/1146 +f 1055/1667/1146 1060/1666/1145 1061/1668/1147 1056/1669/1148 +f 1056/1670/1148 1061/1671/1147 1062/1672/1149 1057/1673/1150 +f 1057/1673/1150 1062/1672/1149 1059/1665/1144 1058/1664/1143 +f 1063/1674/1151 1064/1675/1147 1065/1676/1145 1066/1677/1152 +f 1070/1678/1153 1071/1679/1149 1064/1675/1147 1063/1674/1151 +f 1066/1677/1152 1065/1676/1145 1072/1680/1141 1067/1681/1154 +f 1067/1681/1154 1072/1680/1141 1073/1682/1140 1068/1683/1155 +f 1068/1684/1155 1073/1685/1140 1074/1686/1144 1069/1687/1156 +f 1069/1687/1156 1074/1686/1144 1071/1679/1149 1070/1678/1153 +f 1075/1688/1157 1076/1689/1158 1077/1690/1159 1078/1691/1160 +f 1082/1692/1161 1083/1693/1162 1076/1689/1158 1075/1688/1157 +f 1078/1691/1160 1077/1690/1159 1084/1694/1163 1079/1695/1164 +f 1079/1695/1164 1084/1694/1163 1085/1696/1165 1080/1697/1166 +f 1080/1698/1166 1085/1699/1165 1086/1700/1167 1081/1701/1168 +f 1081/1701/1168 1086/1700/1167 1083/1693/1162 1082/1692/1161 +f 1087/1702/1169 1088/1703/1165 1089/1704/1163 1090/1705/1170 +f 1094/1706/1171 1095/1707/1167 1088/1703/1165 1087/1702/1169 +f 1090/1705/1170 1089/1704/1163 1096/1708/1159 1091/1709/1172 +f 1091/1709/1172 1096/1708/1159 1097/1710/1158 1092/1711/1173 +f 1092/1712/1173 1097/1713/1158 1098/1714/1162 1093/1715/1174 +f 1093/1715/1174 1098/1714/1162 1095/1707/1167 1094/1706/1171 +f 1099/1716/1175 1100/1717/1176 1101/1718/1177 1102/1719/1178 +f 1106/1720/1179 1107/1721/1180 1100/1717/1176 1099/1716/1175 +f 1102/1719/1178 1101/1718/1177 1108/1722/1181 1103/1723/1182 +f 1103/1723/1182 1108/1722/1181 1109/1724/1183 1104/1725/1184 +f 1104/1726/1184 1109/1727/1183 1110/1728/1185 1105/1729/1186 +f 1105/1729/1186 1110/1728/1185 1107/1721/1180 1106/1720/1179 +f 1111/1730/1187 1112/1731/1183 1113/1732/1181 1114/1733/1188 +f 1118/1734/1189 1119/1735/1185 1112/1731/1183 1111/1730/1187 +f 1114/1733/1188 1113/1732/1181 1120/1736/1177 1115/1737/1190 +f 1115/1737/1190 1120/1736/1177 1121/1738/1176 1116/1739/1191 +f 1116/1740/1191 1121/1741/1176 1122/1742/1180 1117/1743/1192 +f 1117/1743/1192 1122/1742/1180 1119/1735/1185 1118/1734/1189 +f 1123/1744/1130 1124/1745/1129 1125/1746/1131 1126/1747/1132 +f 1130/1748/1128 1131/1749/1127 1124/1745/1129 1123/1744/1130 +f 1126/1747/1132 1125/1746/1131 1132/1750/1126 1127/1751/1125 +f 1127/1751/1125 1132/1750/1126 1133/1752/1122 1128/1753/1121 +f 1128/1754/1121 1133/1755/1122 1134/1756/1123 1129/1757/1124 +f 1129/1757/1124 1134/1756/1123 1131/1749/1127 1130/1748/1128 +f 1135/1758/1137 1136/1759/1122 1137/1760/1126 1138/1761/1138 +f 1142/1762/1136 1143/1763/1123 1136/1759/1122 1135/1758/1137 +f 1138/1761/1138 1137/1760/1126 1144/1764/1131 1139/1765/1135 +f 1139/1765/1135 1144/1764/1131 1145/1766/1129 1140/1767/1133 +f 1140/1768/1133 1145/1769/1129 1146/1770/1127 1141/1771/1134 +f 1141/1771/1134 1146/1770/1127 1143/1763/1123 1142/1762/1136 +f 1147/1772/1148 1148/1773/1147 1149/1774/1149 1150/1775/1150 +f 1154/1776/1146 1155/1777/1145 1148/1773/1147 1147/1772/1148 +f 1150/1775/1150 1149/1774/1149 1156/1778/1144 1151/1779/1143 +f 1151/1779/1143 1156/1778/1144 1157/1780/1140 1152/1781/1139 +f 1152/1782/1139 1157/1783/1140 1158/1784/1141 1153/1785/1142 +f 1153/1785/1142 1158/1784/1141 1155/1777/1145 1154/1776/1146 +f 1159/1786/1155 1160/1787/1140 1161/1788/1144 1162/1789/1156 +f 1166/1790/1154 1167/1791/1141 1160/1787/1140 1159/1786/1155 +f 1162/1789/1156 1161/1788/1144 1168/1792/1149 1163/1793/1153 +f 1163/1793/1153 1168/1792/1149 1169/1794/1147 1164/1795/1151 +f 1164/1796/1151 1169/1797/1147 1170/1798/1145 1165/1799/1152 +f 1165/1799/1152 1170/1798/1145 1167/1791/1141 1166/1790/1154 +f 1171/1800/1166 1172/1801/1165 1173/1802/1167 1174/1803/1168 +f 1178/1804/1164 1179/1805/1163 1172/1801/1165 1171/1800/1166 +f 1174/1803/1168 1173/1802/1167 1180/1806/1162 1175/1807/1161 +f 1175/1807/1161 1180/1806/1162 1181/1808/1158 1176/1809/1157 +f 1176/1810/1157 1181/1811/1158 1182/1812/1159 1177/1813/1160 +f 1177/1813/1160 1182/1812/1159 1179/1805/1163 1178/1804/1164 +f 1183/1814/1173 1184/1815/1158 1185/1816/1162 1186/1817/1174 +f 1190/1818/1172 1191/1819/1159 1184/1815/1158 1183/1814/1173 +f 1186/1817/1174 1185/1816/1162 1192/1820/1167 1187/1821/1171 +f 1187/1821/1171 1192/1820/1167 1193/1822/1165 1188/1823/1169 +f 1188/1824/1169 1193/1825/1165 1194/1826/1163 1189/1827/1170 +f 1189/1827/1170 1194/1826/1163 1191/1819/1159 1190/1818/1172 +f 1195/1828/1184 1196/1829/1183 1197/1830/1185 1198/1831/1186 +f 1202/1832/1182 1203/1833/1181 1196/1829/1183 1195/1828/1184 +f 1198/1831/1186 1197/1830/1185 1204/1834/1180 1199/1835/1179 +f 1199/1835/1179 1204/1834/1180 1205/1836/1176 1200/1837/1175 +f 1200/1838/1175 1205/1839/1176 1206/1840/1177 1201/1841/1178 +f 1201/1841/1178 1206/1840/1177 1203/1833/1181 1202/1832/1182 +f 1207/1842/1191 1208/1843/1176 1209/1844/1180 1210/1845/1192 +f 1214/1846/1190 1215/1847/1177 1208/1843/1176 1207/1842/1191 +f 1210/1845/1192 1209/1844/1180 1216/1848/1185 1211/1849/1189 +f 1211/1849/1189 1216/1848/1185 1217/1850/1183 1212/1851/1187 +f 1212/1852/1187 1217/1853/1183 1218/1854/1181 1213/1855/1188 +f 1213/1855/1188 1218/1854/1181 1215/1847/1177 1214/1846/1190 +f 1222/1856/1026 1291/1857/1026 1292/1858/1033 1221/1859/1033 +f 1227/1860/1031 1333/1861/1031 1289/1862/1029 1226/1863/1029 +f 1228/1864/1035 1334/1865/1035 1333/1861/1031 1227/1860/1031 +f 1221/1859/1033 1292/1858/1033 1293/1866/1037 1220/1867/1037 +f 1255/1868/312 1220/1867/1037 1293/1866/1037 +f 1715/1869/2 1692/1870/1106 1287/1871/1106 1714/1872/2 +f 1258/1873/326 1335/1874/1039 1229/1875/1039 +f 1223/1876/1025 1290/1877/1025 1291/1857/1026 1222/1856/1026 +f 1226/1863/1029 1289/1862/1029 1290/1877/1025 1223/1876/1025 1710/1878/386 +f 1712/1879/386 1675/1880/1025 1224/1881/1025 1711/1882/386 +f 1709/1883/3 1693/1884/1071 1300/1885/1071 1707/1886/3 +f 1718/1887/1 1717/1888/1 1339/1889/1068 1694/1890/1068 +f 1229/1875/1039 1335/1874/1039 1334/1865/1035 1228/1864/1035 +f 1691/1891/1026 1675/1880/1025 1223/1876/1025 1222/1856/1026 +f 1690/1892/1033 1691/1891/1026 1222/1856/1026 1221/1859/1033 +f 1689/1893/1037 1690/1892/1033 1221/1859/1033 1220/1867/1037 +f 1704/1894/1047 1336/1895/1047 1258/1873/326 1229/1875/1039 1701/1896/1039 +f 1687/1897/1049 1340/1898/1049 1301/1899/1041 1688/1900/1041 +f 1685/1901/1055 1330/1902/1055 1340/1898/1049 1687/1897/1049 +f 1685/1901/1055 1696/1903/1061 1331/1904/1061 1330/1902/1055 +f 1306/1479/1039 1354/1489/326 1262/1905/1039 +f 1345/1475/1035 1306/1479/1039 1262/1905/1039 1261/1906/1035 +f 1305/1471/1031 1345/1475/1035 1261/1906/1035 1260/1907/1031 +f 1343/1469/1029 1305/1471/1031 1260/1907/1031 1259/1908/1029 +f 1304/1465/1025 1343/1469/1029 1259/1908/1029 1711/1882/386 1224/1881/1025 +f 1225/1909/1026 1303/1466/1026 1304/1465/1025 1224/1881/1025 +f 1240/1910/1033 1302/1473/1033 1303/1466/1026 1225/1909/1026 +f 1241/1911/1037 1341/1477/1037 1302/1473/1033 1240/1910/1033 +f 1254/1481/312 1341/1477/1037 1241/1911/1037 +f 1301/1899/1041 1242/1482/1041 1254/1481/312 +f 1243/1491/1049 1242/1482/1041 1301/1899/1041 1340/1898/1049 +f 1244/1497/1055 1243/1491/1049 1340/1898/1049 1330/1902/1055 +f 1331/1904/1061 1275/1503/1061 1244/1497/1055 1330/1902/1055 +f 1277/1527/1071 1275/1503/1061 1331/1904/1061 1707/1886/3 1300/1885/1071 +f 1246/1528/1072 1277/1527/1071 1300/1885/1071 1299/1912/1072 +f 1280/1550/1083 1246/1528/1072 1299/1912/1072 1310/1913/1083 +f 1248/1551/1084 1280/1550/1083 1310/1913/1083 1312/1914/1084 +f 1248/1551/1084 1312/1914/1084 1353/1565/354 +f 1255/1868/312 1219/1915/1041 1294/1916/1041 +f 1332/1917/1049 1294/1916/1041 1219/1915/1041 1272/1918/1049 +f 1272/1918/1049 1273/1919/1055 1295/1920/1055 1332/1917/1049 +f 1296/1921/1061 1295/1920/1055 1273/1919/1055 1274/1922/1061 +f 1297/1923/1071 1708/1924/3 1296/1921/1061 1274/1922/1061 1276/1925/1071 +f 1298/1926/1072 1297/1923/1071 1276/1925/1071 1278/1927/1072 +f 1279/1928/1083 1309/1929/1083 1298/1926/1072 1278/1927/1072 +f 1311/1930/1084 1309/1929/1083 1279/1928/1083 1281/1931/1084 +f 1281/1931/1084 1256/1932/354 1311/1930/1084 +f 1688/1900/1041 1301/1899/1041 1254/1481/312 1241/1911/1037 1689/1893/1037 +f 1683/1933/1083 1684/1934/1084 1312/1914/1084 1310/1913/1083 +f 1682/1935/1072 1298/1926/1072 1309/1929/1083 1683/1933/1083 +f 1682/1935/1072 1693/1884/1071 1297/1923/1071 1298/1926/1072 +f 1680/1936/1193 1251/1937/1193 1283/1938/1093 1681/1939/1093 +f 1679/1940/1105 1680/1936/1193 1284/1941/1193 1285/1942/1105 +f 1679/1940/1105 1285/1942/1105 1287/1871/1106 1692/1870/1106 +f 1678/1943/1101 1252/1944/1101 1269/1945/1112 1686/1946/1112 +f 1677/1947/1102 1268/1948/1102 1252/1944/1101 1678/1943/1101 +f 1676/1949/1194 1250/1950/1194 1268/1948/1102 1677/1947/1102 +f 1681/1939/1093 1684/1934/1084 1311/1930/1084 1256/1932/354 1282/1951/1093 +f 1698/1952/1091 1326/1953/1091 1327/1954/1079 1699/1955/1079 +f 1699/1955/1079 1327/1954/1079 1328/1956/1080 1700/1957/1080 +f 1695/1958/1067 1351/1959/1067 1350/1960/1080 1700/1957/1080 +f 1257/1961/368 1238/1962/1194 1325/1963/1194 +f 1325/1963/1194 1238/1962/1194 1271/1964/1102 1324/1965/1102 +f 1324/1965/1102 1271/1964/1102 1239/1966/1101 1322/1967/1101 +f 1322/1967/1101 1239/1966/1101 1270/1968/1112 1321/1969/1112 +f 1319/1970/1106 1321/1969/1112 1270/1968/1112 1714/1872/2 1287/1871/1106 +f 1285/1942/1105 1317/1971/1105 1319/1970/1106 1287/1871/1106 +f 1315/1972/1193 1317/1971/1105 1285/1942/1105 1284/1941/1193 +f 1282/1951/1093 1313/1973/1093 1315/1972/1193 1284/1941/1193 +f 1282/1951/1093 1256/1932/354 1313/1973/1093 +f 1283/1938/1093 1314/1566/1093 1353/1565/354 +f 1314/1566/1093 1283/1938/1093 1251/1937/1193 1316/1974/1193 +f 1316/1974/1193 1251/1937/1193 1286/1975/1105 1318/1592/1105 +f 1288/1976/1106 1320/1593/1106 1318/1592/1105 1286/1975/1105 +f 1269/1945/1112 1342/1605/1112 1320/1593/1106 1288/1976/1106 1713/1977/2 +f 1323/1588/1101 1342/1605/1112 1269/1945/1112 1252/1944/1101 +f 1344/1589/1102 1323/1588/1101 1252/1944/1101 1268/1948/1102 +f 1344/1589/1102 1268/1948/1102 1250/1950/1194 1346/1978/1194 +f 1253/1979/368 1346/1978/1194 1250/1950/1194 +f 1702/1980/1035 1261/1906/1035 1262/1905/1039 1701/1896/1039 +f 1703/1981/1031 1260/1907/1031 1261/1906/1035 1702/1980/1035 +f 1697/1982/1029 1259/1908/1029 1260/1907/1031 1703/1981/1031 +f 1263/1488/1047 1307/1983/1047 1354/1489/326 +f 1263/1488/1047 1264/1495/1053 1349/1984/1053 1307/1983/1047 +f 1264/1495/1053 1265/1501/1059 1308/1985/1059 1349/1984/1053 +f 1352/1986/1068 1308/1985/1059 1265/1501/1059 1245/1987/1068 +f 1351/1959/1067 1716/1988/1 1352/1989/1068 1245/1524/1068 1266/1523/1067 +f 1351/1959/1067 1266/1523/1067 1267/1547/1080 1350/1960/1080 +f 1348/1990/1079 1350/1960/1080 1267/1547/1080 1247/1546/1079 +f 1247/1546/1079 1249/1563/1091 1347/1991/1091 1348/1990/1079 +f 1253/1979/368 1347/1991/1091 1249/1563/1091 +f 1705/1992/1053 1337/1993/1053 1336/1895/1047 1704/1894/1047 +f 1706/1994/1059 1338/1995/1059 1337/1993/1053 1705/1992/1053 +f 1694/1996/1068 1706/1994/1059 1308/1985/1059 1352/1986/1068 +f 1230/1997/1047 1258/1873/326 1336/1895/1047 +f 1231/1998/1053 1230/1997/1047 1336/1895/1047 1337/1993/1053 +f 1232/1999/1059 1231/1998/1053 1337/1993/1053 1338/1995/1059 +f 1233/2000/1068 1232/1999/1059 1338/1995/1059 1339/2001/1068 +f 1234/2002/1067 1233/2003/1068 1339/1889/1068 1717/1888/1 1329/2004/1067 +f 1234/2002/1067 1329/2004/1067 1328/1956/1080 1235/2005/1080 +f 1236/2006/1079 1235/2005/1080 1328/1956/1080 1327/1954/1079 +f 1237/2007/1091 1236/2006/1079 1327/1954/1079 1326/1953/1091 +f 1237/2007/1091 1326/1953/1091 1257/1961/368 +f 1676/1949/1194 1698/1952/1091 1347/1991/1091 1253/1979/368 1250/1950/1194 +f 1387/1560/1090 1355/1559/1089 1380/1398/960 1388/1397/959 +f 1279/1928/1083 1278/1927/1072 932/1401/963 931/1400/962 +f 1278/1927/1072 1276/1925/1071 933/1404/966 932/1401/963 +f 1276/1925/1071 1274/1922/1061 934/1406/968 933/1404/966 +f 1274/1922/1061 1273/1919/1055 935/1408/970 934/1406/968 +f 1273/1919/1055 1272/1918/1049 936/1410/972 935/1408/970 +f 1272/1918/1049 1219/1915/1041 937/1412/974 936/1410/972 +f 1219/1915/1041 1255/1868/312 1293/1866/1037 938/1413/975 937/1412/974 +f 1293/1866/1037 1292/1858/1033 939/1416/978 938/1413/975 +f 1292/1858/1033 1291/1857/1026 940/1418/980 939/1416/978 +f 1291/1857/1026 1290/1877/1025 941/1420/982 940/1418/980 +f 1290/1877/1025 1289/1862/1029 942/1421/983 941/1420/982 +f 1289/1862/1029 1333/1861/1031 943/1423/985 942/1421/983 +f 1334/1865/1035 1335/1874/1039 945/1427/989 944/1426/988 +f 1333/1861/1031 1334/1865/1035 944/1426/988 943/1423/985 +f 1335/1874/1039 1258/1873/326 1230/1997/1047 946/1429/991 945/1427/989 +f 1230/1997/1047 1231/1998/1053 947/1432/994 946/1429/991 +f 1231/1998/1053 1232/1999/1059 948/1433/995 947/1432/994 +f 1232/1999/1059 1233/2000/1068 949/1436/998 948/1433/995 +f 1233/2003/1068 1234/2002/1067 950/1439/999 949/1438/998 +f 1234/2002/1067 1235/2005/1080 951/1442/1002 950/1439/999 +f 1235/2005/1080 1236/2006/1079 952/1443/1003 951/1442/1002 +f 1236/2006/1079 1237/2007/1091 953/1445/1005 952/1443/1003 +f 1237/2007/1091 1257/1961/368 1325/1963/1194 954/1447/1007 953/1445/1005 +f 1325/1963/1194 1324/1965/1102 955/1449/1009 954/1447/1007 +f 1324/1965/1102 1322/1967/1101 956/1451/1011 955/1449/1009 +f 1322/1967/1101 1321/1969/1112 957/1453/1013 956/1451/1011 +f 1319/1970/1106 1317/1971/1105 959/1458/1018 958/1457/1017 +f 1321/1969/1112 1319/1970/1106 958/1457/1017 957/1453/1013 +f 1315/1972/1193 1313/1973/1093 961/1462/1022 960/1461/1021 +f 1317/1971/1105 1315/1972/1193 960/1461/1021 959/1458/1018 +f 1313/1973/1093 1256/1932/354 1281/1931/1084 962/1464/1024 961/1462/1022 +f 962/1464/1024 1281/1931/1084 1279/1928/1083 931/1400/962 +f 1245/1987/1068 1265/1501/1059 987/1502/1060 991/1543/1069 +f 1275/1503/1061 1277/1527/1071 993/1530/1074 989/1504/1062 +f 1267/1547/1080 1266/1523/1067 995/1526/1070 999/1548/1081 +f 1246/1528/1072 1280/1550/1083 1001/1553/1086 997/1529/1073 +f 1346/1978/1194 1253/1979/368 1249/1563/1091 1007/1564/1092 1011/1602/1111 +f 1314/1566/1093 1316/1974/1193 1013/1608/1115 1009/1567/1094 +f 1344/1589/1102 1346/1978/1194 1011/1602/1111 1015/1590/1103 +f 1316/1974/1193 1318/1592/1105 1017/1595/1108 1013/1608/1115 +f 1483/2008/1195 1484/2009/368 1485/2010/1196 1486/2011/1197 +f 1490/2012/1198 1491/2013/1199 1484/2009/368 1483/2008/1195 +f 1486/2011/1197 1485/2010/1196 1492/2014/1200 1487/2015/1201 +f 1487/2015/1201 1492/2014/1200 1493/2016/312 1488/2017/1202 +f 1488/2018/1202 1493/2019/312 1494/2020/1203 1489/2021/1204 +f 1489/2021/1204 1494/2020/1203 1491/2013/1199 1490/2012/1198 +f 1495/2022/1205 1496/2023/312 1497/2024/1200 1498/2025/1206 +f 1502/2026/1207 1503/2027/1203 1496/2023/312 1495/2022/1205 +f 1498/2025/1206 1497/2024/1200 1504/2028/1196 1499/2029/1208 +f 1499/2029/1208 1504/2028/1196 1505/2030/368 1500/2031/1209 +f 1500/2032/1209 1505/2033/368 1506/2034/1199 1501/2035/1210 +f 1501/2035/1210 1506/2034/1199 1503/2027/1203 1502/2026/1207 +f 1507/2036/1211 1508/2037/1 1509/2038/1212 1510/2039/1213 +f 1514/2040/1214 1515/2041/1215 1508/2037/1 1507/2036/1211 +f 1510/2039/1213 1509/2038/1212 1516/2042/1216 1511/2043/1217 +f 1511/2043/1217 1516/2042/1216 1517/2044/3 1512/2045/1218 +f 1512/2046/1218 1517/2047/3 1518/2048/1219 1513/2049/1220 +f 1513/2049/1220 1518/2048/1219 1515/2041/1215 1514/2040/1214 +f 1519/2050/1221 1520/2051/3 1521/2052/1216 1522/2053/1222 +f 1526/2054/1223 1527/2055/1219 1520/2051/3 1519/2050/1221 +f 1522/2053/1222 1521/2052/1216 1528/2056/1212 1523/2057/1224 +f 1523/2057/1224 1528/2056/1212 1529/2058/1 1524/2059/1225 +f 1524/2060/1225 1529/2061/1 1530/2062/1215 1525/2063/1226 +f 1525/2063/1226 1530/2062/1215 1527/2055/1219 1526/2054/1223 +f 1531/2064/1227 1532/2065/326 1533/2066/1228 1534/2067/1229 +f 1538/2068/1230 1539/2069/1231 1532/2065/326 1531/2064/1227 +f 1534/2067/1229 1533/2066/1228 1540/2070/1232 1535/2071/1233 +f 1535/2071/1233 1540/2070/1232 1541/2072/354 1536/2073/1234 +f 1536/2074/1234 1541/2075/354 1542/2076/1235 1537/2077/1236 +f 1537/2077/1236 1542/2076/1235 1539/2069/1231 1538/2068/1230 +f 1543/2078/1237 1544/2079/354 1545/2080/1232 1546/2081/1238 +f 1550/2082/1239 1551/2083/1235 1544/2079/354 1543/2078/1237 +f 1546/2081/1238 1545/2080/1232 1552/2084/1228 1547/2085/1240 +f 1547/2085/1240 1552/2084/1228 1553/2086/326 1548/2087/1241 +f 1548/2088/1241 1553/2089/326 1554/2090/1231 1549/2091/1242 +f 1549/2091/1242 1554/2090/1231 1551/2083/1235 1550/2082/1239 +f 1555/2092/1243 1556/2093/386 1557/2094/1244 1558/2095/1245 +f 1562/2096/1246 1563/2097/1247 1556/2093/386 1555/2092/1243 +f 1558/2095/1245 1557/2094/1244 1564/2098/1248 1559/2099/1249 +f 1559/2099/1249 1564/2098/1248 1565/2100/2 1560/2101/1250 +f 1560/2102/1250 1565/2103/2 1566/2104/1251 1561/2105/1252 +f 1561/2105/1252 1566/2104/1251 1563/2097/1247 1562/2096/1246 +f 1567/2106/1253 1568/2107/2 1569/2108/1248 1570/2109/1254 +f 1574/2110/1255 1575/2111/1251 1568/2107/2 1567/2106/1253 +f 1570/2109/1254 1569/2108/1248 1576/2112/1244 1571/2113/1256 +f 1571/2113/1256 1576/2112/1244 1577/2114/386 1572/2115/1257 +f 1572/2116/1257 1577/2117/386 1578/2118/1247 1573/2119/1258 +f 1573/2119/1258 1578/2118/1247 1575/2111/1251 1574/2110/1255 +f 1579/2120/1202 1580/2121/312 1581/2122/1203 1582/2123/1204 +f 1586/2124/1201 1587/2125/1200 1580/2121/312 1579/2120/1202 +f 1582/2123/1204 1581/2122/1203 1588/2126/1199 1583/2127/1198 +f 1583/2127/1198 1588/2126/1199 1589/2128/368 1584/2129/1195 +f 1584/2130/1195 1589/2131/368 1590/2132/1196 1585/2133/1197 +f 1585/2133/1197 1590/2132/1196 1587/2125/1200 1586/2124/1201 +f 1591/2134/1209 1592/2135/368 1593/2136/1199 1594/2137/1210 +f 1598/2138/1208 1599/2139/1196 1592/2135/368 1591/2134/1209 +f 1594/2137/1210 1593/2136/1199 1600/2140/1203 1595/2141/1207 +f 1595/2141/1207 1600/2140/1203 1601/2142/312 1596/2143/1205 +f 1596/2144/1205 1601/2145/312 1602/2146/1200 1597/2147/1206 +f 1597/2147/1206 1602/2146/1200 1599/2139/1196 1598/2138/1208 +f 1603/2148/1218 1604/2149/3 1605/2150/1219 1606/2151/1220 +f 1610/2152/1217 1611/2153/1216 1604/2149/3 1603/2148/1218 +f 1606/2151/1220 1605/2150/1219 1612/2154/1215 1607/2155/1214 +f 1607/2155/1214 1612/2154/1215 1613/2156/1 1608/2157/1211 +f 1608/2158/1211 1613/2159/1 1614/2160/1212 1609/2161/1213 +f 1609/2161/1213 1614/2160/1212 1611/2153/1216 1610/2152/1217 +f 1615/2162/1225 1616/2163/1 1617/2164/1215 1618/2165/1226 +f 1622/2166/1224 1623/2167/1212 1616/2163/1 1615/2162/1225 +f 1618/2165/1226 1617/2164/1215 1624/2168/1219 1619/2169/1223 +f 1619/2169/1223 1624/2168/1219 1625/2170/3 1620/2171/1221 +f 1620/2172/1221 1625/2173/3 1626/2174/1216 1621/2175/1222 +f 1621/2175/1222 1626/2174/1216 1623/2167/1212 1622/2166/1224 +f 1627/2176/1234 1628/2177/354 1629/2178/1235 1630/2179/1236 +f 1634/2180/1233 1635/2181/1232 1628/2177/354 1627/2176/1234 +f 1630/2179/1236 1629/2178/1235 1636/2182/1231 1631/2183/1230 +f 1631/2183/1230 1636/2182/1231 1637/2184/326 1632/2185/1227 +f 1632/2186/1227 1637/2187/326 1638/2188/1228 1633/2189/1229 +f 1633/2189/1229 1638/2188/1228 1635/2181/1232 1634/2180/1233 +f 1639/2190/1241 1640/2191/326 1641/2192/1231 1642/2193/1242 +f 1646/2194/1240 1647/2195/1228 1640/2191/326 1639/2190/1241 +f 1642/2193/1242 1641/2192/1231 1648/2196/1235 1643/2197/1239 +f 1643/2197/1239 1648/2196/1235 1649/2198/354 1644/2199/1237 +f 1644/2200/1237 1649/2201/354 1650/2202/1232 1645/2203/1238 +f 1645/2203/1238 1650/2202/1232 1647/2195/1228 1646/2194/1240 +f 1651/2204/1250 1652/2205/2 1653/2206/1251 1654/2207/1252 +f 1658/2208/1249 1659/2209/1248 1652/2205/2 1651/2204/1250 +f 1654/2207/1252 1653/2206/1251 1660/2210/1247 1655/2211/1246 +f 1655/2211/1246 1660/2210/1247 1661/2212/386 1656/2213/1243 +f 1656/2214/1243 1661/2215/386 1662/2216/1244 1657/2217/1245 +f 1657/2217/1245 1662/2216/1244 1659/2209/1248 1658/2208/1249 +f 1663/2218/1257 1664/2219/386 1665/2220/1247 1666/2221/1258 +f 1670/2222/1256 1671/2223/1244 1664/2219/386 1663/2218/1257 +f 1666/2221/1258 1665/2220/1247 1672/2224/1251 1667/2225/1255 +f 1667/2225/1255 1672/2224/1251 1673/2226/2 1668/2227/1253 +f 1668/2228/1253 1673/2229/2 1674/2230/1248 1669/2231/1254 +f 1669/2231/1254 1674/2230/1248 1671/2223/1244 1670/2222/1256 +f 1257/1961/368 1326/1953/1091 1698/1952/1091 1676/1949/1194 1238/1962/1194 +f 1339/2001/1068 1338/1995/1059 1706/1994/1059 1694/1996/1068 +f 1308/1985/1059 1706/1994/1059 1705/1992/1053 1349/1984/1053 +f 1349/1984/1053 1705/1992/1053 1704/1894/1047 1307/1983/1047 +f 1226/1863/1029 1697/1982/1029 1703/1981/1031 1227/1860/1031 +f 1227/1860/1031 1703/1981/1031 1702/1980/1035 1228/1864/1035 +f 1228/1864/1035 1702/1980/1035 1701/1896/1039 1229/1875/1039 +f 1329/2004/1067 1695/1958/1067 1700/1957/1080 1328/1956/1080 +f 1348/1990/1079 1699/1955/1079 1700/1957/1080 1350/1960/1080 +f 1347/1991/1091 1698/1952/1091 1699/1955/1079 1348/1990/1079 +f 1283/1938/1093 1353/1565/354 1312/1914/1084 1684/1934/1084 1681/1939/1093 +f 1238/1962/1194 1676/1949/1194 1677/1947/1102 1271/1964/1102 +f 1271/1964/1102 1677/1947/1102 1678/1943/1101 1239/1966/1101 +f 1239/1966/1101 1678/1943/1101 1686/1946/1112 1270/1968/1112 +f 1286/1975/1105 1679/1940/1105 1692/1870/1106 1288/1976/1106 +f 1286/1975/1105 1251/1937/1193 1680/1936/1193 1679/1940/1105 +f 1284/1941/1193 1680/1936/1193 1681/1939/1093 1282/1951/1093 +f 1299/1912/1072 1300/1885/1071 1693/1884/1071 1682/1935/1072 +f 1299/1912/1072 1682/1935/1072 1683/1933/1083 1310/1913/1083 +f 1309/1929/1083 1311/1930/1084 1684/1934/1084 1683/1933/1083 +f 1294/1916/1041 1688/1900/1041 1689/1893/1037 1220/1867/1037 1255/1868/312 +f 1295/1920/1055 1296/1921/1061 1696/1903/1061 1685/1901/1055 +f 1295/1920/1055 1685/1901/1055 1687/1897/1049 1332/1917/1049 +f 1332/1917/1049 1687/1897/1049 1688/1900/1041 1294/1916/1041 +f 1307/1983/1047 1704/1894/1047 1701/1896/1039 1262/1905/1039 1354/1489/326 +f 1241/1911/1037 1240/1910/1033 1690/1892/1033 1689/1893/1037 +f 1240/1910/1033 1225/1909/1026 1691/1891/1026 1690/1892/1033 +f 1225/1909/1026 1224/1881/1025 1675/1880/1025 1691/1891/1026 +f 1716/1988/1 1718/1887/1 1694/1890/1068 1352/1989/1068 +f 1708/1924/3 1297/1923/1071 1693/1884/1071 1709/1883/3 +f 1710/1878/386 1223/1876/1025 1675/1880/1025 1712/1879/386 +f 1713/1977/2 1288/1976/1106 1692/1870/1106 1715/1869/2 +f 1296/1921/1061 1708/1924/3 1709/1883/3 1696/1903/1061 +f 1696/1903/1061 1709/1883/3 1707/1886/3 1331/1904/1061 +f 1226/1863/1029 1710/1878/386 1712/1879/386 1697/1982/1029 +f 1697/1982/1029 1712/1879/386 1711/1882/386 1259/1908/1029 +f 1269/1945/1112 1713/1977/2 1715/1869/2 1686/1946/1112 +f 1686/1946/1112 1715/1869/2 1714/1872/2 1270/1968/1112 +f 1351/1959/1067 1695/1958/1067 1718/1887/1 1716/1988/1 +f 1695/1958/1067 1329/2004/1067 1717/1888/1 1718/1887/1 diff --git a/mods/pipeworks/models/pipeworks_flow_sensor_lowpoly.obj b/mods/pipeworks/models/pipeworks_flow_sensor_lowpoly.obj new file mode 100755 index 0000000..b0c0702 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_flow_sensor_lowpoly.obj @@ -0,0 +1,220 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-flow-sensor-lowpoly.blend' +# www.blender.org +o Cube.001_Cube.001_None +v -0.187500 0.187500 0.250000 +v -0.187500 0.187500 -0.250000 +v -0.187500 -0.187500 -0.250000 +v -0.187500 -0.187500 0.250000 +v 0.187500 0.187500 -0.250000 +v 0.187500 -0.187500 -0.250000 +v 0.187500 0.187500 0.250000 +v 0.187500 -0.187500 0.250000 +v -0.156250 -0.064721 0.500000 +v -0.156250 -0.064721 0.468750 +v -0.064721 -0.156250 0.500000 +v -0.064721 -0.156250 0.468750 +v 0.064721 -0.156250 0.500000 +v 0.064721 -0.156250 0.468750 +v 0.156250 -0.064721 0.500000 +v 0.156250 -0.064721 0.468750 +v 0.156250 0.064721 0.500000 +v 0.156250 0.064721 0.468750 +v 0.064721 0.156250 0.500000 +v 0.064721 0.156250 0.468750 +v -0.064721 0.156250 0.500000 +v -0.064721 0.156250 0.468750 +v -0.156250 0.064721 0.500000 +v -0.156250 0.064721 0.468750 +v -0.125000 -0.051777 0.468750 +v -0.125000 -0.051777 -0.468750 +v -0.051777 -0.125000 0.468750 +v -0.051777 -0.125000 -0.468750 +v 0.051777 -0.125000 0.468750 +v 0.051777 -0.125000 -0.468750 +v 0.125000 -0.051777 0.468750 +v 0.125000 -0.051777 -0.468750 +v 0.125000 0.051777 0.468750 +v 0.125000 0.051777 -0.468750 +v 0.051777 0.125000 0.468750 +v 0.051777 0.125000 -0.468750 +v -0.051777 0.125000 0.468750 +v -0.051777 0.125000 -0.468750 +v -0.125000 0.051777 0.468750 +v -0.125000 0.051777 -0.468750 +v -0.156250 -0.064721 -0.468750 +v -0.156250 -0.064721 -0.500000 +v -0.064721 -0.156250 -0.468750 +v -0.064721 -0.156250 -0.500000 +v 0.064721 -0.156250 -0.468750 +v 0.064721 -0.156250 -0.500000 +v 0.156250 -0.064721 -0.468750 +v 0.156250 -0.064721 -0.500000 +v 0.156250 0.064721 -0.468750 +v 0.156250 0.064721 -0.500000 +v 0.064721 0.156250 -0.468750 +v 0.064721 0.156250 -0.500000 +v -0.064721 0.156250 -0.468750 +v -0.064721 0.156250 -0.500000 +v -0.156250 0.064721 -0.468750 +v -0.156250 0.064721 -0.500000 +vt 0.0098 0.5000 +vt 0.3235 0.5000 +vt 0.3235 0.7353 +vt 0.0098 0.7353 +vt 0.2647 0.9902 +vt 0.2647 0.7549 +vt 0.5000 0.7549 +vt 0.5000 0.9902 +vt 0.0098 0.5000 +vt 0.3235 0.5000 +vt 0.3235 0.7353 +vt 0.0098 0.7353 +vt 0.2451 0.7549 +vt 0.2451 0.9902 +vt 0.0098 0.9902 +vt 0.0098 0.7549 +vt 0.3235 0.2451 +vt 0.0098 0.2451 +vt 0.0098 0.0098 +vt 0.3235 0.0098 +vt 0.0098 0.2549 +vt 0.3235 0.2549 +vt 0.3235 0.4902 +vt 0.0098 0.4902 +vt 0.7941 0.6765 +vt 0.7353 0.7353 +vt 0.6569 0.7353 +vt 0.5980 0.6765 +vt 0.5980 0.5980 +vt 0.6569 0.5392 +vt 0.7353 0.5392 +vt 0.7941 0.5980 +vt 0.5000 0.7353 +vt 0.5588 0.6765 +vt 0.5588 0.5980 +vt 0.5000 0.5392 +vt 0.4216 0.5392 +vt 0.3627 0.5980 +vt 0.3627 0.6765 +vt 0.4216 0.7353 +vt 0.5588 0.6765 +vt 0.5000 0.7353 +vt 0.4216 0.7353 +vt 0.3627 0.6765 +vt 0.3627 0.5980 +vt 0.4216 0.5392 +vt 0.5000 0.5392 +vt 0.5588 0.5980 +vt 0.7353 0.7353 +vt 0.7941 0.6765 +vt 0.7941 0.5980 +vt 0.7353 0.5392 +vt 0.6569 0.5392 +vt 0.5980 0.5980 +vt 0.5980 0.6765 +vt 0.6569 0.7353 +vt 0.8529 0.4902 +vt 0.8529 0.4706 +vt 0.8922 0.4706 +vt 0.8922 0.4902 +vt 0.9314 0.4706 +vt 0.9314 0.4902 +vt 0.9706 0.4706 +vt 0.9706 0.4902 +vt 0.6569 0.4902 +vt 0.6569 0.4706 +vt 0.6961 0.4706 +vt 0.6961 0.4902 +vt 0.7353 0.4706 +vt 0.7353 0.4902 +vt 0.7745 0.4706 +vt 0.7745 0.4902 +vt 0.8137 0.4706 +vt 0.8137 0.4902 +vt 0.5784 0.4902 +vt 0.5784 0.4706 +vt 0.6176 0.4706 +vt 0.6176 0.4902 +vt 0.5392 0.4902 +vt 0.5392 0.4706 +vt 0.6569 0.4706 +vt 0.6569 0.4902 +vt 0.3431 0.4902 +vt 0.3431 0.4706 +vt 0.3824 0.4706 +vt 0.3824 0.4902 +vt 0.4216 0.4706 +vt 0.4216 0.4902 +vt 0.4608 0.4706 +vt 0.4608 0.4902 +vt 0.5000 0.4706 +vt 0.5000 0.4902 +vt 0.3431 0.2843 +vt 0.3431 0.2451 +vt 0.9706 0.2451 +vt 0.9706 0.2843 +vt 0.3431 0.3627 +vt 0.3431 0.3235 +vt 0.9706 0.3235 +vt 0.9706 0.3627 +vt 0.3431 0.4020 +vt 0.9706 0.4020 +vt 0.9706 0.4412 +vt 0.3431 0.4412 +vt 0.9706 0.1667 +vt 0.9706 0.2059 +vt 0.3431 0.2059 +vt 0.3431 0.1667 +vt 0.9706 0.1275 +vt 0.3431 0.1275 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 -1.0000 +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 -0.9239 -0.3827 -0.0000 +vn -0.3827 -0.9239 -0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.9239 -0.3827 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.9239 0.3827 -0.0000 +g Cube.001_Cube.001_None_Cube.001_Cube.001_None_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/5/2 5/6/2 6/7/2 3/8/2 +f 5/9/3 7/10/3 8/11/3 6/12/3 +f 7/13/4 1/14/4 4/15/4 8/16/4 +f 4/17/5 3/18/5 6/19/5 8/20/5 +f 7/21/6 5/22/6 2/23/6 1/24/6 +f 12/25/2 10/26/2 24/27/2 22/28/2 20/29/2 18/30/2 16/31/2 14/32/2 +f 9/33/4 11/34/4 13/35/4 15/36/4 17/37/4 19/38/4 21/39/4 23/40/4 +f 44/41/2 42/42/2 56/43/2 54/44/2 52/45/2 50/46/2 48/47/2 46/48/2 +f 41/49/4 43/50/4 45/51/4 47/52/4 49/53/4 51/54/4 53/55/4 55/56/4 +s 1 +f 9/57/7 10/58/7 12/59/8 11/60/8 +f 11/60/8 12/59/8 14/61/9 13/62/9 +f 13/62/9 14/61/9 16/63/10 15/64/10 +f 15/65/10 16/66/10 18/67/11 17/68/11 +f 17/68/11 18/67/11 20/69/12 19/70/12 +f 19/70/12 20/69/12 22/71/13 21/72/13 +f 21/72/13 22/71/13 24/73/14 23/74/14 +f 23/74/14 24/73/14 10/58/7 9/57/7 +f 43/75/8 44/76/8 46/77/9 45/78/9 +f 41/79/7 42/80/7 44/76/8 43/75/8 +f 45/78/9 46/77/9 48/81/10 47/82/10 +f 47/83/10 48/84/10 50/85/11 49/86/11 +f 49/86/11 50/85/11 52/87/12 51/88/12 +f 51/88/12 52/87/12 54/89/13 53/90/13 +f 53/90/13 54/89/13 56/91/14 55/92/14 +f 55/92/14 56/91/14 42/80/7 41/79/7 +f 38/93/13 40/94/14 39/95/14 37/96/13 +f 34/97/11 36/98/12 35/99/12 33/100/11 +f 32/101/10 31/102/10 29/103/9 30/104/9 +f 38/93/13 37/96/13 35/99/12 36/98/12 +f 27/105/8 25/106/7 26/107/7 28/108/8 +f 29/109/9 27/105/8 28/108/8 30/110/9 +f 32/101/10 34/97/11 33/100/11 31/102/10 +f 25/106/7 39/95/14 40/94/14 26/107/7 diff --git a/mods/pipeworks/models/pipeworks_fountainhead.obj b/mods/pipeworks/models/pipeworks_fountainhead.obj new file mode 100755 index 0000000..0897563 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_fountainhead.obj @@ -0,0 +1,1956 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-highpoly.blend' +# www.blender.org +o Pipe_Cylinder.002 +v -0.126770 -0.468750 0.038456 +v -0.131837 -0.468750 0.012985 +v -0.131837 -0.468750 -0.012984 +v -0.126770 -0.468750 -0.038455 +v -0.116832 -0.468750 -0.062448 +v -0.102404 -0.468750 -0.084041 +v -0.084041 -0.468750 -0.102404 +v -0.062448 -0.468750 -0.116832 +v -0.038455 -0.468750 -0.126770 +v -0.012985 -0.468750 -0.131836 +v 0.012985 -0.468750 -0.131836 +v 0.062448 -0.468750 -0.116832 +v 0.084041 -0.468750 -0.102404 +v 0.102404 -0.468750 -0.084041 +v 0.116832 -0.468750 -0.062448 +v 0.126770 -0.468750 -0.038455 +v 0.131836 -0.468750 -0.012985 +v 0.131836 -0.468750 0.012985 +v 0.126770 -0.468750 0.038455 +v 0.116832 -0.468750 0.062448 +v 0.084041 -0.468750 0.102404 +v 0.102404 -0.468750 0.084041 +v 0.062448 -0.468750 0.116832 +v 0.038455 -0.468750 0.126770 +v -0.012985 -0.468750 0.131837 +v -0.062448 -0.468750 0.116832 +v -0.038455 -0.468750 0.126770 +v -0.084041 -0.468750 0.102404 +v -0.102404 -0.468750 0.084041 +v -0.116832 -0.468750 0.062448 +v 0.038455 -0.468750 -0.126770 +v 0.012985 -0.468750 0.131837 +v -0.110774 -0.437501 0.059210 +v -0.120197 -0.437501 0.036462 +v -0.125001 -0.437501 0.012312 +v -0.125001 -0.437501 -0.012311 +v -0.120197 -0.437501 -0.036461 +v -0.110774 -0.437501 -0.059210 +v -0.097094 -0.437501 -0.079683 +v -0.079683 -0.437501 -0.097094 +v -0.059210 -0.437501 -0.110774 +v -0.036461 -0.437501 -0.120197 +v -0.012312 -0.437501 -0.125000 +v 0.012311 -0.437501 -0.125000 +v 0.036461 -0.437501 -0.120197 +v 0.059210 -0.437501 -0.110774 +v 0.079683 -0.437501 -0.097094 +v 0.097094 -0.437501 -0.079683 +v 0.110774 -0.437501 -0.059210 +v 0.120197 -0.437501 -0.036461 +v 0.125000 -0.437501 -0.012311 +v 0.125000 -0.437501 0.012312 +v 0.120197 -0.437501 0.036461 +v 0.110774 -0.437501 0.059210 +v 0.097094 -0.437501 0.079683 +v 0.079683 -0.437501 0.097094 +v 0.059210 -0.437501 0.110774 +v 0.036461 -0.437501 0.120197 +v 0.012311 -0.437501 0.125001 +v -0.012311 -0.437501 0.125001 +v -0.036461 -0.437501 0.120197 +v -0.059210 -0.437501 0.110774 +v -0.079683 -0.437501 0.097094 +v -0.097094 -0.437501 0.079683 +v -0.136982 -0.460914 0.046976 +v -0.136982 -0.468751 0.046976 +v -0.142474 -0.468751 0.054133 +v -0.142474 -0.460914 0.054133 +v -0.139022 -0.460914 0.062467 +v -0.130078 -0.460914 0.063644 +v -0.124587 -0.460914 0.056488 +v -0.128039 -0.460914 0.048154 +v -0.128039 -0.468751 0.048154 +v -0.139022 -0.468751 0.062467 +v -0.130078 -0.468751 0.063644 +v -0.124587 -0.468751 0.056488 +v -0.063644 -0.460914 0.130078 +v -0.063644 -0.468751 0.130078 +v -0.062467 -0.468751 0.139022 +v -0.062467 -0.460914 0.139022 +v -0.054133 -0.460914 0.142474 +v -0.046976 -0.460914 0.136982 +v -0.048153 -0.460914 0.128039 +v -0.056487 -0.460914 0.124587 +v -0.056487 -0.468751 0.124587 +v -0.054133 -0.468751 0.142474 +v -0.046976 -0.468751 0.136982 +v -0.048153 -0.468751 0.128039 +v 0.046976 -0.460914 0.136982 +v 0.046976 -0.468751 0.136982 +v 0.054133 -0.468751 0.142474 +v 0.054133 -0.460914 0.142474 +v 0.062467 -0.460914 0.139022 +v 0.063644 -0.460914 0.130078 +v 0.056487 -0.460914 0.124587 +v 0.048153 -0.460914 0.128039 +v 0.048153 -0.468751 0.128039 +v 0.062467 -0.468751 0.139022 +v 0.063644 -0.468751 0.130078 +v 0.056487 -0.468751 0.124587 +v 0.130078 -0.460914 0.063644 +v 0.130078 -0.468751 0.063644 +v 0.139022 -0.468751 0.062467 +v 0.139022 -0.460914 0.062467 +v 0.142474 -0.460914 0.054133 +v 0.136982 -0.460914 0.046976 +v 0.128039 -0.460914 0.048153 +v 0.124587 -0.460914 0.056488 +v 0.124587 -0.468751 0.056488 +v 0.142474 -0.468751 0.054133 +v 0.136982 -0.468751 0.046976 +v 0.128039 -0.468751 0.048153 +v 0.136982 -0.460914 -0.046976 +v 0.136982 -0.468751 -0.046976 +v 0.142474 -0.468751 -0.054133 +v 0.142474 -0.460914 -0.054133 +v 0.139022 -0.460914 -0.062467 +v 0.130078 -0.460914 -0.063644 +v 0.124587 -0.460914 -0.056487 +v 0.128039 -0.460914 -0.048153 +v 0.128039 -0.468751 -0.048153 +v 0.139022 -0.468751 -0.062467 +v 0.130078 -0.468751 -0.063644 +v 0.124587 -0.468751 -0.056487 +v 0.063644 -0.460914 -0.130078 +v 0.063644 -0.468751 -0.130078 +v 0.062467 -0.468751 -0.139022 +v 0.062467 -0.460914 -0.139022 +v 0.054132 -0.460914 -0.142474 +v 0.046976 -0.460914 -0.136982 +v 0.048153 -0.460914 -0.128039 +v 0.056487 -0.460914 -0.124587 +v 0.056487 -0.468751 -0.124587 +v 0.054132 -0.468751 -0.142474 +v 0.046976 -0.468751 -0.136982 +v 0.048153 -0.468751 -0.128039 +v -0.046976 -0.460914 -0.136982 +v -0.046976 -0.468751 -0.136982 +v -0.054133 -0.468751 -0.142474 +v -0.054133 -0.460914 -0.142474 +v -0.062467 -0.460914 -0.139022 +v -0.063644 -0.460914 -0.130078 +v -0.056488 -0.460914 -0.124587 +v -0.048153 -0.460914 -0.128039 +v -0.048153 -0.468751 -0.128039 +v -0.062467 -0.468751 -0.139022 +v -0.063644 -0.468751 -0.130078 +v -0.056488 -0.468751 -0.124587 +v -0.130078 -0.460914 -0.063644 +v -0.130078 -0.468751 -0.063644 +v -0.139022 -0.468751 -0.062467 +v -0.139022 -0.460914 -0.062467 +v -0.142474 -0.460914 -0.054132 +v -0.136982 -0.460914 -0.046976 +v -0.128039 -0.460914 -0.048153 +v -0.124587 -0.460914 -0.056487 +v -0.124587 -0.468751 -0.056487 +v -0.142474 -0.468751 -0.054132 +v -0.136982 -0.468751 -0.046976 +v -0.128039 -0.468751 -0.048153 +v -0.099603 -0.500000 -0.121367 +v -0.074012 -0.500000 -0.138466 +v -0.045577 -0.500000 -0.150245 +v -0.015390 -0.500000 -0.156249 +v 0.015389 -0.500000 -0.156249 +v 0.045576 -0.500000 -0.150245 +v 0.074012 -0.500000 -0.138467 +v 0.099603 -0.500000 -0.121367 +v 0.121367 -0.500000 -0.099603 +v 0.150245 -0.500000 -0.045576 +v 0.156249 -0.500000 0.015389 +v 0.150245 -0.500000 0.045576 +v 0.121367 -0.500000 0.099603 +v 0.099603 -0.500000 0.121367 +v 0.074012 -0.500000 0.138467 +v 0.045576 -0.500000 0.150245 +v 0.015389 -0.500000 0.156250 +v -0.045576 -0.500000 0.150245 +v -0.074012 -0.500000 0.138467 +v -0.099603 -0.500000 0.121367 +v -0.138467 -0.500000 0.074012 +v -0.156250 -0.500000 0.015389 +v -0.156250 -0.500000 -0.015389 +v -0.150245 -0.500000 -0.045576 +v -0.138467 -0.500000 -0.074012 +v -0.121367 -0.500000 -0.099603 +v 0.138466 -0.500000 -0.074012 +v 0.156249 -0.500000 -0.015389 +v 0.138467 -0.500000 0.074012 +v -0.015389 -0.500000 0.156250 +v -0.121367 -0.500000 0.099603 +v -0.150245 -0.500000 0.045576 +v -0.099604 -0.468750 -0.121367 +v -0.121367 -0.468750 -0.099603 +v -0.074012 -0.468750 -0.138466 +v -0.045577 -0.468750 -0.150245 +v -0.015390 -0.468750 -0.156250 +v 0.015389 -0.468750 -0.156250 +v 0.045576 -0.468750 -0.150245 +v 0.074012 -0.468750 -0.138467 +v 0.099603 -0.468750 -0.121367 +v 0.121367 -0.468750 -0.099603 +v 0.138466 -0.468750 -0.074012 +v 0.150245 -0.468750 -0.045576 +v 0.156249 -0.468750 -0.015389 +v 0.156249 -0.468750 0.015389 +v 0.150245 -0.468750 0.045576 +v 0.138467 -0.468750 0.074012 +v 0.121367 -0.468750 0.099603 +v 0.099603 -0.468750 0.121367 +v 0.074012 -0.468750 0.138467 +v 0.045576 -0.468750 0.150245 +v 0.015389 -0.468750 0.156250 +v -0.015389 -0.468750 0.156250 +v -0.074012 -0.468750 0.138467 +v -0.045576 -0.468750 0.150245 +v -0.099603 -0.468750 0.121367 +v -0.121367 -0.468750 0.099603 +v -0.138467 -0.468750 0.074012 +v -0.150245 -0.468750 0.045576 +v -0.156250 -0.468750 -0.015389 +v -0.156250 -0.468750 0.015389 +v -0.150245 -0.468750 -0.045576 +v -0.138467 -0.468750 -0.074012 +v 0.145633 0.500000 -0.119518 +v 0.166152 0.500000 -0.088810 +v 0.180285 0.500000 -0.054689 +v 0.187490 0.500000 -0.018466 +v 0.187490 0.500000 0.018466 +v 0.119518 0.500000 -0.145633 +v 0.180285 0.500000 0.054689 +v 0.054689 0.500000 -0.180285 +v 0.088810 0.500000 -0.166152 +v 0.166152 0.500000 0.088810 +v 0.018466 0.500000 -0.187490 +v 0.145633 0.500000 0.119518 +v -0.018466 0.500000 -0.187490 +v 0.119518 0.500000 0.145633 +v -0.054689 0.500000 -0.180285 +v 0.088810 0.500000 0.166151 +v -0.088809 0.500000 -0.166152 +v 0.054689 0.500000 0.180285 +v -0.119518 0.500000 -0.145633 +v 0.018466 0.500000 0.187490 +v -0.145633 0.500000 -0.119518 +v -0.018466 0.500000 0.187490 +v -0.166151 0.500000 -0.088810 +v -0.054689 0.500000 0.180285 +v -0.180285 0.500000 -0.054689 +v -0.187490 0.500000 0.018466 +v -0.088810 0.500000 0.166151 +v -0.187490 0.500000 -0.018466 +v -0.166151 0.500000 0.088810 +v -0.180285 0.500000 0.054689 +v -0.145633 0.500000 0.119518 +v -0.119518 0.500000 0.145633 +v -0.108578 -0.460914 0.095821 +v -0.108578 -0.468751 0.095821 +v -0.110913 -0.468751 0.104534 +v -0.110913 -0.460914 0.104534 +v -0.104534 -0.460914 0.110913 +v -0.095821 -0.460914 0.108578 +v -0.093486 -0.460914 0.099865 +v -0.099865 -0.460914 0.093486 +v -0.099865 -0.468751 0.093486 +v -0.104534 -0.468751 0.110913 +v -0.095821 -0.468751 0.108578 +v -0.093486 -0.468751 0.099865 +v -0.009021 -0.460914 0.144532 +v -0.009021 -0.468751 0.144532 +v -0.004510 -0.468751 0.152344 +v -0.004510 -0.460914 0.152344 +v 0.004510 -0.460914 0.152344 +v 0.009021 -0.460914 0.144532 +v 0.004510 -0.460914 0.136720 +v -0.004510 -0.460914 0.136720 +v -0.004510 -0.468751 0.136720 +v 0.004510 -0.468751 0.152344 +v 0.009021 -0.468751 0.144532 +v 0.004510 -0.468751 0.136720 +v 0.095821 -0.460914 0.108578 +v 0.095821 -0.468751 0.108578 +v 0.104534 -0.468751 0.110913 +v 0.104534 -0.460914 0.110913 +v 0.110913 -0.460914 0.104534 +v 0.108578 -0.460914 0.095821 +v 0.099865 -0.460914 0.093486 +v 0.093486 -0.460914 0.099865 +v 0.093486 -0.468751 0.099865 +v 0.110913 -0.468751 0.104534 +v 0.108578 -0.468751 0.095821 +v 0.099865 -0.468751 0.093486 +v 0.144532 -0.460914 0.009021 +v 0.144532 -0.468751 0.009021 +v 0.152344 -0.468751 0.004510 +v 0.152344 -0.460914 0.004510 +v 0.152344 -0.460914 -0.004510 +v 0.144532 -0.460914 -0.009021 +v 0.136720 -0.460914 -0.004510 +v 0.136720 -0.460914 0.004510 +v 0.136720 -0.468751 0.004510 +v 0.152344 -0.468751 -0.004510 +v 0.144532 -0.468751 -0.009021 +v 0.136720 -0.468751 -0.004510 +v 0.108578 -0.460914 -0.095821 +v 0.108578 -0.468751 -0.095821 +v 0.110913 -0.468751 -0.104534 +v 0.110913 -0.460914 -0.104534 +v 0.104534 -0.460914 -0.110913 +v 0.095821 -0.460914 -0.108578 +v 0.093486 -0.460914 -0.099865 +v 0.099865 -0.460914 -0.093486 +v 0.099865 -0.468751 -0.093486 +v 0.104534 -0.468751 -0.110913 +v 0.095821 -0.468751 -0.108578 +v 0.093486 -0.468751 -0.099865 +v 0.009021 -0.460914 -0.144532 +v 0.009021 -0.468751 -0.144532 +v 0.004510 -0.468751 -0.152344 +v 0.004510 -0.460914 -0.152344 +v -0.004510 -0.460914 -0.152344 +v -0.009021 -0.460914 -0.144532 +v -0.004510 -0.460914 -0.136720 +v 0.004510 -0.460914 -0.136720 +v 0.004510 -0.468751 -0.136720 +v -0.004510 -0.468751 -0.152344 +v -0.009021 -0.468751 -0.144532 +v -0.004510 -0.468751 -0.136720 +v -0.095821 -0.460914 -0.108578 +v -0.095821 -0.468751 -0.108578 +v -0.104534 -0.468751 -0.110913 +v -0.104534 -0.460914 -0.110913 +v -0.110913 -0.460914 -0.104534 +v -0.108578 -0.460914 -0.095821 +v -0.099865 -0.460914 -0.093486 +v -0.093486 -0.460914 -0.099865 +v -0.093486 -0.468751 -0.099865 +v -0.110913 -0.468751 -0.104534 +v -0.108578 -0.468751 -0.095821 +v -0.099865 -0.468751 -0.093486 +v -0.144532 -0.460914 -0.009021 +v -0.144532 -0.468751 -0.009021 +v -0.152344 -0.468751 -0.004510 +v -0.152344 -0.460914 -0.004510 +v -0.152344 -0.460914 0.004511 +v -0.144532 -0.460914 0.009021 +v -0.136720 -0.460914 0.004510 +v -0.136720 -0.460914 -0.004510 +v -0.136720 -0.468751 -0.004510 +v -0.152344 -0.468751 0.004511 +v -0.144532 -0.468751 0.009021 +v -0.136720 -0.468751 0.004510 +v -0.009233 0.312501 0.093750 +v 0.083081 0.312501 0.044407 +v -0.093750 0.312501 0.009234 +v -0.083081 0.312501 -0.044407 +v 0.027346 0.312501 0.090148 +v 0.009234 0.312501 -0.093750 +v -0.027346 0.312501 -0.090148 +v -0.072821 0.312501 0.059762 +v 0.093750 0.312501 0.009234 +v 0.083081 0.312501 -0.044407 +v 0.009234 0.312501 0.093750 +v 0.059762 0.312501 -0.072821 +v 0.072821 0.312501 -0.059762 +v 0.072821 0.312501 0.059762 +v -0.090148 0.312501 0.027346 +v -0.090148 0.312501 -0.027346 +v -0.059762 0.312501 0.072821 +v 0.044407 0.312501 -0.083081 +v 0.090148 0.312501 -0.027346 +v -0.044407 0.312501 0.083081 +v 0.090148 0.312501 0.027346 +v -0.093750 0.312501 -0.009234 +v -0.009234 0.312501 -0.093750 +v 0.027346 0.312501 -0.090148 +v 0.059762 0.312501 0.072821 +v -0.059762 0.312501 -0.072821 +v -0.027346 0.312501 0.090148 +v -0.083080 0.312501 0.044408 +v 0.093750 0.312501 -0.009234 +v -0.072821 0.312501 -0.059762 +v 0.044407 0.312501 0.083080 +v -0.044407 0.312501 -0.083081 +v 0.138467 0.342519 -0.074012 +v 0.083898 0.312500 -0.044844 +v 0.150245 0.342519 -0.045576 +v 0.091035 0.312499 -0.027615 +v 0.156250 0.342519 -0.015389 +v 0.094673 0.312500 -0.009325 +v 0.121367 0.342519 -0.099603 +v 0.073537 0.312500 -0.060351 +v 0.094673 0.312499 0.009324 +v 0.156250 0.342519 0.015389 +v 0.074012 0.342519 -0.138467 +v 0.044844 0.312500 -0.083898 +v 0.099603 0.342519 -0.121367 +v 0.060350 0.312500 -0.073537 +v 0.027615 0.312500 -0.091035 +v 0.045576 0.342519 -0.150245 +v 0.150245 0.342519 0.045576 +v 0.091035 0.312500 0.027615 +v 0.015389 0.342519 -0.156250 +v 0.009325 0.312500 -0.094673 +v 0.138467 0.342519 0.074012 +v 0.083898 0.312499 0.044844 +v -0.009324 0.312500 -0.094673 +v -0.015389 0.342519 -0.156250 +v 0.121367 0.342519 0.099603 +v 0.073537 0.312500 0.060350 +v -0.045576 0.342519 -0.150245 +v -0.027615 0.312500 -0.091035 +v 0.099603 0.342519 0.121367 +v 0.060350 0.312500 0.073537 +v -0.044844 0.312500 -0.083898 +v -0.074012 0.342519 -0.138467 +v 0.045576 0.342519 0.150245 +v 0.027615 0.312500 0.091035 +v 0.074012 0.342519 0.138467 +v 0.044844 0.312500 0.083898 +v -0.060350 0.312500 -0.073537 +v -0.099603 0.342519 -0.121367 +v 0.009325 0.312500 0.094673 +v 0.015389 0.342519 0.156250 +v -0.073537 0.312499 -0.060351 +v -0.121367 0.342519 -0.099604 +v -0.015389 0.342519 0.156250 +v -0.009324 0.312500 0.094673 +v -0.138466 0.342519 -0.074012 +v -0.083898 0.312500 -0.044845 +v -0.045576 0.342519 0.150245 +v -0.027615 0.312500 0.091035 +v -0.150245 0.342519 -0.045577 +v -0.091035 0.312499 -0.027615 +v -0.074012 0.342519 0.138467 +v -0.044844 0.312500 0.083898 +v -0.156249 0.342519 -0.015389 +v -0.094673 0.312500 -0.009325 +v -0.099603 0.342519 0.121367 +v -0.060350 0.312500 0.073537 +v -0.156249 0.342519 0.015389 +v -0.094673 0.312500 0.009324 +v -0.150245 0.342519 0.045576 +v -0.091035 0.312499 0.027615 +v -0.121367 0.342519 0.099603 +v -0.073537 0.312500 0.060350 +v -0.083898 0.312500 0.044844 +v -0.138467 0.342519 0.074012 +v -0.059762 -0.250000 -0.072821 +v -0.044408 -0.250000 -0.083080 +v -0.027346 -0.250000 -0.090148 +v 0.072821 -0.250000 -0.059762 +v 0.090148 -0.250000 -0.027346 +v 0.059762 -0.250000 0.072821 +v 0.044407 -0.250000 0.083081 +v 0.027346 -0.250000 0.090148 +v 0.009234 -0.250000 0.093750 +v -0.059762 -0.250000 0.072821 +v -0.009234 -0.250000 -0.093750 +v 0.083081 -0.250000 -0.044407 +v 0.093750 -0.250000 -0.009234 +v 0.093750 -0.250000 0.009234 +v 0.090148 -0.250000 0.027346 +v 0.083081 -0.250000 0.044407 +v 0.072821 -0.250000 0.059762 +v -0.009233 -0.250000 0.093750 +v -0.093750 -0.250000 0.009234 +v -0.083081 -0.250000 -0.044407 +v 0.009234 -0.250000 -0.093750 +v -0.072821 -0.250000 0.059763 +v 0.059762 -0.250000 -0.072821 +v -0.090148 -0.250000 0.027346 +v -0.090148 -0.250000 -0.027346 +v 0.044407 -0.250000 -0.083080 +v -0.044407 -0.250000 0.083081 +v -0.093750 -0.250000 -0.009233 +v 0.027346 -0.250000 -0.090148 +v -0.027346 -0.250000 0.090148 +v -0.083080 -0.250000 0.044408 +v -0.072821 -0.250000 -0.059762 +vt 0.5060 0.7367 +vt 0.5273 0.7409 +vt 0.5475 0.7492 +vt 0.5656 0.7613 +vt 0.5810 0.7767 +vt 0.5931 0.7948 +vt 0.6014 0.8150 +vt 0.6056 0.8363 +vt 0.6056 0.8581 +vt 0.6014 0.8795 +vt 0.5931 0.8996 +vt 0.5810 0.9177 +vt 0.5656 0.9331 +vt 0.5475 0.9452 +vt 0.5273 0.9535 +vt 0.5060 0.9578 +vt 0.4842 0.9578 +vt 0.4628 0.9535 +vt 0.4427 0.9452 +vt 0.4246 0.9331 +vt 0.4092 0.9177 +vt 0.3971 0.8996 +vt 0.3888 0.8795 +vt 0.3845 0.8581 +vt 0.3845 0.8363 +vt 0.3888 0.8150 +vt 0.3971 0.7948 +vt 0.4092 0.7767 +vt 0.4246 0.7613 +vt 0.4427 0.7492 +vt 0.4628 0.7409 +vt 0.4842 0.7367 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.3888 0.9345 +vt 0.4078 0.9535 +vt 0.4302 0.9685 +vt 0.4552 0.9788 +vt 0.4816 0.9841 +vt 0.5086 0.9841 +vt 0.5350 0.9788 +vt 0.5599 0.9685 +vt 0.5823 0.9535 +vt 0.6014 0.9345 +vt 0.6164 0.9121 +vt 0.6267 0.8871 +vt 0.6319 0.8607 +vt 0.6319 0.8337 +vt 0.6267 0.8073 +vt 0.6164 0.7824 +vt 0.6014 0.7600 +vt 0.5823 0.7409 +vt 0.5599 0.7259 +vt 0.5350 0.7156 +vt 0.5086 0.7104 +vt 0.4816 0.7104 +vt 0.4552 0.7156 +vt 0.4302 0.7259 +vt 0.4078 0.7409 +vt 0.3888 0.7600 +vt 0.3738 0.7824 +vt 0.3635 0.8073 +vt 0.3582 0.8337 +vt 0.3582 0.8607 +vt 0.3635 0.8871 +vt 0.3738 0.9121 +vt 0.2066 0.7156 +vt 0.2315 0.7259 +vt 0.2539 0.7409 +vt 0.2730 0.7600 +vt 0.2879 0.7824 +vt 0.2982 0.8073 +vt 0.3035 0.8337 +vt 0.3035 0.8607 +vt 0.2982 0.8871 +vt 0.2879 0.9121 +vt 0.2730 0.9345 +vt 0.2539 0.9535 +vt 0.2315 0.9685 +vt 0.2066 0.9788 +vt 0.1801 0.9841 +vt 0.1532 0.9841 +vt 0.1267 0.9788 +vt 0.1018 0.9685 +vt 0.0794 0.9535 +vt 0.0603 0.9345 +vt 0.0454 0.9121 +vt 0.0350 0.8871 +vt 0.0298 0.8607 +vt 0.0298 0.8337 +vt 0.0350 0.8073 +vt 0.0454 0.7824 +vt 0.0603 0.7600 +vt 0.0794 0.7409 +vt 0.1018 0.7259 +vt 0.1267 0.7156 +vt 0.1532 0.7104 +vt 0.1801 0.7104 +vt 0.7644 0.7111 +vt 0.7405 0.7270 +vt 0.7202 0.7473 +vt 0.7043 0.7712 +vt 0.6933 0.7977 +vt 0.6877 0.8259 +vt 0.6877 0.8546 +vt 0.6933 0.8828 +vt 0.7043 0.9093 +vt 0.7202 0.9332 +vt 0.7405 0.9535 +vt 0.7644 0.9694 +vt 0.7909 0.9804 +vt 0.8191 0.9860 +vt 0.8478 0.9860 +vt 0.8760 0.9804 +vt 0.9025 0.9694 +vt 0.9264 0.9535 +vt 0.9467 0.9332 +vt 0.9626 0.9093 +vt 0.9736 0.8828 +vt 0.9792 0.8546 +vt 0.9792 0.8259 +vt 0.9736 0.7977 +vt 0.9626 0.7712 +vt 0.9467 0.7473 +vt 0.9264 0.7270 +vt 0.9025 0.7111 +vt 0.8760 0.7001 +vt 0.8478 0.6945 +vt 0.8191 0.6945 +vt 0.7909 0.7001 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.6110 0.7500 +vt 0.6229 0.7431 +vt 0.6229 0.7293 +vt 0.6110 0.7225 +vt 0.5991 0.7293 +vt 0.5991 0.7431 +vt 0.4317 0.5243 +vt 0.4317 0.5035 +vt 0.4593 0.5035 +vt 0.4593 0.5243 +vt 0.4040 0.5243 +vt 0.4040 0.5035 +vt 0.3763 0.5243 +vt 0.3763 0.5035 +vt 0.3487 0.5243 +vt 0.3487 0.5035 +vt 0.3210 0.5243 +vt 0.3210 0.5035 +vt 0.2933 0.5243 +vt 0.2933 0.5035 +vt 0.2656 0.5243 +vt 0.2656 0.5035 +vt 0.2380 0.5243 +vt 0.2380 0.5035 +vt 0.2103 0.5243 +vt 0.2103 0.5035 +vt 0.1826 0.5243 +vt 0.1826 0.5035 +vt 0.1550 0.5243 +vt 0.1550 0.5035 +vt 0.1273 0.5243 +vt 0.1273 0.5035 +vt 0.0996 0.5243 +vt 0.0996 0.5035 +vt 0.0720 0.5243 +vt 0.0720 0.5035 +vt 0.0443 0.5243 +vt 0.0443 0.5035 +vt 0.0166 0.5243 +vt 0.0166 0.5035 +vt 0.8744 0.5243 +vt 0.8744 0.5035 +vt 0.9021 0.5035 +vt 0.9021 0.5243 +vt 0.8467 0.5243 +vt 0.8467 0.5035 +vt 0.8191 0.5243 +vt 0.8191 0.5035 +vt 0.7914 0.5243 +vt 0.7914 0.5035 +vt 0.7360 0.5243 +vt 0.7360 0.5035 +vt 0.7637 0.5035 +vt 0.7637 0.5243 +vt 0.7084 0.5243 +vt 0.7084 0.5035 +vt 0.6807 0.5243 +vt 0.6807 0.5035 +vt 0.6530 0.5243 +vt 0.6530 0.5035 +vt 0.6254 0.5243 +vt 0.6254 0.5035 +vt 0.5700 0.5243 +vt 0.5700 0.5035 +vt 0.5977 0.5035 +vt 0.5977 0.5243 +vt 0.5424 0.5243 +vt 0.5424 0.5035 +vt 0.5147 0.5243 +vt 0.5147 0.5035 +vt 0.4033 0.4515 +vt 0.4033 0.4389 +vt 0.4309 0.4389 +vt 0.4309 0.4514 +vt 0.4585 0.4515 +vt 0.4585 0.4389 +vt 0.4861 0.4515 +vt 0.4861 0.4389 +vt 0.5137 0.4514 +vt 0.5137 0.4389 +vt 0.5412 0.4515 +vt 0.5413 0.4389 +vt 0.5689 0.4516 +vt 0.5689 0.4389 +vt 0.5965 0.4390 +vt 0.5964 0.4515 +vt 0.6240 0.4516 +vt 0.6241 0.4390 +vt 0.6516 0.4517 +vt 0.6518 0.4391 +vt 0.6793 0.4519 +vt 0.6795 0.4392 +vt 0.7072 0.4392 +vt 0.7071 0.4519 +vt 0.7349 0.4393 +vt 0.7348 0.4519 +vt 0.7625 0.4519 +vt 0.7626 0.4393 +vt 0.7903 0.4393 +vt 0.7902 0.4519 +vt 0.8179 0.4393 +vt 0.8180 0.4519 +vt 0.8459 0.4519 +vt 0.8456 0.4392 +vt 0.8732 0.4391 +vt 0.8741 0.4517 +vt 0.9024 0.4513 +vt 0.9004 0.4387 +vt 0.0145 0.4512 +vt 0.0165 0.4387 +vt 0.0437 0.4390 +vt 0.0429 0.4517 +vt 0.0711 0.4519 +vt 0.0715 0.4391 +vt 0.0993 0.4392 +vt 0.0993 0.4519 +vt 0.1271 0.4391 +vt 0.1271 0.4518 +vt 0.1547 0.4391 +vt 0.1548 0.4517 +vt 0.1823 0.4391 +vt 0.1824 0.4517 +vt 0.2099 0.4390 +vt 0.2100 0.4516 +vt 0.2375 0.4390 +vt 0.2375 0.4515 +vt 0.2927 0.4516 +vt 0.2651 0.4516 +vt 0.2650 0.4390 +vt 0.2927 0.4390 +vt 0.3480 0.4515 +vt 0.3204 0.4515 +vt 0.3203 0.4389 +vt 0.3479 0.4389 +vt 0.3756 0.4516 +vt 0.3756 0.4389 +vt 0.5977 0.6311 +vt 0.5977 0.5265 +vt 0.6254 0.5265 +vt 0.6254 0.6311 +vt 0.7360 0.6311 +vt 0.7360 0.5265 +vt 0.7637 0.5265 +vt 0.7637 0.6311 +vt 0.5424 0.6311 +vt 0.5424 0.5265 +vt 0.5700 0.5265 +vt 0.5700 0.6311 +vt 0.5147 0.6311 +vt 0.5147 0.5265 +vt 0.7914 0.6311 +vt 0.7914 0.5265 +vt 0.8191 0.5265 +vt 0.8191 0.6311 +vt 0.4870 0.6311 +vt 0.4870 0.5265 +vt 0.8467 0.5265 +vt 0.8467 0.6311 +vt 0.4593 0.6311 +vt 0.4593 0.5265 +vt 0.4870 0.5035 +vt 0.4870 0.5243 +vt 0.8744 0.5265 +vt 0.8744 0.6311 +vt 0.4317 0.6311 +vt 0.4317 0.5265 +vt 0.9021 0.5265 +vt 0.9021 0.6311 +vt 0.4040 0.6311 +vt 0.4040 0.5265 +vt 0.0443 0.6311 +vt 0.0443 0.5265 +vt 0.0720 0.5265 +vt 0.0720 0.6311 +vt 0.3763 0.6311 +vt 0.3763 0.5265 +vt 0.0166 0.6311 +vt 0.0166 0.5265 +vt 0.3487 0.6311 +vt 0.3487 0.5265 +vt 0.6807 0.6311 +vt 0.6807 0.5265 +vt 0.7084 0.5265 +vt 0.7084 0.6311 +vt 0.0996 0.5265 +vt 0.0996 0.6311 +vt 0.4868 0.3517 +vt 0.4887 0.0902 +vt 0.5163 0.0903 +vt 0.5144 0.3517 +vt 0.3210 0.6311 +vt 0.3210 0.5265 +vt 0.1273 0.5265 +vt 0.1273 0.6311 +vt 0.2933 0.6311 +vt 0.2933 0.5265 +vt 0.1550 0.5265 +vt 0.1550 0.6311 +vt 0.2656 0.6311 +vt 0.2656 0.5265 +vt 0.1826 0.5265 +vt 0.1826 0.6311 +vt 0.2103 0.6311 +vt 0.2103 0.5265 +vt 0.2380 0.5265 +vt 0.2380 0.6311 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.2934 0.3516 +vt 0.2955 0.0896 +vt 0.3231 0.0897 +vt 0.3210 0.3516 +vt 0.0731 0.0889 +vt 0.1011 0.0889 +vt 0.0998 0.3516 +vt 0.0719 0.3516 +vt 0.3763 0.3517 +vt 0.3784 0.0899 +vt 0.4060 0.0900 +vt 0.4039 0.3517 +vt 0.3508 0.0898 +vt 0.3486 0.3516 +vt 0.5438 0.0904 +vt 0.5419 0.3518 +vt 0.2657 0.3516 +vt 0.2678 0.0895 +vt 0.5695 0.3518 +vt 0.5713 0.0904 +vt 0.5988 0.0905 +vt 0.5971 0.3519 +vt 0.4316 0.3517 +vt 0.4336 0.0901 +vt 0.4612 0.0901 +vt 0.4592 0.3517 +vt 0.1289 0.0890 +vt 0.1567 0.0891 +vt 0.1552 0.3516 +vt 0.1276 0.3516 +vt 0.6530 0.6311 +vt 0.6530 0.5265 +vt 0.8188 0.0907 +vt 0.8463 0.0908 +vt 0.8458 0.3521 +vt 0.8182 0.3521 +vt 0.6537 0.0905 +vt 0.6812 0.0905 +vt 0.6799 0.3520 +vt 0.6523 0.3520 +vt 0.7353 0.3521 +vt 0.7363 0.0906 +vt 0.7638 0.0906 +vt 0.7629 0.3521 +vt 0.7913 0.0906 +vt 0.7905 0.3521 +vt 0.7076 0.3521 +vt 0.7088 0.0905 +vt 0.0451 0.0889 +vt 0.0441 0.3515 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.6110 0.7086 +vt 0.6110 0.6947 +vt 0.6249 0.6947 +vt 0.6249 0.7086 +vt 0.5972 0.7086 +vt 0.5972 0.6947 +vt 0.6388 0.6947 +vt 0.6388 0.7086 +vt 0.6526 0.6947 +vt 0.6526 0.7086 +vt 0.5694 0.7086 +vt 0.5694 0.6947 +vt 0.5833 0.6947 +vt 0.5833 0.7086 +vt 0.8732 0.3520 +vt 0.9003 0.3518 +vt 0.2381 0.3516 +vt 0.1828 0.3516 +vt 0.6247 0.3519 +vt 0.2105 0.3516 +vt 0.7611 0.6510 +vt 0.7387 0.6510 +vt 0.5674 0.6510 +vt 0.5450 0.6510 +vt 0.5950 0.6510 +vt 0.5727 0.6510 +vt 0.5120 0.6510 +vt 0.4897 0.6510 +vt 0.4567 0.6510 +vt 0.4343 0.6510 +vt 0.4844 0.6510 +vt 0.4620 0.6510 +vt 0.5397 0.6510 +vt 0.5173 0.6510 +vt 0.6227 0.6510 +vt 0.6004 0.6510 +vt 0.6504 0.6510 +vt 0.6280 0.6510 +vt 0.6780 0.6510 +vt 0.6557 0.6510 +vt 0.7057 0.6510 +vt 0.6834 0.6510 +vt 0.7334 0.6510 +vt 0.7110 0.6510 +vt 0.7887 0.6510 +vt 0.7664 0.6510 +vt 0.8164 0.6510 +vt 0.7940 0.6510 +vt 0.8441 0.6510 +vt 0.8217 0.6510 +vt 0.8717 0.6510 +vt 0.8494 0.6510 +vt 0.4290 0.6510 +vt 0.4067 0.6510 +vt 0.4013 0.6510 +vt 0.3790 0.6510 +vt 0.0693 0.6510 +vt 0.0469 0.6510 +vt 0.8994 0.6510 +vt 0.8771 0.6510 +vt 0.0416 0.6510 +vt 0.0193 0.6510 +vt 0.0970 0.6510 +vt 0.0746 0.6510 +vt 0.1246 0.6510 +vt 0.1023 0.6510 +vt 0.1523 0.6510 +vt 0.1300 0.6510 +vt 0.1800 0.6510 +vt 0.1576 0.6510 +vt 0.2353 0.6510 +vt 0.2130 0.6510 +vt 0.2630 0.6510 +vt 0.2406 0.6510 +vt 0.2907 0.6510 +vt 0.2683 0.6510 +vt 0.3183 0.6510 +vt 0.2960 0.6510 +vt 0.3460 0.6510 +vt 0.3236 0.6510 +vt 0.3737 0.6510 +vt 0.3513 0.6510 +vt 0.2076 0.6510 +vt 0.1853 0.6510 +vt 0.9001 0.0912 +vt 0.8734 0.0909 +vt 0.0167 0.3513 +vt 0.2401 0.0894 +vt 0.1845 0.0892 +vt 0.6263 0.0905 +vt 0.2123 0.0893 +vt 0.0173 0.0891 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 1.0000 0.0000 +vn -0.2113 0.6857 -0.6965 +vn -0.2113 -0.6857 -0.6965 +vn -0.3431 -0.6857 -0.6419 +vn -0.3431 0.6857 -0.6419 +vn -0.0713 0.6857 -0.7244 +vn -0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn 0.0713 -0.6857 -0.7244 +vn 0.2113 0.6857 -0.6965 +vn 0.2113 -0.6857 -0.6965 +vn 0.3431 0.6857 -0.6419 +vn 0.3431 -0.6857 -0.6419 +vn 0.4617 0.6857 -0.5626 +vn 0.4617 -0.6857 -0.5626 +vn 0.5626 0.6857 -0.4617 +vn 0.5626 -0.6857 -0.4617 +vn 0.6419 0.6857 -0.3431 +vn 0.6419 -0.6857 -0.3431 +vn 0.6965 0.6857 -0.2113 +vn 0.6965 -0.6857 -0.2113 +vn 0.7244 0.6857 -0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.7244 0.6857 0.0713 +vn 0.7244 -0.6857 0.0713 +vn 0.6965 0.6857 0.2113 +vn 0.6965 -0.6857 0.2113 +vn 0.6419 0.6857 0.3431 +vn 0.6419 -0.6857 0.3431 +vn 0.5626 0.6857 0.4617 +vn 0.5626 -0.6857 0.4617 +vn 0.4617 0.6857 0.5626 +vn 0.4617 -0.6857 0.5626 +vn 0.3431 0.6857 0.6419 +vn 0.3431 -0.6857 0.6419 +vn 0.2113 0.6857 0.6965 +vn 0.2113 -0.6857 0.6965 +vn 0.0713 0.6857 0.7244 +vn 0.0713 -0.6857 0.7244 +vn -0.0713 0.6857 0.7244 +vn -0.0713 -0.6857 0.7244 +vn -0.2113 0.6857 0.6965 +vn -0.2113 -0.6857 0.6965 +vn -0.4617 0.6857 0.5626 +vn -0.4617 -0.6857 0.5626 +vn -0.3431 -0.6857 0.6419 +vn -0.3431 0.6857 0.6419 +vn -0.5626 0.6857 0.4617 +vn -0.5626 -0.6857 0.4617 +vn -0.6419 0.6857 0.3431 +vn -0.6419 -0.6857 0.3431 +vn -0.6965 0.6857 0.2113 +vn -0.6965 -0.6857 0.2113 +vn -0.7244 0.6857 0.0713 +vn -0.7244 -0.6857 0.0713 +vn -0.6965 0.6857 -0.2113 +vn -0.6965 -0.6857 -0.2113 +vn -0.7244 -0.6857 -0.0713 +vn -0.7244 0.6857 -0.0713 +vn -0.6419 0.6857 -0.3431 +vn -0.6419 -0.6857 -0.3431 +vn -0.5626 0.6857 -0.4617 +vn -0.5626 -0.6857 -0.4617 +vn -0.8614 0.2147 0.4604 +vn -0.8658 0.1903 0.4628 +vn -0.9395 0.1903 0.2850 +vn -0.9346 0.2147 0.2835 +vn -0.9720 0.2147 0.0957 +vn -0.9770 0.1903 0.0962 +vn -0.9720 0.2147 -0.0957 +vn -0.9770 0.1903 -0.0962 +vn -0.9346 0.2147 -0.2835 +vn -0.9395 0.1903 -0.2850 +vn -0.8614 0.2147 -0.4604 +vn -0.8658 0.1903 -0.4628 +vn -0.7550 0.2147 -0.6196 +vn -0.7589 0.1903 -0.6228 +vn -0.6228 0.1903 -0.7589 +vn -0.6196 0.2147 -0.7550 +vn -0.4604 0.2147 -0.8614 +vn -0.4628 0.1903 -0.8658 +vn -0.2835 0.2147 -0.9346 +vn -0.2850 0.1903 -0.9395 +vn -0.0957 0.2147 -0.9720 +vn -0.0962 0.1903 -0.9770 +vn 0.0962 0.1903 -0.9770 +vn 0.0957 0.2147 -0.9720 +vn 0.2850 0.1903 -0.9395 +vn 0.2835 0.2147 -0.9346 +vn 0.4604 0.2147 -0.8614 +vn 0.4628 0.1903 -0.8658 +vn 0.6228 0.1903 -0.7589 +vn 0.6196 0.2147 -0.7550 +vn 0.7589 0.1903 -0.6228 +vn 0.7550 0.2147 -0.6196 +vn 0.8614 0.2147 -0.4604 +vn 0.8658 0.1903 -0.4628 +vn 0.9395 0.1903 -0.2850 +vn 0.9346 0.2147 -0.2835 +vn 0.9720 0.2147 -0.0957 +vn 0.9770 0.1903 -0.0962 +vn 0.9770 0.1903 0.0962 +vn 0.9720 0.2147 0.0957 +vn 0.9346 0.2147 0.2835 +vn 0.9395 0.1903 0.2850 +vn 0.8658 0.1903 0.4628 +vn 0.8614 0.2147 0.4604 +vn 0.7589 0.1903 0.6228 +vn 0.7550 0.2147 0.6196 +vn 0.6228 0.1903 0.7589 +vn 0.6196 0.2147 0.7550 +vn 0.4628 0.1903 0.8658 +vn 0.4604 0.2147 0.8614 +vn 0.2850 0.1903 0.9395 +vn 0.2835 0.2147 0.9346 +vn 0.0962 0.1903 0.9770 +vn 0.0957 0.2147 0.9720 +vn -0.2835 0.2147 0.9346 +vn -0.0957 0.2147 0.9720 +vn -0.0962 0.1903 0.9770 +vn -0.2850 0.1903 0.9395 +vn -0.6196 0.2147 0.7550 +vn -0.4604 0.2147 0.8614 +vn -0.4628 0.1903 0.8658 +vn -0.6228 0.1903 0.7589 +vn -0.7550 0.2147 0.6196 +vn -0.7589 0.1903 0.6228 +vn 0.5083 -0.5983 -0.6193 +vn 0.5019 0.6115 -0.6116 +vn 0.6116 0.6115 -0.5019 +vn 0.6193 -0.5983 -0.5083 +vn 0.7974 -0.5983 0.0785 +vn 0.7874 0.6115 0.0775 +vn 0.7571 0.6115 0.2297 +vn 0.7667 -0.5983 0.2326 +vn 0.2326 -0.5983 -0.7667 +vn 0.2297 0.6115 -0.7571 +vn 0.3730 0.6115 -0.6978 +vn 0.3777 -0.5983 -0.7066 +vn 0.0785 -0.5983 -0.7974 +vn 0.0775 0.6115 -0.7874 +vn 0.7066 -0.5983 0.3777 +vn 0.6978 0.6115 0.3730 +vn 0.6116 0.6115 0.5019 +vn 0.6193 -0.5983 0.5083 +vn -0.0785 -0.5983 -0.7974 +vn -0.0775 0.6115 -0.7874 +vn 0.5019 0.6115 0.6116 +vn 0.5083 -0.5983 0.6193 +vn -0.2326 -0.5983 -0.7667 +vn -0.2297 0.6115 -0.7571 +vn -0.4617 -0.6857 -0.5626 +vn -0.4617 0.6857 -0.5626 +vn 0.3730 0.6115 0.6978 +vn 0.3777 -0.5983 0.7066 +vn -0.3777 -0.5983 -0.7066 +vn -0.3730 0.6115 -0.6978 +vn 0.2297 0.6115 0.7571 +vn 0.2326 -0.5983 0.7667 +vn -0.5083 -0.5983 -0.6193 +vn -0.5019 0.6115 -0.6116 +vn 0.0785 -0.5983 0.7974 +vn 0.0775 0.6115 0.7874 +vn -0.0775 0.6115 0.7874 +vn -0.0785 -0.5983 0.7974 +vn -0.6193 -0.5983 -0.5083 +vn -0.6116 0.6115 -0.5019 +vn -0.7066 -0.5983 -0.3777 +vn -0.6978 0.6115 -0.3730 +vn 0.7667 -0.5983 -0.2326 +vn 0.7571 0.6115 -0.2297 +vn 0.7874 0.6115 -0.0775 +vn 0.7974 -0.5983 -0.0785 +vn -0.2297 0.6115 0.7571 +vn -0.2326 -0.5983 0.7667 +vn -0.9917 0.0833 -0.0977 +vn -0.9952 0.0000 -0.0980 +vn -0.9569 0.0000 -0.2903 +vn -0.9536 0.0833 -0.2893 +vn -0.7667 -0.5983 -0.2326 +vn -0.7571 0.6115 -0.2297 +vn -0.3730 0.6115 0.6978 +vn -0.3777 -0.5983 0.7066 +vn -0.7974 -0.5983 -0.0785 +vn -0.7874 0.6115 -0.0775 +vn -0.5019 0.6115 0.6116 +vn -0.5083 -0.5983 0.6193 +vn -0.7974 -0.5983 0.0785 +vn -0.7874 0.6115 0.0775 +vn -0.6116 0.6115 0.5019 +vn -0.6193 -0.5983 0.5083 +vn -0.7066 -0.5983 0.3777 +vn -0.6978 0.6115 0.3730 +vn -0.7571 0.6115 0.2297 +vn -0.7667 -0.5983 0.2326 +vn -0.3032 0.6100 -0.7321 +vn -0.3827 0.0000 -0.9239 +vn -0.9914 0.0000 -0.1305 +vn -0.7856 0.6100 -0.1034 +vn 0.4824 0.6100 -0.6287 +vn 0.6088 0.0000 -0.7933 +vn -0.6088 0.0000 0.7933 +vn -0.4824 0.6100 0.6287 +vn 0.3827 0.0000 0.9239 +vn 0.3032 0.6100 0.7321 +vn 0.9914 0.0000 0.1305 +vn 0.7856 0.6100 0.1034 +vn -0.7321 0.6100 -0.3032 +vn -0.9239 0.0000 -0.3827 +vn -0.7933 0.0000 0.6088 +vn -0.6287 0.6100 0.4824 +vn -0.1034 0.6100 -0.7856 +vn -0.1305 0.0000 -0.9914 +vn 0.1305 0.0000 0.9914 +vn 0.1034 0.6100 0.7856 +vn 0.9239 0.0000 0.3827 +vn 0.7321 0.6100 0.3032 +vn 0.7933 0.0000 -0.6088 +vn 0.6287 0.6100 -0.4824 +vn -0.7321 0.6100 0.3032 +vn -0.9239 0.0000 0.3827 +vn -0.1305 0.0000 0.9914 +vn -0.1034 0.6100 0.7856 +vn -0.6287 0.6100 -0.4824 +vn -0.7933 0.0000 -0.6088 +vn 0.7933 0.0000 0.6088 +vn 0.6287 0.6100 0.4824 +vn 0.9239 0.0000 -0.3827 +vn 0.7321 0.6100 -0.3032 +vn 0.1305 0.0000 -0.9914 +vn 0.1034 0.6100 -0.7856 +vn -0.3032 0.6100 0.7321 +vn -0.3827 0.0000 0.9239 +vn 0.6088 0.0000 0.7933 +vn 0.4824 0.6100 0.6287 +vn -0.7856 0.6100 0.1034 +vn -0.9914 0.0000 0.1305 +vn 0.9914 0.0000 -0.1305 +vn 0.7856 0.6100 -0.1034 +vn 0.3827 0.0000 -0.9239 +vn 0.3032 0.6100 -0.7321 +vn -0.6088 0.0000 -0.7933 +vn -0.4824 0.6100 -0.6287 +vn -0.2893 0.0833 0.9536 +vn -0.2903 0.0000 0.9569 +vn -0.4714 0.0000 0.8819 +vn -0.4697 0.0833 0.8788 +vn 0.9569 0.0000 0.2903 +vn 0.8819 0.0000 0.4714 +vn 0.8788 0.0833 0.4697 +vn 0.9536 0.0833 0.2893 +vn -0.7703 0.0833 0.6322 +vn -0.7730 0.0000 0.6344 +vn -0.8819 0.0000 0.4714 +vn -0.8788 0.0833 0.4697 +vn -0.6344 0.0000 0.7730 +vn -0.6322 0.0833 0.7703 +vn -0.8819 0.0000 -0.4714 +vn -0.8788 0.0833 -0.4697 +vn -0.0977 0.0833 0.9917 +vn -0.0980 0.0000 0.9952 +vn -0.7703 0.0833 -0.6322 +vn -0.7730 0.0000 -0.6344 +vn -0.6344 0.0000 -0.7730 +vn -0.6322 0.0833 -0.7703 +vn -0.9536 0.0833 0.2893 +vn -0.9569 0.0000 0.2903 +vn -0.9952 0.0000 0.0980 +vn -0.9917 0.0833 0.0977 +vn 0.7730 0.0000 0.6344 +vn 0.6344 0.0000 0.7730 +vn 0.6322 0.0833 0.7703 +vn 0.7703 0.0833 0.6322 +vn 0.7066 -0.5983 -0.3777 +vn 0.6978 0.6115 -0.3730 +vn 0.7730 0.0000 -0.6344 +vn 0.8819 0.0000 -0.4714 +vn 0.8788 0.0833 -0.4697 +vn 0.7703 0.0833 -0.6322 +vn -0.2903 0.0000 -0.9569 +vn -0.0980 0.0000 -0.9952 +vn -0.0977 0.0833 -0.9917 +vn -0.2893 0.0833 -0.9536 +vn 0.2893 0.0833 -0.9536 +vn 0.2903 0.0000 -0.9569 +vn 0.4714 0.0000 -0.8819 +vn 0.4697 0.0833 -0.8788 +vn 0.6344 0.0000 -0.7730 +vn 0.6322 0.0833 -0.7703 +vn 0.0977 0.0833 -0.9917 +vn 0.0980 0.0000 -0.9952 +vn 0.9952 0.0000 0.0980 +vn 0.9917 0.0833 0.0977 +vn -0.5603 0.6100 -0.5603 +vn -0.7071 0.0000 -0.7071 +vn -0.9659 0.0000 0.2588 +vn -0.7654 0.6100 0.2051 +vn 0.2051 0.6100 -0.7654 +vn 0.2588 0.0000 -0.9659 +vn -0.2588 0.0000 0.9659 +vn -0.2051 0.6100 0.7654 +vn 0.7071 0.0000 0.7071 +vn 0.5603 0.6100 0.5603 +vn 0.9659 0.0000 -0.2588 +vn 0.7654 0.6100 -0.2051 +vn -0.7924 0.6100 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.5000 0.0000 0.8660 +vn -0.3962 0.6100 0.6862 +vn -0.3962 0.6100 -0.6862 +vn -0.5000 0.0000 -0.8660 +vn 0.5000 0.0000 0.8660 +vn 0.3962 0.6100 0.6862 +vn 1.0000 0.0000 0.0000 +vn 0.7924 0.6100 0.0000 +vn 0.5000 0.0000 -0.8660 +vn 0.3962 0.6100 -0.6862 +vn -0.5603 0.6100 0.5603 +vn -0.7071 0.0000 0.7071 +vn 0.2588 0.0000 0.9659 +vn 0.2051 0.6100 0.7654 +vn -0.7654 0.6100 -0.2051 +vn -0.9659 0.0000 -0.2588 +vn 0.9659 0.0000 0.2588 +vn 0.7654 0.6100 0.2051 +vn 0.7071 0.0000 -0.7071 +vn 0.5603 0.6100 -0.5603 +vn -0.2588 0.0000 -0.9659 +vn -0.2051 0.6100 -0.7654 +vn 0.0000 0.6100 0.7924 +vn 0.0000 0.0000 1.0000 +vn 0.8660 0.0000 0.5000 +vn 0.6862 0.6100 0.3962 +vn -0.6862 0.6100 0.3962 +vn -0.8660 0.0000 0.5000 +vn 0.8660 0.0000 -0.5000 +vn 0.6862 0.6100 -0.3962 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.6100 -0.7924 +vn -0.8660 0.0000 -0.5000 +vn -0.6862 0.6100 -0.3962 +vn 0.9536 0.0833 -0.2893 +vn 0.9917 0.0833 -0.0977 +vn 0.0977 0.0833 0.9917 +vn 0.4697 0.0833 0.8788 +vn -0.4697 0.0833 -0.8788 +vn 0.2893 0.0833 0.9536 +vn 0.2269 -0.9715 0.0688 +vn 0.2360 -0.9715 0.0232 +vn 0.1118 -0.9715 -0.2091 +vn 0.0688 -0.9715 -0.2269 +vn 0.1504 -0.9715 -0.1833 +vn 0.0232 -0.9715 -0.2360 +vn -0.0232 -0.9715 -0.2360 +vn -0.0688 -0.9715 -0.2269 +vn -0.1118 -0.9715 -0.2091 +vn 0.1833 -0.9715 -0.1504 +vn 0.2091 -0.9715 -0.1118 +vn 0.2269 -0.9715 -0.0688 +vn 0.2360 -0.9715 -0.0232 +vn 0.2091 -0.9715 0.1118 +vn 0.1833 -0.9715 0.1504 +vn 0.1504 -0.9715 0.1833 +vn 0.1118 -0.9715 0.2091 +vn -0.1504 -0.9715 -0.1833 +vn -0.1833 -0.9715 -0.1504 +vn -0.0232 -0.9715 0.2360 +vn 0.0232 -0.9715 0.2360 +vn 0.0688 -0.9715 0.2269 +vn -0.0688 -0.9715 0.2269 +vn -0.1118 -0.9715 0.2091 +vn -0.1504 -0.9715 0.1833 +vn -0.1833 -0.9715 0.1504 +vn -0.2269 -0.9715 0.0688 +vn -0.2091 -0.9715 0.1118 +vn -0.2360 -0.9715 0.0232 +vn -0.2360 -0.9715 -0.0232 +vn -0.2269 -0.9715 -0.0688 +vn -0.2091 -0.9715 -0.1118 +vn 0.9952 0.0000 -0.0980 +vn 0.9569 0.0000 -0.2903 +vn 0.0980 0.0000 0.9952 +vn 0.4714 0.0000 0.8819 +vn -0.4714 0.0000 -0.8819 +vn 0.2903 0.0000 0.9569 +g Pipe_Cylinder.002_None +s off +f 393/1/1 402/2/1 406/3/1 410/4/1 414/5/1 420/6/1 418/7/1 423/8/1 428/9/1 432/10/1 436/11/1 440/12/1 446/13/1 447/14/1 444/15/1 442/16/1 438/17/1 434/18/1 430/19/1 425/20/1 421/21/1 415/22/1 412/23/1 407/24/1 404/25/1 399/26/1 396/27/1 398/28/1 392/29/1 386/30/1 388/31/1 390/32/1 +f 65/33/2 68/34/2 69/35/2 70/36/2 71/37/2 72/38/2 +f 77/39/2 80/40/2 81/41/2 82/42/2 83/43/2 84/44/2 +f 89/45/2 92/46/2 93/47/2 94/48/2 95/49/2 96/50/2 +f 101/51/2 104/52/2 105/53/2 106/54/2 107/55/2 108/56/2 +f 113/57/2 116/58/2 117/59/2 118/60/2 119/61/2 120/62/2 +f 125/63/2 128/64/2 129/65/2 130/66/2 131/67/2 132/68/2 +f 137/69/2 140/70/2 141/71/2 142/72/2 143/73/2 144/74/2 +f 149/75/2 152/76/2 153/77/2 154/78/2 155/79/2 156/80/2 +f 193/81/2 194/82/2 224/83/2 223/84/2 221/85/2 222/86/2 220/87/2 219/88/2 218/89/2 217/90/2 215/91/2 216/92/2 214/93/2 213/94/2 212/95/2 211/96/2 210/97/2 209/98/2 208/99/2 207/100/2 206/101/2 205/102/2 204/103/2 203/104/2 202/105/2 201/106/2 200/107/2 199/108/2 198/109/2 197/110/2 196/111/2 195/112/2 +f 172/113/1 189/114/1 173/115/1 174/116/1 175/117/1 176/118/1 177/119/1 190/120/1 178/121/1 179/122/1 180/123/1 191/124/1 181/125/1 192/126/1 182/127/1 183/128/1 184/129/1 185/130/1 186/131/1 161/132/1 162/133/1 163/134/1 164/135/1 165/136/1 166/137/1 167/138/1 168/139/1 169/140/1 187/141/1 170/142/1 188/143/1 171/144/1 +f 226/145/2 225/146/2 230/147/2 233/148/2 232/149/2 235/150/2 237/151/2 239/152/2 241/153/2 243/154/2 245/155/2 247/156/2 249/157/2 252/158/2 250/159/2 254/160/2 253/161/2 255/162/2 256/163/2 251/164/2 248/165/2 246/166/2 244/167/2 242/168/2 240/169/2 238/170/2 236/171/2 234/172/2 231/173/2 229/174/2 228/175/2 227/176/2 +f 257/177/2 260/178/2 261/179/2 262/180/2 263/181/2 264/182/2 +f 269/183/2 272/184/2 273/185/2 274/186/2 275/187/2 276/188/2 +f 281/189/2 284/190/2 285/191/2 286/192/2 287/193/2 288/194/2 +f 293/195/2 296/196/2 297/197/2 298/198/2 299/199/2 300/200/2 +f 305/201/2 308/202/2 309/203/2 310/204/2 311/205/2 312/206/2 +f 317/207/2 320/208/2 321/209/2 322/210/2 323/211/2 324/212/2 +f 329/213/2 332/214/2 333/215/2 334/216/2 335/217/2 336/218/2 +f 341/219/2 344/220/2 345/221/2 346/222/2 347/223/2 348/224/2 +s 1 +f 196/225/3 163/226/4 162/227/5 195/228/6 +f 197/229/7 164/230/8 163/226/4 196/225/3 +f 198/231/9 165/232/10 164/230/8 197/229/7 +f 199/233/11 166/234/12 165/232/10 198/231/9 +f 200/235/13 167/236/14 166/234/12 199/233/11 +f 201/237/15 168/238/16 167/236/14 200/235/13 +f 202/239/17 169/240/18 168/238/16 201/237/15 +f 203/241/19 187/242/20 169/240/18 202/239/17 +f 204/243/21 170/244/22 187/242/20 203/241/19 +f 205/245/23 188/246/24 170/244/22 204/243/21 +f 206/247/25 171/248/26 188/246/24 205/245/23 +f 207/249/27 172/250/28 171/248/26 206/247/25 +f 208/251/29 189/252/30 172/250/28 207/249/27 +f 209/253/31 173/254/32 189/252/30 208/251/29 +f 210/255/33 174/256/34 173/254/32 209/253/31 +f 211/257/35 175/258/36 174/256/34 210/255/33 +f 212/259/37 176/260/38 175/261/36 211/262/35 +f 213/263/39 177/264/40 176/260/38 212/259/37 +f 214/265/41 190/266/42 177/264/40 213/263/39 +f 216/267/43 178/268/44 190/266/42 214/265/41 +f 217/269/45 180/270/46 179/271/47 215/272/48 +f 215/272/48 179/271/47 178/268/44 216/267/43 +f 218/273/49 191/274/50 180/270/46 217/269/45 +f 219/275/51 181/276/52 191/274/50 218/273/49 +f 220/277/53 192/278/54 181/276/52 219/275/51 +f 222/279/55 182/280/56 192/278/54 220/277/53 +f 223/281/57 184/282/58 183/283/59 221/284/60 +f 221/284/60 183/283/59 182/280/56 222/279/55 +f 224/285/61 185/286/62 184/282/58 223/281/57 +f 194/287/63 186/288/64 185/286/62 224/285/61 +f 30/289/65 33/290/66 34/291/67 1/292/68 +f 2/293/69 1/292/68 34/291/67 35/294/70 +f 3/295/71 2/293/69 35/294/70 36/296/72 +f 4/297/73 3/295/71 36/296/72 37/298/74 +f 5/299/75 4/297/73 37/298/74 38/300/76 +f 6/301/77 5/299/75 38/300/76 39/302/78 +f 6/301/77 39/302/78 40/303/79 7/304/80 +f 8/305/81 7/304/80 40/303/79 41/306/82 +f 9/307/83 8/305/81 41/306/82 42/308/84 +f 10/309/85 9/307/83 42/308/84 43/310/86 +f 10/309/85 43/310/86 44/311/87 11/312/88 +f 11/312/88 44/311/87 45/313/89 31/314/90 +f 12/315/91 46/316/92 47/317/93 13/318/94 +f 31/314/90 45/313/89 46/316/92 12/315/91 +f 13/318/94 47/317/93 48/319/95 14/320/96 +f 15/321/97 14/320/96 48/319/95 49/322/98 +f 15/321/97 49/322/98 50/323/99 16/324/100 +f 17/325/101 16/324/100 50/323/99 51/326/102 +f 17/327/101 51/328/102 52/329/103 18/330/104 +f 19/331/105 18/330/104 52/329/103 53/332/106 +f 19/331/105 53/332/106 54/333/107 20/334/108 +f 20/334/108 54/333/107 55/335/109 22/336/110 +f 22/336/110 55/335/109 56/337/111 21/338/112 +f 21/338/112 56/337/111 57/339/113 23/340/114 +f 23/340/114 57/339/113 58/341/115 24/342/116 +f 24/342/116 58/341/115 59/343/117 32/344/118 +f 27/345/119 25/346/120 60/347/121 61/348/122 +f 25/346/120 32/344/118 59/343/117 60/347/121 +f 28/349/123 26/350/124 62/351/125 63/352/126 +f 27/345/119 61/348/122 62/351/125 26/350/124 +f 29/353/127 28/349/123 63/352/126 64/354/128 +f 29/353/127 64/354/128 33/290/66 30/289/65 +f 397/355/129 230/356/130 225/357/131 391/358/132 +f 394/359/133 229/360/134 231/361/135 401/362/136 +f 400/363/137 232/364/138 233/365/139 395/366/140 +f 403/367/141 235/368/142 232/364/138 400/363/137 +f 395/366/140 233/365/139 230/356/130 397/355/129 +f 405/369/143 234/370/144 236/371/145 409/372/146 +f 408/373/147 237/374/148 235/368/142 403/367/141 +f 409/372/146 236/371/145 238/375/149 413/376/150 +f 411/377/151 239/378/152 237/374/148 408/373/147 +f 195/228/6 162/227/5 161/379/153 193/380/154 +f 413/376/150 238/375/149 240/381/155 419/382/156 +f 416/383/157 241/384/158 239/378/152 411/377/151 +f 419/382/156 240/381/155 242/385/159 417/386/160 +f 422/387/161 243/388/162 241/384/158 416/383/157 +f 424/389/163 244/390/164 246/391/165 427/392/166 +f 426/393/167 245/394/168 243/388/162 422/387/161 +f 417/395/160 242/396/159 244/390/164 424/389/163 +f 429/397/169 247/398/170 245/394/168 426/393/167 +f 387/399/171 227/400/172 228/401/173 389/402/174 +f 427/392/166 246/391/165 248/403/175 431/404/176 +f 476/405/177 374/406/178 368/407/179 473/408/180 +f 433/409/181 249/410/182 247/398/170 429/397/169 +f 431/404/176 248/403/175 251/411/183 435/412/184 +f 437/413/185 252/414/186 249/410/182 433/409/181 +f 435/412/184 251/411/183 256/415/187 439/416/188 +f 401/362/136 231/361/135 234/370/144 405/369/143 +f 441/417/189 250/418/190 252/414/186 437/413/185 +f 439/416/188 256/415/187 255/419/191 445/420/192 +f 389/402/174 228/401/173 229/360/134 394/359/133 +f 448/421/193 253/422/194 254/423/195 443/424/196 +f 443/424/196 254/423/195 250/418/190 441/417/189 +f 445/420/192 255/419/191 253/422/194 448/421/193 +f 65/425/197 66/426/198 67/427/199 68/428/200 +f 72/429/201 73/430/202 66/426/198 65/425/197 +f 68/428/200 67/427/199 74/431/203 69/432/204 +f 69/432/204 74/431/203 75/433/205 70/434/206 +f 70/435/206 75/436/205 76/437/207 71/438/208 +f 71/438/208 76/437/207 73/430/202 72/429/201 +f 77/439/209 78/440/210 79/441/211 80/442/212 +f 84/443/213 85/444/214 78/440/210 77/439/209 +f 80/442/212 79/441/211 86/445/215 81/446/216 +f 81/446/216 86/445/215 87/447/217 82/448/218 +f 82/449/218 87/450/217 88/451/219 83/452/220 +f 83/452/220 88/451/219 85/444/214 84/443/213 +f 89/453/221 90/454/222 91/455/223 92/456/224 +f 96/457/225 97/458/226 90/454/222 89/453/221 +f 92/456/224 91/455/223 98/459/227 93/460/228 +f 93/460/228 98/459/227 99/461/229 94/462/230 +f 94/463/230 99/464/229 100/465/231 95/466/232 +f 95/466/232 100/465/231 97/458/226 96/457/225 +f 101/467/233 102/468/234 103/469/235 104/470/236 +f 108/471/237 109/472/238 102/468/234 101/467/233 +f 104/470/236 103/469/235 110/473/239 105/474/240 +f 105/474/240 110/473/239 111/475/241 106/476/242 +f 106/477/242 111/478/241 112/479/243 107/480/244 +f 107/480/244 112/479/243 109/472/238 108/471/237 +f 113/481/206 114/482/205 115/483/207 116/484/208 +f 120/485/204 121/486/203 114/482/205 113/481/206 +f 116/484/208 115/483/207 122/487/202 117/488/201 +f 117/488/201 122/487/202 123/489/198 118/490/197 +f 118/491/197 123/492/198 124/493/199 119/494/200 +f 119/494/200 124/493/199 121/486/203 120/485/204 +f 125/495/218 126/496/217 127/497/219 128/498/220 +f 132/499/216 133/500/215 126/496/217 125/495/218 +f 128/498/220 127/497/219 134/501/214 129/502/213 +f 129/502/213 134/501/214 135/503/210 130/504/209 +f 130/505/209 135/506/210 136/507/211 131/508/212 +f 131/508/212 136/507/211 133/500/215 132/499/216 +f 137/509/230 138/510/229 139/511/231 140/512/232 +f 144/513/228 145/514/227 138/510/229 137/509/230 +f 140/512/232 139/511/231 146/515/226 141/516/225 +f 141/516/225 146/515/226 147/517/222 142/518/221 +f 142/519/221 147/520/222 148/521/223 143/522/224 +f 143/522/224 148/521/223 145/514/227 144/513/228 +f 149/523/242 150/524/241 151/525/243 152/526/244 +f 156/527/240 157/528/239 150/524/241 149/523/242 +f 152/526/244 151/525/243 158/529/238 153/530/237 +f 153/530/237 158/529/238 159/531/234 154/532/233 +f 154/533/233 159/534/234 160/535/235 155/536/236 +f 155/536/236 160/535/235 157/528/239 156/527/240 +f 478/537/245 379/538/246 372/539/247 475/540/248 +f 373/541/249 354/542/250 464/543/251 463/544/252 +f 470/545/253 360/546/254 380/547/255 479/548/256 +f 475/540/248 372/539/247 369/549/257 458/550/258 +f 473/408/180 368/407/179 356/551/259 468/552/260 +f 466/553/261 353/554/262 379/538/246 478/537/245 +f 369/549/257 360/546/254 470/545/253 458/550/258 +f 480/555/263 382/556/264 378/557/265 449/558/266 +f 472/559/267 367/560/268 355/561/269 467/562/270 +f 366/563/271 377/564/272 454/565/273 465/566/274 +f 354/542/250 366/563/271 465/566/274 464/543/251 +f 385/567/275 226/568/276 227/400/172 387/399/171 +f 193/380/154 161/379/153 186/288/64 194/287/63 +f 365/569/277 362/570/278 460/571/279 452/572/280 +f 467/562/270 355/561/269 374/406/178 476/405/177 +f 359/573/281 375/574/282 459/575/283 451/576/284 +f 477/577/285 376/578/286 370/579/287 474/580/288 +f 474/580/288 370/579/287 364/581/289 471/582/290 +f 469/583/291 358/584/292 376/578/286 477/577/285 +f 361/585/293 373/541/249 463/544/252 462/586/294 +f 257/587/295 258/588/296 259/589/297 260/590/298 +f 264/591/299 265/592/300 258/588/296 257/587/295 +f 260/590/298 259/589/297 266/593/301 261/594/302 +f 261/594/302 266/593/301 267/595/303 262/596/304 +f 262/597/304 267/598/303 268/599/305 263/600/306 +f 263/600/306 268/599/305 265/592/300 264/591/299 +f 269/601/307 270/602/308 271/603/309 272/604/310 +f 276/605/311 277/606/312 270/602/308 269/601/307 +f 272/604/310 271/603/309 278/607/313 273/608/314 +f 273/608/314 278/607/313 279/609/315 274/610/316 +f 274/611/316 279/612/315 280/613/317 275/614/318 +f 275/614/318 280/613/317 277/606/312 276/605/311 +f 281/615/319 282/616/320 283/617/321 284/618/322 +f 288/619/323 289/620/324 282/616/320 281/615/319 +f 284/618/322 283/617/321 290/621/325 285/622/326 +f 285/622/326 290/621/325 291/623/327 286/624/328 +f 286/625/328 291/626/327 292/627/329 287/628/330 +f 287/628/330 292/627/329 289/620/324 288/619/323 +f 293/629/331 294/630/332 295/631/333 296/632/334 +f 300/633/335 301/634/336 294/630/332 293/629/331 +f 296/632/334 295/631/333 302/635/337 297/636/338 +f 297/636/338 302/635/337 303/637/339 298/638/340 +f 298/639/340 303/640/339 304/641/341 299/642/342 +f 299/642/342 304/641/341 301/634/336 300/633/335 +f 305/643/304 306/644/303 307/645/305 308/646/306 +f 312/647/302 313/648/301 306/644/303 305/643/304 +f 308/646/306 307/645/305 314/649/300 309/650/299 +f 309/650/299 314/649/300 315/651/296 310/652/295 +f 310/653/295 315/654/296 316/655/297 311/656/298 +f 311/656/298 316/655/297 313/648/301 312/647/302 +f 317/657/316 318/658/315 319/659/317 320/660/318 +f 324/661/314 325/662/313 318/658/315 317/657/316 +f 320/660/318 319/659/317 326/663/312 321/664/311 +f 321/664/311 326/663/312 327/665/308 322/666/307 +f 322/667/307 327/668/308 328/669/309 323/670/310 +f 323/670/310 328/669/309 325/662/313 324/661/314 +f 329/671/328 330/672/327 331/673/329 332/674/330 +f 336/675/326 337/676/325 330/672/327 329/671/328 +f 332/674/330 331/673/329 338/677/324 333/678/323 +f 333/678/323 338/677/324 339/679/320 334/680/319 +f 334/681/319 339/682/320 340/683/321 335/684/322 +f 335/684/322 340/683/321 337/676/325 336/675/326 +f 341/685/340 342/686/339 343/687/341 344/688/342 +f 348/689/338 349/690/337 342/686/339 341/685/340 +f 344/688/342 343/687/341 350/691/336 345/692/335 +f 345/692/335 350/691/336 351/693/332 346/694/331 +f 346/695/331 351/696/332 352/697/333 347/698/334 +f 347/698/334 352/697/333 349/690/337 348/689/338 +f 479/548/256 380/547/255 367/560/268 472/559/267 +f 468/552/260 356/551/259 382/556/264 480/555/263 +f 453/699/343 461/700/344 51/326/102 50/323/99 +f 457/701/345 466/553/261 60/347/121 59/343/117 +f 460/571/279 453/699/343 50/323/99 49/322/98 +f 454/565/273 455/702/346 57/339/113 56/337/111 +f 450/703/347 451/576/284 42/308/84 41/306/82 +f 456/704/348 457/701/345 59/343/117 58/341/115 +f 459/575/283 469/583/291 44/311/87 43/310/86 +f 455/702/346 456/704/348 58/341/115 57/339/113 +f 471/582/290 452/572/280 48/319/95 47/317/93 +f 449/558/266 450/703/347 41/306/82 40/303/79 +f 394/359/133 401/362/136 402/705/349 393/706/350 +f 400/363/137 395/366/140 396/707/351 399/708/352 +f 395/366/140 397/355/129 398/709/353 396/710/351 +f 408/373/147 403/367/141 404/711/354 407/712/355 +f 416/383/157 411/377/151 412/713/356 415/714/357 +f 411/377/151 408/373/147 407/715/355 412/716/356 +f 403/367/141 400/363/137 399/717/352 404/718/354 +f 397/355/129 391/358/132 392/719/358 398/720/353 +f 391/358/132 385/567/275 386/721/359 392/722/358 +f 385/567/275 387/399/171 388/723/360 386/724/359 +f 387/399/171 389/402/174 390/725/361 388/726/360 +f 389/402/174 394/359/133 393/727/350 390/728/361 +f 401/362/136 405/369/143 406/729/362 402/730/349 +f 405/369/143 409/372/146 410/731/363 406/732/362 +f 409/372/146 413/376/150 414/733/364 410/734/363 +f 413/376/150 419/382/156 420/735/365 414/736/364 +f 422/387/161 416/383/157 415/737/357 421/738/366 +f 426/393/167 422/387/161 421/739/366 425/740/367 +f 424/389/163 427/392/166 428/741/368 423/742/369 +f 419/382/156 417/386/160 418/743/370 420/744/365 +f 417/395/160 424/389/163 423/745/369 418/746/370 +f 427/392/166 431/404/176 432/747/371 428/748/368 +f 431/404/176 435/412/184 436/749/372 432/750/371 +f 435/412/184 439/416/188 440/751/373 436/752/372 +f 439/416/188 445/420/192 446/753/374 440/754/373 +f 448/421/193 443/424/196 444/755/375 447/756/376 +f 443/424/196 441/417/189 442/757/377 444/758/375 +f 441/417/189 437/413/185 438/759/378 442/760/377 +f 437/413/185 433/409/181 434/761/379 438/762/378 +f 433/409/181 429/397/169 430/763/380 434/764/379 +f 429/397/169 426/393/167 425/765/367 430/766/380 +f 445/420/192 448/421/193 447/767/376 446/768/374 +f 391/358/132 225/357/131 226/568/276 385/567/275 +f 381/769/381 461/700/344 453/699/343 371/770/382 +f 36/296/72 476/405/177 473/408/180 37/298/74 +f 61/348/122 478/537/245 475/540/248 62/351/125 +f 54/333/107 53/332/106 463/544/252 464/543/251 +f 64/354/128 470/545/253 479/548/256 33/290/66 +f 62/351/125 475/540/248 458/550/258 63/352/126 +f 38/300/76 37/298/74 473/408/180 468/552/260 +f 61/348/122 60/347/121 466/553/261 478/537/245 +f 64/354/128 63/352/126 458/550/258 470/545/253 +f 39/302/78 480/555/263 449/558/266 40/303/79 +f 35/294/70 34/291/67 472/559/267 467/562/270 +f 55/335/109 465/566/274 454/565/273 56/337/111 +f 55/335/109 54/333/107 464/543/251 465/566/274 +f 49/322/98 48/319/95 452/572/280 460/571/279 +f 36/296/72 35/294/70 467/562/270 476/405/177 +f 43/310/86 42/308/84 451/576/284 459/575/283 +f 45/313/89 477/577/285 474/580/288 46/316/92 +f 46/316/92 474/580/288 471/582/290 47/317/93 +f 44/311/87 469/583/291 477/577/285 45/313/89 +f 52/329/103 462/586/294 463/544/252 53/332/106 +f 34/291/67 33/290/66 479/548/256 472/559/267 +f 38/300/76 468/552/260 480/555/263 39/302/78 +f 51/328/102 461/771/344 462/586/294 52/329/103 +f 466/553/261 457/701/345 363/772/383 353/554/262 +f 371/770/382 453/699/343 460/571/279 362/570/278 +f 383/773/384 455/702/346 454/565/273 377/564/272 +f 359/573/281 451/576/284 450/703/347 384/774/385 +f 363/772/383 457/701/345 456/704/348 357/775/386 +f 469/583/291 459/575/283 375/574/282 358/584/292 +f 357/775/386 456/704/348 455/702/346 383/773/384 +f 365/569/277 452/572/280 471/582/290 364/581/289 +f 384/774/385 450/703/347 449/558/266 378/557/265 +f 381/776/381 361/585/293 462/586/294 461/771/344 diff --git a/mods/pipeworks/models/pipeworks_fountainhead_lowpoly.obj b/mods/pipeworks/models/pipeworks_fountainhead_lowpoly.obj new file mode 100755 index 0000000..3ed1c77 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_fountainhead_lowpoly.obj @@ -0,0 +1,194 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-fountainhead-lowpoly.blend' +# www.blender.org +o Cylinder.000 +v -0.064721 -0.500000 0.156250 +v -0.064721 -0.468750 0.156250 +v -0.156250 -0.500000 0.064721 +v -0.156250 -0.468750 0.064721 +v -0.156250 -0.500000 -0.064721 +v -0.156250 -0.468750 -0.064721 +v -0.064721 -0.500000 -0.156250 +v -0.064721 -0.468750 -0.156250 +v 0.064721 -0.500000 -0.156250 +v 0.064721 -0.468750 -0.156250 +v 0.156250 -0.500000 -0.064721 +v 0.156250 -0.468750 -0.064721 +v 0.156250 -0.500000 0.064721 +v 0.156250 -0.468750 0.064721 +v 0.064721 -0.500000 0.156250 +v 0.064721 -0.468750 0.156250 +v -0.051777 -0.468750 0.125000 +v -0.051777 0.312500 0.125000 +v -0.125000 -0.468750 0.051777 +v -0.125000 0.312500 0.051777 +v -0.125000 -0.468750 -0.051777 +v -0.125000 0.312500 -0.051777 +v -0.051777 -0.468750 -0.125000 +v -0.051777 0.312500 -0.125000 +v 0.051777 -0.468750 -0.125000 +v 0.051777 0.312500 -0.125000 +v 0.125000 -0.468750 -0.051777 +v 0.125000 0.312500 -0.051777 +v 0.125000 -0.468750 0.051777 +v 0.125000 0.312500 0.051777 +v 0.051777 -0.468750 0.125000 +v 0.051777 0.312500 0.125000 +v -0.064721 0.312500 0.156250 +v -0.064721 0.500000 0.156250 +v -0.156250 0.312500 0.064721 +v -0.156250 0.500000 0.064721 +v -0.156250 0.312500 -0.064721 +v -0.156250 0.500000 -0.064721 +v -0.064721 0.312500 -0.156250 +v -0.064721 0.500000 -0.156250 +v 0.064721 0.312500 -0.156250 +v 0.064721 0.500000 -0.156250 +v 0.156250 0.312500 -0.064721 +v 0.156250 0.500000 -0.064721 +v 0.156250 0.312500 0.064721 +v 0.156250 0.500000 0.064721 +v 0.064721 0.312500 0.156250 +v 0.064721 0.500000 0.156250 +vt 0.6389 0.9028 +vt 0.5556 0.9861 +vt 0.4444 0.9861 +vt 0.3611 0.9028 +vt 0.3611 0.7917 +vt 0.4444 0.7083 +vt 0.5556 0.7083 +vt 0.6389 0.7917 +vt 0.2222 0.9861 +vt 0.3056 0.9028 +vt 0.3056 0.7917 +vt 0.2222 0.7083 +vt 0.1111 0.7083 +vt 0.0278 0.7917 +vt 0.0278 0.9028 +vt 0.1111 0.9861 +vt 0.9722 0.8958 +vt 0.8889 0.9792 +vt 0.7778 0.9792 +vt 0.6944 0.8958 +vt 0.6944 0.7847 +vt 0.7778 0.7014 +vt 0.8889 0.7014 +vt 0.9722 0.7847 +vt 0.5556 0.9861 +vt 0.6389 0.9028 +vt 0.6389 0.7917 +vt 0.5556 0.7083 +vt 0.4444 0.7083 +vt 0.3611 0.7917 +vt 0.3611 0.9028 +vt 0.4444 0.9861 +vt 0.5694 0.6389 +vt 0.5694 0.6111 +vt 0.6806 0.6111 +vt 0.6806 0.6389 +vt 0.7917 0.6111 +vt 0.7917 0.6389 +vt 0.9028 0.6111 +vt 0.9028 0.6389 +vt 0.0139 0.6389 +vt 0.0139 0.6111 +vt 0.1250 0.6111 +vt 0.1250 0.6389 +vt 0.2361 0.6111 +vt 0.2361 0.6389 +vt 0.3472 0.6111 +vt 0.3472 0.6389 +vt 0.4583 0.6111 +vt 0.4583 0.6389 +vt 0.6806 0.5972 +vt 0.6806 0.5139 +vt 0.7917 0.5139 +vt 0.7917 0.5972 +vt 0.5694 0.5972 +vt 0.5694 0.5139 +vt 0.9028 0.5139 +vt 0.9028 0.5972 +vt 0.0139 0.5972 +vt 0.0139 0.5139 +vt 0.1250 0.5139 +vt 0.1250 0.5972 +vt 0.2361 0.5139 +vt 0.2361 0.5972 +vt 0.3472 0.5139 +vt 0.3472 0.5972 +vt 0.4583 0.5139 +vt 0.4583 0.5972 +vt 0.0139 0.2361 +vt 0.0139 0.1806 +vt 0.9028 0.1806 +vt 0.9028 0.2361 +vt 0.0139 0.3472 +vt 0.0139 0.2917 +vt 0.9028 0.2917 +vt 0.9028 0.3472 +vt 0.0139 0.4028 +vt 0.9028 0.4028 +vt 0.9028 0.4583 +vt 0.0139 0.4583 +vt 0.9028 0.0694 +vt 0.9028 0.1250 +vt 0.0139 0.1250 +vt 0.0139 0.0694 +vt 0.9028 0.0139 +vt 0.0139 0.0139 +vn -0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn -0.7173 0.6302 0.2971 +vn -0.7173 -0.6302 0.2971 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 -0.6302 -0.2971 +vn -0.2971 0.6302 -0.7173 +vn -0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 -0.7173 +vn 0.2971 -0.6302 -0.7173 +vn 0.7173 0.6302 -0.2971 +vn 0.7173 -0.6302 -0.2971 +vn 0.7173 0.6302 0.2971 +vn 0.7173 -0.6302 0.2971 +vn 0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn 0.9239 0.0000 0.3827 +vn 0.3827 0.0000 0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn -0.3827 0.0000 -0.9239 +vn -0.9239 0.0000 -0.3827 +vn -0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +g Cylinder.000_Cylinder.000_None +s off +f 4/1/1 2/2/1 16/3/1 14/4/1 12/5/1 10/6/1 8/7/1 6/8/1 +f 1/9/2 3/10/2 5/11/2 7/12/2 9/13/2 11/14/2 13/15/2 15/16/2 +f 36/17/1 34/18/1 48/19/1 46/20/1 44/21/1 42/22/1 40/23/1 38/24/1 +f 33/25/2 35/26/2 37/27/2 39/28/2 41/29/2 43/30/2 45/31/2 47/32/2 +s 1 +f 1/33/3 2/34/4 4/35/5 3/36/6 +f 3/36/6 4/35/5 6/37/7 5/38/8 +f 5/38/8 6/37/7 8/39/9 7/40/10 +f 7/41/10 8/42/9 10/43/11 9/44/12 +f 9/44/12 10/43/11 12/45/13 11/46/14 +f 11/46/14 12/45/13 14/47/15 13/48/16 +f 13/48/16 14/47/15 16/49/17 15/50/18 +f 15/50/18 16/49/17 2/34/4 1/33/3 +f 35/51/6 36/52/5 38/53/7 37/54/8 +f 33/55/3 34/56/4 36/52/5 35/51/6 +f 37/54/8 38/53/7 40/57/9 39/58/10 +f 39/59/10 40/60/9 42/61/11 41/62/12 +f 41/62/12 42/61/11 44/63/13 43/64/14 +f 43/64/14 44/63/13 46/65/15 45/66/16 +f 45/66/16 46/65/15 48/67/17 47/68/18 +f 47/68/18 48/67/17 34/56/4 33/55/3 +f 30/69/19 32/70/20 31/71/20 29/72/19 +f 26/73/21 28/74/22 27/75/22 25/76/21 +f 24/77/23 23/78/23 21/79/24 22/80/24 +f 30/69/19 29/72/19 27/75/22 28/74/22 +f 19/81/25 17/82/26 18/83/26 20/84/25 +f 21/85/24 19/81/25 20/84/25 22/86/24 +f 24/77/23 26/73/21 25/76/21 23/78/23 +f 17/82/26 31/71/20 32/70/20 18/83/26 diff --git a/mods/pipeworks/models/pipeworks_pipe_10.obj b/mods/pipeworks/models/pipeworks_pipe_10.obj new file mode 100755 index 0000000..ae862a2 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_10.obj @@ -0,0 +1,7718 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-highpoly.blend' +# www.blender.org +o Pipe_Cylinder.002 +v -0.468750 0.126770 0.038455 +v -0.468750 0.131837 0.012985 +v -0.468750 0.131837 -0.012984 +v -0.468750 0.126770 -0.038455 +v -0.468750 0.116832 -0.062448 +v -0.468750 0.102404 -0.084041 +v -0.468750 0.084041 -0.102404 +v -0.468750 0.062448 -0.116832 +v -0.468750 0.038455 -0.126770 +v -0.468750 0.012985 -0.131836 +v -0.468750 -0.012985 -0.131836 +v -0.468750 -0.062448 -0.116832 +v -0.468750 -0.084041 -0.102404 +v -0.468750 -0.102404 -0.084041 +v -0.468750 -0.116832 -0.062448 +v -0.468750 -0.126770 -0.038455 +v -0.468750 -0.131836 -0.012985 +v -0.468750 -0.131836 0.012985 +v -0.468750 -0.126770 0.038455 +v -0.468750 -0.116832 0.062448 +v -0.468750 -0.084041 0.102404 +v -0.468750 -0.102404 0.084041 +v -0.468750 -0.062448 0.116832 +v -0.468750 -0.038455 0.126770 +v -0.468750 0.012985 0.131837 +v -0.468750 0.062448 0.116832 +v -0.468750 0.038455 0.126770 +v -0.468750 0.084041 0.102404 +v -0.468750 0.102404 0.084041 +v -0.468750 0.116832 0.062448 +v -0.468750 -0.038455 -0.126770 +v -0.468750 -0.012985 0.131836 +v -0.437501 0.110774 0.059210 +v -0.437501 0.120197 0.036461 +v -0.437501 0.125000 0.012312 +v -0.437501 0.125001 -0.012311 +v -0.437501 0.120197 -0.036461 +v -0.437501 0.110774 -0.059210 +v -0.437501 0.097094 -0.079683 +v -0.437501 0.079683 -0.097094 +v -0.437501 0.059210 -0.110774 +v -0.437501 0.036461 -0.120197 +v -0.437501 0.012312 -0.125000 +v -0.437501 -0.012311 -0.125000 +v -0.437501 -0.036461 -0.120197 +v -0.437501 -0.059210 -0.110774 +v -0.437501 -0.079683 -0.097094 +v -0.437501 -0.097094 -0.079683 +v -0.437501 -0.110774 -0.059210 +v -0.437501 -0.120197 -0.036461 +v -0.437501 -0.125000 -0.012311 +v -0.437501 -0.125000 0.012311 +v -0.437501 -0.120197 0.036461 +v -0.437501 -0.110774 0.059210 +v -0.437501 -0.097094 0.079683 +v -0.437501 -0.079683 0.097094 +v -0.437501 -0.059210 0.110774 +v -0.437501 -0.036461 0.120197 +v -0.437501 -0.012311 0.125001 +v -0.437501 0.012311 0.125001 +v -0.437501 0.036461 0.120197 +v -0.437501 0.059210 0.110774 +v -0.437501 0.079683 0.097094 +v -0.437501 0.097094 0.079683 +v 0.437501 0.036461 -0.120197 +v 0.437501 0.012312 -0.125001 +v 0.437501 -0.012311 -0.125000 +v 0.437501 -0.036461 -0.120197 +v 0.437501 0.059210 -0.110774 +v 0.468750 0.012985 -0.131836 +v 0.468750 0.038455 -0.126770 +v 0.468750 -0.012985 -0.131836 +v 0.437501 -0.059210 -0.110774 +v 0.468750 -0.038455 -0.126770 +v 0.437501 0.079683 -0.097094 +v 0.468750 0.062448 -0.116832 +v 0.437501 -0.079683 -0.097094 +v 0.468750 -0.062448 -0.116832 +v 0.437501 0.097094 -0.079683 +v 0.468750 0.084041 -0.102404 +v 0.437501 -0.097094 -0.079683 +v 0.468750 -0.084041 -0.102404 +v 0.437501 0.110774 -0.059210 +v 0.468750 0.102404 -0.084041 +v 0.437501 -0.110774 -0.059210 +v 0.468750 -0.102404 -0.084041 +v 0.437501 0.120197 -0.036461 +v 0.468750 0.116832 -0.062448 +v 0.437501 -0.120197 -0.036461 +v 0.468750 -0.116832 -0.062448 +v 0.437501 0.125000 -0.012311 +v 0.468750 0.126770 -0.038455 +v 0.437501 -0.125001 -0.012311 +v 0.468750 -0.126770 -0.038455 +v 0.437501 0.125000 0.012312 +v 0.468750 0.131836 -0.012985 +v 0.437501 -0.125001 0.012311 +v 0.468750 -0.131837 -0.012985 +v 0.437501 0.120197 0.036461 +v 0.468750 0.131836 0.012985 +v 0.437501 -0.120197 0.036461 +v 0.468750 -0.131837 0.012985 +v 0.437501 0.110774 0.059210 +v 0.468750 0.126770 0.038455 +v 0.437501 -0.110774 0.059210 +v 0.468750 -0.126770 0.038455 +v 0.437501 0.097094 0.079683 +v 0.468750 0.116832 0.062448 +v 0.437501 -0.097094 0.079683 +v 0.468750 -0.116832 0.062448 +v 0.437501 0.079683 0.097094 +v 0.468750 0.102404 0.084041 +v 0.437501 -0.079683 0.097094 +v 0.468750 -0.102404 0.084041 +v 0.437501 0.059210 0.110774 +v 0.468750 0.084041 0.102404 +v 0.437501 -0.059210 0.110774 +v 0.468750 -0.084041 0.102404 +v 0.437501 0.036461 0.120197 +v 0.468750 0.062448 0.116832 +v 0.437501 -0.036461 0.120197 +v 0.468750 -0.062448 0.116832 +v 0.437501 0.012311 0.125000 +v 0.468750 0.038455 0.126770 +v 0.437501 -0.012311 0.125000 +v 0.468750 -0.038455 0.126770 +v 0.468750 0.012985 0.131837 +v 0.468750 -0.012985 0.131836 +v 0.460912 0.130078 0.063644 +v 0.468749 0.130078 0.063644 +v 0.468749 0.139022 0.062467 +v 0.460912 0.139022 0.062467 +v 0.460912 0.142474 0.054132 +v 0.460912 0.136982 0.046976 +v 0.460912 0.128039 0.048153 +v 0.460912 0.124587 0.056487 +v 0.468749 0.124587 0.056487 +v 0.468749 0.142474 0.054132 +v 0.468749 0.136982 0.046976 +v 0.468749 0.128039 0.048153 +v -0.460914 0.136982 0.046976 +v -0.468751 0.136982 0.046976 +v -0.468751 0.142474 0.054133 +v -0.460914 0.142474 0.054133 +v -0.460914 0.139022 0.062467 +v -0.460914 0.130078 0.063644 +v -0.460914 0.124587 0.056488 +v -0.460914 0.128039 0.048153 +v -0.468751 0.128039 0.048153 +v -0.468751 0.139022 0.062467 +v -0.468751 0.130078 0.063644 +v -0.468751 0.124587 0.056488 +v 0.460912 0.046976 0.136982 +v 0.468749 0.046976 0.136982 +v 0.468749 0.054133 0.142474 +v 0.460912 0.054133 0.142474 +v 0.460912 0.062467 0.139022 +v 0.460912 0.063644 0.130078 +v 0.460912 0.056488 0.124587 +v 0.460912 0.048154 0.128039 +v 0.468749 0.048154 0.128039 +v 0.468749 0.062467 0.139022 +v 0.468749 0.063644 0.130078 +v 0.468749 0.056488 0.124587 +v -0.460914 0.063644 0.130078 +v -0.468751 0.063644 0.130078 +v -0.468751 0.062467 0.139022 +v -0.460914 0.062467 0.139022 +v -0.460914 0.054133 0.142474 +v -0.460914 0.046976 0.136982 +v -0.460914 0.048153 0.128039 +v -0.460914 0.056487 0.124587 +v -0.468751 0.056487 0.124587 +v -0.468751 0.054133 0.142474 +v -0.468751 0.046976 0.136982 +v -0.468751 0.048153 0.128039 +v 0.460912 -0.063644 0.130078 +v 0.468749 -0.063644 0.130078 +v 0.468749 -0.062467 0.139022 +v 0.460912 -0.062467 0.139022 +v 0.460912 -0.054132 0.142474 +v 0.460912 -0.046976 0.136982 +v 0.460912 -0.048153 0.128039 +v 0.460912 -0.056487 0.124587 +v 0.468749 -0.056487 0.124587 +v 0.468749 -0.054132 0.142474 +v 0.468749 -0.046976 0.136982 +v 0.468749 -0.048153 0.128039 +v -0.460914 -0.046976 0.136982 +v -0.468751 -0.046976 0.136982 +v -0.468751 -0.054133 0.142474 +v -0.460914 -0.054133 0.142474 +v -0.460914 -0.062467 0.139022 +v -0.460914 -0.063644 0.130078 +v -0.460914 -0.056488 0.124587 +v -0.460914 -0.048153 0.128039 +v -0.468751 -0.048153 0.128039 +v -0.468751 -0.062467 0.139022 +v -0.468751 -0.063644 0.130078 +v -0.468751 -0.056488 0.124587 +v 0.460912 -0.136982 0.046976 +v 0.468749 -0.136982 0.046976 +v 0.468749 -0.142474 0.054133 +v 0.460912 -0.142474 0.054133 +v 0.460912 -0.139022 0.062467 +v 0.460912 -0.130078 0.063644 +v 0.460912 -0.124587 0.056488 +v 0.460912 -0.128039 0.048153 +v 0.468749 -0.128039 0.048153 +v 0.468749 -0.139022 0.062467 +v 0.468749 -0.130078 0.063644 +v 0.468749 -0.124587 0.056488 +v -0.460914 -0.130078 0.063644 +v -0.468751 -0.130078 0.063644 +v -0.468751 -0.139022 0.062467 +v -0.460914 -0.139022 0.062467 +v -0.460914 -0.142474 0.054133 +v -0.460914 -0.136982 0.046976 +v -0.460914 -0.128039 0.048153 +v -0.460914 -0.124587 0.056487 +v -0.468751 -0.124587 0.056487 +v -0.468751 -0.142474 0.054133 +v -0.468751 -0.136982 0.046976 +v -0.468751 -0.128039 0.048153 +v 0.460912 -0.130078 -0.063644 +v 0.468749 -0.130078 -0.063644 +v 0.468749 -0.139022 -0.062467 +v 0.460912 -0.139022 -0.062467 +v 0.460912 -0.142474 -0.054132 +v 0.460912 -0.136982 -0.046976 +v 0.460912 -0.128039 -0.048153 +v 0.460912 -0.124587 -0.056487 +v 0.468749 -0.124587 -0.056487 +v 0.468749 -0.142474 -0.054132 +v 0.468749 -0.136982 -0.046976 +v 0.468749 -0.128039 -0.048153 +v -0.460914 -0.136982 -0.046976 +v -0.468751 -0.136982 -0.046976 +v -0.468751 -0.142474 -0.054133 +v -0.460914 -0.142474 -0.054133 +v -0.460914 -0.139022 -0.062467 +v -0.460914 -0.130078 -0.063644 +v -0.460914 -0.124587 -0.056487 +v -0.460914 -0.128039 -0.048153 +v -0.468751 -0.128039 -0.048153 +v -0.468751 -0.139022 -0.062467 +v -0.468751 -0.130078 -0.063644 +v -0.468751 -0.124587 -0.056487 +v 0.460912 -0.046976 -0.136982 +v 0.468749 -0.046976 -0.136982 +v 0.468749 -0.054133 -0.142474 +v 0.460912 -0.054133 -0.142474 +v 0.460912 -0.062467 -0.139022 +v 0.460912 -0.063644 -0.130078 +v 0.460912 -0.056488 -0.124587 +v 0.460912 -0.048153 -0.128039 +v 0.468749 -0.048153 -0.128039 +v 0.468749 -0.062467 -0.139022 +v 0.468749 -0.063644 -0.130078 +v 0.468749 -0.056488 -0.124587 +v -0.460914 -0.063644 -0.130078 +v -0.468751 -0.063644 -0.130078 +v -0.468751 -0.062467 -0.139022 +v -0.460914 -0.062467 -0.139022 +v -0.460914 -0.054132 -0.142474 +v -0.460914 -0.046976 -0.136982 +v -0.460914 -0.048153 -0.128039 +v -0.460914 -0.056487 -0.124587 +v -0.468751 -0.056487 -0.124587 +v -0.468751 -0.054132 -0.142474 +v -0.468751 -0.046976 -0.136982 +v -0.468751 -0.048153 -0.128039 +v 0.460912 0.063644 -0.130078 +v 0.468749 0.063644 -0.130078 +v 0.468749 0.062467 -0.139022 +v 0.460912 0.062467 -0.139022 +v 0.460912 0.054132 -0.142474 +v 0.460912 0.046976 -0.136982 +v 0.460912 0.048153 -0.128039 +v 0.460912 0.056487 -0.124587 +v 0.468749 0.056487 -0.124587 +v 0.468749 0.054132 -0.142474 +v 0.468749 0.046976 -0.136982 +v 0.468749 0.048153 -0.128039 +v -0.460914 0.046976 -0.136982 +v -0.468751 0.046976 -0.136982 +v -0.468751 0.054133 -0.142474 +v -0.460914 0.054133 -0.142474 +v -0.460914 0.062467 -0.139022 +v -0.460914 0.063644 -0.130078 +v -0.460914 0.056487 -0.124587 +v -0.460914 0.048153 -0.128039 +v -0.468751 0.048153 -0.128039 +v -0.468751 0.062467 -0.139022 +v -0.468751 0.063644 -0.130078 +v -0.468751 0.056487 -0.124587 +v 0.460912 0.136982 -0.046976 +v 0.468749 0.136982 -0.046976 +v 0.468749 0.142474 -0.054133 +v 0.460912 0.142474 -0.054133 +v 0.460912 0.139022 -0.062467 +v 0.460912 0.130078 -0.063644 +v 0.460912 0.124587 -0.056488 +v 0.460912 0.128039 -0.048153 +v 0.468749 0.128039 -0.048153 +v 0.468749 0.139022 -0.062467 +v 0.468749 0.130078 -0.063644 +v 0.468749 0.124587 -0.056488 +v -0.460914 0.130078 -0.063644 +v -0.468751 0.130078 -0.063644 +v -0.468751 0.139022 -0.062467 +v -0.460914 0.139022 -0.062467 +v -0.460914 0.142474 -0.054133 +v -0.460914 0.136982 -0.046976 +v -0.460914 0.128039 -0.048153 +v -0.460914 0.124587 -0.056487 +v -0.468751 0.124587 -0.056487 +v -0.468751 0.142474 -0.054133 +v -0.468751 0.136982 -0.046976 +v -0.468751 0.128039 -0.048153 +v -0.097094 -0.097094 -0.079683 +v -0.120197 -0.120197 -0.036461 +v 0.110774 0.110774 -0.059210 +v 0.120197 0.120197 -0.036461 +v 0.125000 -0.125001 -0.012311 +v 0.110774 -0.110774 0.059210 +v 0.097094 -0.097094 0.079683 +v -0.088389 -0.088389 -0.088389 +v 0.110774 -0.110774 -0.059210 +v 0.125001 0.125001 -0.012311 +v -0.120197 0.120197 0.036461 +v 0.110774 0.110774 0.059210 +v -0.125001 0.012311 -0.125000 +v -0.120197 0.036461 -0.120197 +v -0.097094 0.079683 0.097094 +v -0.110774 0.059210 0.110774 +v 0.110774 0.059210 0.110774 +v -0.120197 0.036461 0.120197 +v 0.120197 0.036461 0.120197 +v -0.125000 0.012311 0.125000 +v 0.125001 0.012311 0.125000 +v -0.125000 -0.012311 0.125000 +v -0.120197 -0.036461 0.120197 +v 0.120197 -0.036461 0.120197 +v -0.110774 -0.059210 -0.110774 +v 0.125000 -0.012311 0.125000 +v 0.125000 -0.012311 -0.125000 +v 0.110774 -0.059210 0.110774 +v 0.097094 -0.079683 0.097094 +v -0.500000 0.099603 -0.121367 +v -0.500000 0.074012 -0.138467 +v -0.500000 0.045577 -0.150245 +v -0.500000 0.015390 -0.156250 +v -0.500000 -0.015389 -0.156250 +v -0.500000 -0.045576 -0.150245 +v -0.500000 -0.074012 -0.138467 +v -0.500000 -0.099603 -0.121367 +v -0.500000 -0.121367 -0.099603 +v -0.500000 -0.150245 -0.045576 +v -0.500000 -0.156250 0.015389 +v -0.500000 -0.150245 0.045576 +v -0.500000 -0.121367 0.099603 +v -0.500000 -0.099603 0.121367 +v -0.500000 -0.074012 0.138467 +v -0.500000 -0.045576 0.150245 +v -0.500000 -0.015389 0.156250 +v -0.500000 0.045576 0.150245 +v -0.500000 0.074012 0.138467 +v -0.500000 0.099603 0.121367 +v -0.500000 0.138467 0.074012 +v -0.500000 0.156250 0.015389 +v -0.500000 0.156250 -0.015389 +v -0.500000 0.150245 -0.045576 +v -0.500000 0.138467 -0.074012 +v -0.500000 0.121367 -0.099603 +v -0.500000 -0.138466 -0.074012 +v -0.500000 -0.156250 -0.015389 +v -0.500000 -0.138467 0.074012 +v -0.500000 0.015389 0.156250 +v -0.500000 0.121367 0.099603 +v -0.500000 0.150245 0.045576 +v -0.468750 0.099603 -0.121367 +v -0.468750 0.121367 -0.099603 +v -0.468750 0.074012 -0.138467 +v -0.468750 0.045577 -0.150245 +v -0.468750 0.015390 -0.156250 +v -0.468750 -0.015389 -0.156250 +v -0.468750 -0.045576 -0.150245 +v -0.468750 -0.074012 -0.138467 +v -0.468750 -0.099603 -0.121367 +v -0.468750 -0.121367 -0.099603 +v -0.468750 -0.138466 -0.074012 +v -0.468750 -0.150245 -0.045576 +v -0.468750 -0.156250 -0.015389 +v -0.468750 -0.156250 0.015389 +v -0.468750 -0.150245 0.045576 +v -0.468750 -0.138467 0.074012 +v -0.468750 -0.121367 0.099603 +v -0.468750 -0.099603 0.121367 +v -0.468750 -0.074012 0.138467 +v -0.468750 -0.045576 0.150245 +v -0.468750 -0.015389 0.156250 +v -0.468750 0.015389 0.156250 +v -0.468750 0.074012 0.138467 +v -0.468750 0.045576 0.150245 +v -0.468750 0.099603 0.121367 +v -0.468750 0.121367 0.099603 +v -0.468750 0.138467 0.074012 +v -0.468750 0.150245 0.045576 +v -0.468750 0.156250 -0.015389 +v -0.468750 0.156250 0.015389 +v -0.468750 0.150245 -0.045576 +v -0.468750 0.138467 -0.074012 +v 0.468750 -0.138466 -0.074012 +v 0.468750 -0.150245 -0.045576 +v 0.468750 -0.156250 -0.015389 +v 0.468750 -0.121367 -0.099603 +v 0.468750 -0.156250 0.015389 +v 0.468750 -0.074012 -0.138467 +v 0.468750 -0.099603 -0.121367 +v 0.500000 -0.121367 -0.099603 +v 0.500000 -0.138467 -0.074012 +v 0.500000 -0.150245 -0.045576 +v 0.500000 -0.156250 -0.015389 +v 0.500000 -0.156250 0.015389 +v 0.468750 -0.045576 -0.150245 +v 0.500000 -0.099603 -0.121367 +v 0.468750 -0.150245 0.045576 +v 0.500000 -0.150245 0.045576 +v 0.468750 -0.015389 -0.156250 +v 0.500000 -0.045576 -0.150245 +v 0.500000 -0.074012 -0.138467 +v 0.468750 -0.138467 0.074012 +v 0.500000 -0.138467 0.074012 +v 0.468750 0.015389 -0.156250 +v 0.500000 -0.015389 -0.156250 +v 0.468750 -0.121367 0.099603 +v 0.500000 -0.121367 0.099603 +v 0.468750 0.045576 -0.150245 +v 0.500000 0.015389 -0.156250 +v 0.468750 -0.099603 0.121367 +v 0.500000 -0.099603 0.121367 +v 0.468750 0.074012 -0.138467 +v 0.500000 0.045576 -0.150245 +v 0.468750 -0.045576 0.150245 +v 0.468750 -0.074012 0.138467 +v 0.500000 -0.074012 0.138467 +v 0.468750 0.099603 -0.121367 +v 0.500000 0.074012 -0.138467 +v 0.468750 -0.015389 0.156250 +v 0.500000 -0.045576 0.150245 +v 0.468750 0.121367 -0.099603 +v 0.500000 0.099603 -0.121367 +v 0.468750 0.015389 0.156250 +v 0.500000 -0.015389 0.156250 +v 0.468750 0.138466 -0.074012 +v 0.500000 0.121367 -0.099603 +v 0.468750 0.045576 0.150245 +v 0.500000 0.015389 0.156250 +v 0.468750 0.150245 -0.045577 +v 0.500000 0.138466 -0.074012 +v 0.468750 0.074012 0.138467 +v 0.500000 0.045576 0.150245 +v 0.468750 0.156249 -0.015389 +v 0.500000 0.150245 -0.045577 +v 0.500000 0.156250 0.015389 +v 0.468750 0.099603 0.121367 +v 0.500000 0.074012 0.138467 +v 0.468750 0.156250 0.015389 +v 0.500000 0.156250 -0.015389 +v 0.500000 0.138467 0.074012 +v 0.500000 0.150245 0.045576 +v 0.500000 0.121367 0.099603 +v 0.500000 0.099603 0.121367 +v 0.468750 0.150245 0.045576 +v 0.468750 0.121367 0.099603 +v 0.468750 0.138467 0.074012 +v 0.460912 0.095821 0.108578 +v 0.468749 0.095821 0.108578 +v 0.468749 0.104534 0.110913 +v 0.460912 0.104534 0.110913 +v 0.460912 0.110913 0.104534 +v 0.460912 0.108578 0.095821 +v 0.460912 0.099865 0.093486 +v 0.460912 0.093486 0.099865 +v 0.468749 0.093486 0.099865 +v 0.468749 0.110913 0.104534 +v 0.468749 0.108578 0.095821 +v 0.468749 0.099865 0.093486 +v -0.460914 0.108578 0.095821 +v -0.468751 0.108578 0.095821 +v -0.468751 0.110913 0.104534 +v -0.460914 0.110913 0.104534 +v -0.460914 0.104534 0.110913 +v -0.460914 0.095821 0.108578 +v -0.460914 0.093486 0.099865 +v -0.460914 0.099865 0.093486 +v -0.468751 0.099865 0.093486 +v -0.468751 0.104534 0.110913 +v -0.468751 0.095821 0.108578 +v -0.468751 0.093486 0.099865 +v 0.460912 -0.009021 0.144532 +v 0.468749 -0.009021 0.144532 +v 0.468749 -0.004510 0.152344 +v 0.460912 -0.004510 0.152344 +v 0.460912 0.004510 0.152344 +v 0.460912 0.009021 0.144532 +v 0.460912 0.004510 0.136720 +v 0.460912 -0.004510 0.136720 +v 0.468749 -0.004510 0.136720 +v 0.468749 0.004510 0.152344 +v 0.468749 0.009021 0.144532 +v 0.468749 0.004510 0.136720 +v -0.460914 0.009021 0.144532 +v -0.468751 0.009021 0.144532 +v -0.468751 0.004510 0.152344 +v -0.460914 0.004510 0.152344 +v -0.460914 -0.004510 0.152344 +v -0.460914 -0.009021 0.144532 +v -0.460914 -0.004510 0.136720 +v -0.460914 0.004510 0.136720 +v -0.468751 0.004510 0.136720 +v -0.468751 -0.004510 0.152344 +v -0.468751 -0.009021 0.144532 +v -0.468751 -0.004510 0.136720 +v 0.460912 -0.108578 0.095821 +v 0.468749 -0.108578 0.095821 +v 0.468749 -0.110913 0.104534 +v 0.460912 -0.110913 0.104534 +v 0.460912 -0.104534 0.110913 +v 0.460912 -0.095821 0.108578 +v 0.460912 -0.093486 0.099865 +v 0.460912 -0.099865 0.093486 +v 0.468749 -0.099865 0.093486 +v 0.468749 -0.104534 0.110913 +v 0.468749 -0.095821 0.108578 +v 0.468749 -0.093486 0.099865 +v -0.460914 -0.095821 0.108578 +v -0.468751 -0.095821 0.108578 +v -0.468751 -0.104534 0.110913 +v -0.460914 -0.104534 0.110913 +v -0.460914 -0.110913 0.104534 +v -0.460914 -0.108578 0.095821 +v -0.460914 -0.099865 0.093486 +v -0.460914 -0.093486 0.099865 +v -0.468751 -0.093486 0.099865 +v -0.468751 -0.110913 0.104534 +v -0.468751 -0.108578 0.095821 +v -0.468751 -0.099865 0.093486 +v 0.460912 -0.144532 -0.009021 +v 0.468749 -0.144532 -0.009021 +v 0.468749 -0.152344 -0.004510 +v 0.460912 -0.152344 -0.004510 +v 0.460912 -0.152344 0.004511 +v 0.460912 -0.144532 0.009021 +v 0.460912 -0.136720 0.004510 +v 0.460912 -0.136720 -0.004510 +v 0.468749 -0.136720 -0.004510 +v 0.468749 -0.152344 0.004511 +v 0.468749 -0.144532 0.009021 +v 0.468749 -0.136720 0.004510 +v -0.460914 -0.144532 0.009021 +v -0.468751 -0.144532 0.009021 +v -0.468751 -0.152344 0.004510 +v -0.460914 -0.152344 0.004510 +v -0.460914 -0.152344 -0.004510 +v -0.460914 -0.144532 -0.009021 +v -0.460914 -0.136720 -0.004510 +v -0.460914 -0.136720 0.004510 +v -0.468751 -0.136720 0.004510 +v -0.468751 -0.152344 -0.004510 +v -0.468751 -0.144532 -0.009021 +v -0.468751 -0.136720 -0.004510 +v 0.460912 -0.095821 -0.108578 +v 0.468749 -0.095821 -0.108578 +v 0.468749 -0.104534 -0.110913 +v 0.460912 -0.104534 -0.110913 +v 0.460912 -0.110913 -0.104534 +v 0.460912 -0.108578 -0.095821 +v 0.460912 -0.099865 -0.093486 +v 0.460912 -0.093486 -0.099865 +v 0.468749 -0.093486 -0.099865 +v 0.468749 -0.110913 -0.104534 +v 0.468749 -0.108578 -0.095821 +v 0.468749 -0.099865 -0.093486 +v -0.460914 -0.108578 -0.095821 +v -0.468751 -0.108578 -0.095821 +v -0.468751 -0.110913 -0.104534 +v -0.460914 -0.110913 -0.104534 +v -0.460914 -0.104534 -0.110913 +v -0.460914 -0.095821 -0.108578 +v -0.460914 -0.093486 -0.099865 +v -0.460914 -0.099865 -0.093486 +v -0.468751 -0.099865 -0.093486 +v -0.468751 -0.104534 -0.110913 +v -0.468751 -0.095821 -0.108578 +v -0.468751 -0.093486 -0.099865 +v 0.460912 0.009021 -0.144532 +v 0.468749 0.009021 -0.144532 +v 0.468749 0.004510 -0.152344 +v 0.460912 0.004510 -0.152344 +v 0.460912 -0.004510 -0.152344 +v 0.460912 -0.009021 -0.144532 +v 0.460912 -0.004510 -0.136720 +v 0.460912 0.004510 -0.136720 +v 0.468749 0.004510 -0.136720 +v 0.468749 -0.004510 -0.152344 +v 0.468749 -0.009021 -0.144532 +v 0.468749 -0.004510 -0.136720 +v -0.460914 -0.009021 -0.144532 +v -0.468751 -0.009021 -0.144532 +v -0.468751 -0.004510 -0.152344 +v -0.460914 -0.004510 -0.152344 +v -0.460914 0.004510 -0.152344 +v -0.460914 0.009021 -0.144532 +v -0.460914 0.004510 -0.136720 +v -0.460914 -0.004510 -0.136720 +v -0.468751 -0.004510 -0.136720 +v -0.468751 0.004510 -0.152344 +v -0.468751 0.009021 -0.144532 +v -0.468751 0.004510 -0.136720 +v 0.460912 0.108578 -0.095821 +v 0.468749 0.108578 -0.095821 +v 0.468749 0.110913 -0.104534 +v 0.460912 0.110913 -0.104534 +v 0.460912 0.104534 -0.110913 +v 0.460912 0.095821 -0.108578 +v 0.460912 0.093486 -0.099865 +v 0.460912 0.099865 -0.093486 +v 0.468749 0.099865 -0.093486 +v 0.468749 0.104534 -0.110913 +v 0.468749 0.095821 -0.108578 +v 0.468749 0.093486 -0.099865 +v -0.460914 0.095821 -0.108578 +v -0.468751 0.095821 -0.108578 +v -0.468751 0.104534 -0.110913 +v -0.460914 0.104534 -0.110913 +v -0.460914 0.110913 -0.104534 +v -0.460914 0.108578 -0.095821 +v -0.460914 0.099865 -0.093486 +v -0.460914 0.093486 -0.099865 +v -0.468751 0.093486 -0.099865 +v -0.468751 0.110913 -0.104534 +v -0.468751 0.108578 -0.095821 +v -0.468751 0.099865 -0.093486 +v 0.460912 0.144532 0.009021 +v 0.468749 0.144532 0.009021 +v 0.468749 0.152344 0.004510 +v 0.460912 0.152344 0.004510 +v 0.460912 0.152344 -0.004510 +v 0.460912 0.144532 -0.009021 +v 0.460912 0.136720 -0.004510 +v 0.460912 0.136720 0.004510 +v 0.468749 0.136720 0.004510 +v 0.468749 0.152344 -0.004510 +v 0.468749 0.144532 -0.009021 +v 0.468749 0.136720 -0.004510 +v -0.460914 0.144532 -0.009021 +v -0.468751 0.144532 -0.009021 +v -0.468751 0.152344 -0.004510 +v -0.460914 0.152344 -0.004510 +v -0.460914 0.152344 0.004510 +v -0.460914 0.144532 0.009021 +v -0.460914 0.136720 0.004510 +v -0.460914 0.136720 -0.004510 +v -0.468751 0.136720 -0.004510 +v -0.468751 0.152344 0.004510 +v -0.468751 0.144532 0.009021 +v -0.468751 0.136720 0.004510 +v 0.126770 0.468750 0.038455 +v 0.131837 0.468750 0.012985 +v 0.131837 0.468750 -0.012984 +v 0.126770 0.468750 -0.038455 +v 0.116832 0.468750 -0.062448 +v 0.102404 0.468750 -0.084041 +v 0.084041 0.468750 -0.102404 +v 0.062448 0.468750 -0.116832 +v 0.038455 0.468750 -0.126770 +v 0.012985 0.468750 -0.131837 +v -0.012985 0.468750 -0.131837 +v -0.062448 0.468750 -0.116832 +v -0.084041 0.468750 -0.102404 +v -0.102404 0.468750 -0.084041 +v -0.116832 0.468750 -0.062448 +v -0.126770 0.468750 -0.038455 +v -0.131837 0.468750 -0.012985 +v -0.131837 0.468750 0.012985 +v -0.126770 0.468750 0.038455 +v -0.116832 0.468750 0.062448 +v -0.084041 0.468750 0.102404 +v -0.102404 0.468750 0.084041 +v -0.062448 0.468750 0.116832 +v -0.038455 0.468750 0.126770 +v 0.012985 0.468750 0.131836 +v 0.062448 0.468750 0.116832 +v 0.038455 0.468750 0.126770 +v 0.084041 0.468750 0.102404 +v 0.102404 0.468750 0.084041 +v 0.116832 0.468750 0.062448 +v -0.038455 0.468750 -0.126770 +v -0.012985 0.468750 0.131836 +v 0.110774 0.437501 0.059210 +v 0.120197 0.437501 0.036461 +v 0.125000 0.437501 0.012312 +v 0.125000 0.437501 -0.012311 +v 0.120197 0.437501 -0.036461 +v 0.110774 0.437501 -0.059210 +v 0.097094 0.437501 -0.079683 +v 0.079683 0.437501 -0.097094 +v 0.059210 0.437501 -0.110774 +v 0.036461 0.437501 -0.120197 +v 0.012311 0.437501 -0.125001 +v -0.012311 0.437501 -0.125001 +v -0.036461 0.437501 -0.120197 +v -0.059210 0.437501 -0.110774 +v -0.079683 0.437501 -0.097094 +v -0.097094 0.437501 -0.079683 +v -0.110774 0.437501 -0.059210 +v -0.120197 0.437501 -0.036461 +v -0.125000 0.437501 -0.012312 +v -0.125001 0.437501 0.012311 +v -0.120197 0.437501 0.036461 +v -0.110774 0.437501 0.059210 +v -0.097094 0.437501 0.079683 +v -0.079683 0.437501 0.097094 +v -0.059210 0.437501 0.110774 +v -0.036461 0.437501 0.120197 +v -0.012312 0.437501 0.125000 +v 0.012311 0.437501 0.125000 +v 0.036461 0.437501 0.120197 +v 0.059210 0.437501 0.110774 +v 0.079683 0.437501 0.097094 +v 0.097094 0.437501 0.079683 +v 0.036461 -0.437501 -0.120197 +v 0.012312 -0.437501 -0.125000 +v -0.012311 -0.437501 -0.125000 +v -0.036461 -0.437501 -0.120197 +v 0.059210 -0.437501 -0.110774 +v 0.012985 -0.468750 -0.131836 +v 0.038455 -0.468750 -0.126770 +v -0.012985 -0.468750 -0.131836 +v -0.059210 -0.437501 -0.110774 +v -0.038455 -0.468750 -0.126770 +v 0.079683 -0.437501 -0.097094 +v 0.062448 -0.468750 -0.116832 +v -0.079683 -0.437501 -0.097094 +v -0.062448 -0.468750 -0.116832 +v 0.097094 -0.437501 -0.079683 +v 0.084041 -0.468750 -0.102404 +v -0.097094 -0.437501 -0.079683 +v -0.084041 -0.468750 -0.102404 +v 0.110774 -0.437501 -0.059210 +v 0.102404 -0.468750 -0.084041 +v -0.110774 -0.437501 -0.059210 +v -0.102404 -0.468750 -0.084041 +v 0.120197 -0.437501 -0.036461 +v 0.116832 -0.468750 -0.062448 +v -0.120197 -0.437501 -0.036461 +v -0.116832 -0.468750 -0.062448 +v 0.125001 -0.437501 -0.012311 +v 0.126770 -0.468750 -0.038455 +v -0.125000 -0.437501 -0.012311 +v -0.126770 -0.468750 -0.038455 +v 0.125000 -0.437501 0.012312 +v 0.131837 -0.468750 -0.012985 +v -0.125000 -0.437501 0.012312 +v -0.131836 -0.468750 -0.012985 +v 0.120197 -0.437501 0.036461 +v 0.131836 -0.468750 0.012985 +v -0.120197 -0.437501 0.036461 +v -0.131836 -0.468750 0.012985 +v 0.110774 -0.437501 0.059210 +v 0.126770 -0.468750 0.038455 +v -0.110774 -0.437501 0.059210 +v -0.126770 -0.468750 0.038455 +v 0.097094 -0.437501 0.079683 +v 0.116832 -0.468750 0.062448 +v -0.097094 -0.437501 0.079683 +v -0.116832 -0.468750 0.062448 +v 0.079683 -0.437501 0.097094 +v 0.102404 -0.468750 0.084041 +v -0.079683 -0.437501 0.097094 +v -0.102404 -0.468750 0.084041 +v 0.059210 -0.437501 0.110774 +v 0.084041 -0.468750 0.102404 +v -0.059210 -0.437501 0.110774 +v -0.084041 -0.468750 0.102404 +v 0.036461 -0.437501 0.120197 +v 0.062448 -0.468750 0.116832 +v -0.036461 -0.437501 0.120197 +v -0.062448 -0.468750 0.116832 +v 0.012311 -0.437501 0.125001 +v 0.038455 -0.468750 0.126770 +v -0.012311 -0.437501 0.125001 +v -0.038455 -0.468750 0.126770 +v 0.012985 -0.468750 0.131837 +v -0.012985 -0.468750 0.131837 +v 0.130078 -0.460912 0.063644 +v 0.130078 -0.468749 0.063644 +v 0.139022 -0.468749 0.062467 +v 0.139022 -0.460912 0.062467 +v 0.142474 -0.460912 0.054133 +v 0.136982 -0.460912 0.046976 +v 0.128039 -0.460912 0.048153 +v 0.124587 -0.460912 0.056487 +v 0.124587 -0.468749 0.056487 +v 0.142474 -0.468749 0.054133 +v 0.136982 -0.468749 0.046976 +v 0.128039 -0.468749 0.048153 +v 0.136982 0.460914 0.046976 +v 0.136982 0.468751 0.046976 +v 0.142474 0.468751 0.054133 +v 0.142474 0.460914 0.054133 +v 0.139022 0.460914 0.062467 +v 0.130078 0.460914 0.063644 +v 0.124587 0.460914 0.056487 +v 0.128039 0.460914 0.048153 +v 0.128039 0.468751 0.048153 +v 0.139022 0.468751 0.062467 +v 0.130078 0.468751 0.063644 +v 0.124587 0.468751 0.056487 +v 0.046976 -0.460912 0.136982 +v 0.046976 -0.468749 0.136982 +v 0.054133 -0.468749 0.142474 +v 0.054133 -0.460912 0.142474 +v 0.062467 -0.460912 0.139022 +v 0.063644 -0.460912 0.130078 +v 0.056488 -0.460912 0.124587 +v 0.048154 -0.460912 0.128039 +v 0.048154 -0.468749 0.128039 +v 0.062467 -0.468749 0.139022 +v 0.063644 -0.468749 0.130078 +v 0.056488 -0.468749 0.124587 +v 0.063644 0.460914 0.130078 +v 0.063644 0.468751 0.130078 +v 0.062467 0.468751 0.139022 +v 0.062467 0.460914 0.139022 +v 0.054132 0.460914 0.142474 +v 0.046976 0.460914 0.136982 +v 0.048153 0.460914 0.128039 +v 0.056487 0.460914 0.124587 +v 0.056487 0.468751 0.124587 +v 0.054132 0.468751 0.142474 +v 0.046976 0.468751 0.136982 +v 0.048153 0.468751 0.128039 +v -0.063644 -0.460912 0.130078 +v -0.063644 -0.468749 0.130078 +v -0.062467 -0.468749 0.139022 +v -0.062467 -0.460912 0.139022 +v -0.054132 -0.460912 0.142474 +v -0.046976 -0.460912 0.136982 +v -0.048153 -0.460912 0.128039 +v -0.056487 -0.460912 0.124587 +v -0.056487 -0.468749 0.124587 +v -0.054132 -0.468749 0.142474 +v -0.046976 -0.468749 0.136982 +v -0.048153 -0.468749 0.128039 +v -0.046976 0.460914 0.136982 +v -0.046976 0.468751 0.136982 +v -0.054133 0.468751 0.142474 +v -0.054133 0.460914 0.142474 +v -0.062467 0.460914 0.139022 +v -0.063644 0.460914 0.130078 +v -0.056488 0.460914 0.124587 +v -0.048153 0.460914 0.128039 +v -0.048153 0.468751 0.128039 +v -0.062467 0.468751 0.139022 +v -0.063644 0.468751 0.130078 +v -0.056488 0.468751 0.124587 +v -0.136982 -0.460912 0.046976 +v -0.136982 -0.468749 0.046976 +v -0.142474 -0.468749 0.054133 +v -0.142474 -0.460912 0.054133 +v -0.139022 -0.460912 0.062467 +v -0.130078 -0.460912 0.063644 +v -0.124587 -0.460912 0.056488 +v -0.128039 -0.460912 0.048154 +v -0.128039 -0.468749 0.048154 +v -0.139022 -0.468749 0.062467 +v -0.130078 -0.468749 0.063644 +v -0.124587 -0.468749 0.056488 +v -0.130078 0.460914 0.063644 +v -0.130078 0.468751 0.063644 +v -0.139022 0.468751 0.062467 +v -0.139022 0.460914 0.062467 +v -0.142474 0.460914 0.054132 +v -0.136982 0.460914 0.046976 +v -0.128039 0.460914 0.048153 +v -0.124587 0.460914 0.056487 +v -0.124587 0.468751 0.056487 +v -0.142474 0.468751 0.054132 +v -0.136982 0.468751 0.046976 +v -0.128039 0.468751 0.048153 +v -0.130078 -0.460912 -0.063644 +v -0.130078 -0.468749 -0.063644 +v -0.139022 -0.468749 -0.062466 +v -0.139022 -0.460912 -0.062467 +v -0.142474 -0.460912 -0.054132 +v -0.136982 -0.460912 -0.046976 +v -0.128039 -0.460912 -0.048153 +v -0.124587 -0.460912 -0.056487 +v -0.124587 -0.468749 -0.056487 +v -0.142474 -0.468749 -0.054132 +v -0.136982 -0.468749 -0.046976 +v -0.128039 -0.468749 -0.048153 +v -0.136982 0.460914 -0.046976 +v -0.136982 0.468751 -0.046976 +v -0.142474 0.468751 -0.054133 +v -0.142474 0.460914 -0.054133 +v -0.139022 0.460914 -0.062467 +v -0.130078 0.460914 -0.063644 +v -0.124587 0.460914 -0.056488 +v -0.128039 0.460914 -0.048153 +v -0.128039 0.468751 -0.048153 +v -0.139022 0.468751 -0.062467 +v -0.130078 0.468751 -0.063644 +v -0.124587 0.468751 -0.056488 +v -0.046976 -0.460912 -0.136982 +v -0.046976 -0.468749 -0.136982 +v -0.054133 -0.468749 -0.142474 +v -0.054133 -0.460912 -0.142474 +v -0.062467 -0.460912 -0.139022 +v -0.063644 -0.460912 -0.130078 +v -0.056488 -0.460912 -0.124587 +v -0.048153 -0.460912 -0.128039 +v -0.048153 -0.468749 -0.128039 +v -0.062467 -0.468749 -0.139022 +v -0.063644 -0.468749 -0.130078 +v -0.056488 -0.468749 -0.124587 +v -0.063644 0.460914 -0.130078 +v -0.063644 0.468751 -0.130078 +v -0.062467 0.468751 -0.139022 +v -0.062467 0.460914 -0.139022 +v -0.054133 0.460914 -0.142474 +v -0.046976 0.460914 -0.136982 +v -0.048153 0.460914 -0.128039 +v -0.056487 0.460914 -0.124587 +v -0.056487 0.468751 -0.124587 +v -0.054133 0.468751 -0.142474 +v -0.046976 0.468751 -0.136982 +v -0.048153 0.468751 -0.128039 +v 0.063644 -0.460912 -0.130078 +v 0.063644 -0.468749 -0.130078 +v 0.062467 -0.468749 -0.139022 +v 0.062467 -0.460912 -0.139022 +v 0.054132 -0.460912 -0.142474 +v 0.046976 -0.460912 -0.136982 +v 0.048153 -0.460912 -0.128039 +v 0.056487 -0.460912 -0.124587 +v 0.056487 -0.468749 -0.124587 +v 0.054132 -0.468749 -0.142474 +v 0.046976 -0.468749 -0.136982 +v 0.048153 -0.468749 -0.128039 +v 0.046976 0.460914 -0.136982 +v 0.046976 0.468751 -0.136982 +v 0.054133 0.468751 -0.142474 +v 0.054133 0.460914 -0.142474 +v 0.062467 0.460914 -0.139022 +v 0.063644 0.460914 -0.130078 +v 0.056487 0.460914 -0.124587 +v 0.048153 0.460914 -0.128039 +v 0.048153 0.468751 -0.128039 +v 0.062467 0.468751 -0.139022 +v 0.063644 0.468751 -0.130078 +v 0.056487 0.468751 -0.124587 +v 0.136982 -0.460912 -0.046976 +v 0.136982 -0.468749 -0.046976 +v 0.142474 -0.468749 -0.054133 +v 0.142474 -0.460912 -0.054133 +v 0.139022 -0.460912 -0.062467 +v 0.130078 -0.460912 -0.063644 +v 0.124587 -0.460912 -0.056488 +v 0.128039 -0.460912 -0.048153 +v 0.128039 -0.468749 -0.048153 +v 0.139022 -0.468749 -0.062467 +v 0.130078 -0.468749 -0.063644 +v 0.124587 -0.468749 -0.056487 +v 0.130078 0.460914 -0.063644 +v 0.130078 0.468751 -0.063644 +v 0.139022 0.468751 -0.062467 +v 0.139022 0.460914 -0.062467 +v 0.142474 0.460914 -0.054133 +v 0.136982 0.460914 -0.046976 +v 0.128039 0.460914 -0.048153 +v 0.124587 0.460914 -0.056487 +v 0.124587 0.468751 -0.056487 +v 0.142474 0.468751 -0.054133 +v 0.136982 0.468751 -0.046976 +v 0.128039 0.468751 -0.048153 +v 0.097094 0.097094 -0.079683 +v -0.097094 0.097094 -0.079683 +v -0.110774 0.110774 -0.059210 +v -0.120197 0.120197 -0.036461 +v -0.125000 0.125000 -0.012311 +v -0.125001 0.125000 0.012311 +v -0.110774 0.110774 0.059210 +v -0.097094 0.097094 0.079683 +v 0.097094 -0.097094 -0.079683 +v 0.120197 -0.120197 -0.036461 +v -0.125001 -0.125001 -0.012311 +v 0.120197 -0.120197 0.036461 +v -0.110774 -0.110774 0.059210 +v -0.097094 -0.097094 0.079683 +v -0.088389 -0.088389 0.088389 +v 0.088389 -0.088389 -0.088389 +v -0.088389 0.088389 0.088389 +v -0.110774 -0.110774 -0.059210 +v -0.125000 -0.125000 0.012311 +v -0.120197 -0.120197 0.036461 +v 0.125000 0.125000 0.012311 +v 0.125001 -0.125000 0.012311 +v 0.120197 0.120197 0.036461 +v 0.097094 0.097094 0.079683 +v 0.036461 -0.120197 -0.120197 +v -0.036461 -0.120197 -0.120197 +v -0.079683 -0.097094 -0.097094 +v 0.079683 -0.097094 0.097094 +v 0.059210 0.110774 0.110774 +v 0.059210 -0.110774 0.110774 +v 0.036461 0.120197 0.120197 +v 0.036461 -0.120197 0.120197 +v 0.012311 0.125000 0.125000 +v 0.012311 -0.125000 0.125000 +v -0.012311 0.125000 0.125000 +v -0.036461 0.120197 0.120197 +v -0.036461 -0.120197 0.120197 +v -0.079683 0.097094 0.097094 +v -0.012311 -0.125000 0.125000 +v -0.012311 -0.125000 -0.125000 +v -0.059210 -0.110774 -0.110774 +v 0.088389 -0.088389 0.088389 +v 0.099603 0.500000 -0.121367 +v 0.074012 0.500000 -0.138467 +v 0.045577 0.500000 -0.150245 +v 0.015390 0.500000 -0.156250 +v -0.015389 0.500000 -0.156250 +v -0.045576 0.500000 -0.150245 +v -0.074012 0.500000 -0.138467 +v -0.099603 0.500000 -0.121367 +v -0.121367 0.500000 -0.099603 +v -0.150245 0.500000 -0.045576 +v -0.156250 0.500000 0.015389 +v -0.150245 0.500000 0.045576 +v -0.121367 0.500000 0.099603 +v -0.099603 0.500000 0.121367 +v -0.074012 0.500000 0.138467 +v -0.045576 0.500000 0.150245 +v -0.015389 0.500000 0.156250 +v 0.045576 0.500000 0.150245 +v 0.074012 0.500000 0.138467 +v 0.099603 0.500000 0.121367 +v 0.138467 0.500000 0.074012 +v 0.156250 0.500000 0.015389 +v 0.156250 0.500000 -0.015389 +v 0.150245 0.500000 -0.045576 +v 0.138467 0.500000 -0.074012 +v 0.121367 0.500000 -0.099603 +v -0.138466 0.500000 -0.074012 +v -0.156250 0.500000 -0.015389 +v -0.138467 0.500000 0.074012 +v 0.015389 0.500000 0.156250 +v 0.121367 0.500000 0.099603 +v 0.150245 0.500000 0.045576 +v 0.099603 0.468750 -0.121367 +v 0.121367 0.468750 -0.099603 +v 0.074012 0.468750 -0.138467 +v 0.045577 0.468750 -0.150245 +v 0.015390 0.468750 -0.156250 +v -0.015389 0.468750 -0.156250 +v -0.045576 0.468750 -0.150245 +v -0.074012 0.468750 -0.138467 +v -0.099603 0.468750 -0.121367 +v -0.121367 0.468750 -0.099603 +v -0.138466 0.468750 -0.074012 +v -0.150245 0.468750 -0.045576 +v -0.156250 0.468750 -0.015389 +v -0.156250 0.468750 0.015389 +v -0.150245 0.468750 0.045576 +v -0.138467 0.468750 0.074012 +v -0.121367 0.468750 0.099603 +v -0.099603 0.468750 0.121367 +v -0.074012 0.468750 0.138467 +v -0.045576 0.468750 0.150245 +v -0.015389 0.468750 0.156250 +v 0.015389 0.468750 0.156250 +v 0.074012 0.468750 0.138467 +v 0.045576 0.468750 0.150245 +v 0.099603 0.468750 0.121367 +v 0.121367 0.468750 0.099603 +v 0.138467 0.468750 0.074012 +v 0.150245 0.468750 0.045576 +v 0.156250 0.468750 -0.015389 +v 0.156250 0.468750 0.015389 +v 0.150245 0.468750 -0.045576 +v 0.138467 0.468750 -0.074012 +v -0.138466 -0.468750 -0.074012 +v -0.150245 -0.468750 -0.045576 +v -0.156249 -0.468750 -0.015389 +v -0.121367 -0.468750 -0.099603 +v -0.156249 -0.468750 0.015389 +v -0.074012 -0.468750 -0.138467 +v -0.099603 -0.468750 -0.121367 +v -0.121367 -0.500000 -0.099603 +v -0.138467 -0.500000 -0.074012 +v -0.150245 -0.500000 -0.045576 +v -0.156249 -0.500000 -0.015389 +v -0.156250 -0.500000 0.015389 +v -0.045576 -0.468750 -0.150245 +v -0.099603 -0.500000 -0.121367 +v -0.150245 -0.468750 0.045576 +v -0.150245 -0.500000 0.045576 +v -0.015389 -0.468750 -0.156250 +v -0.045576 -0.500000 -0.150245 +v -0.074012 -0.500000 -0.138467 +v -0.138467 -0.468750 0.074012 +v -0.138467 -0.500000 0.074012 +v 0.015389 -0.468750 -0.156250 +v -0.015389 -0.500000 -0.156250 +v -0.121367 -0.468750 0.099603 +v -0.121367 -0.500000 0.099603 +v 0.045576 -0.468750 -0.150245 +v 0.015389 -0.500000 -0.156250 +v -0.099603 -0.468750 0.121367 +v -0.099603 -0.500000 0.121367 +v 0.074012 -0.468750 -0.138467 +v 0.045576 -0.500000 -0.150245 +v -0.045576 -0.468750 0.150245 +v -0.074012 -0.468750 0.138467 +v -0.074012 -0.500000 0.138467 +v 0.099603 -0.468750 -0.121367 +v 0.074012 -0.500000 -0.138467 +v -0.015389 -0.468750 0.156250 +v -0.045576 -0.500000 0.150245 +v 0.121367 -0.468750 -0.099603 +v 0.099603 -0.500000 -0.121367 +v 0.015389 -0.468750 0.156250 +v -0.015389 -0.500000 0.156250 +v 0.138466 -0.468750 -0.074012 +v 0.121367 -0.500000 -0.099603 +v 0.045576 -0.468750 0.150245 +v 0.015389 -0.500000 0.156250 +v 0.150245 -0.468750 -0.045576 +v 0.138466 -0.500000 -0.074012 +v 0.074012 -0.468750 0.138467 +v 0.045576 -0.500000 0.150245 +v 0.156250 -0.468750 -0.015389 +v 0.150245 -0.500000 -0.045576 +v 0.156250 -0.500000 0.015389 +v 0.099603 -0.468750 0.121367 +v 0.074012 -0.500000 0.138467 +v 0.156250 -0.468750 0.015389 +v 0.156250 -0.500000 -0.015389 +v 0.138467 -0.500000 0.074012 +v 0.150245 -0.500000 0.045576 +v 0.121367 -0.500000 0.099603 +v 0.099603 -0.500000 0.121367 +v 0.150245 -0.468750 0.045576 +v 0.121367 -0.468750 0.099603 +v 0.138467 -0.468750 0.074012 +v 0.095821 -0.460912 0.108578 +v 0.095821 -0.468749 0.108578 +v 0.104534 -0.468749 0.110913 +v 0.104534 -0.460912 0.110913 +v 0.110913 -0.460912 0.104534 +v 0.108578 -0.460912 0.095821 +v 0.099865 -0.460912 0.093486 +v 0.093486 -0.460912 0.099865 +v 0.093486 -0.468749 0.099865 +v 0.110913 -0.468749 0.104534 +v 0.108578 -0.468749 0.095821 +v 0.099865 -0.468749 0.093486 +v 0.108578 0.460914 0.095821 +v 0.108578 0.468751 0.095821 +v 0.110913 0.468751 0.104534 +v 0.110913 0.460914 0.104534 +v 0.104534 0.460914 0.110913 +v 0.095821 0.460914 0.108578 +v 0.093486 0.460914 0.099865 +v 0.099865 0.460914 0.093486 +v 0.099865 0.468751 0.093486 +v 0.104534 0.468751 0.110913 +v 0.095821 0.468751 0.108578 +v 0.093486 0.468751 0.099865 +v -0.009021 -0.460912 0.144532 +v -0.009021 -0.468749 0.144532 +v -0.004510 -0.468749 0.152344 +v -0.004510 -0.460912 0.152344 +v 0.004511 -0.460912 0.152344 +v 0.009021 -0.460912 0.144532 +v 0.004510 -0.460912 0.136720 +v -0.004510 -0.460912 0.136720 +v -0.004510 -0.468749 0.136720 +v 0.004511 -0.468749 0.152344 +v 0.009021 -0.468749 0.144532 +v 0.004510 -0.468749 0.136720 +v 0.009021 0.460914 0.144532 +v 0.009021 0.468751 0.144532 +v 0.004510 0.468751 0.152344 +v 0.004510 0.460914 0.152344 +v -0.004510 0.460914 0.152344 +v -0.009021 0.460914 0.144532 +v -0.004510 0.460914 0.136720 +v 0.004510 0.460914 0.136720 +v 0.004510 0.468751 0.136720 +v -0.004510 0.468751 0.152344 +v -0.009021 0.468751 0.144532 +v -0.004510 0.468751 0.136720 +v -0.108578 -0.460912 0.095821 +v -0.108578 -0.468749 0.095821 +v -0.110913 -0.468749 0.104535 +v -0.110913 -0.460912 0.104534 +v -0.104534 -0.460912 0.110913 +v -0.095821 -0.460912 0.108578 +v -0.093486 -0.460912 0.099865 +v -0.099865 -0.460912 0.093486 +v -0.099865 -0.468749 0.093486 +v -0.104534 -0.468749 0.110913 +v -0.095821 -0.468749 0.108578 +v -0.093486 -0.468749 0.099865 +v -0.095821 0.460914 0.108578 +v -0.095821 0.468751 0.108578 +v -0.104534 0.468751 0.110913 +v -0.104534 0.460914 0.110913 +v -0.110913 0.460914 0.104534 +v -0.108578 0.460914 0.095821 +v -0.099865 0.460914 0.093486 +v -0.093486 0.460914 0.099865 +v -0.093486 0.468751 0.099865 +v -0.110913 0.468751 0.104534 +v -0.108578 0.468751 0.095821 +v -0.099865 0.468751 0.093486 +v -0.144532 -0.460912 -0.009021 +v -0.144532 -0.468749 -0.009021 +v -0.152344 -0.468749 -0.004510 +v -0.152344 -0.460912 -0.004510 +v -0.152344 -0.460912 0.004511 +v -0.144532 -0.460912 0.009021 +v -0.136720 -0.460912 0.004511 +v -0.136720 -0.460912 -0.004510 +v -0.136720 -0.468749 -0.004510 +v -0.152344 -0.468749 0.004511 +v -0.144532 -0.468749 0.009021 +v -0.136720 -0.468749 0.004511 +v -0.144532 0.460914 0.009021 +v -0.144532 0.468751 0.009021 +v -0.152344 0.468751 0.004510 +v -0.152344 0.460914 0.004510 +v -0.152344 0.460914 -0.004511 +v -0.144532 0.460914 -0.009021 +v -0.136720 0.460914 -0.004510 +v -0.136720 0.460914 0.004510 +v -0.136720 0.468751 0.004510 +v -0.152344 0.468751 -0.004511 +v -0.144532 0.468751 -0.009021 +v -0.136720 0.468751 -0.004510 +v -0.095821 -0.460912 -0.108578 +v -0.095821 -0.468749 -0.108578 +v -0.104534 -0.468749 -0.110913 +v -0.104534 -0.460912 -0.110913 +v -0.110913 -0.460912 -0.104534 +v -0.108578 -0.460912 -0.095821 +v -0.099865 -0.460912 -0.093486 +v -0.093486 -0.460912 -0.099865 +v -0.093486 -0.468749 -0.099865 +v -0.110913 -0.468749 -0.104534 +v -0.108578 -0.468749 -0.095821 +v -0.099865 -0.468749 -0.093486 +v -0.108578 0.460914 -0.095821 +v -0.108578 0.468751 -0.095821 +v -0.110913 0.468751 -0.104534 +v -0.110913 0.460914 -0.104534 +v -0.104534 0.460914 -0.110913 +v -0.095821 0.460914 -0.108578 +v -0.093486 0.460914 -0.099865 +v -0.099865 0.460914 -0.093486 +v -0.099865 0.468751 -0.093486 +v -0.104534 0.468751 -0.110913 +v -0.095821 0.468751 -0.108578 +v -0.093486 0.468751 -0.099865 +v 0.009021 -0.460912 -0.144532 +v 0.009021 -0.468749 -0.144532 +v 0.004510 -0.468749 -0.152344 +v 0.004510 -0.460912 -0.152344 +v -0.004510 -0.460912 -0.152344 +v -0.009021 -0.460912 -0.144532 +v -0.004510 -0.460912 -0.136720 +v 0.004510 -0.460912 -0.136720 +v 0.004510 -0.468749 -0.136720 +v -0.004510 -0.468749 -0.152344 +v -0.009021 -0.468749 -0.144532 +v -0.004510 -0.468749 -0.136720 +v -0.009021 0.460914 -0.144532 +v -0.009021 0.468751 -0.144532 +v -0.004510 0.468751 -0.152344 +v -0.004510 0.460914 -0.152344 +v 0.004510 0.460914 -0.152344 +v 0.009021 0.460914 -0.144532 +v 0.004510 0.460914 -0.136720 +v -0.004510 0.460914 -0.136720 +v -0.004510 0.468751 -0.136720 +v 0.004510 0.468751 -0.152344 +v 0.009021 0.468751 -0.144532 +v 0.004510 0.468751 -0.136720 +v 0.108578 -0.460912 -0.095821 +v 0.108578 -0.468749 -0.095821 +v 0.110913 -0.468749 -0.104534 +v 0.110913 -0.460912 -0.104534 +v 0.104534 -0.460912 -0.110913 +v 0.095821 -0.460912 -0.108578 +v 0.093486 -0.460912 -0.099865 +v 0.099865 -0.460912 -0.093486 +v 0.099865 -0.468749 -0.093486 +v 0.104534 -0.468749 -0.110913 +v 0.095821 -0.468749 -0.108578 +v 0.093486 -0.468749 -0.099865 +v 0.095821 0.460914 -0.108578 +v 0.095821 0.468751 -0.108578 +v 0.104534 0.468751 -0.110913 +v 0.104534 0.460914 -0.110913 +v 0.110913 0.460914 -0.104534 +v 0.108578 0.460914 -0.095821 +v 0.099865 0.460914 -0.093486 +v 0.093486 0.460914 -0.099865 +v 0.093486 0.468751 -0.099865 +v 0.110913 0.468751 -0.104534 +v 0.108578 0.468751 -0.095821 +v 0.099865 0.468751 -0.093486 +v 0.144532 -0.460912 0.009021 +v 0.144532 -0.468749 0.009021 +v 0.152344 -0.468749 0.004510 +v 0.152344 -0.460912 0.004510 +v 0.152344 -0.460912 -0.004510 +v 0.144532 -0.460912 -0.009021 +v 0.136720 -0.460912 -0.004510 +v 0.136720 -0.460912 0.004510 +v 0.136720 -0.468749 0.004510 +v 0.152344 -0.468749 -0.004510 +v 0.144532 -0.468749 -0.009021 +v 0.136720 -0.468749 -0.004510 +v 0.144532 0.460914 -0.009021 +v 0.144532 0.468751 -0.009021 +v 0.152344 0.468751 -0.004510 +v 0.152344 0.460914 -0.004510 +v 0.152344 0.460914 0.004510 +v 0.144532 0.460914 0.009021 +v 0.136720 0.460914 0.004510 +v 0.136720 0.460914 -0.004510 +v 0.136720 0.468751 -0.004510 +v 0.152344 0.468751 0.004510 +v 0.144532 0.468751 0.009021 +v 0.136720 0.468751 0.004510 +v 0.126770 -0.038455 0.468750 +v 0.131837 -0.012985 0.468750 +v 0.131837 0.012984 0.468750 +v 0.126770 0.038455 0.468750 +v 0.116832 0.062448 0.468750 +v 0.102404 0.084041 0.468750 +v 0.084041 0.102404 0.468750 +v 0.062448 0.116832 0.468750 +v 0.038455 0.126770 0.468750 +v 0.012985 0.131837 0.468750 +v -0.012985 0.131837 0.468750 +v -0.062448 0.116832 0.468750 +v -0.084041 0.102404 0.468750 +v -0.102404 0.084041 0.468750 +v -0.116832 0.062448 0.468750 +v -0.126770 0.038455 0.468750 +v -0.131837 0.012985 0.468750 +v -0.131837 -0.012985 0.468750 +v -0.126770 -0.038455 0.468750 +v -0.116832 -0.062448 0.468750 +v -0.084041 -0.102404 0.468750 +v -0.102404 -0.084041 0.468750 +v -0.062448 -0.116832 0.468750 +v -0.038455 -0.126770 0.468750 +v 0.012985 -0.131836 0.468750 +v 0.062448 -0.116832 0.468750 +v 0.038455 -0.126770 0.468750 +v 0.084041 -0.102404 0.468750 +v 0.102404 -0.084041 0.468750 +v 0.116832 -0.062448 0.468750 +v -0.038455 0.126770 0.468750 +v -0.012985 -0.131836 0.468750 +v 0.110774 -0.059210 0.437501 +v 0.120197 -0.036461 0.437501 +v 0.125000 -0.012312 0.437501 +v 0.125000 0.012311 0.437501 +v 0.120197 0.036461 0.437501 +v 0.110774 0.059210 0.437501 +v 0.097094 0.079683 0.437501 +v 0.079683 0.097094 0.437501 +v 0.059210 0.110774 0.437501 +v 0.036461 0.120197 0.437501 +v 0.012311 0.125001 0.437501 +v -0.012311 0.125001 0.437501 +v -0.036461 0.120197 0.437501 +v -0.059210 0.110774 0.437501 +v -0.079683 0.097094 0.437501 +v -0.097094 0.079683 0.437501 +v -0.110774 0.059210 0.437501 +v -0.120197 0.036461 0.437501 +v -0.125000 0.012312 0.437501 +v -0.125001 -0.012311 0.437501 +v -0.120197 -0.036461 0.437501 +v -0.110774 -0.059210 0.437501 +v -0.097094 -0.079683 0.437501 +v -0.079683 -0.097094 0.437501 +v -0.059210 -0.110774 0.437501 +v -0.036461 -0.120197 0.437501 +v -0.012312 -0.125000 0.437501 +v 0.012311 -0.125000 0.437501 +v 0.036461 -0.120197 0.437501 +v 0.059210 -0.110774 0.437501 +v 0.079683 -0.097094 0.437501 +v 0.097094 -0.079683 0.437501 +v 0.036461 0.120197 -0.437501 +v 0.012312 0.125000 -0.437501 +v -0.012311 0.125000 -0.437501 +v -0.036461 0.120197 -0.437501 +v 0.059210 0.110774 -0.437501 +v 0.012985 0.131836 -0.468750 +v 0.038455 0.126770 -0.468750 +v -0.012985 0.131836 -0.468750 +v -0.059210 0.110774 -0.437501 +v -0.038455 0.126770 -0.468750 +v 0.079683 0.097094 -0.437501 +v 0.062448 0.116832 -0.468750 +v -0.079683 0.097094 -0.437501 +v -0.062448 0.116832 -0.468750 +v 0.097094 0.079683 -0.437501 +v 0.084041 0.102404 -0.468750 +v -0.097094 0.079683 -0.437501 +v -0.084041 0.102404 -0.468750 +v 0.110774 0.059210 -0.437501 +v 0.102404 0.084041 -0.468750 +v -0.110774 0.059210 -0.437501 +v -0.102404 0.084041 -0.468750 +v 0.120197 0.036461 -0.437501 +v 0.116832 0.062448 -0.468750 +v -0.120197 0.036461 -0.437501 +v -0.116832 0.062448 -0.468750 +v 0.125001 0.012311 -0.437501 +v 0.126770 0.038455 -0.468750 +v -0.125000 0.012311 -0.437501 +v -0.126770 0.038455 -0.468750 +v 0.125000 -0.012312 -0.437501 +v 0.131837 0.012985 -0.468750 +v -0.125000 -0.012312 -0.437501 +v -0.131836 0.012985 -0.468750 +v 0.120197 -0.036462 -0.437501 +v 0.131836 -0.012985 -0.468750 +v -0.120197 -0.036461 -0.437501 +v -0.131836 -0.012985 -0.468750 +v 0.110774 -0.059210 -0.437501 +v 0.126770 -0.038456 -0.468750 +v -0.110774 -0.059210 -0.437501 +v -0.126770 -0.038455 -0.468750 +v 0.097094 -0.079683 -0.437501 +v 0.116832 -0.062448 -0.468750 +v -0.097094 -0.079683 -0.437501 +v -0.116832 -0.062448 -0.468750 +v 0.079683 -0.097094 -0.437501 +v 0.102404 -0.084041 -0.468750 +v -0.079683 -0.097094 -0.437501 +v -0.102404 -0.084041 -0.468750 +v 0.059210 -0.110774 -0.437501 +v 0.084041 -0.102404 -0.468750 +v -0.059210 -0.110774 -0.437501 +v -0.084041 -0.102404 -0.468750 +v 0.036461 -0.120197 -0.437501 +v 0.062448 -0.116832 -0.468750 +v -0.036461 -0.120197 -0.437501 +v -0.062448 -0.116832 -0.468750 +v 0.012311 -0.125001 -0.437501 +v 0.038455 -0.126770 -0.468750 +v -0.012311 -0.125001 -0.437501 +v -0.038455 -0.126770 -0.468750 +v 0.012985 -0.131837 -0.468750 +v -0.012985 -0.131837 -0.468750 +v 0.130078 -0.063644 -0.460912 +v 0.130078 -0.063644 -0.468749 +v 0.139022 -0.062467 -0.468749 +v 0.139022 -0.062467 -0.460912 +v 0.142474 -0.054133 -0.460912 +v 0.136982 -0.046976 -0.460912 +v 0.128039 -0.048153 -0.460912 +v 0.124587 -0.056488 -0.460912 +v 0.124587 -0.056487 -0.468749 +v 0.142474 -0.054133 -0.468749 +v 0.136982 -0.046976 -0.468749 +v 0.128039 -0.048153 -0.468749 +v 0.136982 -0.046976 0.460914 +v 0.136982 -0.046976 0.468751 +v 0.142474 -0.054133 0.468751 +v 0.142474 -0.054133 0.460914 +v 0.139022 -0.062467 0.460914 +v 0.130078 -0.063644 0.460914 +v 0.124587 -0.056487 0.460914 +v 0.128039 -0.048153 0.460914 +v 0.128039 -0.048153 0.468751 +v 0.139022 -0.062467 0.468751 +v 0.130078 -0.063644 0.468751 +v 0.124587 -0.056487 0.468751 +v 0.046976 -0.136982 -0.460912 +v 0.046976 -0.136982 -0.468749 +v 0.054133 -0.142474 -0.468749 +v 0.054133 -0.142474 -0.460912 +v 0.062467 -0.139022 -0.460912 +v 0.063644 -0.130078 -0.460912 +v 0.056488 -0.124587 -0.460912 +v 0.048154 -0.128039 -0.460912 +v 0.048154 -0.128039 -0.468749 +v 0.062467 -0.139022 -0.468749 +v 0.063644 -0.130078 -0.468749 +v 0.056488 -0.124587 -0.468749 +v 0.063644 -0.130078 0.460914 +v 0.063644 -0.130078 0.468751 +v 0.062467 -0.139022 0.468751 +v 0.062467 -0.139022 0.460914 +v 0.054132 -0.142474 0.460914 +v 0.046976 -0.136982 0.460914 +v 0.048153 -0.128039 0.460914 +v 0.056487 -0.124587 0.460914 +v 0.056487 -0.124587 0.468751 +v 0.054132 -0.142474 0.468751 +v 0.046976 -0.136982 0.468751 +v 0.048153 -0.128039 0.468751 +v -0.063644 -0.130078 -0.460912 +v -0.063644 -0.130078 -0.468749 +v -0.062467 -0.139022 -0.468749 +v -0.062467 -0.139022 -0.460912 +v -0.054132 -0.142474 -0.460912 +v -0.046976 -0.136982 -0.460912 +v -0.048153 -0.128039 -0.460912 +v -0.056487 -0.124587 -0.460912 +v -0.056487 -0.124587 -0.468749 +v -0.054132 -0.142474 -0.468749 +v -0.046976 -0.136982 -0.468749 +v -0.048153 -0.128039 -0.468749 +v -0.046976 -0.136982 0.460914 +v -0.046976 -0.136982 0.468751 +v -0.054133 -0.142474 0.468751 +v -0.054133 -0.142474 0.460914 +v -0.062467 -0.139022 0.460914 +v -0.063644 -0.130078 0.460914 +v -0.056488 -0.124587 0.460914 +v -0.048153 -0.128039 0.460914 +v -0.048153 -0.128039 0.468751 +v -0.062467 -0.139022 0.468751 +v -0.063644 -0.130078 0.468751 +v -0.056488 -0.124587 0.468751 +v -0.136982 -0.046976 -0.460912 +v -0.136982 -0.046976 -0.468749 +v -0.142474 -0.054133 -0.468749 +v -0.142474 -0.054133 -0.460912 +v -0.139022 -0.062467 -0.460912 +v -0.130078 -0.063644 -0.460912 +v -0.124587 -0.056488 -0.460912 +v -0.128039 -0.048154 -0.460912 +v -0.128039 -0.048154 -0.468749 +v -0.139022 -0.062467 -0.468749 +v -0.130078 -0.063644 -0.468749 +v -0.124587 -0.056488 -0.468749 +v -0.130078 -0.063644 0.460914 +v -0.130078 -0.063644 0.468751 +v -0.139022 -0.062467 0.468751 +v -0.139022 -0.062467 0.460914 +v -0.142474 -0.054132 0.460914 +v -0.136982 -0.046976 0.460914 +v -0.128039 -0.048153 0.460914 +v -0.124587 -0.056487 0.460914 +v -0.124587 -0.056487 0.468751 +v -0.142474 -0.054132 0.468751 +v -0.136982 -0.046976 0.468751 +v -0.128039 -0.048153 0.468751 +v -0.130078 0.063644 -0.460912 +v -0.130078 0.063644 -0.468749 +v -0.139022 0.062466 -0.468749 +v -0.139022 0.062466 -0.460912 +v -0.142474 0.054132 -0.460912 +v -0.136982 0.046976 -0.460912 +v -0.128039 0.048153 -0.460912 +v -0.124587 0.056487 -0.460912 +v -0.124587 0.056487 -0.468749 +v -0.142474 0.054132 -0.468749 +v -0.136982 0.046976 -0.468749 +v -0.128039 0.048153 -0.468749 +v -0.136982 0.046976 0.460914 +v -0.136982 0.046976 0.468751 +v -0.142474 0.054133 0.468751 +v -0.142474 0.054133 0.460914 +v -0.139022 0.062467 0.460914 +v -0.130078 0.063644 0.460914 +v -0.124587 0.056488 0.460914 +v -0.128039 0.048154 0.460914 +v -0.128039 0.048154 0.468751 +v -0.139022 0.062467 0.468751 +v -0.130078 0.063644 0.468751 +v -0.124587 0.056488 0.468751 +v -0.046976 0.136982 -0.460912 +v -0.046976 0.136982 -0.468749 +v -0.054133 0.142474 -0.468749 +v -0.054133 0.142474 -0.460912 +v -0.062467 0.139022 -0.460912 +v -0.063644 0.130078 -0.460912 +v -0.056488 0.124586 -0.460912 +v -0.048153 0.128039 -0.460912 +v -0.048153 0.128039 -0.468749 +v -0.062467 0.139021 -0.468749 +v -0.063644 0.130078 -0.468749 +v -0.056488 0.124586 -0.468749 +v -0.063644 0.130078 0.460914 +v -0.063644 0.130078 0.468751 +v -0.062467 0.139022 0.468751 +v -0.062467 0.139022 0.460914 +v -0.054133 0.142474 0.460914 +v -0.046976 0.136982 0.460914 +v -0.048153 0.128039 0.460914 +v -0.056487 0.124587 0.460914 +v -0.056487 0.124587 0.468751 +v -0.054133 0.142474 0.468751 +v -0.046976 0.136982 0.468751 +v -0.048153 0.128039 0.468751 +v 0.063644 0.130078 -0.460912 +v 0.063644 0.130078 -0.468749 +v 0.062467 0.139022 -0.468749 +v 0.062467 0.139022 -0.460912 +v 0.054132 0.142474 -0.460912 +v 0.046976 0.136982 -0.460912 +v 0.048153 0.128039 -0.460912 +v 0.056487 0.124587 -0.460912 +v 0.056487 0.124587 -0.468749 +v 0.054132 0.142474 -0.468749 +v 0.046976 0.136982 -0.468749 +v 0.048153 0.128039 -0.468749 +v 0.046976 0.136982 0.460914 +v 0.046976 0.136982 0.468751 +v 0.054133 0.142474 0.468751 +v 0.054133 0.142474 0.460914 +v 0.062467 0.139022 0.460914 +v 0.063644 0.130078 0.460914 +v 0.056487 0.124587 0.460914 +v 0.048153 0.128039 0.460914 +v 0.048153 0.128039 0.468751 +v 0.062467 0.139022 0.468751 +v 0.063644 0.130078 0.468751 +v 0.056487 0.124587 0.468751 +v 0.136982 0.046976 -0.460912 +v 0.136982 0.046976 -0.468749 +v 0.142474 0.054133 -0.468749 +v 0.142474 0.054133 -0.460912 +v 0.139022 0.062467 -0.460912 +v 0.130078 0.063644 -0.460912 +v 0.124587 0.056488 -0.460912 +v 0.128039 0.048153 -0.460912 +v 0.128039 0.048153 -0.468749 +v 0.139022 0.062467 -0.468749 +v 0.130078 0.063644 -0.468749 +v 0.124587 0.056487 -0.468749 +v 0.130078 0.063644 0.460914 +v 0.130078 0.063644 0.468751 +v 0.139022 0.062467 0.468751 +v 0.139022 0.062467 0.460914 +v 0.142474 0.054133 0.460914 +v 0.136982 0.046976 0.460914 +v 0.128039 0.048153 0.460914 +v 0.124587 0.056488 0.460914 +v 0.124587 0.056488 0.468751 +v 0.142474 0.054133 0.468751 +v 0.136982 0.046976 0.468751 +v 0.128039 0.048153 0.468751 +v 0.097094 0.079683 0.097094 +v -0.110774 -0.059210 0.110774 +v -0.097094 -0.079683 0.097094 +v 0.097094 0.079683 -0.097094 +v 0.110774 0.059210 -0.110774 +v 0.120197 0.036461 -0.120197 +v 0.120197 -0.036461 -0.120197 +v 0.097094 -0.079683 -0.097094 +v -0.097094 -0.079683 -0.097094 +v 0.088389 0.088389 -0.088389 +v 0.088389 0.088389 0.088389 +v -0.097094 0.079683 -0.097094 +v -0.110774 0.059210 -0.110774 +v -0.125000 -0.012311 -0.125000 +v -0.120197 -0.036461 -0.120197 +v 0.125001 0.012311 -0.125001 +v 0.110774 -0.059210 -0.110774 +v 0.079683 0.097094 0.097094 +v 0.059210 0.110774 -0.110774 +v 0.036461 0.120197 -0.120197 +v 0.012311 0.125000 -0.125000 +v -0.036461 0.120197 -0.120197 +v -0.079683 0.097094 -0.097094 +v 0.079683 -0.097094 -0.097094 +v 0.059210 -0.110774 -0.110774 +v 0.012311 -0.125000 -0.125000 +v -0.059210 -0.110774 0.110774 +v -0.079683 -0.097094 0.097094 +v -0.059210 0.110774 0.110774 +v 0.079683 0.097094 -0.097094 +v -0.012311 0.125000 -0.125001 +v -0.059210 0.110774 -0.110774 +v -0.088389 0.088389 -0.088389 +v 0.099603 0.121367 0.500000 +v 0.074012 0.138467 0.500000 +v 0.045577 0.150245 0.500000 +v 0.015390 0.156250 0.500000 +v -0.015389 0.156250 0.500000 +v -0.045576 0.150245 0.500000 +v -0.074012 0.138467 0.500000 +v -0.099603 0.121367 0.500000 +v -0.121367 0.099603 0.500000 +v -0.150245 0.045577 0.500000 +v -0.156250 -0.015389 0.500000 +v -0.150245 -0.045576 0.500000 +v -0.121367 -0.099603 0.500000 +v -0.099603 -0.121367 0.500000 +v -0.074012 -0.138467 0.500000 +v -0.045576 -0.150245 0.500000 +v -0.015389 -0.156250 0.500000 +v 0.045576 -0.150245 0.500000 +v 0.074012 -0.138467 0.500000 +v 0.099603 -0.121367 0.500000 +v 0.138467 -0.074012 0.500000 +v 0.156250 -0.015389 0.500000 +v 0.156250 0.015389 0.500000 +v 0.150245 0.045576 0.500000 +v 0.138467 0.074012 0.500000 +v 0.121367 0.099603 0.500000 +v -0.138466 0.074012 0.500000 +v -0.156250 0.015389 0.500000 +v -0.138467 -0.074012 0.500000 +v 0.015389 -0.156250 0.500000 +v 0.121367 -0.099603 0.500000 +v 0.150245 -0.045576 0.500000 +v 0.099603 0.121367 0.468750 +v 0.121367 0.099603 0.468750 +v 0.074012 0.138467 0.468750 +v 0.045577 0.150245 0.468750 +v 0.015390 0.156250 0.468750 +v -0.015389 0.156250 0.468750 +v -0.045576 0.150245 0.468750 +v -0.074012 0.138467 0.468750 +v -0.099603 0.121367 0.468750 +v -0.121367 0.099603 0.468750 +v -0.138466 0.074012 0.468750 +v -0.150245 0.045576 0.468750 +v -0.156250 0.015389 0.468750 +v -0.156250 -0.015389 0.468750 +v -0.150245 -0.045576 0.468750 +v -0.138467 -0.074012 0.468750 +v -0.121367 -0.099603 0.468750 +v -0.099603 -0.121367 0.468750 +v -0.074012 -0.138467 0.468750 +v -0.045576 -0.150245 0.468750 +v -0.015389 -0.156250 0.468750 +v 0.015389 -0.156250 0.468750 +v 0.074012 -0.138467 0.468750 +v 0.045576 -0.150245 0.468750 +v 0.099603 -0.121367 0.468750 +v 0.121367 -0.099603 0.468750 +v 0.138467 -0.074012 0.468750 +v 0.150245 -0.045576 0.468750 +v 0.156250 0.015389 0.468750 +v 0.156250 -0.015389 0.468750 +v 0.150245 0.045576 0.468750 +v 0.138467 0.074012 0.468750 +v -0.138466 0.074012 -0.468750 +v -0.150245 0.045576 -0.468750 +v -0.156249 0.015389 -0.468750 +v -0.121367 0.099603 -0.468750 +v -0.156249 -0.015389 -0.468750 +v -0.074012 0.138467 -0.468750 +v -0.099603 0.121367 -0.468750 +v -0.121367 0.099603 -0.500000 +v -0.138467 0.074012 -0.500000 +v -0.150245 0.045576 -0.500000 +v -0.156249 0.015389 -0.500000 +v -0.156250 -0.015389 -0.500000 +v -0.045576 0.150245 -0.468750 +v -0.099603 0.121367 -0.500000 +v -0.150245 -0.045576 -0.468750 +v -0.150245 -0.045576 -0.500000 +v -0.015389 0.156250 -0.468750 +v -0.045576 0.150245 -0.500000 +v -0.074012 0.138467 -0.500000 +v -0.138467 -0.074012 -0.468750 +v -0.138467 -0.074012 -0.500000 +v 0.015389 0.156250 -0.468750 +v -0.015389 0.156249 -0.500000 +v -0.121367 -0.099603 -0.468750 +v -0.121367 -0.099603 -0.500000 +v 0.045576 0.150245 -0.468750 +v 0.015389 0.156249 -0.500000 +v -0.099603 -0.121367 -0.468750 +v -0.099603 -0.121367 -0.500000 +v 0.074012 0.138467 -0.468750 +v 0.045576 0.150245 -0.500000 +v -0.045576 -0.150245 -0.468750 +v -0.074012 -0.138467 -0.468750 +v -0.074012 -0.138467 -0.500000 +v 0.099603 0.121367 -0.468750 +v 0.074012 0.138467 -0.500000 +v -0.015389 -0.156250 -0.468750 +v -0.045576 -0.150245 -0.500000 +v 0.121367 0.099603 -0.468750 +v 0.099603 0.121367 -0.500000 +v 0.015389 -0.156250 -0.468750 +v -0.015389 -0.156250 -0.500000 +v 0.138466 0.074012 -0.468750 +v 0.121367 0.099603 -0.500000 +v 0.045576 -0.150245 -0.468750 +v 0.015389 -0.156250 -0.500000 +v 0.150245 0.045576 -0.468750 +v 0.138466 0.074012 -0.500000 +v 0.074012 -0.138467 -0.468750 +v 0.045576 -0.150245 -0.500000 +v 0.156250 0.015389 -0.468750 +v 0.150245 0.045576 -0.500000 +v 0.156250 -0.015389 -0.500000 +v 0.099603 -0.121367 -0.468750 +v 0.074012 -0.138467 -0.500000 +v 0.156250 -0.015389 -0.468750 +v 0.156250 0.015389 -0.500000 +v 0.138467 -0.074012 -0.500000 +v 0.150245 -0.045576 -0.500000 +v 0.121367 -0.099603 -0.500000 +v 0.099603 -0.121367 -0.500000 +v 0.150245 -0.045576 -0.468750 +v 0.121367 -0.099603 -0.468750 +v 0.138467 -0.074012 -0.468750 +v 0.095821 -0.108578 -0.460912 +v 0.095821 -0.108578 -0.468749 +v 0.104534 -0.110913 -0.468749 +v 0.104534 -0.110913 -0.460912 +v 0.110913 -0.104534 -0.460912 +v 0.108578 -0.095821 -0.460912 +v 0.099865 -0.093486 -0.460912 +v 0.093486 -0.099865 -0.460912 +v 0.093486 -0.099865 -0.468749 +v 0.110913 -0.104534 -0.468749 +v 0.108578 -0.095821 -0.468749 +v 0.099865 -0.093486 -0.468749 +v 0.108578 -0.095821 0.460914 +v 0.108578 -0.095821 0.468751 +v 0.110913 -0.104534 0.468751 +v 0.110913 -0.104534 0.460914 +v 0.104534 -0.110913 0.460914 +v 0.095821 -0.108578 0.460914 +v 0.093486 -0.099865 0.460914 +v 0.099865 -0.093486 0.460914 +v 0.099865 -0.093486 0.468751 +v 0.104534 -0.110913 0.468751 +v 0.095821 -0.108578 0.468751 +v 0.093486 -0.099865 0.468751 +v -0.009021 -0.144532 -0.460912 +v -0.009021 -0.144532 -0.468749 +v -0.004510 -0.152344 -0.468749 +v -0.004510 -0.152344 -0.460912 +v 0.004511 -0.152344 -0.460912 +v 0.009021 -0.144532 -0.460912 +v 0.004510 -0.136720 -0.460912 +v -0.004510 -0.136720 -0.460912 +v -0.004510 -0.136720 -0.468749 +v 0.004511 -0.152344 -0.468749 +v 0.009021 -0.144532 -0.468749 +v 0.004510 -0.136720 -0.468749 +v 0.009021 -0.144532 0.460914 +v 0.009021 -0.144532 0.468751 +v 0.004510 -0.152344 0.468751 +v 0.004510 -0.152344 0.460914 +v -0.004510 -0.152344 0.460914 +v -0.009021 -0.144532 0.460914 +v -0.004510 -0.136720 0.460914 +v 0.004510 -0.136720 0.460914 +v 0.004510 -0.136720 0.468751 +v -0.004510 -0.152344 0.468751 +v -0.009021 -0.144532 0.468751 +v -0.004510 -0.136720 0.468751 +v -0.108578 -0.095821 -0.460912 +v -0.108578 -0.095821 -0.468749 +v -0.110913 -0.104535 -0.468749 +v -0.110913 -0.104535 -0.460912 +v -0.104534 -0.110913 -0.460912 +v -0.095821 -0.108578 -0.460912 +v -0.093486 -0.099865 -0.460912 +v -0.099865 -0.093486 -0.460912 +v -0.099865 -0.093486 -0.468749 +v -0.104534 -0.110913 -0.468749 +v -0.095821 -0.108578 -0.468749 +v -0.093486 -0.099865 -0.468749 +v -0.095821 -0.108578 0.460914 +v -0.095821 -0.108578 0.468751 +v -0.104534 -0.110913 0.468751 +v -0.104534 -0.110913 0.460914 +v -0.110913 -0.104534 0.460914 +v -0.108578 -0.095821 0.460914 +v -0.099865 -0.093486 0.460914 +v -0.093486 -0.099865 0.460914 +v -0.093486 -0.099865 0.468751 +v -0.110913 -0.104534 0.468751 +v -0.108578 -0.095821 0.468751 +v -0.099865 -0.093486 0.468751 +v -0.144532 0.009021 -0.460912 +v -0.144532 0.009021 -0.468749 +v -0.152344 0.004510 -0.468749 +v -0.152344 0.004510 -0.460912 +v -0.152344 -0.004511 -0.460912 +v -0.144532 -0.009021 -0.460912 +v -0.136720 -0.004511 -0.460912 +v -0.136720 0.004510 -0.460912 +v -0.136720 0.004510 -0.468749 +v -0.152344 -0.004511 -0.468749 +v -0.144532 -0.009021 -0.468749 +v -0.136720 -0.004511 -0.468749 +v -0.144532 -0.009021 0.460914 +v -0.144532 -0.009021 0.468751 +v -0.152344 -0.004510 0.468751 +v -0.152344 -0.004510 0.460914 +v -0.152344 0.004511 0.460914 +v -0.144532 0.009021 0.460914 +v -0.136720 0.004510 0.460914 +v -0.136720 -0.004510 0.460914 +v -0.136720 -0.004510 0.468751 +v -0.152344 0.004511 0.468751 +v -0.144532 0.009021 0.468751 +v -0.136720 0.004510 0.468751 +v -0.095821 0.108578 -0.460912 +v -0.095821 0.108578 -0.468749 +v -0.104534 0.110913 -0.468749 +v -0.104534 0.110913 -0.460912 +v -0.110913 0.104534 -0.460912 +v -0.108578 0.095821 -0.460912 +v -0.099865 0.093486 -0.460912 +v -0.093486 0.099865 -0.460912 +v -0.093486 0.099865 -0.468749 +v -0.110913 0.104534 -0.468749 +v -0.108578 0.095821 -0.468749 +v -0.099865 0.093486 -0.468749 +v -0.108578 0.095821 0.460914 +v -0.108578 0.095821 0.468751 +v -0.110913 0.104534 0.468751 +v -0.110913 0.104534 0.460914 +v -0.104534 0.110913 0.460914 +v -0.095821 0.108578 0.460914 +v -0.093486 0.099865 0.460914 +v -0.099865 0.093486 0.460914 +v -0.099865 0.093486 0.468751 +v -0.104534 0.110913 0.468751 +v -0.095821 0.108578 0.468751 +v -0.093486 0.099865 0.468751 +v 0.009021 0.144532 -0.460912 +v 0.009021 0.144532 -0.468749 +v 0.004510 0.152344 -0.468749 +v 0.004510 0.152344 -0.460912 +v -0.004510 0.152344 -0.460912 +v -0.009021 0.144532 -0.460912 +v -0.004510 0.136720 -0.460912 +v 0.004510 0.136720 -0.460912 +v 0.004510 0.136720 -0.468749 +v -0.004510 0.152344 -0.468749 +v -0.009021 0.144532 -0.468749 +v -0.004510 0.136720 -0.468749 +v -0.009021 0.144532 0.460914 +v -0.009021 0.144532 0.468751 +v -0.004510 0.152344 0.468751 +v -0.004510 0.152344 0.460914 +v 0.004510 0.152344 0.460914 +v 0.009021 0.144532 0.460914 +v 0.004510 0.136720 0.460914 +v -0.004510 0.136720 0.460914 +v -0.004510 0.136720 0.468751 +v 0.004510 0.152344 0.468751 +v 0.009021 0.144532 0.468751 +v 0.004510 0.136720 0.468751 +v 0.108578 0.095821 -0.460912 +v 0.108578 0.095821 -0.468749 +v 0.110913 0.104534 -0.468749 +v 0.110913 0.104534 -0.460912 +v 0.104534 0.110913 -0.460912 +v 0.095821 0.108578 -0.460912 +v 0.093486 0.099865 -0.460912 +v 0.099865 0.093486 -0.460912 +v 0.099865 0.093486 -0.468749 +v 0.104534 0.110913 -0.468749 +v 0.095821 0.108578 -0.468749 +v 0.093486 0.099865 -0.468749 +v 0.095821 0.108578 0.460914 +v 0.095821 0.108578 0.468751 +v 0.104534 0.110913 0.468751 +v 0.104534 0.110913 0.460914 +v 0.110913 0.104534 0.460914 +v 0.108578 0.095821 0.460914 +v 0.099865 0.093486 0.460914 +v 0.093486 0.099865 0.460914 +v 0.093486 0.099865 0.468751 +v 0.110913 0.104534 0.468751 +v 0.108578 0.095821 0.468751 +v 0.099865 0.093486 0.468751 +v 0.144532 -0.009021 -0.460912 +v 0.144532 -0.009021 -0.468749 +v 0.152344 -0.004510 -0.468749 +v 0.152344 -0.004510 -0.460912 +v 0.152344 0.004510 -0.460912 +v 0.144532 0.009021 -0.460912 +v 0.136720 0.004510 -0.460912 +v 0.136720 -0.004510 -0.460912 +v 0.136720 -0.004510 -0.468749 +v 0.152344 0.004510 -0.468749 +v 0.144532 0.009021 -0.468749 +v 0.136720 0.004510 -0.468749 +v 0.144532 0.009021 0.460914 +v 0.144532 0.009021 0.468751 +v 0.152344 0.004510 0.468751 +v 0.152344 0.004510 0.460914 +v 0.152344 -0.004510 0.460914 +v 0.144532 -0.009021 0.460914 +v 0.136720 -0.004510 0.460914 +v 0.136720 0.004510 0.460914 +v 0.136720 0.004510 0.468751 +v 0.152344 -0.004510 0.468751 +v 0.144532 -0.009021 0.468751 +v 0.136720 -0.004510 0.468751 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.9458 0.1999 +vt 0.9147 0.2024 +vt 0.9151 0.0339 +vt 0.9458 0.0339 +vt 0.9770 0.1999 +vt 0.9767 0.0339 +vt 1.0081 0.2024 +vt 1.0075 0.0339 +vt 0.8835 0.2074 +vt 0.8843 0.0339 +vt 1.0393 0.2073 +vt 1.0383 0.0339 +vt 0.8524 0.2146 +vt 0.8536 0.0338 +vt 1.0705 0.2145 +vt 1.0691 0.0339 +vt 0.8368 0.2192 +vt 0.8212 0.2146 +vt 0.8228 0.0338 +vt 0.9459 0.0196 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 1.0076 0.0195 +vt 1.1017 0.2145 +vt 1.0862 0.2191 +vt 1.0999 0.0340 +vt 0.7902 0.2074 +vt 0.7920 0.0337 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.1328 0.2072 +vt 1.1306 0.0342 +vt 0.7591 0.2024 +vt 0.7611 0.0336 +vt 0.8537 0.0195 +vt 1.0694 0.0196 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.7280 0.1998 +vt 0.7302 0.0335 +vt 0.8229 0.0194 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.6968 0.1998 +vt 0.6656 0.2023 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.7613 0.0193 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6344 0.2072 +vt 0.6031 0.2144 +vt 0.6066 0.0331 +vt 0.6375 0.0332 +vt 0.6995 0.0191 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.5875 0.2190 +vt 0.5719 0.2143 +vt 0.5757 0.0330 +vt 0.6686 0.0189 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4160 0.2019 +vt 0.3846 0.2068 +vt 0.3892 0.0320 +vt 0.4204 0.0322 +vt 0.5097 0.2021 +vt 0.4786 0.1994 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.5759 0.0186 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.4473 0.1994 +vt 0.4516 0.0324 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 0.8209 0.3169 +vt 0.8365 0.3124 +vt 0.8521 0.3170 +vt 0.8832 0.3242 +vt 0.9143 0.3292 +vt 0.9455 0.3318 +vt 0.9767 0.3318 +vt 1.0079 0.3293 +vt 1.0391 0.3244 +vt 1.0705 0.3172 +vt 1.0862 0.3126 +vt 1.1018 0.3172 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.3215 0.3169 +vt 0.3372 0.3122 +vt 0.3528 0.3168 +vt 0.3842 0.3241 +vt 0.4155 0.3290 +vt 0.4467 0.3316 +vt 0.4779 0.3315 +vt 0.5091 0.3290 +vt 0.5403 0.3240 +vt 0.5715 0.3168 +vt 0.5871 0.3122 +vt 0.6027 0.3168 +vt 1.1952 0.1995 +vt 0.3531 0.2140 +vt 0.3374 0.2186 +vt 0.5409 0.2071 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.9458 0.1999 +vt 0.9147 0.2024 +vt 0.9151 0.0339 +vt 0.9458 0.0339 +vt 0.9770 0.1999 +vt 0.9767 0.0339 +vt 1.0081 0.2024 +vt 1.0075 0.0339 +vt 0.8835 0.2074 +vt 0.8843 0.0339 +vt 1.0393 0.2073 +vt 1.0383 0.0339 +vt 0.8524 0.2146 +vt 0.8536 0.0338 +vt 1.0705 0.2145 +vt 1.0691 0.0339 +vt 0.8368 0.2192 +vt 0.8212 0.2146 +vt 0.8228 0.0338 +vt 0.9459 0.0196 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 1.0076 0.0195 +vt 1.1017 0.2145 +vt 1.0862 0.2191 +vt 1.0999 0.0340 +vt 0.7902 0.2074 +vt 0.7920 0.0337 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.1328 0.2072 +vt 1.1306 0.0342 +vt 0.7591 0.2024 +vt 0.7611 0.0336 +vt 0.8537 0.0195 +vt 1.0694 0.0196 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.7280 0.1998 +vt 0.7302 0.0335 +vt 0.8229 0.0194 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.6968 0.1998 +vt 0.6656 0.2023 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.7613 0.0193 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6344 0.2072 +vt 0.6031 0.2144 +vt 0.6066 0.0331 +vt 0.6375 0.0332 +vt 0.6995 0.0191 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.5875 0.2190 +vt 0.5719 0.2143 +vt 0.5757 0.0330 +vt 0.6686 0.0189 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4160 0.2019 +vt 0.3846 0.2068 +vt 0.3892 0.0320 +vt 0.4204 0.0322 +vt 0.5097 0.2021 +vt 0.4786 0.1994 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.5759 0.0186 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.4473 0.1994 +vt 0.4516 0.0324 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 0.8209 0.3169 +vt 0.8365 0.3124 +vt 0.8521 0.3170 +vt 0.8832 0.3242 +vt 0.9143 0.3292 +vt 0.9455 0.3318 +vt 0.9767 0.3318 +vt 1.0079 0.3293 +vt 1.0391 0.3244 +vt 1.0705 0.3172 +vt 1.0862 0.3126 +vt 1.1018 0.3172 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.3215 0.3169 +vt 0.3372 0.3122 +vt 0.3528 0.3168 +vt 0.3842 0.3241 +vt 0.4155 0.3290 +vt 0.4467 0.3316 +vt 0.4779 0.3315 +vt 0.5091 0.3290 +vt 0.5403 0.3240 +vt 0.5715 0.3168 +vt 0.5871 0.3122 +vt 0.6027 0.3168 +vt 1.1952 0.1995 +vt 0.3531 0.2140 +vt 0.3374 0.2186 +vt 0.5409 0.2071 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.9458 0.1999 +vt 0.9147 0.2024 +vt 0.9151 0.0339 +vt 0.9458 0.0339 +vt 0.9770 0.1999 +vt 0.9767 0.0339 +vt 1.0081 0.2024 +vt 1.0075 0.0339 +vt 0.8835 0.2074 +vt 0.8843 0.0339 +vt 1.0393 0.2073 +vt 1.0383 0.0339 +vt 0.8524 0.2146 +vt 0.8536 0.0338 +vt 1.0705 0.2145 +vt 1.0691 0.0339 +vt 0.8212 0.2146 +vt 0.8228 0.0338 +vt 0.9459 0.0196 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 1.0076 0.0195 +vt 1.1017 0.2145 +vt 1.0862 0.2191 +vt 1.0999 0.0340 +vt 0.7902 0.2074 +vt 0.7920 0.0337 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.1328 0.2072 +vt 1.1306 0.0342 +vt 0.7591 0.2024 +vt 0.7611 0.0336 +vt 0.8537 0.0195 +vt 1.0694 0.0196 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.7280 0.1998 +vt 0.7302 0.0335 +vt 0.8229 0.0194 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.6968 0.1998 +vt 0.6656 0.2023 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.7613 0.0193 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6344 0.2072 +vt 0.6031 0.2144 +vt 0.6066 0.0331 +vt 0.6375 0.0332 +vt 0.6995 0.0191 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.5875 0.2190 +vt 0.5719 0.2143 +vt 0.5757 0.0330 +vt 0.6686 0.0189 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4160 0.2019 +vt 0.3846 0.2068 +vt 0.3892 0.0320 +vt 0.4204 0.0322 +vt 0.5097 0.2021 +vt 0.4786 0.1994 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.5759 0.0186 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.4473 0.1994 +vt 0.4516 0.0324 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 0.8209 0.3169 +vt 0.8365 0.3124 +vt 0.8521 0.3170 +vt 0.8832 0.3242 +vt 0.9143 0.3292 +vt 0.9455 0.3318 +vt 0.9767 0.3318 +vt 1.0079 0.3293 +vt 1.0391 0.3244 +vt 1.0705 0.3172 +vt 1.0862 0.3126 +vt 1.1018 0.3172 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.3215 0.3169 +vt 0.3528 0.3168 +vt 0.3842 0.3241 +vt 0.4155 0.3290 +vt 0.4467 0.3316 +vt 0.4779 0.3315 +vt 0.5091 0.3290 +vt 0.5403 0.3240 +vt 0.5715 0.3168 +vt 0.5871 0.3122 +vt 0.6027 0.3168 +vt 1.1952 0.1995 +vt 0.3531 0.2140 +vt 0.3374 0.2186 +vt 0.5409 0.2071 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vn -1.0000 -0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.6857 0.2113 -0.6965 +vn -0.6857 0.2113 -0.6965 +vn -0.6857 0.3431 -0.6419 +vn 0.6857 0.3431 -0.6419 +vn 0.6857 0.0713 -0.7244 +vn -0.6857 0.0713 -0.7244 +vn 0.6857 -0.0713 -0.7244 +vn -0.6857 -0.0713 -0.7244 +vn 0.6857 -0.2113 -0.6965 +vn -0.6857 -0.2113 -0.6965 +vn 0.6857 -0.3431 -0.6419 +vn -0.6857 -0.3431 -0.6419 +vn 0.6857 -0.4617 -0.5626 +vn -0.6857 -0.4617 -0.5626 +vn 0.6857 -0.5626 -0.4617 +vn -0.6857 -0.5626 -0.4617 +vn 0.6857 -0.6419 -0.3431 +vn -0.6857 -0.6419 -0.3431 +vn 0.6857 -0.6965 -0.2113 +vn -0.6857 -0.6965 -0.2113 +vn 0.6857 -0.7244 -0.0713 +vn -0.6857 -0.7244 -0.0713 +vn 0.6857 -0.7244 0.0713 +vn -0.6857 -0.7244 0.0713 +vn 0.6857 -0.6965 0.2113 +vn -0.6857 -0.6965 0.2113 +vn 0.6857 -0.6419 0.3431 +vn -0.6857 -0.6419 0.3431 +vn 0.6857 -0.5626 0.4617 +vn -0.6857 -0.5626 0.4617 +vn 0.6857 -0.4617 0.5626 +vn -0.6857 -0.4617 0.5626 +vn 0.6857 -0.3431 0.6419 +vn -0.6857 -0.3431 0.6419 +vn 0.6857 -0.2113 0.6965 +vn -0.6857 -0.2113 0.6965 +vn 0.6857 -0.0713 0.7244 +vn -0.6857 -0.0713 0.7244 +vn 0.6857 0.0713 0.7244 +vn -0.6857 0.0713 0.7244 +vn 0.6857 0.2113 0.6965 +vn -0.6857 0.2113 0.6965 +vn 0.6857 0.4617 0.5626 +vn -0.6857 0.4617 0.5626 +vn -0.6857 0.3431 0.6419 +vn 0.6857 0.3431 0.6419 +vn 0.6857 0.5626 0.4617 +vn -0.6857 0.5626 0.4617 +vn 0.6857 0.6419 0.3431 +vn -0.6857 0.6419 0.3431 +vn 0.6857 0.6965 0.2113 +vn -0.6857 0.6965 0.2113 +vn 0.6857 0.7244 0.0713 +vn -0.6857 0.7244 0.0713 +vn 0.6857 0.6965 -0.2113 +vn -0.6857 0.6965 -0.2113 +vn -0.6857 0.7244 -0.0713 +vn 0.6857 0.7244 -0.0713 +vn 0.6857 0.6419 -0.3431 +vn -0.6857 0.6419 -0.3431 +vn 0.6857 0.5626 -0.4617 +vn -0.6857 0.5626 -0.4617 +vn 0.2147 0.8614 0.4604 +vn 0.1087 0.8767 0.4686 +vn 0.1087 0.9513 0.2886 +vn 0.2147 0.9346 0.2835 +vn 0.2147 0.9720 0.0957 +vn 0.1087 0.9893 0.0974 +vn 0.2147 0.9720 -0.0957 +vn 0.1087 0.9893 -0.0974 +vn 0.2147 0.9346 -0.2835 +vn 0.1087 0.9513 -0.2886 +vn 0.2147 0.8614 -0.4604 +vn 0.1087 0.8767 -0.4686 +vn 0.2147 0.7550 -0.6196 +vn 0.1087 0.7684 -0.6306 +vn 0.1087 0.6306 -0.7684 +vn 0.2147 0.6196 -0.7550 +vn 0.2147 0.4604 -0.8614 +vn 0.1087 0.4686 -0.8767 +vn 0.2147 0.2835 -0.9346 +vn 0.1087 0.2886 -0.9513 +vn 0.2147 0.0957 -0.9720 +vn 0.1087 0.0974 -0.9893 +vn 0.1087 -0.0974 -0.9893 +vn 0.2147 -0.0957 -0.9720 +vn 0.1087 -0.2886 -0.9513 +vn 0.2147 -0.2835 -0.9346 +vn 0.2147 -0.4604 -0.8614 +vn 0.1087 -0.4686 -0.8767 +vn 0.1087 -0.6306 -0.7684 +vn 0.2147 -0.6196 -0.7550 +vn 0.1087 -0.7684 -0.6306 +vn 0.2147 -0.7550 -0.6196 +vn 0.2147 -0.8614 -0.4604 +vn 0.1087 -0.8767 -0.4686 +vn 0.1087 -0.9513 -0.2886 +vn 0.2147 -0.9346 -0.2835 +vn 0.2147 -0.9720 -0.0957 +vn 0.1087 -0.9893 -0.0974 +vn 0.1087 -0.9893 0.0974 +vn 0.2147 -0.9720 0.0957 +vn 0.2147 -0.9346 0.2835 +vn 0.1087 -0.9513 0.2886 +vn 0.1087 -0.8767 0.4686 +vn 0.2147 -0.8614 0.4604 +vn 0.1087 -0.7684 0.6306 +vn 0.2147 -0.7550 0.6196 +vn 0.1087 -0.6306 0.7684 +vn 0.2147 -0.6196 0.7550 +vn 0.1087 -0.4686 0.8767 +vn 0.2147 -0.4604 0.8614 +vn 0.1087 -0.2886 0.9513 +vn 0.2147 -0.2835 0.9346 +vn 0.1087 -0.0974 0.9893 +vn 0.2147 -0.0957 0.9720 +vn 0.2147 0.2835 0.9346 +vn 0.2147 0.0957 0.9720 +vn 0.1087 0.0974 0.9893 +vn 0.1087 0.2886 0.9513 +vn 0.2147 0.6196 0.7550 +vn 0.2147 0.4604 0.8614 +vn 0.1087 0.4686 0.8767 +vn 0.1087 0.6306 0.7684 +vn 0.2147 0.7550 0.6196 +vn 0.1087 0.7684 0.6306 +vn 0.6995 0.1458 -0.6995 +vn 0.6437 0.4139 -0.6437 +vn -0.1087 0.2886 -0.9513 +vn -0.1087 0.0974 -0.9893 +vn 0.6995 -0.1458 -0.6995 +vn -0.1087 -0.0974 -0.9893 +vn 0.6437 -0.4139 -0.6437 +vn -0.1087 -0.2886 -0.9513 +vn 0.5510 0.6267 -0.5510 +vn -0.1087 0.4686 -0.8767 +vn 0.5510 -0.6267 -0.5510 +vn -0.1087 -0.4686 -0.8767 +vn 0.4431 0.7793 -0.4431 +vn -0.1087 0.6306 -0.7684 +vn 0.4431 -0.7793 -0.4431 +vn -0.1087 -0.6306 -0.7684 +vn 0.5773 0.5773 -0.5773 +vn 0.4431 0.4431 -0.7793 +vn -0.1087 0.7684 -0.6306 +vn -0.2147 0.0957 -0.9720 +vn -0.2147 0.2835 -0.9346 +vn -0.2147 -0.0957 -0.9720 +vn -0.2147 -0.2835 -0.9346 +vn 0.4431 -0.4431 -0.7793 +vn 0.5773 -0.5773 -0.5773 +vn -0.1087 -0.7684 -0.6306 +vn 0.5510 0.5510 -0.6267 +vn -0.1087 0.8767 -0.4686 +vn -0.2147 0.4604 -0.8614 +vn -0.2147 -0.4604 -0.8614 +vn 0.5510 -0.5510 -0.6267 +vn -0.1087 -0.8767 -0.4686 +vn 0.6437 0.6437 -0.4139 +vn -0.1087 0.9513 -0.2886 +vn -0.2147 0.6196 -0.7550 +vn -0.2147 -0.6196 -0.7550 +vn 0.6437 -0.6437 -0.4139 +vn -0.1087 -0.9513 -0.2886 +vn 0.6995 0.6995 -0.1458 +vn -0.1087 0.9893 -0.0974 +vn -0.2147 0.7550 -0.6196 +vn -0.2147 -0.7550 -0.6196 +vn -0.2147 0.8614 -0.4604 +vn -0.2147 -0.8614 -0.4604 +vn 0.6995 -0.6995 0.1458 +vn 0.6995 -0.6995 -0.1458 +vn -0.1087 -0.9893 -0.0974 +vn -0.1087 -0.9893 0.0974 +vn 0.6995 0.6995 0.1458 +vn 0.6437 0.6437 0.4139 +vn -0.1087 0.9513 0.2886 +vn -0.1087 0.9893 0.0974 +vn -0.2147 0.9346 -0.2835 +vn -0.2147 -0.9346 -0.2835 +vn -0.2147 0.9720 -0.0957 +vn -0.2147 -0.9720 -0.0957 +vn 0.5510 -0.5510 0.6267 +vn 0.6437 -0.6437 0.4139 +vn -0.1087 -0.9513 0.2886 +vn -0.1087 -0.8767 0.4686 +vn 0.5510 0.5510 0.6267 +vn 0.4431 0.4431 0.7793 +vn -0.1087 0.7684 0.6306 +vn -0.1087 0.8767 0.4686 +vn -0.2147 0.9720 0.0957 +vn -0.2147 -0.9720 0.0957 +vn -0.6857 0.4617 -0.5626 +vn 0.6857 0.4617 -0.5626 +vn 0.4431 -0.4431 0.7793 +vn -0.1087 -0.7684 0.6306 +vn 0.5773 0.5773 0.5773 +vn 0.4431 0.7793 0.4431 +vn -0.1087 0.6306 0.7684 +vn -0.2147 0.9346 0.2835 +vn -0.2147 -0.9346 0.2835 +vn -0.2147 0.8614 0.4604 +vn -0.2147 -0.8614 0.4604 +vn -0.2147 0.7550 0.6196 +vn -0.2147 -0.7550 0.6196 +vn 0.6437 -0.4139 0.6437 +vn 0.5510 -0.6267 0.5510 +vn -0.1087 -0.4686 0.8767 +vn -0.1087 -0.2886 0.9513 +vn 0.6437 0.4139 0.6437 +vn 0.6995 0.1458 0.6995 +vn -0.1087 0.0974 0.9893 +vn -0.1087 0.2886 0.9513 +vn -0.2147 0.6196 0.7550 +vn -0.2147 -0.6196 0.7550 +vn -0.1087 -0.6306 0.7684 +vn 0.6995 -0.1458 0.6995 +vn -0.1087 -0.0974 0.9893 +vn -0.2147 0.4604 0.8614 +vn -0.1087 0.4686 0.8767 +vn -0.2147 -0.4604 0.8614 +vn -0.2147 0.2835 0.9346 +vn -0.2147 -0.2835 0.9346 +vn -0.2147 0.0957 0.9720 +vn -0.2147 -0.0957 0.9720 +vn -0.6100 -0.3032 0.7321 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.6088 0.7933 +vn -0.6100 0.4824 0.6287 +vn -0.6100 -0.7856 0.1034 +vn 0.0000 -0.9914 0.1305 +vn 0.0000 0.9914 -0.1305 +vn -0.6100 0.7856 -0.1034 +vn 0.0000 0.3827 -0.9239 +vn -0.6100 0.3032 -0.7321 +vn 0.0000 -0.6088 -0.7933 +vn -0.6100 -0.4824 -0.6287 +vn 0.6100 0.3032 -0.7321 +vn 0.6100 0.7856 -0.1034 +vn 0.6100 -0.4824 -0.6287 +vn 0.6100 0.4824 0.6287 +vn 0.6100 -0.3032 0.7321 +vn 0.6100 -0.7856 0.1034 +vn -0.6100 -0.7321 0.3032 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.1305 0.9914 +vn -0.6100 -0.1034 0.7856 +vn -0.6100 -0.6287 -0.4824 +vn 0.0000 -0.7933 -0.6088 +vn 0.0000 0.7933 0.6088 +vn -0.6100 0.6287 0.4824 +vn 0.0000 0.9239 -0.3827 +vn -0.6100 0.7321 -0.3032 +vn 0.0000 0.1305 -0.9914 +vn -0.6100 0.1034 -0.7856 +vn 0.6100 0.7321 -0.3032 +vn 0.6100 0.6287 0.4824 +vn 0.6100 0.1034 -0.7856 +vn 0.6100 -0.1034 0.7856 +vn 0.6100 -0.7321 0.3032 +vn 0.6100 -0.6287 -0.4824 +vn -0.6100 -0.7321 -0.3032 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 -0.7933 0.6088 +vn -0.6100 -0.6287 0.4824 +vn -0.6100 -0.1034 -0.7856 +vn 0.0000 -0.1305 -0.9914 +vn 0.0000 0.1305 0.9914 +vn -0.6100 0.1034 0.7856 +vn 0.0000 0.9239 0.3827 +vn -0.6100 0.7321 0.3032 +vn 0.0000 0.7933 -0.6088 +vn -0.6100 0.6287 -0.4824 +vn 0.6100 0.7321 0.3032 +vn 0.6100 0.1034 0.7856 +vn 0.6100 0.6287 -0.4824 +vn 0.6100 -0.6287 0.4824 +vn 0.6100 -0.7321 -0.3032 +vn 0.6100 -0.1034 -0.7856 +vn -0.6100 -0.3032 -0.7321 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.9914 -0.1305 +vn -0.6100 -0.7856 -0.1034 +vn -0.6100 0.4824 -0.6287 +vn 0.0000 0.6088 -0.7933 +vn 0.0000 -0.6088 0.7933 +vn -0.6100 -0.4824 0.6287 +vn 0.0000 0.3827 0.9239 +vn -0.6100 0.3032 0.7321 +vn 0.0000 0.9914 0.1305 +vn -0.6100 0.7856 0.1034 +vn 0.6100 0.3032 0.7321 +vn 0.6100 -0.4824 0.6287 +vn 0.6100 0.7856 0.1034 +vn 0.6100 -0.7856 -0.1034 +vn 0.6100 -0.3032 -0.7321 +vn 0.6100 0.4824 -0.6287 +vn -0.5510 0.5510 0.6267 +vn -0.6437 0.6437 0.4139 +vn -0.6995 0.6995 0.1458 +vn -0.6995 0.6995 -0.1458 +vn -0.6437 0.6437 -0.4139 +vn -0.5510 0.5510 -0.6267 +vn -0.4431 0.4431 -0.7793 +vn -0.5773 0.5773 -0.5773 +vn -0.4431 0.7793 -0.4431 +vn -0.5510 0.6267 -0.5510 +vn -0.6437 0.4139 -0.6437 +vn -0.6995 0.1458 -0.6995 +vn -0.6995 -0.1458 -0.6995 +vn -0.6437 -0.4139 -0.6437 +vn -0.5510 -0.6267 -0.5510 +vn -0.4431 -0.7793 -0.4431 +vn -0.5773 -0.5773 -0.5773 +vn -0.4431 -0.4431 -0.7793 +vn -0.5510 -0.5510 -0.6267 +vn -0.6437 -0.6437 -0.4139 +vn -0.6995 -0.6995 -0.1458 +vn -0.6995 -0.6995 0.1458 +vn -0.6437 -0.6437 0.4139 +vn -0.5510 -0.5510 0.6267 +vn -0.4431 -0.4431 0.7793 +vn -0.5773 -0.5773 0.5773 +vn -0.4431 -0.7793 0.4431 +vn -0.5510 -0.6267 0.5510 +vn -0.6437 -0.4139 0.6437 +vn -0.6995 -0.1458 0.6995 +vn -0.6995 0.1458 0.6995 +vn -0.6437 0.4139 0.6437 +vn -0.5510 0.6267 0.5510 +vn -0.4431 0.7793 0.4431 +vn -0.5773 0.5773 0.5773 +vn -0.4431 0.4431 0.7793 +vn 0.4431 -0.7793 0.4431 +vn 0.5773 -0.5773 0.5773 +vn 0.5510 0.6267 0.5510 +vn -0.6100 -0.5603 0.5603 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.2588 0.9659 +vn -0.6100 0.2051 0.7654 +vn -0.6100 -0.7654 -0.2051 +vn 0.0000 -0.9659 -0.2588 +vn 0.0000 0.9659 0.2588 +vn -0.6100 0.7654 0.2051 +vn 0.0000 0.7071 -0.7071 +vn -0.6100 0.5603 -0.5603 +vn 0.0000 -0.2588 -0.9659 +vn -0.6100 -0.2051 -0.7654 +vn 0.6100 0.5603 -0.5603 +vn 0.6100 0.7654 0.2051 +vn 0.6100 -0.2051 -0.7654 +vn 0.6100 0.2051 0.7654 +vn 0.6100 -0.5603 0.5603 +vn 0.6100 -0.7654 -0.2051 +vn -0.6100 -0.7924 0.0000 +vn 0.0000 -0.5000 0.8660 +vn -0.6100 -0.3962 0.6862 +vn -0.6100 -0.3962 -0.6862 +vn 0.0000 -0.5000 -0.8660 +vn 0.0000 0.5000 0.8660 +vn -0.6100 0.3962 0.6862 +vn -0.6100 0.7924 0.0000 +vn 0.0000 0.5000 -0.8660 +vn -0.6100 0.3962 -0.6862 +vn 0.6100 0.7924 0.0000 +vn 0.6100 0.3962 0.6862 +vn 0.6100 0.3962 -0.6862 +vn 0.6100 -0.3962 0.6862 +vn 0.6100 -0.7924 0.0000 +vn 0.6100 -0.3962 -0.6862 +vn -0.6100 -0.5603 -0.5603 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.9659 0.2588 +vn -0.6100 -0.7654 0.2051 +vn -0.6100 0.2051 -0.7654 +vn 0.0000 0.2588 -0.9659 +vn 0.0000 -0.2588 0.9659 +vn -0.6100 -0.2051 0.7654 +vn 0.0000 0.7071 0.7071 +vn -0.6100 0.5603 0.5603 +vn 0.0000 0.9659 -0.2588 +vn -0.6100 0.7654 -0.2051 +vn 0.6100 0.5603 0.5603 +vn 0.6100 -0.2051 0.7654 +vn 0.6100 0.7654 -0.2051 +vn 0.6100 -0.7654 0.2051 +vn 0.6100 -0.5603 -0.5603 +vn 0.6100 0.2051 -0.7654 +vn -0.6100 0.0000 -0.7924 +vn 0.0000 -0.8660 -0.5000 +vn -0.6100 -0.6862 -0.3962 +vn -0.6100 0.6862 -0.3962 +vn 0.0000 0.8660 -0.5000 +vn 0.0000 -0.8660 0.5000 +vn -0.6100 -0.6862 0.3962 +vn -0.6100 0.0000 0.7924 +vn 0.0000 0.8660 0.5000 +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.6100 -0.6862 -0.3962 +vn 0.6100 0.0000 -0.7924 +vn 0.6100 0.6862 -0.3962 +vn 0.2113 -0.6857 -0.6965 +vn 0.2113 0.6857 -0.6965 +vn 0.3431 0.6857 -0.6419 +vn 0.3431 -0.6857 -0.6419 +vn 0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn -0.0713 -0.6857 -0.7244 +vn -0.0713 0.6857 -0.7244 +vn -0.2113 -0.6857 -0.6965 +vn -0.2113 0.6857 -0.6965 +vn -0.3431 -0.6857 -0.6419 +vn -0.3431 0.6857 -0.6419 +vn -0.4617 -0.6857 -0.5626 +vn -0.4617 0.6857 -0.5626 +vn -0.5626 -0.6857 -0.4617 +vn -0.5626 0.6857 -0.4617 +vn -0.6419 -0.6857 -0.3431 +vn -0.6419 0.6857 -0.3431 +vn -0.6965 -0.6857 -0.2113 +vn -0.6965 0.6857 -0.2113 +vn -0.7244 -0.6857 -0.0713 +vn -0.7244 0.6857 -0.0713 +vn -0.7244 -0.6857 0.0713 +vn -0.7244 0.6857 0.0713 +vn -0.6965 -0.6857 0.2113 +vn -0.6965 0.6857 0.2113 +vn -0.6419 -0.6857 0.3431 +vn -0.6419 0.6857 0.3431 +vn -0.5626 -0.6857 0.4617 +vn -0.5626 0.6857 0.4617 +vn -0.4617 -0.6857 0.5626 +vn -0.4617 0.6857 0.5626 +vn -0.3431 -0.6857 0.6419 +vn -0.3431 0.6857 0.6419 +vn -0.2113 -0.6857 0.6965 +vn -0.2113 0.6857 0.6965 +vn -0.0713 -0.6857 0.7244 +vn -0.0713 0.6857 0.7244 +vn 0.0713 -0.6857 0.7244 +vn 0.0713 0.6857 0.7244 +vn 0.2113 -0.6857 0.6965 +vn 0.2113 0.6857 0.6965 +vn 0.4617 -0.6857 0.5626 +vn 0.4617 0.6857 0.5626 +vn 0.3431 0.6857 0.6419 +vn 0.3431 -0.6857 0.6419 +vn 0.5626 -0.6857 0.4617 +vn 0.5626 0.6857 0.4617 +vn 0.6419 -0.6857 0.3431 +vn 0.6419 0.6857 0.3431 +vn 0.6965 -0.6857 0.2113 +vn 0.6965 0.6857 0.2113 +vn 0.7244 -0.6857 0.0713 +vn 0.7244 0.6857 0.0713 +vn 0.6965 -0.6857 -0.2113 +vn 0.6965 0.6857 -0.2113 +vn 0.7244 0.6857 -0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.6419 -0.6857 -0.3431 +vn 0.6419 0.6857 -0.3431 +vn 0.5626 -0.6857 -0.4617 +vn 0.5626 0.6857 -0.4617 +vn 0.8614 -0.2147 0.4604 +vn 0.8767 -0.1087 0.4686 +vn 0.9513 -0.1087 0.2886 +vn 0.9346 -0.2147 0.2835 +vn 0.9720 -0.2147 0.0957 +vn 0.9893 -0.1087 0.0974 +vn 0.9720 -0.2147 -0.0957 +vn 0.9893 -0.1087 -0.0974 +vn 0.9346 -0.2147 -0.2835 +vn 0.9513 -0.1087 -0.2886 +vn 0.8614 -0.2147 -0.4604 +vn 0.8767 -0.1087 -0.4686 +vn 0.7550 -0.2147 -0.6196 +vn 0.7684 -0.1087 -0.6306 +vn 0.6306 -0.1087 -0.7684 +vn 0.6196 -0.2147 -0.7550 +vn 0.4604 -0.2147 -0.8614 +vn 0.4686 -0.1087 -0.8767 +vn 0.2835 -0.2147 -0.9346 +vn 0.2886 -0.1087 -0.9513 +vn 0.0957 -0.2147 -0.9720 +vn 0.0974 -0.1087 -0.9893 +vn -0.0974 -0.1087 -0.9893 +vn -0.0957 -0.2147 -0.9720 +vn -0.2886 -0.1087 -0.9513 +vn -0.2835 -0.2147 -0.9346 +vn -0.4604 -0.2147 -0.8614 +vn -0.4686 -0.1087 -0.8767 +vn -0.6306 -0.1087 -0.7684 +vn -0.6196 -0.2147 -0.7550 +vn -0.7684 -0.1087 -0.6306 +vn -0.7550 -0.2147 -0.6196 +vn -0.8614 -0.2147 -0.4604 +vn -0.8767 -0.1087 -0.4686 +vn -0.9513 -0.1087 -0.2886 +vn -0.9346 -0.2147 -0.2835 +vn -0.9720 -0.2147 -0.0957 +vn -0.9893 -0.1087 -0.0974 +vn -0.9893 -0.1087 0.0974 +vn -0.9720 -0.2147 0.0957 +vn -0.9346 -0.2147 0.2835 +vn -0.9513 -0.1087 0.2886 +vn -0.8767 -0.1087 0.4686 +vn -0.8614 -0.2147 0.4604 +vn -0.7684 -0.1087 0.6306 +vn -0.7550 -0.2147 0.6196 +vn -0.6306 -0.1087 0.7684 +vn -0.6196 -0.2147 0.7550 +vn -0.4686 -0.1087 0.8767 +vn -0.4604 -0.2147 0.8614 +vn -0.2886 -0.1087 0.9513 +vn -0.2835 -0.2147 0.9346 +vn -0.0974 -0.1087 0.9893 +vn -0.0957 -0.2147 0.9720 +vn 0.2835 -0.2147 0.9346 +vn 0.0957 -0.2147 0.9720 +vn 0.0974 -0.1087 0.9893 +vn 0.2886 -0.1087 0.9513 +vn 0.6196 -0.2147 0.7550 +vn 0.4604 -0.2147 0.8614 +vn 0.4686 -0.1087 0.8767 +vn 0.6306 -0.1087 0.7684 +vn 0.7550 -0.2147 0.6196 +vn 0.7684 -0.1087 0.6306 +vn 0.1458 -0.6995 -0.6995 +vn 0.4139 -0.6437 -0.6437 +vn 0.2886 0.1087 -0.9513 +vn 0.0974 0.1087 -0.9893 +vn -0.1458 -0.6995 -0.6995 +vn -0.0974 0.1087 -0.9893 +vn -0.4139 -0.6437 -0.6437 +vn -0.2886 0.1087 -0.9513 +vn 0.6267 -0.5510 -0.5510 +vn 0.4686 0.1087 -0.8767 +vn -0.6267 -0.5510 -0.5510 +vn -0.4686 0.1087 -0.8767 +vn 0.7793 -0.4431 -0.4431 +vn 0.6306 0.1087 -0.7684 +vn -0.7793 -0.4431 -0.4431 +vn -0.6306 0.1087 -0.7684 +vn 0.7684 0.1087 -0.6306 +vn 0.0957 0.2147 -0.9720 +vn 0.2835 0.2147 -0.9346 +vn -0.0957 0.2147 -0.9720 +vn -0.2835 0.2147 -0.9346 +vn -0.7684 0.1087 -0.6306 +vn 0.8767 0.1087 -0.4686 +vn 0.4604 0.2147 -0.8614 +vn -0.4604 0.2147 -0.8614 +vn -0.8767 0.1087 -0.4686 +vn 0.9513 0.1087 -0.2886 +vn 0.6196 0.2147 -0.7550 +vn -0.6196 0.2147 -0.7550 +vn -0.9513 0.1087 -0.2886 +vn 0.9893 0.1087 -0.0974 +vn 0.7550 0.2147 -0.6196 +vn -0.7550 0.2147 -0.6196 +vn 0.8614 0.2147 -0.4604 +vn -0.8614 0.2147 -0.4604 +vn -0.9893 0.1087 -0.0974 +vn -0.9893 0.1087 0.0974 +vn 0.9513 0.1087 0.2886 +vn 0.9893 0.1087 0.0974 +vn 0.9346 0.2147 -0.2835 +vn -0.9346 0.2147 -0.2835 +vn 0.9720 0.2147 -0.0957 +vn -0.9720 0.2147 -0.0957 +vn -0.9513 0.1087 0.2886 +vn -0.8767 0.1087 0.4686 +vn 0.7684 0.1087 0.6306 +vn 0.8767 0.1087 0.4686 +vn 0.9720 0.2147 0.0957 +vn -0.9720 0.2147 0.0957 +vn 0.4617 0.6857 -0.5626 +vn 0.4617 -0.6857 -0.5626 +vn -0.7684 0.1087 0.6306 +vn 0.7793 -0.4431 0.4431 +vn 0.6306 0.1087 0.7684 +vn 0.9346 0.2147 0.2835 +vn -0.9346 0.2147 0.2835 +vn 0.8614 0.2147 0.4604 +vn -0.8614 0.2147 0.4604 +vn 0.7550 0.2147 0.6196 +vn -0.7550 0.2147 0.6196 +vn -0.4139 -0.6437 0.6437 +vn -0.6267 -0.5510 0.5510 +vn -0.4686 0.1087 0.8767 +vn -0.2886 0.1087 0.9513 +vn 0.4139 -0.6437 0.6437 +vn 0.1458 -0.6995 0.6995 +vn 0.0974 0.1087 0.9893 +vn 0.2886 0.1087 0.9513 +vn 0.6196 0.2147 0.7550 +vn -0.6196 0.2147 0.7550 +vn -0.6306 0.1087 0.7684 +vn -0.1458 -0.6995 0.6995 +vn -0.0974 0.1087 0.9893 +vn 0.4604 0.2147 0.8614 +vn 0.4686 0.1087 0.8767 +vn -0.4604 0.2147 0.8614 +vn 0.2835 0.2147 0.9346 +vn -0.2835 0.2147 0.9346 +vn 0.0957 0.2147 0.9720 +vn -0.0957 0.2147 0.9720 +vn -0.3032 0.6100 0.7321 +vn -0.3827 0.0000 0.9239 +vn 0.6088 0.0000 0.7933 +vn 0.4824 0.6100 0.6287 +vn -0.7856 0.6100 0.1034 +vn -0.9914 0.0000 0.1305 +vn 0.9914 0.0000 -0.1305 +vn 0.7856 0.6100 -0.1034 +vn 0.3827 0.0000 -0.9239 +vn 0.3032 0.6100 -0.7321 +vn -0.6088 0.0000 -0.7933 +vn -0.4824 0.6100 -0.6287 +vn 0.3032 -0.6100 -0.7321 +vn 0.7856 -0.6100 -0.1034 +vn -0.4824 -0.6100 -0.6287 +vn 0.4824 -0.6100 0.6287 +vn -0.3032 -0.6100 0.7321 +vn -0.7856 -0.6100 0.1034 +vn -0.7321 0.6100 0.3032 +vn -0.9239 0.0000 0.3827 +vn -0.1305 0.0000 0.9914 +vn -0.1034 0.6100 0.7856 +vn -0.6287 0.6100 -0.4824 +vn -0.7933 0.0000 -0.6088 +vn 0.7933 0.0000 0.6088 +vn 0.6287 0.6100 0.4824 +vn 0.9239 0.0000 -0.3827 +vn 0.7321 0.6100 -0.3032 +vn 0.1305 0.0000 -0.9914 +vn 0.1034 0.6100 -0.7856 +vn 0.7321 -0.6100 -0.3032 +vn 0.6287 -0.6100 0.4824 +vn 0.1034 -0.6100 -0.7856 +vn -0.1034 -0.6100 0.7856 +vn -0.7321 -0.6100 0.3032 +vn -0.6287 -0.6100 -0.4824 +vn -0.7321 0.6100 -0.3032 +vn -0.9239 0.0000 -0.3827 +vn -0.7933 0.0000 0.6088 +vn -0.6287 0.6100 0.4824 +vn -0.1034 0.6100 -0.7856 +vn -0.1305 0.0000 -0.9914 +vn 0.1305 0.0000 0.9914 +vn 0.1034 0.6100 0.7856 +vn 0.9239 0.0000 0.3827 +vn 0.7321 0.6100 0.3032 +vn 0.7933 0.0000 -0.6088 +vn 0.6287 0.6100 -0.4824 +vn 0.7321 -0.6100 0.3032 +vn 0.1034 -0.6100 0.7856 +vn 0.6287 -0.6100 -0.4824 +vn -0.6287 -0.6100 0.4824 +vn -0.7321 -0.6100 -0.3032 +vn -0.1034 -0.6100 -0.7856 +vn -0.3032 0.6100 -0.7321 +vn -0.3827 0.0000 -0.9239 +vn -0.9914 0.0000 -0.1305 +vn -0.7856 0.6100 -0.1034 +vn 0.4824 0.6100 -0.6287 +vn 0.6088 0.0000 -0.7933 +vn -0.6088 0.0000 0.7933 +vn -0.4824 0.6100 0.6287 +vn 0.3827 0.0000 0.9239 +vn 0.3032 0.6100 0.7321 +vn 0.9914 0.0000 0.1305 +vn 0.7856 0.6100 0.1034 +vn 0.3032 -0.6100 0.7321 +vn -0.4824 -0.6100 0.6287 +vn 0.7856 -0.6100 0.1034 +vn -0.7856 -0.6100 -0.1034 +vn -0.3032 -0.6100 -0.7321 +vn 0.4824 -0.6100 -0.6287 +vn 0.7793 0.4431 -0.4431 +vn 0.6267 0.5510 -0.5510 +vn 0.4139 0.6437 -0.6437 +vn 0.1458 0.6995 -0.6995 +vn -0.1458 0.6995 -0.6995 +vn -0.4139 0.6437 -0.6437 +vn -0.6267 0.5510 -0.5510 +vn -0.7793 0.4431 -0.4431 +vn -0.7793 0.4431 0.4431 +vn -0.6267 0.5510 0.5510 +vn -0.4139 0.6437 0.6437 +vn -0.1458 0.6995 0.6995 +vn 0.1458 0.6995 0.6995 +vn 0.4139 0.6437 0.6437 +vn 0.6267 0.5510 0.5510 +vn 0.7793 0.4431 0.4431 +vn -0.7793 -0.4431 0.4431 +vn 0.6267 -0.5510 0.5510 +vn -0.5603 0.6100 0.5603 +vn -0.7071 0.0000 0.7071 +vn 0.2588 0.0000 0.9659 +vn 0.2051 0.6100 0.7654 +vn -0.7654 0.6100 -0.2051 +vn -0.9659 0.0000 -0.2588 +vn 0.9659 0.0000 0.2588 +vn 0.7654 0.6100 0.2051 +vn 0.7071 0.0000 -0.7071 +vn 0.5603 0.6100 -0.5603 +vn -0.2588 0.0000 -0.9659 +vn -0.2051 0.6100 -0.7654 +vn 0.5603 -0.6100 -0.5603 +vn 0.7654 -0.6100 0.2051 +vn -0.2051 -0.6100 -0.7654 +vn 0.2051 -0.6100 0.7654 +vn -0.5603 -0.6100 0.5603 +vn -0.7654 -0.6100 -0.2051 +vn -0.7924 0.6100 0.0000 +vn -0.5000 0.0000 0.8660 +vn -0.3962 0.6100 0.6862 +vn -0.3962 0.6100 -0.6862 +vn -0.5000 0.0000 -0.8660 +vn 0.5000 0.0000 0.8660 +vn 0.3962 0.6100 0.6862 +vn 0.7924 0.6100 0.0000 +vn 0.5000 0.0000 -0.8660 +vn 0.3962 0.6100 -0.6862 +vn 0.7924 -0.6100 0.0000 +vn 0.3962 -0.6100 0.6862 +vn 0.3962 -0.6100 -0.6862 +vn -0.3962 -0.6100 0.6862 +vn -0.7924 -0.6100 0.0000 +vn -0.3962 -0.6100 -0.6862 +vn -0.5603 0.6100 -0.5603 +vn -0.7071 0.0000 -0.7071 +vn -0.9659 0.0000 0.2588 +vn -0.7654 0.6100 0.2051 +vn 0.2051 0.6100 -0.7654 +vn 0.2588 0.0000 -0.9659 +vn -0.2588 0.0000 0.9659 +vn -0.2051 0.6100 0.7654 +vn 0.7071 0.0000 0.7071 +vn 0.5603 0.6100 0.5603 +vn 0.9659 0.0000 -0.2588 +vn 0.7654 0.6100 -0.2051 +vn 0.5603 -0.6100 0.5603 +vn -0.2051 -0.6100 0.7654 +vn 0.7654 -0.6100 -0.2051 +vn -0.7654 -0.6100 0.2051 +vn -0.5603 -0.6100 -0.5603 +vn 0.2051 -0.6100 -0.7654 +vn 0.0000 0.6100 -0.7924 +vn -0.8660 0.0000 -0.5000 +vn -0.6862 0.6100 -0.3962 +vn 0.6862 0.6100 -0.3962 +vn 0.8660 0.0000 -0.5000 +vn -0.8660 0.0000 0.5000 +vn -0.6862 0.6100 0.3962 +vn 0.0000 0.6100 0.7924 +vn 0.8660 0.0000 0.5000 +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.6862 -0.6100 -0.3962 +vn 0.0000 -0.6100 -0.7924 +vn 0.6862 -0.6100 -0.3962 +vn 0.2113 0.6965 -0.6857 +vn 0.2113 0.6965 0.6857 +vn 0.3431 0.6419 0.6857 +vn 0.3431 0.6419 -0.6857 +vn 0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.2113 0.6965 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.4617 0.5626 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.5626 0.4617 0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.6419 0.3431 0.6857 +vn -0.6965 0.2113 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.7244 0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.6419 -0.3431 0.6857 +vn -0.5626 -0.4617 -0.6857 +vn -0.5626 -0.4617 0.6857 +vn -0.4617 -0.5626 -0.6857 +vn -0.4617 -0.5626 0.6857 +vn -0.3431 -0.6419 -0.6857 +vn -0.3431 -0.6419 0.6857 +vn -0.2113 -0.6965 -0.6857 +vn -0.2113 -0.6965 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn 0.0713 -0.7244 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn 0.4617 -0.5626 -0.6857 +vn 0.4617 -0.5626 0.6857 +vn 0.3431 -0.6419 0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.5626 -0.4617 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.6419 -0.3431 -0.6857 +vn 0.6419 -0.3431 0.6857 +vn 0.6965 -0.2113 -0.6857 +vn 0.6965 -0.2113 0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.6965 0.2113 -0.6857 +vn 0.6965 0.2113 0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn 0.6419 0.3431 -0.6857 +vn 0.6419 0.3431 0.6857 +vn 0.5626 0.4617 -0.6857 +vn 0.5626 0.4617 0.6857 +vn 0.8614 -0.4604 -0.2147 +vn 0.8767 -0.4686 -0.1087 +vn 0.9513 -0.2886 -0.1087 +vn 0.9346 -0.2835 -0.2147 +vn 0.9720 -0.0957 -0.2147 +vn 0.9893 -0.0974 -0.1087 +vn 0.9720 0.0957 -0.2147 +vn 0.9893 0.0974 -0.1087 +vn 0.9346 0.2835 -0.2147 +vn 0.9513 0.2886 -0.1087 +vn 0.8614 0.4604 -0.2147 +vn 0.8767 0.4686 -0.1087 +vn 0.7550 0.6196 -0.2147 +vn 0.7684 0.6306 -0.1087 +vn 0.6306 0.7684 -0.1087 +vn 0.6196 0.7550 -0.2147 +vn 0.4604 0.8614 -0.2147 +vn 0.4686 0.8767 -0.1087 +vn 0.2835 0.9346 -0.2147 +vn 0.2886 0.9513 -0.1087 +vn 0.0957 0.9720 -0.2147 +vn 0.0974 0.9893 -0.1087 +vn -0.0974 0.9893 -0.1087 +vn -0.0957 0.9720 -0.2147 +vn -0.2886 0.9513 -0.1087 +vn -0.2835 0.9346 -0.2147 +vn -0.4604 0.8614 -0.2147 +vn -0.4686 0.8767 -0.1087 +vn -0.6306 0.7684 -0.1087 +vn -0.6196 0.7550 -0.2147 +vn -0.7684 0.6306 -0.1087 +vn -0.7550 0.6196 -0.2147 +vn -0.8614 0.4604 -0.2147 +vn -0.8767 0.4686 -0.1087 +vn -0.9513 0.2886 -0.1087 +vn -0.9346 0.2835 -0.2147 +vn -0.9720 0.0957 -0.2147 +vn -0.9893 0.0974 -0.1087 +vn -0.9893 -0.0974 -0.1087 +vn -0.9720 -0.0957 -0.2147 +vn -0.9346 -0.2835 -0.2147 +vn -0.9513 -0.2886 -0.1087 +vn -0.8767 -0.4686 -0.1087 +vn -0.8614 -0.4604 -0.2147 +vn -0.7684 -0.6306 -0.1087 +vn -0.7550 -0.6196 -0.2147 +vn -0.6306 -0.7684 -0.1087 +vn -0.6196 -0.7550 -0.2147 +vn -0.4686 -0.8767 -0.1087 +vn -0.4604 -0.8614 -0.2147 +vn -0.2886 -0.9513 -0.1087 +vn -0.2835 -0.9346 -0.2147 +vn -0.0974 -0.9893 -0.1087 +vn -0.0957 -0.9720 -0.2147 +vn 0.2835 -0.9346 -0.2147 +vn 0.0957 -0.9720 -0.2147 +vn 0.0974 -0.9893 -0.1087 +vn 0.2886 -0.9513 -0.1087 +vn 0.6196 -0.7550 -0.2147 +vn 0.4604 -0.8614 -0.2147 +vn 0.4686 -0.8767 -0.1087 +vn 0.6306 -0.7684 -0.1087 +vn 0.7550 -0.6196 -0.2147 +vn 0.7684 -0.6306 -0.1087 +vn 0.2886 0.9513 0.1087 +vn 0.0974 0.9893 0.1087 +vn -0.0974 0.9893 0.1087 +vn -0.2886 0.9513 0.1087 +vn 0.4686 0.8767 0.1087 +vn -0.4686 0.8767 0.1087 +vn 0.6306 0.7684 0.1087 +vn -0.6306 0.7684 0.1087 +vn 0.7684 0.6306 0.1087 +vn 0.0957 0.9720 0.2147 +vn 0.2835 0.9346 0.2147 +vn -0.0957 0.9720 0.2147 +vn -0.2835 0.9346 0.2147 +vn -0.7684 0.6306 0.1087 +vn 0.8767 0.4686 0.1087 +vn 0.4604 0.8614 0.2147 +vn -0.4604 0.8614 0.2147 +vn -0.8767 0.4686 0.1087 +vn 0.9513 0.2886 0.1087 +vn 0.6196 0.7550 0.2147 +vn -0.6196 0.7550 0.2147 +vn -0.9513 0.2886 0.1087 +vn 0.9893 0.0974 0.1087 +vn 0.7550 0.6196 0.2147 +vn -0.7550 0.6196 0.2147 +vn 0.8614 0.4604 0.2147 +vn -0.8614 0.4604 0.2147 +vn -0.9893 0.0974 0.1087 +vn -0.9893 -0.0974 0.1087 +vn 0.9513 -0.2886 0.1087 +vn 0.9893 -0.0974 0.1087 +vn 0.9346 0.2835 0.2147 +vn -0.9346 0.2835 0.2147 +vn 0.9720 0.0957 0.2147 +vn -0.9720 0.0957 0.2147 +vn -0.9513 -0.2886 0.1087 +vn -0.8767 -0.4686 0.1087 +vn 0.7684 -0.6306 0.1087 +vn 0.8767 -0.4686 0.1087 +vn 0.9720 -0.0957 0.2147 +vn -0.9720 -0.0957 0.2147 +vn 0.4617 0.5626 0.6857 +vn 0.4617 0.5626 -0.6857 +vn -0.7684 -0.6306 0.1087 +vn 0.6306 -0.7684 0.1087 +vn 0.9346 -0.2835 0.2147 +vn -0.9346 -0.2835 0.2147 +vn 0.8614 -0.4604 0.2147 +vn -0.8614 -0.4604 0.2147 +vn 0.7550 -0.6196 0.2147 +vn -0.7550 -0.6196 0.2147 +vn -0.4686 -0.8767 0.1087 +vn -0.2886 -0.9513 0.1087 +vn 0.0974 -0.9893 0.1087 +vn 0.2886 -0.9513 0.1087 +vn 0.6196 -0.7550 0.2147 +vn -0.6196 -0.7550 0.2147 +vn -0.6306 -0.7684 0.1087 +vn -0.0974 -0.9893 0.1087 +vn 0.4604 -0.8614 0.2147 +vn 0.4686 -0.8767 0.1087 +vn -0.4604 -0.8614 0.2147 +vn 0.2835 -0.9346 0.2147 +vn -0.2835 -0.9346 0.2147 +vn 0.0957 -0.9720 0.2147 +vn -0.0957 -0.9720 0.2147 +vn -0.3032 -0.7321 0.6100 +vn -0.3827 -0.9239 0.0000 +vn 0.6088 -0.7933 0.0000 +vn 0.4824 -0.6287 0.6100 +vn -0.7856 -0.1034 0.6100 +vn -0.9914 -0.1305 0.0000 +vn 0.9914 0.1305 0.0000 +vn 0.7856 0.1034 0.6100 +vn 0.3827 0.9239 0.0000 +vn 0.3032 0.7321 0.6100 +vn -0.6088 0.7933 0.0000 +vn -0.4824 0.6287 0.6100 +vn 0.3032 0.7321 -0.6100 +vn 0.7856 0.1034 -0.6100 +vn -0.4824 0.6287 -0.6100 +vn 0.4824 -0.6287 -0.6100 +vn -0.3032 -0.7321 -0.6100 +vn -0.7856 -0.1034 -0.6100 +vn -0.7321 -0.3032 0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.1305 -0.9914 0.0000 +vn -0.1034 -0.7856 0.6100 +vn -0.6287 0.4824 0.6100 +vn -0.7933 0.6088 0.0000 +vn 0.7933 -0.6088 0.0000 +vn 0.6287 -0.4824 0.6100 +vn 0.9239 0.3827 0.0000 +vn 0.7321 0.3032 0.6100 +vn 0.1305 0.9914 0.0000 +vn 0.1034 0.7856 0.6100 +vn 0.7321 0.3032 -0.6100 +vn 0.6287 -0.4824 -0.6100 +vn 0.1034 0.7856 -0.6100 +vn -0.1034 -0.7856 -0.6100 +vn -0.7321 -0.3032 -0.6100 +vn -0.6287 0.4824 -0.6100 +vn -0.7321 0.3032 0.6100 +vn -0.9239 0.3827 0.0000 +vn -0.7933 -0.6088 0.0000 +vn -0.6287 -0.4824 0.6100 +vn -0.1034 0.7856 0.6100 +vn -0.1305 0.9914 0.0000 +vn 0.1305 -0.9914 0.0000 +vn 0.1034 -0.7856 0.6100 +vn 0.9239 -0.3827 0.0000 +vn 0.7321 -0.3032 0.6100 +vn 0.7933 0.6088 0.0000 +vn 0.6287 0.4824 0.6100 +vn 0.7321 -0.3032 -0.6100 +vn 0.1034 -0.7856 -0.6100 +vn 0.6287 0.4824 -0.6100 +vn -0.6287 -0.4824 -0.6100 +vn -0.7321 0.3032 -0.6100 +vn -0.1034 0.7856 -0.6100 +vn -0.3032 0.7321 0.6100 +vn -0.3827 0.9239 0.0000 +vn -0.9914 0.1305 0.0000 +vn -0.7856 0.1034 0.6100 +vn 0.4824 0.6287 0.6100 +vn 0.6088 0.7933 0.0000 +vn -0.6088 -0.7933 0.0000 +vn -0.4824 -0.6287 0.6100 +vn 0.3827 -0.9239 0.0000 +vn 0.3032 -0.7321 0.6100 +vn 0.9914 -0.1305 0.0000 +vn 0.7856 -0.1034 0.6100 +vn 0.3032 -0.7321 -0.6100 +vn -0.4824 -0.6287 -0.6100 +vn 0.7856 -0.1034 -0.6100 +vn -0.7856 0.1034 -0.6100 +vn -0.3032 0.7321 -0.6100 +vn 0.4824 0.6287 -0.6100 +vn -0.5603 -0.5603 0.6100 +vn -0.7071 -0.7071 0.0000 +vn 0.2588 -0.9659 0.0000 +vn 0.2051 -0.7654 0.6100 +vn -0.7654 0.2051 0.6100 +vn -0.9659 0.2588 0.0000 +vn 0.9659 -0.2588 0.0000 +vn 0.7654 -0.2051 0.6100 +vn 0.7071 0.7071 0.0000 +vn 0.5603 0.5603 0.6100 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 0.6100 +vn 0.5603 0.5603 -0.6100 +vn 0.7654 -0.2051 -0.6100 +vn -0.2051 0.7654 -0.6100 +vn 0.2051 -0.7654 -0.6100 +vn -0.5603 -0.5603 -0.6100 +vn -0.7654 0.2051 -0.6100 +vn -0.7924 0.0000 0.6100 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 0.6100 +vn -0.3962 0.6862 0.6100 +vn -0.5000 0.8660 0.0000 +vn 0.5000 -0.8660 0.0000 +vn 0.3962 -0.6862 0.6100 +vn 0.7924 0.0000 0.6100 +vn 0.5000 0.8660 0.0000 +vn 0.3962 0.6862 0.6100 +vn 0.7924 0.0000 -0.6100 +vn 0.3962 -0.6862 -0.6100 +vn 0.3962 0.6862 -0.6100 +vn -0.3962 -0.6862 -0.6100 +vn -0.7924 0.0000 -0.6100 +vn -0.3962 0.6862 -0.6100 +vn -0.5603 0.5603 0.6100 +vn -0.7071 0.7071 0.0000 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 0.6100 +vn 0.2051 0.7654 0.6100 +vn 0.2588 0.9659 0.0000 +vn -0.2588 -0.9659 0.0000 +vn -0.2051 -0.7654 0.6100 +vn 0.7071 -0.7071 0.0000 +vn 0.5603 -0.5603 0.6100 +vn 0.9659 0.2588 0.0000 +vn 0.7654 0.2051 0.6100 +vn 0.5603 -0.5603 -0.6100 +vn -0.2051 -0.7654 -0.6100 +vn 0.7654 0.2051 -0.6100 +vn -0.7654 -0.2051 -0.6100 +vn -0.5603 0.5603 -0.6100 +vn 0.2051 0.7654 -0.6100 +vn 0.0000 0.7924 0.6100 +vn -0.8660 0.5000 0.0000 +vn -0.6862 0.3962 0.6100 +vn 0.6862 0.3962 0.6100 +vn 0.8660 0.5000 0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.6862 -0.3962 0.6100 +vn 0.0000 -0.7924 0.6100 +vn 0.8660 -0.5000 0.0000 +vn 0.6862 -0.3962 0.6100 +vn 0.0000 -0.7924 -0.6100 +vn -0.6862 -0.3962 -0.6100 +vn 0.6862 -0.3962 -0.6100 +vn -0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 -0.6100 +vn 0.6862 0.3962 -0.6100 +g Pipe_Cylinder.002_None +s off +f 129/1/1 132/2/1 133/3/1 134/4/1 135/5/1 136/6/1 +f 141/7/2 144/8/2 145/9/2 146/10/2 147/11/2 148/12/2 +f 153/13/1 156/14/1 157/15/1 158/16/1 159/17/1 160/18/1 +f 165/19/2 168/20/2 169/21/2 170/22/2 171/23/2 172/24/2 +f 177/25/1 180/26/1 181/27/1 182/28/1 183/29/1 184/30/1 +f 189/31/2 192/32/2 193/33/2 194/34/2 195/35/2 196/36/2 +f 201/37/1 204/38/1 205/39/1 206/40/1 207/41/1 208/42/1 +f 213/43/2 216/44/2 217/45/2 218/46/2 219/47/2 220/48/2 +f 225/49/1 228/50/1 229/51/1 230/52/1 231/53/1 232/54/1 +f 237/55/2 240/56/2 241/57/2 242/58/2 243/59/2 244/60/2 +f 249/61/1 252/62/1 253/63/1 254/64/1 255/65/1 256/66/1 +f 261/67/2 264/68/2 265/69/2 266/70/2 267/71/2 268/72/2 +f 273/73/1 276/74/1 277/75/1 278/76/1 279/77/1 280/78/1 +f 285/79/2 288/80/2 289/81/2 290/82/2 291/83/2 292/84/2 +f 297/85/1 300/86/1 301/87/1 302/88/1 303/89/1 304/90/1 +f 309/91/2 312/92/2 313/93/2 314/94/2 315/95/2 316/96/2 +f 382/97/2 383/98/2 413/99/2 412/100/2 410/101/2 411/102/2 409/103/2 408/104/2 407/105/2 406/106/2 404/107/2 405/108/2 403/109/2 402/110/2 401/111/2 400/112/2 399/113/2 398/114/2 397/115/2 396/116/2 395/117/2 394/118/2 393/119/2 392/120/2 391/121/2 390/122/2 389/123/2 388/124/2 387/125/2 386/126/2 385/127/2 384/128/2 +f 361/129/1 378/130/1 362/131/1 363/132/1 364/133/1 365/134/1 366/135/1 379/136/1 367/137/1 368/138/1 369/139/1 380/140/1 370/141/1 381/142/1 371/143/1 372/144/1 373/145/1 374/146/1 375/147/1 350/148/1 351/149/1 352/150/1 353/151/1 354/152/1 355/153/1 356/154/1 357/155/1 358/156/1 376/157/1 359/158/1 377/159/1 360/160/1 +f 418/161/1 428/162/1 433/163/1 437/164/1 441/165/1 446/166/1 445/167/1 450/168/1 454/169/1 458/170/1 462/171/1 467/172/1 476/173/1 477/174/1 475/175/1 469/176/1 464/177/1 460/178/1 456/179/1 452/180/1 448/181/1 443/182/1 439/183/1 435/184/1 430/185/1 426/186/1 419/187/1 420/188/1 417/189/1 414/190/1 415/191/1 416/192/1 +f 422/193/2 421/194/2 427/195/2 432/196/2 431/197/2 436/198/2 440/199/2 444/200/2 449/201/2 453/202/2 457/203/2 461/204/2 465/205/2 470/206/2 466/207/2 472/208/2 471/209/2 473/210/2 474/211/2 468/212/2 463/213/2 459/214/2 455/215/2 451/216/2 447/217/2 442/218/2 438/219/2 434/220/2 429/221/2 425/222/2 424/223/2 423/224/2 +f 478/225/1 481/226/1 482/227/1 483/228/1 484/229/1 485/230/1 +f 490/231/2 493/232/2 494/233/2 495/234/2 496/235/2 497/236/2 +f 502/237/1 505/238/1 506/239/1 507/240/1 508/241/1 509/242/1 +f 514/243/2 517/244/2 518/245/2 519/246/2 520/247/2 521/248/2 +f 526/249/1 529/250/1 530/251/1 531/252/1 532/253/1 533/254/1 +f 538/255/2 541/256/2 542/257/2 543/258/2 544/259/2 545/260/2 +f 550/261/1 553/262/1 554/263/1 555/264/1 556/265/1 557/266/1 +f 562/267/2 565/268/2 566/269/2 567/270/2 568/271/2 569/272/2 +f 574/273/1 577/274/1 578/275/1 579/276/1 580/277/1 581/278/1 +f 586/279/2 589/280/2 590/281/2 591/282/2 592/283/2 593/284/2 +f 598/285/1 601/286/1 602/287/1 603/288/1 604/289/1 605/290/1 +f 610/291/2 613/292/2 614/293/2 615/294/2 616/295/2 617/296/2 +f 622/297/1 625/298/1 626/299/1 627/300/1 628/301/1 629/302/1 +f 634/303/2 637/304/2 638/305/2 639/306/2 640/307/2 641/308/2 +f 646/309/1 649/310/1 650/311/1 651/312/1 652/313/1 653/314/1 +f 658/315/2 661/316/2 662/317/2 663/318/2 664/319/2 665/320/2 +f 798/321/3 801/322/3 802/323/3 803/324/3 804/325/3 805/326/3 +f 810/327/4 813/328/4 814/329/4 815/330/4 816/331/4 817/332/4 +f 822/333/3 825/334/3 826/335/3 827/336/3 828/337/3 829/338/3 +f 834/339/4 837/340/4 838/341/4 839/342/4 840/343/4 841/344/4 +f 846/345/3 849/346/3 850/347/3 851/348/3 852/349/3 853/350/3 +f 858/351/4 861/352/4 862/353/4 863/354/4 864/355/4 865/356/4 +f 870/357/3 873/358/3 874/359/3 875/360/3 876/361/3 877/362/3 +f 882/363/4 885/364/4 886/365/4 887/366/4 888/367/4 889/368/4 +f 894/369/3 897/370/3 898/371/3 899/372/3 900/373/3 901/374/3 +f 906/375/4 909/376/4 910/377/4 911/378/4 912/379/4 913/380/4 +f 918/381/3 921/382/3 922/383/3 923/384/3 924/385/3 925/386/3 +f 930/387/4 933/388/4 934/389/4 935/390/4 936/391/4 937/392/4 +f 942/393/3 945/394/3 946/395/3 947/396/3 948/397/3 949/398/3 +f 954/399/4 957/400/4 958/401/4 959/402/4 960/403/4 961/404/4 +f 966/405/3 969/406/3 970/407/3 971/408/3 972/409/3 973/410/3 +f 978/411/4 981/412/4 982/413/4 983/414/4 984/415/4 985/416/4 +f 1064/417/4 1065/418/4 1095/419/4 1094/420/4 1092/421/4 1093/422/4 1091/423/4 1090/424/4 1089/425/4 1088/426/4 1086/427/4 1087/428/4 1085/429/4 1084/430/4 1083/431/4 1082/432/4 1081/433/4 1080/434/4 1079/435/4 1078/436/4 1077/437/4 1076/438/4 1075/439/4 1074/440/4 1073/441/4 1072/442/4 1071/443/4 1070/444/4 1069/445/4 1068/446/4 1067/447/4 1066/448/4 +f 1043/449/3 1060/450/3 1044/451/3 1045/452/3 1046/453/3 1047/454/3 1048/455/3 1061/456/3 1049/457/3 1050/458/3 1051/459/3 1062/460/3 1052/461/3 1063/462/3 1053/463/3 1054/464/3 1055/465/3 1056/466/3 1057/467/3 1032/468/3 1033/469/3 1034/470/3 1035/471/3 1036/472/3 1037/473/3 1038/474/3 1039/475/3 1040/476/3 1058/477/3 1041/478/3 1059/479/3 1042/480/3 +f 1100/481/3 1110/482/3 1115/483/3 1119/484/3 1123/485/3 1128/486/3 1127/487/3 1132/488/3 1136/489/3 1140/490/3 1144/491/3 1149/492/3 1158/493/3 1159/494/3 1157/495/3 1151/496/3 1146/497/3 1142/498/3 1138/499/3 1134/500/3 1130/501/3 1125/502/3 1121/503/3 1117/504/3 1112/505/3 1108/506/3 1101/507/3 1102/508/3 1099/509/3 1096/510/3 1097/511/3 1098/512/3 +f 1104/513/4 1103/514/4 1109/515/4 1114/516/4 1113/517/4 1118/518/4 1122/519/4 1126/520/4 1131/521/4 1135/522/4 1139/523/4 1143/524/4 1147/525/4 1152/526/4 1148/527/4 1154/528/4 1153/529/4 1155/530/4 1156/531/4 1150/532/4 1145/533/4 1141/534/4 1137/535/4 1133/536/4 1129/537/4 1124/538/4 1120/539/4 1116/540/4 1111/541/4 1107/542/4 1106/543/4 1105/544/4 +f 1160/545/3 1163/546/3 1164/547/3 1165/548/3 1166/549/3 1167/550/3 +f 1172/551/4 1175/552/4 1176/553/4 1177/554/4 1178/555/4 1179/556/4 +f 1184/557/3 1187/558/3 1188/559/3 1189/560/3 1190/561/3 1191/562/3 +f 1196/563/4 1199/564/4 1200/565/4 1201/566/4 1202/567/4 1203/568/4 +f 1208/569/3 1211/570/3 1212/571/3 1213/572/3 1214/573/3 1215/574/3 +f 1220/575/4 1223/576/4 1224/577/4 1225/578/4 1226/579/4 1227/580/4 +f 1232/581/3 1235/582/3 1236/583/3 1237/584/3 1238/585/3 1239/586/3 +f 1244/587/4 1247/588/4 1248/589/4 1249/590/4 1250/591/4 1251/592/4 +f 1256/593/3 1259/594/3 1260/595/3 1261/596/3 1262/597/3 1263/598/3 +f 1268/599/4 1271/600/4 1272/601/4 1273/602/4 1274/603/4 1275/604/4 +f 1280/605/3 1283/606/3 1284/607/3 1285/608/3 1286/609/3 1287/610/3 +f 1292/611/4 1295/612/4 1296/613/4 1297/614/4 1298/615/4 1299/616/4 +f 1304/617/3 1307/618/3 1308/619/3 1309/620/3 1310/621/3 1311/622/3 +f 1316/623/4 1319/624/4 1320/625/4 1321/626/4 1322/627/4 1323/628/4 +f 1328/629/3 1331/630/3 1332/631/3 1333/632/3 1334/633/3 1335/634/3 +f 1340/635/4 1343/636/4 1344/637/4 1345/638/4 1346/639/4 1347/640/4 +f 1480/641/5 1483/642/5 1484/643/5 1485/644/5 1486/645/5 1487/646/5 +f 1492/647/6 1495/648/6 1496/649/6 1497/650/6 1498/651/6 1499/652/6 +f 1504/653/5 1507/654/5 1508/655/5 1509/656/5 1510/657/5 1511/658/5 +f 1516/659/6 1519/660/6 1520/661/6 1521/662/6 1522/663/6 1523/664/6 +f 1528/665/5 1531/666/5 1532/667/5 1533/668/5 1534/669/5 1535/670/5 +f 1540/671/6 1543/672/6 1544/673/6 1545/674/6 1546/675/6 1547/676/6 +f 1552/677/5 1555/678/5 1556/679/5 1557/680/5 1558/681/5 1559/682/5 +f 1564/683/6 1567/684/6 1568/685/6 1569/686/6 1570/687/6 1571/688/6 +f 1576/689/5 1579/690/5 1580/691/5 1581/692/5 1582/693/5 1583/694/5 +f 1588/695/6 1591/696/6 1592/697/6 1593/698/6 1594/699/6 1595/700/6 +f 1600/701/5 1603/702/5 1604/703/5 1605/704/5 1606/705/5 1607/706/5 +f 1612/707/6 1615/708/6 1616/709/6 1617/710/6 1618/711/6 1619/712/6 +f 1624/713/5 1627/714/5 1628/715/5 1629/716/5 1630/717/5 1631/718/5 +f 1636/719/6 1639/720/6 1640/721/6 1641/722/6 1642/723/6 1643/724/6 +f 1648/725/5 1651/726/5 1652/727/5 1653/728/5 1654/729/5 1655/730/5 +f 1660/731/6 1663/732/6 1664/733/6 1665/734/6 1666/735/6 1667/736/6 +f 1737/737/6 1738/738/6 1768/739/6 1767/740/6 1765/741/6 1766/742/6 1764/743/6 1763/744/6 1762/745/6 1761/746/6 1759/747/6 1760/748/6 1758/749/6 1757/750/6 1756/751/6 1755/752/6 1754/753/6 1753/754/6 1752/755/6 1751/756/6 1750/757/6 1749/758/6 1748/759/6 1747/760/6 1746/761/6 1745/762/6 1744/763/6 1743/764/6 1742/765/6 1741/766/6 1740/767/6 1739/768/6 +f 1716/769/5 1733/770/5 1717/771/5 1718/772/5 1719/773/5 1720/774/5 1721/775/5 1734/776/5 1722/777/5 1723/778/5 1724/779/5 1735/780/5 1725/781/5 1736/782/5 1726/783/5 1727/784/5 1728/785/5 1729/786/5 1730/787/5 1705/788/5 1706/789/5 1707/790/5 1708/791/5 1709/792/5 1710/793/5 1711/794/5 1712/795/5 1713/796/5 1731/797/5 1714/798/5 1732/799/5 1715/800/5 +f 1773/801/5 1783/802/5 1788/803/5 1792/804/5 1796/805/5 1801/806/5 1800/807/5 1805/808/5 1809/809/5 1813/810/5 1817/811/5 1822/812/5 1831/813/5 1832/814/5 1830/815/5 1824/816/5 1819/817/5 1815/818/5 1811/819/5 1807/820/5 1803/821/5 1798/822/5 1794/823/5 1790/824/5 1785/825/5 1781/826/5 1774/827/5 1775/828/5 1772/829/5 1769/830/5 1770/831/5 1771/832/5 +f 1777/833/6 1776/834/6 1782/835/6 1787/836/6 1786/837/6 1791/838/6 1795/839/6 1799/840/6 1804/841/6 1808/842/6 1812/843/6 1816/844/6 1820/845/6 1825/846/6 1821/847/6 1827/848/6 1826/849/6 1828/850/6 1829/851/6 1823/852/6 1818/853/6 1814/854/6 1810/855/6 1806/856/6 1802/857/6 1797/858/6 1793/859/6 1789/860/6 1784/861/6 1780/862/6 1779/863/6 1778/864/6 +f 1833/865/5 1836/866/5 1837/867/5 1838/868/5 1839/869/5 1840/870/5 +f 1845/871/6 1848/872/6 1849/873/6 1850/874/6 1851/875/6 1852/876/6 +f 1857/877/5 1860/878/5 1861/879/5 1862/880/5 1863/881/5 1864/882/5 +f 1869/883/6 1872/884/6 1873/885/6 1874/886/6 1875/887/6 1876/888/6 +f 1881/889/5 1884/890/5 1885/891/5 1886/892/5 1887/893/5 1888/894/5 +f 1893/895/6 1896/896/6 1897/897/6 1898/898/6 1899/899/6 1900/900/6 +f 1905/901/5 1908/902/5 1909/903/5 1910/904/5 1911/905/5 1912/906/5 +f 1917/907/6 1920/908/6 1921/909/6 1922/910/6 1923/911/6 1924/912/6 +f 1929/913/5 1932/914/5 1933/915/5 1934/916/5 1935/917/5 1936/918/5 +f 1941/919/6 1944/920/6 1945/921/6 1946/922/6 1947/923/6 1948/924/6 +f 1953/925/5 1956/926/5 1957/927/5 1958/928/5 1959/929/5 1960/930/5 +f 1965/931/6 1968/932/6 1969/933/6 1970/934/6 1971/935/6 1972/936/6 +f 1977/937/5 1980/938/5 1981/939/5 1982/940/5 1983/941/5 1984/942/5 +f 1989/943/6 1992/944/6 1993/945/6 1994/946/6 1995/947/6 1996/948/6 +f 2001/949/5 2004/950/5 2005/951/5 2006/952/5 2007/953/5 2008/954/5 +f 2013/955/6 2016/956/6 2017/957/6 2018/958/6 2019/959/6 2020/960/6 +s 1 +f 385/961/7 352/962/8 351/963/9 384/964/10 +f 386/965/11 353/966/12 352/962/8 385/961/7 +f 387/967/13 354/968/14 353/966/12 386/965/11 +f 388/969/15 355/970/16 354/968/14 387/967/13 +f 389/971/17 356/972/18 355/970/16 388/969/15 +f 390/973/19 357/974/20 356/972/18 389/971/17 +f 391/975/21 358/976/22 357/974/20 390/973/19 +f 392/977/23 376/978/24 358/976/22 391/975/21 +f 393/979/25 359/980/26 376/978/24 392/977/23 +f 394/981/27 377/982/28 359/980/26 393/979/25 +f 395/983/29 360/984/30 377/982/28 394/981/27 +f 396/985/31 361/986/32 360/984/30 395/983/29 +f 397/987/33 378/988/34 361/986/32 396/985/31 +f 398/989/35 362/990/36 378/991/34 397/987/33 +f 399/992/37 363/993/38 362/990/36 398/989/35 +f 400/994/39 364/995/40 363/993/38 399/992/37 +f 401/996/41 365/997/42 364/998/40 400/999/39 +f 402/1000/43 366/1001/44 365/997/42 401/996/41 +f 403/1002/45 379/1003/46 366/1001/44 402/1000/43 +f 405/1004/47 367/1005/48 379/1003/46 403/1002/45 +f 406/1006/49 369/1007/50 368/1008/51 404/1009/52 +f 404/1009/52 368/1008/51 367/1005/48 405/1004/47 +f 407/1010/53 380/1011/54 369/1007/50 406/1006/49 +f 408/1012/55 370/1013/56 380/1011/54 407/1010/53 +f 409/1014/57 381/1015/58 370/1013/56 408/1012/55 +f 411/1016/59 371/1017/60 381/1015/58 409/1014/57 +f 412/1018/61 373/1019/62 372/1020/63 410/1021/64 +f 410/1021/64 372/1020/63 371/1017/60 411/1016/59 +f 413/1022/65 374/1023/66 373/1019/62 412/1018/61 +f 383/1024/67 375/1025/68 374/1023/66 413/1022/65 +f 30/1026/69 33/1027/70 34/1028/71 1/1029/72 +f 2/1030/73 1/1029/72 34/1028/71 35/1031/74 +f 3/1032/75 2/1030/73 35/1031/74 36/1033/76 +f 4/1034/77 3/1032/75 36/1033/76 37/1035/78 +f 5/1036/79 4/1034/77 37/1035/78 38/1037/80 +f 6/1038/81 5/1036/79 38/1037/80 39/1039/82 +f 6/1038/81 39/1039/82 40/1040/83 7/1041/84 +f 8/1042/85 7/1041/84 40/1040/83 41/1043/86 +f 9/1044/87 8/1042/85 41/1043/86 42/1045/88 +f 10/1046/89 9/1044/87 42/1045/88 43/1047/90 +f 10/1046/89 43/1047/90 44/1048/91 11/1049/92 +f 11/1049/92 44/1048/91 45/1050/93 31/1051/94 +f 12/1052/95 46/1053/96 47/1054/97 13/1055/98 +f 31/1051/94 45/1050/93 46/1053/96 12/1052/95 +f 13/1055/98 47/1054/97 48/1056/99 14/1057/100 +f 15/1058/101 14/1057/100 48/1056/99 49/1059/102 +f 15/1058/101 49/1059/102 50/1060/103 16/1061/104 +f 17/1062/105 16/1061/104 50/1060/103 51/1063/106 +f 17/1064/105 51/1065/106 52/1066/107 18/1067/108 +f 19/1068/109 18/1067/108 52/1066/107 53/1069/110 +f 19/1068/109 53/1069/110 54/1070/111 20/1071/112 +f 20/1071/112 54/1070/111 55/1072/113 22/1073/114 +f 22/1073/114 55/1072/113 56/1074/115 21/1075/116 +f 21/1075/116 56/1074/115 57/1076/117 23/1077/118 +f 23/1077/118 57/1076/117 58/1078/119 24/1079/120 +f 24/1079/120 58/1078/119 59/1080/121 32/1081/122 +f 27/1082/123 25/1083/124 60/1084/125 61/1085/126 +f 25/1083/124 32/1081/122 59/1080/121 60/1084/125 +f 28/1086/127 26/1087/128 62/1088/129 63/1089/130 +f 27/1082/123 61/1085/126 62/1088/129 26/1087/128 +f 29/1090/131 28/1086/127 63/1089/130 64/1091/132 +f 29/1090/131 64/1091/132 33/1027/70 30/1026/69 +f 1687/1092/133 1677/1093/134 65/1094/135 66/1095/136 +f 347/1096/137 1687/1092/133 66/1095/136 67/1097/138 +f 1678/1098/139 347/1096/137 67/1097/138 68/1099/140 +f 65/1094/135 1677/1093/134 1676/1100/141 69/1101/142 +f 1688/1102/143 1678/1098/139 68/1099/140 73/1103/144 +f 69/1101/142 1676/1100/141 1675/1104/145 75/1105/146 +f 1679/1106/147 1688/1102/143 73/1103/144 77/1107/148 +f 75/1105/146 1675/1104/145 1681/1108/149 990/1109/150 79/1110/151 +f 70/1111/152 66/1095/136 65/1094/135 71/1112/153 +f 72/1113/154 67/1097/138 66/1095/136 70/1111/152 +f 74/1114/155 68/1099/140 67/1097/138 72/1113/154 +f 998/1115/156 1005/1116/157 1679/1106/147 77/1107/148 81/1117/158 +f 79/1110/151 990/1109/150 323/1118/159 83/1119/160 +f 71/1112/153 65/1094/135 69/1101/142 76/1120/161 +f 78/1121/162 73/1103/144 68/1099/140 74/1114/155 +f 329/1122/163 998/1115/156 81/1117/158 85/1123/164 +f 83/1119/160 323/1118/159 324/1124/165 87/1125/166 +f 80/1126/167 76/1120/161 69/1101/142 75/1105/146 +f 82/1127/168 77/1107/148 73/1103/144 78/1121/162 +f 999/1128/169 329/1122/163 85/1123/164 89/1129/170 +f 87/1125/166 324/1124/165 330/1130/171 91/1131/172 +f 84/1132/173 80/1126/167 75/1105/146 79/1110/151 +f 417/1133/22 421/1134/21 422/1135/23 414/1136/24 +f 416/1137/28 424/1138/27 425/1139/29 418/1140/30 +f 86/1141/174 81/1117/158 77/1107/148 82/1127/168 +f 420/1142/20 427/1143/19 421/1134/21 417/1133/22 +f 88/1144/175 84/1132/173 79/1110/151 83/1119/160 +f 418/1140/30 425/1139/29 429/1145/31 428/1146/32 +f 90/1147/176 85/1123/164 81/1117/158 86/1141/174 +f 419/1148/18 432/1149/17 427/1143/19 420/1142/20 +f 1011/1150/177 325/1151/178 93/1152/179 97/1153/180 +f 1010/1154/181 1012/1155/182 99/1156/183 95/1157/184 +f 92/1158/185 88/1144/175 83/1119/160 87/1125/166 +f 426/1159/16 431/1160/15 432/1149/17 419/1148/18 +f 94/1161/186 89/1129/170 85/1123/164 90/1147/176 +f 435/1162/12 440/1163/11 436/1164/13 430/1165/14 +f 96/1166/187 92/1158/185 87/1125/166 91/1131/172 +f 428/1146/32 429/1145/31 434/1167/33 433/1168/34 +f 98/1169/188 93/1170/179 89/1129/170 94/1161/186 +f 439/1171/8 444/1172/7 440/1163/11 435/1162/12 +f 326/1173/189 1001/1174/190 101/1175/191 105/1176/192 +f 332/1177/193 1013/1178/194 107/1179/195 103/1180/196 +f 100/1181/197 96/1166/187 91/1131/172 95/1157/184 +f 433/1168/34 434/1167/33 438/1182/35 437/1183/36 +f 102/1184/198 97/1153/180 93/1152/179 98/1185/188 +f 384/964/10 351/963/9 350/1186/199 382/1187/200 +f 443/1188/9 449/1189/10 444/1172/7 439/1171/8 +f 327/1190/201 326/1173/189 105/1176/192 109/1191/202 +f 107/1179/195 1013/1178/194 1682/1192/203 1672/1193/204 111/1194/205 +f 104/1195/206 100/1181/197 95/1157/184 99/1156/183 +f 437/1183/36 438/1182/35 442/1196/37 441/1197/38 +f 106/1198/207 101/1175/191 97/1153/180 102/1184/198 +f 448/1199/199 453/1200/200 449/1189/10 443/1188/9 +f 108/1201/208 104/1195/206 99/1156/183 103/1180/196 +f 441/1197/38 442/1196/37 447/1202/39 446/1203/40 +f 110/1204/209 105/1176/192 101/1175/191 106/1198/207 +f 452/1205/68 457/1206/67 453/1200/200 448/1199/199 +f 112/1207/210 108/1201/208 103/1180/196 107/1179/195 +f 445/1208/42 451/1209/41 455/1210/43 450/1211/44 +f 110/1204/209 114/1212/211 109/1191/202 105/1176/192 +f 446/1203/40 447/1202/39 451/1213/41 445/1214/42 +f 344/1215/212 348/1216/213 117/1217/214 121/1218/215 +f 339/1219/216 341/1220/217 123/1221/218 119/1222/219 +f 116/1223/220 112/1207/210 107/1179/195 111/1194/205 +f 450/1211/44 455/1210/43 459/1224/45 454/1225/46 +f 414/1136/24 422/1135/23 423/1226/25 415/1227/26 +f 118/1228/221 113/1229/222 109/1191/202 114/1212/211 +f 456/1230/66 461/1231/65 457/1206/67 452/1205/68 +f 346/1232/223 344/1215/212 121/1218/215 125/1233/224 +f 123/1221/218 341/1220/217 346/1232/223 125/1233/224 +f 120/1234/225 116/1223/220 111/1194/205 115/1235/226 +f 454/1225/46 459/1224/45 463/1236/47 458/1237/48 +f 118/1228/221 122/1238/227 117/1217/214 113/1229/222 +f 460/1239/62 465/1240/61 461/1231/65 456/1230/66 +f 124/1241/228 120/1234/225 115/1235/226 119/1222/219 +f 458/1237/48 463/1242/47 468/1243/52 462/1244/51 +f 122/1238/227 126/1245/229 121/1218/215 117/1217/214 +f 464/1246/63 470/1247/64 465/1240/61 460/1239/62 +f 430/1165/14 436/1164/13 431/1160/15 426/1159/16 +f 127/1248/230 124/1241/228 119/1222/219 123/1221/218 +f 462/1244/51 468/1243/52 474/1249/49 467/1250/50 +f 126/1245/229 128/1251/231 125/1233/224 121/1218/215 +f 469/1252/60 466/1253/59 470/1247/64 464/1246/63 +f 128/1251/231 127/1248/230 123/1221/218 125/1233/224 +f 415/1227/26 423/1226/25 424/1138/27 416/1137/28 +f 475/1254/58 472/1255/57 466/1253/59 469/1252/60 +f 467/1250/50 474/1249/49 473/1256/53 476/1257/54 +f 477/1258/56 471/1259/55 472/1255/57 475/1254/58 +f 476/1257/54 473/1256/53 471/1259/55 477/1258/56 +f 129/1260/232 130/1261/233 131/1262/234 132/1263/235 +f 136/1264/236 137/1265/237 130/1261/233 129/1260/232 +f 132/1263/235 131/1262/234 138/1266/238 133/1267/239 +f 133/1267/239 138/1266/238 139/1268/240 134/1269/241 +f 134/1270/241 139/1271/240 140/1272/242 135/1273/243 +f 135/1273/243 140/1272/242 137/1265/237 136/1264/236 +f 141/1274/244 142/1275/240 143/1276/238 144/1277/245 +f 148/1278/246 149/1279/242 142/1275/240 141/1274/244 +f 144/1277/245 143/1276/238 150/1280/234 145/1281/247 +f 145/1281/247 150/1280/234 151/1282/233 146/1283/248 +f 146/1284/248 151/1285/233 152/1286/237 147/1287/249 +f 147/1287/249 152/1286/237 149/1279/242 148/1278/246 +f 153/1288/250 154/1289/251 155/1290/252 156/1291/253 +f 160/1292/254 161/1293/255 154/1289/251 153/1288/250 +f 156/1291/253 155/1290/252 162/1294/256 157/1295/257 +f 157/1295/257 162/1294/256 163/1296/258 158/1297/259 +f 158/1298/259 163/1299/258 164/1300/260 159/1301/261 +f 159/1301/261 164/1300/260 161/1293/255 160/1292/254 +f 165/1302/262 166/1303/258 167/1304/256 168/1305/263 +f 172/1306/264 173/1307/260 166/1303/258 165/1302/262 +f 168/1305/263 167/1304/256 174/1308/252 169/1309/265 +f 169/1309/265 174/1308/252 175/1310/251 170/1311/266 +f 170/1312/266 175/1313/251 176/1314/255 171/1315/267 +f 171/1315/267 176/1314/255 173/1307/260 172/1306/264 +f 177/1316/268 178/1317/269 179/1318/270 180/1319/271 +f 184/1320/272 185/1321/273 178/1317/269 177/1316/268 +f 180/1319/271 179/1318/270 186/1322/274 181/1323/275 +f 181/1323/275 186/1322/274 187/1324/276 182/1325/277 +f 182/1326/277 187/1327/276 188/1328/278 183/1329/279 +f 183/1329/279 188/1328/278 185/1321/273 184/1320/272 +f 189/1330/280 190/1331/276 191/1332/274 192/1333/281 +f 196/1334/282 197/1335/278 190/1331/276 189/1330/280 +f 192/1333/281 191/1332/274 198/1336/270 193/1337/283 +f 193/1337/283 198/1336/270 199/1338/269 194/1339/284 +f 194/1340/284 199/1341/269 200/1342/273 195/1343/285 +f 195/1343/285 200/1342/273 197/1335/278 196/1334/282 +f 201/1344/286 202/1345/287 203/1346/288 204/1347/289 +f 208/1348/290 209/1349/291 202/1345/287 201/1344/286 +f 204/1347/289 203/1346/288 210/1350/292 205/1351/293 +f 205/1351/293 210/1350/292 211/1352/294 206/1353/295 +f 206/1354/295 211/1355/294 212/1356/296 207/1357/297 +f 207/1357/297 212/1356/296 209/1349/291 208/1348/290 +f 213/1358/298 214/1359/294 215/1360/292 216/1361/299 +f 220/1362/300 221/1363/296 214/1359/294 213/1358/298 +f 216/1361/299 215/1360/292 222/1364/288 217/1365/301 +f 217/1365/301 222/1364/288 223/1366/287 218/1367/302 +f 218/1368/302 223/1369/287 224/1370/291 219/1371/303 +f 219/1371/303 224/1370/291 221/1363/296 220/1362/300 +f 225/1372/241 226/1373/240 227/1374/242 228/1375/243 +f 232/1376/239 233/1377/238 226/1373/240 225/1372/241 +f 228/1375/243 227/1374/242 234/1378/237 229/1379/236 +f 229/1379/236 234/1378/237 235/1380/233 230/1381/232 +f 230/1382/232 235/1383/233 236/1384/234 231/1385/235 +f 231/1385/235 236/1384/234 233/1377/238 232/1376/239 +f 237/1386/248 238/1387/233 239/1388/237 240/1389/249 +f 244/1390/247 245/1391/234 238/1387/233 237/1386/248 +f 240/1389/249 239/1388/237 246/1392/242 241/1393/246 +f 241/1393/246 246/1392/242 247/1394/240 242/1395/244 +f 242/1396/244 247/1397/240 248/1398/238 243/1399/245 +f 243/1399/245 248/1398/238 245/1391/234 244/1390/247 +f 249/1400/259 250/1401/258 251/1402/260 252/1403/261 +f 256/1404/257 257/1405/256 250/1401/258 249/1400/259 +f 252/1403/261 251/1402/260 258/1406/255 253/1407/254 +f 253/1407/254 258/1406/255 259/1408/251 254/1409/250 +f 254/1410/250 259/1411/251 260/1412/252 255/1413/253 +f 255/1413/253 260/1412/252 257/1405/256 256/1404/257 +f 261/1414/266 262/1415/251 263/1416/255 264/1417/267 +f 268/1418/265 269/1419/252 262/1415/251 261/1414/266 +f 264/1417/267 263/1416/255 270/1420/260 265/1421/264 +f 265/1421/264 270/1420/260 271/1422/258 266/1423/262 +f 266/1424/262 271/1425/258 272/1426/256 267/1427/263 +f 267/1427/263 272/1426/256 269/1419/252 268/1418/265 +f 273/1428/277 274/1429/276 275/1430/278 276/1431/279 +f 280/1432/275 281/1433/274 274/1429/276 273/1428/277 +f 276/1431/279 275/1430/278 282/1434/273 277/1435/272 +f 277/1435/272 282/1434/273 283/1436/269 278/1437/268 +f 278/1438/268 283/1439/269 284/1440/270 279/1441/271 +f 279/1441/271 284/1440/270 281/1433/274 280/1432/275 +f 285/1442/284 286/1443/269 287/1444/273 288/1445/285 +f 292/1446/283 293/1447/270 286/1443/269 285/1442/284 +f 288/1445/285 287/1444/273 294/1448/278 289/1449/282 +f 289/1449/282 294/1448/278 295/1450/276 290/1451/280 +f 290/1452/280 295/1453/276 296/1454/274 291/1455/281 +f 291/1455/281 296/1454/274 293/1447/270 292/1446/283 +f 297/1456/295 298/1457/294 299/1458/296 300/1459/297 +f 304/1460/293 305/1461/292 298/1457/294 297/1456/295 +f 300/1459/297 299/1458/296 306/1462/291 301/1463/290 +f 301/1463/290 306/1462/291 307/1464/287 302/1465/286 +f 302/1466/286 307/1467/287 308/1468/288 303/1469/289 +f 303/1469/289 308/1468/288 305/1461/292 304/1460/293 +f 309/1470/302 310/1471/287 311/1472/291 312/1473/303 +f 316/1474/301 317/1475/288 310/1471/287 309/1470/302 +f 312/1473/303 311/1472/291 318/1476/296 313/1477/300 +f 313/1477/300 318/1476/296 319/1478/294 314/1479/298 +f 314/1480/298 319/1481/294 320/1482/292 315/1483/299 +f 315/1483/299 320/1482/292 317/1475/288 316/1474/301 +f 382/1187/200 350/1186/199 375/1025/68 383/1024/67 +f 996/1484/304 331/1485/305 34/1028/71 33/1027/70 +f 331/1485/305 995/1486/306 35/1031/74 34/1028/71 +f 995/1486/306 994/1487/307 36/1033/76 35/1031/74 +f 994/1487/307 993/1488/308 37/1035/78 36/1033/76 +f 993/1488/308 992/1489/309 38/1037/80 37/1035/78 +f 992/1489/309 991/1490/310 39/1039/82 38/1037/80 +f 991/1490/310 1704/1491/311 1683/1492/312 40/1040/83 39/1039/82 +f 1683/1492/312 1684/1493/313 41/1043/86 40/1040/83 +f 1684/1493/313 334/1494/314 42/1045/88 41/1043/86 +f 334/1494/314 333/1495/315 43/1047/90 42/1045/88 +f 333/1495/315 1685/1496/316 44/1048/91 43/1047/90 +f 1685/1496/316 1686/1497/317 45/1050/93 44/1048/91 +f 345/1498/318 1680/1499/319 47/1054/97 46/1053/96 +f 1686/1497/317 345/1498/318 46/1053/96 45/1050/93 +f 1680/1499/319 328/1500/320 321/1501/321 48/1056/99 47/1054/97 +f 321/1501/321 1007/1502/322 49/1059/102 48/1056/99 +f 1007/1502/322 322/1503/323 50/1060/103 49/1059/102 +f 322/1503/323 1000/1504/324 51/1063/106 50/1060/103 +f 1000/1505/324 1008/1506/325 52/1066/107 51/1065/106 +f 1008/1506/325 1009/1507/326 53/1069/110 52/1066/107 +f 1009/1507/326 1002/1508/327 54/1070/111 53/1069/110 +f 1002/1508/327 1003/1509/328 55/1072/113 54/1070/111 +f 1003/1509/328 1004/1510/329 1674/1511/330 56/1074/115 55/1072/113 +f 1674/1511/330 1673/1512/331 57/1076/117 56/1074/115 +f 1673/1512/331 343/1513/332 58/1078/119 57/1076/117 +f 343/1513/332 342/1514/333 59/1080/121 58/1078/119 +f 340/1515/334 338/1516/335 61/1085/126 60/1084/125 +f 342/1514/333 340/1515/334 60/1084/125 59/1080/121 +f 336/1517/336 335/1518/337 63/1089/130 62/1088/129 +f 338/1516/335 336/1517/336 62/1088/129 61/1085/126 +f 335/1518/337 1006/1519/338 997/1520/339 64/1091/132 63/1089/130 +f 64/1091/132 997/1520/339 996/1484/304 33/1027/70 +f 325/1521/178 999/1128/169 89/1129/170 93/1170/179 +f 330/1130/171 1010/1154/181 95/1157/184 91/1131/172 +f 1001/1174/190 1011/1150/177 97/1153/180 101/1175/191 +f 1012/1155/182 332/1177/193 103/1180/196 99/1156/183 +f 349/1522/340 1031/1523/341 327/1190/201 109/1191/202 113/1229/222 +f 1672/1193/204 337/1524/342 115/1235/226 111/1194/205 +f 348/1216/213 349/1522/340 113/1229/222 117/1217/214 +f 337/1524/342 339/1219/216 119/1222/219 115/1235/226 +f 478/1525/343 479/1526/344 480/1527/345 481/1528/346 +f 485/1529/347 486/1530/348 479/1526/344 478/1525/343 +f 481/1528/346 480/1527/345 487/1531/349 482/1532/350 +f 482/1532/350 487/1531/349 488/1533/351 483/1534/352 +f 483/1535/352 488/1536/351 489/1537/353 484/1538/354 +f 484/1538/354 489/1537/353 486/1530/348 485/1529/347 +f 490/1539/355 491/1540/351 492/1541/349 493/1542/356 +f 497/1543/357 498/1544/353 491/1540/351 490/1539/355 +f 493/1542/356 492/1541/349 499/1545/345 494/1546/358 +f 494/1546/358 499/1545/345 500/1547/344 495/1548/359 +f 495/1549/359 500/1550/344 501/1551/348 496/1552/360 +f 496/1552/360 501/1551/348 498/1544/353 497/1543/357 +f 502/1553/361 503/1554/4 504/1555/362 505/1556/363 +f 509/1557/364 510/1558/365 503/1554/4 502/1553/361 +f 505/1556/363 504/1555/362 511/1559/366 506/1560/367 +f 506/1560/367 511/1559/366 512/1561/3 507/1562/368 +f 507/1563/368 512/1564/3 513/1565/369 508/1566/370 +f 508/1566/370 513/1565/369 510/1558/365 509/1557/364 +f 514/1567/371 515/1568/3 516/1569/366 517/1570/372 +f 521/1571/373 522/1572/369 515/1568/3 514/1567/371 +f 517/1570/372 516/1569/366 523/1573/362 518/1574/374 +f 518/1574/374 523/1573/362 524/1575/4 519/1576/375 +f 519/1577/375 524/1578/4 525/1579/365 520/1580/376 +f 520/1580/376 525/1579/365 522/1572/369 521/1571/373 +f 526/1581/377 527/1582/378 528/1583/379 529/1584/380 +f 533/1585/381 534/1586/382 527/1582/378 526/1581/377 +f 529/1584/380 528/1583/379 535/1587/383 530/1588/384 +f 530/1588/384 535/1587/383 536/1589/385 531/1590/386 +f 531/1591/386 536/1592/385 537/1593/387 532/1594/388 +f 532/1594/388 537/1593/387 534/1586/382 533/1585/381 +f 538/1595/389 539/1596/385 540/1597/383 541/1598/390 +f 545/1599/391 546/1600/387 539/1596/385 538/1595/389 +f 541/1598/390 540/1597/383 547/1601/379 542/1602/392 +f 542/1602/392 547/1601/379 548/1603/378 543/1604/393 +f 543/1605/393 548/1606/378 549/1607/382 544/1608/394 +f 544/1608/394 549/1607/382 546/1600/387 545/1599/391 +f 550/1609/395 551/1610/6 552/1611/396 553/1612/397 +f 557/1613/398 558/1614/399 551/1610/6 550/1609/395 +f 553/1612/397 552/1611/396 559/1615/400 554/1616/401 +f 554/1616/401 559/1615/400 560/1617/5 555/1618/402 +f 555/1619/402 560/1620/5 561/1621/403 556/1622/404 +f 556/1622/404 561/1621/403 558/1614/399 557/1613/398 +f 562/1623/405 563/1624/5 564/1625/400 565/1626/406 +f 569/1627/407 570/1628/403 563/1624/5 562/1623/405 +f 565/1626/406 564/1625/400 571/1629/396 566/1630/408 +f 566/1630/408 571/1629/396 572/1631/6 567/1632/409 +f 567/1633/409 572/1634/6 573/1635/399 568/1636/410 +f 568/1636/410 573/1635/399 570/1628/403 569/1627/407 +f 574/1637/352 575/1638/351 576/1639/353 577/1640/354 +f 581/1641/350 582/1642/349 575/1638/351 574/1637/352 +f 577/1640/354 576/1639/353 583/1643/348 578/1644/347 +f 578/1644/347 583/1643/348 584/1645/344 579/1646/343 +f 579/1647/343 584/1648/344 585/1649/345 580/1650/346 +f 580/1650/346 585/1649/345 582/1642/349 581/1641/350 +f 586/1651/359 587/1652/344 588/1653/348 589/1654/360 +f 593/1655/358 594/1656/345 587/1652/344 586/1651/359 +f 589/1654/360 588/1653/348 595/1657/353 590/1658/357 +f 590/1658/357 595/1657/353 596/1659/351 591/1660/355 +f 591/1661/355 596/1662/351 597/1663/349 592/1664/356 +f 592/1664/356 597/1663/349 594/1656/345 593/1655/358 +f 598/1665/368 599/1666/3 600/1667/369 601/1668/370 +f 605/1669/367 606/1670/366 599/1666/3 598/1665/368 +f 601/1668/370 600/1667/369 607/1671/365 602/1672/364 +f 602/1672/364 607/1671/365 608/1673/4 603/1674/361 +f 603/1675/361 608/1676/4 609/1677/362 604/1678/363 +f 604/1678/363 609/1677/362 606/1670/366 605/1669/367 +f 610/1679/375 611/1680/4 612/1681/365 613/1682/376 +f 617/1683/374 618/1684/362 611/1680/4 610/1679/375 +f 613/1682/376 612/1681/365 619/1685/369 614/1686/373 +f 614/1686/373 619/1685/369 620/1687/3 615/1688/371 +f 615/1689/371 620/1690/3 621/1691/366 616/1692/372 +f 616/1692/372 621/1691/366 618/1684/362 617/1683/374 +f 622/1693/386 623/1694/385 624/1695/387 625/1696/388 +f 629/1697/384 630/1698/383 623/1694/385 622/1693/386 +f 625/1696/388 624/1695/387 631/1699/382 626/1700/381 +f 626/1700/381 631/1699/382 632/1701/378 627/1702/377 +f 627/1703/377 632/1704/378 633/1705/379 628/1706/380 +f 628/1706/380 633/1705/379 630/1698/383 629/1697/384 +f 634/1707/393 635/1708/378 636/1709/382 637/1710/394 +f 641/1711/392 642/1712/379 635/1708/378 634/1707/393 +f 637/1710/394 636/1709/382 643/1713/387 638/1714/391 +f 638/1714/391 643/1713/387 644/1715/385 639/1716/389 +f 639/1717/389 644/1718/385 645/1719/383 640/1720/390 +f 640/1720/390 645/1719/383 642/1712/379 641/1711/392 +f 646/1721/402 647/1722/5 648/1723/403 649/1724/404 +f 653/1725/401 654/1726/400 647/1722/5 646/1721/402 +f 649/1724/404 648/1723/403 655/1727/399 650/1728/398 +f 650/1728/398 655/1727/399 656/1729/6 651/1730/395 +f 651/1731/395 656/1732/6 657/1733/396 652/1734/397 +f 652/1734/397 657/1733/396 654/1726/400 653/1725/401 +f 658/1735/409 659/1736/6 660/1737/399 661/1738/410 +f 665/1739/408 666/1740/396 659/1736/6 658/1735/409 +f 661/1738/410 660/1737/399 667/1741/403 662/1742/407 +f 662/1742/407 667/1741/403 668/1743/5 663/1744/405 +f 663/1745/405 668/1746/5 669/1747/400 664/1748/406 +f 664/1748/406 669/1747/400 666/1740/396 665/1739/408 +f 1067/1749/411 1034/1750/412 1033/1751/413 1066/1752/414 +f 1068/1753/415 1035/1754/416 1034/1750/412 1067/1749/411 +f 1069/1755/417 1036/1756/418 1035/1754/416 1068/1753/415 +f 1070/1757/419 1037/1758/420 1036/1756/418 1069/1755/417 +f 1071/1759/421 1038/1760/422 1037/1758/420 1070/1757/419 +f 1072/1761/423 1039/1762/424 1038/1760/422 1071/1759/421 +f 1073/1763/425 1040/1764/426 1039/1762/424 1072/1761/423 +f 1074/1765/427 1058/1766/428 1040/1764/426 1073/1763/425 +f 1075/1767/429 1041/1768/430 1058/1766/428 1074/1765/427 +f 1076/1769/431 1059/1770/432 1041/1768/430 1075/1767/429 +f 1077/1771/433 1042/1772/434 1059/1770/432 1076/1769/431 +f 1078/1773/435 1043/1774/436 1042/1772/434 1077/1771/433 +f 1079/1775/437 1060/1776/438 1043/1774/436 1078/1773/435 +f 1080/1777/439 1044/1778/440 1060/1779/438 1079/1775/437 +f 1081/1780/441 1045/1781/442 1044/1778/440 1080/1777/439 +f 1082/1782/443 1046/1783/444 1045/1781/442 1081/1780/441 +f 1083/1784/445 1047/1785/446 1046/1786/444 1082/1787/443 +f 1084/1788/447 1048/1789/448 1047/1785/446 1083/1784/445 +f 1085/1790/449 1061/1791/450 1048/1789/448 1084/1788/447 +f 1087/1792/451 1049/1793/452 1061/1791/450 1085/1790/449 +f 1088/1794/453 1051/1795/454 1050/1796/455 1086/1797/456 +f 1086/1797/456 1050/1796/455 1049/1793/452 1087/1792/451 +f 1089/1798/457 1062/1799/458 1051/1795/454 1088/1794/453 +f 1090/1800/459 1052/1801/460 1062/1799/458 1089/1798/457 +f 1091/1802/461 1063/1803/462 1052/1801/460 1090/1800/459 +f 1093/1804/463 1053/1805/464 1063/1803/462 1091/1802/461 +f 1094/1806/465 1055/1807/466 1054/1808/467 1092/1809/468 +f 1092/1809/468 1054/1808/467 1053/1805/464 1093/1804/463 +f 1095/1810/469 1056/1811/470 1055/1807/466 1094/1806/465 +f 1065/1812/471 1057/1813/472 1056/1811/470 1095/1810/469 +f 699/1814/473 702/1815/474 703/1816/475 670/1817/476 +f 671/1818/477 670/1817/476 703/1816/475 704/1819/478 +f 672/1820/479 671/1818/477 704/1819/478 705/1821/480 +f 673/1822/481 672/1820/479 705/1821/480 706/1823/482 +f 674/1824/483 673/1822/481 706/1823/482 707/1825/484 +f 675/1826/485 674/1824/483 707/1825/484 708/1827/486 +f 675/1826/485 708/1827/486 709/1828/487 676/1829/488 +f 677/1830/489 676/1829/488 709/1828/487 710/1831/490 +f 678/1832/491 677/1830/489 710/1831/490 711/1833/492 +f 679/1834/493 678/1832/491 711/1833/492 712/1835/494 +f 679/1834/493 712/1835/494 713/1836/495 680/1837/496 +f 680/1837/496 713/1836/495 714/1838/497 700/1839/498 +f 681/1840/499 715/1841/500 716/1842/501 682/1843/502 +f 700/1839/498 714/1838/497 715/1841/500 681/1840/499 +f 682/1843/502 716/1842/501 717/1844/503 683/1845/504 +f 684/1846/505 683/1845/504 717/1844/503 718/1847/506 +f 684/1846/505 718/1847/506 719/1848/507 685/1849/508 +f 686/1850/509 685/1849/508 719/1848/507 720/1851/510 +f 686/1852/509 720/1853/510 721/1854/511 687/1855/512 +f 688/1856/513 687/1855/512 721/1854/511 722/1857/514 +f 688/1856/513 722/1857/514 723/1858/515 689/1859/516 +f 689/1859/516 723/1858/515 724/1860/517 691/1861/518 +f 691/1861/518 724/1860/517 725/1862/519 690/1863/520 +f 690/1863/520 725/1862/519 726/1864/521 692/1865/522 +f 692/1865/522 726/1864/521 727/1866/523 693/1867/524 +f 693/1867/524 727/1866/523 728/1868/525 701/1869/526 +f 696/1870/527 694/1871/528 729/1872/529 730/1873/530 +f 694/1871/528 701/1869/526 728/1868/525 729/1872/529 +f 697/1874/531 695/1875/532 731/1876/533 732/1877/534 +f 696/1870/527 730/1873/530 731/1876/533 695/1875/532 +f 698/1878/535 697/1874/531 732/1877/534 733/1879/536 +f 698/1878/535 733/1879/536 702/1815/474 699/1814/473 +f 1697/1880/537 1014/1881/538 734/1882/539 735/1883/540 +f 1029/1884/541 1697/1880/537 735/1883/540 736/1885/542 +f 1015/1886/543 1029/1884/541 736/1885/542 737/1887/544 +f 734/1882/539 1014/1881/538 1696/1888/545 738/1889/546 +f 1030/1890/547 1015/1886/543 737/1887/544 742/1891/548 +f 738/1889/546 1696/1888/545 1695/1892/549 744/1893/550 +f 1016/1894/551 1030/1890/547 742/1891/548 746/1895/552 +f 744/1893/550 1695/1892/549 1005/1896/157 998/1897/156 748/1898/553 +f 739/1899/554 735/1883/540 734/1882/539 740/1900/555 +f 741/1901/556 736/1885/542 735/1883/540 739/1899/554 +f 743/1902/557 737/1887/544 736/1885/542 741/1901/556 +f 321/1903/321 328/1904/320 1016/1894/551 746/1895/552 750/1905/558 +f 748/1898/553 998/1897/156 329/1906/163 752/1907/559 +f 740/1900/555 734/1882/539 738/1889/546 745/1908/560 +f 747/1909/561 742/1891/548 737/1887/544 743/1902/557 +f 1007/1910/322 321/1903/321 750/1905/558 754/1911/562 +f 752/1907/559 329/1906/163 999/1912/169 756/1913/563 +f 749/1914/564 745/1908/560 738/1889/546 744/1893/550 +f 751/1915/565 746/1895/552 742/1891/548 747/1909/561 +f 322/1916/323 1007/1910/322 754/1911/562 758/1917/566 +f 756/1913/563 999/1912/169 325/1918/178 760/1919/567 +f 753/1920/568 749/1914/564 744/1893/550 748/1898/553 +f 1099/1921/426 1103/1922/425 1104/1923/427 1096/1924/428 +f 1098/1925/432 1106/1926/431 1107/1927/433 1100/1928/434 +f 755/1929/569 750/1905/558 746/1895/552 751/1915/565 +f 1102/1930/424 1109/1931/423 1103/1922/425 1099/1921/426 +f 757/1932/570 753/1920/568 748/1898/553 752/1907/559 +f 1100/1928/434 1107/1927/433 1111/1933/435 1110/1934/436 +f 759/1935/571 754/1911/562 750/1905/558 755/1929/569 +f 1101/1936/422 1114/1937/421 1109/1931/423 1102/1930/424 +f 1008/1938/325 1000/1939/324 762/1940/572 766/1941/573 +f 1011/1942/177 1001/1943/190 768/1944/574 764/1945/575 +f 761/1946/576 757/1932/570 752/1907/559 756/1913/563 +f 1108/1947/420 1113/1948/419 1114/1937/421 1101/1936/422 +f 763/1949/577 758/1917/566 754/1911/562 759/1935/571 +f 1117/1950/416 1122/1951/415 1118/1952/417 1112/1953/418 +f 765/1954/578 761/1946/576 756/1913/563 760/1919/567 +f 1110/1934/436 1111/1933/435 1116/1955/437 1115/1956/438 +f 767/1957/579 762/1958/572 758/1917/566 763/1949/577 +f 1121/1959/412 1126/1960/411 1122/1951/415 1117/1950/416 +f 1002/1961/327 1009/1962/326 770/1963/580 774/1964/581 +f 326/1965/189 327/1966/201 776/1967/582 772/1968/583 +f 769/1969/584 765/1954/578 760/1919/567 764/1945/575 +f 1115/1956/438 1116/1955/437 1120/1970/439 1119/1971/440 +f 771/1972/585 766/1941/573 762/1940/572 767/1973/579 +f 1066/1752/414 1033/1751/413 1032/1974/586 1064/1975/587 +f 1125/1976/413 1131/1977/414 1126/1960/411 1121/1959/412 +f 1003/1978/328 1002/1961/327 774/1964/581 778/1979/588 +f 776/1967/582 327/1966/201 1031/1980/341 1017/1981/589 780/1982/590 +f 773/1983/591 769/1969/584 764/1945/575 768/1944/574 +f 1119/1971/440 1120/1970/439 1124/1984/441 1123/1985/442 +f 775/1986/592 770/1963/580 766/1941/573 771/1972/585 +f 1130/1987/586 1135/1988/587 1131/1977/414 1125/1976/413 +f 777/1989/593 773/1983/591 768/1944/574 772/1968/583 +f 1123/1985/442 1124/1984/441 1129/1990/443 1128/1991/444 +f 779/1992/594 774/1964/581 770/1963/580 775/1986/592 +f 1134/1993/472 1139/1994/471 1135/1988/587 1130/1987/586 +f 781/1995/595 777/1989/593 772/1968/583 776/1967/582 +f 1127/1996/446 1133/1997/445 1137/1998/447 1132/1999/448 +f 779/1992/594 783/2000/596 778/1979/588 774/1964/581 +f 1128/1991/444 1129/1990/443 1133/2001/445 1127/2002/446 +f 1026/2003/597 1698/2004/598 786/2005/599 790/2006/600 +f 1021/2007/601 1023/2008/602 792/2009/603 788/2010/604 +f 785/2011/605 781/1995/595 776/1967/582 780/1982/590 +f 1132/1999/448 1137/1998/447 1141/2012/449 1136/2013/450 +f 1096/1924/428 1104/1923/427 1105/2014/429 1097/2015/430 +f 787/2016/606 782/2017/607 778/1979/588 783/2000/596 +f 1138/2018/470 1143/2019/469 1139/1994/471 1134/1993/472 +f 1028/2020/608 1026/2003/597 790/2006/600 794/2021/609 +f 792/2009/603 1023/2008/602 1028/2020/608 794/2021/609 +f 789/2022/610 785/2011/605 780/1982/590 784/2023/611 +f 1136/2013/450 1141/2012/449 1145/2024/451 1140/2025/452 +f 787/2016/606 791/2026/612 786/2005/599 782/2017/607 +f 1142/2027/466 1147/2028/465 1143/2019/469 1138/2018/470 +f 793/2029/613 789/2022/610 784/2023/611 788/2010/604 +f 1140/2025/452 1145/2030/451 1150/2031/456 1144/2032/455 +f 791/2026/612 795/2033/614 790/2006/600 786/2005/599 +f 1146/2034/467 1152/2035/468 1147/2028/465 1142/2027/466 +f 1112/1953/418 1118/1952/417 1113/1948/419 1108/1947/420 +f 796/2036/615 793/2029/613 788/2010/604 792/2009/603 +f 1144/2032/455 1150/2031/456 1156/2037/453 1149/2038/454 +f 795/2033/614 797/2039/616 794/2021/609 790/2006/600 +f 1151/2040/464 1148/2041/463 1152/2035/468 1146/2034/467 +f 797/2039/616 796/2036/615 792/2009/603 794/2021/609 +f 1097/2015/430 1105/2014/429 1106/1926/431 1098/1925/432 +f 1157/2042/462 1154/2043/461 1148/2041/463 1151/2040/464 +f 1149/2038/454 1156/2037/453 1155/2044/457 1158/2045/458 +f 1159/2046/460 1153/2047/459 1154/2043/461 1157/2042/462 +f 1158/2045/458 1155/2044/457 1153/2047/459 1159/2046/460 +f 798/2048/617 799/2049/618 800/2050/619 801/2051/620 +f 805/2052/621 806/2053/622 799/2049/618 798/2048/617 +f 801/2051/620 800/2050/619 807/2054/623 802/2055/624 +f 802/2055/624 807/2054/623 808/2056/625 803/2057/626 +f 803/2058/626 808/2059/625 809/2060/627 804/2061/628 +f 804/2061/628 809/2060/627 806/2053/622 805/2052/621 +f 810/2062/629 811/2063/625 812/2064/623 813/2065/630 +f 817/2066/631 818/2067/627 811/2063/625 810/2062/629 +f 813/2065/630 812/2064/623 819/2068/619 814/2069/632 +f 814/2069/632 819/2068/619 820/2070/618 815/2071/633 +f 815/2072/633 820/2073/618 821/2074/622 816/2075/634 +f 816/2075/634 821/2074/622 818/2067/627 817/2066/631 +f 822/2076/635 823/2077/636 824/2078/637 825/2079/638 +f 829/2080/639 830/2081/640 823/2077/636 822/2076/635 +f 825/2079/638 824/2078/637 831/2082/641 826/2083/642 +f 826/2083/642 831/2082/641 832/2084/643 827/2085/644 +f 827/2086/644 832/2087/643 833/2088/645 828/2089/646 +f 828/2089/646 833/2088/645 830/2081/640 829/2080/639 +f 834/2090/647 835/2091/643 836/2092/641 837/2093/648 +f 841/2094/649 842/2095/645 835/2091/643 834/2090/647 +f 837/2093/648 836/2092/641 843/2096/637 838/2097/650 +f 838/2097/650 843/2096/637 844/2098/636 839/2099/651 +f 839/2100/651 844/2101/636 845/2102/640 840/2103/652 +f 840/2103/652 845/2102/640 842/2095/645 841/2094/649 +f 846/2104/653 847/2105/654 848/2106/655 849/2107/656 +f 853/2108/657 854/2109/658 847/2105/654 846/2104/653 +f 849/2107/656 848/2106/655 855/2110/659 850/2111/660 +f 850/2111/660 855/2110/659 856/2112/661 851/2113/662 +f 851/2114/662 856/2115/661 857/2116/663 852/2117/664 +f 852/2117/664 857/2116/663 854/2109/658 853/2108/657 +f 858/2118/665 859/2119/661 860/2120/659 861/2121/666 +f 865/2122/667 866/2123/663 859/2119/661 858/2118/665 +f 861/2121/666 860/2120/659 867/2124/655 862/2125/668 +f 862/2125/668 867/2124/655 868/2126/654 863/2127/669 +f 863/2128/669 868/2129/654 869/2130/658 864/2131/670 +f 864/2131/670 869/2130/658 866/2123/663 865/2122/667 +f 870/2132/671 871/2133/672 872/2134/673 873/2135/674 +f 877/2136/675 878/2137/676 871/2133/672 870/2132/671 +f 873/2135/674 872/2134/673 879/2138/677 874/2139/678 +f 874/2139/678 879/2138/677 880/2140/679 875/2141/680 +f 875/2142/680 880/2143/679 881/2144/681 876/2145/682 +f 876/2145/682 881/2144/681 878/2137/676 877/2136/675 +f 882/2146/683 883/2147/679 884/2148/677 885/2149/684 +f 889/2150/685 890/2151/681 883/2147/679 882/2146/683 +f 885/2149/684 884/2148/677 891/2152/673 886/2153/686 +f 886/2153/686 891/2152/673 892/2154/672 887/2155/687 +f 887/2156/687 892/2157/672 893/2158/676 888/2159/688 +f 888/2159/688 893/2158/676 890/2151/681 889/2150/685 +f 894/2160/626 895/2161/625 896/2162/627 897/2163/628 +f 901/2164/624 902/2165/623 895/2161/625 894/2160/626 +f 897/2163/628 896/2162/627 903/2166/622 898/2167/621 +f 898/2167/621 903/2166/622 904/2168/618 899/2169/617 +f 899/2170/617 904/2171/618 905/2172/619 900/2173/620 +f 900/2173/620 905/2172/619 902/2165/623 901/2164/624 +f 906/2174/633 907/2175/618 908/2176/622 909/2177/634 +f 913/2178/632 914/2179/619 907/2175/618 906/2174/633 +f 909/2177/634 908/2176/622 915/2180/627 910/2181/631 +f 910/2181/631 915/2180/627 916/2182/625 911/2183/629 +f 911/2184/629 916/2185/625 917/2186/623 912/2187/630 +f 912/2187/630 917/2186/623 914/2179/619 913/2178/632 +f 918/2188/644 919/2189/643 920/2190/645 921/2191/646 +f 925/2192/642 926/2193/641 919/2189/643 918/2188/644 +f 921/2191/646 920/2190/645 927/2194/640 922/2195/639 +f 922/2195/639 927/2194/640 928/2196/636 923/2197/635 +f 923/2198/635 928/2199/636 929/2200/637 924/2201/638 +f 924/2201/638 929/2200/637 926/2193/641 925/2192/642 +f 930/2202/651 931/2203/636 932/2204/640 933/2205/652 +f 937/2206/650 938/2207/637 931/2203/636 930/2202/651 +f 933/2205/652 932/2204/640 939/2208/645 934/2209/649 +f 934/2209/649 939/2208/645 940/2210/643 935/2211/647 +f 935/2212/647 940/2213/643 941/2214/641 936/2215/648 +f 936/2215/648 941/2214/641 938/2207/637 937/2206/650 +f 942/2216/662 943/2217/661 944/2218/663 945/2219/664 +f 949/2220/660 950/2221/659 943/2217/661 942/2216/662 +f 945/2219/664 944/2218/663 951/2222/658 946/2223/657 +f 946/2223/657 951/2222/658 952/2224/654 947/2225/653 +f 947/2226/653 952/2227/654 953/2228/655 948/2229/656 +f 948/2229/656 953/2228/655 950/2221/659 949/2220/660 +f 954/2230/669 955/2231/654 956/2232/658 957/2233/670 +f 961/2234/668 962/2235/655 955/2231/654 954/2230/669 +f 957/2233/670 956/2232/658 963/2236/663 958/2237/667 +f 958/2237/667 963/2236/663 964/2238/661 959/2239/665 +f 959/2240/665 964/2241/661 965/2242/659 960/2243/666 +f 960/2243/666 965/2242/659 962/2235/655 961/2234/668 +f 966/2244/680 967/2245/679 968/2246/681 969/2247/682 +f 973/2248/678 974/2249/677 967/2245/679 966/2244/680 +f 969/2247/682 968/2246/681 975/2250/676 970/2251/675 +f 970/2251/675 975/2250/676 976/2252/672 971/2253/671 +f 971/2254/671 976/2255/672 977/2256/673 972/2257/674 +f 972/2257/674 977/2256/673 974/2249/677 973/2248/678 +f 978/2258/687 979/2259/672 980/2260/676 981/2261/688 +f 985/2262/686 986/2263/673 979/2259/672 978/2258/687 +f 981/2261/688 980/2260/676 987/2264/681 982/2265/685 +f 982/2265/685 987/2264/681 988/2266/679 983/2267/683 +f 983/2268/683 988/2269/679 989/2270/677 984/2271/684 +f 984/2271/684 989/2270/677 986/2263/673 985/2262/686 +f 1064/1975/587 1032/1974/586 1057/1813/472 1065/1812/471 +f 332/2272/193 1012/2273/182 703/1816/475 702/1815/474 +f 1012/2273/182 1010/2274/181 704/1819/478 703/1816/475 +f 1010/2274/181 330/2275/171 705/1821/480 704/1819/478 +f 330/2275/171 324/2276/165 706/1823/482 705/1821/480 +f 324/2276/165 323/2277/159 707/1825/484 706/1823/482 +f 323/2277/159 990/2278/150 708/1827/486 707/1825/484 +f 990/2278/150 1681/2279/149 1701/2280/689 709/1828/487 708/1827/486 +f 1701/2280/689 1690/2281/690 710/1831/490 709/1828/487 +f 1690/2281/690 1691/2282/691 711/1833/492 710/1831/490 +f 1691/2282/691 1692/2283/692 712/1835/494 711/1833/492 +f 1692/2283/692 1702/2284/693 713/1836/495 712/1835/494 +f 1702/2284/693 1693/2285/694 714/1838/497 713/1836/495 +f 1703/2286/695 1694/2287/696 716/1842/501 715/1841/500 +f 1693/2285/694 1703/2286/695 715/1841/500 714/1838/497 +f 1694/2287/696 1704/2288/311 991/2289/310 717/1844/503 716/1842/501 +f 991/2289/310 992/2290/309 718/1847/506 717/1844/503 +f 992/2290/309 993/2291/308 719/1848/507 718/1847/506 +f 993/2291/308 994/2292/307 720/1851/510 719/1848/507 +f 994/2293/307 995/2294/306 721/1854/511 720/1853/510 +f 995/2294/306 331/2295/305 722/1857/514 721/1854/511 +f 331/2295/305 996/2296/304 723/1858/515 722/1857/514 +f 996/2296/304 997/2297/339 724/1860/517 723/1858/515 +f 997/2297/339 1006/2298/338 1027/2299/697 725/1862/519 724/1860/517 +f 1027/2299/697 1700/2300/698 726/1864/521 725/1862/519 +f 1700/2300/698 1025/2301/699 727/1866/523 726/1864/521 +f 1025/2301/699 1024/2302/700 728/1868/525 727/1866/523 +f 1022/2303/701 1020/2304/702 730/1873/530 729/1872/529 +f 1024/2302/700 1022/2303/701 729/1872/529 728/1868/525 +f 1018/2305/703 1689/2306/704 732/1877/534 731/1876/533 +f 1020/2304/702 1018/2305/703 731/1876/533 730/1873/530 +f 1689/2306/704 1682/2307/203 1013/2308/194 733/1879/536 732/1877/534 +f 733/1879/536 1013/2308/194 332/2272/193 702/1815/474 +f 1000/2309/324 322/1916/323 758/1917/566 762/1958/572 +f 325/1918/178 1011/1942/177 764/1945/575 760/1919/567 +f 1009/1962/326 1008/1938/325 766/1941/573 770/1963/580 +f 1001/1943/190 326/1965/189 772/1968/583 768/1944/574 +f 1699/2310/705 1004/2311/329 1003/1978/328 778/1979/588 782/2017/607 +f 1017/1981/589 1019/2312/706 784/2023/611 780/1982/590 +f 1698/2004/598 1699/2310/705 782/2017/607 786/2005/599 +f 1019/2312/706 1021/2007/601 788/2010/604 784/2023/611 +f 1160/2313/707 1161/2314/708 1162/2315/709 1163/2316/710 +f 1167/2317/711 1168/2318/712 1161/2314/708 1160/2313/707 +f 1163/2316/710 1162/2315/709 1169/2319/713 1164/2320/714 +f 1164/2320/714 1169/2319/713 1170/2321/715 1165/2322/716 +f 1165/2323/716 1170/2324/715 1171/2325/717 1166/2326/718 +f 1166/2326/718 1171/2325/717 1168/2318/712 1167/2317/711 +f 1172/2327/719 1173/2328/715 1174/2329/713 1175/2330/720 +f 1179/2331/721 1180/2332/717 1173/2328/715 1172/2327/719 +f 1175/2330/720 1174/2329/713 1181/2333/709 1176/2334/722 +f 1176/2334/722 1181/2333/709 1182/2335/708 1177/2336/723 +f 1177/2337/723 1182/2338/708 1183/2339/712 1178/2340/724 +f 1178/2340/724 1183/2339/712 1180/2332/717 1179/2331/721 +f 1184/2341/725 1185/2342/1 1186/2343/726 1187/2344/727 +f 1191/2345/728 1192/2346/729 1185/2342/1 1184/2341/725 +f 1187/2344/727 1186/2343/726 1193/2347/730 1188/2348/731 +f 1188/2348/731 1193/2347/730 1194/2349/2 1189/2350/732 +f 1189/2351/732 1194/2352/2 1195/2353/733 1190/2354/734 +f 1190/2354/734 1195/2353/733 1192/2346/729 1191/2345/728 +f 1196/2355/735 1197/2356/2 1198/2357/730 1199/2358/736 +f 1203/2359/737 1204/2360/733 1197/2356/2 1196/2355/735 +f 1199/2358/736 1198/2357/730 1205/2361/726 1200/2362/738 +f 1200/2362/738 1205/2361/726 1206/2363/1 1201/2364/739 +f 1201/2365/739 1206/2366/1 1207/2367/729 1202/2368/740 +f 1202/2368/740 1207/2367/729 1204/2360/733 1203/2359/737 +f 1208/2369/741 1209/2370/742 1210/2371/743 1211/2372/744 +f 1215/2373/745 1216/2374/746 1209/2370/742 1208/2369/741 +f 1211/2372/744 1210/2371/743 1217/2375/747 1212/2376/748 +f 1212/2376/748 1217/2375/747 1218/2377/749 1213/2378/750 +f 1213/2379/750 1218/2380/749 1219/2381/751 1214/2382/752 +f 1214/2382/752 1219/2381/751 1216/2374/746 1215/2373/745 +f 1220/2383/753 1221/2384/749 1222/2385/747 1223/2386/754 +f 1227/2387/755 1228/2388/751 1221/2384/749 1220/2383/753 +f 1223/2386/754 1222/2385/747 1229/2389/743 1224/2390/756 +f 1224/2390/756 1229/2389/743 1230/2391/742 1225/2392/757 +f 1225/2393/757 1230/2394/742 1231/2395/746 1226/2396/758 +f 1226/2396/758 1231/2395/746 1228/2388/751 1227/2387/755 +f 1232/2397/759 1233/2398/6 1234/2399/760 1235/2400/761 +f 1239/2401/762 1240/2402/763 1233/2398/6 1232/2397/759 +f 1235/2400/761 1234/2399/760 1241/2403/764 1236/2404/765 +f 1236/2404/765 1241/2403/764 1242/2405/5 1237/2406/766 +f 1237/2407/766 1242/2408/5 1243/2409/767 1238/2410/768 +f 1238/2410/768 1243/2409/767 1240/2402/763 1239/2401/762 +f 1244/2411/769 1245/2412/5 1246/2413/764 1247/2414/770 +f 1251/2415/771 1252/2416/767 1245/2412/5 1244/2411/769 +f 1247/2414/770 1246/2413/764 1253/2417/760 1248/2418/772 +f 1248/2418/772 1253/2417/760 1254/2419/6 1249/2420/773 +f 1249/2421/773 1254/2422/6 1255/2423/763 1250/2424/774 +f 1250/2424/774 1255/2423/763 1252/2416/767 1251/2415/771 +f 1256/2425/716 1257/2426/715 1258/2427/717 1259/2428/718 +f 1263/2429/714 1264/2430/713 1257/2426/715 1256/2425/716 +f 1259/2428/718 1258/2427/717 1265/2431/712 1260/2432/711 +f 1260/2432/711 1265/2431/712 1266/2433/708 1261/2434/707 +f 1261/2435/707 1266/2436/708 1267/2437/709 1262/2438/710 +f 1262/2438/710 1267/2437/709 1264/2430/713 1263/2429/714 +f 1268/2439/723 1269/2440/708 1270/2441/712 1271/2442/724 +f 1275/2443/722 1276/2444/709 1269/2440/708 1268/2439/723 +f 1271/2442/724 1270/2441/712 1277/2445/717 1272/2446/721 +f 1272/2446/721 1277/2445/717 1278/2447/715 1273/2448/719 +f 1273/2449/719 1278/2450/715 1279/2451/713 1274/2452/720 +f 1274/2452/720 1279/2451/713 1276/2444/709 1275/2443/722 +f 1280/2453/732 1281/2454/2 1282/2455/733 1283/2456/734 +f 1287/2457/731 1288/2458/730 1281/2454/2 1280/2453/732 +f 1283/2456/734 1282/2455/733 1289/2459/729 1284/2460/728 +f 1284/2460/728 1289/2459/729 1290/2461/1 1285/2462/725 +f 1285/2463/725 1290/2464/1 1291/2465/726 1286/2466/727 +f 1286/2466/727 1291/2465/726 1288/2458/730 1287/2457/731 +f 1292/2467/739 1293/2468/1 1294/2469/729 1295/2470/740 +f 1299/2471/738 1300/2472/726 1293/2468/1 1292/2467/739 +f 1295/2470/740 1294/2469/729 1301/2473/733 1296/2474/737 +f 1296/2474/737 1301/2473/733 1302/2475/2 1297/2476/735 +f 1297/2477/735 1302/2478/2 1303/2479/730 1298/2480/736 +f 1298/2480/736 1303/2479/730 1300/2472/726 1299/2471/738 +f 1304/2481/750 1305/2482/749 1306/2483/751 1307/2484/752 +f 1311/2485/748 1312/2486/747 1305/2482/749 1304/2481/750 +f 1307/2484/752 1306/2483/751 1313/2487/746 1308/2488/745 +f 1308/2488/745 1313/2487/746 1314/2489/742 1309/2490/741 +f 1309/2491/741 1314/2492/742 1315/2493/743 1310/2494/744 +f 1310/2494/744 1315/2493/743 1312/2486/747 1311/2485/748 +f 1316/2495/757 1317/2496/742 1318/2497/746 1319/2498/758 +f 1323/2499/756 1324/2500/743 1317/2496/742 1316/2495/757 +f 1319/2498/758 1318/2497/746 1325/2501/751 1320/2502/755 +f 1320/2502/755 1325/2501/751 1326/2503/749 1321/2504/753 +f 1321/2505/753 1326/2506/749 1327/2507/747 1322/2508/754 +f 1322/2508/754 1327/2507/747 1324/2500/743 1323/2499/756 +f 1328/2509/766 1329/2510/5 1330/2511/767 1331/2512/768 +f 1335/2513/765 1336/2514/764 1329/2510/5 1328/2509/766 +f 1331/2512/768 1330/2511/767 1337/2515/763 1332/2516/762 +f 1332/2516/762 1337/2515/763 1338/2517/6 1333/2518/759 +f 1333/2519/759 1338/2520/6 1339/2521/760 1334/2522/761 +f 1334/2522/761 1339/2521/760 1336/2514/764 1335/2513/765 +f 1340/2523/773 1341/2524/6 1342/2525/763 1343/2526/774 +f 1347/2527/772 1348/2528/760 1341/2524/6 1340/2523/773 +f 1343/2526/774 1342/2525/763 1349/2529/767 1344/2530/771 +f 1344/2530/771 1349/2529/767 1350/2531/5 1345/2532/769 +f 1345/2533/769 1350/2534/5 1351/2535/764 1346/2536/770 +f 1346/2536/770 1351/2535/764 1348/2528/760 1347/2527/772 +f 1740/2537/775 1707/2538/776 1706/2539/777 1739/2540/778 +f 1741/2541/779 1708/2542/780 1707/2538/776 1740/2537/775 +f 1742/2543/781 1709/2544/782 1708/2542/780 1741/2541/779 +f 1743/2545/783 1710/2546/784 1709/2544/782 1742/2543/781 +f 1744/2547/785 1711/2548/786 1710/2546/784 1743/2545/783 +f 1745/2549/787 1712/2550/788 1711/2548/786 1744/2547/785 +f 1746/2551/789 1713/2552/790 1712/2550/788 1745/2549/787 +f 1747/2553/791 1731/2554/792 1713/2552/790 1746/2551/789 +f 1748/2555/793 1714/2556/794 1731/2554/792 1747/2553/791 +f 1749/2557/795 1732/2558/796 1714/2556/794 1748/2555/793 +f 1750/2559/797 1715/2560/798 1732/2558/796 1749/2557/795 +f 1751/2561/799 1716/2562/800 1715/2560/798 1750/2559/797 +f 1752/2563/801 1733/2564/802 1716/2562/800 1751/2561/799 +f 1753/2565/803 1717/2566/804 1733/2567/802 1752/2563/801 +f 1754/2568/805 1718/2569/806 1717/2566/804 1753/2565/803 +f 1755/2570/807 1719/2571/808 1718/2569/806 1754/2568/805 +f 1756/2572/809 1720/2573/810 1719/2574/808 1755/2575/807 +f 1757/2576/811 1721/2577/812 1720/2573/810 1756/2572/809 +f 1758/2578/813 1734/2579/814 1721/2577/812 1757/2576/811 +f 1760/2580/815 1722/2581/816 1734/2579/814 1758/2578/813 +f 1761/2582/817 1724/2583/818 1723/2584/819 1759/2585/820 +f 1759/2585/820 1723/2584/819 1722/2581/816 1760/2580/815 +f 1762/2586/821 1735/2587/822 1724/2583/818 1761/2582/817 +f 1763/2588/823 1725/2589/824 1735/2587/822 1762/2586/821 +f 1764/2590/825 1736/2591/826 1725/2589/824 1763/2588/823 +f 1766/2592/827 1726/2593/828 1736/2591/826 1764/2590/825 +f 1767/2594/829 1728/2595/830 1727/2596/831 1765/2597/832 +f 1765/2597/832 1727/2596/831 1726/2593/828 1766/2592/827 +f 1768/2598/833 1729/2599/834 1728/2595/830 1767/2594/829 +f 1738/2600/835 1730/2601/836 1729/2599/834 1768/2598/833 +f 1381/2602/837 1384/2603/838 1385/2604/839 1352/2605/840 +f 1353/2606/841 1352/2605/840 1385/2604/839 1386/2607/842 +f 1354/2608/843 1353/2606/841 1386/2607/842 1387/2609/844 +f 1355/2610/845 1354/2608/843 1387/2609/844 1388/2611/846 +f 1356/2612/847 1355/2610/845 1388/2611/846 1389/2613/848 +f 1357/2614/849 1356/2612/847 1389/2613/848 1390/2615/850 +f 1357/2614/849 1390/2615/850 1391/2616/851 1358/2617/852 +f 1359/2618/853 1358/2617/852 1391/2616/851 1392/2619/854 +f 1360/2620/855 1359/2618/853 1392/2619/854 1393/2621/856 +f 1361/2622/857 1360/2620/855 1393/2621/856 1394/2623/858 +f 1361/2622/857 1394/2623/858 1395/2624/859 1362/2625/860 +f 1362/2625/860 1395/2624/859 1396/2626/861 1382/2627/862 +f 1363/2628/863 1397/2629/864 1398/2630/865 1364/2631/866 +f 1382/2627/862 1396/2626/861 1397/2629/864 1363/2628/863 +f 1364/2631/866 1398/2630/865 1399/2632/867 1365/2633/868 +f 1366/2634/869 1365/2633/868 1399/2632/867 1400/2635/870 +f 1366/2634/869 1400/2635/870 1401/2636/871 1367/2637/872 +f 1368/2638/873 1367/2637/872 1401/2636/871 1402/2639/874 +f 1368/2640/873 1402/2641/874 1403/2642/875 1369/2643/876 +f 1370/2644/877 1369/2643/876 1403/2642/875 1404/2645/878 +f 1370/2644/877 1404/2645/878 1405/2646/879 1371/2647/880 +f 1371/2647/880 1405/2646/879 1406/2648/881 1373/2649/882 +f 1373/2649/882 1406/2648/881 1407/2650/883 1372/2651/884 +f 1372/2651/884 1407/2650/883 1408/2652/885 1374/2653/886 +f 1374/2653/886 1408/2652/885 1409/2654/887 1375/2655/888 +f 1375/2655/888 1409/2654/887 1410/2656/889 1383/2657/890 +f 1378/2658/891 1376/2659/892 1411/2660/893 1412/2661/894 +f 1376/2659/892 1383/2657/890 1410/2656/889 1411/2660/893 +f 1379/2662/895 1377/2663/896 1413/2664/897 1414/2665/898 +f 1378/2658/891 1412/2661/894 1413/2664/897 1377/2663/896 +f 1380/2666/899 1379/2662/895 1414/2665/898 1415/2667/900 +f 1380/2666/899 1415/2667/900 1384/2603/838 1381/2602/837 +f 1692/2668/692 1691/2669/691 1416/2670/901 1417/2671/902 +f 1702/2672/693 1692/2668/692 1417/2671/902 1418/2673/903 +f 1693/2674/694 1702/2672/693 1418/2673/903 1419/2675/904 +f 1416/2670/901 1691/2669/691 1690/2676/690 1420/2677/905 +f 1703/2678/695 1693/2674/694 1419/2675/904 1424/2679/906 +f 1420/2677/905 1690/2676/690 1701/2680/689 1426/2681/907 +f 1694/2682/696 1703/2678/695 1424/2679/906 1428/2683/908 +f 1426/2681/907 1701/2680/689 1681/1108/149 1675/2684/145 1430/2685/909 +f 1421/2686/910 1417/2671/902 1416/2670/901 1422/2687/911 +f 1423/2688/912 1418/2673/903 1417/2671/902 1421/2686/910 +f 1425/2689/913 1419/2675/904 1418/2673/903 1423/2688/912 +f 1683/2690/312 1704/2691/311 1694/2682/696 1428/2683/908 1432/2692/914 +f 1430/2685/909 1675/2684/145 1676/2693/141 1434/2694/915 +f 1422/2687/911 1416/2670/901 1420/2677/905 1427/2695/916 +f 1429/2696/917 1424/2679/906 1419/2675/904 1425/2689/913 +f 1684/2697/313 1683/2690/312 1432/2692/914 1436/2698/918 +f 1434/2694/915 1676/2693/141 1677/2699/134 1438/2700/919 +f 1431/2701/920 1427/2695/916 1420/2677/905 1426/2681/907 +f 1433/2702/921 1428/2683/908 1424/2679/906 1429/2696/917 +f 334/2703/314 1684/2697/313 1436/2698/918 1440/2704/922 +f 1438/2700/919 1677/2699/134 1687/2705/133 1442/2706/923 +f 1435/2707/924 1431/2701/920 1426/2681/907 1430/2685/909 +f 1772/2708/790 1776/2709/789 1777/2710/791 1769/2711/792 +f 1771/2712/796 1779/2713/795 1780/2714/797 1773/2715/798 +f 1437/2716/925 1432/2692/914 1428/2683/908 1433/2702/921 +f 1775/2717/788 1782/2718/787 1776/2709/789 1772/2708/790 +f 1439/2719/926 1435/2707/924 1430/2685/909 1434/2694/915 +f 1773/2715/798 1780/2714/797 1784/2720/799 1783/2721/800 +f 1441/2722/927 1436/2698/918 1432/2692/914 1437/2716/925 +f 1774/2723/786 1787/2724/785 1782/2718/787 1775/2717/788 +f 1685/2725/316 333/2726/315 1444/2727/928 1448/2728/929 +f 347/2729/137 1678/2730/139 1450/2731/930 1446/2732/931 +f 1443/2733/932 1439/2719/926 1434/2694/915 1438/2700/919 +f 1781/2734/784 1786/2735/783 1787/2724/785 1774/2723/786 +f 1445/2736/933 1440/2704/922 1436/2698/918 1441/2722/927 +f 1790/2737/780 1795/2738/779 1791/2739/781 1785/2740/782 +f 1447/2741/934 1443/2733/932 1438/2700/919 1442/2706/923 +f 1783/2721/800 1784/2720/799 1789/2742/801 1788/2743/802 +f 1449/2744/935 1444/2745/928 1440/2704/922 1445/2736/933 +f 1794/2746/776 1799/2747/775 1795/2738/779 1790/2737/780 +f 345/2748/318 1686/2749/317 1452/2750/936 1456/2751/937 +f 1688/2752/143 1679/2753/147 1458/2754/938 1454/2755/939 +f 1451/2756/940 1447/2741/934 1442/2706/923 1446/2732/931 +f 1788/2743/802 1789/2742/801 1793/2757/803 1792/2758/804 +f 1453/2759/941 1448/2728/929 1444/2727/928 1449/2760/935 +f 1739/2540/778 1706/2539/777 1705/2761/942 1737/2762/943 +f 1798/2763/777 1804/2764/778 1799/2747/775 1794/2746/776 +f 1680/2765/319 345/2748/318 1456/2751/937 1460/2766/944 +f 1458/2754/938 1679/2753/147 1005/2767/157 1695/2768/549 1462/2769/945 +f 1455/2770/946 1451/2756/940 1446/2732/931 1450/2731/930 +f 1792/2758/804 1793/2757/803 1797/2771/805 1796/2772/806 +f 1457/2773/947 1452/2750/936 1448/2728/929 1453/2759/941 +f 1803/2774/942 1808/2775/943 1804/2764/778 1798/2763/777 +f 1459/2776/948 1455/2770/946 1450/2731/930 1454/2755/939 +f 1796/2772/806 1797/2771/805 1802/2777/807 1801/2778/808 +f 1461/2779/949 1456/2751/937 1452/2750/936 1457/2773/947 +f 1807/2780/836 1812/2781/835 1808/2775/943 1803/2774/942 +f 1463/2782/950 1459/2776/948 1454/2755/939 1458/2754/938 +f 1800/2783/810 1806/2784/809 1810/2785/811 1805/2786/812 +f 1461/2779/949 1465/2787/951 1460/2766/944 1456/2751/937 +f 1801/2778/808 1802/2777/807 1806/2788/809 1800/2789/810 +f 1015/2790/543 1030/2791/547 1468/2792/952 1472/2793/953 +f 1014/2794/538 1697/2795/537 1474/2796/954 1470/2797/955 +f 1467/2798/956 1463/2782/950 1458/2754/938 1462/2769/945 +f 1805/2786/812 1810/2785/811 1814/2799/813 1809/2800/814 +f 1769/2711/792 1777/2710/791 1778/2801/793 1770/2802/794 +f 1469/2803/957 1464/2804/958 1460/2766/944 1465/2787/951 +f 1811/2805/834 1816/2806/833 1812/2781/835 1807/2780/836 +f 1029/2807/541 1015/2790/543 1472/2793/953 1476/2808/959 +f 1474/2796/954 1697/2795/537 1029/2807/541 1476/2808/959 +f 1471/2809/960 1467/2798/956 1462/2769/945 1466/2810/961 +f 1809/2800/814 1814/2799/813 1818/2811/815 1813/2812/816 +f 1469/2803/957 1473/2813/962 1468/2792/952 1464/2804/958 +f 1815/2814/830 1820/2815/829 1816/2806/833 1811/2805/834 +f 1475/2816/963 1471/2809/960 1466/2810/961 1470/2797/955 +f 1813/2812/816 1818/2817/815 1823/2818/820 1817/2819/819 +f 1473/2813/962 1477/2820/964 1472/2793/953 1468/2792/952 +f 1819/2821/831 1825/2822/832 1820/2815/829 1815/2814/830 +f 1785/2740/782 1791/2739/781 1786/2735/783 1781/2734/784 +f 1478/2823/965 1475/2816/963 1470/2797/955 1474/2796/954 +f 1817/2819/819 1823/2818/820 1829/2824/817 1822/2825/818 +f 1477/2820/964 1479/2826/966 1476/2808/959 1472/2793/953 +f 1824/2827/828 1821/2828/827 1825/2822/832 1819/2821/831 +f 1479/2826/966 1478/2823/965 1474/2796/954 1476/2808/959 +f 1770/2802/794 1778/2801/793 1779/2713/795 1771/2712/796 +f 1830/2829/826 1827/2830/825 1821/2828/827 1824/2827/828 +f 1822/2825/818 1829/2824/817 1828/2831/821 1831/2832/822 +f 1832/2833/824 1826/2834/823 1827/2830/825 1830/2829/826 +f 1831/2832/822 1828/2831/821 1826/2834/823 1832/2833/824 +f 1480/2835/967 1481/2836/968 1482/2837/969 1483/2838/970 +f 1487/2839/971 1488/2840/972 1481/2836/968 1480/2835/967 +f 1483/2838/970 1482/2837/969 1489/2841/973 1484/2842/974 +f 1484/2842/974 1489/2841/973 1490/2843/975 1485/2844/976 +f 1485/2845/976 1490/2846/975 1491/2847/977 1486/2848/978 +f 1486/2848/978 1491/2847/977 1488/2840/972 1487/2839/971 +f 1492/2849/979 1493/2850/975 1494/2851/973 1495/2852/980 +f 1499/2853/981 1500/2854/977 1493/2850/975 1492/2849/979 +f 1495/2852/980 1494/2851/973 1501/2855/969 1496/2856/982 +f 1496/2856/982 1501/2855/969 1502/2857/968 1497/2858/983 +f 1497/2859/983 1502/2860/968 1503/2861/972 1498/2862/984 +f 1498/2862/984 1503/2861/972 1500/2854/977 1499/2853/981 +f 1504/2863/985 1505/2864/986 1506/2865/987 1507/2866/988 +f 1511/2867/989 1512/2868/990 1505/2864/986 1504/2863/985 +f 1507/2866/988 1506/2865/987 1513/2869/991 1508/2870/992 +f 1508/2870/992 1513/2869/991 1514/2871/993 1509/2872/994 +f 1509/2873/994 1514/2874/993 1515/2875/995 1510/2876/996 +f 1510/2876/996 1515/2875/995 1512/2868/990 1511/2867/989 +f 1516/2877/997 1517/2878/993 1518/2879/991 1519/2880/998 +f 1523/2881/999 1524/2882/995 1517/2878/993 1516/2877/997 +f 1519/2880/998 1518/2879/991 1525/2883/987 1520/2884/1000 +f 1520/2884/1000 1525/2883/987 1526/2885/986 1521/2886/1001 +f 1521/2887/1001 1526/2888/986 1527/2889/990 1522/2890/1002 +f 1522/2890/1002 1527/2889/990 1524/2882/995 1523/2881/999 +f 1528/2891/1003 1529/2892/1004 1530/2893/1005 1531/2894/1006 +f 1535/2895/1007 1536/2896/1008 1529/2892/1004 1528/2891/1003 +f 1531/2894/1006 1530/2893/1005 1537/2897/1009 1532/2898/1010 +f 1532/2898/1010 1537/2897/1009 1538/2899/1011 1533/2900/1012 +f 1533/2901/1012 1538/2902/1011 1539/2903/1013 1534/2904/1014 +f 1534/2904/1014 1539/2903/1013 1536/2896/1008 1535/2895/1007 +f 1540/2905/1015 1541/2906/1011 1542/2907/1009 1543/2908/1016 +f 1547/2909/1017 1548/2910/1013 1541/2906/1011 1540/2905/1015 +f 1543/2908/1016 1542/2907/1009 1549/2911/1005 1544/2912/1018 +f 1544/2912/1018 1549/2911/1005 1550/2913/1004 1545/2914/1019 +f 1545/2915/1019 1550/2916/1004 1551/2917/1008 1546/2918/1020 +f 1546/2918/1020 1551/2917/1008 1548/2910/1013 1547/2909/1017 +f 1552/2919/1021 1553/2920/1022 1554/2921/1023 1555/2922/1024 +f 1559/2923/1025 1560/2924/1026 1553/2920/1022 1552/2919/1021 +f 1555/2922/1024 1554/2921/1023 1561/2925/1027 1556/2926/1028 +f 1556/2926/1028 1561/2925/1027 1562/2927/1029 1557/2928/1030 +f 1557/2929/1030 1562/2930/1029 1563/2931/1031 1558/2932/1032 +f 1558/2932/1032 1563/2931/1031 1560/2924/1026 1559/2923/1025 +f 1564/2933/1033 1565/2934/1029 1566/2935/1027 1567/2936/1034 +f 1571/2937/1035 1572/2938/1031 1565/2934/1029 1564/2933/1033 +f 1567/2936/1034 1566/2935/1027 1573/2939/1023 1568/2940/1036 +f 1568/2940/1036 1573/2939/1023 1574/2941/1022 1569/2942/1037 +f 1569/2943/1037 1574/2944/1022 1575/2945/1026 1570/2946/1038 +f 1570/2946/1038 1575/2945/1026 1572/2938/1031 1571/2937/1035 +f 1576/2947/976 1577/2948/975 1578/2949/977 1579/2950/978 +f 1583/2951/974 1584/2952/973 1577/2948/975 1576/2947/976 +f 1579/2950/978 1578/2949/977 1585/2953/972 1580/2954/971 +f 1580/2954/971 1585/2953/972 1586/2955/968 1581/2956/967 +f 1581/2957/967 1586/2958/968 1587/2959/969 1582/2960/970 +f 1582/2960/970 1587/2959/969 1584/2952/973 1583/2951/974 +f 1588/2961/983 1589/2962/968 1590/2963/972 1591/2964/984 +f 1595/2965/982 1596/2966/969 1589/2962/968 1588/2961/983 +f 1591/2964/984 1590/2963/972 1597/2967/977 1592/2968/981 +f 1592/2968/981 1597/2967/977 1598/2969/975 1593/2970/979 +f 1593/2971/979 1598/2972/975 1599/2973/973 1594/2974/980 +f 1594/2974/980 1599/2973/973 1596/2966/969 1595/2965/982 +f 1600/2975/994 1601/2976/993 1602/2977/995 1603/2978/996 +f 1607/2979/992 1608/2980/991 1601/2976/993 1600/2975/994 +f 1603/2978/996 1602/2977/995 1609/2981/990 1604/2982/989 +f 1604/2982/989 1609/2981/990 1610/2983/986 1605/2984/985 +f 1605/2985/985 1610/2986/986 1611/2987/987 1606/2988/988 +f 1606/2988/988 1611/2987/987 1608/2980/991 1607/2979/992 +f 1612/2989/1001 1613/2990/986 1614/2991/990 1615/2992/1002 +f 1619/2993/1000 1620/2994/987 1613/2990/986 1612/2989/1001 +f 1615/2992/1002 1614/2991/990 1621/2995/995 1616/2996/999 +f 1616/2996/999 1621/2995/995 1622/2997/993 1617/2998/997 +f 1617/2999/997 1622/3000/993 1623/3001/991 1618/3002/998 +f 1618/3002/998 1623/3001/991 1620/2994/987 1619/2993/1000 +f 1624/3003/1012 1625/3004/1011 1626/3005/1013 1627/3006/1014 +f 1631/3007/1010 1632/3008/1009 1625/3004/1011 1624/3003/1012 +f 1627/3006/1014 1626/3005/1013 1633/3009/1008 1628/3010/1007 +f 1628/3010/1007 1633/3009/1008 1634/3011/1004 1629/3012/1003 +f 1629/3013/1003 1634/3014/1004 1635/3015/1005 1630/3016/1006 +f 1630/3016/1006 1635/3015/1005 1632/3008/1009 1631/3007/1010 +f 1636/3017/1019 1637/3018/1004 1638/3019/1008 1639/3020/1020 +f 1643/3021/1018 1644/3022/1005 1637/3018/1004 1636/3017/1019 +f 1639/3020/1020 1638/3019/1008 1645/3023/1013 1640/3024/1017 +f 1640/3024/1017 1645/3023/1013 1646/3025/1011 1641/3026/1015 +f 1641/3027/1015 1646/3028/1011 1647/3029/1009 1642/3030/1016 +f 1642/3030/1016 1647/3029/1009 1644/3022/1005 1643/3021/1018 +f 1648/3031/1030 1649/3032/1029 1650/3033/1031 1651/3034/1032 +f 1655/3035/1028 1656/3036/1027 1649/3032/1029 1648/3031/1030 +f 1651/3034/1032 1650/3033/1031 1657/3037/1026 1652/3038/1025 +f 1652/3038/1025 1657/3037/1026 1658/3039/1022 1653/3040/1021 +f 1653/3041/1021 1658/3042/1022 1659/3043/1023 1654/3044/1024 +f 1654/3044/1024 1659/3043/1023 1656/3036/1027 1655/3035/1028 +f 1660/3045/1037 1661/3046/1022 1662/3047/1026 1663/3048/1038 +f 1667/3049/1036 1668/3050/1023 1661/3046/1022 1660/3045/1037 +f 1663/3048/1038 1662/3047/1026 1669/3051/1031 1664/3052/1035 +f 1664/3052/1035 1669/3051/1031 1670/3053/1029 1665/3054/1033 +f 1665/3055/1033 1670/3056/1029 1671/3057/1027 1666/3058/1034 +f 1666/3058/1034 1671/3057/1027 1668/3050/1023 1667/3049/1036 +f 1737/2762/943 1705/2761/942 1730/2601/836 1738/2600/835 +f 348/3059/213 344/3060/212 1385/2604/839 1384/2603/838 +f 344/3060/212 346/3061/223 1386/2607/842 1385/2604/839 +f 346/3061/223 341/3062/217 1387/2609/844 1386/2607/842 +f 341/3062/217 339/3063/216 1388/2611/846 1387/2609/844 +f 339/3063/216 337/3064/342 1389/2613/848 1388/2611/846 +f 337/3064/342 1672/3065/204 1390/2615/850 1389/2613/848 +f 1672/3065/204 1682/3066/203 1689/3067/704 1391/2616/851 1390/2615/850 +f 1689/3067/704 1018/3068/703 1392/2619/854 1391/2616/851 +f 1018/3068/703 1020/3069/702 1393/2621/856 1392/2619/854 +f 1020/3069/702 1022/3070/701 1394/2623/858 1393/2621/856 +f 1022/3070/701 1024/3071/700 1395/2624/859 1394/2623/858 +f 1024/3071/700 1025/3072/699 1396/2626/861 1395/2624/859 +f 1700/3073/698 1027/3074/697 1398/2630/865 1397/2629/864 +f 1025/3072/699 1700/3073/698 1397/2629/864 1396/2626/861 +f 1027/3074/697 1006/3075/338 335/3076/337 1399/2632/867 1398/2630/865 +f 335/3076/337 336/3077/336 1400/2635/870 1399/2632/867 +f 336/3077/336 338/3078/335 1401/2636/871 1400/2635/870 +f 338/3078/335 340/3079/334 1402/2639/874 1401/2636/871 +f 340/3080/334 342/3081/333 1403/2642/875 1402/2641/874 +f 342/3081/333 343/3082/332 1404/2645/878 1403/2642/875 +f 343/3082/332 1673/3083/331 1405/2646/879 1404/2645/878 +f 1673/3083/331 1674/3084/330 1406/2648/881 1405/2646/879 +f 1674/3084/330 1004/1510/329 1699/3085/705 1407/2650/883 1406/2648/881 +f 1699/3085/705 1698/3086/598 1408/2652/885 1407/2650/883 +f 1698/3086/598 1026/3087/597 1409/2654/887 1408/2652/885 +f 1026/3087/597 1028/3088/608 1410/2656/889 1409/2654/887 +f 1023/3089/602 1021/3090/601 1412/2661/894 1411/2660/893 +f 1028/3088/608 1023/3089/602 1411/2660/893 1410/2656/889 +f 1019/3091/706 1017/3092/589 1414/2665/898 1413/2664/897 +f 1021/3090/601 1019/3091/706 1413/2664/897 1412/2661/894 +f 1017/3092/589 1031/3093/341 349/3094/340 1415/2667/900 1414/2665/898 +f 1415/2667/900 349/3094/340 348/3059/213 1384/2603/838 +f 333/3095/315 334/2703/314 1440/2704/922 1444/2745/928 +f 1687/2705/133 347/2729/137 1446/2732/931 1442/2706/923 +f 1686/2749/317 1685/2725/316 1448/2728/929 1452/2750/936 +f 1678/2730/139 1688/2752/143 1454/2755/939 1450/2731/930 +f 1016/3096/551 328/3097/320 1680/2765/319 1460/2766/944 1464/2804/958 +f 1695/2768/549 1696/3098/545 1466/2810/961 1462/2769/945 +f 1030/2791/547 1016/3096/551 1464/2804/958 1468/2792/952 +f 1696/3098/545 1014/2794/538 1470/2797/955 1466/2810/961 +f 1833/3099/1039 1834/3100/1040 1835/3101/1041 1836/3102/1042 +f 1840/3103/1043 1841/3104/1044 1834/3100/1040 1833/3099/1039 +f 1836/3102/1042 1835/3101/1041 1842/3105/1045 1837/3106/1046 +f 1837/3106/1046 1842/3105/1045 1843/3107/1047 1838/3108/1048 +f 1838/3109/1048 1843/3110/1047 1844/3111/1049 1839/3112/1050 +f 1839/3112/1050 1844/3111/1049 1841/3104/1044 1840/3103/1043 +f 1845/3113/1051 1846/3114/1047 1847/3115/1045 1848/3116/1052 +f 1852/3117/1053 1853/3118/1049 1846/3114/1047 1845/3113/1051 +f 1848/3116/1052 1847/3115/1045 1854/3119/1041 1849/3120/1054 +f 1849/3120/1054 1854/3119/1041 1855/3121/1040 1850/3122/1055 +f 1850/3123/1055 1855/3124/1040 1856/3125/1044 1851/3126/1056 +f 1851/3126/1056 1856/3125/1044 1853/3118/1049 1852/3117/1053 +f 1857/3127/1057 1858/3128/1 1859/3129/1058 1860/3130/1059 +f 1864/3131/1060 1865/3132/1061 1858/3128/1 1857/3127/1057 +f 1860/3130/1059 1859/3129/1058 1866/3133/1062 1861/3134/1063 +f 1861/3134/1063 1866/3133/1062 1867/3135/2 1862/3136/1064 +f 1862/3137/1064 1867/3138/2 1868/3139/1065 1863/3140/1066 +f 1863/3140/1066 1868/3139/1065 1865/3132/1061 1864/3131/1060 +f 1869/3141/1067 1870/3142/2 1871/3143/1062 1872/3144/1068 +f 1876/3145/1069 1877/3146/1065 1870/3142/2 1869/3141/1067 +f 1872/3144/1068 1871/3143/1062 1878/3147/1058 1873/3148/1070 +f 1873/3148/1070 1878/3147/1058 1879/3149/1 1874/3150/1071 +f 1874/3151/1071 1879/3152/1 1880/3153/1061 1875/3154/1072 +f 1875/3154/1072 1880/3153/1061 1877/3146/1065 1876/3145/1069 +f 1881/3155/1073 1882/3156/1074 1883/3157/1075 1884/3158/1076 +f 1888/3159/1077 1889/3160/1078 1882/3156/1074 1881/3155/1073 +f 1884/3158/1076 1883/3157/1075 1890/3161/1079 1885/3162/1080 +f 1885/3162/1080 1890/3161/1079 1891/3163/1081 1886/3164/1082 +f 1886/3165/1082 1891/3166/1081 1892/3167/1083 1887/3168/1084 +f 1887/3168/1084 1892/3167/1083 1889/3160/1078 1888/3159/1077 +f 1893/3169/1085 1894/3170/1081 1895/3171/1079 1896/3172/1086 +f 1900/3173/1087 1901/3174/1083 1894/3170/1081 1893/3169/1085 +f 1896/3172/1086 1895/3171/1079 1902/3175/1075 1897/3176/1088 +f 1897/3176/1088 1902/3175/1075 1903/3177/1074 1898/3178/1089 +f 1898/3179/1089 1903/3180/1074 1904/3181/1078 1899/3182/1090 +f 1899/3182/1090 1904/3181/1078 1901/3174/1083 1900/3173/1087 +f 1905/3183/1091 1906/3184/3 1907/3185/1092 1908/3186/1093 +f 1912/3187/1094 1913/3188/1095 1906/3184/3 1905/3183/1091 +f 1908/3186/1093 1907/3185/1092 1914/3189/1096 1909/3190/1097 +f 1909/3190/1097 1914/3189/1096 1915/3191/4 1910/3192/1098 +f 1910/3193/1098 1915/3194/4 1916/3195/1099 1911/3196/1100 +f 1911/3196/1100 1916/3195/1099 1913/3188/1095 1912/3187/1094 +f 1917/3197/1101 1918/3198/4 1919/3199/1096 1920/3200/1102 +f 1924/3201/1103 1925/3202/1099 1918/3198/4 1917/3197/1101 +f 1920/3200/1102 1919/3199/1096 1926/3203/1092 1921/3204/1104 +f 1921/3204/1104 1926/3203/1092 1927/3205/3 1922/3206/1105 +f 1922/3207/1105 1927/3208/3 1928/3209/1095 1923/3210/1106 +f 1923/3210/1106 1928/3209/1095 1925/3202/1099 1924/3201/1103 +f 1929/3211/1048 1930/3212/1047 1931/3213/1049 1932/3214/1050 +f 1936/3215/1046 1937/3216/1045 1930/3212/1047 1929/3211/1048 +f 1932/3214/1050 1931/3213/1049 1938/3217/1044 1933/3218/1043 +f 1933/3218/1043 1938/3217/1044 1939/3219/1040 1934/3220/1039 +f 1934/3221/1039 1939/3222/1040 1940/3223/1041 1935/3224/1042 +f 1935/3224/1042 1940/3223/1041 1937/3216/1045 1936/3215/1046 +f 1941/3225/1055 1942/3226/1040 1943/3227/1044 1944/3228/1056 +f 1948/3229/1054 1949/3230/1041 1942/3226/1040 1941/3225/1055 +f 1944/3228/1056 1943/3227/1044 1950/3231/1049 1945/3232/1053 +f 1945/3232/1053 1950/3231/1049 1951/3233/1047 1946/3234/1051 +f 1946/3235/1051 1951/3236/1047 1952/3237/1045 1947/3238/1052 +f 1947/3238/1052 1952/3237/1045 1949/3230/1041 1948/3229/1054 +f 1953/3239/1064 1954/3240/2 1955/3241/1065 1956/3242/1066 +f 1960/3243/1063 1961/3244/1062 1954/3240/2 1953/3239/1064 +f 1956/3242/1066 1955/3241/1065 1962/3245/1061 1957/3246/1060 +f 1957/3246/1060 1962/3245/1061 1963/3247/1 1958/3248/1057 +f 1958/3249/1057 1963/3250/1 1964/3251/1058 1959/3252/1059 +f 1959/3252/1059 1964/3251/1058 1961/3244/1062 1960/3243/1063 +f 1965/3253/1071 1966/3254/1 1967/3255/1061 1968/3256/1072 +f 1972/3257/1070 1973/3258/1058 1966/3254/1 1965/3253/1071 +f 1968/3256/1072 1967/3255/1061 1974/3259/1065 1969/3260/1069 +f 1969/3260/1069 1974/3259/1065 1975/3261/2 1970/3262/1067 +f 1970/3263/1067 1975/3264/2 1976/3265/1062 1971/3266/1068 +f 1971/3266/1068 1976/3265/1062 1973/3258/1058 1972/3257/1070 +f 1977/3267/1082 1978/3268/1081 1979/3269/1083 1980/3270/1084 +f 1984/3271/1080 1985/3272/1079 1978/3268/1081 1977/3267/1082 +f 1980/3270/1084 1979/3269/1083 1986/3273/1078 1981/3274/1077 +f 1981/3274/1077 1986/3273/1078 1987/3275/1074 1982/3276/1073 +f 1982/3277/1073 1987/3278/1074 1988/3279/1075 1983/3280/1076 +f 1983/3280/1076 1988/3279/1075 1985/3272/1079 1984/3271/1080 +f 1989/3281/1089 1990/3282/1074 1991/3283/1078 1992/3284/1090 +f 1996/3285/1088 1997/3286/1075 1990/3282/1074 1989/3281/1089 +f 1992/3284/1090 1991/3283/1078 1998/3287/1083 1993/3288/1087 +f 1993/3288/1087 1998/3287/1083 1999/3289/1081 1994/3290/1085 +f 1994/3291/1085 1999/3292/1081 2000/3293/1079 1995/3294/1086 +f 1995/3294/1086 2000/3293/1079 1997/3286/1075 1996/3285/1088 +f 2001/3295/1098 2002/3296/4 2003/3297/1099 2004/3298/1100 +f 2008/3299/1097 2009/3300/1096 2002/3296/4 2001/3295/1098 +f 2004/3298/1100 2003/3297/1099 2010/3301/1095 2005/3302/1094 +f 2005/3302/1094 2010/3301/1095 2011/3303/3 2006/3304/1091 +f 2006/3305/1091 2011/3306/3 2012/3307/1092 2007/3308/1093 +f 2007/3308/1093 2012/3307/1092 2009/3300/1096 2008/3299/1097 +f 2013/3309/1105 2014/3310/3 2015/3311/1095 2016/3312/1106 +f 2020/3313/1104 2021/3314/1092 2014/3310/3 2013/3309/1105 +f 2016/3312/1106 2015/3311/1095 2022/3315/1099 2017/3316/1103 +f 2017/3316/1103 2022/3315/1099 2023/3317/4 2018/3318/1101 +f 2018/3319/1101 2023/3320/4 2024/3321/1096 2019/3322/1102 +f 2019/3322/1102 2024/3321/1096 2021/3314/1092 2020/3313/1104 diff --git a/mods/pipeworks/models/pipeworks_pipe_10_lowpoly.obj b/mods/pipeworks/models/pipeworks_pipe_10_lowpoly.obj new file mode 100755 index 0000000..3838b17 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_10_lowpoly.obj @@ -0,0 +1,812 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend' +# www.blender.org +o Cylinder.002_Cylinder.006_None.005 +v -0.468750 -0.156250 -0.064721 +v -0.468750 -0.064721 -0.156250 +v -0.468750 0.064721 -0.156250 +v -0.468750 0.156250 -0.064721 +v -0.468750 0.156250 0.064721 +v -0.468750 0.064721 0.156250 +v -0.468750 -0.064721 0.156250 +v -0.468750 -0.156250 0.064721 +v -0.500000 -0.064721 -0.156250 +v -0.500000 -0.156250 -0.064721 +v -0.500000 -0.156250 0.064721 +v -0.500000 -0.064721 0.156250 +v -0.500000 0.064721 0.156250 +v -0.500000 0.156250 0.064721 +v -0.500000 0.156250 -0.064721 +v -0.500000 0.064721 -0.156250 +v 0.500000 -0.156250 -0.064721 +v 0.500000 -0.064721 -0.156250 +v 0.500000 0.064721 -0.156250 +v 0.500000 0.156250 -0.064721 +v 0.500000 0.156250 0.064721 +v 0.500000 0.064721 0.156250 +v 0.500000 -0.064721 0.156250 +v 0.500000 -0.156250 0.064721 +v 0.468750 -0.064721 -0.156250 +v 0.468750 -0.156250 -0.064721 +v 0.468750 -0.156250 0.064721 +v 0.468750 -0.064721 0.156250 +v 0.468750 0.064721 0.156250 +v 0.468750 0.156250 0.064721 +v 0.468750 0.156250 -0.064721 +v 0.468750 0.064721 -0.156250 +v -0.156250 0.468750 -0.064721 +v -0.064721 0.468750 -0.156250 +v 0.064721 0.468750 -0.156250 +v 0.156250 0.468750 -0.064721 +v 0.156250 0.468750 0.064721 +v 0.064721 0.468750 0.156250 +v -0.064721 0.468750 0.156250 +v -0.156250 0.468750 0.064721 +v -0.064721 0.500000 -0.156250 +v -0.156250 0.500000 -0.064721 +v -0.156250 0.500000 0.064721 +v -0.064721 0.500000 0.156250 +v 0.064721 0.500000 0.156250 +v 0.156250 0.500000 0.064721 +v 0.156250 0.500000 -0.064721 +v 0.064721 0.500000 -0.156250 +v -0.156250 -0.500000 -0.064721 +v -0.064721 -0.500000 -0.156250 +v 0.064721 -0.500000 -0.156250 +v 0.156250 -0.500000 -0.064721 +v 0.156250 -0.500000 0.064721 +v 0.064721 -0.500000 0.156250 +v -0.064721 -0.500000 0.156250 +v -0.156250 -0.500000 0.064721 +v -0.064721 -0.468750 -0.156250 +v -0.156250 -0.468750 -0.064721 +v -0.156250 -0.468750 0.064721 +v -0.064721 -0.468750 0.156250 +v 0.064721 -0.468750 0.156250 +v 0.156250 -0.468750 0.064721 +v 0.156250 -0.468750 -0.064721 +v 0.064721 -0.468750 -0.156250 +v -0.156250 -0.064721 -0.468750 +v -0.064721 -0.156250 -0.468750 +v 0.064721 -0.156250 -0.468750 +v 0.156250 -0.064721 -0.468750 +v 0.156250 0.064721 -0.468750 +v 0.064721 0.156250 -0.468750 +v -0.064721 0.156250 -0.468750 +v -0.156250 0.064721 -0.468750 +v -0.064721 -0.156250 -0.500000 +v -0.156250 -0.064721 -0.500000 +v -0.156250 0.064721 -0.500000 +v -0.064721 0.156250 -0.500000 +v 0.064721 0.156250 -0.500000 +v 0.156250 0.064721 -0.500000 +v 0.156250 -0.064721 -0.500000 +v 0.064721 -0.156250 -0.500000 +v -0.156250 -0.064721 0.500000 +v -0.064721 -0.156250 0.500000 +v 0.064721 -0.156250 0.500000 +v 0.156250 -0.064721 0.500000 +v 0.156250 0.064721 0.500000 +v 0.064721 0.156250 0.500000 +v -0.064721 0.156250 0.500000 +v -0.156250 0.064721 0.500000 +v -0.064721 -0.156250 0.468750 +v -0.156250 -0.064721 0.468750 +v -0.156250 0.064721 0.468750 +v -0.064721 0.156250 0.468750 +v 0.064721 0.156250 0.468750 +v 0.156250 0.064721 0.468750 +v 0.156250 -0.064721 0.468750 +v 0.064721 -0.156250 0.468750 +v -0.468750 -0.051777 -0.125000 +v -0.468750 -0.125000 -0.051777 +v -0.468750 -0.125000 0.051777 +v -0.468750 -0.051777 0.125000 +v -0.468750 0.051777 0.125000 +v -0.468750 0.125000 0.051777 +v -0.468750 0.125000 -0.051777 +v -0.468750 0.051777 -0.125000 +v 0.468750 -0.125000 -0.051777 +v 0.468750 -0.051777 -0.125000 +v 0.468750 0.051777 -0.125000 +v 0.468750 0.125000 -0.051777 +v 0.468750 0.125000 0.051777 +v 0.468750 0.051777 0.125000 +v 0.468750 -0.051777 0.125000 +v 0.468750 -0.125000 0.051777 +v 0.125000 0.125000 -0.051777 +v 0.125000 0.125000 0.051777 +v 0.088388 0.088388 0.088388 +v 0.125000 0.051777 0.125000 +v 0.125000 -0.051777 0.125000 +v 0.088388 -0.088388 0.088388 +v 0.125000 -0.125000 0.051777 +v 0.125000 -0.125000 -0.051777 +v 0.088388 -0.088388 -0.088388 +v 0.125000 -0.051777 -0.125000 +v 0.125000 0.051777 -0.125000 +v 0.088388 0.088388 -0.088388 +v -0.125000 -0.125000 0.051777 +v -0.088388 -0.088388 0.088388 +v -0.125000 -0.051777 0.125000 +v -0.125000 0.051777 0.125000 +v -0.088388 0.088388 0.088389 +v -0.125000 0.125000 0.051777 +v -0.125000 0.125000 -0.051777 +v -0.088388 0.088388 -0.088388 +v -0.125000 0.051777 -0.125000 +v -0.125000 -0.051777 -0.125000 +v -0.088388 -0.088388 -0.088388 +v -0.125000 -0.125000 -0.051777 +v -0.051777 0.468750 -0.125000 +v -0.125000 0.468750 -0.051777 +v -0.125000 0.468750 0.051777 +v -0.051777 0.468750 0.125000 +v 0.051777 0.468750 0.125000 +v 0.125000 0.468750 0.051777 +v 0.125000 0.468750 -0.051777 +v 0.051777 0.468750 -0.125000 +v -0.125000 -0.468750 -0.051777 +v -0.051777 -0.468750 -0.125000 +v 0.051777 -0.468750 -0.125000 +v 0.125000 -0.468750 -0.051777 +v 0.125000 -0.468750 0.051777 +v 0.051777 -0.468750 0.125000 +v -0.051777 -0.468750 0.125000 +v -0.125000 -0.468750 0.051777 +v 0.051777 -0.125000 0.125000 +v -0.051777 -0.125000 0.125000 +v -0.051777 -0.125000 -0.125000 +v 0.051777 -0.125000 -0.125000 +v -0.051777 0.125000 0.125000 +v 0.051777 0.125000 0.125000 +v 0.051777 0.125000 -0.125000 +v -0.051777 0.125000 -0.125000 +v -0.051777 -0.125000 -0.468750 +v -0.125000 -0.051777 -0.468750 +v -0.125000 0.051777 -0.468750 +v -0.051777 0.125000 -0.468750 +v 0.051777 0.125000 -0.468750 +v 0.125000 0.051777 -0.468750 +v 0.125000 -0.051777 -0.468750 +v 0.051777 -0.125000 -0.468750 +v -0.125000 -0.051777 0.468750 +v -0.051777 -0.125000 0.468750 +v 0.051777 -0.125000 0.468750 +v 0.125000 -0.051777 0.468750 +v 0.125000 0.051777 0.468750 +v 0.051777 0.125000 0.468750 +v -0.051777 0.125000 0.468750 +v -0.125000 0.051777 0.468750 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.6250 0.5156 +vt 0.5000 0.5156 +vt 0.5000 0.3281 +vt 0.6250 0.3281 +vt 0.6875 0.3125 +vt 0.7500 0.3281 +vt 0.7500 0.5156 +vt 0.8750 0.5156 +vt 0.8750 0.3281 +vt 1.0000 0.5156 +vt 0.9375 0.3125 +vt 1.0000 0.3281 +vt 0.1250 0.5156 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.1875 0.3125 +vt 0.2500 0.3281 +vt 0.2500 0.5156 +vt 0.3750 0.3281 +vt 0.3750 0.5156 +vt 0.4375 0.3125 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.9375 0.2188 +vt 0.8750 0.2031 +vt 0.8750 0.0156 +vt 0.7500 0.2031 +vt 0.7500 0.0156 +vt 0.6250 0.0156 +vt 0.6875 0.2188 +vt 0.6250 0.2031 +vt 0.5000 0.2031 +vt 0.5000 0.0156 +vt 0.4375 0.2188 +vt 0.3750 0.2031 +vt 0.3750 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2031 +vt 0.1250 0.0156 +vt 0.1875 0.2188 +vt 0.1250 0.2031 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.6250 0.5156 +vt 0.5000 0.5156 +vt 0.5000 0.3281 +vt 0.6250 0.3281 +vt 0.6875 0.3125 +vt 0.7500 0.3281 +vt 0.7500 0.5156 +vt 0.8750 0.5156 +vt 0.8750 0.3281 +vt 1.0000 0.5156 +vt 0.9375 0.3125 +vt 1.0000 0.3281 +vt 0.1250 0.5156 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.1875 0.3125 +vt 0.2500 0.3281 +vt 0.2500 0.5156 +vt 0.3750 0.3281 +vt 0.3750 0.5156 +vt 0.4375 0.3125 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.9375 0.2188 +vt 0.8750 0.2031 +vt 0.8750 0.0156 +vt 0.7500 0.2031 +vt 0.7500 0.0156 +vt 0.6250 0.0156 +vt 0.6875 0.2188 +vt 0.6250 0.2031 +vt 0.5000 0.2031 +vt 0.5000 0.0156 +vt 0.4375 0.2188 +vt 0.3750 0.2031 +vt 0.3750 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2031 +vt 0.1250 0.0156 +vt 0.1875 0.2188 +vt 0.1250 0.2031 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.6250 0.5156 +vt 0.5000 0.5156 +vt 0.5000 0.3281 +vt 0.6250 0.3281 +vt 0.7500 0.3281 +vt 0.7500 0.5156 +vt 0.8750 0.5156 +vt 0.8750 0.3281 +vt 1.0000 0.5156 +vt 0.9375 0.3125 +vt 1.0000 0.3281 +vt 0.1250 0.5156 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.1875 0.3125 +vt 0.2500 0.3281 +vt 0.2500 0.5156 +vt 0.3750 0.3281 +vt 0.3750 0.5156 +vt 0.4375 0.3125 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.9375 0.2188 +vt 0.8750 0.2031 +vt 0.8750 0.0156 +vt 0.7500 0.2031 +vt 0.7500 0.0156 +vt 0.6250 0.0156 +vt 0.6875 0.2188 +vt 0.6250 0.2031 +vt 0.5000 0.2031 +vt 0.5000 0.0156 +vt 0.4375 0.2188 +vt 0.3750 0.2031 +vt 0.3750 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2031 +vt 0.1250 0.0156 +vt 0.1250 0.2031 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.0000 0.0000 -1.0000 +vn -0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 -0.7173 +vn 0.6302 -0.7173 -0.2971 +vn -0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 0.2971 +vn -0.6302 -0.7173 0.2971 +vn 0.6302 -0.2971 0.7173 +vn -0.6302 -0.2971 0.7173 +vn 0.6302 0.2971 0.7173 +vn -0.6302 0.2971 0.7173 +vn 0.6302 0.7173 0.2971 +vn -0.6302 0.7173 0.2971 +vn 0.6302 0.7173 -0.2971 +vn -0.6302 0.7173 -0.2971 +vn 0.6302 0.2971 -0.7173 +vn -0.6302 0.2971 -0.7173 +vn -0.6303 -0.2971 -0.7173 +vn -0.6303 -0.7173 -0.2971 +vn -0.6303 -0.7173 0.2971 +vn -0.6303 -0.2971 0.7173 +vn -0.6303 0.2971 0.7173 +vn -0.6303 0.7173 0.2971 +vn -0.6303 0.7173 -0.2971 +vn -0.6303 0.2971 -0.7173 +vn 0.6303 -0.7173 -0.2971 +vn 0.6303 -0.2971 -0.7173 +vn 0.6303 0.2971 -0.7173 +vn 0.6303 0.7173 -0.2971 +vn 0.6303 0.7173 0.2971 +vn 0.6303 0.2971 0.7173 +vn 0.6303 -0.2971 0.7173 +vn 0.6303 -0.7173 0.2971 +vn 0.5789 0.5789 -0.5743 +vn 0.5789 0.5789 0.5743 +vn 0.5774 0.5774 0.5774 +vn 0.5789 0.5743 0.5789 +vn 0.5789 -0.5743 0.5789 +vn 0.5774 -0.5774 0.5774 +vn 0.5789 -0.5789 0.5743 +vn 0.5789 -0.5789 -0.5743 +vn 0.5774 -0.5774 -0.5774 +vn 0.5789 -0.5743 -0.5789 +vn 0.5789 0.5743 -0.5789 +vn 0.5774 0.5774 -0.5774 +vn -0.5789 -0.5789 0.5743 +vn -0.5774 -0.5774 0.5774 +vn -0.5789 -0.5743 0.5789 +vn -0.5789 0.5743 0.5789 +vn -0.5774 0.5774 0.5773 +vn -0.5789 0.5789 0.5743 +vn -0.5789 0.5789 -0.5743 +vn -0.5774 0.5774 -0.5774 +vn -0.5789 0.5743 -0.5789 +vn -0.5789 -0.5743 -0.5789 +vn -0.5774 -0.5774 -0.5774 +vn -0.5789 -0.5789 -0.5743 +vn -0.2971 0.6302 -0.7173 +vn -0.2971 -0.6302 -0.7173 +vn -0.7173 -0.6302 -0.2971 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 -0.6302 0.2971 +vn -0.7173 0.6302 0.2971 +vn -0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn 0.2971 0.6302 0.7173 +vn 0.7173 -0.6302 0.2971 +vn 0.7173 0.6302 0.2971 +vn 0.7173 -0.6302 -0.2971 +vn 0.7173 0.6302 -0.2971 +vn 0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 -0.7173 +vn -0.2971 0.6303 -0.7173 +vn -0.7173 0.6303 -0.2971 +vn -0.7173 0.6303 0.2971 +vn -0.2971 0.6303 0.7173 +vn 0.2971 0.6303 0.7173 +vn 0.7173 0.6303 0.2971 +vn 0.7173 0.6303 -0.2971 +vn 0.2971 0.6303 -0.7173 +vn -0.7173 -0.6303 -0.2971 +vn -0.2971 -0.6303 -0.7173 +vn 0.2971 -0.6303 -0.7173 +vn 0.7173 -0.6303 -0.2971 +vn 0.7173 -0.6303 0.2971 +vn 0.2971 -0.6303 0.7173 +vn -0.2971 -0.6303 0.7173 +vn -0.7173 -0.6303 0.2971 +vn 0.5743 -0.5789 0.5789 +vn -0.5743 -0.5789 0.5789 +vn -0.5743 -0.5789 -0.5789 +vn 0.5743 -0.5789 -0.5789 +vn -0.5743 0.5789 0.5789 +vn 0.5743 0.5789 0.5789 +vn 0.5743 0.5789 -0.5789 +vn -0.5743 0.5789 -0.5789 +vn -0.2971 -0.7173 -0.6302 +vn -0.2971 -0.7173 0.6302 +vn -0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 -0.6302 +vn -0.7173 0.2971 0.6302 +vn -0.7173 0.2971 -0.6302 +vn -0.2971 0.7173 0.6302 +vn -0.2971 0.7173 -0.6302 +vn 0.2971 0.7173 0.6302 +vn 0.2971 0.7173 -0.6302 +vn 0.7173 0.2971 0.6302 +vn 0.7173 0.2971 -0.6302 +vn 0.7173 -0.2971 0.6302 +vn 0.7173 -0.2971 -0.6302 +vn 0.2971 -0.7173 0.6302 +vn 0.2971 -0.7173 -0.6302 +vn -0.2971 -0.7173 -0.6303 +vn -0.7173 -0.2971 -0.6303 +vn -0.7173 0.2971 -0.6303 +vn -0.2971 0.7173 -0.6303 +vn 0.2971 0.7173 -0.6303 +vn 0.7173 0.2971 -0.6303 +vn 0.7173 -0.2971 -0.6303 +vn 0.2971 -0.7173 -0.6303 +vn -0.7173 -0.2971 0.6303 +vn -0.2971 -0.7173 0.6303 +vn 0.2971 -0.7173 0.6303 +vn 0.7173 -0.2971 0.6303 +vn 0.7173 0.2971 0.6303 +vn 0.2971 0.7173 0.6303 +vn -0.2971 0.7173 0.6303 +vn -0.7173 0.2971 0.6303 +g Cylinder.002_Cylinder.006_None.005_Cylinder.002_Cylinder.006_None.005_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2 +f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 +f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2 +f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3 +f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4 +f 49/49/3 50/50/3 51/51/3 52/52/3 53/53/3 54/54/3 55/55/3 56/56/3 +f 57/57/4 58/58/4 59/59/4 60/60/4 61/61/4 62/62/4 63/63/4 64/64/4 +f 65/65/5 66/66/5 67/67/5 68/68/5 69/69/5 70/70/5 71/71/5 72/72/5 +f 73/73/6 74/74/6 75/75/6 76/76/6 77/77/6 78/78/6 79/79/6 80/80/6 +f 81/81/5 82/82/5 83/83/5 84/84/5 85/85/5 86/86/5 87/87/5 88/88/5 +f 89/89/6 90/90/6 91/91/6 92/92/6 93/93/6 94/94/6 95/95/6 96/96/6 +s 1 +f 9/97/7 2/98/8 1/99/9 10/100/10 +f 10/100/10 1/99/9 8/101/11 11/102/12 +f 11/102/12 8/101/11 7/103/13 12/104/14 +f 12/105/14 7/106/13 6/107/15 13/108/16 +f 13/108/16 6/107/15 5/109/17 14/110/18 +f 14/110/18 5/109/17 4/111/19 15/112/20 +f 15/112/20 4/111/19 3/113/21 16/114/22 +f 16/114/22 3/113/21 2/98/8 9/97/7 +f 26/115/10 17/116/9 24/117/11 27/118/12 +f 25/119/7 18/120/8 17/116/9 26/115/10 +f 27/118/12 24/117/11 23/121/13 28/122/14 +f 28/123/14 23/124/13 22/125/15 29/126/16 +f 29/126/16 22/125/15 21/127/17 30/128/18 +f 30/128/18 21/127/17 20/129/19 31/130/20 +f 31/130/20 20/129/19 19/131/21 32/132/22 +f 32/132/22 19/131/21 18/120/8 25/119/7 +f 97/133/23 98/134/24 99/135/25 100/136/26 101/137/27 102/138/28 103/139/29 104/140/30 +f 105/141/31 106/142/32 107/143/33 108/144/34 109/145/35 110/146/36 111/147/37 112/148/38 +f 109/149/35 108/150/34 113/151/39 114/152/40 +f 109/149/35 114/152/40 115/153/41 116/154/42 110/155/36 +f 111/156/37 110/155/36 116/154/42 117/157/43 +f 112/158/38 111/156/37 117/157/43 118/159/44 119/160/45 +f 105/161/31 112/162/38 119/163/45 120/164/46 +f 105/161/31 120/164/46 121/165/47 122/166/48 106/167/32 +f 106/167/32 122/166/48 123/168/49 107/169/33 +f 107/169/33 123/168/49 124/170/50 113/151/39 108/150/34 +f 99/171/25 125/172/51 126/173/52 127/174/53 100/175/26 +f 100/175/26 127/174/53 128/176/54 101/177/27 +f 102/178/28 101/177/27 128/176/54 129/179/55 130/180/56 +f 102/178/28 130/180/56 131/181/57 103/182/29 +f 103/182/29 131/181/57 132/183/58 133/184/59 104/185/30 +f 97/186/23 104/185/30 133/184/59 134/187/60 +f 98/188/24 97/186/23 134/187/60 135/189/61 136/190/62 +f 98/188/24 136/190/62 125/191/51 99/192/25 +f 41/193/63 34/194/64 33/195/65 42/196/66 +f 42/196/66 33/195/65 40/197/67 43/198/68 +f 43/198/68 40/197/67 39/199/69 44/200/70 +f 44/201/70 39/202/69 38/203/71 45/204/72 +f 45/204/72 38/203/71 37/205/73 46/206/74 +f 46/206/74 37/205/73 36/207/75 47/208/76 +f 47/208/76 36/207/75 35/209/77 48/210/78 +f 48/210/78 35/209/77 34/194/64 41/193/63 +f 58/211/66 49/212/65 56/213/67 59/214/68 +f 57/215/63 50/216/64 49/212/65 58/211/66 +f 59/214/68 56/213/67 55/217/69 60/218/70 +f 60/219/70 55/220/69 54/221/71 61/222/72 +f 61/222/72 54/221/71 53/223/73 62/224/74 +f 62/224/74 53/223/73 52/225/75 63/226/76 +f 63/226/76 52/225/75 51/227/77 64/228/78 +f 64/228/78 51/227/77 50/216/64 57/215/63 +f 137/229/79 138/230/80 139/231/81 140/232/82 141/233/83 142/234/84 143/235/85 144/236/86 +f 145/237/87 146/238/88 147/239/89 148/240/90 149/241/91 150/242/92 151/243/93 152/244/94 +f 149/245/91 148/246/90 120/247/46 119/248/45 +f 149/245/91 119/248/45 118/249/44 153/250/95 150/251/92 +f 151/252/93 150/251/92 153/250/95 154/253/96 +f 152/254/94 151/252/93 154/253/96 126/255/52 125/256/51 +f 145/257/87 152/258/94 125/259/51 136/260/62 +f 145/257/87 136/260/62 135/261/61 155/262/97 146/263/88 +f 146/263/88 155/262/97 156/264/98 147/265/89 +f 147/265/89 156/264/98 121/266/47 120/247/46 148/246/90 +f 139/267/81 130/268/56 129/269/55 157/270/99 140/271/82 +f 140/271/82 157/270/99 158/272/100 141/273/83 +f 142/274/84 141/273/83 158/272/100 115/275/41 114/276/40 +f 142/274/84 114/276/40 113/277/39 143/278/85 +f 143/278/85 113/277/39 124/279/50 159/280/101 144/281/86 +f 137/282/79 144/281/86 159/280/101 160/283/102 +f 138/284/80 137/282/79 160/283/102 132/285/58 131/286/57 +f 138/284/80 131/286/57 130/287/56 139/288/81 +f 73/289/103 66/290/104 65/291/105 74/292/106 +f 74/292/106 65/291/105 72/293/107 75/294/108 +f 75/294/108 72/293/107 71/295/109 76/296/110 +f 76/297/110 71/298/109 70/299/111 77/300/112 +f 77/300/112 70/299/111 69/301/113 78/302/114 +f 78/302/114 69/301/113 68/303/115 79/304/116 +f 79/304/116 68/303/115 67/305/117 80/306/118 +f 80/306/118 67/305/117 66/290/104 73/289/103 +f 90/307/106 81/308/105 88/309/107 91/310/108 +f 89/311/103 82/312/104 81/308/105 90/307/106 +f 91/310/108 88/309/107 87/313/109 92/314/110 +f 92/315/110 87/316/109 86/317/111 93/318/112 +f 93/318/112 86/317/111 85/319/113 94/320/114 +f 94/320/114 85/319/113 84/321/115 95/322/116 +f 95/322/116 84/321/115 83/323/117 96/324/118 +f 96/324/118 83/323/117 82/312/104 89/311/103 +f 161/325/119 162/326/120 163/327/121 164/328/122 165/329/123 166/330/124 167/331/125 168/332/126 +f 169/333/127 170/334/128 171/335/129 172/336/130 173/337/131 174/338/132 175/339/133 176/340/134 +f 173/341/131 172/342/130 117/343/43 116/344/42 +f 173/341/131 116/344/42 115/153/41 158/345/100 174/346/132 +f 175/347/133 174/346/132 158/345/100 157/348/99 +f 176/349/134 175/347/133 157/348/99 129/350/55 128/351/54 +f 169/352/127 176/353/134 128/354/54 127/355/53 +f 169/352/127 127/355/53 126/356/52 154/357/96 170/358/128 +f 170/358/128 154/357/96 153/359/95 171/360/129 +f 171/360/129 153/359/95 118/361/44 117/343/43 172/342/130 +f 163/362/121 133/363/59 132/364/58 160/365/102 164/366/122 +f 164/366/122 160/365/102 159/367/101 165/368/123 +f 166/369/124 165/368/123 159/367/101 124/370/50 123/371/49 +f 166/369/124 123/371/49 122/372/48 167/373/125 +f 167/373/125 122/372/48 121/374/47 156/375/98 168/376/126 +f 161/377/119 168/376/126 156/375/98 155/378/97 +f 162/379/120 161/377/119 155/378/97 135/189/61 134/380/60 +f 162/379/120 134/380/60 133/381/59 163/382/121 diff --git a/mods/pipeworks/models/pipeworks_pipe_2.obj b/mods/pipeworks/models/pipeworks_pipe_2.obj new file mode 100755 index 0000000..f0edcfc --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_2.obj @@ -0,0 +1,1958 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-spigot-pouring.blend' +# www.blender.org +o Pipe_Cylinder.002_None.002 +v 0.460914 0.136982 -0.046976 +v 0.460914 0.142474 -0.054133 +v 0.460914 0.139022 -0.062467 +v 0.460914 0.130078 -0.063644 +v 0.460914 0.124587 -0.056488 +v 0.460914 0.128039 -0.048153 +v 0.460914 0.063644 -0.130078 +v 0.460914 0.062467 -0.139022 +v 0.460914 0.054133 -0.142474 +v 0.460914 0.046976 -0.136982 +v 0.460914 0.048153 -0.128039 +v 0.460914 0.056487 -0.124587 +v 0.460914 -0.046976 -0.136982 +v 0.460914 -0.054133 -0.142474 +v 0.460914 -0.062467 -0.139022 +v 0.460914 -0.063644 -0.130078 +v 0.460914 -0.056488 -0.124587 +v 0.460914 -0.048153 -0.128039 +v 0.460914 -0.130078 -0.063644 +v 0.460914 -0.139022 -0.062467 +v 0.460914 -0.142474 -0.054133 +v 0.460914 -0.136982 -0.046976 +v 0.460914 -0.128039 -0.048153 +v 0.460914 -0.124587 -0.056487 +v 0.460914 -0.136982 0.046976 +v 0.460914 -0.142474 0.054133 +v 0.460914 -0.139022 0.062467 +v 0.460914 -0.130078 0.063644 +v 0.460914 -0.124587 0.056487 +v 0.460914 -0.128039 0.048153 +v 0.460914 -0.063644 0.130078 +v 0.460914 -0.062467 0.139022 +v 0.460914 -0.054132 0.142474 +v 0.460914 -0.046976 0.136982 +v 0.460914 -0.048153 0.128039 +v 0.460914 -0.056487 0.124587 +v 0.460914 0.046976 0.136982 +v 0.460914 0.054133 0.142474 +v 0.460914 0.062467 0.139022 +v 0.460914 0.063644 0.130078 +v 0.460914 0.056487 0.124587 +v 0.460914 0.048153 0.128039 +v 0.460914 0.130078 0.063644 +v 0.460914 0.139022 0.062467 +v 0.460914 0.142474 0.054133 +v 0.460914 0.136982 0.046976 +v 0.460914 0.128039 0.048153 +v 0.460914 0.124587 0.056487 +v 0.468750 0.099603 0.121367 +v 0.468750 0.121367 0.099603 +v 0.468750 0.138467 0.074012 +v 0.468750 0.150245 0.045576 +v 0.468750 0.156250 0.015389 +v 0.468750 0.156250 -0.015389 +v 0.468750 0.150245 -0.045576 +v 0.468750 0.138467 -0.074012 +v 0.468750 0.121367 -0.099603 +v 0.468750 0.099603 -0.121367 +v 0.468750 0.074012 -0.138467 +v 0.468750 0.045576 -0.150245 +v 0.468750 0.015389 -0.156250 +v 0.468750 -0.015389 -0.156250 +v 0.468750 -0.045576 -0.150245 +v 0.468750 -0.074012 -0.138467 +v 0.468750 -0.099603 -0.121367 +v 0.468750 -0.121367 -0.099603 +v 0.468750 -0.138467 -0.074012 +v 0.468750 -0.150245 -0.045576 +v 0.468750 -0.156250 -0.015389 +v 0.468750 -0.156250 0.015389 +v 0.468750 -0.150245 0.045576 +v 0.468750 -0.138466 0.074012 +v 0.468750 -0.121367 0.099603 +v 0.468750 -0.099603 0.121367 +v 0.468750 -0.074012 0.138467 +v 0.468750 -0.045576 0.150245 +v 0.468750 -0.015389 0.156250 +v 0.468750 0.015390 0.156250 +v 0.468750 0.045577 0.150245 +v 0.468750 0.074012 0.138467 +v 0.500000 -0.150245 -0.045576 +v 0.500000 -0.138467 -0.074012 +v 0.500000 -0.121367 -0.099603 +v 0.500000 -0.099603 -0.121367 +v 0.500000 -0.074012 -0.138467 +v 0.500000 -0.045576 -0.150245 +v 0.500000 -0.015389 -0.156250 +v 0.500000 0.015389 -0.156250 +v 0.500000 0.045576 -0.150245 +v 0.500000 0.074012 -0.138467 +v 0.500000 0.099603 -0.121367 +v 0.500000 0.121367 -0.099603 +v 0.500000 0.138467 -0.074012 +v 0.500000 0.150245 -0.045576 +v 0.500000 0.156250 -0.015389 +v 0.500000 0.156250 0.015389 +v 0.500000 0.150245 0.045576 +v 0.500000 0.138467 0.074012 +v 0.500000 0.121367 0.099603 +v 0.500000 0.099603 0.121367 +v 0.500000 0.074012 0.138467 +v 0.500000 0.045577 0.150245 +v 0.500000 0.015390 0.156250 +v 0.500000 -0.015389 0.156250 +v 0.500000 -0.045576 0.150245 +v 0.500000 -0.074012 0.138467 +v 0.500000 -0.099603 0.121367 +v 0.500000 -0.121367 0.099603 +v 0.500000 -0.138466 0.074012 +v 0.500000 -0.150245 0.045576 +v 0.500000 -0.156250 0.015389 +v 0.500000 -0.156250 -0.015389 +v 0.460914 0.108578 -0.095821 +v 0.460914 0.110913 -0.104534 +v 0.460914 0.104534 -0.110913 +v 0.460914 0.095821 -0.108578 +v 0.460914 0.093486 -0.099865 +v 0.460914 0.099865 -0.093486 +v 0.460914 0.009021 -0.144532 +v 0.460914 0.004510 -0.152344 +v 0.460914 -0.004510 -0.152344 +v 0.460914 -0.009021 -0.144532 +v 0.460914 -0.004510 -0.136720 +v 0.460914 0.004510 -0.136720 +v 0.460914 -0.095821 -0.108578 +v 0.460914 -0.104534 -0.110913 +v 0.460914 -0.110913 -0.104534 +v 0.460914 -0.108578 -0.095821 +v 0.460914 -0.099865 -0.093486 +v 0.460914 -0.093486 -0.099865 +v 0.460914 -0.144532 -0.009021 +v 0.460914 -0.152344 -0.004510 +v 0.460914 -0.152344 0.004510 +v 0.460914 -0.144532 0.009021 +v 0.460914 -0.136720 0.004510 +v 0.460914 -0.136720 -0.004510 +v 0.460914 -0.108578 0.095821 +v 0.460914 -0.110913 0.104534 +v 0.460914 -0.104534 0.110913 +v 0.460914 -0.095821 0.108578 +v 0.460914 -0.093486 0.099865 +v 0.460914 -0.099865 0.093486 +v 0.460914 -0.009021 0.144532 +v 0.460914 -0.004510 0.152344 +v 0.460914 0.004510 0.152344 +v 0.460914 0.009021 0.144532 +v 0.460914 0.004510 0.136720 +v 0.460914 -0.004510 0.136720 +v 0.460914 0.095821 0.108578 +v 0.460914 0.104534 0.110913 +v 0.460914 0.110913 0.104534 +v 0.460914 0.108578 0.095821 +v 0.460914 0.099865 0.093486 +v 0.460914 0.093486 0.099865 +v 0.460914 0.144532 0.009021 +v 0.460914 0.152344 0.004510 +v 0.460914 0.152344 -0.004510 +v 0.460914 0.144532 -0.009021 +v 0.460914 0.136720 -0.004510 +v 0.460914 0.136720 0.004510 +v 0.468750 0.116832 -0.062448 +v 0.437501 0.110774 -0.059210 +v 0.437501 0.120197 -0.036461 +v 0.468750 0.126770 -0.038455 +v 0.468750 0.131837 -0.012985 +v 0.437501 0.125000 -0.012312 +v 0.468750 0.131837 0.012984 +v 0.437501 0.125001 0.012311 +v 0.468750 0.126770 0.038455 +v 0.437501 0.120197 0.036461 +v 0.468750 0.116832 0.062448 +v 0.437501 0.110774 0.059210 +v 0.468750 0.102404 0.084041 +v 0.437501 0.097094 0.079683 +v 0.437501 0.079683 0.097094 +v 0.468750 0.084041 0.102404 +v 0.468750 0.062448 0.116832 +v 0.437501 0.059210 0.110774 +v 0.468750 0.038455 0.126770 +v 0.437501 0.036461 0.120197 +v 0.468750 0.012985 0.131836 +v 0.437501 0.012312 0.125000 +v 0.437501 -0.012311 0.125000 +v 0.468750 -0.012985 0.131836 +v 0.437501 -0.036461 0.120197 +v 0.468750 -0.038455 0.126770 +v 0.468750 -0.062448 0.116832 +v 0.437501 -0.059210 0.110774 +v 0.437501 -0.079683 0.097094 +v 0.468750 -0.084041 0.102404 +v 0.437501 -0.097094 0.079683 +v 0.468750 -0.102404 0.084041 +v 0.468750 -0.116832 0.062448 +v 0.437501 -0.110774 0.059210 +v 0.437501 -0.120197 0.036461 +v 0.468750 -0.126770 0.038455 +v 0.468750 -0.131836 0.012985 +v 0.437501 -0.125000 0.012311 +v 0.437501 -0.125000 -0.012311 +v 0.468750 -0.131836 -0.012985 +v 0.468750 -0.126770 -0.038455 +v 0.437501 -0.120197 -0.036461 +v 0.437501 -0.110774 -0.059210 +v 0.468750 -0.116832 -0.062448 +v 0.437501 -0.097094 -0.079683 +v 0.468750 -0.102404 -0.084041 +v 0.437501 -0.079683 -0.097094 +v 0.468750 -0.084041 -0.102404 +v 0.437501 -0.059210 -0.110774 +v 0.468750 -0.062448 -0.116832 +v 0.437501 -0.036461 -0.120197 +v 0.468750 -0.038455 -0.126770 +v 0.437501 -0.012311 -0.125001 +v 0.468750 -0.012985 -0.131836 +v 0.468750 0.038455 -0.126770 +v 0.468750 0.012985 -0.131837 +v 0.437501 0.012311 -0.125001 +v 0.437501 0.036461 -0.120197 +v 0.468750 0.084041 -0.102404 +v 0.468750 0.062448 -0.116832 +v 0.437501 0.059210 -0.110774 +v 0.437501 0.079683 -0.097094 +v 0.468750 0.102404 -0.084041 +v 0.437501 0.097094 -0.079683 +v 0.468751 0.136982 -0.046976 +v 0.468751 0.142474 -0.054133 +v 0.468751 0.128039 -0.048153 +v 0.468751 0.139022 -0.062467 +v 0.468751 0.130078 -0.063644 +v 0.468751 0.124587 -0.056488 +v 0.468751 0.063644 -0.130078 +v 0.468751 0.062467 -0.139022 +v 0.468751 0.056487 -0.124587 +v 0.468751 0.054133 -0.142474 +v 0.468751 0.046976 -0.136982 +v 0.468751 0.048153 -0.128039 +v 0.468751 -0.046976 -0.136982 +v 0.468751 -0.054133 -0.142474 +v 0.468751 -0.048153 -0.128039 +v 0.468751 -0.062467 -0.139022 +v 0.468751 -0.063644 -0.130078 +v 0.468751 -0.056488 -0.124587 +v 0.468751 -0.130078 -0.063644 +v 0.468751 -0.139022 -0.062467 +v 0.468751 -0.124587 -0.056487 +v 0.468751 -0.142474 -0.054133 +v 0.468751 -0.136982 -0.046976 +v 0.468751 -0.128039 -0.048153 +v 0.468751 -0.136982 0.046976 +v 0.468751 -0.142474 0.054133 +v 0.468751 -0.128039 0.048153 +v 0.468751 -0.139022 0.062467 +v 0.468751 -0.130078 0.063644 +v 0.468751 -0.124587 0.056487 +v 0.468751 -0.063644 0.130078 +v 0.468751 -0.062467 0.139022 +v 0.468751 -0.056487 0.124587 +v 0.468751 -0.054132 0.142474 +v 0.468751 -0.046976 0.136982 +v 0.468751 -0.048153 0.128039 +v 0.468751 0.046976 0.136982 +v 0.468751 0.054133 0.142474 +v 0.468751 0.048153 0.128039 +v 0.468751 0.062467 0.139022 +v 0.468751 0.063644 0.130078 +v 0.468751 0.056487 0.124587 +v 0.468751 0.130078 0.063644 +v 0.468751 0.139022 0.062467 +v 0.468751 0.124587 0.056487 +v 0.468751 0.142474 0.054133 +v 0.468751 0.136982 0.046976 +v 0.468751 0.128039 0.048153 +v -0.008234 -0.089785 0.073685 +v -0.008234 -0.073685 0.089785 +v -0.027344 -0.059762 0.072821 +v -0.027344 -0.072821 0.059762 +v -0.008234 0.089785 -0.073685 +v -0.008234 0.073685 -0.089785 +v -0.027344 0.059762 -0.072821 +v -0.027344 0.072821 -0.059762 +v -0.008233 0.115591 0.011385 +v -0.008234 0.115591 -0.011385 +v -0.027344 0.093750 -0.009234 +v -0.027344 0.093750 0.009234 +v -0.008234 0.054753 0.102435 +v -0.008234 0.073685 0.089785 +v -0.027344 0.059762 0.072821 +v -0.027344 0.044408 0.083080 +v -0.008234 -0.115591 0.011385 +v -0.008234 -0.111149 0.033716 +v -0.027344 -0.090148 0.027346 +v -0.027344 -0.093750 0.009234 +v -0.008234 0.011385 -0.115591 +v -0.008234 -0.011385 -0.115591 +v -0.027344 -0.009233 -0.093750 +v -0.027344 0.009234 -0.093750 +v -0.008234 0.054753 -0.102435 +v -0.008234 0.033717 -0.111148 +v -0.027344 0.027346 -0.090148 +v -0.027344 0.044407 -0.083080 +v -0.008234 -0.073685 -0.089785 +v -0.008234 -0.089785 -0.073685 +v -0.027344 -0.072821 -0.059762 +v -0.027344 -0.059762 -0.072821 +v -0.008233 0.111148 0.033717 +v -0.027344 0.090148 0.027346 +v -0.008234 -0.102435 -0.054753 +v -0.027344 -0.083081 -0.044407 +v -0.008234 -0.111149 -0.033716 +v -0.008234 -0.115591 -0.011385 +v -0.027344 -0.093750 -0.009234 +v -0.027344 -0.090148 -0.027346 +v -0.008234 0.102435 -0.054753 +v -0.027344 0.083080 -0.044407 +v -0.008234 -0.102435 0.054753 +v -0.027344 -0.083080 0.044407 +v -0.008234 -0.054752 -0.102435 +v -0.027344 -0.044407 -0.083081 +v -0.008234 0.033717 0.111148 +v -0.027344 0.027346 0.090148 +v -0.008234 0.011385 0.115591 +v -0.027344 0.009234 0.093750 +v -0.008234 -0.011385 0.115591 +v -0.027344 -0.009234 0.093750 +v -0.008234 -0.033716 0.111148 +v -0.027344 -0.027346 0.090148 +v -0.008234 -0.054753 0.102435 +v -0.027344 -0.044407 0.083081 +v 0.012504 0.120197 -0.036461 +v 0.012504 0.125000 -0.012311 +v -0.008234 0.111149 -0.033716 +v -0.027344 0.090148 -0.027346 +v 0.468751 0.108578 -0.095821 +v 0.468751 0.110913 -0.104534 +v 0.468751 0.099865 -0.093486 +v 0.468751 0.104534 -0.110913 +v 0.468751 0.095821 -0.108578 +v 0.468751 0.093486 -0.099865 +v 0.468751 0.009021 -0.144532 +v 0.468751 0.004510 -0.152344 +v 0.468751 0.004510 -0.136720 +v 0.468751 -0.004510 -0.152344 +v 0.468751 -0.009021 -0.144532 +v 0.468751 -0.004510 -0.136720 +v 0.468751 -0.095821 -0.108578 +v 0.468751 -0.104534 -0.110913 +v 0.468751 -0.093486 -0.099865 +v 0.468751 -0.110913 -0.104534 +v 0.468751 -0.108578 -0.095821 +v 0.468751 -0.099865 -0.093486 +v 0.468751 -0.144532 -0.009021 +v 0.468751 -0.152344 -0.004510 +v 0.468751 -0.136720 -0.004510 +v 0.468751 -0.152344 0.004510 +v 0.468751 -0.144532 0.009021 +v 0.468751 -0.136720 0.004510 +v 0.468751 -0.108578 0.095821 +v 0.468751 -0.110913 0.104534 +v 0.468751 -0.099865 0.093486 +v 0.468751 -0.104534 0.110913 +v 0.468751 -0.095821 0.108578 +v 0.468751 -0.093486 0.099865 +v 0.468751 -0.009021 0.144532 +v 0.468751 -0.004510 0.152344 +v 0.468751 -0.004510 0.136720 +v 0.468751 0.004510 0.152344 +v 0.468751 0.009021 0.144532 +v 0.468751 0.004510 0.136720 +v 0.468751 0.095821 0.108578 +v 0.468751 0.104534 0.110913 +v 0.468751 0.093486 0.099865 +v 0.468751 0.110913 0.104534 +v 0.468751 0.108578 0.095821 +v 0.468751 0.099865 0.093486 +v -0.039062 -0.048547 -0.039842 +v -0.039063 -0.039842 -0.048547 +v 0.468751 0.144532 0.009021 +v 0.468751 0.152344 0.004510 +v 0.468751 0.136720 0.004510 +v 0.468751 0.152344 -0.004510 +v 0.468751 0.144532 -0.009021 +v 0.468751 0.136720 -0.004510 +v -0.008234 -0.033716 -0.111149 +v -0.027344 -0.027346 -0.090148 +v -0.008234 0.089785 0.073685 +v -0.027344 0.072821 0.059762 +v -0.008234 0.102435 0.054753 +v -0.027344 0.083080 0.044407 +v -0.046875 -0.027694 -0.014802 +v -0.046875 -0.030049 -0.009115 +v -0.046875 -0.031250 -0.003078 +v -0.046875 -0.031250 0.003078 +v -0.046875 -0.030049 0.009115 +v -0.046875 -0.027693 0.014802 +v -0.046875 -0.024274 0.019921 +v -0.046875 -0.019921 0.024274 +v -0.046875 -0.014802 0.027694 +v -0.046875 -0.009115 0.030049 +v -0.046875 -0.003078 0.031250 +v -0.046875 0.003078 0.031250 +v -0.046875 0.009115 0.030049 +v -0.046875 0.014803 0.027693 +v -0.046875 0.019921 0.024274 +v -0.046875 0.024274 0.019921 +v -0.046875 0.027693 0.014802 +v -0.046875 0.030049 0.009115 +v -0.046875 0.031250 0.003078 +v -0.046875 0.031250 -0.003078 +v -0.046875 0.030049 -0.009115 +v -0.046875 0.027693 -0.014802 +v -0.046875 0.024274 -0.019921 +v -0.046875 0.019921 -0.024274 +v -0.046875 0.014802 -0.027693 +v -0.046875 0.009115 -0.030049 +v -0.046875 0.003078 -0.031250 +v -0.046875 -0.003078 -0.031250 +v -0.046875 -0.009115 -0.030049 +v -0.046875 -0.014802 -0.027694 +v -0.046875 -0.019921 -0.024274 +v -0.046875 -0.024274 -0.019921 +v -0.039063 -0.029605 -0.055387 +v -0.039063 -0.018231 -0.060098 +v -0.039063 -0.006156 -0.062500 +v -0.039063 0.006156 -0.062500 +v -0.039063 0.018231 -0.060098 +v -0.039062 0.029605 -0.055387 +v -0.039062 0.039842 -0.048547 +v -0.039062 0.048547 -0.039842 +v -0.039062 0.055387 -0.029605 +v -0.039062 0.060098 -0.018231 +v -0.039062 0.062500 -0.006156 +v -0.039062 0.062500 0.006156 +v -0.039062 0.060098 0.018231 +v -0.039062 0.055387 0.029605 +v -0.039062 0.048547 0.039842 +v -0.039062 0.039842 0.048547 +v -0.039062 0.029605 0.055387 +v -0.039062 0.018231 0.060098 +v -0.039062 0.006156 0.062500 +v -0.039063 -0.006156 0.062500 +v -0.039063 -0.018231 0.060098 +v -0.039063 -0.029605 0.055387 +v -0.039062 -0.039842 0.048547 +v -0.039063 -0.048547 0.039842 +v -0.039063 -0.055387 0.029605 +v -0.039062 -0.060098 0.018231 +v -0.039063 -0.062500 0.006156 +v -0.039062 -0.062500 -0.006156 +v -0.039062 -0.060098 -0.018231 +v -0.039062 -0.055387 -0.029605 +v 0.012504 -0.110774 -0.059210 +v 0.012504 -0.120197 -0.036461 +v 0.012503 -0.059210 0.110774 +v 0.012504 -0.079683 0.097094 +v 0.012503 -0.012312 0.125000 +v 0.012503 -0.036461 0.120197 +v 0.012504 -0.125000 -0.012312 +v 0.012503 -0.125000 0.012312 +v 0.012504 -0.120197 0.036461 +v 0.012504 -0.110774 0.059210 +v 0.012503 -0.097094 0.079683 +v 0.012504 -0.097094 -0.079683 +v 0.012503 -0.079683 -0.097094 +v 0.012504 0.012312 0.125000 +v 0.012504 0.125000 0.012312 +v 0.012504 0.059210 0.110774 +v 0.012504 0.036461 0.120197 +v 0.012504 0.079683 0.097094 +v 0.012504 0.097094 0.079683 +v 0.012503 -0.012311 -0.125000 +v 0.012503 0.012311 -0.125000 +v 0.012504 0.110774 0.059210 +v 0.012504 0.120197 0.036461 +v 0.012504 0.097094 -0.079683 +v 0.012504 0.110774 -0.059210 +v 0.012504 0.079683 -0.097094 +v 0.012504 0.059210 -0.110774 +v 0.012504 0.036461 -0.120197 +v 0.012503 -0.036461 -0.120197 +v 0.012503 -0.059210 -0.110774 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6349 0.7398 +vt 0.6507 0.7556 +vt 0.6341 0.7693 +vt 0.6213 0.7565 +vt 0.4903 0.9161 +vt 0.4745 0.9003 +vt 0.4912 0.8866 +vt 0.5040 0.8994 +vt 0.5738 0.9414 +vt 0.5515 0.9414 +vt 0.5536 0.9200 +vt 0.5717 0.9200 +vt 0.6632 0.8817 +vt 0.6507 0.9003 +vt 0.6341 0.8866 +vt 0.6442 0.8716 +vt 0.5738 0.7145 +vt 0.5957 0.7189 +vt 0.5895 0.7395 +vt 0.5717 0.7360 +vt 0.4492 0.8391 +vt 0.4492 0.8168 +vt 0.4706 0.8189 +vt 0.4706 0.8370 +vt 0.4621 0.8817 +vt 0.4535 0.8611 +vt 0.4741 0.8548 +vt 0.4811 0.8715 +vt 0.4745 0.7556 +vt 0.4903 0.7398 +vt 0.5040 0.7565 +vt 0.4912 0.7693 +vt 0.5957 0.9371 +vt 0.5895 0.9164 +vt 0.5089 0.7274 +vt 0.5190 0.7464 +vt 0.5295 0.7189 +vt 0.5515 0.7145 +vt 0.5536 0.7360 +vt 0.5358 0.7395 +vt 0.5089 0.9285 +vt 0.5190 0.9095 +vt 0.6164 0.7274 +vt 0.6062 0.7464 +vt 0.4621 0.7742 +vt 0.4811 0.7844 +vt 0.6717 0.8611 +vt 0.6511 0.8548 +vt 0.6761 0.8391 +vt 0.6546 0.8370 +vt 0.6761 0.8168 +vt 0.6546 0.8189 +vt 0.6717 0.7949 +vt 0.6511 0.8011 +vt 0.6632 0.7742 +vt 0.6442 0.7844 +vt 0.6652 0.2723 +vt 0.6964 0.2723 +vt 0.5295 0.9371 +vt 0.5358 0.9164 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.5235 0.7803 +vt 0.5150 0.7889 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4535 0.7949 +vt 0.4741 0.8011 +vt 0.6349 0.9161 +vt 0.6213 0.8994 +vt 0.6164 0.9285 +vt 0.6062 0.9095 +vt 0.5481 0.8008 +vt 0.5537 0.7985 +vt 0.5596 0.7973 +vt 0.5656 0.7973 +vt 0.5716 0.7985 +vt 0.5772 0.8008 +vt 0.5822 0.8041 +vt 0.5865 0.8084 +vt 0.5898 0.8134 +vt 0.5921 0.8190 +vt 0.5933 0.8249 +vt 0.5933 0.8310 +vt 0.5921 0.8369 +vt 0.5898 0.8425 +vt 0.5865 0.8475 +vt 0.5822 0.8518 +vt 0.5772 0.8551 +vt 0.5716 0.8575 +vt 0.5656 0.8586 +vt 0.5596 0.8586 +vt 0.5537 0.8575 +vt 0.5481 0.8551 +vt 0.5431 0.8518 +vt 0.5388 0.8475 +vt 0.5354 0.8425 +vt 0.5331 0.8369 +vt 0.5320 0.8310 +vt 0.5320 0.8249 +vt 0.5331 0.8190 +vt 0.5354 0.8134 +vt 0.5388 0.8084 +vt 0.5431 0.8041 +vt 0.5083 0.7989 +vt 0.5036 0.8101 +vt 0.5013 0.8219 +vt 0.5013 0.8340 +vt 0.5036 0.8459 +vt 0.5083 0.8570 +vt 0.5150 0.8671 +vt 0.5235 0.8756 +vt 0.5336 0.8823 +vt 0.5447 0.8870 +vt 0.5566 0.8893 +vt 0.5687 0.8893 +vt 0.5805 0.8870 +vt 0.5917 0.8823 +vt 0.6017 0.8756 +vt 0.6103 0.8671 +vt 0.6170 0.8570 +vt 0.6216 0.8459 +vt 0.6240 0.8340 +vt 0.6240 0.8219 +vt 0.6216 0.8101 +vt 0.6170 0.7989 +vt 0.6103 0.7889 +vt 0.6017 0.7803 +vt 0.5917 0.7736 +vt 0.5805 0.7690 +vt 0.5687 0.7666 +vt 0.5566 0.7666 +vt 0.5447 0.7690 +vt 0.5336 0.7736 +vt 0.2904 0.2721 +vt 0.2590 0.2720 +vt 1.0393 0.2725 +vt 1.0705 0.2725 +vt 0.9769 0.2725 +vt 1.0081 0.2725 +vt 0.2275 0.2720 +vt 0.1961 0.2720 +vt 1.1644 0.2725 +vt 1.1330 0.2725 +vt 1.1017 0.2725 +vt 0.3217 0.2721 +vt 0.3530 0.2721 +vt 0.9457 0.2725 +vt 0.7275 0.2723 +vt 0.8833 0.2724 +vt 0.9145 0.2724 +vt 0.8522 0.2724 +vt 0.8210 0.2724 +vt 0.4468 0.2721 +vt 0.4780 0.2722 +vt 0.7899 0.2724 +vt 0.7587 0.2723 +vt 1.1958 0.2725 +vt 0.6029 0.2722 +vt 0.6341 0.2723 +vt 0.5717 0.2722 +vt 0.5405 0.2722 +vt 0.5093 0.2722 +vt 0.4156 0.2721 +vt 0.3843 0.2721 +vt 0.4673 0.7498 +vt 0.4844 0.7327 +vt 0.5747 0.7053 +vt 0.5984 0.7100 +vt 0.6207 0.7192 +vt 0.6408 0.7327 +vt 0.6806 0.7922 +vt 0.6853 0.8159 +vt 0.6714 0.7699 +vt 0.6579 0.7498 +vt 0.5268 0.7100 +vt 0.5505 0.7053 +vt 0.5045 0.7192 +vt 0.4844 0.9233 +vt 0.4673 0.9062 +vt 0.4539 0.7699 +vt 0.4447 0.7922 +vt 0.4399 0.8159 +vt 0.4447 0.8638 +vt 0.4399 0.8400 +vt 0.4539 0.8861 +vt 0.5505 0.9507 +vt 0.5268 0.9459 +vt 0.5045 0.9367 +vt 0.6579 0.9062 +vt 0.6408 0.9233 +vt 0.5984 0.9459 +vt 0.5747 0.9507 +vt 0.6207 0.9367 +vt 0.6714 0.8861 +vt 0.6806 0.8638 +vt 0.6853 0.8400 +vn -1.0000 -0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn -0.6857 0.2113 0.6965 +vn 0.6857 0.2113 0.6965 +vn 0.6857 0.3431 0.6419 +vn -0.6857 0.3431 0.6419 +vn -0.6857 0.0713 0.7244 +vn 0.6857 0.0713 0.7244 +vn -0.6857 -0.0713 0.7244 +vn 0.6857 -0.0713 0.7244 +vn -0.6857 -0.2113 0.6965 +vn 0.6857 -0.2112 0.6966 +vn -0.6857 -0.3431 0.6419 +vn 0.6857 -0.3431 0.6419 +vn -0.6857 -0.4616 0.5628 +vn 0.6857 -0.4616 0.5628 +vn -0.6857 -0.5627 0.4617 +vn 0.6857 -0.5627 0.4617 +vn -0.6857 -0.6419 0.3431 +vn 0.6857 -0.6419 0.3431 +vn -0.6857 -0.6965 0.2113 +vn 0.6857 -0.6965 0.2113 +vn -0.6857 -0.7244 0.0713 +vn 0.6857 -0.7244 0.0713 +vn -0.6857 -0.7244 -0.0713 +vn 0.6857 -0.7244 -0.0713 +vn -0.6857 -0.6966 -0.2112 +vn 0.6857 -0.6965 -0.2114 +vn -0.6857 -0.6419 -0.3431 +vn 0.6857 -0.6419 -0.3431 +vn -0.6857 -0.5627 -0.4616 +vn 0.6857 -0.5626 -0.4618 +vn -0.6857 -0.4618 -0.5625 +vn 0.6857 -0.4617 -0.5626 +vn -0.6857 -0.3429 -0.6420 +vn 0.6857 -0.3431 -0.6419 +vn -0.6857 -0.2112 -0.6966 +vn 0.6857 -0.2113 -0.6965 +vn -0.6857 -0.0713 -0.7244 +vn 0.6857 -0.0713 -0.7244 +vn -0.6857 0.0713 -0.7244 +vn 0.6857 0.0713 -0.7244 +vn -0.6857 0.2113 -0.6965 +vn 0.6857 0.2113 -0.6965 +vn -0.6857 0.4617 -0.5626 +vn 0.6857 0.4617 -0.5626 +vn 0.6857 0.3431 -0.6419 +vn -0.6857 0.3431 -0.6419 +vn -0.6857 0.5626 -0.4617 +vn 0.6857 0.5626 -0.4617 +vn -0.6857 0.6419 -0.3431 +vn 0.6857 0.6419 -0.3431 +vn -0.6857 0.6965 -0.2113 +vn 0.6857 0.6966 -0.2112 +vn -0.6857 0.7244 -0.0713 +vn 0.6857 0.7244 -0.0713 +vn -0.6857 0.6966 0.2112 +vn 0.6857 0.6965 0.2113 +vn 0.6857 0.7244 0.0713 +vn -0.6857 0.7244 0.0713 +vn -0.6857 0.6419 0.3431 +vn 0.6857 0.6419 0.3431 +vn -0.6857 0.5626 0.4617 +vn 0.6857 0.5626 0.4618 +vn -0.2147 0.8614 -0.4604 +vn -0.1087 0.8767 -0.4686 +vn -0.1087 0.9513 -0.2886 +vn -0.2147 0.9346 -0.2835 +vn -0.2147 0.9720 -0.0957 +vn -0.1087 0.9893 -0.0974 +vn -0.2147 0.9720 0.0957 +vn -0.1087 0.9893 0.0974 +vn -0.2147 0.9346 0.2835 +vn -0.1087 0.9513 0.2886 +vn -0.2147 0.8614 0.4604 +vn -0.1087 0.8767 0.4686 +vn -0.2147 0.7550 0.6196 +vn -0.1087 0.7684 0.6306 +vn -0.1087 0.6306 0.7684 +vn -0.2147 0.6196 0.7550 +vn -0.2147 0.4604 0.8614 +vn -0.1087 0.4686 0.8767 +vn -0.2147 0.2835 0.9346 +vn -0.1087 0.2886 0.9513 +vn -0.2147 0.0957 0.9720 +vn -0.1087 0.0974 0.9893 +vn -0.1087 -0.0974 0.9893 +vn -0.2147 -0.0957 0.9720 +vn -0.1087 -0.2886 0.9513 +vn -0.2147 -0.2835 0.9346 +vn -0.2147 -0.4604 0.8614 +vn -0.1087 -0.4686 0.8767 +vn -0.1087 -0.6306 0.7684 +vn -0.2147 -0.6196 0.7550 +vn -0.1087 -0.7684 0.6306 +vn -0.2147 -0.7550 0.6196 +vn -0.2147 -0.8614 0.4604 +vn -0.1087 -0.8767 0.4686 +vn -0.1087 -0.9513 0.2886 +vn -0.2147 -0.9346 0.2835 +vn -0.2147 -0.9720 0.0957 +vn -0.1087 -0.9893 0.0974 +vn -0.1087 -0.9893 -0.0974 +vn -0.2147 -0.9720 -0.0957 +vn -0.2147 -0.9346 -0.2835 +vn -0.1087 -0.9513 -0.2886 +vn -0.1087 -0.8767 -0.4686 +vn -0.2147 -0.8614 -0.4604 +vn -0.1087 -0.7684 -0.6306 +vn -0.2147 -0.7550 -0.6196 +vn -0.1087 -0.6306 -0.7684 +vn -0.2147 -0.6196 -0.7550 +vn -0.1087 -0.4686 -0.8767 +vn -0.2147 -0.4604 -0.8614 +vn -0.1087 -0.2886 -0.9513 +vn -0.2147 -0.2835 -0.9346 +vn -0.1087 -0.0974 -0.9893 +vn -0.2147 -0.0957 -0.9720 +vn -0.2147 0.2835 -0.9346 +vn -0.2147 0.0957 -0.9720 +vn -0.1087 0.0974 -0.9893 +vn -0.1087 0.2886 -0.9513 +vn -0.2147 0.6196 -0.7550 +vn -0.2147 0.4604 -0.8614 +vn -0.1087 0.4686 -0.8767 +vn -0.1087 0.6306 -0.7684 +vn -0.2147 0.7550 -0.6196 +vn -0.1087 0.7684 -0.6306 +vn 0.6857 0.4617 0.5626 +vn -0.6857 0.4616 0.5628 +vn -0.6100 0.3032 0.7321 +vn 0.0000 0.3827 0.9239 +vn 0.0000 0.9914 0.1305 +vn -0.6100 0.7857 0.1033 +vn -0.6100 -0.4824 0.6287 +vn 0.0000 -0.6088 0.7934 +vn 0.0000 0.6087 -0.7934 +vn -0.6100 0.4824 -0.6287 +vn 0.0000 -0.3827 -0.9239 +vn -0.6100 -0.3033 -0.7321 +vn 0.0000 -0.9914 -0.1306 +vn -0.6100 -0.7856 -0.1034 +vn -0.6100 0.7321 0.3033 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.7934 -0.6087 +vn -0.6100 0.6287 -0.4823 +vn -0.6100 0.1034 0.7856 +vn 0.0000 0.1305 0.9914 +vn 0.0000 -0.1305 -0.9914 +vn -0.6100 -0.1036 -0.7856 +vn 0.0000 -0.9239 -0.3827 +vn -0.6100 -0.7321 -0.3032 +vn 0.0000 -0.7934 0.6087 +vn -0.6100 -0.6288 0.4823 +vn -0.6100 0.7321 -0.3032 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.1305 -0.9914 +vn -0.6100 0.1033 -0.7857 +vn -0.6100 0.6287 0.4824 +vn 0.0000 0.7934 0.6088 +vn 0.0000 -0.7934 -0.6087 +vn -0.6100 -0.6287 -0.4824 +vn 0.0000 -0.9239 0.3827 +vn -0.6100 -0.7321 0.3032 +vn 0.0000 -0.1305 0.9914 +vn -0.6100 -0.1034 0.7856 +vn -0.6100 0.3032 -0.7321 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.6087 -0.7934 +vn -0.6100 -0.4823 -0.6287 +vn -0.6100 0.7856 -0.1034 +vn 0.0000 0.9914 -0.1305 +vn 0.0000 -0.9914 0.1305 +vn -0.6100 -0.7856 0.1035 +vn 0.0000 -0.3827 0.9239 +vn -0.6100 -0.3032 0.7321 +vn 0.0000 0.6087 0.7934 +vn -0.6100 0.4824 0.6287 +vn -0.6100 -0.3034 -0.7320 +vn 0.0000 -0.9914 -0.1305 +vn 0.0000 -0.6087 0.7934 +vn -0.6100 0.7856 0.1034 +vn -0.6100 -0.7321 -0.3033 +vn 0.0000 -0.7934 0.6088 +vn -0.6100 -0.6287 0.4824 +vn -0.6100 -0.1034 -0.7856 +vn 0.0000 0.1306 0.9914 +vn -0.6100 0.7321 0.3032 +vn -0.6100 0.6288 -0.4823 +vn -0.6100 -0.1033 0.7857 +vn -0.6100 -0.6286 -0.4825 +vn 0.0000 0.7934 0.6087 +vn -0.6100 0.6286 0.4824 +vn -0.6100 0.7322 -0.3030 +vn -0.6100 0.1034 -0.7856 +vn -0.6100 0.4823 0.6287 +vn -0.6100 -0.4825 -0.6286 +vn -0.5918 -0.6231 0.5114 +vn -0.5918 -0.5114 0.6231 +vn -0.8544 -0.3296 0.4016 +vn -0.8544 -0.4016 0.3296 +vn -0.5918 0.6231 -0.5114 +vn -0.5918 0.5114 -0.6231 +vn -0.8544 0.3296 -0.4016 +vn -0.8544 0.4016 -0.3296 +vn -0.5918 0.8022 0.0790 +vn -0.5918 0.8022 -0.0790 +vn -0.8544 0.5170 -0.0509 +vn -0.8544 0.5170 0.0509 +vn -0.5918 0.3800 0.7109 +vn -0.5918 0.5114 0.6231 +vn -0.8544 0.3296 0.4016 +vn -0.8544 0.2449 0.4582 +vn -0.5918 -0.8022 0.0790 +vn -0.5918 -0.7714 0.2340 +vn -0.8544 -0.4972 0.1508 +vn -0.8544 -0.5170 0.0509 +vn -0.5918 0.0790 -0.8022 +vn -0.5918 -0.0790 -0.8022 +vn -0.8544 -0.0509 -0.5170 +vn -0.8544 0.0509 -0.5170 +vn -0.5918 0.3800 -0.7109 +vn -0.5918 0.2340 -0.7714 +vn -0.8544 0.1508 -0.4972 +vn -0.8544 0.2449 -0.4582 +vn -0.5918 -0.5114 -0.6231 +vn -0.5918 -0.6231 -0.5114 +vn -0.8544 -0.4016 -0.3296 +vn -0.8544 -0.3296 -0.4016 +vn -0.5918 0.7714 0.2340 +vn -0.8544 0.4972 0.1508 +vn -0.5918 -0.7109 -0.3800 +vn -0.8544 -0.4582 -0.2449 +vn -0.5918 -0.7714 -0.2340 +vn -0.5918 -0.8022 -0.0790 +vn -0.8544 -0.5170 -0.0509 +vn -0.8544 -0.4972 -0.1508 +vn -0.5918 0.7109 -0.3800 +vn -0.8545 0.4582 -0.2449 +vn -0.5918 -0.7109 0.3800 +vn -0.8544 -0.4582 0.2449 +vn -0.5918 -0.3800 -0.7109 +vn -0.8544 -0.2449 -0.4582 +vn -0.5918 0.2340 0.7714 +vn -0.8544 0.1508 0.4972 +vn -0.5918 0.0790 0.8022 +vn -0.8544 0.0509 0.5170 +vn -0.5918 -0.0790 0.8022 +vn -0.8544 -0.0509 0.5170 +vn -0.5918 -0.2340 0.7714 +vn -0.8544 -0.1508 0.4972 +vn -0.5918 -0.3800 0.7109 +vn -0.8544 -0.2449 0.4582 +vn -0.2096 0.9357 -0.2838 +vn -0.2096 0.9731 -0.0958 +vn -0.5918 0.7714 -0.2340 +vn -0.8544 0.4972 -0.1508 +vn -0.6100 0.5603 0.5603 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.9659 -0.2588 +vn -0.6100 0.7654 -0.2051 +vn -0.6100 -0.2051 0.7654 +vn 0.0000 -0.2588 0.9659 +vn 0.0000 0.2588 -0.9659 +vn -0.6100 0.2052 -0.7654 +vn -0.0000 -0.7071 -0.7071 +vn -0.6100 -0.5603 -0.5603 +vn -0.0000 -0.9659 0.2588 +vn -0.6100 -0.7654 0.2050 +vn -0.6100 0.7924 -0.0001 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 0.5000 -0.8660 +vn -0.6100 0.3960 -0.6863 +vn -0.6100 0.3961 0.6863 +vn 0.0000 0.5000 0.8660 +vn 0.0000 -0.5000 -0.8660 +vn -0.6100 -0.3962 -0.6862 +vn 0.0000 -1.0000 0.0000 +vn -0.6100 -0.7924 0.0001 +vn 0.0000 -0.5000 0.8660 +vn -0.6100 -0.3962 0.6862 +vn -0.6100 0.5603 -0.5603 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.2588 -0.9659 +vn -0.6100 -0.2050 -0.7654 +vn -0.6100 0.7654 0.2050 +vn 0.0000 0.9659 0.2588 +vn 0.0000 -0.9659 -0.2588 +vn -0.6100 -0.7654 -0.2051 +vn 0.0000 -0.7071 0.7071 +vn -0.6100 -0.5604 0.5602 +vn 0.0000 0.2588 0.9659 +vn -0.6100 0.2051 0.7654 +vn -0.6100 -0.0001 -0.7924 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.8660 -0.5000 +vn -0.6100 -0.6862 -0.3963 +vn -0.6100 0.6862 -0.3963 +vn 0.0000 0.8660 -0.5000 +vn -0.0000 -0.8660 0.5000 +vn -0.6100 -0.6863 0.3961 +vn -0.0000 -0.0000 1.0000 +vn -0.6100 -0.0002 0.7924 +vn -0.0000 0.8660 0.5000 +vn -0.6100 0.6862 0.3962 +vn -0.6100 -0.7654 0.2051 +vn -0.6100 0.2051 -0.7654 +vn -0.6100 -0.2052 0.7654 +vn -0.6100 0.7654 -0.2052 +vn -0.6100 -0.3960 0.6863 +vn -0.6100 -0.3961 -0.6863 +vn -0.6100 0.3962 0.6862 +vn -0.6100 0.3962 -0.6862 +vn -0.6100 -0.5603 0.5603 +vn -0.6100 -0.7654 -0.2050 +vn -0.6100 0.7654 0.2051 +vn -0.6100 -0.2051 -0.7654 +vn -0.9542 -0.2313 -0.1898 +vn -0.9542 -0.1898 -0.2313 +vn -0.6100 0.0000 0.7924 +vn -0.6100 0.6862 0.3963 +vn -0.6100 -0.6861 0.3963 +vn -0.6100 0.6863 -0.3961 +vn -0.6100 0.0001 -0.7924 +vn -0.6100 -0.6862 -0.3962 +vn -0.5918 -0.2340 -0.7714 +vn -0.8544 -0.1508 -0.4972 +vn -0.5918 0.6231 0.5114 +vn -0.8544 0.4016 0.3296 +vn -0.5918 0.7109 0.3800 +vn -0.8544 0.4582 0.2449 +vn -0.9916 -0.1139 -0.0609 +vn -0.9916 -0.1235 -0.0375 +vn -0.9916 -0.1285 -0.0127 +vn -0.9916 -0.1285 0.0127 +vn -0.9916 -0.1235 0.0375 +vn -0.9916 -0.1138 0.0608 +vn -0.9916 -0.0998 0.0819 +vn -0.9916 -0.0819 0.0998 +vn -0.9916 -0.0609 0.1138 +vn -0.9916 -0.0375 0.1235 +vn -0.9916 -0.0126 0.1285 +vn -0.9916 0.0127 0.1285 +vn -0.9916 0.0375 0.1235 +vn -0.9916 0.0609 0.1139 +vn -0.9916 0.0819 0.0998 +vn -0.9916 0.0998 0.0819 +vn -0.9916 0.1139 0.0608 +vn -0.9916 0.1235 0.0375 +vn -0.9916 0.1285 0.0127 +vn -0.9916 0.1285 -0.0127 +vn -0.9916 0.1235 -0.0375 +vn -0.9916 0.1139 -0.0608 +vn -0.9916 0.0998 -0.0819 +vn -0.9916 0.0819 -0.0998 +vn -0.9916 0.0609 -0.1138 +vn -0.9916 0.0375 -0.1235 +vn -0.9916 0.0127 -0.1285 +vn -0.9916 -0.0127 -0.1285 +vn -0.9916 -0.0375 -0.1235 +vn -0.9916 -0.0608 -0.1138 +vn -0.9916 -0.0819 -0.0998 +vn -0.9916 -0.0998 -0.0819 +vn -0.9542 -0.1411 -0.2639 +vn -0.9542 -0.0869 -0.2863 +vn -0.9542 -0.0293 -0.2978 +vn -0.9542 0.0293 -0.2978 +vn -0.9542 0.0869 -0.2863 +vn -0.9542 0.1411 -0.2639 +vn -0.9542 0.1898 -0.2313 +vn -0.9542 0.2313 -0.1898 +vn -0.9542 0.2639 -0.1411 +vn -0.9542 0.2863 -0.0869 +vn -0.9542 0.2978 -0.0293 +vn -0.9542 0.2978 0.0293 +vn -0.9542 0.2863 0.0869 +vn -0.9542 0.2639 0.1411 +vn -0.9542 0.2313 0.1898 +vn -0.9542 0.1898 0.2313 +vn -0.9542 0.1411 0.2639 +vn -0.9542 0.0869 0.2863 +vn -0.9542 0.0293 0.2978 +vn -0.9542 -0.0293 0.2978 +vn -0.9542 -0.0869 0.2863 +vn -0.9542 -0.1411 0.2639 +vn -0.9542 -0.1898 0.2313 +vn -0.9542 -0.2313 0.1898 +vn -0.9542 -0.2639 0.1410 +vn -0.9542 -0.2863 0.0869 +vn -0.9542 -0.2978 0.0293 +vn -0.9542 -0.2978 -0.0293 +vn -0.9542 -0.2863 -0.0869 +vn -0.9542 -0.2639 -0.1411 +vn -0.2096 -0.8623 -0.4609 +vn -0.2096 -0.9357 -0.2838 +vn -0.2096 -0.4609 0.8623 +vn -0.2096 -0.6203 0.7558 +vn -0.2096 -0.0958 0.9731 +vn -0.2096 -0.2838 0.9357 +vn -0.2096 -0.9731 -0.0958 +vn -0.2096 -0.9731 0.0958 +vn -0.2096 -0.9357 0.2838 +vn -0.2096 -0.8623 0.4609 +vn -0.2096 -0.7558 0.6203 +vn -0.2096 -0.7558 -0.6203 +vn -0.2096 -0.6203 -0.7558 +vn -0.2096 0.0958 0.9731 +vn -0.2096 0.9731 0.0958 +vn -0.2096 0.4609 0.8623 +vn -0.2096 0.2838 0.9357 +vn -0.2096 0.6203 0.7558 +vn -0.2096 0.7558 0.6203 +vn -0.2096 -0.0958 -0.9731 +vn -0.2096 0.0958 -0.9731 +vn -0.2096 0.8623 0.4609 +vn -0.2096 0.9357 0.2838 +vn -0.2096 0.7558 -0.6203 +vn -0.2096 0.8623 -0.4609 +vn -0.2096 0.6203 -0.7558 +vn -0.2096 0.4609 -0.8623 +vn -0.2096 0.2838 -0.9357 +vn -0.2096 -0.2838 -0.9357 +vn -0.2096 -0.4609 -0.8623 +g Pipe_Cylinder.002_None.002_Pipe_Cylinder.002_None.002_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 +f 7/7/1 8/8/1 9/9/1 10/10/1 11/11/1 12/12/1 +f 13/13/1 14/14/1 15/15/1 16/16/1 17/17/1 18/18/1 +f 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 +f 25/25/1 26/26/1 27/27/1 28/28/1 29/29/1 30/30/1 +f 31/31/1 32/32/1 33/33/1 34/34/1 35/35/1 36/36/1 +f 37/37/1 38/38/1 39/39/1 40/40/1 41/41/1 42/42/1 +f 43/43/1 44/44/1 45/45/1 46/46/1 47/47/1 48/48/1 +f 49/49/1 50/50/1 51/51/1 52/52/1 53/53/1 54/54/1 55/55/1 56/56/1 57/57/1 58/58/1 59/59/1 60/60/1 61/61/1 62/62/1 63/63/1 64/64/1 65/65/1 66/66/1 67/67/1 68/68/1 69/69/1 70/70/1 71/71/1 72/72/1 73/73/1 74/74/1 75/75/1 76/76/1 77/77/1 78/78/1 79/79/1 80/80/1 +f 81/81/2 82/82/2 83/83/2 84/84/2 85/85/2 86/86/2 87/87/2 88/88/2 89/89/2 90/90/2 91/91/2 92/92/2 93/93/2 94/94/2 95/95/2 96/96/2 97/97/2 98/98/2 99/99/2 100/100/2 101/101/2 102/102/2 103/103/2 104/104/2 105/105/2 106/106/2 107/107/2 108/108/2 109/109/2 110/110/2 111/111/2 112/112/2 +f 113/113/1 114/114/1 115/115/1 116/116/1 117/117/1 118/118/1 +f 119/119/1 120/120/1 121/121/1 122/122/1 123/123/1 124/124/1 +f 125/125/1 126/126/1 127/127/1 128/128/1 129/129/1 130/130/1 +f 131/131/1 132/132/1 133/133/1 134/134/1 135/135/1 136/136/1 +f 137/137/1 138/138/1 139/139/1 140/140/1 141/141/1 142/142/1 +f 143/143/1 144/144/1 145/145/1 146/146/1 147/147/1 148/148/1 +f 149/149/1 150/150/1 151/151/1 152/152/1 153/153/1 154/154/1 +f 155/155/1 156/156/1 157/157/1 158/158/1 159/159/1 160/160/1 +s 1 +f 79/161/3 102/162/4 101/163/5 80/164/6 +f 78/165/7 103/166/8 102/162/4 79/161/3 +f 77/167/9 104/168/10 103/166/8 78/165/7 +f 76/169/11 105/170/12 104/168/10 77/167/9 +f 75/171/13 106/172/14 105/170/12 76/169/11 +f 74/173/15 107/174/16 106/172/14 75/171/13 +f 73/175/17 108/176/18 107/174/16 74/173/15 +f 72/177/19 109/178/20 108/176/18 73/175/17 +f 71/179/21 110/180/22 109/178/20 72/177/19 +f 70/181/23 111/182/24 110/180/22 71/179/21 +f 69/183/25 112/184/26 111/182/24 70/181/23 +f 68/185/27 81/186/28 112/184/26 69/183/25 +f 67/187/29 82/188/30 81/186/28 68/185/27 +f 66/189/31 83/190/32 82/191/30 67/187/29 +f 65/192/33 84/193/34 83/190/32 66/189/31 +f 64/194/35 85/195/36 84/193/34 65/192/33 +f 63/196/37 86/197/38 85/198/36 64/199/35 +f 62/200/39 87/201/40 86/197/38 63/196/37 +f 61/202/41 88/203/42 87/201/40 62/200/39 +f 60/204/43 89/205/44 88/203/42 61/202/41 +f 58/206/45 91/207/46 90/208/47 59/209/48 +f 59/209/48 90/208/47 89/205/44 60/204/43 +f 57/210/49 92/211/50 91/207/46 58/206/45 +f 56/212/51 93/213/52 92/211/50 57/210/49 +f 55/214/53 94/215/54 93/213/52 56/212/51 +f 54/216/55 95/217/56 94/215/54 55/214/53 +f 52/218/57 97/219/58 96/220/59 53/221/60 +f 53/221/60 96/220/59 95/217/56 54/216/55 +f 51/222/61 98/223/62 97/219/58 52/218/57 +f 50/224/63 99/225/64 98/223/62 51/222/61 +f 161/226/65 162/227/66 163/228/67 164/229/68 +f 165/230/69 164/229/68 163/228/67 166/231/70 +f 167/232/71 165/230/69 166/231/70 168/233/72 +f 169/234/73 167/232/71 168/233/72 170/235/74 +f 171/236/75 169/234/73 170/235/74 172/237/76 +f 173/238/77 171/236/75 172/237/76 174/239/78 +f 173/238/77 174/239/78 175/240/79 176/241/80 +f 177/242/81 176/241/80 175/240/79 178/243/82 +f 179/244/83 177/242/81 178/243/82 180/245/84 +f 181/246/85 179/244/83 180/245/84 182/247/86 +f 181/246/85 182/247/86 183/248/87 184/249/88 +f 184/249/88 183/248/87 185/250/89 186/251/90 +f 187/252/91 188/253/92 189/254/93 190/255/94 +f 186/251/90 185/250/89 188/253/92 187/252/91 +f 190/255/94 189/254/93 191/256/95 192/257/96 +f 193/258/97 192/257/96 191/256/95 194/259/98 +f 193/258/97 194/259/98 195/260/99 196/261/100 +f 197/262/101 196/261/100 195/260/99 198/263/102 +f 197/264/101 198/265/102 199/266/103 200/267/104 +f 201/268/105 200/267/104 199/266/103 202/269/106 +f 201/268/105 202/269/106 203/270/107 204/271/108 +f 204/271/108 203/270/107 205/272/109 206/273/110 +f 206/273/110 205/272/109 207/274/111 208/275/112 +f 208/275/112 207/274/111 209/276/113 210/277/114 +f 210/277/114 209/276/113 211/278/115 212/279/116 +f 212/279/116 211/278/115 213/280/117 214/281/118 +f 215/282/119 216/283/120 217/284/121 218/285/122 +f 216/283/120 214/281/118 213/280/117 217/284/121 +f 219/286/123 220/287/124 221/288/125 222/289/126 +f 215/282/119 218/285/122 221/288/125 220/287/124 +f 223/290/127 219/286/123 222/289/126 224/291/128 +f 223/290/127 224/291/128 162/227/66 161/226/65 +f 80/164/6 101/163/5 100/292/129 49/293/130 +f 1/294/131 225/295/132 226/296/133 2/297/134 +f 6/298/135 227/299/136 225/295/132 1/294/131 +f 2/297/134 226/296/133 228/300/137 3/301/138 +f 3/301/138 228/300/137 229/302/139 4/303/140 +f 4/304/140 229/305/139 230/306/141 5/307/142 +f 5/307/142 230/306/141 227/299/136 6/298/135 +f 7/308/143 231/309/144 232/310/145 8/311/146 +f 12/312/147 233/313/148 231/309/144 7/308/143 +f 8/311/146 232/310/145 234/314/149 9/315/150 +f 9/315/150 234/314/149 235/316/151 10/317/152 +f 10/318/152 235/319/151 236/320/153 11/321/154 +f 11/321/154 236/320/153 233/313/148 12/312/147 +f 13/322/155 237/323/156 238/324/157 14/325/158 +f 18/326/159 239/327/160 237/323/156 13/322/155 +f 14/325/158 238/324/157 240/328/161 15/329/162 +f 15/329/162 240/328/161 241/330/163 16/331/164 +f 16/332/164 241/333/163 242/334/165 17/335/166 +f 17/335/166 242/334/165 239/327/160 18/326/159 +f 19/336/167 243/337/168 244/338/169 20/339/170 +f 24/340/171 245/341/172 243/337/168 19/336/167 +f 20/339/170 244/338/169 246/342/173 21/343/174 +f 21/343/174 246/342/173 247/344/175 22/345/176 +f 22/346/176 247/347/175 248/348/177 23/349/178 +f 23/349/178 248/348/177 245/341/172 24/340/171 +f 25/350/179 249/351/139 250/352/180 26/353/142 +f 30/354/138 251/355/137 249/351/139 25/350/179 +f 26/353/142 250/352/180 252/356/181 27/357/135 +f 27/357/135 252/356/181 253/358/132 28/359/131 +f 28/360/131 253/361/132 254/362/133 29/363/182 +f 29/363/182 254/362/133 251/355/137 30/354/138 +f 31/364/183 255/365/151 256/366/184 32/367/185 +f 36/368/186 257/369/149 255/365/151 31/364/183 +f 32/367/185 256/366/184 258/370/187 33/371/147 +f 33/371/147 258/370/187 259/372/144 34/373/188 +f 34/374/188 259/375/144 260/376/145 35/377/189 +f 35/377/189 260/376/145 257/369/149 36/368/186 +f 37/378/164 261/379/163 262/380/165 38/381/190 +f 42/382/191 263/383/161 261/379/163 37/378/164 +f 38/381/190 262/380/165 264/384/192 39/385/193 +f 39/385/193 264/384/192 265/386/156 40/387/194 +f 40/388/194 265/389/156 266/390/157 41/391/195 +f 41/391/195 266/390/157 263/383/161 42/382/191 +f 43/392/176 267/393/175 268/394/177 44/395/196 +f 48/396/174 269/397/173 267/393/175 43/392/176 +f 44/395/196 268/394/177 270/398/172 45/399/171 +f 45/399/171 270/398/172 271/400/168 46/401/167 +f 46/402/167 271/403/168 272/404/169 47/405/197 +f 47/405/197 272/404/169 269/397/173 48/396/174 +f 273/406/198 274/407/199 275/408/200 276/409/201 +f 277/410/202 278/411/203 279/412/204 280/413/205 +f 281/414/206 282/415/207 283/416/208 284/417/209 +f 285/418/210 286/419/211 287/420/212 288/421/213 +f 289/422/214 290/423/215 291/424/216 292/425/217 +f 293/426/218 294/427/219 295/428/220 296/429/221 +f 297/430/222 298/431/223 299/432/224 300/433/225 +f 301/434/226 302/435/227 303/436/228 304/437/229 +f 305/438/230 281/414/206 284/417/209 306/439/231 +f 302/435/227 307/440/232 308/441/233 303/436/228 +f 309/442/234 310/443/235 311/444/236 312/445/237 +f 307/440/232 309/442/234 312/445/237 308/441/233 +f 298/431/223 293/426/218 296/429/221 299/432/224 +f 313/446/238 277/410/202 280/413/205 314/447/239 +f 290/423/215 315/448/240 316/449/241 291/424/216 +f 310/443/235 289/422/214 292/425/217 311/444/236 +f 49/293/130 100/292/129 99/225/64 50/224/63 +f 317/450/242 301/434/226 304/437/229 318/451/243 +f 319/452/244 285/418/210 288/421/213 320/453/245 +f 321/454/246 319/452/244 320/453/245 322/455/247 +f 323/456/248 321/454/246 322/455/247 324/457/249 +f 325/458/250 323/456/248 324/457/249 326/459/251 +f 327/460/252 325/458/250 326/459/251 328/461/253 +f 315/448/240 273/406/198 276/409/201 316/449/241 +f 274/407/199 327/460/252 328/461/253 275/408/200 +f 278/411/203 297/430/222 300/433/225 279/412/204 +f 329/462/254 330/463/255 166/231/70 163/228/67 +f 331/464/256 313/446/238 314/447/239 332/465/257 +f 113/466/258 333/467/259 334/468/260 114/469/261 +f 118/470/262 335/471/263 333/467/259 113/466/258 +f 114/469/261 334/468/260 336/472/264 115/473/265 +f 115/473/265 336/472/264 337/474/266 116/475/267 +f 116/476/267 337/477/266 338/478/268 117/479/269 +f 117/479/269 338/478/268 335/471/263 118/470/262 +f 119/480/270 339/481/271 340/482/272 120/483/273 +f 124/484/274 341/485/275 339/481/271 119/480/270 +f 120/483/273 340/482/272 342/486/276 121/487/277 +f 121/487/277 342/486/276 343/488/278 122/489/279 +f 122/490/279 343/491/278 344/492/280 123/493/281 +f 123/493/281 344/492/280 341/485/275 124/484/274 +f 125/494/282 345/495/283 346/496/284 126/497/285 +f 130/498/286 347/499/287 345/495/283 125/494/282 +f 126/497/285 346/496/284 348/500/288 127/501/289 +f 127/501/289 348/500/288 349/502/290 128/503/291 +f 128/504/291 349/505/290 350/506/292 129/507/293 +f 129/507/293 350/506/292 347/499/287 130/498/286 +f 131/508/294 351/509/295 352/510/296 132/511/297 +f 136/512/298 353/513/299 351/509/295 131/508/294 +f 132/511/297 352/510/296 354/514/300 133/515/301 +f 133/515/301 354/514/300 355/516/302 134/517/303 +f 134/518/303 355/519/302 356/520/304 135/521/305 +f 135/521/305 356/520/304 353/513/299 136/512/298 +f 137/522/267 357/523/266 358/524/268 138/525/306 +f 142/526/307 359/527/264 357/523/266 137/522/267 +f 138/525/306 358/524/268 360/528/263 139/529/308 +f 139/529/308 360/528/263 361/530/259 140/531/258 +f 140/532/258 361/533/259 362/534/260 141/535/309 +f 141/535/309 362/534/260 359/527/264 142/526/307 +f 143/536/279 363/537/278 364/538/280 144/539/310 +f 148/540/311 365/541/276 363/537/278 143/536/279 +f 144/539/310 364/538/280 366/542/275 145/543/312 +f 145/543/312 366/542/275 367/544/271 146/545/270 +f 146/546/270 367/547/271 368/548/272 147/549/313 +f 147/549/313 368/548/272 365/541/276 148/540/311 +f 149/550/314 369/551/290 370/552/292 150/553/293 +f 154/554/315 371/555/288 369/551/290 149/550/314 +f 150/553/293 370/552/292 372/556/287 151/557/316 +f 151/557/316 372/556/287 373/558/283 152/559/282 +f 152/560/282 373/561/283 374/562/284 153/563/317 +f 153/563/317 374/562/284 371/555/288 154/554/315 +f 304/437/229 303/436/228 375/564/318 376/565/319 +f 155/566/320 377/567/302 378/568/304 156/569/321 +f 160/570/322 379/571/300 377/567/302 155/566/320 +f 156/569/321 378/568/304 380/572/299 157/573/323 +f 157/573/323 380/572/299 381/574/295 158/575/324 +f 158/576/324 381/577/295 382/578/296 159/579/325 +f 159/579/325 382/578/296 379/571/300 160/570/322 +f 383/580/326 317/450/242 318/451/243 384/581/327 +f 286/419/211 385/582/328 386/583/329 287/420/212 +f 385/582/328 387/584/330 388/585/331 386/583/329 +f 387/584/330 305/438/230 306/439/231 388/585/331 +f 294/427/219 383/580/326 384/581/327 295/428/220 +f 389/586/332 390/587/333 391/588/334 392/589/335 393/590/336 394/591/337 395/592/338 396/593/339 397/594/340 398/595/341 399/596/342 400/597/343 401/598/344 402/599/345 403/600/346 404/601/347 405/602/348 406/603/349 407/604/350 408/605/351 409/606/352 410/607/353 411/608/354 412/609/355 413/610/356 414/611/357 415/612/358 416/613/359 417/614/360 418/615/361 419/616/362 420/617/363 +f 318/451/243 304/437/229 376/565/319 421/618/364 +f 384/581/327 318/451/243 421/618/364 422/619/365 +f 295/428/220 384/581/327 422/619/365 423/620/366 +f 296/429/221 295/428/220 423/620/366 424/621/367 +f 299/432/224 296/429/221 424/621/367 425/622/368 +f 300/433/225 299/432/224 425/622/368 426/623/369 +f 279/412/204 300/433/225 426/623/369 427/624/370 +f 280/413/205 279/412/204 427/624/370 428/625/371 +f 314/447/239 280/413/205 428/625/371 429/626/372 +f 332/465/257 314/447/239 429/626/372 430/627/373 +f 283/416/208 332/465/257 430/627/373 431/628/374 +f 284/417/209 283/416/208 431/628/374 432/629/375 +f 306/439/231 284/417/209 432/629/375 433/630/376 +f 388/585/331 306/439/231 433/630/376 434/631/377 +f 386/583/329 388/585/331 434/631/377 435/632/378 +f 287/420/212 386/583/329 435/632/378 436/633/379 +f 288/421/213 287/420/212 436/633/379 437/634/380 +f 320/453/245 288/421/213 437/634/380 438/635/381 +f 322/455/247 320/453/245 438/635/381 439/636/382 +f 324/457/249 322/455/247 439/636/382 440/637/383 +f 326/459/251 324/457/249 440/637/383 441/638/384 +f 328/461/253 326/459/251 441/638/384 442/639/385 +f 275/408/200 328/461/253 442/639/385 443/640/386 +f 276/409/201 275/408/200 443/640/386 444/641/387 +f 316/449/241 276/409/201 444/641/387 445/642/388 +f 291/424/216 316/449/241 445/642/388 446/643/389 +f 292/425/217 291/424/216 446/643/389 447/644/390 +f 311/444/236 292/425/217 447/644/390 448/645/391 +f 312/445/237 311/444/236 448/645/391 449/646/392 +f 308/441/233 312/445/237 449/646/392 450/647/393 +f 303/436/228 308/441/233 450/647/393 375/564/318 +f 451/648/394 203/270/107 202/269/106 452/649/395 +f 188/253/92 453/650/396 454/651/397 189/254/93 +f 183/248/87 455/652/398 456/653/399 185/250/89 +f 452/649/395 202/269/106 199/266/103 457/654/400 +f 457/654/400 199/266/103 198/265/102 458/655/401 +f 459/656/402 195/260/99 194/259/98 460/657/403 +f 185/250/89 456/653/399 453/650/396 188/253/92 +f 461/658/404 191/256/95 189/254/93 454/651/397 +f 460/657/403 194/259/98 191/256/95 461/658/404 +f 462/659/405 205/272/109 203/270/107 451/648/394 +f 462/659/405 463/660/406 207/274/111 205/272/109 +f 182/247/86 464/661/407 455/652/398 183/248/87 +f 465/662/408 168/233/72 166/231/70 330/463/255 +f 466/663/409 467/664/410 180/245/84 178/243/82 +f 468/665/411 466/663/409 178/243/82 175/240/79 +f 469/666/412 468/665/411 175/240/79 174/239/78 +f 217/284/121 213/280/117 470/667/413 471/668/414 +f 472/669/415 172/237/76 170/235/74 473/670/416 +f 458/671/401 198/263/102 195/260/99 459/656/402 +f 474/672/417 475/673/418 162/227/66 224/291/128 +f 282/415/207 331/464/256 332/465/257 283/416/208 +f 473/670/416 170/235/74 168/233/72 465/662/408 +f 329/462/254 163/228/67 162/227/66 475/673/418 +f 474/672/417 224/291/128 222/289/126 476/674/419 +f 221/288/125 477/675/420 476/674/419 222/289/126 +f 221/288/125 218/285/122 478/676/421 477/675/420 +f 472/669/415 469/666/412 174/239/78 172/237/76 +f 218/285/122 217/284/121 471/668/414 478/676/421 +f 470/667/413 213/280/117 211/278/115 479/677/422 +f 479/677/422 211/278/115 209/276/113 480/678/423 +f 376/565/319 375/564/318 420/617/363 419/616/362 +f 421/618/364 376/565/319 419/616/362 418/615/361 +f 422/619/365 421/618/364 418/615/361 417/614/360 +f 423/620/366 422/619/365 417/614/360 416/613/359 +f 424/621/367 423/620/366 416/613/359 415/612/358 +f 425/622/368 424/621/367 415/612/358 414/611/357 +f 426/623/369 425/622/368 414/611/357 413/610/356 +f 427/624/370 426/623/369 413/610/356 412/609/355 +f 428/625/371 427/624/370 412/609/355 411/608/354 +f 429/626/372 428/625/371 411/608/354 410/607/353 +f 430/627/373 429/626/372 410/607/353 409/606/352 +f 431/628/374 430/627/373 409/606/352 408/605/351 +f 432/629/375 431/628/374 408/605/351 407/604/350 +f 433/630/376 432/629/375 407/604/350 406/603/349 +f 434/631/377 433/630/376 406/603/349 405/602/348 +f 435/632/378 434/631/377 405/602/348 404/601/347 +f 436/633/379 435/632/378 404/601/347 403/600/346 +f 437/634/380 436/633/379 403/600/346 402/599/345 +f 438/635/381 437/634/380 402/599/345 401/598/344 +f 439/636/382 438/635/381 401/598/344 400/597/343 +f 440/637/383 439/636/382 400/597/343 399/596/342 +f 441/638/384 440/637/383 399/596/342 398/595/341 +f 442/639/385 441/638/384 398/595/341 397/594/340 +f 443/640/386 442/639/385 397/594/340 396/593/339 +f 444/641/387 443/640/386 396/593/339 395/592/338 +f 445/642/388 444/641/387 395/592/338 394/591/337 +f 446/643/389 445/642/388 394/591/337 393/590/336 +f 447/644/390 446/643/389 393/590/336 392/589/335 +f 448/645/391 447/644/390 392/589/335 391/588/334 +f 449/646/392 448/645/391 391/588/334 390/587/333 +f 450/647/393 449/646/392 390/587/333 389/586/332 +f 375/564/318 450/647/393 389/586/332 420/617/363 +f 480/678/423 209/276/113 207/274/111 463/660/406 +f 302/435/227 301/434/226 463/679/406 462/680/405 +f 290/423/215 289/422/214 458/681/401 459/682/402 +f 459/682/402 460/683/403 315/448/240 290/423/215 +f 460/683/403 461/684/404 273/406/198 315/448/240 +f 323/456/248 325/458/250 456/685/399 455/686/398 +f 325/458/250 327/460/252 453/687/396 456/685/399 +f 327/460/252 274/407/199 454/688/397 453/687/396 +f 310/443/235 309/442/234 452/689/395 457/690/400 +f 451/691/394 452/689/395 309/442/234 307/440/232 +f 462/680/405 451/691/394 307/440/232 302/435/227 +f 474/692/417 476/693/419 278/411/203 277/410/202 +f 301/434/226 317/450/242 480/694/423 463/679/406 +f 317/450/242 383/580/326 479/695/422 480/694/423 +f 383/580/326 294/427/219 470/696/413 479/695/422 +f 478/697/421 471/698/414 293/426/218 298/431/223 +f 477/699/420 478/697/421 298/431/223 297/430/222 +f 297/430/222 278/411/203 476/693/419 477/699/420 +f 330/700/255 329/701/254 331/464/256 282/415/207 +f 329/701/254 475/702/418 313/446/238 331/464/256 +f 277/410/202 313/446/238 475/702/418 474/692/417 +f 385/582/328 286/419/211 468/703/411 469/704/412 +f 281/414/206 305/438/230 473/705/416 465/706/408 +f 305/438/230 387/584/330 472/707/415 473/705/416 +f 387/584/330 385/582/328 469/704/412 472/707/415 +f 461/684/404 454/688/397 274/407/199 273/406/198 +f 466/708/409 468/703/411 286/419/211 285/418/210 +f 467/709/410 466/708/409 285/418/210 319/452/244 +f 464/710/407 467/709/410 319/452/244 321/454/246 +f 457/690/400 458/681/401 289/422/214 310/443/235 +f 282/415/207 281/414/206 465/706/408 330/700/255 +f 321/454/246 323/456/248 455/686/398 464/710/407 +f 471/698/414 470/696/413 294/427/219 293/426/218 +f 467/664/410 464/661/407 182/247/86 180/245/84 diff --git a/mods/pipeworks/models/pipeworks_pipe_2_lowpoly.obj b/mods/pipeworks/models/pipeworks_pipe_2_lowpoly.obj new file mode 100755 index 0000000..06d0b25 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_2_lowpoly.obj @@ -0,0 +1,192 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend' +# www.blender.org +o Cylinder.002_Cylinder.006_None +v 0.500000 -0.156250 -0.064721 +v 0.500000 -0.064721 -0.156250 +v 0.500000 0.064721 -0.156250 +v 0.500000 0.156250 -0.064721 +v 0.500000 0.156250 0.064721 +v 0.500000 0.064721 0.156250 +v 0.500000 -0.064721 0.156250 +v 0.500000 -0.156250 0.064721 +v 0.468750 -0.064721 -0.156250 +v 0.468750 -0.156250 -0.064721 +v 0.468750 -0.156250 0.064721 +v 0.468750 -0.064721 0.156250 +v 0.468750 0.064721 0.156250 +v 0.468750 0.156250 0.064721 +v 0.468750 0.156250 -0.064721 +v 0.468750 0.064721 -0.156250 +v 0.468750 -0.125000 -0.051777 +v 0.468750 -0.051777 -0.125000 +v 0.468750 0.051777 -0.125000 +v 0.468750 0.125000 -0.051777 +v 0.468750 0.125000 0.051777 +v 0.468750 0.051777 0.125000 +v 0.468750 -0.051777 0.125000 +v 0.468750 -0.125000 0.051777 +v 0.000000 0.051777 -0.125000 +v 0.000000 0.125000 -0.051777 +v 0.000000 0.051777 0.125000 +v 0.000000 0.125000 0.051777 +v 0.000000 -0.051777 0.125000 +v 0.000000 -0.125000 0.051777 +v 0.000000 -0.125000 -0.051777 +v 0.000000 -0.051777 -0.125000 +v -0.062500 -0.062500 0.025888 +v -0.062500 -0.062500 -0.025888 +v -0.062500 -0.025888 -0.062500 +v -0.062500 0.025888 -0.062500 +v -0.062500 0.062500 -0.025888 +v -0.062500 0.062500 0.025888 +v -0.062500 0.025888 0.062500 +v -0.062500 -0.025888 0.062500 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.3750 0.2656 +vt 0.5000 0.2656 +vt 0.5000 0.5156 +vt 0.3750 0.5156 +vt 0.7500 0.2656 +vt 0.7500 0.5156 +vt 0.6250 0.5156 +vt 0.6250 0.2656 +vt 0.8750 0.2656 +vt 1.0000 0.2656 +vt 1.0000 0.5156 +vt 0.8750 0.5156 +vt 0.1250 0.2656 +vt 0.2500 0.2656 +vt 0.2500 0.5156 +vt 0.1250 0.5156 +vt 0.0000 0.2656 +vt 0.0000 0.5156 +vt 0.4619 0.1625 +vt 0.5652 0.1625 +vt 0.5393 0.2248 +vt 0.4877 0.2248 +vt 0.3889 0.2355 +vt 0.4512 0.2613 +vt 0.4619 0.4118 +vt 0.3889 0.3388 +vt 0.4512 0.3130 +vt 0.4877 0.3495 +vt 0.5652 0.4118 +vt 0.5393 0.3495 +vt 0.6382 0.2355 +vt 0.6382 0.3388 +vt 0.5759 0.3130 +vt 0.5759 0.2613 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 0.2971 +vn -0.6302 -0.7173 0.2971 +vn -0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 0.7173 +vn -0.6302 -0.2971 0.7173 +vn 0.6302 0.2971 0.7173 +vn -0.6302 0.2971 0.7173 +vn 0.6302 0.7173 0.2971 +vn -0.6302 0.7173 0.2971 +vn 0.6302 0.7173 -0.2971 +vn -0.6302 0.7173 -0.2971 +vn 0.6302 0.2971 -0.7173 +vn -0.6302 0.2971 -0.7173 +vn 0.6303 -0.7173 -0.2971 +vn 0.6303 -0.2971 -0.7173 +vn 0.6303 0.2971 -0.7173 +vn 0.6303 0.7173 -0.2971 +vn 0.6303 0.7173 0.2971 +vn 0.6303 0.2971 0.7173 +vn 0.6303 -0.2971 0.7173 +vn 0.6303 -0.7173 0.2971 +vn -0.3689 0.3557 -0.8587 +vn -0.3689 0.8587 -0.3557 +vn -0.3689 0.3557 0.8587 +vn -0.3689 0.8587 0.3557 +vn -0.3689 -0.3557 0.8587 +vn -0.3689 -0.8587 0.3557 +vn -0.3689 -0.8587 -0.3557 +vn -0.3689 -0.3557 -0.8587 +vn -0.8991 -0.4044 0.1675 +vn -0.8991 -0.4044 -0.1675 +vn -0.8991 -0.1675 -0.4044 +vn -0.8991 0.1675 -0.4044 +vn -0.8991 0.4044 -0.1675 +vn -0.8991 0.4044 0.1675 +vn -0.8991 0.1675 0.4044 +vn -0.8991 -0.1675 0.4044 +g Cylinder.002_Cylinder.006_None_Cylinder.002_Cylinder.006_None_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2 +s 1 +f 10/17/3 1/18/4 8/19/5 11/20/6 +f 9/21/7 2/22/8 1/18/4 10/17/3 +f 11/20/6 8/19/5 7/23/9 12/24/10 +f 12/25/10 7/26/9 6/27/11 13/28/12 +f 13/28/12 6/27/11 5/29/13 14/30/14 +f 14/30/14 5/29/13 4/31/15 15/32/16 +f 15/32/16 4/31/15 3/33/17 16/34/18 +f 16/34/18 3/33/17 2/22/8 9/21/7 +f 17/35/19 18/36/20 19/37/21 20/38/22 21/39/23 22/40/24 23/41/25 24/42/26 +f 25/43/27 26/44/28 20/45/22 19/46/21 +f 27/47/29 22/48/24 21/49/23 28/50/30 +f 29/51/31 30/52/32 24/53/26 23/54/25 +f 31/55/33 32/56/34 18/57/20 17/58/19 +f 32/56/34 25/43/27 19/46/21 18/57/20 +f 27/47/29 29/51/31 23/54/25 22/48/24 +f 30/59/32 31/55/33 17/58/19 24/60/26 +f 20/45/22 26/44/28 28/50/30 21/49/23 +f 31/61/33 30/62/32 33/63/35 34/64/36 +f 32/65/34 31/61/33 34/64/36 35/66/37 +f 26/67/28 25/68/27 36/69/38 37/70/39 +f 28/71/30 26/67/28 37/70/39 38/72/40 +f 25/68/27 32/65/34 35/66/37 36/69/38 +f 29/73/31 27/74/29 39/75/41 40/76/42 +f 27/74/29 28/71/30 38/72/40 39/75/41 +f 30/62/32 29/73/31 40/76/42 33/63/35 +f 36/69/38 35/66/37 34/64/36 33/63/35 40/76/42 39/75/41 38/72/40 37/70/39 diff --git a/mods/pipeworks/models/pipeworks_pipe_3.obj b/mods/pipeworks/models/pipeworks_pipe_3.obj new file mode 100755 index 0000000..ed0946b --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_3.obj @@ -0,0 +1,2406 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-highpoly.blend' +# www.blender.org +o Pipe_Cylinder.002 +v -0.468750 0.126770 0.038455 +v -0.468750 0.131837 0.012985 +v -0.468750 0.131837 -0.012984 +v -0.468750 0.126770 -0.038455 +v -0.468750 0.116832 -0.062448 +v -0.468750 0.102404 -0.084041 +v -0.468750 0.084041 -0.102404 +v -0.468750 0.062448 -0.116832 +v -0.468750 0.038455 -0.126770 +v -0.468750 0.012985 -0.131836 +v -0.468750 -0.012985 -0.131836 +v -0.468750 -0.062448 -0.116832 +v -0.468750 -0.084041 -0.102404 +v -0.468750 -0.102404 -0.084041 +v -0.468750 -0.116832 -0.062448 +v -0.468750 -0.126770 -0.038455 +v -0.468750 -0.131836 -0.012985 +v -0.468750 -0.131836 0.012985 +v -0.468750 -0.126770 0.038455 +v -0.468750 -0.116832 0.062448 +v -0.468750 -0.084041 0.102404 +v -0.468750 -0.102404 0.084041 +v -0.468750 -0.062448 0.116832 +v -0.468750 -0.038455 0.126770 +v -0.468750 0.012985 0.131837 +v -0.468750 0.062448 0.116832 +v -0.468750 0.038455 0.126770 +v -0.468750 0.084041 0.102404 +v -0.468750 0.102404 0.084041 +v -0.468750 0.116832 0.062448 +v -0.468750 -0.038455 -0.126770 +v -0.468750 -0.012985 0.131836 +v -0.437501 0.110774 0.059210 +v -0.437501 0.120197 0.036461 +v -0.437501 0.125000 0.012312 +v -0.437501 0.125001 -0.012311 +v -0.437501 0.120197 -0.036461 +v -0.437501 0.110774 -0.059210 +v -0.437501 0.097094 -0.079683 +v -0.437501 0.079683 -0.097094 +v -0.437501 0.059210 -0.110774 +v -0.437501 0.036461 -0.120197 +v -0.437501 0.012312 -0.125000 +v -0.437501 -0.012311 -0.125000 +v -0.437501 -0.036461 -0.120197 +v -0.437501 -0.059210 -0.110774 +v -0.437501 -0.079683 -0.097094 +v -0.437501 -0.097094 -0.079683 +v -0.437501 -0.110774 -0.059210 +v -0.437501 -0.120197 -0.036461 +v -0.437501 -0.125000 -0.012311 +v -0.437501 -0.125000 0.012311 +v -0.437501 -0.120197 0.036461 +v -0.437501 -0.110774 0.059210 +v -0.437501 -0.097094 0.079683 +v -0.437501 -0.079683 0.097094 +v -0.437501 -0.059210 0.110774 +v -0.437501 -0.036461 0.120197 +v -0.437501 -0.012311 0.125001 +v -0.437501 0.012311 0.125001 +v -0.437501 0.036461 0.120197 +v -0.437501 0.059210 0.110774 +v -0.437501 0.079683 0.097094 +v -0.437501 0.097094 0.079683 +v 0.437501 0.036461 -0.120197 +v 0.437501 0.012312 -0.125001 +v 0.437501 -0.012311 -0.125000 +v 0.437501 -0.036461 -0.120197 +v 0.437501 0.059210 -0.110774 +v 0.468750 0.012985 -0.131836 +v 0.468750 0.038455 -0.126770 +v 0.468750 -0.012985 -0.131836 +v 0.437501 -0.059210 -0.110774 +v 0.468750 -0.038455 -0.126770 +v 0.437501 0.079683 -0.097094 +v 0.468750 0.062448 -0.116832 +v 0.437501 -0.079683 -0.097094 +v 0.468750 -0.062448 -0.116832 +v 0.437501 0.097094 -0.079683 +v 0.468750 0.084041 -0.102404 +v 0.437501 -0.097094 -0.079683 +v 0.468750 -0.084041 -0.102404 +v 0.437501 0.110774 -0.059210 +v 0.468750 0.102404 -0.084041 +v 0.437501 -0.110774 -0.059210 +v 0.468750 -0.102404 -0.084041 +v 0.437501 0.120197 -0.036461 +v 0.468750 0.116832 -0.062448 +v 0.437501 -0.120197 -0.036461 +v 0.468750 -0.116832 -0.062448 +v 0.437501 0.125000 -0.012311 +v 0.468750 0.126770 -0.038455 +v 0.437501 -0.125001 -0.012311 +v 0.468750 -0.126770 -0.038455 +v 0.437501 0.125000 0.012312 +v 0.468750 0.131836 -0.012985 +v 0.437501 -0.125001 0.012311 +v 0.468750 -0.131837 -0.012985 +v 0.437501 0.120197 0.036461 +v 0.468750 0.131836 0.012985 +v 0.437501 -0.120197 0.036461 +v 0.468750 -0.131837 0.012985 +v 0.437501 0.110774 0.059210 +v 0.468750 0.126770 0.038455 +v 0.437501 -0.110774 0.059210 +v 0.468750 -0.126770 0.038455 +v 0.437501 0.097094 0.079683 +v 0.468750 0.116832 0.062448 +v 0.437501 -0.097094 0.079683 +v 0.468750 -0.116832 0.062448 +v 0.437501 0.079683 0.097094 +v 0.468750 0.102404 0.084041 +v 0.437501 -0.079683 0.097094 +v 0.468750 -0.102404 0.084041 +v 0.437501 0.059210 0.110774 +v 0.468750 0.084041 0.102404 +v 0.437501 -0.059210 0.110774 +v 0.468750 -0.084041 0.102404 +v 0.437501 0.036461 0.120197 +v 0.468750 0.062448 0.116832 +v 0.437501 -0.036461 0.120197 +v 0.468750 -0.062448 0.116832 +v 0.437501 0.012311 0.125000 +v 0.468750 0.038455 0.126770 +v 0.437501 -0.012311 0.125000 +v 0.468750 -0.038455 0.126770 +v 0.468750 0.012985 0.131837 +v 0.468750 -0.012985 0.131836 +v 0.460912 0.130078 0.063644 +v 0.468749 0.130078 0.063644 +v 0.468749 0.139022 0.062467 +v 0.460912 0.139022 0.062467 +v 0.460912 0.142474 0.054132 +v 0.460912 0.136982 0.046976 +v 0.460912 0.128039 0.048153 +v 0.460912 0.124587 0.056487 +v 0.468749 0.124587 0.056487 +v 0.468749 0.142474 0.054132 +v 0.468749 0.136982 0.046976 +v 0.468749 0.128039 0.048153 +v -0.460914 0.136982 0.046976 +v -0.468751 0.136982 0.046976 +v -0.468751 0.142474 0.054133 +v -0.460914 0.142474 0.054133 +v -0.460914 0.139022 0.062467 +v -0.460914 0.130078 0.063644 +v -0.460914 0.124587 0.056488 +v -0.460914 0.128039 0.048153 +v -0.468751 0.128039 0.048153 +v -0.468751 0.139022 0.062467 +v -0.468751 0.130078 0.063644 +v -0.468751 0.124587 0.056488 +v 0.460912 0.046976 0.136982 +v 0.468749 0.046976 0.136982 +v 0.468749 0.054133 0.142474 +v 0.460912 0.054133 0.142474 +v 0.460912 0.062467 0.139022 +v 0.460912 0.063644 0.130078 +v 0.460912 0.056488 0.124587 +v 0.460912 0.048154 0.128039 +v 0.468749 0.048154 0.128039 +v 0.468749 0.062467 0.139022 +v 0.468749 0.063644 0.130078 +v 0.468749 0.056488 0.124587 +v -0.460914 0.063644 0.130078 +v -0.468751 0.063644 0.130078 +v -0.468751 0.062467 0.139022 +v -0.460914 0.062467 0.139022 +v -0.460914 0.054133 0.142474 +v -0.460914 0.046976 0.136982 +v -0.460914 0.048153 0.128039 +v -0.460914 0.056487 0.124587 +v -0.468751 0.056487 0.124587 +v -0.468751 0.054133 0.142474 +v -0.468751 0.046976 0.136982 +v -0.468751 0.048153 0.128039 +v 0.460912 -0.063644 0.130078 +v 0.468749 -0.063644 0.130078 +v 0.468749 -0.062467 0.139022 +v 0.460912 -0.062467 0.139022 +v 0.460912 -0.054132 0.142474 +v 0.460912 -0.046976 0.136982 +v 0.460912 -0.048153 0.128039 +v 0.460912 -0.056487 0.124587 +v 0.468749 -0.056487 0.124587 +v 0.468749 -0.054132 0.142474 +v 0.468749 -0.046976 0.136982 +v 0.468749 -0.048153 0.128039 +v -0.460914 -0.046976 0.136982 +v -0.468751 -0.046976 0.136982 +v -0.468751 -0.054133 0.142474 +v -0.460914 -0.054133 0.142474 +v -0.460914 -0.062467 0.139022 +v -0.460914 -0.063644 0.130078 +v -0.460914 -0.056488 0.124587 +v -0.460914 -0.048153 0.128039 +v -0.468751 -0.048153 0.128039 +v -0.468751 -0.062467 0.139022 +v -0.468751 -0.063644 0.130078 +v -0.468751 -0.056488 0.124587 +v 0.460912 -0.136982 0.046976 +v 0.468749 -0.136982 0.046976 +v 0.468749 -0.142474 0.054133 +v 0.460912 -0.142474 0.054133 +v 0.460912 -0.139022 0.062467 +v 0.460912 -0.130078 0.063644 +v 0.460912 -0.124587 0.056488 +v 0.460912 -0.128039 0.048153 +v 0.468749 -0.128039 0.048153 +v 0.468749 -0.139022 0.062467 +v 0.468749 -0.130078 0.063644 +v 0.468749 -0.124587 0.056488 +v -0.460914 -0.130078 0.063644 +v -0.468751 -0.130078 0.063644 +v -0.468751 -0.139022 0.062467 +v -0.460914 -0.139022 0.062467 +v -0.460914 -0.142474 0.054133 +v -0.460914 -0.136982 0.046976 +v -0.460914 -0.128039 0.048153 +v -0.460914 -0.124587 0.056487 +v -0.468751 -0.124587 0.056487 +v -0.468751 -0.142474 0.054133 +v -0.468751 -0.136982 0.046976 +v -0.468751 -0.128039 0.048153 +v 0.460912 -0.130078 -0.063644 +v 0.468749 -0.130078 -0.063644 +v 0.468749 -0.139022 -0.062467 +v 0.460912 -0.139022 -0.062467 +v 0.460912 -0.142474 -0.054132 +v 0.460912 -0.136982 -0.046976 +v 0.460912 -0.128039 -0.048153 +v 0.460912 -0.124587 -0.056487 +v 0.468749 -0.124587 -0.056487 +v 0.468749 -0.142474 -0.054132 +v 0.468749 -0.136982 -0.046976 +v 0.468749 -0.128039 -0.048153 +v -0.460914 -0.136982 -0.046976 +v -0.468751 -0.136982 -0.046976 +v -0.468751 -0.142474 -0.054133 +v -0.460914 -0.142474 -0.054133 +v -0.460914 -0.139022 -0.062467 +v -0.460914 -0.130078 -0.063644 +v -0.460914 -0.124587 -0.056487 +v -0.460914 -0.128039 -0.048153 +v -0.468751 -0.128039 -0.048153 +v -0.468751 -0.139022 -0.062467 +v -0.468751 -0.130078 -0.063644 +v -0.468751 -0.124587 -0.056487 +v 0.460912 -0.046976 -0.136982 +v 0.468749 -0.046976 -0.136982 +v 0.468749 -0.054133 -0.142474 +v 0.460912 -0.054133 -0.142474 +v 0.460912 -0.062467 -0.139022 +v 0.460912 -0.063644 -0.130078 +v 0.460912 -0.056488 -0.124587 +v 0.460912 -0.048153 -0.128039 +v 0.468749 -0.048153 -0.128039 +v 0.468749 -0.062467 -0.139022 +v 0.468749 -0.063644 -0.130078 +v 0.468749 -0.056488 -0.124587 +v -0.460914 -0.063644 -0.130078 +v -0.468751 -0.063644 -0.130078 +v -0.468751 -0.062467 -0.139022 +v -0.460914 -0.062467 -0.139022 +v -0.460914 -0.054132 -0.142474 +v -0.460914 -0.046976 -0.136982 +v -0.460914 -0.048153 -0.128039 +v -0.460914 -0.056487 -0.124587 +v -0.468751 -0.056487 -0.124587 +v -0.468751 -0.054132 -0.142474 +v -0.468751 -0.046976 -0.136982 +v -0.468751 -0.048153 -0.128039 +v 0.460912 0.063644 -0.130078 +v 0.468749 0.063644 -0.130078 +v 0.468749 0.062467 -0.139022 +v 0.460912 0.062467 -0.139022 +v 0.460912 0.054132 -0.142474 +v 0.460912 0.046976 -0.136982 +v 0.460912 0.048153 -0.128039 +v 0.460912 0.056487 -0.124587 +v 0.468749 0.056487 -0.124587 +v 0.468749 0.054132 -0.142474 +v 0.468749 0.046976 -0.136982 +v 0.468749 0.048153 -0.128039 +v -0.460914 0.046976 -0.136982 +v -0.468751 0.046976 -0.136982 +v -0.468751 0.054133 -0.142474 +v -0.460914 0.054133 -0.142474 +v -0.460914 0.062467 -0.139022 +v -0.460914 0.063644 -0.130078 +v -0.460914 0.056487 -0.124587 +v -0.460914 0.048153 -0.128039 +v -0.468751 0.048153 -0.128039 +v -0.468751 0.062467 -0.139022 +v -0.468751 0.063644 -0.130078 +v -0.468751 0.056487 -0.124587 +v 0.460912 0.136982 -0.046976 +v 0.468749 0.136982 -0.046976 +v 0.468749 0.142474 -0.054133 +v 0.460912 0.142474 -0.054133 +v 0.460912 0.139022 -0.062467 +v 0.460912 0.130078 -0.063644 +v 0.460912 0.124587 -0.056488 +v 0.460912 0.128039 -0.048153 +v 0.468749 0.128039 -0.048153 +v 0.468749 0.139022 -0.062467 +v 0.468749 0.130078 -0.063644 +v 0.468749 0.124587 -0.056488 +v -0.460914 0.130078 -0.063644 +v -0.468751 0.130078 -0.063644 +v -0.468751 0.139022 -0.062467 +v -0.460914 0.139022 -0.062467 +v -0.460914 0.142474 -0.054133 +v -0.460914 0.136982 -0.046976 +v -0.460914 0.128039 -0.048153 +v -0.460914 0.124587 -0.056487 +v -0.468751 0.124587 -0.056487 +v -0.468751 0.142474 -0.054133 +v -0.468751 0.136982 -0.046976 +v -0.468751 0.128039 -0.048153 +v -0.500000 0.099603 -0.121367 +v -0.500000 0.074012 -0.138467 +v -0.500000 0.045577 -0.150245 +v -0.500000 0.015390 -0.156250 +v -0.500000 -0.015389 -0.156250 +v -0.500000 -0.045576 -0.150245 +v -0.500000 -0.074012 -0.138467 +v -0.500000 -0.099603 -0.121367 +v -0.500000 -0.121367 -0.099603 +v -0.500000 -0.150245 -0.045576 +v -0.500000 -0.156250 0.015389 +v -0.500000 -0.150245 0.045576 +v -0.500000 -0.121367 0.099603 +v -0.500000 -0.099603 0.121367 +v -0.500000 -0.074012 0.138467 +v -0.500000 -0.045576 0.150245 +v -0.500000 -0.015389 0.156250 +v -0.500000 0.045576 0.150245 +v -0.500000 0.074012 0.138467 +v -0.500000 0.099603 0.121367 +v -0.500000 0.138467 0.074012 +v -0.500000 0.156250 0.015389 +v -0.500000 0.156250 -0.015389 +v -0.500000 0.150245 -0.045576 +v -0.500000 0.138467 -0.074012 +v -0.500000 0.121367 -0.099603 +v -0.500000 -0.138466 -0.074012 +v -0.500000 -0.156250 -0.015389 +v -0.500000 -0.138467 0.074012 +v -0.500000 0.015389 0.156250 +v -0.500000 0.121367 0.099603 +v -0.500000 0.150245 0.045576 +v -0.468750 0.099603 -0.121367 +v -0.468750 0.121367 -0.099603 +v -0.468750 0.074012 -0.138467 +v -0.468750 0.045577 -0.150245 +v -0.468750 0.015390 -0.156250 +v -0.468750 -0.015389 -0.156250 +v -0.468750 -0.045576 -0.150245 +v -0.468750 -0.074012 -0.138467 +v -0.468750 -0.099603 -0.121367 +v -0.468750 -0.121367 -0.099603 +v -0.468750 -0.138466 -0.074012 +v -0.468750 -0.150245 -0.045576 +v -0.468750 -0.156250 -0.015389 +v -0.468750 -0.156250 0.015389 +v -0.468750 -0.150245 0.045576 +v -0.468750 -0.138467 0.074012 +v -0.468750 -0.121367 0.099603 +v -0.468750 -0.099603 0.121367 +v -0.468750 -0.074012 0.138467 +v -0.468750 -0.045576 0.150245 +v -0.468750 -0.015389 0.156250 +v -0.468750 0.015389 0.156250 +v -0.468750 0.074012 0.138467 +v -0.468750 0.045576 0.150245 +v -0.468750 0.099603 0.121367 +v -0.468750 0.121367 0.099603 +v -0.468750 0.138467 0.074012 +v -0.468750 0.150245 0.045576 +v -0.468750 0.156250 -0.015389 +v -0.468750 0.156250 0.015389 +v -0.468750 0.150245 -0.045576 +v -0.468750 0.138467 -0.074012 +v 0.468750 -0.138466 -0.074012 +v 0.468750 -0.150245 -0.045576 +v 0.468750 -0.156250 -0.015389 +v 0.468750 -0.121367 -0.099603 +v 0.468750 -0.156250 0.015389 +v 0.468750 -0.074012 -0.138467 +v 0.468750 -0.099603 -0.121367 +v 0.500000 -0.121367 -0.099603 +v 0.500000 -0.138467 -0.074012 +v 0.500000 -0.150245 -0.045576 +v 0.500000 -0.156250 -0.015389 +v 0.500000 -0.156250 0.015389 +v 0.468750 -0.045576 -0.150245 +v 0.500000 -0.099603 -0.121367 +v 0.468750 -0.150245 0.045576 +v 0.500000 -0.150245 0.045576 +v 0.468750 -0.015389 -0.156250 +v 0.500000 -0.045576 -0.150245 +v 0.500000 -0.074012 -0.138467 +v 0.468750 -0.138467 0.074012 +v 0.500000 -0.138467 0.074012 +v 0.468750 0.015389 -0.156250 +v 0.500000 -0.015389 -0.156250 +v 0.468750 -0.121367 0.099603 +v 0.500000 -0.121367 0.099603 +v 0.468750 0.045576 -0.150245 +v 0.500000 0.015389 -0.156250 +v 0.468750 -0.099603 0.121367 +v 0.500000 -0.099603 0.121367 +v 0.468750 0.074012 -0.138467 +v 0.500000 0.045576 -0.150245 +v 0.468750 -0.045576 0.150245 +v 0.468750 -0.074012 0.138467 +v 0.500000 -0.074012 0.138467 +v 0.468750 0.099603 -0.121367 +v 0.500000 0.074012 -0.138467 +v 0.468750 -0.015389 0.156250 +v 0.500000 -0.045576 0.150245 +v 0.468750 0.121367 -0.099603 +v 0.500000 0.099603 -0.121367 +v 0.468750 0.015389 0.156250 +v 0.500000 -0.015389 0.156250 +v 0.468750 0.138466 -0.074012 +v 0.500000 0.121367 -0.099603 +v 0.468750 0.045576 0.150245 +v 0.500000 0.015389 0.156250 +v 0.468750 0.150245 -0.045577 +v 0.500000 0.138466 -0.074012 +v 0.468750 0.074012 0.138467 +v 0.500000 0.045576 0.150245 +v 0.468750 0.156249 -0.015389 +v 0.500000 0.150245 -0.045577 +v 0.500000 0.156250 0.015389 +v 0.468750 0.099603 0.121367 +v 0.500000 0.074012 0.138467 +v 0.468750 0.156250 0.015389 +v 0.500000 0.156250 -0.015389 +v 0.500000 0.138467 0.074012 +v 0.500000 0.150245 0.045576 +v 0.500000 0.121367 0.099603 +v 0.500000 0.099603 0.121367 +v 0.468750 0.150245 0.045576 +v 0.468750 0.121367 0.099603 +v 0.468750 0.138467 0.074012 +v 0.460912 0.095821 0.108578 +v 0.468749 0.095821 0.108578 +v 0.468749 0.104534 0.110913 +v 0.460912 0.104534 0.110913 +v 0.460912 0.110913 0.104534 +v 0.460912 0.108578 0.095821 +v 0.460912 0.099865 0.093486 +v 0.460912 0.093486 0.099865 +v 0.468749 0.093486 0.099865 +v 0.468749 0.110913 0.104534 +v 0.468749 0.108578 0.095821 +v 0.468749 0.099865 0.093486 +v -0.460914 0.108578 0.095821 +v -0.468751 0.108578 0.095821 +v -0.468751 0.110913 0.104534 +v -0.460914 0.110913 0.104534 +v -0.460914 0.104534 0.110913 +v -0.460914 0.095821 0.108578 +v -0.460914 0.093486 0.099865 +v -0.460914 0.099865 0.093486 +v -0.468751 0.099865 0.093486 +v -0.468751 0.104534 0.110913 +v -0.468751 0.095821 0.108578 +v -0.468751 0.093486 0.099865 +v 0.460912 -0.009021 0.144532 +v 0.468749 -0.009021 0.144532 +v 0.468749 -0.004510 0.152344 +v 0.460912 -0.004510 0.152344 +v 0.460912 0.004510 0.152344 +v 0.460912 0.009021 0.144532 +v 0.460912 0.004510 0.136720 +v 0.460912 -0.004510 0.136720 +v 0.468749 -0.004510 0.136720 +v 0.468749 0.004510 0.152344 +v 0.468749 0.009021 0.144532 +v 0.468749 0.004510 0.136720 +v -0.460914 0.009021 0.144532 +v -0.468751 0.009021 0.144532 +v -0.468751 0.004510 0.152344 +v -0.460914 0.004510 0.152344 +v -0.460914 -0.004510 0.152344 +v -0.460914 -0.009021 0.144532 +v -0.460914 -0.004510 0.136720 +v -0.460914 0.004510 0.136720 +v -0.468751 0.004510 0.136720 +v -0.468751 -0.004510 0.152344 +v -0.468751 -0.009021 0.144532 +v -0.468751 -0.004510 0.136720 +v 0.460912 -0.108578 0.095821 +v 0.468749 -0.108578 0.095821 +v 0.468749 -0.110913 0.104534 +v 0.460912 -0.110913 0.104534 +v 0.460912 -0.104534 0.110913 +v 0.460912 -0.095821 0.108578 +v 0.460912 -0.093486 0.099865 +v 0.460912 -0.099865 0.093486 +v 0.468749 -0.099865 0.093486 +v 0.468749 -0.104534 0.110913 +v 0.468749 -0.095821 0.108578 +v 0.468749 -0.093486 0.099865 +v -0.460914 -0.095821 0.108578 +v -0.468751 -0.095821 0.108578 +v -0.468751 -0.104534 0.110913 +v -0.460914 -0.104534 0.110913 +v -0.460914 -0.110913 0.104534 +v -0.460914 -0.108578 0.095821 +v -0.460914 -0.099865 0.093486 +v -0.460914 -0.093486 0.099865 +v -0.468751 -0.093486 0.099865 +v -0.468751 -0.110913 0.104534 +v -0.468751 -0.108578 0.095821 +v -0.468751 -0.099865 0.093486 +v 0.460912 -0.144532 -0.009021 +v 0.468749 -0.144532 -0.009021 +v 0.468749 -0.152344 -0.004510 +v 0.460912 -0.152344 -0.004510 +v 0.460912 -0.152344 0.004511 +v 0.460912 -0.144532 0.009021 +v 0.460912 -0.136720 0.004510 +v 0.460912 -0.136720 -0.004510 +v 0.468749 -0.136720 -0.004510 +v 0.468749 -0.152344 0.004511 +v 0.468749 -0.144532 0.009021 +v 0.468749 -0.136720 0.004510 +v -0.460914 -0.144532 0.009021 +v -0.468751 -0.144532 0.009021 +v -0.468751 -0.152344 0.004510 +v -0.460914 -0.152344 0.004510 +v -0.460914 -0.152344 -0.004510 +v -0.460914 -0.144532 -0.009021 +v -0.460914 -0.136720 -0.004510 +v -0.460914 -0.136720 0.004510 +v -0.468751 -0.136720 0.004510 +v -0.468751 -0.152344 -0.004510 +v -0.468751 -0.144532 -0.009021 +v -0.468751 -0.136720 -0.004510 +v 0.460912 -0.095821 -0.108578 +v 0.468749 -0.095821 -0.108578 +v 0.468749 -0.104534 -0.110913 +v 0.460912 -0.104534 -0.110913 +v 0.460912 -0.110913 -0.104534 +v 0.460912 -0.108578 -0.095821 +v 0.460912 -0.099865 -0.093486 +v 0.460912 -0.093486 -0.099865 +v 0.468749 -0.093486 -0.099865 +v 0.468749 -0.110913 -0.104534 +v 0.468749 -0.108578 -0.095821 +v 0.468749 -0.099865 -0.093486 +v -0.460914 -0.108578 -0.095821 +v -0.468751 -0.108578 -0.095821 +v -0.468751 -0.110913 -0.104534 +v -0.460914 -0.110913 -0.104534 +v -0.460914 -0.104534 -0.110913 +v -0.460914 -0.095821 -0.108578 +v -0.460914 -0.093486 -0.099865 +v -0.460914 -0.099865 -0.093486 +v -0.468751 -0.099865 -0.093486 +v -0.468751 -0.104534 -0.110913 +v -0.468751 -0.095821 -0.108578 +v -0.468751 -0.093486 -0.099865 +v 0.460912 0.009021 -0.144532 +v 0.468749 0.009021 -0.144532 +v 0.468749 0.004510 -0.152344 +v 0.460912 0.004510 -0.152344 +v 0.460912 -0.004510 -0.152344 +v 0.460912 -0.009021 -0.144532 +v 0.460912 -0.004510 -0.136720 +v 0.460912 0.004510 -0.136720 +v 0.468749 0.004510 -0.136720 +v 0.468749 -0.004510 -0.152344 +v 0.468749 -0.009021 -0.144532 +v 0.468749 -0.004510 -0.136720 +v -0.460914 -0.009021 -0.144532 +v -0.468751 -0.009021 -0.144532 +v -0.468751 -0.004510 -0.152344 +v -0.460914 -0.004510 -0.152344 +v -0.460914 0.004510 -0.152344 +v -0.460914 0.009021 -0.144532 +v -0.460914 0.004510 -0.136720 +v -0.460914 -0.004510 -0.136720 +v -0.468751 -0.004510 -0.136720 +v -0.468751 0.004510 -0.152344 +v -0.468751 0.009021 -0.144532 +v -0.468751 0.004510 -0.136720 +v 0.460912 0.108578 -0.095821 +v 0.468749 0.108578 -0.095821 +v 0.468749 0.110913 -0.104534 +v 0.460912 0.110913 -0.104534 +v 0.460912 0.104534 -0.110913 +v 0.460912 0.095821 -0.108578 +v 0.460912 0.093486 -0.099865 +v 0.460912 0.099865 -0.093486 +v 0.468749 0.099865 -0.093486 +v 0.468749 0.104534 -0.110913 +v 0.468749 0.095821 -0.108578 +v 0.468749 0.093486 -0.099865 +v -0.460914 0.095821 -0.108578 +v -0.468751 0.095821 -0.108578 +v -0.468751 0.104534 -0.110913 +v -0.460914 0.104534 -0.110913 +v -0.460914 0.110913 -0.104534 +v -0.460914 0.108578 -0.095821 +v -0.460914 0.099865 -0.093486 +v -0.460914 0.093486 -0.099865 +v -0.468751 0.093486 -0.099865 +v -0.468751 0.110913 -0.104534 +v -0.468751 0.108578 -0.095821 +v -0.468751 0.099865 -0.093486 +v 0.460912 0.144532 0.009021 +v 0.468749 0.144532 0.009021 +v 0.468749 0.152344 0.004510 +v 0.460912 0.152344 0.004510 +v 0.460912 0.152344 -0.004510 +v 0.460912 0.144532 -0.009021 +v 0.460912 0.136720 -0.004510 +v 0.460912 0.136720 0.004510 +v 0.468749 0.136720 0.004510 +v 0.468749 0.152344 -0.004510 +v 0.468749 0.144532 -0.009021 +v 0.468749 0.136720 -0.004510 +v -0.460914 0.144532 -0.009021 +v -0.468751 0.144532 -0.009021 +v -0.468751 0.152344 -0.004510 +v -0.460914 0.152344 -0.004510 +v -0.460914 0.152344 0.004510 +v -0.460914 0.144532 0.009021 +v -0.460914 0.136720 0.004510 +v -0.460914 0.136720 -0.004510 +v -0.468751 0.136720 -0.004510 +v -0.468751 0.152344 0.004510 +v -0.468751 0.144532 0.009021 +v -0.468751 0.136720 0.004510 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6719 0.5156 +vt 0.6719 0.5000 +vt 0.7031 0.5000 +vt 0.7031 0.5156 +vt 0.7344 0.5156 +vt 0.7344 0.5000 +vt 0.7656 0.5156 +vt 0.7656 0.5000 +vt 0.7969 0.5156 +vt 0.7969 0.5000 +vt 0.8281 0.5156 +vt 0.8281 0.5000 +vt 0.8594 0.5156 +vt 0.8594 0.5000 +vt 0.8906 0.5000 +vt 0.8906 0.5156 +vt 0.9219 0.5156 +vt 0.9219 0.5000 +vt 0.9531 0.5156 +vt 0.9531 0.5000 +vt 0.9844 0.5156 +vt 0.9844 0.5000 +vt 1.0156 0.5000 +vt 1.0156 0.5156 +vt 0.0156 0.5156 +vt 0.0156 0.5000 +vt 0.0469 0.5000 +vt 0.0469 0.5156 +vt 0.0781 0.5156 +vt 0.0781 0.5000 +vt 0.1094 0.5000 +vt 0.1094 0.5156 +vt 0.1406 0.5000 +vt 0.1406 0.5156 +vt 0.1719 0.5156 +vt 0.1719 0.5000 +vt 0.2031 0.5000 +vt 0.2031 0.5156 +vt 0.2344 0.5156 +vt 0.2344 0.5000 +vt 0.2656 0.5000 +vt 0.2656 0.5156 +vt 0.2969 0.5156 +vt 0.2969 0.5000 +vt 0.3281 0.5000 +vt 0.3281 0.5156 +vt 0.3594 0.5000 +vt 0.3594 0.5156 +vt 0.3906 0.5000 +vt 0.3906 0.5156 +vt 0.4219 0.5000 +vt 0.4219 0.5156 +vt 0.4531 0.5000 +vt 0.4531 0.5156 +vt 0.4844 0.5000 +vt 0.4844 0.5156 +vt 0.5469 0.5156 +vt 0.5156 0.5156 +vt 0.5156 0.5000 +vt 0.5469 0.5000 +vt 0.6094 0.5156 +vt 0.5781 0.5156 +vt 0.5781 0.5000 +vt 0.6094 0.5000 +vt 0.6406 0.5156 +vt 0.6406 0.5000 +vt 1.0156 0.0312 +vt 0.9844 0.0312 +vt 0.9844 0.0156 +vt 0.9531 0.0312 +vt 0.9531 0.0156 +vt 1.0156 0.0156 +vt 0.0469 0.0156 +vt 0.0469 0.0312 +vt 0.0156 0.0312 +vt 0.0156 0.0156 +vt 0.9219 0.0312 +vt 0.8906 0.0312 +vt 0.9219 0.0156 +vt 0.0781 0.0156 +vt 0.0781 0.0312 +vt 0.8906 0.0156 +vt 0.1094 0.0156 +vt 0.1094 0.0312 +vt 0.8594 0.0156 +vt 0.8594 0.0312 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 0.1406 0.0156 +vt 0.1406 0.0312 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.8281 0.0156 +vt 0.8281 0.0312 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.1719 0.0156 +vt 0.1719 0.0312 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.7969 0.0156 +vt 0.7969 0.0312 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.2031 0.0156 +vt 0.2031 0.0312 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7656 0.0156 +vt 0.7656 0.0312 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 0.2344 0.0156 +vt 0.2344 0.0312 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.7344 0.0156 +vt 0.7344 0.0312 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2656 0.0156 +vt 0.2656 0.0312 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.4219 0.0312 +vt 0.3906 0.0312 +vt 0.7031 0.0156 +vt 0.7031 0.0312 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2969 0.0156 +vt 0.2969 0.0312 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6719 0.0156 +vt 0.6719 0.0312 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.3281 0.0156 +vt 0.3281 0.0312 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6406 0.0156 +vt 0.6406 0.0312 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3594 0.0156 +vt 0.3594 0.0312 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.6094 0.0156 +vt 0.6094 0.0312 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3906 0.0156 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.5469 0.0312 +vt 0.5781 0.0312 +vt 0.5781 0.0156 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.4219 0.0156 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5469 0.0156 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4531 0.0156 +vt 0.4531 0.0312 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.5156 0.0156 +vt 0.5156 0.0312 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4844 0.0156 +vt 0.4844 0.0312 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vn -1.0000 -0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.6857 0.2113 -0.6965 +vn -0.6857 0.2113 -0.6965 +vn -0.6857 0.3431 -0.6419 +vn 0.6857 0.3431 -0.6419 +vn 0.6857 0.0713 -0.7244 +vn -0.6857 0.0713 -0.7244 +vn 0.6857 -0.0713 -0.7244 +vn -0.6857 -0.0713 -0.7244 +vn 0.6857 -0.2113 -0.6965 +vn -0.6857 -0.2113 -0.6965 +vn 0.6857 -0.3431 -0.6419 +vn -0.6857 -0.3431 -0.6419 +vn 0.6857 -0.4617 -0.5626 +vn -0.6857 -0.4617 -0.5626 +vn 0.6857 -0.5626 -0.4617 +vn -0.6857 -0.5626 -0.4617 +vn 0.6857 -0.6419 -0.3431 +vn -0.6857 -0.6419 -0.3431 +vn 0.6857 -0.6965 -0.2113 +vn -0.6857 -0.6965 -0.2113 +vn 0.6857 -0.7244 -0.0713 +vn -0.6857 -0.7244 -0.0713 +vn 0.6857 -0.7244 0.0713 +vn -0.6857 -0.7244 0.0713 +vn 0.6857 -0.6965 0.2113 +vn -0.6857 -0.6965 0.2113 +vn 0.6857 -0.6419 0.3431 +vn -0.6857 -0.6419 0.3431 +vn 0.6857 -0.5626 0.4617 +vn -0.6857 -0.5626 0.4617 +vn 0.6857 -0.4617 0.5626 +vn -0.6857 -0.4617 0.5626 +vn 0.6857 -0.3431 0.6419 +vn -0.6857 -0.3431 0.6419 +vn 0.6857 -0.2113 0.6965 +vn -0.6857 -0.2113 0.6965 +vn 0.6857 -0.0713 0.7244 +vn -0.6857 -0.0713 0.7244 +vn 0.6857 0.0713 0.7244 +vn -0.6857 0.0713 0.7244 +vn 0.6857 0.2113 0.6965 +vn -0.6857 0.2113 0.6965 +vn 0.6857 0.4617 0.5626 +vn -0.6857 0.4617 0.5626 +vn -0.6857 0.3431 0.6419 +vn 0.6857 0.3431 0.6419 +vn 0.6857 0.5626 0.4617 +vn -0.6857 0.5626 0.4617 +vn 0.6857 0.6419 0.3431 +vn -0.6857 0.6419 0.3431 +vn 0.6857 0.6965 0.2113 +vn -0.6857 0.6965 0.2113 +vn 0.6857 0.7244 0.0713 +vn -0.6857 0.7244 0.0713 +vn 0.6857 0.6965 -0.2113 +vn -0.6857 0.6965 -0.2113 +vn -0.6857 0.7244 -0.0713 +vn 0.6857 0.7244 -0.0713 +vn 0.6857 0.6419 -0.3431 +vn -0.6857 0.6419 -0.3431 +vn 0.6857 0.5626 -0.4617 +vn -0.6857 0.5626 -0.4617 +vn 0.2147 0.8614 0.4604 +vn 0.1087 0.8767 0.4686 +vn 0.1087 0.9513 0.2886 +vn 0.2147 0.9346 0.2835 +vn 0.2147 0.9720 0.0957 +vn 0.1087 0.9893 0.0974 +vn 0.2147 0.9720 -0.0957 +vn 0.1087 0.9893 -0.0974 +vn 0.2147 0.9346 -0.2835 +vn 0.1087 0.9513 -0.2886 +vn 0.2147 0.8614 -0.4604 +vn 0.1087 0.8767 -0.4686 +vn 0.2147 0.7550 -0.6196 +vn 0.1087 0.7684 -0.6306 +vn 0.1087 0.6306 -0.7684 +vn 0.2147 0.6196 -0.7550 +vn 0.2147 0.4604 -0.8614 +vn 0.1087 0.4686 -0.8767 +vn 0.2147 0.2835 -0.9346 +vn 0.1087 0.2886 -0.9513 +vn 0.2147 0.0957 -0.9720 +vn 0.1087 0.0974 -0.9893 +vn 0.1087 -0.0974 -0.9893 +vn 0.2147 -0.0957 -0.9720 +vn 0.1087 -0.2886 -0.9513 +vn 0.2147 -0.2835 -0.9346 +vn 0.2147 -0.4604 -0.8614 +vn 0.1087 -0.4686 -0.8767 +vn 0.1087 -0.6306 -0.7684 +vn 0.2147 -0.6196 -0.7550 +vn 0.1087 -0.7684 -0.6306 +vn 0.2147 -0.7550 -0.6196 +vn 0.2147 -0.8614 -0.4604 +vn 0.1087 -0.8767 -0.4686 +vn 0.1087 -0.9513 -0.2886 +vn 0.2147 -0.9346 -0.2835 +vn 0.2147 -0.9720 -0.0957 +vn 0.1087 -0.9893 -0.0974 +vn 0.1087 -0.9893 0.0974 +vn 0.2147 -0.9720 0.0957 +vn 0.2147 -0.9346 0.2835 +vn 0.1087 -0.9513 0.2886 +vn 0.1087 -0.8767 0.4686 +vn 0.2147 -0.8614 0.4604 +vn 0.1087 -0.7684 0.6306 +vn 0.2147 -0.7550 0.6196 +vn 0.1087 -0.6306 0.7684 +vn 0.2147 -0.6196 0.7550 +vn 0.1087 -0.4686 0.8767 +vn 0.2147 -0.4604 0.8614 +vn 0.1087 -0.2886 0.9513 +vn 0.2147 -0.2835 0.9346 +vn 0.1087 -0.0974 0.9893 +vn 0.2147 -0.0957 0.9720 +vn 0.2147 0.2835 0.9346 +vn 0.2147 0.0957 0.9720 +vn 0.1087 0.0974 0.9893 +vn 0.1087 0.2886 0.9513 +vn 0.2147 0.6196 0.7550 +vn 0.2147 0.4604 0.8614 +vn 0.1087 0.4686 0.8767 +vn 0.1087 0.6306 0.7684 +vn 0.2147 0.7550 0.6196 +vn 0.1087 0.7684 0.6306 +vn -0.1087 -0.0974 -0.9893 +vn -0.1087 0.0974 -0.9893 +vn -0.2147 0.0957 -0.9720 +vn -0.1087 0.2886 -0.9513 +vn -0.2147 0.2835 -0.9346 +vn -0.2147 -0.0957 -0.9720 +vn -0.2147 -0.2835 -0.9346 +vn -0.1087 -0.2886 -0.9513 +vn -0.1087 0.4686 -0.8767 +vn -0.1087 0.6306 -0.7684 +vn -0.2147 0.4604 -0.8614 +vn -0.2147 -0.4604 -0.8614 +vn -0.1087 -0.4686 -0.8767 +vn -0.2147 0.6196 -0.7550 +vn -0.2147 -0.6196 -0.7550 +vn -0.1087 -0.6306 -0.7684 +vn -0.2147 0.7550 -0.6196 +vn -0.1087 0.7684 -0.6306 +vn -0.2147 -0.7550 -0.6196 +vn -0.1087 -0.7684 -0.6306 +vn -0.2147 0.8614 -0.4604 +vn -0.1087 0.8767 -0.4686 +vn -0.2147 -0.8614 -0.4604 +vn -0.1087 -0.8767 -0.4686 +vn -0.2147 0.9346 -0.2835 +vn -0.1087 0.9513 -0.2886 +vn -0.2147 -0.9346 -0.2835 +vn -0.1087 -0.9513 -0.2886 +vn -0.2147 0.9720 -0.0957 +vn -0.1087 0.9893 -0.0974 +vn -0.2147 -0.9720 -0.0957 +vn -0.1087 -0.9893 -0.0974 +vn -0.2147 0.9720 0.0957 +vn -0.1087 0.9893 0.0974 +vn -0.2147 -0.9720 0.0957 +vn -0.1087 -0.9893 0.0974 +vn -0.6857 0.4617 -0.5626 +vn 0.6857 0.4617 -0.5626 +vn -0.1087 -0.4686 0.8767 +vn -0.1087 -0.6306 0.7684 +vn -0.2147 0.9346 0.2835 +vn -0.1087 0.9513 0.2886 +vn -0.2147 -0.9346 0.2835 +vn -0.1087 -0.9513 0.2886 +vn -0.2147 0.8614 0.4604 +vn -0.1087 0.8767 0.4686 +vn -0.2147 -0.8614 0.4604 +vn -0.1087 -0.8767 0.4686 +vn -0.2147 0.7550 0.6196 +vn -0.1087 0.7684 0.6306 +vn -0.2147 -0.7550 0.6196 +vn -0.1087 -0.7684 0.6306 +vn -0.2147 0.6196 0.7550 +vn -0.1087 0.6306 0.7684 +vn -0.2147 -0.6196 0.7550 +vn -0.1087 0.2886 0.9513 +vn -0.1087 0.4686 0.8767 +vn -0.2147 0.4604 0.8614 +vn -0.2147 -0.4604 0.8614 +vn -0.2147 0.2835 0.9346 +vn -0.2147 -0.2835 0.9346 +vn -0.1087 -0.2886 0.9513 +vn -0.2147 0.0957 0.9720 +vn -0.1087 0.0974 0.9893 +vn -0.2147 -0.0957 0.9720 +vn -0.1087 -0.0974 0.9893 +vn -0.6100 -0.3032 0.7321 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.6088 0.7933 +vn -0.6100 0.4824 0.6287 +vn -0.6100 -0.7856 0.1034 +vn 0.0000 -0.9914 0.1305 +vn 0.0000 0.9914 -0.1305 +vn -0.6100 0.7856 -0.1034 +vn 0.0000 0.3827 -0.9239 +vn -0.6100 0.3032 -0.7321 +vn 0.0000 -0.6088 -0.7933 +vn -0.6100 -0.4824 -0.6287 +vn 0.6100 0.3032 -0.7321 +vn 0.6100 0.7856 -0.1034 +vn 0.6100 -0.4824 -0.6287 +vn 0.6100 0.4824 0.6287 +vn 0.6100 -0.3032 0.7321 +vn 0.6100 -0.7856 0.1034 +vn -0.6100 -0.7321 0.3032 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.1305 0.9914 +vn -0.6100 -0.1034 0.7856 +vn -0.6100 -0.6287 -0.4824 +vn 0.0000 -0.7933 -0.6088 +vn 0.0000 0.7933 0.6088 +vn -0.6100 0.6287 0.4824 +vn 0.0000 0.9239 -0.3827 +vn -0.6100 0.7321 -0.3032 +vn 0.0000 0.1305 -0.9914 +vn -0.6100 0.1034 -0.7856 +vn 0.6100 0.7321 -0.3032 +vn 0.6100 0.6287 0.4824 +vn 0.6100 0.1034 -0.7856 +vn 0.6100 -0.1034 0.7856 +vn 0.6100 -0.7321 0.3032 +vn 0.6100 -0.6287 -0.4824 +vn -0.6100 -0.7321 -0.3032 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 -0.7933 0.6088 +vn -0.6100 -0.6287 0.4824 +vn -0.6100 -0.1034 -0.7856 +vn 0.0000 -0.1305 -0.9914 +vn 0.0000 0.1305 0.9914 +vn -0.6100 0.1034 0.7856 +vn 0.0000 0.9239 0.3827 +vn -0.6100 0.7321 0.3032 +vn 0.0000 0.7933 -0.6088 +vn -0.6100 0.6287 -0.4824 +vn 0.6100 0.7321 0.3032 +vn 0.6100 0.1034 0.7856 +vn 0.6100 0.6287 -0.4824 +vn 0.6100 -0.6287 0.4824 +vn 0.6100 -0.7321 -0.3032 +vn 0.6100 -0.1034 -0.7856 +vn -0.6100 -0.3032 -0.7321 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.9914 -0.1305 +vn -0.6100 -0.7856 -0.1034 +vn -0.6100 0.4824 -0.6287 +vn 0.0000 0.6088 -0.7933 +vn 0.0000 -0.6088 0.7933 +vn -0.6100 -0.4824 0.6287 +vn 0.0000 0.3827 0.9239 +vn -0.6100 0.3032 0.7321 +vn 0.0000 0.9914 0.1305 +vn -0.6100 0.7856 0.1034 +vn 0.6100 0.3032 0.7321 +vn 0.6100 -0.4824 0.6287 +vn 0.6100 0.7856 0.1034 +vn 0.6100 -0.7856 -0.1034 +vn 0.6100 -0.3032 -0.7321 +vn 0.6100 0.4824 -0.6287 +vn -0.6100 -0.5603 0.5603 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.2588 0.9659 +vn -0.6100 0.2051 0.7654 +vn -0.6100 -0.7654 -0.2051 +vn 0.0000 -0.9659 -0.2588 +vn 0.0000 0.9659 0.2588 +vn -0.6100 0.7654 0.2051 +vn 0.0000 0.7071 -0.7071 +vn -0.6100 0.5603 -0.5603 +vn 0.0000 -0.2588 -0.9659 +vn -0.6100 -0.2051 -0.7654 +vn 0.6100 0.5603 -0.5603 +vn 0.6100 0.7654 0.2051 +vn 0.6100 -0.2051 -0.7654 +vn 0.6100 0.2051 0.7654 +vn 0.6100 -0.5603 0.5603 +vn 0.6100 -0.7654 -0.2051 +vn -0.6100 -0.7924 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.5000 0.8660 +vn -0.6100 -0.3962 0.6862 +vn -0.6100 -0.3962 -0.6862 +vn 0.0000 -0.5000 -0.8660 +vn 0.0000 0.5000 0.8660 +vn -0.6100 0.3962 0.6862 +vn 0.0000 1.0000 0.0000 +vn -0.6100 0.7924 0.0000 +vn 0.0000 0.5000 -0.8660 +vn -0.6100 0.3962 -0.6862 +vn 0.6100 0.7924 0.0000 +vn 0.6100 0.3962 0.6862 +vn 0.6100 0.3962 -0.6862 +vn 0.6100 -0.3962 0.6862 +vn 0.6100 -0.7924 0.0000 +vn 0.6100 -0.3962 -0.6862 +vn -0.6100 -0.5603 -0.5603 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.9659 0.2588 +vn -0.6100 -0.7654 0.2051 +vn -0.6100 0.2051 -0.7654 +vn 0.0000 0.2588 -0.9659 +vn 0.0000 -0.2588 0.9659 +vn -0.6100 -0.2051 0.7654 +vn 0.0000 0.7071 0.7071 +vn -0.6100 0.5603 0.5603 +vn 0.0000 0.9659 -0.2588 +vn -0.6100 0.7654 -0.2051 +vn 0.6100 0.5603 0.5603 +vn 0.6100 -0.2051 0.7654 +vn 0.6100 0.7654 -0.2051 +vn 0.6100 -0.7654 0.2051 +vn 0.6100 -0.5603 -0.5603 +vn 0.6100 0.2051 -0.7654 +vn -0.6100 0.0000 -0.7924 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.8660 -0.5000 +vn -0.6100 -0.6862 -0.3962 +vn -0.6100 0.6862 -0.3962 +vn 0.0000 0.8660 -0.5000 +vn 0.0000 -0.8660 0.5000 +vn -0.6100 -0.6862 0.3962 +vn 0.0000 0.0000 1.0000 +vn -0.6100 0.0000 0.7924 +vn 0.0000 0.8660 0.5000 +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.6100 -0.6862 -0.3962 +vn 0.6100 0.0000 -0.7924 +vn 0.6100 0.6862 -0.3962 +g Pipe_Cylinder.002_None +s off +f 129/1/1 132/2/1 133/3/1 134/4/1 135/5/1 136/6/1 +f 141/7/2 144/8/2 145/9/2 146/10/2 147/11/2 148/12/2 +f 153/13/1 156/14/1 157/15/1 158/16/1 159/17/1 160/18/1 +f 165/19/2 168/20/2 169/21/2 170/22/2 171/23/2 172/24/2 +f 177/25/1 180/26/1 181/27/1 182/28/1 183/29/1 184/30/1 +f 189/31/2 192/32/2 193/33/2 194/34/2 195/35/2 196/36/2 +f 201/37/1 204/38/1 205/39/1 206/40/1 207/41/1 208/42/1 +f 213/43/2 216/44/2 217/45/2 218/46/2 219/47/2 220/48/2 +f 225/49/1 228/50/1 229/51/1 230/52/1 231/53/1 232/54/1 +f 237/55/2 240/56/2 241/57/2 242/58/2 243/59/2 244/60/2 +f 249/61/1 252/62/1 253/63/1 254/64/1 255/65/1 256/66/1 +f 261/67/2 264/68/2 265/69/2 266/70/2 267/71/2 268/72/2 +f 273/73/1 276/74/1 277/75/1 278/76/1 279/77/1 280/78/1 +f 285/79/2 288/80/2 289/81/2 290/82/2 291/83/2 292/84/2 +f 297/85/1 300/86/1 301/87/1 302/88/1 303/89/1 304/90/1 +f 309/91/2 312/92/2 313/93/2 314/94/2 315/95/2 316/96/2 +f 353/97/2 354/98/2 384/99/2 383/100/2 381/101/2 382/102/2 380/103/2 379/104/2 378/105/2 377/106/2 375/107/2 376/108/2 374/109/2 373/110/2 372/111/2 371/112/2 370/113/2 369/114/2 368/115/2 367/116/2 366/117/2 365/118/2 364/119/2 363/120/2 362/121/2 361/122/2 360/123/2 359/124/2 358/125/2 357/126/2 356/127/2 355/128/2 +f 332/129/1 349/130/1 333/131/1 334/132/1 335/133/1 336/134/1 337/135/1 350/136/1 338/137/1 339/138/1 340/139/1 351/140/1 341/141/1 352/142/1 342/143/1 343/144/1 344/145/1 345/146/1 346/147/1 321/148/1 322/149/1 323/150/1 324/151/1 325/152/1 326/153/1 327/154/1 328/155/1 329/156/1 347/157/1 330/158/1 348/159/1 331/160/1 +f 389/161/1 399/162/1 404/163/1 408/164/1 412/165/1 417/166/1 416/167/1 421/168/1 425/169/1 429/170/1 433/171/1 438/172/1 447/173/1 448/174/1 446/175/1 440/176/1 435/177/1 431/178/1 427/179/1 423/180/1 419/181/1 414/182/1 410/183/1 406/184/1 401/185/1 397/186/1 390/187/1 391/188/1 388/189/1 385/190/1 386/191/1 387/192/1 +f 393/193/2 392/194/2 398/195/2 403/196/2 402/197/2 407/198/2 411/199/2 415/200/2 420/201/2 424/202/2 428/203/2 432/204/2 436/205/2 441/206/2 437/207/2 443/208/2 442/209/2 444/210/2 445/211/2 439/212/2 434/213/2 430/214/2 426/215/2 422/216/2 418/217/2 413/218/2 409/219/2 405/220/2 400/221/2 396/222/2 395/223/2 394/224/2 +f 449/225/1 452/226/1 453/227/1 454/228/1 455/229/1 456/230/1 +f 461/231/2 464/232/2 465/233/2 466/234/2 467/235/2 468/236/2 +f 473/237/1 476/238/1 477/239/1 478/240/1 479/241/1 480/242/1 +f 485/243/2 488/244/2 489/245/2 490/246/2 491/247/2 492/248/2 +f 497/249/1 500/250/1 501/251/1 502/252/1 503/253/1 504/254/1 +f 509/255/2 512/256/2 513/257/2 514/258/2 515/259/2 516/260/2 +f 521/261/1 524/262/1 525/263/1 526/264/1 527/265/1 528/266/1 +f 533/267/2 536/268/2 537/269/2 538/270/2 539/271/2 540/272/2 +f 545/273/1 548/274/1 549/275/1 550/276/1 551/277/1 552/278/1 +f 557/279/2 560/280/2 561/281/2 562/282/2 563/283/2 564/284/2 +f 569/285/1 572/286/1 573/287/1 574/288/1 575/289/1 576/290/1 +f 581/291/2 584/292/2 585/293/2 586/294/2 587/295/2 588/296/2 +f 593/297/1 596/298/1 597/299/1 598/300/1 599/301/1 600/302/1 +f 605/303/2 608/304/2 609/305/2 610/306/2 611/307/2 612/308/2 +f 617/309/1 620/310/1 621/311/1 622/312/1 623/313/1 624/314/1 +f 629/315/2 632/316/2 633/317/2 634/318/2 635/319/2 636/320/2 +s 1 +f 356/321/3 323/322/4 322/323/5 355/324/6 +f 357/325/7 324/326/8 323/322/4 356/321/3 +f 358/327/9 325/328/10 324/326/8 357/325/7 +f 359/329/11 326/330/12 325/328/10 358/327/9 +f 360/331/13 327/332/14 326/330/12 359/329/11 +f 361/333/15 328/334/16 327/332/14 360/331/13 +f 362/335/17 329/336/18 328/334/16 361/333/15 +f 363/337/19 347/338/20 329/336/18 362/335/17 +f 364/339/21 330/340/22 347/338/20 363/337/19 +f 365/341/23 348/342/24 330/340/22 364/339/21 +f 366/343/25 331/344/26 348/342/24 365/341/23 +f 367/345/27 332/346/28 331/344/26 366/343/25 +f 368/347/29 349/348/30 332/346/28 367/345/27 +f 369/349/31 333/350/32 349/351/30 368/347/29 +f 370/352/33 334/353/34 333/350/32 369/349/31 +f 371/354/35 335/355/36 334/353/34 370/352/33 +f 372/356/37 336/357/38 335/358/36 371/359/35 +f 373/360/39 337/361/40 336/357/38 372/356/37 +f 374/362/41 350/363/42 337/361/40 373/360/39 +f 376/364/43 338/365/44 350/363/42 374/362/41 +f 377/366/45 340/367/46 339/368/47 375/369/48 +f 375/369/48 339/368/47 338/365/44 376/364/43 +f 378/370/49 351/371/50 340/367/46 377/366/45 +f 379/372/51 341/373/52 351/371/50 378/370/49 +f 380/374/53 352/375/54 341/373/52 379/372/51 +f 382/376/55 342/377/56 352/375/54 380/374/53 +f 383/378/57 344/379/58 343/380/59 381/381/60 +f 381/381/60 343/380/59 342/377/56 382/376/55 +f 384/382/61 345/383/62 344/379/58 383/378/57 +f 354/384/63 346/385/64 345/383/62 384/382/61 +f 30/386/65 33/387/66 34/388/67 1/389/68 +f 2/390/69 1/389/68 34/388/67 35/391/70 +f 3/392/71 2/390/69 35/391/70 36/393/72 +f 4/394/73 3/392/71 36/393/72 37/395/74 +f 5/396/75 4/394/73 37/395/74 38/397/76 +f 6/398/77 5/396/75 38/397/76 39/399/78 +f 6/398/77 39/399/78 40/400/79 7/401/80 +f 8/402/81 7/401/80 40/400/79 41/403/82 +f 9/404/83 8/402/81 41/403/82 42/405/84 +f 10/406/85 9/404/83 42/405/84 43/407/86 +f 10/406/85 43/407/86 44/408/87 11/409/88 +f 11/410/88 44/411/87 45/412/89 31/413/90 +f 12/414/91 46/415/92 47/416/93 13/417/94 +f 31/413/90 45/412/89 46/415/92 12/414/91 +f 13/417/94 47/416/93 48/418/95 14/419/96 +f 15/420/97 14/419/96 48/418/95 49/421/98 +f 15/420/97 49/421/98 50/422/99 16/423/100 +f 17/424/101 16/423/100 50/422/99 51/425/102 +f 17/424/101 51/425/102 52/426/103 18/427/104 +f 19/428/105 18/427/104 52/426/103 53/429/106 +f 19/428/105 53/429/106 54/430/107 20/431/108 +f 20/431/108 54/430/107 55/432/109 22/433/110 +f 22/433/110 55/432/109 56/434/111 21/435/112 +f 21/435/112 56/434/111 57/436/113 23/437/114 +f 23/437/114 57/436/113 58/438/115 24/439/116 +f 24/439/116 58/438/115 59/440/117 32/441/118 +f 27/442/119 25/443/120 60/444/121 61/445/122 +f 25/443/120 32/441/118 59/440/117 60/444/121 +f 28/446/123 26/447/124 62/448/125 63/449/126 +f 27/442/119 61/445/122 62/448/125 26/447/124 +f 29/450/127 28/446/123 63/449/126 64/451/128 +f 29/450/127 64/451/128 33/387/66 30/386/65 +f 67/452/129 44/408/87 43/407/86 66/453/130 +f 70/454/131 66/453/130 65/455/132 71/456/133 +f 72/457/134 67/452/129 66/453/130 70/454/131 +f 74/458/135 68/459/136 67/460/129 72/461/134 +f 69/462/137 41/403/82 40/400/79 75/463/138 +f 71/456/133 65/455/132 69/462/137 76/464/139 +f 78/465/140 73/466/141 68/459/136 74/458/135 +f 80/467/142 76/464/139 69/462/137 75/463/138 +f 82/468/143 77/469/144 73/466/141 78/465/140 +f 84/470/145 80/467/142 75/463/138 79/471/146 +f 388/472/18 392/473/17 393/474/19 385/475/20 +f 387/476/24 395/477/23 396/478/25 389/479/26 +f 86/480/147 81/481/148 77/469/144 82/468/143 +f 391/482/16 398/483/15 392/473/17 388/472/18 +f 88/484/149 84/470/145 79/471/146 83/485/150 +f 389/479/26 396/478/25 400/486/27 399/487/28 +f 90/488/151 85/489/152 81/481/148 86/480/147 +f 390/490/14 403/491/13 398/483/15 391/482/16 +f 92/492/153 88/484/149 83/485/150 87/493/154 +f 397/494/12 402/495/11 403/491/13 390/490/14 +f 94/496/155 89/497/156 85/489/152 90/488/151 +f 406/498/8 411/499/7 407/500/9 401/501/10 +f 96/502/157 92/492/153 87/493/154 91/503/158 +f 399/487/28 400/486/27 405/504/29 404/505/30 +f 98/506/159 93/507/160 89/497/156 94/496/155 +f 410/508/4 415/509/3 411/499/7 406/498/8 +f 100/510/161 96/502/157 91/503/158 95/511/162 +f 404/505/30 405/504/29 409/512/31 408/513/32 +f 102/514/163 97/515/164 93/507/160 98/506/159 +f 355/324/6 322/323/5 321/516/165 353/517/166 +f 414/518/5 420/519/6 415/509/3 410/508/4 +f 36/393/72 91/503/158 87/493/154 37/395/74 +f 117/520/167 57/436/113 56/434/111 113/521/168 +f 104/522/169 100/510/161 95/511/162 99/523/170 +f 408/513/32 409/512/31 413/524/33 412/525/34 +f 106/526/171 101/527/172 97/515/164 102/514/163 +f 419/528/165 424/529/166 420/519/6 414/518/5 +f 108/530/173 104/522/169 99/523/170 103/531/174 +f 412/525/34 413/524/33 418/532/35 417/533/36 +f 110/534/175 105/535/176 101/527/172 106/526/171 +f 423/536/64 428/537/63 424/529/166 419/528/165 +f 112/538/177 108/530/173 103/531/174 107/539/178 +f 416/540/38 422/541/37 426/542/39 421/543/40 +f 110/534/175 114/544/179 109/545/180 105/535/176 +f 417/533/36 418/532/35 422/546/37 416/547/38 +f 116/548/181 112/538/177 107/539/178 111/549/182 +f 421/543/40 426/542/39 430/550/41 425/551/42 +f 385/475/20 393/474/19 394/552/21 386/553/22 +f 118/554/183 113/521/168 109/545/180 114/544/179 +f 427/555/62 432/556/61 428/537/63 423/536/64 +f 61/445/122 119/557/184 115/558/185 62/448/125 +f 120/559/186 116/548/181 111/549/182 115/558/185 +f 425/551/42 430/550/41 434/560/43 429/561/44 +f 118/554/183 122/562/187 117/520/167 113/521/168 +f 431/563/58 436/564/57 432/556/61 427/555/62 +f 124/565/188 120/559/186 115/558/185 119/557/184 +f 429/561/44 434/566/43 439/567/48 433/568/47 +f 122/562/187 126/569/189 121/570/190 117/520/167 +f 435/571/59 441/572/60 436/564/57 431/563/58 +f 401/501/10 407/500/9 402/495/11 397/494/12 +f 127/573/191 124/565/188 119/557/184 123/574/192 +f 433/568/47 439/567/48 445/575/45 438/576/46 +f 126/569/189 128/577/193 125/578/194 121/570/190 +f 440/579/56 437/580/55 441/572/60 435/571/59 +f 128/577/193 127/573/191 123/574/192 125/578/194 +f 386/553/22 394/552/21 395/477/23 387/476/24 +f 446/581/54 443/582/53 437/580/55 440/579/56 +f 438/576/46 445/575/45 444/583/49 447/584/50 +f 448/585/52 442/586/51 443/582/53 446/581/54 +f 447/584/50 444/583/49 442/586/51 448/585/52 +f 129/587/195 130/588/196 131/589/197 132/590/198 +f 136/591/199 137/592/200 130/588/196 129/587/195 +f 132/590/198 131/589/197 138/593/201 133/594/202 +f 133/594/202 138/593/201 139/595/203 134/596/204 +f 134/597/204 139/598/203 140/599/205 135/600/206 +f 135/600/206 140/599/205 137/592/200 136/591/199 +f 141/601/207 142/602/203 143/603/201 144/604/208 +f 148/605/209 149/606/205 142/602/203 141/601/207 +f 144/604/208 143/603/201 150/607/197 145/608/210 +f 145/608/210 150/607/197 151/609/196 146/610/211 +f 146/611/211 151/612/196 152/613/200 147/614/212 +f 147/614/212 152/613/200 149/606/205 148/605/209 +f 153/615/213 154/616/214 155/617/215 156/618/216 +f 160/619/217 161/620/218 154/616/214 153/615/213 +f 156/618/216 155/617/215 162/621/219 157/622/220 +f 157/622/220 162/621/219 163/623/221 158/624/222 +f 158/625/222 163/626/221 164/627/223 159/628/224 +f 159/628/224 164/627/223 161/620/218 160/619/217 +f 165/629/225 166/630/221 167/631/219 168/632/226 +f 172/633/227 173/634/223 166/630/221 165/629/225 +f 168/632/226 167/631/219 174/635/215 169/636/228 +f 169/636/228 174/635/215 175/637/214 170/638/229 +f 170/639/229 175/640/214 176/641/218 171/642/230 +f 171/642/230 176/641/218 173/634/223 172/633/227 +f 177/643/231 178/644/232 179/645/233 180/646/234 +f 184/647/235 185/648/236 178/644/232 177/643/231 +f 180/646/234 179/645/233 186/649/237 181/650/238 +f 181/650/238 186/649/237 187/651/239 182/652/240 +f 182/653/240 187/654/239 188/655/241 183/656/242 +f 183/656/242 188/655/241 185/648/236 184/647/235 +f 189/657/243 190/658/239 191/659/237 192/660/244 +f 196/661/245 197/662/241 190/658/239 189/657/243 +f 192/660/244 191/659/237 198/663/233 193/664/246 +f 193/664/246 198/663/233 199/665/232 194/666/247 +f 194/667/247 199/668/232 200/669/236 195/670/248 +f 195/670/248 200/669/236 197/662/241 196/661/245 +f 201/671/249 202/672/250 203/673/251 204/674/252 +f 208/675/253 209/676/254 202/672/250 201/671/249 +f 204/674/252 203/673/251 210/677/255 205/678/256 +f 205/678/256 210/677/255 211/679/257 206/680/258 +f 206/681/258 211/682/257 212/683/259 207/684/260 +f 207/684/260 212/683/259 209/676/254 208/675/253 +f 213/685/261 214/686/257 215/687/255 216/688/262 +f 220/689/263 221/690/259 214/686/257 213/685/261 +f 216/688/262 215/687/255 222/691/251 217/692/264 +f 217/692/264 222/691/251 223/693/250 218/694/265 +f 218/695/265 223/696/250 224/697/254 219/698/266 +f 219/698/266 224/697/254 221/690/259 220/689/263 +f 225/699/204 226/700/203 227/701/205 228/702/206 +f 232/703/202 233/704/201 226/700/203 225/699/204 +f 228/702/206 227/701/205 234/705/200 229/706/199 +f 229/706/199 234/705/200 235/707/196 230/708/195 +f 230/709/195 235/710/196 236/711/197 231/712/198 +f 231/712/198 236/711/197 233/704/201 232/703/202 +f 237/713/211 238/714/196 239/715/200 240/716/212 +f 244/717/210 245/718/197 238/714/196 237/713/211 +f 240/716/212 239/715/200 246/719/205 241/720/209 +f 241/720/209 246/719/205 247/721/203 242/722/207 +f 242/723/207 247/724/203 248/725/201 243/726/208 +f 243/726/208 248/725/201 245/718/197 244/717/210 +f 249/727/222 250/728/221 251/729/223 252/730/224 +f 256/731/220 257/732/219 250/728/221 249/727/222 +f 252/730/224 251/729/223 258/733/218 253/734/217 +f 253/734/217 258/733/218 259/735/214 254/736/213 +f 254/737/213 259/738/214 260/739/215 255/740/216 +f 255/740/216 260/739/215 257/732/219 256/731/220 +f 261/741/229 262/742/214 263/743/218 264/744/230 +f 268/745/228 269/746/215 262/742/214 261/741/229 +f 264/744/230 263/743/218 270/747/223 265/748/227 +f 265/748/227 270/747/223 271/749/221 266/750/225 +f 266/751/225 271/752/221 272/753/219 267/754/226 +f 267/754/226 272/753/219 269/746/215 268/745/228 +f 273/755/240 274/756/239 275/757/241 276/758/242 +f 280/759/238 281/760/237 274/756/239 273/755/240 +f 276/758/242 275/757/241 282/761/236 277/762/235 +f 277/762/235 282/761/236 283/763/232 278/764/231 +f 278/765/231 283/766/232 284/767/233 279/768/234 +f 279/768/234 284/767/233 281/760/237 280/759/238 +f 285/769/247 286/770/232 287/771/236 288/772/248 +f 292/773/246 293/774/233 286/770/232 285/769/247 +f 288/772/248 287/771/236 294/775/241 289/776/245 +f 289/776/245 294/775/241 295/777/239 290/778/243 +f 290/779/243 295/780/239 296/781/237 291/782/244 +f 291/782/244 296/781/237 293/774/233 292/773/246 +f 297/783/258 298/784/257 299/785/259 300/786/260 +f 304/787/256 305/788/255 298/784/257 297/783/258 +f 300/786/260 299/785/259 306/789/254 301/790/253 +f 301/790/253 306/789/254 307/791/250 302/792/249 +f 302/793/249 307/794/250 308/795/251 303/796/252 +f 303/796/252 308/795/251 305/788/255 304/787/256 +f 309/797/265 310/798/250 311/799/254 312/800/266 +f 316/801/264 317/802/251 310/798/250 309/797/265 +f 312/800/266 311/799/254 318/803/259 313/804/263 +f 313/804/263 318/803/259 319/805/257 314/806/261 +f 314/807/261 319/808/257 320/809/255 315/810/262 +f 315/810/262 320/809/255 317/802/251 316/801/264 +f 54/430/107 53/429/106 101/527/172 105/535/176 +f 64/451/128 107/539/178 103/531/174 33/387/66 +f 125/578/194 59/440/117 58/438/115 121/570/190 +f 65/455/132 42/405/84 41/403/82 69/462/137 +f 62/448/125 115/558/185 111/549/182 63/449/126 +f 89/497/156 93/507/160 51/425/102 50/422/99 +f 38/397/76 37/395/74 87/493/154 83/485/150 +f 121/570/190 58/438/115 57/436/113 117/520/167 +f 61/445/122 60/444/121 123/574/192 119/557/184 +f 64/451/128 63/449/126 111/549/182 107/539/178 +f 125/578/194 123/574/192 60/444/121 59/440/117 +f 39/399/78 79/471/146 75/463/138 40/400/79 +f 35/391/70 34/388/67 99/523/170 95/511/162 +f 55/432/109 109/545/180 113/521/168 56/434/111 +f 55/432/109 54/430/107 105/535/176 109/545/180 +f 49/421/98 48/418/95 81/481/148 85/489/152 +f 353/517/166 321/516/165 346/385/64 354/384/63 +f 36/393/72 35/391/70 95/511/162 91/503/158 +f 43/407/86 42/405/84 65/455/132 66/453/130 +f 45/412/89 68/459/136 73/466/141 46/415/92 +f 46/415/92 73/466/141 77/469/144 47/416/93 +f 44/411/87 67/460/129 68/459/136 45/412/89 +f 52/426/103 97/515/164 101/527/172 53/429/106 +f 34/388/67 33/387/66 103/531/174 99/523/170 +f 89/497/156 50/422/99 49/421/98 85/489/152 +f 449/811/267 450/812/268 451/813/269 452/814/270 +f 456/815/271 457/816/272 450/812/268 449/811/267 +f 452/814/270 451/813/269 458/817/273 453/818/274 +f 453/818/274 458/817/273 459/819/275 454/820/276 +f 454/821/276 459/822/275 460/823/277 455/824/278 +f 455/824/278 460/823/277 457/816/272 456/815/271 +f 461/825/279 462/826/275 463/827/273 464/828/280 +f 468/829/281 469/830/277 462/826/275 461/825/279 +f 464/828/280 463/827/273 470/831/269 465/832/282 +f 465/832/282 470/831/269 471/833/268 466/834/283 +f 466/835/283 471/836/268 472/837/272 467/838/284 +f 467/838/284 472/837/272 469/830/277 468/829/281 +f 473/839/285 474/840/286 475/841/287 476/842/288 +f 480/843/289 481/844/290 474/840/286 473/839/285 +f 476/842/288 475/841/287 482/845/291 477/846/292 +f 477/846/292 482/845/291 483/847/293 478/848/294 +f 478/849/294 483/850/293 484/851/295 479/852/296 +f 479/852/296 484/851/295 481/844/290 480/843/289 +f 485/853/297 486/854/293 487/855/291 488/856/298 +f 492/857/299 493/858/295 486/854/293 485/853/297 +f 488/856/298 487/855/291 494/859/287 489/860/300 +f 489/860/300 494/859/287 495/861/286 490/862/301 +f 490/863/301 495/864/286 496/865/290 491/866/302 +f 491/866/302 496/865/290 493/858/295 492/857/299 +f 497/867/303 498/868/304 499/869/305 500/870/306 +f 504/871/307 505/872/308 498/868/304 497/867/303 +f 500/870/306 499/869/305 506/873/309 501/874/310 +f 501/874/310 506/873/309 507/875/311 502/876/312 +f 502/877/312 507/878/311 508/879/313 503/880/314 +f 503/880/314 508/879/313 505/872/308 504/871/307 +f 509/881/315 510/882/311 511/883/309 512/884/316 +f 516/885/317 517/886/313 510/882/311 509/881/315 +f 512/884/316 511/883/309 518/887/305 513/888/318 +f 513/888/318 518/887/305 519/889/304 514/890/319 +f 514/891/319 519/892/304 520/893/308 515/894/320 +f 515/894/320 520/893/308 517/886/313 516/885/317 +f 521/895/321 522/896/322 523/897/323 524/898/324 +f 528/899/325 529/900/326 522/896/322 521/895/321 +f 524/898/324 523/897/323 530/901/327 525/902/328 +f 525/902/328 530/901/327 531/903/329 526/904/330 +f 526/905/330 531/906/329 532/907/331 527/908/332 +f 527/908/332 532/907/331 529/900/326 528/899/325 +f 533/909/333 534/910/329 535/911/327 536/912/334 +f 540/913/335 541/914/331 534/910/329 533/909/333 +f 536/912/334 535/911/327 542/915/323 537/916/336 +f 537/916/336 542/915/323 543/917/322 538/918/337 +f 538/919/337 543/920/322 544/921/326 539/922/338 +f 539/922/338 544/921/326 541/914/331 540/913/335 +f 545/923/276 546/924/275 547/925/277 548/926/278 +f 552/927/274 553/928/273 546/924/275 545/923/276 +f 548/926/278 547/925/277 554/929/272 549/930/271 +f 549/930/271 554/929/272 555/931/268 550/932/267 +f 550/933/267 555/934/268 556/935/269 551/936/270 +f 551/936/270 556/935/269 553/928/273 552/927/274 +f 557/937/283 558/938/268 559/939/272 560/940/284 +f 564/941/282 565/942/269 558/938/268 557/937/283 +f 560/940/284 559/939/272 566/943/277 561/944/281 +f 561/944/281 566/943/277 567/945/275 562/946/279 +f 562/947/279 567/948/275 568/949/273 563/950/280 +f 563/950/280 568/949/273 565/942/269 564/941/282 +f 569/951/294 570/952/293 571/953/295 572/954/296 +f 576/955/292 577/956/291 570/952/293 569/951/294 +f 572/954/296 571/953/295 578/957/290 573/958/289 +f 573/958/289 578/957/290 579/959/286 574/960/285 +f 574/961/285 579/962/286 580/963/287 575/964/288 +f 575/964/288 580/963/287 577/956/291 576/955/292 +f 581/965/301 582/966/286 583/967/290 584/968/302 +f 588/969/300 589/970/287 582/966/286 581/965/301 +f 584/968/302 583/967/290 590/971/295 585/972/299 +f 585/972/299 590/971/295 591/973/293 586/974/297 +f 586/975/297 591/976/293 592/977/291 587/978/298 +f 587/978/298 592/977/291 589/970/287 588/969/300 +f 593/979/312 594/980/311 595/981/313 596/982/314 +f 600/983/310 601/984/309 594/980/311 593/979/312 +f 596/982/314 595/981/313 602/985/308 597/986/307 +f 597/986/307 602/985/308 603/987/304 598/988/303 +f 598/989/303 603/990/304 604/991/305 599/992/306 +f 599/992/306 604/991/305 601/984/309 600/983/310 +f 605/993/319 606/994/304 607/995/308 608/996/320 +f 612/997/318 613/998/305 606/994/304 605/993/319 +f 608/996/320 607/995/308 614/999/313 609/1000/317 +f 609/1000/317 614/999/313 615/1001/311 610/1002/315 +f 610/1003/315 615/1004/311 616/1005/309 611/1006/316 +f 611/1006/316 616/1005/309 613/998/305 612/997/318 +f 617/1007/330 618/1008/329 619/1009/331 620/1010/332 +f 624/1011/328 625/1012/327 618/1008/329 617/1007/330 +f 620/1010/332 619/1009/331 626/1013/326 621/1014/325 +f 621/1014/325 626/1013/326 627/1015/322 622/1016/321 +f 622/1017/321 627/1018/322 628/1019/323 623/1020/324 +f 623/1020/324 628/1019/323 625/1012/327 624/1011/328 +f 629/1021/337 630/1022/322 631/1023/326 632/1024/338 +f 636/1025/336 637/1026/323 630/1022/322 629/1021/337 +f 632/1024/338 631/1023/326 638/1027/331 633/1028/335 +f 633/1028/335 638/1027/331 639/1029/329 634/1030/333 +f 634/1031/333 639/1032/329 640/1033/327 635/1034/334 +f 635/1034/334 640/1033/327 637/1026/323 636/1025/336 +f 38/397/76 83/485/150 79/471/146 39/399/78 +f 81/481/148 48/418/95 47/416/93 77/469/144 +f 51/425/102 93/507/160 97/515/164 52/426/103 diff --git a/mods/pipeworks/models/pipeworks_pipe_3_lowpoly.obj b/mods/pipeworks/models/pipeworks_pipe_3_lowpoly.obj new file mode 100755 index 0000000..0d9bda4 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_3_lowpoly.obj @@ -0,0 +1,194 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend' +# www.blender.org +o Cylinder.000 +v 0.500000 -0.064721 0.156250 +v 0.468750 -0.064721 0.156250 +v 0.500000 -0.156250 0.064721 +v 0.468750 -0.156250 0.064721 +v 0.500000 -0.156250 -0.064721 +v 0.468750 -0.156250 -0.064721 +v 0.500000 -0.064721 -0.156250 +v 0.468750 -0.064721 -0.156250 +v 0.500000 0.064721 -0.156250 +v 0.468750 0.064721 -0.156250 +v 0.500000 0.156250 -0.064721 +v 0.468750 0.156250 -0.064721 +v 0.500000 0.156250 0.064721 +v 0.468750 0.156250 0.064721 +v 0.500000 0.064721 0.156250 +v 0.468750 0.064721 0.156250 +v 0.468750 -0.051777 0.125000 +v -0.468750 -0.051777 0.125000 +v 0.468750 -0.125000 0.051777 +v -0.468750 -0.125000 0.051777 +v 0.468750 -0.125000 -0.051777 +v -0.468750 -0.125000 -0.051777 +v 0.468750 -0.051777 -0.125000 +v -0.468750 -0.051777 -0.125000 +v 0.468750 0.051777 -0.125000 +v -0.468750 0.051777 -0.125000 +v 0.468750 0.125000 -0.051777 +v -0.468750 0.125000 -0.051777 +v 0.468750 0.125000 0.051777 +v -0.468750 0.125000 0.051777 +v 0.468750 0.051777 0.125000 +v -0.468750 0.051777 0.125000 +v -0.468750 -0.064721 0.156250 +v -0.500000 -0.064721 0.156250 +v -0.468750 -0.156250 0.064721 +v -0.500000 -0.156250 0.064721 +v -0.468750 -0.156250 -0.064721 +v -0.500000 -0.156250 -0.064721 +v -0.468750 -0.064721 -0.156250 +v -0.500000 -0.064721 -0.156250 +v -0.468750 0.064721 -0.156250 +v -0.500000 0.064721 -0.156250 +v -0.468750 0.156250 -0.064721 +v -0.500000 0.156250 -0.064721 +v -0.468750 0.156250 0.064721 +v -0.500000 0.156250 0.064721 +v -0.468750 0.064721 0.156250 +v -0.500000 0.064721 0.156250 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 1.0625 0.5156 +vt 0.9375 0.5156 +vt 0.9375 0.0156 +vt 1.0625 0.0156 +vt 0.6875 0.5156 +vt 0.5625 0.5156 +vt 0.5625 0.0156 +vt 0.6875 0.0156 +vt 0.8125 0.5156 +vt 0.8125 0.0156 +vt 0.0625 0.5156 +vt 0.0625 0.0156 +vt 0.1875 0.0156 +vt 0.1875 0.5156 +vt 0.3125 0.0156 +vt 0.4375 0.0156 +vt 0.4375 0.5156 +vt 0.3125 0.5156 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.6302 -0.2971 0.7173 +vn -0.6302 -0.2971 0.7173 +vn -0.6302 -0.7173 0.2971 +vn 0.6302 -0.7173 0.2971 +vn -0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 -0.2971 +vn -0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 -0.7173 +vn -0.6302 0.2971 -0.7173 +vn 0.6302 0.2971 -0.7173 +vn -0.6302 0.7173 -0.2971 +vn 0.6302 0.7173 -0.2971 +vn -0.6302 0.7173 0.2971 +vn 0.6302 0.7173 0.2971 +vn -0.6302 0.2971 0.7173 +vn 0.6302 0.2971 0.7173 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.3827 0.9239 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.3827 0.9239 +g Cylinder.000_Cylinder.000_None +s off +f 4/1/1 2/2/1 16/3/1 14/4/1 12/5/1 10/6/1 8/7/1 6/8/1 +f 1/9/2 3/10/2 5/11/2 7/12/2 9/13/2 11/14/2 13/15/2 15/16/2 +f 36/17/1 34/18/1 48/19/1 46/20/1 44/21/1 42/22/1 40/23/1 38/24/1 +f 33/25/2 35/26/2 37/27/2 39/28/2 41/29/2 43/30/2 45/31/2 47/32/2 +s 1 +f 1/33/3 2/34/4 4/35/5 3/36/6 +f 3/36/6 4/35/5 6/37/7 5/38/8 +f 5/38/8 6/37/7 8/39/9 7/40/10 +f 7/41/10 8/42/9 10/43/11 9/44/12 +f 9/44/12 10/43/11 12/45/13 11/46/14 +f 11/46/14 12/45/13 14/47/15 13/48/16 +f 13/48/16 14/47/15 16/49/17 15/50/18 +f 15/50/18 16/49/17 2/34/4 1/33/3 +f 35/51/6 36/52/5 38/53/7 37/54/8 +f 33/55/3 34/56/4 36/52/5 35/51/6 +f 37/54/8 38/53/7 40/57/9 39/58/10 +f 39/59/10 40/60/9 42/61/11 41/62/12 +f 41/62/12 42/61/11 44/63/13 43/64/14 +f 43/64/14 44/63/13 46/65/15 45/66/16 +f 45/66/16 46/65/15 48/67/17 47/68/18 +f 47/68/18 48/67/17 34/56/4 33/55/3 +f 24/69/19 26/70/20 25/71/20 23/72/19 +f 30/73/21 32/74/22 31/75/22 29/76/21 +f 26/70/20 28/77/23 27/78/23 25/71/20 +f 24/79/19 23/80/19 21/81/24 22/82/24 +f 19/83/25 17/84/26 18/85/26 20/86/25 +f 21/81/24 19/83/25 20/86/25 22/82/24 +f 30/73/21 29/76/21 27/78/23 28/77/23 +f 17/84/26 31/75/22 32/74/22 18/85/26 diff --git a/mods/pipeworks/models/pipeworks_pipe_4.obj b/mods/pipeworks/models/pipeworks_pipe_4.obj new file mode 100755 index 0000000..5fca7d3 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_4.obj @@ -0,0 +1,4755 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-spigot-pouring.blend' +# www.blender.org +o Pipe_Cylinder.002_None.001 +v 0.460914 0.136982 -0.046976 +v 0.460914 0.142474 -0.054133 +v 0.460914 0.139022 -0.062467 +v 0.460914 0.130078 -0.063644 +v 0.460914 0.124587 -0.056488 +v 0.460914 0.128039 -0.048153 +v 0.460914 0.063644 -0.130078 +v 0.460914 0.062467 -0.139022 +v 0.460914 0.054133 -0.142474 +v 0.460914 0.046976 -0.136982 +v 0.460914 0.048153 -0.128039 +v 0.460914 0.056487 -0.124587 +v 0.460914 -0.046976 -0.136982 +v 0.460914 -0.054133 -0.142474 +v 0.460914 -0.062467 -0.139022 +v 0.460914 -0.063644 -0.130078 +v 0.460914 -0.056488 -0.124587 +v 0.460914 -0.048153 -0.128039 +v 0.460914 -0.130078 -0.063644 +v 0.460914 -0.139022 -0.062467 +v 0.460914 -0.142474 -0.054133 +v 0.460914 -0.136982 -0.046976 +v 0.460914 -0.128039 -0.048153 +v 0.460914 -0.124587 -0.056487 +v 0.460914 -0.136982 0.046976 +v 0.460914 -0.142474 0.054133 +v 0.460914 -0.139022 0.062467 +v 0.460914 -0.130078 0.063644 +v 0.460914 -0.124587 0.056487 +v 0.460914 -0.128039 0.048153 +v 0.460914 -0.063644 0.130078 +v 0.460914 -0.062467 0.139022 +v 0.460914 -0.054132 0.142474 +v 0.460914 -0.046976 0.136982 +v 0.460914 -0.048153 0.128039 +v 0.460914 -0.056487 0.124587 +v 0.460914 0.046976 0.136982 +v 0.460914 0.054133 0.142474 +v 0.460914 0.062467 0.139022 +v 0.460914 0.063644 0.130078 +v 0.460914 0.056487 0.124587 +v 0.460914 0.048153 0.128039 +v 0.460914 0.130078 0.063644 +v 0.460914 0.139022 0.062467 +v 0.460914 0.142474 0.054133 +v 0.460914 0.136982 0.046976 +v 0.460914 0.128039 0.048153 +v 0.460914 0.124587 0.056487 +v 0.468750 0.099603 0.121367 +v 0.468750 0.121367 0.099603 +v 0.468750 0.138467 0.074012 +v 0.468750 0.150245 0.045576 +v 0.468750 0.156250 0.015389 +v 0.468750 0.156250 -0.015389 +v 0.468750 0.150245 -0.045576 +v 0.468750 0.138467 -0.074012 +v 0.468750 0.121367 -0.099603 +v 0.468750 0.099603 -0.121367 +v 0.468750 0.074012 -0.138467 +v 0.468750 0.045576 -0.150245 +v 0.468750 0.015389 -0.156250 +v 0.468750 -0.015389 -0.156250 +v 0.468750 -0.045576 -0.150245 +v 0.468750 -0.074012 -0.138467 +v 0.468750 -0.099603 -0.121367 +v 0.468750 -0.121367 -0.099603 +v 0.468750 -0.138467 -0.074012 +v 0.468750 -0.150245 -0.045576 +v 0.468750 -0.156250 -0.015389 +v 0.468750 -0.156250 0.015389 +v 0.468750 -0.150245 0.045576 +v 0.468750 -0.138466 0.074012 +v 0.468750 -0.121367 0.099603 +v 0.468750 -0.099603 0.121367 +v 0.468750 -0.074012 0.138467 +v 0.468750 -0.045576 0.150245 +v 0.468750 -0.015389 0.156250 +v 0.468750 0.015390 0.156250 +v 0.468750 0.045577 0.150245 +v 0.468750 0.074012 0.138467 +v 0.500000 -0.150245 -0.045576 +v 0.500000 -0.138467 -0.074012 +v 0.500000 -0.121367 -0.099603 +v 0.500000 -0.099603 -0.121367 +v 0.500000 -0.074012 -0.138467 +v 0.500000 -0.045576 -0.150245 +v 0.500000 -0.015389 -0.156250 +v 0.500000 0.015389 -0.156250 +v 0.500000 0.045576 -0.150245 +v 0.500000 0.074012 -0.138467 +v 0.500000 0.099603 -0.121367 +v 0.500000 0.121367 -0.099603 +v 0.500000 0.138467 -0.074012 +v 0.500000 0.150245 -0.045576 +v 0.500000 0.156250 -0.015389 +v 0.500000 0.156250 0.015389 +v 0.500000 0.150245 0.045576 +v 0.500000 0.138467 0.074012 +v 0.500000 0.121367 0.099603 +v 0.500000 0.099603 0.121367 +v 0.500000 0.074012 0.138467 +v 0.500000 0.045577 0.150245 +v 0.500000 0.015390 0.156250 +v 0.500000 -0.015389 0.156250 +v 0.500000 -0.045576 0.150245 +v 0.500000 -0.074012 0.138467 +v 0.500000 -0.099603 0.121367 +v 0.500000 -0.121367 0.099603 +v 0.500000 -0.138466 0.074012 +v 0.500000 -0.150245 0.045576 +v 0.500000 -0.156250 0.015389 +v 0.500000 -0.156250 -0.015389 +v 0.460914 0.108578 -0.095821 +v 0.460914 0.110913 -0.104534 +v 0.460914 0.104534 -0.110913 +v 0.460914 0.095821 -0.108578 +v 0.460914 0.093486 -0.099865 +v 0.460914 0.099865 -0.093486 +v 0.460914 0.009021 -0.144532 +v 0.460914 0.004510 -0.152344 +v 0.460914 -0.004510 -0.152344 +v 0.460914 -0.009021 -0.144532 +v 0.460914 -0.004510 -0.136720 +v 0.460914 0.004510 -0.136720 +v 0.460914 -0.095821 -0.108578 +v 0.460914 -0.104534 -0.110913 +v 0.460914 -0.110913 -0.104534 +v 0.460914 -0.108578 -0.095821 +v 0.460914 -0.099865 -0.093486 +v 0.460914 -0.093486 -0.099865 +v 0.460914 -0.144532 -0.009021 +v 0.460914 -0.152344 -0.004510 +v 0.460914 -0.152344 0.004510 +v 0.460914 -0.144532 0.009021 +v 0.460914 -0.136720 0.004510 +v 0.460914 -0.136720 -0.004510 +v 0.460914 -0.108578 0.095821 +v 0.460914 -0.110913 0.104534 +v 0.460914 -0.104534 0.110913 +v 0.460914 -0.095821 0.108578 +v 0.460914 -0.093486 0.099865 +v 0.460914 -0.099865 0.093486 +v 0.460914 -0.009021 0.144532 +v 0.460914 -0.004510 0.152344 +v 0.460914 0.004510 0.152344 +v 0.460914 0.009021 0.144532 +v 0.460914 0.004510 0.136720 +v 0.460914 -0.004510 0.136720 +v 0.460914 0.095821 0.108578 +v 0.460914 0.104534 0.110913 +v 0.460914 0.110913 0.104534 +v 0.460914 0.108578 0.095821 +v 0.460914 0.099865 0.093486 +v 0.460914 0.093486 0.099865 +v 0.460914 0.144532 0.009021 +v 0.460914 0.152344 0.004510 +v 0.460914 0.152344 -0.004510 +v 0.460914 0.144532 -0.009021 +v 0.460914 0.136720 -0.004510 +v 0.460914 0.136720 0.004510 +v -0.130078 -0.460912 -0.063644 +v -0.139022 -0.460912 -0.062467 +v -0.142474 -0.460912 -0.054133 +v -0.136982 -0.460912 -0.046976 +v -0.128039 -0.460912 -0.048153 +v -0.124587 -0.460912 -0.056487 +v -0.046976 -0.460912 -0.136982 +v -0.054133 -0.460912 -0.142474 +v -0.062467 -0.460912 -0.139022 +v -0.063644 -0.460912 -0.130078 +v -0.056488 -0.460912 -0.124587 +v -0.048153 -0.460912 -0.128039 +v 0.063644 -0.460912 -0.130078 +v 0.062467 -0.460912 -0.139022 +v 0.054132 -0.460912 -0.142474 +v 0.046976 -0.460912 -0.136982 +v 0.048153 -0.460912 -0.128039 +v 0.056487 -0.460912 -0.124587 +v 0.136982 -0.460912 -0.046976 +v 0.142474 -0.460912 -0.054133 +v 0.139022 -0.460912 -0.062467 +v 0.130078 -0.460912 -0.063644 +v 0.124587 -0.460912 -0.056488 +v 0.128039 -0.460912 -0.048154 +v 0.130078 -0.460912 0.063644 +v 0.139022 -0.460912 0.062467 +v 0.142474 -0.460912 0.054132 +v 0.136982 -0.460912 0.046976 +v 0.128039 -0.460912 0.048153 +v 0.124587 -0.460912 0.056487 +v 0.046976 -0.460912 0.136982 +v 0.054133 -0.460912 0.142474 +v 0.062467 -0.460912 0.139022 +v 0.063644 -0.460912 0.130078 +v 0.056488 -0.460912 0.124587 +v 0.048153 -0.460912 0.128039 +v -0.063644 -0.460912 0.130078 +v -0.062467 -0.460912 0.139022 +v -0.054132 -0.460912 0.142474 +v -0.046976 -0.460912 0.136982 +v -0.048153 -0.460912 0.128039 +v -0.056487 -0.460912 0.124587 +v -0.136982 -0.460912 0.046976 +v -0.142474 -0.460912 0.054133 +v -0.139022 -0.460912 0.062467 +v -0.130078 -0.460912 0.063644 +v -0.124587 -0.460912 0.056488 +v -0.128039 -0.460912 0.048153 +v 0.156250 -0.468750 -0.015389 +v 0.150245 -0.468750 -0.045576 +v 0.138467 -0.468750 -0.074012 +v 0.121367 -0.468750 -0.099603 +v 0.099603 -0.468750 -0.121367 +v 0.074012 -0.468750 -0.138467 +v 0.045576 -0.468750 -0.150245 +v 0.015389 -0.468750 -0.156250 +v -0.015389 -0.468750 -0.156250 +v -0.045576 -0.468750 -0.150245 +v -0.074012 -0.468750 -0.138467 +v -0.099603 -0.468750 -0.121367 +v -0.121367 -0.468750 -0.099603 +v -0.138467 -0.468750 -0.074012 +v -0.150245 -0.468750 -0.045576 +v -0.156249 -0.468750 -0.015389 +v -0.156249 -0.468750 0.015389 +v -0.150245 -0.468750 0.045576 +v -0.138466 -0.468750 0.074012 +v -0.121367 -0.468750 0.099603 +v -0.099603 -0.468750 0.121367 +v -0.074012 -0.468750 0.138467 +v -0.045576 -0.468750 0.150245 +v -0.015389 -0.468750 0.156250 +v 0.015389 -0.468750 0.156250 +v 0.045576 -0.468750 0.150245 +v 0.074012 -0.468750 0.138467 +v 0.099603 -0.468750 0.121367 +v 0.121367 -0.468750 0.099603 +v 0.138467 -0.468750 0.074012 +v 0.150245 -0.468750 0.045576 +v 0.156250 -0.468750 0.015389 +v 0.138467 -0.500000 0.074012 +v 0.121367 -0.500000 0.099603 +v 0.099603 -0.500000 0.121367 +v 0.074012 -0.500000 0.138467 +v 0.045576 -0.500000 0.150245 +v 0.015389 -0.500000 0.156250 +v -0.015389 -0.500000 0.156250 +v -0.045576 -0.500000 0.150245 +v -0.074012 -0.500000 0.138467 +v -0.099603 -0.500000 0.121367 +v -0.121367 -0.500000 0.099603 +v -0.138466 -0.500000 0.074012 +v -0.150245 -0.500000 0.045576 +v -0.156249 -0.500000 0.015389 +v -0.156250 -0.500000 -0.015389 +v -0.150245 -0.500000 -0.045576 +v -0.138467 -0.500000 -0.074012 +v -0.121367 -0.500000 -0.099603 +v -0.099603 -0.500000 -0.121367 +v -0.074012 -0.500000 -0.138467 +v -0.045576 -0.500000 -0.150245 +v -0.015389 -0.500000 -0.156250 +v 0.015389 -0.500000 -0.156250 +v 0.045576 -0.500000 -0.150245 +v 0.074012 -0.500000 -0.138467 +v 0.099603 -0.500000 -0.121367 +v 0.121367 -0.500000 -0.099603 +v 0.138467 -0.500000 -0.074012 +v 0.150245 -0.500000 -0.045576 +v 0.156250 -0.500000 -0.015389 +v 0.156250 -0.500000 0.015389 +v 0.150245 -0.500000 0.045576 +v -0.095821 -0.460912 -0.108578 +v -0.104534 -0.460912 -0.110913 +v -0.110913 -0.460912 -0.104534 +v -0.108578 -0.460912 -0.095821 +v -0.099865 -0.460912 -0.093486 +v -0.093486 -0.460912 -0.099865 +v 0.009021 -0.460912 -0.144532 +v 0.004510 -0.460912 -0.152344 +v -0.004510 -0.460912 -0.152344 +v -0.009021 -0.460912 -0.144532 +v -0.004510 -0.460912 -0.136720 +v 0.004510 -0.460912 -0.136720 +v 0.108578 -0.460912 -0.095821 +v 0.110913 -0.460912 -0.104534 +v 0.104534 -0.460912 -0.110913 +v 0.095821 -0.460912 -0.108578 +v 0.093486 -0.460912 -0.099865 +v 0.099865 -0.460912 -0.093486 +v 0.144532 -0.460912 0.009021 +v 0.152344 -0.460912 0.004510 +v 0.152344 -0.460912 -0.004511 +v 0.144532 -0.460912 -0.009021 +v 0.136720 -0.460912 -0.004511 +v 0.136720 -0.460912 0.004510 +v 0.095821 -0.460912 0.108578 +v 0.104534 -0.460912 0.110913 +v 0.110913 -0.460912 0.104534 +v 0.108578 -0.460912 0.095821 +v 0.099865 -0.460912 0.093486 +v 0.093486 -0.460912 0.099865 +v -0.009021 -0.460912 0.144532 +v -0.004510 -0.460912 0.152344 +v 0.004510 -0.460912 0.152344 +v 0.009021 -0.460912 0.144532 +v 0.004510 -0.460912 0.136720 +v -0.004510 -0.460912 0.136720 +v -0.108578 -0.460912 0.095821 +v -0.110913 -0.460912 0.104534 +v -0.104534 -0.460912 0.110913 +v -0.095821 -0.460912 0.108578 +v -0.093486 -0.460912 0.099865 +v -0.099865 -0.460912 0.093486 +v -0.144532 -0.460912 -0.009021 +v -0.152344 -0.460912 -0.004510 +v -0.152344 -0.460912 0.004510 +v -0.144532 -0.460912 0.009021 +v -0.136720 -0.460912 0.004510 +v -0.136720 -0.460912 -0.004510 +v 0.468750 0.116832 -0.062448 +v 0.437501 0.110774 -0.059210 +v 0.437501 0.120197 -0.036461 +v 0.468750 0.126770 -0.038455 +v 0.468750 0.131837 -0.012985 +v 0.437501 0.125000 -0.012312 +v 0.468750 0.131837 0.012984 +v 0.437501 0.125001 0.012311 +v 0.468750 0.126770 0.038455 +v 0.437501 0.120197 0.036461 +v 0.468750 0.116832 0.062448 +v 0.437501 0.110774 0.059210 +v 0.468750 0.102404 0.084041 +v 0.437501 0.097094 0.079683 +v 0.437501 0.079683 0.097094 +v 0.468750 0.084041 0.102404 +v 0.468750 0.062448 0.116832 +v 0.437501 0.059210 0.110774 +v 0.468750 0.038455 0.126770 +v 0.437501 0.036461 0.120197 +v 0.468750 0.012985 0.131836 +v 0.437501 0.012312 0.125000 +v 0.437501 -0.012311 0.125000 +v 0.468750 -0.012985 0.131836 +v 0.437501 -0.036461 0.120197 +v 0.468750 -0.038455 0.126770 +v 0.468750 -0.062448 0.116832 +v 0.437501 -0.059210 0.110774 +v 0.437501 -0.079683 0.097094 +v 0.468750 -0.084041 0.102404 +v 0.437501 -0.097094 0.079683 +v 0.468750 -0.102404 0.084041 +v 0.468750 -0.116832 0.062448 +v 0.437501 -0.110774 0.059210 +v 0.437501 -0.120197 0.036461 +v 0.468750 -0.126770 0.038455 +v 0.468750 -0.131836 0.012985 +v 0.437501 -0.125000 0.012311 +v 0.437501 -0.125000 -0.012311 +v 0.468750 -0.131836 -0.012985 +v 0.468750 -0.126770 -0.038455 +v 0.437501 -0.120197 -0.036461 +v 0.437501 -0.110774 -0.059210 +v 0.468750 -0.116832 -0.062448 +v 0.437501 -0.097094 -0.079683 +v 0.468750 -0.102404 -0.084041 +v 0.437501 -0.079683 -0.097094 +v 0.468750 -0.084041 -0.102404 +v 0.437501 -0.059210 -0.110774 +v 0.468750 -0.062448 -0.116832 +v 0.437501 -0.036461 -0.120197 +v 0.468750 -0.038455 -0.126770 +v 0.437501 -0.012311 -0.125001 +v 0.468750 -0.012985 -0.131836 +v 0.468750 0.038455 -0.126770 +v 0.468750 0.012985 -0.131837 +v 0.437501 0.012311 -0.125001 +v 0.437501 0.036461 -0.120197 +v 0.468750 0.084041 -0.102404 +v 0.468750 0.062448 -0.116832 +v 0.437501 0.059210 -0.110774 +v 0.437501 0.079683 -0.097094 +v 0.468750 0.102404 -0.084041 +v 0.437501 0.097094 -0.079683 +v 0.468751 0.136982 -0.046976 +v 0.468751 0.142474 -0.054133 +v 0.468751 0.128039 -0.048153 +v 0.468751 0.139022 -0.062467 +v 0.468751 0.130078 -0.063644 +v 0.468751 0.124587 -0.056488 +v 0.468751 0.063644 -0.130078 +v 0.468751 0.062467 -0.139022 +v 0.468751 0.056487 -0.124587 +v 0.468751 0.054133 -0.142474 +v 0.468751 0.046976 -0.136982 +v 0.468751 0.048153 -0.128039 +v 0.468751 -0.046976 -0.136982 +v 0.468751 -0.054133 -0.142474 +v 0.468751 -0.048153 -0.128039 +v 0.468751 -0.062467 -0.139022 +v 0.468751 -0.063644 -0.130078 +v 0.468751 -0.056488 -0.124587 +v 0.468751 -0.130078 -0.063644 +v 0.468751 -0.139022 -0.062467 +v 0.468751 -0.124587 -0.056487 +v 0.468751 -0.142474 -0.054133 +v 0.468751 -0.136982 -0.046976 +v 0.468751 -0.128039 -0.048153 +v 0.468751 -0.136982 0.046976 +v 0.468751 -0.142474 0.054133 +v 0.468751 -0.128039 0.048153 +v 0.468751 -0.139022 0.062467 +v 0.468751 -0.130078 0.063644 +v 0.468751 -0.124587 0.056487 +v 0.468751 -0.063644 0.130078 +v 0.468751 -0.062467 0.139022 +v 0.468751 -0.056487 0.124587 +v 0.468751 -0.054132 0.142474 +v 0.468751 -0.046976 0.136982 +v 0.468751 -0.048153 0.128039 +v 0.468751 0.046976 0.136982 +v 0.468751 0.054133 0.142474 +v 0.468751 0.048153 0.128039 +v 0.468751 0.062467 0.139022 +v 0.468751 0.063644 0.130078 +v 0.468751 0.056487 0.124587 +v 0.468751 0.130078 0.063644 +v 0.468751 0.139022 0.062467 +v 0.468751 0.124587 0.056487 +v 0.468751 0.142474 0.054133 +v 0.468751 0.136982 0.046976 +v 0.468751 0.128039 0.048153 +v 0.312501 -0.059210 0.110774 +v 0.312501 -0.036461 0.120197 +v 0.312501 -0.079683 0.097094 +v 0.312501 -0.097094 0.079683 +v 0.312501 0.012311 -0.125000 +v 0.312501 -0.012311 -0.125000 +v 0.312501 0.125000 0.012311 +v 0.312501 0.125000 -0.012312 +v 0.312501 -0.012312 0.125000 +v 0.312501 0.079683 0.097094 +v 0.312501 0.059210 0.110774 +v 0.312501 -0.036461 -0.120197 +v 0.312501 -0.059210 -0.110774 +v 0.312501 -0.097094 -0.079683 +v 0.312501 -0.079683 -0.097094 +v 0.312501 0.120197 0.036461 +v 0.312501 0.097094 -0.079683 +v 0.312501 0.079683 -0.097094 +v 0.312501 0.110774 -0.059210 +v 0.312501 0.097094 0.079683 +v 0.312501 0.036461 0.120197 +v 0.312501 0.012312 0.125000 +v 0.312501 -0.110774 0.059210 +v 0.312501 -0.120197 0.036461 +v 0.312501 -0.125000 0.012311 +v 0.312501 -0.125000 -0.012311 +v 0.312501 -0.120197 -0.036461 +v 0.312501 -0.110774 -0.059210 +v 0.312501 0.120197 -0.036461 +v 0.468751 0.108578 -0.095821 +v 0.468751 0.110913 -0.104534 +v 0.468751 0.099865 -0.093486 +v 0.468751 0.104534 -0.110913 +v 0.468751 0.095821 -0.108578 +v 0.468751 0.093486 -0.099865 +v 0.468751 0.009021 -0.144532 +v 0.468751 0.004510 -0.152344 +v 0.468751 0.004510 -0.136720 +v 0.468751 -0.004510 -0.152344 +v 0.468751 -0.009021 -0.144532 +v 0.468751 -0.004510 -0.136720 +v 0.468751 -0.095821 -0.108578 +v 0.468751 -0.104534 -0.110913 +v 0.468751 -0.093486 -0.099865 +v 0.468751 -0.110913 -0.104534 +v 0.468751 -0.108578 -0.095821 +v 0.468751 -0.099865 -0.093486 +v 0.468751 -0.144532 -0.009021 +v 0.468751 -0.152344 -0.004510 +v 0.468751 -0.136720 -0.004510 +v 0.468751 -0.152344 0.004510 +v 0.468751 -0.144532 0.009021 +v 0.468751 -0.136720 0.004510 +v 0.468751 -0.108578 0.095821 +v 0.468751 -0.110913 0.104534 +v 0.468751 -0.099865 0.093486 +v 0.468751 -0.104534 0.110913 +v 0.468751 -0.095821 0.108578 +v 0.468751 -0.093486 0.099865 +v 0.468751 -0.009021 0.144532 +v 0.468751 -0.004510 0.152344 +v 0.468751 -0.004510 0.136720 +v 0.468751 0.004510 0.152344 +v 0.468751 0.009021 0.144532 +v 0.468751 0.004510 0.136720 +v 0.468751 0.095821 0.108578 +v 0.468751 0.104534 0.110913 +v 0.468751 0.093486 0.099865 +v 0.468751 0.110913 0.104534 +v 0.468751 0.108578 0.095821 +v 0.468751 0.099865 0.093486 +v 0.468751 0.144532 0.009021 +v 0.468751 0.152344 0.004510 +v 0.468751 0.136720 0.004510 +v 0.468751 0.152344 -0.004510 +v 0.468751 0.144532 -0.009021 +v 0.468751 0.136720 -0.004510 +v 0.312501 0.110774 0.059210 +v 0.012311 -0.312501 0.125000 +v -0.012312 -0.312501 0.125000 +v -0.012312 -0.437501 0.125000 +v 0.012311 -0.437501 0.125000 +v 0.036461 -0.312501 0.120197 +v 0.036461 -0.437501 0.120197 +v 0.059210 -0.312501 0.110774 +v 0.059210 -0.437501 0.110774 +v -0.036461 -0.312501 0.120197 +v -0.036461 -0.437501 0.120197 +v 0.079683 -0.312501 0.097094 +v 0.079683 -0.437501 0.097094 +v 0.097094 -0.437501 0.079683 +v 0.097094 -0.312501 0.079683 +v -0.012985 -0.468750 0.131836 +v -0.038455 -0.468750 0.126770 +v 0.012985 -0.468750 0.131836 +v 0.038455 -0.468750 0.126770 +v 0.079683 -0.312501 -0.097094 +v 0.097094 -0.312501 -0.079683 +v 0.097094 -0.437501 -0.079683 +v 0.079683 -0.437501 -0.097094 +v -0.059210 -0.437501 0.110774 +v -0.062448 -0.468750 0.116832 +v 0.062448 -0.468750 0.116832 +v 0.110774 -0.312501 0.059210 +v 0.110774 -0.437501 0.059210 +v -0.084041 -0.468750 0.102404 +v -0.079683 -0.437501 0.097094 +v 0.084041 -0.468750 0.102404 +v 0.120197 -0.312501 0.036461 +v 0.120197 -0.437501 0.036461 +v -0.097094 -0.312501 0.079683 +v -0.097094 -0.437501 0.079683 +v -0.079683 -0.312501 0.097094 +v -0.102404 -0.468750 0.084041 +v 0.102404 -0.468750 0.084041 +v -0.116832 -0.468750 0.062448 +v -0.110774 -0.437501 0.059210 +v 0.116832 -0.468750 0.062448 +v 0.125000 -0.312501 -0.012311 +v 0.125001 -0.312501 0.012311 +v 0.125001 -0.437501 0.012311 +v 0.125001 -0.437501 -0.012312 +v -0.125000 -0.312501 0.012311 +v -0.125000 -0.437501 0.012311 +v -0.120197 -0.437501 0.036461 +v -0.120197 -0.312501 0.036461 +v -0.126770 -0.468750 0.038455 +v 0.126770 -0.468750 0.038455 +v -0.131836 -0.468750 0.012985 +v 0.131837 -0.468750 0.012985 +v 0.110774 -0.312501 -0.059210 +v 0.120197 -0.312501 -0.036461 +v 0.120197 -0.437501 -0.036461 +v 0.110774 -0.437501 -0.059210 +v -0.125000 -0.312501 -0.012312 +v -0.120197 -0.312501 -0.036461 +v -0.120197 -0.437501 -0.036461 +v -0.125000 -0.437501 -0.012312 +v -0.131836 -0.468750 -0.012985 +v 0.131837 -0.468750 -0.012985 +v -0.097094 -0.312501 -0.079683 +v -0.079683 -0.312501 -0.097094 +v -0.079683 -0.437501 -0.097094 +v -0.097094 -0.437501 -0.079683 +v -0.126770 -0.468750 -0.038455 +v 0.126770 -0.468750 -0.038455 +v -0.116832 -0.468750 -0.062448 +v -0.110774 -0.437501 -0.059210 +v 0.116832 -0.468750 -0.062448 +v -0.102404 -0.468750 -0.084041 +v 0.102404 -0.468750 -0.084041 +v 0.012311 -0.312501 -0.125001 +v 0.012311 -0.437501 -0.125001 +v -0.012311 -0.437501 -0.125001 +v -0.012311 -0.312501 -0.125000 +v -0.084041 -0.468750 -0.102404 +v 0.084041 -0.468750 -0.102404 +v 0.059210 -0.437501 -0.110774 +v 0.059210 -0.312501 -0.110774 +v -0.036461 -0.312501 -0.120197 +v -0.036461 -0.437501 -0.120197 +v -0.062448 -0.468750 -0.116832 +v -0.059210 -0.437501 -0.110774 +v 0.062448 -0.468750 -0.116832 +v -0.038455 -0.468750 -0.126770 +v 0.038455 -0.468750 -0.126770 +v 0.036461 -0.437501 -0.120197 +v -0.012985 -0.468750 -0.131837 +v 0.012985 -0.468750 -0.131837 +v -0.130078 -0.468749 -0.063644 +v -0.139022 -0.468749 -0.062467 +v -0.124587 -0.468749 -0.056487 +v -0.142474 -0.468749 -0.054133 +v -0.136982 -0.468749 -0.046976 +v -0.128039 -0.468749 -0.048153 +v -0.046976 -0.468749 -0.136982 +v -0.054133 -0.468749 -0.142474 +v -0.048153 -0.468749 -0.128039 +v -0.062467 -0.468749 -0.139022 +v -0.063644 -0.468749 -0.130078 +v -0.056488 -0.468749 -0.124587 +v 0.063644 -0.468749 -0.130078 +v 0.062467 -0.468749 -0.139022 +v 0.056487 -0.468749 -0.124587 +v 0.054132 -0.468749 -0.142474 +v 0.046976 -0.468749 -0.136982 +v 0.048153 -0.468749 -0.128039 +v 0.136982 -0.468749 -0.046976 +v 0.142474 -0.468749 -0.054133 +v 0.128039 -0.468749 -0.048154 +v 0.139022 -0.468749 -0.062467 +v 0.130078 -0.468749 -0.063644 +v 0.124587 -0.468749 -0.056488 +v 0.130078 -0.468749 0.063644 +v 0.139022 -0.468749 0.062466 +v 0.124587 -0.468749 0.056487 +v 0.142474 -0.468749 0.054132 +v 0.136982 -0.468749 0.046976 +v 0.128039 -0.468749 0.048153 +v 0.046976 -0.468749 0.136982 +v 0.054133 -0.468749 0.142474 +v 0.048153 -0.468749 0.128039 +v 0.062467 -0.468749 0.139022 +v 0.063644 -0.468749 0.130078 +v 0.056488 -0.468749 0.124587 +v -0.063644 -0.468749 0.130078 +v -0.062467 -0.468749 0.139022 +v -0.056487 -0.468749 0.124587 +v -0.054132 -0.468749 0.142474 +v -0.046976 -0.468749 0.136982 +v -0.048153 -0.468749 0.128039 +v -0.136982 -0.468749 0.046976 +v -0.142474 -0.468749 0.054133 +v -0.128039 -0.468749 0.048153 +v -0.139022 -0.468749 0.062467 +v -0.130078 -0.468749 0.063644 +v -0.124587 -0.468749 0.056487 +v -0.110774 -0.312501 0.059210 +v -0.110774 -0.312501 -0.059210 +v 0.036461 -0.312501 -0.120197 +v -0.059210 -0.312501 -0.110774 +v -0.095821 -0.468749 -0.108578 +v -0.104534 -0.468749 -0.110913 +v -0.093486 -0.468749 -0.099865 +v -0.110913 -0.468749 -0.104534 +v -0.108578 -0.468749 -0.095821 +v -0.099865 -0.468749 -0.093486 +v 0.009021 -0.468749 -0.144532 +v 0.004510 -0.468749 -0.152344 +v 0.004510 -0.468749 -0.136720 +v -0.004510 -0.468749 -0.152344 +v -0.009021 -0.468749 -0.144532 +v -0.004510 -0.468749 -0.136720 +v 0.108578 -0.468749 -0.095821 +v 0.110913 -0.468749 -0.104534 +v 0.099865 -0.468749 -0.093486 +v 0.104534 -0.468749 -0.110913 +v 0.095821 -0.468749 -0.108578 +v 0.093486 -0.468749 -0.099865 +v 0.144532 -0.468749 0.009021 +v 0.152344 -0.468749 0.004510 +v 0.136720 -0.468749 0.004510 +v 0.152344 -0.468749 -0.004511 +v 0.144532 -0.468749 -0.009021 +v 0.136720 -0.468749 -0.004511 +v 0.095821 -0.468749 0.108578 +v 0.104534 -0.468749 0.110913 +v 0.093486 -0.468749 0.099865 +v 0.110913 -0.468749 0.104534 +v 0.108578 -0.468749 0.095821 +v 0.099865 -0.468749 0.093486 +v -0.009021 -0.468749 0.144532 +v -0.004510 -0.468749 0.152344 +v -0.004510 -0.468749 0.136720 +v 0.004510 -0.468749 0.152344 +v 0.009021 -0.468749 0.144532 +v 0.004510 -0.468749 0.136720 +v -0.108578 -0.468749 0.095821 +v -0.110913 -0.468749 0.104534 +v -0.099865 -0.468749 0.093486 +v -0.104534 -0.468749 0.110913 +v -0.095821 -0.468749 0.108578 +v -0.093486 -0.468749 0.099865 +v -0.144532 -0.468749 -0.009021 +v -0.152344 -0.468749 -0.004510 +v -0.136720 -0.468749 -0.004510 +v -0.152344 -0.468749 0.004510 +v -0.144532 -0.468749 0.009021 +v -0.136720 -0.468749 0.004510 +v -0.059210 -0.312501 0.110774 +v 0.312501 0.059210 -0.110774 +v 0.312501 0.036461 -0.120197 +v 0.278296 0.034781 0.120197 +v 0.280664 0.010748 0.125000 +v 0.271013 0.108736 0.059210 +v 0.272353 0.095122 0.079683 +v 0.269618 0.122894 -0.012312 +v 0.269618 0.122894 0.012311 +v 0.276067 0.057420 0.110774 +v 0.270089 0.118113 0.036461 +v 0.283077 -0.013757 -0.125000 +v 0.280664 0.010747 -0.125000 +v 0.274060 0.077795 0.097094 +v 0.270089 0.118113 -0.036461 +v 0.289681 -0.080804 0.097094 +v 0.291387 -0.098131 0.079683 +v 0.272353 0.095122 -0.079683 +v 0.271013 0.108736 -0.059210 +v 0.287674 -0.060430 0.110774 +v 0.278297 0.034781 -0.120197 +v 0.276067 0.057420 -0.110774 +v 0.274060 0.077795 -0.097094 +v 0.285444 -0.037790 0.120197 +v 0.289681 -0.080804 -0.097094 +v 0.287674 -0.060430 -0.110774 +v 0.292728 -0.111745 -0.059210 +v 0.291387 -0.098131 -0.079683 +v 0.285444 -0.037791 -0.120197 +v 0.293652 -0.121123 -0.036461 +v 0.294122 -0.125903 -0.012311 +v 0.294122 -0.125903 0.012311 +v 0.293652 -0.121123 0.036461 +v 0.292728 -0.111745 0.059210 +v 0.283077 -0.013757 0.125000 +v 0.227149 0.116594 0.012311 +v 0.228086 0.111883 0.036461 +v 0.275921 -0.128603 0.012311 +v 0.275921 -0.128603 -0.012311 +v 0.270477 -0.101233 -0.079683 +v 0.267080 -0.084157 -0.097094 +v 0.274984 -0.123892 0.036461 +v 0.244422 0.029756 -0.120197 +v 0.239984 0.052067 -0.110774 +v 0.273146 -0.114650 0.059210 +v 0.263086 -0.064077 -0.110774 +v 0.258648 -0.041765 -0.120197 +v 0.270477 -0.101233 0.079683 +v 0.235990 0.072147 0.097094 +v 0.239984 0.052068 0.110774 +v 0.249133 0.006071 0.125000 +v 0.253937 -0.018080 0.125000 +v 0.258648 -0.041765 0.120197 +v 0.244422 0.029756 0.120197 +v 0.229924 0.102641 0.059210 +v 0.232593 0.089224 0.079683 +v 0.227149 0.116594 -0.012312 +v 0.253937 -0.018079 -0.125000 +v 0.249133 0.006070 -0.125000 +v 0.228086 0.111883 -0.036461 +v 0.267080 -0.084157 0.097094 +v 0.232593 0.089224 -0.079683 +v 0.229924 0.102641 -0.059210 +v 0.263086 -0.064077 0.110774 +v 0.235990 0.072147 -0.097094 +v 0.273146 -0.114650 -0.059210 +v 0.274984 -0.123892 -0.036461 +v 0.238974 -0.070116 -0.110774 +v 0.232371 -0.048347 -0.120197 +v 0.249972 -0.106370 0.079683 +v 0.253943 -0.119460 0.059210 +v 0.198656 0.062796 0.097094 +v 0.204599 0.043204 0.110774 +v 0.218213 -0.001675 0.125000 +v 0.225361 -0.025238 0.125000 +v 0.232371 -0.048347 0.120197 +v 0.211203 0.021435 0.120197 +v 0.189631 0.092548 0.059210 +v 0.193602 0.079457 0.079683 +v 0.185501 0.106162 -0.012312 +v 0.185501 0.106162 0.012311 +v 0.186895 0.101565 0.036461 +v 0.225361 -0.025237 -0.125000 +v 0.218213 -0.001675 -0.125000 +v 0.186895 0.101565 -0.036461 +v 0.244918 -0.089708 0.097094 +v 0.193602 0.079457 -0.079683 +v 0.189631 0.092548 -0.059210 +v 0.238974 -0.070117 0.110774 +v 0.211203 0.021435 -0.120197 +v 0.204599 0.043204 -0.110774 +v 0.198656 0.062796 -0.097094 +v 0.244918 -0.089708 -0.097094 +v 0.253943 -0.119460 -0.059210 +v 0.249972 -0.106370 -0.079683 +v 0.256678 -0.128477 -0.036461 +v 0.258072 -0.133074 -0.012311 +v 0.258072 -0.133074 0.012311 +v 0.256678 -0.128477 0.036461 +v 0.145077 0.091698 -0.012312 +v 0.145077 0.091698 0.012311 +v 0.170253 0.030915 0.110774 +v 0.178959 0.009898 0.120197 +v 0.146915 0.087260 0.036461 +v 0.150521 0.078554 0.059210 +v 0.197623 -0.035162 -0.125000 +v 0.188201 -0.012413 -0.125000 +v 0.155756 0.065916 0.079683 +v 0.162419 0.049830 0.097094 +v 0.146915 0.087260 -0.036461 +v 0.223406 -0.097405 0.097094 +v 0.230068 -0.113491 0.079683 +v 0.155756 0.065916 -0.079683 +v 0.150521 0.078554 -0.059210 +v 0.215571 -0.078490 0.110774 +v 0.178959 0.009898 -0.120197 +v 0.170253 0.030915 -0.110774 +v 0.162419 0.049830 -0.097094 +v 0.206865 -0.057473 0.120197 +v 0.223406 -0.097405 -0.097094 +v 0.215571 -0.078490 -0.110774 +v 0.235303 -0.126129 -0.059210 +v 0.230068 -0.113491 -0.079683 +v 0.206865 -0.057473 -0.120197 +v 0.238909 -0.134835 -0.036461 +v 0.240748 -0.139273 -0.012311 +v 0.240748 -0.139273 0.012311 +v 0.238909 -0.134835 0.036461 +v 0.235303 -0.126129 0.059210 +v 0.188201 -0.012413 0.125000 +v 0.197624 -0.035162 0.125000 +v 0.193101 -0.089118 0.110774 +v 0.202752 -0.107174 0.097094 +v 0.159386 -0.026042 -0.125000 +v 0.148002 -0.004744 -0.120197 +v 0.137278 0.015319 -0.110774 +v 0.127627 0.033375 -0.097094 +v 0.182377 -0.069056 0.120197 +v 0.202752 -0.107174 -0.097094 +v 0.193101 -0.089118 -0.110774 +v 0.217408 -0.134594 -0.059210 +v 0.210959 -0.122529 -0.079683 +v 0.182377 -0.069056 -0.120197 +v 0.170993 -0.047757 -0.125000 +v 0.221850 -0.142904 -0.036461 +v 0.119419 0.048730 -0.079683 +v 0.224114 -0.147140 -0.012311 +v 0.106264 0.073341 0.012311 +v 0.108529 0.069104 0.036461 +v 0.224114 -0.147140 0.012311 +v 0.221850 -0.142904 0.036461 +v 0.217408 -0.134594 0.059210 +v 0.210959 -0.122529 0.079683 +v 0.127627 0.033375 0.097094 +v 0.137278 0.015319 0.110774 +v 0.159386 -0.026042 0.125000 +v 0.170993 -0.047757 0.125000 +v 0.148001 -0.004744 0.120197 +v 0.112971 0.060794 0.059210 +v 0.119419 0.048730 0.079683 +v 0.106264 0.073341 -0.012312 +v 0.108529 0.069104 -0.036461 +v 0.112971 0.060794 -0.059210 +v 0.094616 0.013588 -0.097094 +v 0.084942 0.028065 -0.079683 +v 0.208332 -0.156600 -0.012311 +v 0.205663 -0.152606 -0.036461 +v 0.069439 0.051268 0.012311 +v 0.072107 0.047274 0.036461 +v 0.208332 -0.156600 0.012311 +v 0.192828 -0.133397 -0.079683 +v 0.183155 -0.118920 -0.097094 +v 0.205663 -0.152606 0.036461 +v 0.118628 -0.022349 -0.120197 +v 0.105990 -0.003435 -0.110774 +v 0.200428 -0.144771 0.059210 +v 0.171780 -0.101897 -0.110774 +v 0.159142 -0.082982 -0.120197 +v 0.192828 -0.133397 0.079683 +v 0.094615 0.013588 0.097094 +v 0.105990 -0.003434 0.110774 +v 0.132045 -0.042429 0.125000 +v 0.145725 -0.062902 0.125000 +v 0.159142 -0.082982 0.120197 +v 0.118628 -0.022349 0.120197 +v 0.077342 0.039439 0.059210 +v 0.084942 0.028065 0.079683 +v 0.069439 0.051268 -0.012312 +v 0.145725 -0.062902 -0.125000 +v 0.132045 -0.042429 -0.125000 +v 0.072107 0.047274 -0.036461 +v 0.183155 -0.118920 0.097094 +v 0.077342 0.039439 -0.059210 +v 0.171780 -0.101897 0.110774 +v 0.200428 -0.144771 -0.059210 +v 0.091122 -0.042749 -0.120197 +v 0.076690 -0.025164 -0.110774 +v 0.184527 -0.156564 0.059210 +v 0.190505 -0.163848 0.036461 +v 0.151815 -0.116704 -0.110774 +v 0.137384 -0.099119 -0.120197 +v 0.175849 -0.145989 0.079683 +v 0.063702 -0.009338 0.097094 +v 0.076690 -0.025164 0.110774 +v 0.106442 -0.061417 0.125000 +v 0.122063 -0.080451 0.125000 +v 0.137384 -0.099119 0.120197 +v 0.091122 -0.042749 0.120197 +v 0.043979 0.014695 0.059210 +v 0.052657 0.004121 0.079683 +v 0.034953 0.025692 -0.012312 +v 0.034953 0.025692 0.012311 +v 0.038001 0.021979 0.036461 +v 0.122063 -0.080451 -0.125000 +v 0.106443 -0.061417 -0.125000 +v 0.038001 0.021979 -0.036461 +v 0.164803 -0.132530 0.097094 +v 0.052657 0.004121 -0.079683 +v 0.043979 0.014695 -0.059210 +v 0.151815 -0.116704 0.110774 +v 0.063702 -0.009338 -0.097094 +v 0.164803 -0.132530 -0.097094 +v 0.184527 -0.156564 -0.059210 +v 0.175849 -0.145989 -0.079683 +v 0.190505 -0.163848 -0.036461 +v 0.193552 -0.167561 -0.012311 +v 0.193552 -0.167561 0.012311 +v 0.100235 -0.100235 0.125000 +v 0.117312 -0.117311 0.120197 +v 0.065748 -0.065747 0.120197 +v 0.082824 -0.082823 0.125000 +v 0.013201 -0.013200 0.059210 +v 0.022874 -0.022873 0.079683 +v 0.003141 -0.003140 -0.012312 +v 0.003141 -0.003140 0.012311 +v 0.049662 -0.049661 0.110774 +v 0.006538 -0.006537 0.036461 +v 0.100235 -0.100235 -0.125000 +v 0.082824 -0.082824 -0.125000 +v 0.035185 -0.035185 0.097094 +v 0.006538 -0.006537 -0.036461 +v 0.147874 -0.147874 0.097094 +v 0.160186 -0.160185 0.079683 +v 0.022874 -0.022873 -0.079683 +v 0.013201 -0.013200 -0.059210 +v 0.133398 -0.133397 0.110774 +v 0.065748 -0.065747 -0.120197 +v 0.049662 -0.049661 -0.110774 +v 0.035185 -0.035185 -0.097094 +v 0.147874 -0.147874 -0.097094 +v 0.133398 -0.133397 -0.110774 +v 0.169859 -0.169858 -0.059210 +v 0.160186 -0.160185 -0.079683 +v 0.117312 -0.117311 -0.120197 +v 0.176522 -0.176521 -0.036461 +v 0.179918 -0.179918 -0.012311 +v 0.179918 -0.179918 0.012311 +v 0.176522 -0.176521 0.036461 +v 0.169859 -0.169858 0.059210 +v -0.021978 -0.038000 -0.036461 +v -0.025692 -0.034953 -0.012312 +v 0.132531 -0.164802 0.097094 +v 0.145990 -0.175848 0.079683 +v -0.004120 -0.052656 -0.079683 +v -0.014694 -0.043978 -0.059210 +v 0.116705 -0.151814 0.110774 +v 0.061418 -0.106442 -0.125000 +v 0.042750 -0.091121 -0.120197 +v 0.025165 -0.076690 -0.110774 +v 0.009339 -0.063702 -0.097094 +v 0.099120 -0.137383 0.120197 +v 0.132531 -0.164802 -0.097094 +v 0.116705 -0.151814 -0.110774 +v 0.156564 -0.184526 -0.059210 +v 0.145990 -0.175848 -0.079683 +v 0.099120 -0.137383 -0.120197 +v 0.080452 -0.122062 -0.125000 +v 0.163848 -0.190504 -0.036461 +v 0.167562 -0.193552 -0.012311 +v -0.025692 -0.034953 0.012311 +v -0.021978 -0.038000 0.036461 +v 0.167562 -0.193551 0.012311 +v 0.163848 -0.190504 0.036461 +v 0.156564 -0.184526 0.059210 +v 0.009339 -0.063702 0.097094 +v 0.025165 -0.076690 0.110774 +v 0.061418 -0.106442 0.125000 +v 0.080452 -0.122062 0.125000 +v 0.042750 -0.091121 0.120197 +v -0.014694 -0.043978 0.059210 +v -0.004120 -0.052656 0.079683 +v 0.144772 -0.200427 -0.059210 +v 0.133397 -0.192827 -0.079683 +v 0.082983 -0.159141 -0.120197 +v 0.062903 -0.145724 -0.125000 +v 0.152606 -0.205662 -0.036461 +v -0.013588 -0.094615 -0.097094 +v -0.028064 -0.084942 -0.079683 +v 0.156601 -0.208331 -0.012311 +v -0.051268 -0.069438 0.012311 +v -0.047273 -0.072106 0.036461 +v 0.156601 -0.208331 0.012311 +v 0.118921 -0.183154 -0.097094 +v 0.152606 -0.205662 0.036461 +v 0.022350 -0.118627 -0.120197 +v 0.003435 -0.105989 -0.110774 +v 0.144772 -0.200427 0.059210 +v 0.101898 -0.171779 -0.110774 +v 0.133397 -0.192827 0.079683 +v -0.013588 -0.094615 0.097094 +v 0.003435 -0.105989 0.110774 +v 0.042430 -0.132044 0.125000 +v 0.062903 -0.145724 0.125000 +v 0.082983 -0.159141 0.120197 +v 0.022350 -0.118627 0.120197 +v -0.039439 -0.077342 0.059210 +v -0.028064 -0.084942 0.079683 +v -0.051268 -0.069438 -0.012312 +v 0.042430 -0.132044 -0.125000 +v -0.047273 -0.072107 -0.036461 +v 0.118921 -0.183154 0.097094 +v -0.039439 -0.077342 -0.059210 +v 0.101898 -0.171780 0.110774 +v 0.122530 -0.210958 -0.079683 +v 0.107175 -0.202751 -0.097094 +v 0.142904 -0.221849 0.036461 +v 0.147141 -0.224113 0.012311 +v 0.004744 -0.148001 -0.120197 +v -0.015318 -0.137277 -0.110774 +v 0.134594 -0.217407 0.059210 +v 0.089119 -0.193100 -0.110774 +v 0.069056 -0.182376 -0.120197 +v 0.122530 -0.210958 0.079683 +v -0.033374 -0.127626 0.097094 +v -0.015318 -0.137277 0.110774 +v 0.026042 -0.159385 0.125000 +v 0.047758 -0.170992 0.125000 +v 0.069056 -0.182376 0.120197 +v 0.004744 -0.148001 0.120197 +v -0.060794 -0.112970 0.059210 +v -0.048729 -0.119419 0.079683 +v -0.073340 -0.106264 -0.012312 +v -0.073340 -0.106264 0.012311 +v -0.069104 -0.108528 0.036461 +v 0.047758 -0.170992 -0.125000 +v 0.026043 -0.159385 -0.125000 +v -0.069104 -0.108528 -0.036461 +v 0.107175 -0.202751 0.097094 +v -0.048729 -0.119419 -0.079683 +v -0.060794 -0.112970 -0.059210 +v 0.089119 -0.193100 0.110774 +v -0.033374 -0.127626 -0.097094 +v 0.134594 -0.217407 -0.059210 +v 0.142904 -0.221849 -0.036461 +v 0.147141 -0.224113 -0.012311 +v -0.049829 -0.162418 0.097094 +v -0.030915 -0.170253 0.110774 +v 0.012414 -0.188200 0.125000 +v 0.035163 -0.197623 0.125000 +v 0.057474 -0.206864 0.120197 +v -0.009897 -0.178958 0.120197 +v -0.078553 -0.150520 0.059210 +v -0.065915 -0.155755 0.079683 +v -0.091697 -0.145076 -0.012312 +v -0.091697 -0.145076 0.012311 +v -0.087259 -0.146914 0.036461 +v 0.035163 -0.197623 -0.125000 +v 0.012414 -0.188200 -0.125000 +v -0.087259 -0.146914 -0.036461 +v 0.097406 -0.223405 0.097094 +v 0.113492 -0.230068 0.079683 +v -0.065915 -0.155755 -0.079683 +v -0.078553 -0.150520 -0.059210 +v 0.078491 -0.215570 0.110774 +v -0.009897 -0.178958 -0.120197 +v -0.030914 -0.170253 -0.110774 +v -0.049829 -0.162418 -0.097094 +v 0.097406 -0.223405 -0.097094 +v 0.078491 -0.215570 -0.110774 +v 0.126130 -0.235303 -0.059210 +v 0.113492 -0.230068 -0.079683 +v 0.057474 -0.206864 -0.120197 +v 0.134836 -0.238909 -0.036461 +v 0.139274 -0.240747 -0.012311 +v 0.139274 -0.240747 0.012311 +v 0.134836 -0.238909 0.036461 +v 0.126130 -0.235303 0.059210 +v -0.101564 -0.186895 0.036461 +v -0.092547 -0.189630 0.059210 +v 0.025238 -0.225360 -0.125000 +v 0.001676 -0.218212 -0.125000 +v -0.079456 -0.193601 0.079683 +v -0.062795 -0.198655 0.097094 +v -0.101564 -0.186895 -0.036461 +v -0.106161 -0.185500 -0.012312 +v 0.089709 -0.244917 0.097094 +v 0.106370 -0.249971 0.079683 +v -0.079456 -0.193601 -0.079683 +v -0.092547 -0.189630 -0.059210 +v 0.070117 -0.238974 0.110774 +v -0.021434 -0.211202 -0.120197 +v -0.043203 -0.204598 -0.110774 +v -0.062795 -0.198655 -0.097094 +v 0.048348 -0.232370 0.120197 +v 0.089709 -0.244917 -0.097094 +v 0.070117 -0.238974 -0.110774 +v 0.119461 -0.253942 -0.059210 +v 0.106370 -0.249971 -0.079683 +v 0.048348 -0.232370 -0.120197 +v 0.128478 -0.256677 -0.036461 +v 0.133075 -0.258072 -0.012311 +v -0.106161 -0.185500 0.012311 +v 0.133075 -0.258072 0.012311 +v 0.128478 -0.256677 0.036461 +v 0.119461 -0.253942 0.059210 +v -0.043204 -0.204598 0.110774 +v 0.001675 -0.218212 0.125000 +v 0.025238 -0.225360 0.125000 +v -0.021434 -0.211202 0.120197 +v -0.052067 -0.239983 -0.110774 +v -0.072147 -0.235989 -0.097094 +v 0.041766 -0.258647 0.120197 +v 0.064078 -0.263085 0.110774 +v 0.084157 -0.267080 -0.097094 +v 0.064077 -0.263085 -0.110774 +v 0.114651 -0.273145 -0.059210 +v 0.101234 -0.270476 -0.079683 +v 0.041766 -0.258647 -0.120197 +v 0.018080 -0.253936 -0.125000 +v 0.123893 -0.274983 -0.036461 +v -0.089223 -0.232592 -0.079683 +v 0.128604 -0.275921 -0.012311 +v -0.116593 -0.227148 0.012311 +v -0.111882 -0.228085 0.036461 +v 0.128604 -0.275921 0.012311 +v 0.123893 -0.274983 0.036461 +v -0.029755 -0.244421 -0.120197 +v 0.114651 -0.273145 0.059210 +v 0.101234 -0.270476 0.079683 +v -0.072147 -0.235989 0.097094 +v -0.052067 -0.239983 0.110774 +v -0.006070 -0.249132 0.125000 +v 0.018080 -0.253936 0.125000 +v -0.029755 -0.244421 0.120197 +v -0.102640 -0.229923 0.059210 +v -0.089223 -0.232592 0.079683 +v -0.116593 -0.227148 -0.012312 +v -0.006070 -0.249132 -0.125000 +v -0.111882 -0.228085 -0.036461 +v 0.084157 -0.267080 0.097094 +v -0.102640 -0.229923 -0.059210 +v 0.125904 -0.294122 -0.012311 +v 0.121124 -0.293651 -0.036461 +v -0.122893 -0.269617 0.012311 +v -0.118112 -0.270088 0.036461 +v 0.125904 -0.294122 0.012311 +v 0.098132 -0.291386 -0.079683 +v 0.080805 -0.289680 -0.097094 +v 0.121124 -0.293651 0.036461 +v -0.034780 -0.278296 -0.120197 +v -0.057419 -0.276066 -0.110774 +v 0.111746 -0.292727 0.059210 +v 0.060430 -0.287673 -0.110774 +v 0.037791 -0.285443 -0.120197 +v 0.098132 -0.291386 0.079683 +v -0.077794 -0.274059 0.097094 +v -0.057419 -0.276066 0.110774 +v -0.010747 -0.280663 0.125000 +v 0.013758 -0.283076 0.125000 +v 0.037791 -0.285443 0.120197 +v -0.034780 -0.278296 0.120197 +v -0.108735 -0.271012 0.059210 +v -0.095121 -0.272353 0.079683 +v -0.122893 -0.269617 -0.012312 +v 0.013758 -0.283076 -0.125000 +v -0.010747 -0.280663 -0.125000 +v -0.118112 -0.270088 -0.036461 +v 0.080805 -0.289680 0.097094 +v -0.095121 -0.272353 -0.079683 +v -0.108735 -0.271012 -0.059210 +v 0.060430 -0.287673 0.110774 +v -0.077794 -0.274059 -0.097094 +v 0.111746 -0.292727 -0.059210 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.5625 0.0156 +vt 0.5625 0.0469 +vt 0.5312 0.0469 +vt 0.5312 0.0156 +vt 0.5000 0.0156 +vt 0.5000 0.0469 +vt 0.4688 0.0156 +vt 0.4688 0.0469 +vt 0.4375 0.0156 +vt 0.4375 0.0469 +vt 0.4062 0.0156 +vt 0.4062 0.0469 +vt 0.3750 0.0156 +vt 0.3750 0.0469 +vt 0.3438 0.0469 +vt 0.3438 0.0156 +vt 0.3125 0.0156 +vt 0.3125 0.0469 +vt 0.2812 0.0156 +vt 0.2812 0.0469 +vt 0.2500 0.0156 +vt 0.2500 0.0469 +vt 0.2188 0.0469 +vt 0.2188 0.0156 +vt 0.1875 0.0469 +vt 0.1875 0.0156 +vt 0.1562 0.0156 +vt 0.1562 0.0469 +vt 0.1250 0.0469 +vt 0.1250 0.0156 +vt 0.0938 0.0469 +vt 0.0938 0.0156 +vt 0.0625 0.0156 +vt 0.0625 0.0469 +vt 0.0312 0.0469 +vt 0.0312 0.0156 +vt -0.0000 0.0156 +vt 0.0000 0.0469 +vt 1.0000 0.0156 +vt 1.0000 0.0469 +vt 0.9688 0.0469 +vt 0.9688 0.0156 +vt 0.9375 0.0156 +vt 0.9375 0.0469 +vt 0.9062 0.0469 +vt 0.9062 0.0156 +vt 0.8750 0.0469 +vt 0.8750 0.0156 +vt 0.8438 0.0469 +vt 0.8438 0.0156 +vt 0.8125 0.0469 +vt 0.8125 0.0156 +vt 0.7812 0.0469 +vt 0.7812 0.0156 +vt 0.7500 0.0469 +vt 0.7500 0.0156 +vt 0.6875 0.0156 +vt 0.7188 0.0156 +vt 0.7188 0.0469 +vt 0.6875 0.0469 +vt 0.6250 0.0156 +vt 0.6562 0.0156 +vt 0.6562 0.0469 +vt 0.6250 0.0469 +vt 0.5938 0.0156 +vt 0.5938 0.0469 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.1562 0.1406 +vt 0.1875 0.1406 +vt 0.1250 0.1406 +vt 0.0938 0.1406 +vt 0.7188 0.1406 +vt 0.7500 0.1406 +vt 0.4688 0.1406 +vt 0.5000 0.1406 +vt 0.2188 0.1406 +vt 0.3438 0.1406 +vt 0.3125 0.1406 +vt 0.7812 0.1406 +vt 0.8125 0.1406 +vt 0.8750 0.1406 +vt 0.8438 0.1406 +vt 0.4375 0.1406 +vt 0.5938 0.1406 +vt 0.6250 0.1406 +vt 0.5625 0.1406 +vt 0.3750 0.1406 +vt 0.2812 0.1406 +vt 0.2500 0.1406 +vt 0.0625 0.1406 +vt 0.0312 0.1406 +vt 0.0000 0.1406 +vt 1.0000 0.1406 +vt 0.9688 0.1406 +vt 0.9375 0.1406 +vt 0.9062 0.1406 +vt 0.5312 0.1406 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4062 0.1406 +vt 0.2188 0.3906 +vt 0.2500 0.3906 +vt 0.2500 0.4844 +vt 0.2188 0.4844 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.1562 0.3906 +vt 0.1562 0.4844 +vt 0.2812 0.3906 +vt 0.2812 0.4844 +vt 0.1250 0.3906 +vt 0.1250 0.4844 +vt 0.0938 0.4844 +vt 0.0938 0.3906 +vt 0.2500 0.5156 +vt 0.2812 0.5156 +vt 0.2188 0.5156 +vt 0.1875 0.5156 +vt 0.8438 0.3906 +vt 0.8750 0.3906 +vt 0.8750 0.4844 +vt 0.8438 0.4844 +vt 0.3125 0.4844 +vt 0.3125 0.5156 +vt 0.1562 0.5156 +vt 0.0625 0.3906 +vt 0.0625 0.4844 +vt 0.3438 0.5156 +vt 0.3438 0.4844 +vt 0.1250 0.5156 +vt 0.0312 0.3906 +vt 0.0312 0.4844 +vt 0.3750 0.3906 +vt 0.3750 0.4844 +vt 0.3438 0.3906 +vt 0.3750 0.5156 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 0.0938 0.5156 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.4062 0.5156 +vt 0.4062 0.4844 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.0625 0.5156 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.9688 0.3906 +vt 1.0000 0.3906 +vt 1.0000 0.4844 +vt 0.9688 0.4844 +vt 0.4688 0.3906 +vt 0.4688 0.4844 +vt 0.4375 0.4844 +vt 0.4375 0.3906 +vt 0.4375 0.5156 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.0312 0.5156 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.4688 0.5156 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 0.0000 0.5156 +vt 0.0000 0.4844 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.9062 0.3906 +vt 0.9375 0.3906 +vt 0.9375 0.4844 +vt 0.9062 0.4844 +vt 0.5000 0.3906 +vt 0.5312 0.3906 +vt 0.5312 0.4844 +vt 0.5000 0.4844 +vt 0.5000 0.5156 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.9688 0.5156 +vt 1.0000 0.5156 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5938 0.3906 +vt 0.6250 0.3906 +vt 0.6250 0.4844 +vt 0.5938 0.4844 +vt 0.5312 0.5156 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.9375 0.5156 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.5625 0.5156 +vt 0.5625 0.4844 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.9062 0.5156 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.5938 0.5156 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.8750 0.5156 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.7500 0.3906 +vt 0.7500 0.4844 +vt 0.7188 0.4844 +vt 0.7188 0.3906 +vt 0.6250 0.5156 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.8438 0.5156 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.8125 0.4844 +vt 0.8125 0.3906 +vt 0.6875 0.3906 +vt 0.6875 0.4844 +vt 0.6562 0.5156 +vt 0.6562 0.4844 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.8125 0.5156 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.6875 0.5156 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.7812 0.5156 +vt 0.7812 0.4844 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.7188 0.5156 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.7500 0.5156 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4062 0.3906 +vt 0.5625 0.3906 +vt 0.7812 0.3906 +vt 0.0000 0.3906 +vt 0.6562 0.3906 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.3125 0.3906 +vt 0.6562 0.1406 +vt 0.6875 0.1406 +vt 0.2812 0.1562 +vt 0.2500 0.1562 +vt 0.4062 0.1562 +vt 0.3750 0.1562 +vt 0.5000 0.1562 +vt 0.4688 0.1562 +vt 0.3125 0.1562 +vt 0.4375 0.1562 +vt 0.7500 0.1562 +vt 0.7188 0.1562 +vt 0.3438 0.1562 +vt 0.5312 0.1562 +vt 0.1250 0.1562 +vt 0.0938 0.1562 +vt 0.5938 0.1562 +vt 0.5625 0.1562 +vt 0.1562 0.1562 +vt 0.6875 0.1562 +vt 0.6562 0.1562 +vt 0.6250 0.1562 +vt 0.1875 0.1562 +vt 0.8438 0.1562 +vt 0.8125 0.1562 +vt 0.9062 0.1562 +vt 0.8750 0.1562 +vt 0.7812 0.1562 +vt 0.9375 0.1562 +vt 0.9688 0.1562 +vt 1.0000 0.1562 +vt 0.0312 0.1562 +vt 0.0000 0.1562 +vt 0.0625 0.1562 +vt 0.2188 0.1562 +vt 0.4688 0.1719 +vt 0.4375 0.1719 +vt 1.0000 0.1719 +vt 0.9688 0.1719 +vt 0.8750 0.1719 +vt 0.8438 0.1719 +vt 0.0312 0.1719 +vt 0.0000 0.1719 +vt 0.6875 0.1719 +vt 0.6562 0.1719 +vt 0.0625 0.1719 +vt 0.8125 0.1719 +vt 0.7812 0.1719 +vt 0.0938 0.1719 +vt 0.3438 0.1719 +vt 0.3125 0.1719 +vt 0.2500 0.1719 +vt 0.2188 0.1719 +vt 0.1875 0.1719 +vt 0.2812 0.1719 +vt 0.4062 0.1719 +vt 0.3750 0.1719 +vt 0.5000 0.1719 +vt 0.7500 0.1719 +vt 0.7188 0.1719 +vt 0.5312 0.1719 +vt 0.1250 0.1719 +vt 0.5938 0.1719 +vt 0.5625 0.1719 +vt 0.1562 0.1719 +vt 0.6250 0.1719 +vt 0.9062 0.1719 +vt 0.9375 0.1719 +vt 0.8125 0.1875 +vt 0.7812 0.1875 +vt 0.0938 0.1875 +vt 0.0625 0.1875 +vt 0.3438 0.1875 +vt 0.3125 0.1875 +vt 0.2500 0.1875 +vt 0.2188 0.1875 +vt 0.1875 0.1875 +vt 0.2812 0.1875 +vt 0.4062 0.1875 +vt 0.3750 0.1875 +vt 0.5000 0.1875 +vt 0.4688 0.1875 +vt 0.4375 0.1875 +vt 0.7500 0.1875 +vt 0.7188 0.1875 +vt 0.5312 0.1875 +vt 0.1250 0.1875 +vt 0.5938 0.1875 +vt 0.5625 0.1875 +vt 0.1562 0.1875 +vt 0.6875 0.1875 +vt 0.6562 0.1875 +vt 0.6250 0.1875 +vt 0.8438 0.1875 +vt 0.9062 0.1875 +vt 0.8750 0.1875 +vt 0.9375 0.1875 +vt 0.9688 0.1875 +vt 1.0000 0.1875 +vt 0.0312 0.1875 +vt 0.0000 0.1875 +vt 0.5000 0.2031 +vt 0.4688 0.2031 +vt 0.3125 0.2031 +vt 0.2812 0.2031 +vt 0.4375 0.2031 +vt 0.4062 0.2031 +vt 0.7500 0.2031 +vt 0.7188 0.2031 +vt 0.3750 0.2031 +vt 0.3438 0.2031 +vt 0.5312 0.2031 +vt 0.1250 0.2031 +vt 0.0938 0.2031 +vt 0.5938 0.2031 +vt 0.5625 0.2031 +vt 0.1562 0.2031 +vt 0.6875 0.2031 +vt 0.6562 0.2031 +vt 0.6250 0.2031 +vt 0.1875 0.2031 +vt 0.8438 0.2031 +vt 0.8125 0.2031 +vt 0.9062 0.2031 +vt 0.8750 0.2031 +vt 0.7812 0.2031 +vt 0.9375 0.2031 +vt 0.9688 0.2031 +vt 1.0000 0.2031 +vt 0.0312 0.2031 +vt 0.0000 0.2031 +vt 0.0625 0.2031 +vt 0.2500 0.2031 +vt 0.2188 0.2031 +vt 0.1562 0.2188 +vt 0.1250 0.2188 +vt 0.7188 0.2188 +vt 0.6875 0.2188 +vt 0.6562 0.2188 +vt 0.6250 0.2188 +vt 0.1875 0.2188 +vt 0.8438 0.2188 +vt 0.8125 0.2188 +vt 0.9062 0.2188 +vt 0.8750 0.2188 +vt 0.7812 0.2188 +vt 0.7500 0.2188 +vt 0.9375 0.2188 +vt 0.5938 0.2188 +vt 0.9688 0.2188 +vt 0.4688 0.2188 +vt 0.4375 0.2188 +vt 1.0000 0.2188 +vt 0.0312 0.2188 +vt 0.0000 0.2188 +vt 0.0625 0.2188 +vt 0.0938 0.2188 +vt 0.3438 0.2188 +vt 0.3125 0.2188 +vt 0.2500 0.2188 +vt 0.2188 0.2188 +vt 0.2812 0.2188 +vt 0.4062 0.2188 +vt 0.3750 0.2188 +vt 0.5000 0.2188 +vt 0.5312 0.2188 +vt 0.5625 0.2188 +vt 0.6250 0.2344 +vt 0.5938 0.2344 +vt 0.9688 0.2344 +vt 0.9375 0.2344 +vt 0.4688 0.2344 +vt 0.4375 0.2344 +vt 1.0000 0.2344 +vt 0.8750 0.2344 +vt 0.8438 0.2344 +vt 0.0312 0.2344 +vt 0.0000 0.2344 +vt 0.6875 0.2344 +vt 0.6562 0.2344 +vt 0.0625 0.2344 +vt 0.8125 0.2344 +vt 0.7812 0.2344 +vt 0.0938 0.2344 +vt 0.3438 0.2344 +vt 0.3125 0.2344 +vt 0.2500 0.2344 +vt 0.2188 0.2344 +vt 0.1875 0.2344 +vt 0.2812 0.2344 +vt 0.4062 0.2344 +vt 0.3750 0.2344 +vt 0.5000 0.2344 +vt 0.7500 0.2344 +vt 0.7188 0.2344 +vt 0.5312 0.2344 +vt 0.1250 0.2344 +vt 0.5625 0.2344 +vt 0.1562 0.2344 +vt 0.9062 0.2344 +vt 0.6875 0.2500 +vt 0.6562 0.2500 +vt 0.0625 0.2500 +vt 0.0312 0.2500 +vt 0.8125 0.2500 +vt 0.7812 0.2500 +vt 0.0938 0.2500 +vt 0.3438 0.2500 +vt 0.3125 0.2500 +vt 0.2500 0.2500 +vt 0.2188 0.2500 +vt 0.1875 0.2500 +vt 0.2812 0.2500 +vt 0.4062 0.2500 +vt 0.3750 0.2500 +vt 0.5000 0.2500 +vt 0.4688 0.2500 +vt 0.4375 0.2500 +vt 0.7500 0.2500 +vt 0.7188 0.2500 +vt 0.5312 0.2500 +vt 0.1250 0.2500 +vt 0.5938 0.2500 +vt 0.5625 0.2500 +vt 0.1562 0.2500 +vt 0.6250 0.2500 +vt 0.8438 0.2500 +vt 0.9062 0.2500 +vt 0.8750 0.2500 +vt 0.9375 0.2500 +vt 0.9688 0.2500 +vt 1.0000 0.2500 +vt 0.0000 0.2500 +vt 0.2188 0.2656 +vt 0.1875 0.2656 +vt 0.2812 0.2656 +vt 0.2500 0.2656 +vt 0.4062 0.2656 +vt 0.3750 0.2656 +vt 0.5000 0.2656 +vt 0.4688 0.2656 +vt 0.3125 0.2656 +vt 0.4375 0.2656 +vt 0.7500 0.2656 +vt 0.7188 0.2656 +vt 0.3438 0.2656 +vt 0.5312 0.2656 +vt 0.1250 0.2656 +vt 0.0938 0.2656 +vt 0.5938 0.2656 +vt 0.5625 0.2656 +vt 0.1562 0.2656 +vt 0.6875 0.2656 +vt 0.6562 0.2656 +vt 0.6250 0.2656 +vt 0.8438 0.2656 +vt 0.8125 0.2656 +vt 0.9062 0.2656 +vt 0.8750 0.2656 +vt 0.7812 0.2656 +vt 0.9375 0.2656 +vt 0.9688 0.2656 +vt 1.0000 0.2656 +vt 0.0312 0.2656 +vt 0.0000 0.2656 +vt 0.0625 0.2656 +vt 0.5312 0.2812 +vt 0.5000 0.2812 +vt 0.1250 0.2812 +vt 0.0938 0.2812 +vt 0.5938 0.2812 +vt 0.5625 0.2812 +vt 0.1562 0.2812 +vt 0.7188 0.2812 +vt 0.6875 0.2812 +vt 0.6562 0.2812 +vt 0.6250 0.2812 +vt 0.1875 0.2812 +vt 0.8438 0.2812 +vt 0.8125 0.2812 +vt 0.9062 0.2812 +vt 0.8750 0.2812 +vt 0.7812 0.2812 +vt 0.7500 0.2812 +vt 0.9375 0.2812 +vt 0.9688 0.2812 +vt 0.4688 0.2812 +vt 0.4375 0.2812 +vt 1.0000 0.2812 +vt 0.0312 0.2812 +vt 0.0000 0.2812 +vt 0.0625 0.2812 +vt 0.3438 0.2812 +vt 0.3125 0.2812 +vt 0.2500 0.2812 +vt 0.2188 0.2812 +vt 0.2812 0.2812 +vt 0.4062 0.2812 +vt 0.3750 0.2812 +vt 0.9062 0.2969 +vt 0.8750 0.2969 +vt 0.7812 0.2969 +vt 0.7500 0.2969 +vt 0.9375 0.2969 +vt 0.6250 0.2969 +vt 0.5938 0.2969 +vt 0.9688 0.2969 +vt 0.4688 0.2969 +vt 0.4375 0.2969 +vt 1.0000 0.2969 +vt 0.8438 0.2969 +vt 0.0312 0.2969 +vt 0.0000 0.2969 +vt 0.6875 0.2969 +vt 0.6562 0.2969 +vt 0.0625 0.2969 +vt 0.8125 0.2969 +vt 0.0938 0.2969 +vt 0.3438 0.2969 +vt 0.3125 0.2969 +vt 0.2500 0.2969 +vt 0.2188 0.2969 +vt 0.1875 0.2969 +vt 0.2812 0.2969 +vt 0.4062 0.2969 +vt 0.3750 0.2969 +vt 0.5000 0.2969 +vt 0.7188 0.2969 +vt 0.5312 0.2969 +vt 0.1250 0.2969 +vt 0.5625 0.2969 +vt 0.1562 0.2969 +vt 0.8750 0.3125 +vt 0.8438 0.3125 +vt 0.0312 0.3125 +vt 0.0000 0.3125 +vt 0.6875 0.3125 +vt 0.6562 0.3125 +vt 0.0625 0.3125 +vt 0.8125 0.3125 +vt 0.7812 0.3125 +vt 0.0938 0.3125 +vt 0.3438 0.3125 +vt 0.3125 0.3125 +vt 0.2500 0.3125 +vt 0.2188 0.3125 +vt 0.1875 0.3125 +vt 0.2812 0.3125 +vt 0.4062 0.3125 +vt 0.3750 0.3125 +vt 0.5000 0.3125 +vt 0.4688 0.3125 +vt 0.4375 0.3125 +vt 0.7500 0.3125 +vt 0.7188 0.3125 +vt 0.5312 0.3125 +vt 0.1250 0.3125 +vt 0.5938 0.3125 +vt 0.5625 0.3125 +vt 0.1562 0.3125 +vt 0.6250 0.3125 +vt 0.9062 0.3125 +vt 0.9375 0.3125 +vt 0.9688 0.3125 +vt 1.0000 0.3125 +vt 0.3438 0.3281 +vt 0.3125 0.3281 +vt 0.2500 0.3281 +vt 0.2188 0.3281 +vt 0.1875 0.3281 +vt 0.2812 0.3281 +vt 0.4062 0.3281 +vt 0.3750 0.3281 +vt 0.5000 0.3281 +vt 0.4688 0.3281 +vt 0.4375 0.3281 +vt 0.7500 0.3281 +vt 0.7188 0.3281 +vt 0.5312 0.3281 +vt 0.1250 0.3281 +vt 0.0938 0.3281 +vt 0.5938 0.3281 +vt 0.5625 0.3281 +vt 0.1562 0.3281 +vt 0.6875 0.3281 +vt 0.6562 0.3281 +vt 0.6250 0.3281 +vt 0.8438 0.3281 +vt 0.8125 0.3281 +vt 0.9062 0.3281 +vt 0.8750 0.3281 +vt 0.7812 0.3281 +vt 0.9375 0.3281 +vt 0.9688 0.3281 +vt 1.0000 0.3281 +vt 0.0312 0.3281 +vt 0.0000 0.3281 +vt 0.0625 0.3281 +vt 0.4375 0.3438 +vt 0.4062 0.3438 +vt 0.7500 0.3438 +vt 0.7188 0.3438 +vt 0.3750 0.3438 +vt 0.3438 0.3438 +vt 0.5312 0.3438 +vt 0.5000 0.3438 +vt 0.1250 0.3438 +vt 0.0938 0.3438 +vt 0.5938 0.3438 +vt 0.5625 0.3438 +vt 0.1562 0.3438 +vt 0.6875 0.3438 +vt 0.6562 0.3438 +vt 0.6250 0.3438 +vt 0.1875 0.3438 +vt 0.8438 0.3438 +vt 0.8125 0.3438 +vt 0.9062 0.3438 +vt 0.8750 0.3438 +vt 0.7812 0.3438 +vt 0.9375 0.3438 +vt 0.9688 0.3438 +vt 0.4688 0.3438 +vt 1.0000 0.3438 +vt 0.0312 0.3438 +vt 0.0000 0.3438 +vt 0.0625 0.3438 +vt 0.3125 0.3438 +vt 0.2500 0.3438 +vt 0.2188 0.3438 +vt 0.2812 0.3438 +vt 0.6562 0.3594 +vt 0.6250 0.3594 +vt 0.1875 0.3594 +vt 0.1562 0.3594 +vt 0.8438 0.3594 +vt 0.8125 0.3594 +vt 0.9062 0.3594 +vt 0.8750 0.3594 +vt 0.7812 0.3594 +vt 0.7500 0.3594 +vt 0.9375 0.3594 +vt 0.5938 0.3594 +vt 0.9688 0.3594 +vt 0.4688 0.3594 +vt 0.4375 0.3594 +vt 1.0000 0.3594 +vt 0.0312 0.3594 +vt 0.0000 0.3594 +vt 0.6875 0.3594 +vt 0.0625 0.3594 +vt 0.0938 0.3594 +vt 0.3438 0.3594 +vt 0.3125 0.3594 +vt 0.2500 0.3594 +vt 0.2188 0.3594 +vt 0.2812 0.3594 +vt 0.4062 0.3594 +vt 0.3750 0.3594 +vt 0.5000 0.3594 +vt 0.7188 0.3594 +vt 0.5312 0.3594 +vt 0.1250 0.3594 +vt 0.5625 0.3594 +vt 0.9688 0.3750 +vt 0.9375 0.3750 +vt 0.4688 0.3750 +vt 0.4375 0.3750 +vt 1.0000 0.3750 +vt 0.8750 0.3750 +vt 0.8438 0.3750 +vt 0.0312 0.3750 +vt 0.0000 0.3750 +vt 0.6875 0.3750 +vt 0.6562 0.3750 +vt 0.0625 0.3750 +vt 0.8125 0.3750 +vt 0.7812 0.3750 +vt 0.0938 0.3750 +vt 0.3438 0.3750 +vt 0.3125 0.3750 +vt 0.2500 0.3750 +vt 0.2188 0.3750 +vt 0.1875 0.3750 +vt 0.2812 0.3750 +vt 0.4062 0.3750 +vt 0.3750 0.3750 +vt 0.5000 0.3750 +vt 0.7500 0.3750 +vt 0.7188 0.3750 +vt 0.5312 0.3750 +vt 0.1250 0.3750 +vt 0.5938 0.3750 +vt 0.5625 0.3750 +vt 0.1562 0.3750 +vt 0.6250 0.3750 +vt 0.9062 0.3750 +vn -1.0000 0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.6857 0.2114 0.6965 +vn 0.6857 0.2113 0.6965 +vn 0.6857 0.3431 0.6419 +vn -0.6857 0.3431 0.6419 +vn -0.6857 0.0713 0.7244 +vn 0.6857 0.0713 0.7244 +vn -0.6857 -0.0713 0.7244 +vn 0.6857 -0.0713 0.7244 +vn -0.6857 -0.2113 0.6965 +vn 0.6857 -0.2113 0.6965 +vn -0.6857 -0.3430 0.6420 +vn 0.6857 -0.3432 0.6419 +vn -0.6857 -0.4616 0.5627 +vn 0.6857 -0.4618 0.5626 +vn -0.6857 -0.5627 0.4617 +vn 0.6857 -0.5627 0.4617 +vn -0.6857 -0.6420 0.3431 +vn 0.6857 -0.6419 0.3432 +vn -0.6857 -0.6965 0.2113 +vn 0.6857 -0.6965 0.2113 +vn -0.6857 -0.7244 0.0713 +vn 0.6857 -0.7244 0.0713 +vn -0.6857 -0.7244 -0.0713 +vn 0.6857 -0.7244 -0.0713 +vn -0.6857 -0.6966 -0.2112 +vn 0.6857 -0.6965 -0.2114 +vn -0.6857 -0.6419 -0.3432 +vn 0.6857 -0.6420 -0.3430 +vn -0.6857 -0.5626 -0.4617 +vn 0.6857 -0.5626 -0.4617 +vn -0.6857 -0.4617 -0.5626 +vn 0.6857 -0.4617 -0.5626 +vn -0.6857 -0.3431 -0.6419 +vn 0.6857 -0.3431 -0.6419 +vn -0.6857 -0.2113 -0.6965 +vn 0.6857 -0.2113 -0.6965 +vn -0.6857 -0.0713 -0.7244 +vn 0.6857 -0.0713 -0.7244 +vn -0.6857 0.0713 -0.7244 +vn 0.6857 0.0713 -0.7244 +vn -0.6857 0.2113 -0.6965 +vn 0.6857 0.2113 -0.6965 +vn -0.6857 0.4616 -0.5627 +vn 0.6857 0.4618 -0.5626 +vn 0.6857 0.3432 -0.6419 +vn -0.6857 0.3430 -0.6420 +vn -0.6857 0.5626 -0.4617 +vn 0.6857 0.5626 -0.4617 +vn -0.6857 0.6420 -0.3430 +vn 0.6857 0.6419 -0.3432 +vn -0.6857 0.6965 -0.2113 +vn 0.6857 0.6965 -0.2113 +vn -0.6857 0.7244 -0.0713 +vn 0.6857 0.7244 -0.0713 +vn -0.6857 0.6966 0.2112 +vn 0.6857 0.6965 0.2114 +vn 0.6857 0.7244 0.0713 +vn -0.6857 0.7244 0.0713 +vn -0.6857 0.6419 0.3432 +vn 0.6857 0.6420 0.3430 +vn -0.6857 0.5626 0.4617 +vn 0.6857 0.5626 0.4617 +vn -0.2147 0.8614 -0.4604 +vn -0.1087 0.8767 -0.4686 +vn -0.1087 0.9513 -0.2886 +vn -0.2147 0.9346 -0.2835 +vn -0.2147 0.9720 -0.0957 +vn -0.1087 0.9893 -0.0974 +vn -0.2147 0.9720 0.0957 +vn -0.1087 0.9893 0.0974 +vn -0.2147 0.9346 0.2835 +vn -0.1087 0.9513 0.2886 +vn -0.2147 0.8614 0.4604 +vn -0.1087 0.8767 0.4686 +vn -0.2147 0.7550 0.6196 +vn -0.1087 0.7684 0.6306 +vn -0.1087 0.6306 0.7684 +vn -0.2147 0.6196 0.7550 +vn -0.2147 0.4604 0.8614 +vn -0.1087 0.4686 0.8767 +vn -0.2147 0.2835 0.9346 +vn -0.1087 0.2886 0.9513 +vn -0.2147 0.0957 0.9720 +vn -0.1087 0.0974 0.9893 +vn -0.1087 -0.0974 0.9893 +vn -0.2147 -0.0957 0.9720 +vn -0.1087 -0.2886 0.9513 +vn -0.2147 -0.2835 0.9346 +vn -0.2147 -0.4604 0.8614 +vn -0.1087 -0.4686 0.8767 +vn -0.1087 -0.6306 0.7684 +vn -0.2147 -0.6196 0.7550 +vn -0.1087 -0.7684 0.6306 +vn -0.2147 -0.7550 0.6196 +vn -0.2147 -0.8614 0.4604 +vn -0.1087 -0.8767 0.4686 +vn -0.1087 -0.9513 0.2886 +vn -0.2147 -0.9346 0.2835 +vn -0.2147 -0.9720 0.0957 +vn -0.1087 -0.9893 0.0974 +vn -0.1087 -0.9893 -0.0974 +vn -0.2147 -0.9720 -0.0957 +vn -0.2147 -0.9346 -0.2835 +vn -0.1087 -0.9513 -0.2886 +vn -0.1087 -0.8767 -0.4686 +vn -0.2147 -0.8614 -0.4604 +vn -0.1087 -0.7684 -0.6306 +vn -0.2147 -0.7550 -0.6196 +vn -0.1087 -0.6306 -0.7684 +vn -0.2147 -0.6196 -0.7550 +vn -0.1087 -0.4686 -0.8767 +vn -0.2147 -0.4604 -0.8614 +vn -0.1087 -0.2886 -0.9513 +vn -0.2147 -0.2835 -0.9346 +vn -0.1087 -0.0974 -0.9893 +vn -0.2147 -0.0957 -0.9720 +vn -0.2147 0.2835 -0.9346 +vn -0.2147 0.0957 -0.9720 +vn -0.1087 0.0974 -0.9893 +vn -0.1087 0.2886 -0.9513 +vn -0.2147 0.6196 -0.7550 +vn -0.2147 0.4604 -0.8614 +vn -0.1087 0.4686 -0.8767 +vn -0.1087 0.6306 -0.7684 +vn -0.2147 0.7550 -0.6196 +vn -0.1087 0.7684 -0.6306 +vn 0.6857 0.4617 0.5626 +vn -0.6857 0.4617 0.5626 +vn -0.6100 0.3032 0.7321 +vn 0.0000 0.3827 0.9239 +vn 0.0000 0.9914 0.1305 +vn -0.6100 0.7856 0.1034 +vn -0.6100 -0.4824 0.6287 +vn 0.0000 -0.6088 0.7934 +vn 0.0000 0.6087 -0.7934 +vn -0.6100 0.4824 -0.6287 +vn 0.0000 -0.3827 -0.9239 +vn -0.6100 -0.3032 -0.7321 +vn 0.0000 -0.9914 -0.1305 +vn -0.6100 -0.7856 -0.1034 +vn -0.6100 0.7320 0.3034 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.7934 -0.6087 +vn -0.6100 0.6287 -0.4824 +vn -0.6100 0.1034 0.7856 +vn 0.0000 0.1305 0.9914 +vn 0.0000 -0.1305 -0.9914 +vn -0.6100 -0.1034 -0.7856 +vn 0.0000 -0.9239 -0.3827 +vn -0.6100 -0.7321 -0.3032 +vn 0.0000 -0.7934 0.6087 +vn -0.6100 -0.6288 0.4823 +vn -0.6100 0.7321 -0.3032 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.1305 -0.9914 +vn -0.6100 0.1034 -0.7856 +vn -0.6100 0.6287 0.4824 +vn 0.0000 0.7934 0.6088 +vn 0.0000 -0.7934 -0.6087 +vn -0.6100 -0.6287 -0.4824 +vn 0.0000 -0.9239 0.3827 +vn -0.6100 -0.7321 0.3032 +vn 0.0000 -0.1306 0.9914 +vn -0.6100 -0.1034 0.7856 +vn -0.6100 0.3031 -0.7321 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.6087 -0.7934 +vn -0.6100 -0.4824 -0.6287 +vn -0.6100 0.7856 -0.1034 +vn 0.0000 0.9914 -0.1305 +vn 0.0000 -0.9914 0.1305 +vn -0.6100 -0.7856 0.1034 +vn 0.0000 -0.3827 0.9239 +vn -0.6100 -0.3032 0.7321 +vn 0.0000 0.6087 0.7934 +vn -0.6100 0.4824 0.6286 +vn 0.0000 -0.6087 0.7934 +vn -0.6100 0.3033 0.7320 +vn -0.6100 -0.7320 -0.3034 +vn 0.0000 -0.7934 0.6088 +vn -0.6100 -0.6287 0.4824 +vn 0.0000 0.1306 0.9914 +vn -0.6100 0.7321 0.3032 +vn -0.6100 0.6288 -0.4823 +vn 0.0000 -0.1305 0.9914 +vn -0.6100 -0.6286 -0.4825 +vn 0.0000 0.7934 0.6087 +vn -0.6100 0.7322 -0.3030 +vn -0.6100 0.1033 -0.7856 +vn -0.6100 -0.3031 0.7321 +vn -0.6100 0.4824 0.6287 +vn -0.6100 0.3032 -0.7321 +vn -0.6100 -0.4824 -0.6286 +vn 0.0115 -0.4702 0.8825 +vn 0.0071 -0.2889 0.9573 +vn 0.0155 -0.6334 0.7737 +vn 0.0190 -0.7722 0.6350 +vn -0.0025 0.0995 -0.9950 +vn 0.0023 -0.0965 -0.9953 +vn -0.0244 0.9949 0.0978 +vn -0.0244 0.9949 -0.0978 +vn 0.0023 -0.0965 0.9953 +vn -0.0156 0.6352 0.7722 +vn -0.0116 0.4726 0.8812 +vn 0.0071 -0.2889 -0.9573 +vn 0.0115 -0.4702 -0.8825 +vn 0.0190 -0.7722 -0.6350 +vn 0.0155 -0.6334 -0.7737 +vn -0.0235 0.9568 0.2898 +vn -0.0190 0.7735 -0.6335 +vn -0.0156 0.6352 -0.7722 +vn -0.0216 0.8821 -0.4707 +vn -0.0190 0.7735 0.6335 +vn -0.0072 0.2917 0.9565 +vn -0.0025 0.0995 0.9950 +vn 0.0217 -0.8814 0.4719 +vn 0.0235 -0.9565 0.2906 +vn 0.0245 -0.9949 0.0981 +vn 0.0245 -0.9949 -0.0981 +vn 0.0235 -0.9565 -0.2906 +vn 0.0217 -0.8814 -0.4719 +vn -0.0235 0.9568 -0.2898 +vn -0.6100 0.5603 0.5603 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.9659 -0.2588 +vn -0.6100 0.7654 -0.2051 +vn -0.6100 -0.2051 0.7654 +vn 0.0000 -0.2588 0.9659 +vn 0.0000 0.2588 -0.9659 +vn -0.6100 0.2051 -0.7654 +vn 0.0000 -0.7071 -0.7071 +vn -0.6100 -0.5603 -0.5603 +vn 0.0000 -0.9659 0.2588 +vn -0.6100 -0.7654 0.2051 +vn -0.6100 0.7924 -0.0000 +vn 0.0000 0.5000 -0.8660 +vn -0.6100 0.3962 -0.6862 +vn -0.6100 0.3961 0.6863 +vn 0.0000 0.5000 0.8660 +vn 0.0000 -0.5000 -0.8660 +vn -0.6100 -0.3962 -0.6862 +vn -0.6100 -0.7924 0.0000 +vn 0.0000 -0.5000 0.8660 +vn -0.6100 -0.3962 0.6862 +vn -0.6100 0.5603 -0.5603 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.2588 -0.9659 +vn -0.6100 -0.2051 -0.7654 +vn -0.6100 0.7654 0.2051 +vn 0.0000 0.9659 0.2588 +vn 0.0000 -0.9659 -0.2588 +vn -0.6100 -0.7654 -0.2051 +vn 0.0000 -0.7071 0.7071 +vn -0.6100 -0.5603 0.5603 +vn 0.0000 0.2588 0.9659 +vn -0.6100 0.2051 0.7654 +vn -0.6100 -0.0000 -0.7924 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.8660 -0.5000 +vn -0.6100 -0.6862 -0.3962 +vn -0.6100 0.6861 -0.3963 +vn 0.0000 0.8660 -0.5000 +vn 0.0000 -0.8660 0.5000 +vn -0.6100 -0.6862 0.3962 +vn 0.0000 0.0000 1.0000 +vn -0.6100 0.0000 0.7924 +vn 0.0000 0.8660 0.5000 +vn -0.6100 0.6862 0.3962 +vn -0.6100 -0.3961 -0.6863 +vn -0.6100 0.3962 0.6862 +vn -0.6100 -0.6861 0.3963 +vn -0.6100 0.6862 -0.3962 +vn -0.0216 0.8821 0.4707 +vn 0.0965 -0.0023 0.9953 +vn -0.0995 0.0025 0.9950 +vn -0.0974 0.1087 0.9893 +vn 0.0974 0.1087 0.9893 +vn 0.2889 -0.0071 0.9573 +vn 0.2886 0.1087 0.9513 +vn 0.4702 -0.0115 0.8825 +vn 0.4686 0.1087 0.8767 +vn -0.2917 0.0072 0.9565 +vn -0.2886 0.1087 0.9513 +vn 0.6334 -0.0156 0.7737 +vn 0.6306 0.1087 0.7684 +vn 0.7684 0.1087 0.6306 +vn 0.7722 -0.0190 0.6350 +vn -0.0957 0.2147 0.9720 +vn -0.2835 0.2147 0.9346 +vn 0.0957 0.2147 0.9720 +vn 0.2835 0.2147 0.9346 +vn 0.6334 -0.0156 -0.7737 +vn 0.7722 -0.0190 -0.6350 +vn 0.7684 0.1087 -0.6306 +vn 0.6306 0.1087 -0.7684 +vn -0.4686 0.1087 0.8767 +vn -0.4604 0.2147 0.8614 +vn 0.4604 0.2147 0.8614 +vn 0.8814 -0.0217 0.4719 +vn 0.8767 0.1087 0.4686 +vn -0.6196 0.2147 0.7550 +vn -0.6306 0.1087 0.7684 +vn 0.6196 0.2147 0.7550 +vn 0.9565 -0.0235 0.2906 +vn 0.9513 0.1087 0.2886 +vn -0.7735 0.0190 0.6335 +vn -0.7684 0.1087 0.6306 +vn -0.6352 0.0156 0.7722 +vn -0.7550 0.2147 0.6196 +vn 0.5626 0.6857 0.4617 +vn 0.5626 -0.6857 0.4617 +vn 0.6419 -0.6857 0.3431 +vn 0.6419 0.6857 0.3431 +vn 0.7244 0.6857 0.0713 +vn 0.7244 -0.6857 0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.7244 0.6857 -0.0713 +vn 0.7550 0.2147 0.6196 +vn 0.4617 0.6857 0.5626 +vn 0.4617 -0.6857 0.5626 +vn -0.8614 0.2147 0.4604 +vn -0.8767 0.1087 0.4686 +vn 0.6965 -0.6857 -0.2113 +vn 0.6966 0.6857 -0.2112 +vn 0.8614 0.2147 0.4604 +vn 0.3430 0.6857 0.6420 +vn 0.3432 -0.6857 0.6419 +vn 0.9949 -0.0245 -0.0981 +vn 0.9949 -0.0245 0.0981 +vn 0.9893 0.1087 0.0974 +vn 0.9893 0.1087 -0.0974 +vn -0.9949 0.0244 0.0978 +vn -0.9893 0.1087 0.0974 +vn -0.9513 0.1087 0.2886 +vn -0.9568 0.0235 0.2898 +vn -0.9346 0.2147 0.2835 +vn 0.2113 0.6857 0.6965 +vn 0.2113 -0.6857 0.6965 +vn 0.9346 0.2147 0.2835 +vn -0.0713 0.6857 0.7244 +vn -0.0713 -0.6857 0.7244 +vn 0.0713 -0.6857 0.7244 +vn 0.0713 0.6857 0.7244 +vn -0.9720 0.2147 0.0957 +vn 0.6419 -0.6857 -0.3431 +vn 0.6419 0.6857 -0.3431 +vn 0.9720 0.2147 0.0957 +vn -0.2113 0.6857 0.6965 +vn -0.2113 -0.6857 0.6965 +vn 0.8814 -0.0217 -0.4719 +vn 0.9565 -0.0235 -0.2906 +vn 0.9513 0.1087 -0.2886 +vn 0.8767 0.1087 -0.4686 +vn -0.9949 0.0244 -0.0978 +vn -0.9568 0.0235 -0.2898 +vn -0.9513 0.1087 -0.2886 +vn -0.9893 0.1087 -0.0974 +vn -0.9720 0.2147 -0.0957 +vn 0.5626 -0.6857 -0.4617 +vn 0.5626 0.6857 -0.4617 +vn 0.9720 0.2147 -0.0957 +vn -0.3432 0.6857 0.6419 +vn -0.3430 -0.6857 0.6420 +vn -0.7735 0.0190 -0.6335 +vn -0.6352 0.0156 -0.7722 +vn -0.6306 0.1087 -0.7684 +vn -0.7684 0.1087 -0.6306 +vn -0.9346 0.2147 -0.2835 +vn 0.4617 -0.6857 -0.5626 +vn 0.4617 0.6857 -0.5626 +vn 0.9346 0.2147 -0.2835 +vn -0.4617 0.6857 0.5626 +vn -0.4617 -0.6857 0.5626 +vn -0.8614 0.2147 -0.4604 +vn -0.8767 0.1087 -0.4686 +vn 0.3430 -0.6857 -0.6420 +vn 0.3432 0.6857 -0.6419 +vn 0.8614 0.2147 -0.4604 +vn -0.5627 0.6857 0.4617 +vn -0.5627 -0.6857 0.4617 +vn -0.7550 0.2147 -0.6196 +vn 0.2113 0.6857 -0.6965 +vn 0.2113 -0.6857 -0.6965 +vn 0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn 0.7550 0.2147 -0.6196 +vn 0.0965 -0.0023 -0.9953 +vn 0.0974 0.1087 -0.9893 +vn -0.0974 0.1087 -0.9893 +vn -0.0995 0.0025 -0.9950 +vn -0.6196 0.2147 -0.7550 +vn -0.0713 -0.6857 -0.7244 +vn -0.0713 0.6857 -0.7244 +vn 0.6965 -0.6857 0.2113 +vn 0.6965 0.6857 0.2113 +vn 0.6196 0.2147 -0.7550 +vn -0.6419 0.6857 0.3431 +vn -0.6419 -0.6857 0.3431 +vn 0.4686 0.1087 -0.8767 +vn 0.4702 -0.0115 -0.8825 +vn -0.2917 0.0072 -0.9565 +vn -0.2886 0.1087 -0.9513 +vn -0.4604 0.2147 -0.8614 +vn -0.4686 0.1087 -0.8767 +vn -0.2113 -0.6857 -0.6965 +vn -0.2113 0.6857 -0.6965 +vn 0.4604 0.2147 -0.8614 +vn -0.6965 0.6857 0.2113 +vn -0.6965 -0.6857 0.2113 +vn -0.2835 0.2147 -0.9346 +vn -0.3432 -0.6857 -0.6419 +vn -0.3430 0.6857 -0.6420 +vn 0.2835 0.2147 -0.9346 +vn 0.2886 0.1087 -0.9513 +vn -0.7244 0.6857 0.0713 +vn -0.7244 -0.6857 0.0713 +vn -0.0957 0.2147 -0.9720 +vn -0.4617 -0.6857 -0.5626 +vn -0.4617 0.6857 -0.5626 +vn 0.0957 0.2147 -0.9720 +vn -0.7244 0.6857 -0.0713 +vn -0.7244 -0.6857 -0.0713 +vn -0.6965 0.6857 -0.2114 +vn -0.6965 -0.6857 -0.2113 +vn -0.5626 -0.6857 -0.4617 +vn -0.5626 0.6857 -0.4617 +vn -0.6419 0.6857 -0.3431 +vn -0.6419 -0.6857 -0.3431 +vn 0.3032 0.6100 -0.7321 +vn 0.3827 -0.0000 -0.9239 +vn -0.6087 -0.0000 -0.7934 +vn -0.4824 0.6100 -0.6287 +vn 0.7856 0.6100 -0.1034 +vn 0.9914 -0.0000 -0.1305 +vn -0.9914 0.0000 0.1305 +vn -0.7856 0.6100 0.1034 +vn -0.3827 0.0000 0.9239 +vn -0.3033 0.6100 0.7321 +vn 0.6087 0.0000 0.7934 +vn 0.4824 0.6100 0.6287 +vn 0.7321 0.6100 -0.3032 +vn 0.9239 0.0000 -0.3827 +vn 0.1305 0.0000 -0.9914 +vn 0.1034 0.6100 -0.7856 +vn 0.6287 0.6100 0.4824 +vn 0.7934 0.0000 0.6088 +vn -0.7934 0.0000 -0.6087 +vn -0.6287 0.6100 -0.4824 +vn -0.9239 0.0000 0.3827 +vn -0.7321 0.6100 0.3032 +vn -0.1306 0.0000 0.9914 +vn -0.1035 0.6100 0.7856 +vn 0.7321 0.6100 0.3031 +vn 0.9239 0.0000 0.3827 +vn 0.7934 0.0000 -0.6088 +vn 0.6287 0.6100 -0.4824 +vn 0.1035 0.6100 0.7856 +vn 0.1305 0.0000 0.9914 +vn -0.1306 0.0000 -0.9914 +vn -0.1034 0.6100 -0.7856 +vn -0.9239 0.0000 -0.3827 +vn -0.7321 0.6100 -0.3032 +vn -0.7934 0.0000 0.6087 +vn -0.6287 0.6100 0.4824 +vn 0.3032 0.6100 0.7321 +vn 0.3826 0.0000 0.9239 +vn 0.9914 0.0000 0.1305 +vn 0.7856 0.6100 0.1034 +vn -0.4824 0.6100 0.6287 +vn -0.6088 0.0000 0.7933 +vn 0.6087 -0.0000 -0.7934 +vn 0.4824 0.6100 -0.6287 +vn -0.3827 -0.0000 -0.9239 +vn -0.3031 0.6100 -0.7321 +vn -0.9914 -0.0000 -0.1305 +vn -0.7856 0.6100 -0.1034 +vn -0.3032 0.6100 0.7321 +vn 0.6088 -0.0001 0.7933 +vn 0.4823 0.6100 0.6288 +vn 0.9914 -0.0000 -0.1306 +vn -0.1305 0.0000 0.9914 +vn -0.1034 0.6100 0.7856 +vn -0.7934 0.0000 -0.6088 +vn 0.7934 0.0000 0.6087 +vn 0.7321 0.6100 -0.3033 +vn 0.1306 0.0000 -0.9914 +vn -0.7934 0.0000 0.6088 +vn -0.1033 0.6100 -0.7856 +vn -0.1305 0.0000 -0.9914 +vn 0.1306 0.0000 0.9914 +vn 0.1034 0.6100 0.7856 +vn 0.7321 0.6100 0.3032 +vn 0.7934 0.0000 -0.6087 +vn -0.3032 0.6100 -0.7321 +vn 0.6088 0.0000 -0.7934 +vn -0.6087 0.0000 0.7934 +vn -0.4825 0.6100 0.6286 +vn 0.3827 -0.0000 0.9239 +vn 0.3033 0.6100 0.7320 +vn 0.9915 -0.0000 0.1305 +vn 0.7856 0.6100 0.1033 +vn -0.8821 0.0216 0.4707 +vn -0.8821 0.0216 -0.4707 +vn 0.2889 -0.0071 -0.9573 +vn -0.4726 0.0116 -0.8812 +vn 0.5603 0.6100 -0.5603 +vn 0.7071 0.0000 -0.7071 +vn -0.2588 0.0000 -0.9659 +vn -0.2051 0.6100 -0.7654 +vn 0.7654 0.6100 0.2051 +vn 0.9659 0.0000 0.2588 +vn -0.9659 0.0000 -0.2588 +vn -0.7654 0.6100 -0.2051 +vn -0.7071 0.0000 0.7071 +vn -0.5603 0.6100 0.5603 +vn 0.2588 0.0000 0.9659 +vn 0.2051 0.6100 0.7654 +vn 0.7924 0.6100 -0.0000 +vn 0.5000 0.0000 -0.8660 +vn 0.3962 0.6100 -0.6862 +vn 0.3962 0.6100 0.6862 +vn 0.5000 0.0000 0.8660 +vn -0.5000 0.0000 -0.8660 +vn -0.3962 0.6100 -0.6862 +vn -0.7924 0.6100 0.0000 +vn -0.5000 0.0000 0.8660 +vn -0.3962 0.6100 0.6862 +vn 0.5603 0.6100 0.5603 +vn 0.7071 0.0000 0.7071 +vn 0.9659 0.0000 -0.2588 +vn 0.7654 0.6100 -0.2051 +vn -0.2051 0.6100 0.7654 +vn -0.2588 0.0000 0.9659 +vn 0.2588 0.0000 -0.9659 +vn 0.2051 0.6100 -0.7654 +vn -0.7071 0.0000 -0.7071 +vn -0.5603 0.6100 -0.5603 +vn -0.9659 0.0000 0.2588 +vn -0.7654 0.6100 0.2051 +vn 0.0000 0.6100 0.7924 +vn 0.8660 -0.0000 0.5000 +vn 0.6862 0.6100 0.3962 +vn -0.6862 0.6100 0.3962 +vn -0.8660 -0.0000 0.5000 +vn 0.8660 -0.0000 -0.5000 +vn 0.6863 0.6100 -0.3961 +vn -0.0000 0.6100 -0.7924 +vn -0.8660 -0.0000 -0.5000 +vn -0.6862 0.6100 -0.3962 +vn -0.6861 0.6100 -0.3963 +vn 0.6862 0.6100 -0.3962 +vn -0.4726 0.0116 0.8812 +vn -0.0116 0.4726 -0.8812 +vn -0.0072 0.2917 -0.9565 +vn -0.0287 0.2917 0.9561 +vn -0.0099 0.1006 0.9949 +vn -0.0865 0.8783 0.4701 +vn -0.0759 0.7705 0.6329 +vn -0.0975 0.9904 -0.0977 +vn -0.0975 0.9904 0.0977 +vn -0.0464 0.4715 0.8806 +vn -0.0938 0.9526 0.2894 +vn 0.0093 -0.0945 -0.9955 +vn -0.0099 0.1005 -0.9949 +vn -0.0624 0.6332 0.7715 +vn -0.0938 0.9526 -0.2894 +vn 0.0620 -0.6295 0.7745 +vn 0.0756 -0.7681 0.6359 +vn -0.0759 0.7705 -0.6329 +vn -0.0865 0.8783 -0.4701 +vn 0.0460 -0.4668 0.8832 +vn -0.0287 0.2917 -0.9561 +vn -0.0464 0.4715 -0.8806 +vn -0.0624 0.6332 -0.7715 +vn 0.0282 -0.2861 0.9578 +vn 0.0620 -0.6295 -0.7745 +vn 0.0460 -0.4668 -0.8832 +vn 0.0864 -0.8770 -0.4727 +vn 0.0756 -0.7681 -0.6359 +vn 0.0282 -0.2861 -0.9578 +vn 0.0938 -0.9521 -0.2911 +vn 0.0975 -0.9904 -0.0983 +vn 0.0975 -0.9904 0.0983 +vn 0.0938 -0.9521 0.2911 +vn 0.0864 -0.8770 0.4727 +vn 0.0093 -0.0945 0.9955 +vn -0.1942 0.9761 0.0977 +vn -0.1867 0.9388 0.2894 +vn 0.1941 -0.9760 0.0983 +vn 0.1941 -0.9760 -0.0983 +vn 0.1506 -0.7569 -0.6359 +vn 0.1234 -0.6204 -0.7745 +vn 0.1866 -0.9383 0.2911 +vn -0.0572 0.2874 -0.9561 +vn -0.0924 0.4647 -0.8806 +vn 0.1719 -0.8643 0.4727 +vn 0.0915 -0.4600 -0.8832 +vn 0.0561 -0.2819 -0.9578 +vn 0.1506 -0.7569 0.6359 +vn -0.1241 0.6240 0.7715 +vn -0.0924 0.4647 0.8806 +vn -0.0197 0.0991 0.9949 +vn 0.0185 -0.0931 0.9955 +vn 0.0561 -0.2819 0.9578 +vn -0.0572 0.2874 0.9561 +vn -0.1722 0.8656 0.4701 +vn -0.1510 0.7594 0.6329 +vn -0.1942 0.9761 -0.0977 +vn 0.0185 -0.0931 -0.9955 +vn -0.0197 0.0991 -0.9949 +vn -0.1867 0.9388 -0.2894 +vn 0.1234 -0.6204 0.7745 +vn -0.1510 0.7594 -0.6329 +vn -0.1722 0.8656 -0.4701 +vn 0.0915 -0.4600 0.8832 +vn -0.1241 0.6240 -0.7715 +vn 0.1719 -0.8643 -0.4727 +vn 0.1866 -0.9383 -0.2911 +vn 0.1361 -0.4488 -0.8832 +vn 0.0834 -0.2751 -0.9578 +vn 0.2240 -0.7385 0.6359 +vn 0.2558 -0.8433 0.4727 +vn -0.1847 0.6088 0.7715 +vn -0.1375 0.4534 0.8806 +vn -0.0293 0.0967 0.9949 +vn 0.0276 -0.0909 0.9955 +vn 0.0834 -0.2751 0.9578 +vn -0.0851 0.2805 0.9561 +vn -0.2562 0.8446 0.4701 +vn -0.2247 0.7409 0.6329 +vn -0.2889 0.9524 -0.0977 +vn -0.2889 0.9524 0.0977 +vn -0.2779 0.9160 0.2894 +vn 0.0276 -0.0909 -0.9955 +vn -0.0293 0.0967 -0.9949 +vn -0.2779 0.9160 -0.2894 +vn 0.1836 -0.6053 0.7745 +vn -0.2247 0.7409 -0.6329 +vn -0.2562 0.8446 -0.4701 +vn 0.1361 -0.4488 0.8832 +vn -0.0851 0.2805 -0.9561 +vn -0.1375 0.4534 -0.8806 +vn -0.1847 0.6088 -0.7715 +vn 0.1836 -0.6053 -0.7745 +vn 0.2558 -0.8433 -0.4727 +vn 0.2240 -0.7385 -0.6359 +vn 0.2777 -0.9155 -0.2911 +vn 0.2889 -0.9523 -0.0983 +vn 0.2889 -0.9523 0.0983 +vn 0.2777 -0.9155 0.2911 +vn -0.3809 0.9195 -0.0977 +vn -0.3809 0.9195 0.0977 +vn -0.1813 0.4377 0.8806 +vn -0.1122 0.2708 0.9561 +vn -0.3663 0.8843 0.2894 +vn -0.3378 0.8154 0.4701 +vn 0.0363 -0.0877 -0.9955 +vn -0.0387 0.0933 -0.9949 +vn -0.2963 0.7153 0.6329 +vn -0.2435 0.5878 0.7715 +vn -0.3663 0.8843 -0.2894 +vn 0.2421 -0.5844 0.7745 +vn 0.2953 -0.7130 0.6359 +vn -0.2963 0.7153 -0.6329 +vn -0.3378 0.8154 -0.4701 +vn 0.1795 -0.4333 0.8832 +vn -0.1122 0.2708 -0.9561 +vn -0.1813 0.4377 -0.8806 +vn -0.2435 0.5878 -0.7715 +vn 0.1100 -0.2656 0.9578 +vn 0.2421 -0.5844 -0.7745 +vn 0.1795 -0.4333 -0.8832 +vn 0.3372 -0.8142 -0.4727 +vn 0.2953 -0.7130 -0.6359 +vn 0.1100 -0.2656 -0.9578 +vn 0.3661 -0.8839 -0.2911 +vn 0.3808 -0.9194 -0.0983 +vn 0.3808 -0.9194 0.0983 +vn 0.3661 -0.8839 0.2911 +vn 0.3372 -0.8142 0.4727 +vn -0.0387 0.0933 0.9949 +vn 0.0363 -0.0877 0.9955 +vn 0.2211 -0.4136 0.8832 +vn 0.2982 -0.5579 0.7745 +vn -0.0476 0.0891 -0.9949 +vn -0.1382 0.2585 -0.9561 +vn -0.2233 0.4178 -0.8806 +vn -0.2999 0.5611 -0.7715 +vn 0.1355 -0.2535 0.9578 +vn 0.2982 -0.5579 -0.7745 +vn 0.2211 -0.4136 -0.8832 +vn 0.4154 -0.7772 -0.4727 +vn 0.3638 -0.6806 -0.6359 +vn 0.1355 -0.2535 -0.9578 +vn 0.0448 -0.0838 -0.9955 +vn 0.4510 -0.8437 -0.2911 +vn -0.3650 0.6828 -0.6329 +vn 0.4691 -0.8776 -0.0983 +vn -0.4691 0.8777 0.0977 +vn -0.4512 0.8442 0.2894 +vn 0.4691 -0.8776 0.0983 +vn 0.4510 -0.8437 0.2911 +vn 0.4154 -0.7772 0.4727 +vn 0.3638 -0.6806 0.6359 +vn -0.2999 0.5611 0.7715 +vn -0.2233 0.4178 0.8806 +vn -0.0476 0.0891 0.9949 +vn 0.0448 -0.0838 0.9955 +vn -0.1382 0.2585 0.9561 +vn -0.4161 0.7784 0.4701 +vn -0.3650 0.6828 0.6329 +vn -0.4691 0.8777 -0.0977 +vn -0.4512 0.8442 -0.2894 +vn -0.4161 0.7784 -0.4701 +vn -0.3535 0.5290 -0.7715 +vn -0.4301 0.6438 -0.6329 +vn 0.5529 -0.8274 -0.0983 +vn 0.5315 -0.7955 -0.2911 +vn -0.5529 0.8275 0.0977 +vn -0.5318 0.7959 0.2894 +vn 0.5529 -0.8274 0.0983 +vn 0.4288 -0.6417 -0.6359 +vn 0.3514 -0.5260 -0.7745 +vn 0.5315 -0.7955 0.2911 +vn -0.1628 0.2437 -0.9561 +vn -0.2632 0.3939 -0.8806 +vn 0.4896 -0.7327 0.4727 +vn 0.2606 -0.3900 -0.8832 +vn 0.1597 -0.2390 -0.9578 +vn 0.4288 -0.6417 0.6359 +vn -0.3535 0.5290 0.7715 +vn -0.2632 0.3939 0.8806 +vn -0.0561 0.0840 0.9949 +vn 0.0528 -0.0790 0.9955 +vn 0.1597 -0.2390 0.9578 +vn -0.1628 0.2437 0.9561 +vn -0.4903 0.7339 0.4701 +vn -0.4301 0.6438 0.6329 +vn -0.5529 0.8275 -0.0977 +vn 0.0528 -0.0790 -0.9955 +vn -0.0561 0.0840 -0.9949 +vn -0.5318 0.7959 -0.2894 +vn 0.3514 -0.5260 0.7745 +vn -0.4903 0.7339 -0.4701 +vn 0.2606 -0.3900 0.8832 +vn 0.4896 -0.7327 -0.4727 +vn -0.1859 0.2265 -0.9561 +vn -0.3006 0.3662 -0.8806 +vn 0.5590 -0.6812 0.4727 +vn 0.6069 -0.7395 0.2911 +vn 0.2975 -0.3626 -0.8832 +vn 0.1824 -0.2222 -0.9578 +vn 0.4896 -0.5966 0.6359 +vn -0.4036 0.4918 0.7715 +vn -0.3006 0.3662 0.8806 +vn -0.0641 0.0781 0.9949 +vn 0.0602 -0.0734 0.9955 +vn 0.1824 -0.2222 0.9578 +vn -0.1859 0.2265 0.9561 +vn -0.5599 0.6823 0.4701 +vn -0.4912 0.5985 0.6329 +vn -0.6314 0.7693 -0.0977 +vn -0.6314 0.7693 0.0977 +vn -0.6072 0.7399 0.2894 +vn 0.0602 -0.0734 -0.9955 +vn -0.0641 0.0781 -0.9949 +vn -0.6072 0.7399 -0.2894 +vn 0.4013 -0.4890 0.7745 +vn -0.4912 0.5985 -0.6329 +vn -0.5599 0.6823 -0.4701 +vn 0.2975 -0.3626 0.8832 +vn -0.4036 0.4918 -0.7715 +vn 0.4013 -0.4890 -0.7745 +vn 0.5590 -0.6812 -0.4727 +vn 0.4896 -0.5966 -0.6359 +vn 0.6069 -0.7395 -0.2911 +vn 0.6313 -0.7693 -0.0983 +vn 0.6313 -0.7693 0.0983 +vn 0.0672 -0.0672 0.9955 +vn 0.2033 -0.2033 0.9578 +vn -0.2072 0.2072 0.9561 +vn -0.0714 0.0714 0.9949 +vn -0.6241 0.6241 0.4701 +vn -0.5475 0.5475 0.6329 +vn -0.7037 0.7037 -0.0977 +vn -0.7037 0.7037 0.0977 +vn -0.3350 0.3350 0.8806 +vn -0.6768 0.6768 0.2894 +vn 0.0672 -0.0672 -0.9955 +vn -0.0714 0.0714 -0.9949 +vn -0.4499 0.4499 0.7715 +vn -0.6768 0.6768 -0.2894 +vn 0.4473 -0.4473 0.7745 +vn 0.5457 -0.5457 0.6359 +vn -0.5475 0.5475 -0.6329 +vn -0.6241 0.6241 -0.4701 +vn 0.3316 -0.3316 0.8832 +vn -0.2072 0.2072 -0.9561 +vn -0.3350 0.3350 -0.8806 +vn -0.4499 0.4499 -0.7715 +vn 0.4473 -0.4473 -0.7745 +vn 0.3316 -0.3316 -0.8832 +vn 0.6231 -0.6231 -0.4727 +vn 0.5457 -0.5457 -0.6359 +vn 0.2033 -0.2033 -0.9578 +vn 0.6765 -0.6765 -0.2911 +vn 0.7037 -0.7037 -0.0983 +vn 0.7037 -0.7037 0.0983 +vn 0.6765 -0.6765 0.2911 +vn 0.6231 -0.6231 0.4727 +vn -0.7399 0.6072 -0.2894 +vn -0.7693 0.6314 -0.0977 +vn 0.4890 -0.4013 0.7745 +vn 0.5966 -0.4896 0.6359 +vn -0.5985 0.4912 -0.6329 +vn -0.6823 0.5599 -0.4701 +vn 0.3626 -0.2975 0.8832 +vn -0.0781 0.0641 -0.9949 +vn -0.2266 0.1859 -0.9561 +vn -0.3662 0.3006 -0.8806 +vn -0.4918 0.4036 -0.7715 +vn 0.2222 -0.1824 0.9578 +vn 0.4890 -0.4013 -0.7745 +vn 0.3626 -0.2975 -0.8832 +vn 0.6812 -0.5591 -0.4727 +vn 0.5966 -0.4896 -0.6359 +vn 0.2222 -0.1824 -0.9578 +vn 0.0734 -0.0602 -0.9955 +vn 0.7395 -0.6069 -0.2911 +vn 0.7693 -0.6313 -0.0983 +vn -0.7693 0.6314 0.0977 +vn -0.7399 0.6072 0.2894 +vn 0.7693 -0.6313 0.0983 +vn 0.7395 -0.6069 0.2911 +vn 0.6812 -0.5591 0.4727 +vn -0.4918 0.4036 0.7715 +vn -0.3662 0.3006 0.8806 +vn -0.0781 0.0641 0.9949 +vn 0.0734 -0.0602 0.9955 +vn -0.2266 0.1859 0.9561 +vn -0.6823 0.5599 0.4701 +vn -0.5985 0.4912 0.6329 +vn 0.7327 -0.4896 -0.4727 +vn 0.6417 -0.4288 -0.6359 +vn 0.2390 -0.1597 -0.9578 +vn 0.0790 -0.0528 -0.9955 +vn 0.7954 -0.5315 -0.2911 +vn -0.5290 0.3535 -0.7715 +vn -0.6438 0.4301 -0.6329 +vn 0.8274 -0.5529 -0.0983 +vn -0.8275 0.5529 0.0977 +vn -0.7959 0.5318 0.2894 +vn 0.8274 -0.5529 0.0983 +vn 0.5260 -0.3514 -0.7745 +vn 0.7955 -0.5315 0.2911 +vn -0.2437 0.1628 -0.9561 +vn -0.3939 0.2632 -0.8806 +vn 0.7327 -0.4896 0.4727 +vn 0.3900 -0.2606 -0.8832 +vn 0.6417 -0.4288 0.6359 +vn -0.5290 0.3535 0.7715 +vn -0.3939 0.2632 0.8806 +vn -0.0840 0.0561 0.9949 +vn 0.0790 -0.0528 0.9955 +vn 0.2390 -0.1597 0.9578 +vn -0.2437 0.1628 0.9561 +vn -0.7338 0.4903 0.4701 +vn -0.6438 0.4301 0.6329 +vn -0.8275 0.5529 -0.0977 +vn -0.0840 0.0561 -0.9949 +vn -0.7959 0.5318 -0.2894 +vn 0.5260 -0.3514 0.7745 +vn -0.7339 0.4903 -0.4701 +vn 0.3900 -0.2606 0.8832 +vn 0.6806 -0.3638 -0.6359 +vn 0.5579 -0.2982 -0.7745 +vn 0.8437 -0.4510 0.2911 +vn 0.8776 -0.4691 0.0983 +vn -0.2585 0.1382 -0.9561 +vn -0.4178 0.2233 -0.8806 +vn 0.7772 -0.4154 0.4727 +vn 0.4136 -0.2211 -0.8832 +vn 0.2535 -0.1355 -0.9578 +vn 0.6806 -0.3638 0.6359 +vn -0.5611 0.2999 0.7715 +vn -0.4178 0.2233 0.8806 +vn -0.0891 0.0476 0.9949 +vn 0.0838 -0.0448 0.9955 +vn 0.2535 -0.1355 0.9578 +vn -0.2585 0.1382 0.9561 +vn -0.7784 0.4161 0.4701 +vn -0.6828 0.3650 0.6329 +vn -0.8777 0.4691 -0.0977 +vn -0.8777 0.4691 0.0977 +vn -0.8442 0.4512 0.2894 +vn 0.0838 -0.0448 -0.9955 +vn -0.0891 0.0476 -0.9949 +vn -0.8442 0.4512 -0.2894 +vn 0.5579 -0.2982 0.7745 +vn -0.6828 0.3650 -0.6329 +vn -0.7784 0.4161 -0.4701 +vn 0.4136 -0.2211 0.8832 +vn -0.5611 0.2999 -0.7715 +vn 0.7772 -0.4154 -0.4727 +vn 0.8437 -0.4510 -0.2911 +vn 0.8776 -0.4691 -0.0983 +vn -0.5878 0.2435 0.7715 +vn -0.4377 0.1813 0.8806 +vn -0.0933 0.0387 0.9949 +vn 0.0877 -0.0363 0.9955 +vn 0.2656 -0.1100 0.9578 +vn -0.2708 0.1122 0.9561 +vn -0.8154 0.3378 0.4701 +vn -0.7153 0.2963 0.6329 +vn -0.9195 0.3809 -0.0977 +vn -0.9195 0.3809 0.0977 +vn -0.8843 0.3663 0.2894 +vn 0.0877 -0.0363 -0.9955 +vn -0.0933 0.0387 -0.9949 +vn -0.8843 0.3663 -0.2894 +vn 0.5844 -0.2421 0.7745 +vn 0.7130 -0.2953 0.6359 +vn -0.7153 0.2963 -0.6329 +vn -0.8154 0.3378 -0.4701 +vn 0.4333 -0.1795 0.8832 +vn -0.2708 0.1122 -0.9561 +vn -0.4377 0.1813 -0.8806 +vn -0.5878 0.2435 -0.7715 +vn 0.5844 -0.2421 -0.7745 +vn 0.4333 -0.1795 -0.8832 +vn 0.8142 -0.3372 -0.4727 +vn 0.7130 -0.2953 -0.6359 +vn 0.2656 -0.1100 -0.9578 +vn 0.8839 -0.3661 -0.2911 +vn 0.9194 -0.3808 -0.0983 +vn 0.9194 -0.3808 0.0983 +vn 0.8839 -0.3661 0.2911 +vn 0.8142 -0.3372 0.4727 +vn -0.9160 0.2779 0.2894 +vn -0.8446 0.2562 0.4701 +vn 0.0909 -0.0276 -0.9955 +vn -0.0967 0.0293 -0.9949 +vn -0.7409 0.2247 0.6329 +vn -0.6088 0.1847 0.7715 +vn -0.9160 0.2779 -0.2894 +vn -0.9524 0.2889 -0.0977 +vn 0.6053 -0.1836 0.7745 +vn 0.7385 -0.2240 0.6359 +vn -0.7409 0.2247 -0.6329 +vn -0.8446 0.2562 -0.4701 +vn 0.4488 -0.1361 0.8832 +vn -0.2805 0.0851 -0.9561 +vn -0.4534 0.1375 -0.8806 +vn -0.6088 0.1847 -0.7715 +vn 0.2751 -0.0834 0.9578 +vn 0.6053 -0.1836 -0.7745 +vn 0.4488 -0.1361 -0.8832 +vn 0.8433 -0.2558 -0.4727 +vn 0.7385 -0.2240 -0.6359 +vn 0.2751 -0.0834 -0.9578 +vn 0.9155 -0.2777 -0.2911 +vn 0.9523 -0.2889 -0.0983 +vn -0.9524 0.2889 0.0977 +vn 0.9523 -0.2889 0.0983 +vn 0.9155 -0.2777 0.2911 +vn 0.8433 -0.2558 0.4727 +vn -0.4534 0.1375 0.8806 +vn -0.0967 0.0293 0.9949 +vn 0.0909 -0.0276 0.9955 +vn -0.2805 0.0851 0.9561 +vn -0.4647 0.0924 -0.8806 +vn -0.6240 0.1241 -0.7715 +vn 0.2819 -0.0561 0.9578 +vn 0.4600 -0.0915 0.8832 +vn 0.6204 -0.1234 -0.7745 +vn 0.4600 -0.0915 -0.8832 +vn 0.8643 -0.1719 -0.4727 +vn 0.7569 -0.1506 -0.6359 +vn 0.2819 -0.0561 -0.9578 +vn 0.0931 -0.0185 -0.9955 +vn 0.9383 -0.1866 -0.2911 +vn -0.7594 0.1510 -0.6329 +vn 0.9760 -0.1941 -0.0983 +vn -0.9761 0.1942 0.0977 +vn -0.9388 0.1867 0.2894 +vn 0.9760 -0.1941 0.0983 +vn 0.9383 -0.1866 0.2911 +vn -0.2874 0.0572 -0.9561 +vn 0.8643 -0.1719 0.4727 +vn 0.7569 -0.1506 0.6359 +vn -0.6240 0.1241 0.7715 +vn -0.4647 0.0924 0.8806 +vn -0.0991 0.0197 0.9949 +vn 0.0931 -0.0185 0.9955 +vn -0.2874 0.0572 0.9561 +vn -0.8656 0.1722 0.4701 +vn -0.7594 0.1510 0.6329 +vn -0.9761 0.1942 -0.0977 +vn -0.0991 0.0197 -0.9949 +vn -0.9388 0.1867 -0.2894 +vn 0.6204 -0.1234 0.7745 +vn -0.8656 0.1722 -0.4701 +vn 0.9904 -0.0976 -0.0983 +vn 0.9521 -0.0938 -0.2911 +vn -0.9904 0.0976 0.0977 +vn -0.9526 0.0938 0.2894 +vn 0.9904 -0.0976 0.0983 +vn 0.7681 -0.0757 -0.6359 +vn 0.6295 -0.0620 -0.7745 +vn 0.9521 -0.0938 0.2911 +vn -0.2917 0.0287 -0.9561 +vn -0.4715 0.0464 -0.8806 +vn 0.8770 -0.0864 0.4727 +vn 0.4668 -0.0460 -0.8832 +vn 0.2861 -0.0282 -0.9578 +vn 0.7681 -0.0757 0.6359 +vn -0.6332 0.0624 0.7715 +vn -0.4715 0.0464 0.8806 +vn -0.1005 0.0099 0.9949 +vn 0.0945 -0.0093 0.9955 +vn 0.2861 -0.0282 0.9578 +vn -0.2917 0.0287 0.9561 +vn -0.8783 0.0865 0.4701 +vn -0.7705 0.0759 0.6329 +vn -0.9904 0.0976 -0.0977 +vn 0.0945 -0.0093 -0.9955 +vn -0.1006 0.0099 -0.9949 +vn -0.9526 0.0938 -0.2894 +vn 0.6295 -0.0620 0.7745 +vn -0.7705 0.0759 -0.6329 +vn -0.8783 0.0865 -0.4701 +vn 0.4668 -0.0460 0.8832 +vn -0.6332 0.0624 -0.7715 +vn 0.8770 -0.0864 -0.4727 +g Pipe_Cylinder.002_None.001_Pipe_Cylinder.002_None.001_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 +f 7/7/1 8/8/1 9/9/1 10/10/1 11/11/1 12/12/1 +f 13/13/1 14/14/1 15/15/1 16/16/1 17/17/1 18/18/1 +f 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 +f 25/25/1 26/26/1 27/27/1 28/28/1 29/29/1 30/30/1 +f 31/31/1 32/32/1 33/33/1 34/34/1 35/35/1 36/36/1 +f 37/37/1 38/38/1 39/39/1 40/40/1 41/41/1 42/42/1 +f 43/43/1 44/44/1 45/45/1 46/46/1 47/47/1 48/48/1 +f 49/49/1 50/50/1 51/51/1 52/52/1 53/53/1 54/54/1 55/55/1 56/56/1 57/57/1 58/58/1 59/59/1 60/60/1 61/61/1 62/62/1 63/63/1 64/64/1 65/65/1 66/66/1 67/67/1 68/68/1 69/69/1 70/70/1 71/71/1 72/72/1 73/73/1 74/74/1 75/75/1 76/76/1 77/77/1 78/78/1 79/79/1 80/80/1 +f 81/81/2 82/82/2 83/83/2 84/84/2 85/85/2 86/86/2 87/87/2 88/88/2 89/89/2 90/90/2 91/91/2 92/92/2 93/93/2 94/94/2 95/95/2 96/96/2 97/97/2 98/98/2 99/99/2 100/100/2 101/101/2 102/102/2 103/103/2 104/104/2 105/105/2 106/106/2 107/107/2 108/108/2 109/109/2 110/110/2 111/111/2 112/112/2 +f 113/113/1 114/114/1 115/115/1 116/116/1 117/117/1 118/118/1 +f 119/119/1 120/120/1 121/121/1 122/122/1 123/123/1 124/124/1 +f 125/125/1 126/126/1 127/127/1 128/128/1 129/129/1 130/130/1 +f 131/131/1 132/132/1 133/133/1 134/134/1 135/135/1 136/136/1 +f 137/137/1 138/138/1 139/139/1 140/140/1 141/141/1 142/142/1 +f 143/143/1 144/144/1 145/145/1 146/146/1 147/147/1 148/148/1 +f 149/149/1 150/150/1 151/151/1 152/152/1 153/153/1 154/154/1 +f 155/155/1 156/156/1 157/157/1 158/158/1 159/159/1 160/160/1 +f 161/161/3 162/162/3 163/163/3 164/164/3 165/165/3 166/166/3 +f 167/167/3 168/168/3 169/169/3 170/170/3 171/171/3 172/172/3 +f 173/173/3 174/174/3 175/175/3 176/176/3 177/177/3 178/178/3 +f 179/179/3 180/180/3 181/181/3 182/182/3 183/183/3 184/184/3 +f 185/185/3 186/186/3 187/187/3 188/188/3 189/189/3 190/190/3 +f 191/191/3 192/192/3 193/193/3 194/194/3 195/195/3 196/196/3 +f 197/197/3 198/198/3 199/199/3 200/200/3 201/201/3 202/202/3 +f 203/203/3 204/204/3 205/205/3 206/206/3 207/207/3 208/208/3 +f 209/209/3 210/210/3 211/211/3 212/212/3 213/213/3 214/214/3 215/215/3 216/216/3 217/217/3 218/218/3 219/219/3 220/220/3 221/221/3 222/222/3 223/223/3 224/224/3 225/225/3 226/226/3 227/227/3 228/228/3 229/229/3 230/230/3 231/231/3 232/232/3 233/233/3 234/234/3 235/235/3 236/236/3 237/237/3 238/238/3 239/239/3 240/240/3 +f 241/241/4 242/242/4 243/243/4 244/244/4 245/245/4 246/246/4 247/247/4 248/248/4 249/249/4 250/250/4 251/251/4 252/252/4 253/253/4 254/254/4 255/255/4 256/256/4 257/257/4 258/258/4 259/259/4 260/260/4 261/261/4 262/262/4 263/263/4 264/264/4 265/265/4 266/266/4 267/267/4 268/268/4 269/269/4 270/270/4 271/271/4 272/272/4 +f 273/273/3 274/274/3 275/275/3 276/276/3 277/277/3 278/278/3 +f 279/279/3 280/280/3 281/281/3 282/282/3 283/283/3 284/284/3 +f 285/285/3 286/286/3 287/287/3 288/288/3 289/289/3 290/290/3 +f 291/291/3 292/292/3 293/293/3 294/294/3 295/295/3 296/296/3 +f 297/297/3 298/298/3 299/299/3 300/300/3 301/301/3 302/302/3 +f 303/303/3 304/304/3 305/305/3 306/306/3 307/307/3 308/308/3 +f 309/309/3 310/310/3 311/311/3 312/312/3 313/313/3 314/314/3 +f 315/315/3 316/316/3 317/317/3 318/318/3 319/319/3 320/320/3 +s 1 +f 79/321/5 102/322/6 101/323/7 80/324/8 +f 78/325/9 103/326/10 102/322/6 79/321/5 +f 77/327/11 104/328/12 103/326/10 78/325/9 +f 76/329/13 105/330/14 104/328/12 77/327/11 +f 75/331/15 106/332/16 105/330/14 76/329/13 +f 74/333/17 107/334/18 106/332/16 75/331/15 +f 73/335/19 108/336/20 107/334/18 74/333/17 +f 72/337/21 109/338/22 108/336/20 73/335/19 +f 71/339/23 110/340/24 109/338/22 72/337/21 +f 70/341/25 111/342/26 110/340/24 71/339/23 +f 69/343/27 112/344/28 111/342/26 70/341/25 +f 68/345/29 81/346/30 112/344/28 69/343/27 +f 67/347/31 82/348/32 81/346/30 68/345/29 +f 66/349/33 83/350/34 82/351/32 67/347/31 +f 65/352/35 84/353/36 83/350/34 66/349/33 +f 64/354/37 85/355/38 84/353/36 65/352/35 +f 63/356/39 86/357/40 85/358/38 64/359/37 +f 62/360/41 87/361/42 86/357/40 63/356/39 +f 61/362/43 88/363/44 87/361/42 62/360/41 +f 60/364/45 89/365/46 88/363/44 61/362/43 +f 58/366/47 91/367/48 90/368/49 59/369/50 +f 59/369/50 90/368/49 89/365/46 60/364/45 +f 57/370/51 92/371/52 91/367/48 58/366/47 +f 56/372/53 93/373/54 92/371/52 57/370/51 +f 55/374/55 94/375/56 93/373/54 56/372/53 +f 54/376/57 95/377/58 94/375/56 55/374/55 +f 52/378/59 97/379/60 96/380/61 53/381/62 +f 53/381/62 96/380/61 95/377/58 54/376/57 +f 51/382/63 98/383/64 97/379/60 52/378/59 +f 50/384/65 99/385/66 98/383/64 51/382/63 +f 321/386/67 322/387/68 323/388/69 324/389/70 +f 325/390/71 324/389/70 323/388/69 326/391/72 +f 327/392/73 325/390/71 326/391/72 328/393/74 +f 329/394/75 327/392/73 328/393/74 330/395/76 +f 331/396/77 329/394/75 330/395/76 332/397/78 +f 333/398/79 331/396/77 332/397/78 334/399/80 +f 333/398/79 334/399/80 335/400/81 336/401/82 +f 337/402/83 336/401/82 335/400/81 338/403/84 +f 339/404/85 337/402/83 338/403/84 340/405/86 +f 341/406/87 339/404/85 340/405/86 342/407/88 +f 341/406/87 342/407/88 343/408/89 344/409/90 +f 344/409/90 343/408/89 345/410/91 346/411/92 +f 347/412/93 348/413/94 349/414/95 350/415/96 +f 346/411/92 345/410/91 348/413/94 347/412/93 +f 350/415/96 349/414/95 351/416/97 352/417/98 +f 353/418/99 352/417/98 351/416/97 354/419/100 +f 353/418/99 354/419/100 355/420/101 356/421/102 +f 357/422/103 356/421/102 355/420/101 358/423/104 +f 357/424/103 358/425/104 359/426/105 360/427/106 +f 361/428/107 360/427/106 359/426/105 362/429/108 +f 361/428/107 362/429/108 363/430/109 364/431/110 +f 364/431/110 363/430/109 365/432/111 366/433/112 +f 366/433/112 365/432/111 367/434/113 368/435/114 +f 368/435/114 367/434/113 369/436/115 370/437/116 +f 370/437/116 369/436/115 371/438/117 372/439/118 +f 372/439/118 371/438/117 373/440/119 374/441/120 +f 375/442/121 376/443/122 377/444/123 378/445/124 +f 376/443/122 374/441/120 373/440/119 377/444/123 +f 379/446/125 380/447/126 381/448/127 382/449/128 +f 375/442/121 378/445/124 381/448/127 380/447/126 +f 383/450/129 379/446/125 382/449/128 384/451/130 +f 383/450/129 384/451/130 322/387/68 321/386/67 +f 80/324/8 101/323/7 100/452/131 49/453/132 +f 1/454/133 385/455/134 386/456/135 2/457/136 +f 6/458/137 387/459/138 385/455/134 1/454/133 +f 2/457/136 386/456/135 388/460/139 3/461/140 +f 3/461/140 388/460/139 389/462/141 4/463/142 +f 4/464/142 389/465/141 390/466/143 5/467/144 +f 5/467/144 390/466/143 387/459/138 6/458/137 +f 7/468/145 391/469/146 392/470/147 8/471/148 +f 12/472/149 393/473/150 391/469/146 7/468/145 +f 8/471/148 392/470/147 394/474/151 9/475/152 +f 9/475/152 394/474/151 395/476/153 10/477/154 +f 10/478/154 395/479/153 396/480/155 11/481/156 +f 11/481/156 396/480/155 393/473/150 12/472/149 +f 13/482/157 397/483/158 398/484/159 14/485/160 +f 18/486/161 399/487/162 397/483/158 13/482/157 +f 14/485/160 398/484/159 400/488/163 15/489/164 +f 15/489/164 400/488/163 401/490/165 16/491/166 +f 16/492/166 401/493/165 402/494/167 17/495/168 +f 17/495/168 402/494/167 399/487/162 18/486/161 +f 19/496/169 403/497/170 404/498/171 20/499/172 +f 24/500/173 405/501/174 403/497/170 19/496/169 +f 20/499/172 404/498/171 406/502/175 21/503/176 +f 21/503/176 406/502/175 407/504/177 22/505/178 +f 22/506/178 407/507/177 408/508/179 23/509/180 +f 23/509/180 408/508/179 405/501/174 24/500/173 +f 25/510/142 409/511/141 410/512/143 26/513/144 +f 30/514/140 411/515/139 409/511/141 25/510/142 +f 26/513/144 410/512/143 412/516/181 27/517/137 +f 27/517/137 412/516/181 413/518/134 28/519/182 +f 28/520/182 413/521/134 414/522/135 29/523/136 +f 29/523/136 414/522/135 411/515/139 30/514/140 +f 31/524/183 415/525/153 416/526/184 32/527/185 +f 36/528/152 417/529/151 415/525/153 31/524/183 +f 32/527/185 416/526/184 418/530/186 33/531/149 +f 33/531/149 418/530/186 419/532/146 34/533/187 +f 34/534/187 419/535/146 420/536/147 35/537/188 +f 35/537/188 420/536/147 417/529/151 36/528/152 +f 37/538/166 421/539/165 422/540/189 38/541/168 +f 42/542/190 423/543/163 421/539/165 37/538/166 +f 38/541/168 422/540/189 424/544/191 39/545/161 +f 39/545/161 424/544/191 425/546/158 40/547/192 +f 40/548/192 425/549/158 426/550/159 41/551/193 +f 41/551/193 426/550/159 423/543/163 42/542/190 +f 43/552/194 427/553/177 428/554/179 44/555/195 +f 48/556/176 429/557/175 427/553/177 43/552/194 +f 44/555/195 428/554/179 430/558/174 45/559/173 +f 45/559/173 430/558/174 431/560/170 46/561/196 +f 46/562/196 431/563/170 432/564/171 47/565/197 +f 47/565/197 432/564/171 429/557/175 48/556/176 +f 433/566/198 348/413/94 345/410/91 434/567/199 +f 435/568/200 349/414/95 348/413/94 433/566/198 +f 435/568/200 436/569/201 351/416/97 349/414/95 +f 437/570/202 377/444/123 373/440/119 438/571/203 +f 439/572/204 328/393/74 326/391/72 440/573/205 +f 434/567/199 345/410/91 343/408/89 441/574/206 +f 442/575/207 443/576/208 338/403/84 335/400/81 +f 444/577/209 371/438/117 369/436/115 445/578/210 +f 446/579/211 447/580/212 367/434/113 365/432/111 +f 448/581/213 330/395/76 328/393/74 439/572/204 +f 449/582/214 384/451/130 382/449/128 450/583/215 +f 438/571/203 373/440/119 371/438/117 444/577/209 +f 445/578/210 369/436/115 367/434/113 447/580/212 +f 449/582/214 451/584/216 322/387/68 384/451/130 +f 49/453/132 100/452/131 99/385/66 50/384/65 +f 452/585/217 442/575/207 335/400/81 334/399/80 +f 443/576/208 453/586/218 340/405/86 338/403/84 +f 453/586/218 454/587/219 342/407/88 340/405/86 +f 441/574/206 343/408/89 342/407/88 454/587/219 +f 436/569/201 455/588/220 354/419/100 351/416/97 +f 455/588/220 456/589/221 355/420/101 354/419/100 +f 456/589/221 457/590/222 358/423/104 355/420/101 +f 457/591/222 458/592/223 359/426/105 358/425/104 +f 458/592/223 459/593/224 362/429/108 359/426/105 +f 459/593/224 460/594/225 363/430/109 362/429/108 +f 460/594/225 446/579/211 365/432/111 363/430/109 +f 461/595/226 323/388/69 322/387/68 451/584/216 +f 461/595/226 440/573/205 326/391/72 323/388/69 +f 113/596/227 462/597/228 463/598/229 114/599/230 +f 118/600/231 464/601/232 462/597/228 113/596/227 +f 114/599/230 463/598/229 465/602/233 115/603/234 +f 115/603/234 465/602/233 466/604/235 116/605/236 +f 116/606/236 466/607/235 467/608/237 117/609/238 +f 117/609/238 467/608/237 464/601/232 118/600/231 +f 119/610/239 468/611/3 469/612/240 120/613/241 +f 124/614/242 470/615/243 468/611/3 119/610/239 +f 120/613/241 469/612/240 471/616/244 121/617/245 +f 121/617/245 471/616/244 472/618/4 122/619/246 +f 122/620/246 472/621/4 473/622/247 123/623/248 +f 123/623/248 473/622/247 470/615/243 124/614/242 +f 125/624/249 474/625/250 475/626/251 126/627/252 +f 130/628/253 476/629/254 474/625/250 125/624/249 +f 126/627/252 475/626/251 477/630/255 127/631/256 +f 127/631/256 477/630/255 478/632/257 128/633/258 +f 128/634/258 478/635/257 479/636/259 129/637/260 +f 129/637/260 479/636/259 476/629/254 130/628/253 +f 131/638/261 480/639/262 481/640/263 132/641/264 +f 136/642/265 482/643/266 480/639/262 131/638/261 +f 132/641/264 481/640/263 483/644/267 133/645/268 +f 133/645/268 483/644/267 484/646/269 134/647/270 +f 134/648/270 484/649/269 485/650/271 135/651/272 +f 135/651/272 485/650/271 482/643/266 136/642/265 +f 137/652/236 486/653/235 487/654/237 138/655/238 +f 142/656/234 488/657/233 486/653/235 137/652/236 +f 138/655/238 487/654/237 489/658/232 139/659/231 +f 139/659/231 489/658/232 490/660/228 140/661/227 +f 140/662/227 490/663/228 491/664/229 141/665/230 +f 141/665/230 491/664/229 488/657/233 142/656/234 +f 143/666/246 492/667/4 493/668/247 144/669/248 +f 148/670/273 494/671/244 492/667/4 143/666/246 +f 144/669/248 493/668/247 495/672/243 145/673/274 +f 145/673/274 495/672/243 496/674/3 146/675/239 +f 146/676/239 496/677/3 497/678/240 147/679/241 +f 147/679/241 497/678/240 494/671/244 148/670/273 +f 149/680/258 498/681/257 499/682/259 150/683/260 +f 154/684/256 500/685/255 498/681/257 149/680/258 +f 150/683/260 499/682/259 501/686/254 151/687/253 +f 151/687/253 501/686/254 502/688/250 152/689/249 +f 152/690/249 502/691/250 503/692/251 153/693/252 +f 153/693/252 503/692/251 500/685/255 154/684/256 +f 155/694/270 504/695/269 505/696/271 156/697/272 +f 160/698/275 506/699/267 504/695/269 155/694/270 +f 156/697/272 505/696/271 507/700/266 157/701/276 +f 157/701/276 507/700/266 508/702/262 158/703/261 +f 158/704/261 508/705/262 509/706/263 159/707/264 +f 159/707/264 509/706/263 506/699/267 160/698/275 +f 510/708/277 332/397/78 330/395/76 448/581/213 +f 510/708/277 452/585/217 334/399/80 332/397/78 +f 511/709/278 512/710/279 513/711/280 514/712/281 +f 515/713/282 511/709/278 514/712/281 516/714/283 +f 517/715/284 515/713/282 516/714/283 518/716/285 +f 512/710/279 519/717/286 520/718/287 513/711/280 +f 521/719/288 517/715/284 518/716/285 522/720/289 +f 521/719/288 522/720/289 523/721/290 524/722/291 +f 525/723/292 513/711/280 520/718/287 526/724/293 +f 527/725/294 514/712/281 513/711/280 525/723/292 +f 528/726/295 516/714/283 514/712/281 527/725/294 +f 529/727/296 530/728/297 531/729/298 532/730/299 +f 526/724/293 520/718/287 533/731/300 534/732/301 +f 535/733/302 518/716/285 516/714/283 528/726/295 +f 536/734/303 524/722/291 523/721/290 537/735/304 +f 538/736/305 534/732/301 533/731/300 539/737/306 +f 540/738/307 522/720/289 518/716/285 535/733/302 +f 541/739/308 536/734/303 537/735/304 542/740/309 +f 543/741/310 544/742/311 539/737/306 545/743/312 +f 546/744/313 538/736/305 539/737/306 544/742/311 +f 237/745/314 242/746/315 241/747/316 238/748/317 +f 240/749/318 271/750/319 270/751/320 209/752/321 +f 547/753/322 523/721/290 522/720/289 540/738/307 +f 236/754/323 243/755/324 242/746/315 237/745/314 +f 548/756/325 546/744/313 544/742/311 549/757/326 +f 209/752/321 270/751/320 269/758/327 210/759/328 +f 550/760/329 537/735/304 523/721/290 547/753/322 +f 235/761/330 244/762/331 243/755/324 236/754/323 +f 551/763/332 552/764/333 553/765/334 554/766/335 +f 555/767/336 556/768/337 557/769/338 558/770/339 +f 559/771/340 548/756/325 549/757/326 557/769/338 +f 234/772/341 245/773/342 244/762/331 235/761/330 +f 560/774/343 542/740/309 537/735/304 550/760/329 +f 232/775/344 247/776/345 246/777/346 233/778/347 +f 561/779/348 559/771/340 557/769/338 556/768/337 +f 210/759/328 269/758/327 268/780/349 211/781/350 +f 562/782/351 553/783/334 542/740/309 560/774/343 +f 231/784/352 248/785/353 247/776/345 232/775/344 +f 563/786/354 564/787/355 565/788/356 566/789/357 +f 567/790/358 568/791/359 569/792/360 570/793/361 +f 571/794/362 561/779/348 556/768/337 570/793/361 +f 211/781/350 268/780/349 267/795/363 212/796/364 +f 572/797/365 554/766/335 553/765/334 562/798/351 +f 230/799/366 249/800/367 248/785/353 231/784/352 +f 530/728/297 563/786/354 566/789/357 531/729/298 +f 573/801/368 574/802/369 575/803/370 576/804/371 +f 577/805/372 571/794/362 570/793/361 569/792/360 +f 212/796/364 267/795/363 266/806/373 213/807/374 +f 578/808/375 565/788/356 554/766/335 572/797/365 +f 229/809/376 250/810/377 249/800/367 230/799/366 +f 579/811/378 577/805/372 569/792/360 580/812/379 +f 213/807/374 266/806/373 265/813/380 214/814/381 +f 581/815/382 566/789/357 565/788/356 578/808/375 +f 228/816/383 251/817/384 250/810/377 229/809/376 +f 582/818/385 579/811/378 580/812/379 576/804/371 +f 215/819/386 264/820/387 263/821/388 216/822/389 +f 581/815/382 583/823/390 531/729/298 566/789/357 +f 214/814/381 265/813/380 264/824/387 215/825/386 +f 584/826/391 585/827/392 586/828/393 587/829/394 +f 588/830/395 582/818/385 576/804/371 575/803/370 +f 216/822/389 263/821/388 262/831/396 217/832/397 +f 238/748/317 241/747/316 272/833/398 239/834/399 +f 589/835/400 532/730/299 531/729/298 583/823/390 +f 227/836/401 252/837/402 251/817/384 228/816/383 +f 529/727/296 532/730/299 590/838/403 591/839/404 +f 592/840/405 587/829/394 586/828/393 593/841/406 +f 594/842/407 588/830/395 575/803/370 595/843/408 +f 217/832/397 262/831/396 261/844/409 218/845/410 +f 589/835/400 596/846/411 590/838/403 532/730/299 +f 226/847/412 253/848/413 252/837/402 227/836/401 +f 597/849/414 594/842/407 595/843/408 593/841/406 +f 218/845/410 261/850/409 260/851/415 219/852/416 +f 596/846/411 598/853/417 599/854/418 590/838/403 +f 225/855/419 254/856/420 253/848/413 226/847/412 +f 233/778/347 246/777/346 245/773/342 234/772/341 +f 600/857/421 597/849/414 593/841/406 586/828/393 +f 219/852/416 260/851/415 259/858/422 220/859/423 +f 598/853/417 601/860/424 585/827/392 599/854/418 +f 224/861/425 255/862/426 254/856/420 225/855/419 +f 601/860/424 600/857/421 586/828/393 585/827/392 +f 239/834/399 272/833/398 271/750/319 240/749/318 +f 223/863/427 256/864/428 255/862/426 224/861/425 +f 220/859/423 259/858/422 258/865/429 221/866/430 +f 222/867/431 257/868/432 256/864/428 223/863/427 +f 221/866/430 258/865/429 257/868/432 222/867/431 +f 161/869/433 602/870/434 603/871/435 162/872/436 +f 166/873/437 604/874/438 602/870/434 161/869/433 +f 162/872/436 603/871/435 605/875/439 163/876/440 +f 163/876/440 605/875/439 606/877/441 164/878/442 +f 164/879/442 606/880/441 607/881/443 165/882/444 +f 165/882/444 607/881/443 604/874/438 166/873/437 +f 167/883/445 608/884/446 609/885/447 168/886/448 +f 172/887/449 610/888/450 608/884/446 167/883/445 +f 168/886/448 609/885/447 611/889/451 169/890/452 +f 169/890/452 611/889/451 612/891/453 170/892/454 +f 170/893/454 612/894/453 613/895/455 171/896/456 +f 171/896/456 613/895/455 610/888/450 172/887/449 +f 173/897/457 614/898/458 615/899/459 174/900/460 +f 178/901/461 616/902/462 614/898/458 173/897/457 +f 174/900/460 615/899/459 617/903/463 175/904/464 +f 175/904/464 617/903/463 618/905/465 176/906/466 +f 176/907/466 618/908/465 619/909/467 177/910/468 +f 177/910/468 619/909/467 616/902/462 178/901/461 +f 179/911/469 620/912/470 621/913/471 180/914/472 +f 184/915/473 622/916/474 620/912/470 179/911/469 +f 180/914/472 621/913/471 623/917/475 181/918/476 +f 181/918/476 623/917/475 624/919/477 182/920/478 +f 182/921/478 624/922/477 625/923/479 183/924/480 +f 183/924/480 625/923/479 622/916/474 184/915/473 +f 185/925/481 626/926/441 627/927/482 186/928/483 +f 190/929/440 628/930/439 626/926/441 185/925/481 +f 186/928/483 627/927/482 629/931/484 187/932/437 +f 187/932/437 629/931/484 630/933/434 188/934/433 +f 188/935/433 630/936/434 631/937/435 189/938/436 +f 189/938/436 631/937/435 628/930/439 190/929/440 +f 191/939/454 632/940/453 633/941/485 192/942/486 +f 196/943/452 634/944/487 632/940/453 191/939/454 +f 192/942/486 633/941/485 635/945/488 193/946/449 +f 193/946/449 635/945/488 636/947/446 194/948/489 +f 194/949/489 636/950/446 637/951/490 195/952/448 +f 195/952/448 637/951/490 634/944/487 196/943/452 +f 197/953/466 638/954/465 639/955/491 198/956/468 +f 202/957/492 640/958/493 638/954/465 197/953/466 +f 198/956/468 639/955/491 641/959/494 199/960/495 +f 199/960/495 641/959/494 642/961/458 200/962/496 +f 200/963/496 642/964/458 643/965/497 201/966/460 +f 201/966/460 643/965/497 640/958/493 202/957/492 +f 203/967/498 644/968/477 645/969/479 204/970/480 +f 208/971/476 646/972/499 644/968/477 203/967/498 +f 204/970/480 645/969/479 647/973/500 205/974/501 +f 205/974/501 647/973/500 648/975/502 206/976/503 +f 206/977/503 648/978/502 649/979/504 207/980/505 +f 207/980/505 649/979/504 646/972/499 208/971/476 +f 543/741/310 650/981/506 549/757/326 544/742/311 +f 650/981/506 558/770/339 557/769/338 549/757/326 +f 568/791/359 651/982/507 580/812/379 569/792/360 +f 651/982/507 573/801/368 576/804/371 580/812/379 +f 652/983/508 591/839/404 590/838/403 599/854/418 +f 555/767/336 567/790/358 570/793/361 556/768/337 +f 552/984/333 541/739/308 542/740/309 553/783/334 +f 584/826/391 652/983/508 599/854/418 585/827/392 +f 564/787/355 551/763/332 554/766/335 565/788/356 +f 592/840/405 593/841/406 595/843/408 653/985/509 +f 273/986/510 654/987/511 655/988/512 274/989/513 +f 278/990/514 656/991/515 654/987/511 273/986/510 +f 274/989/513 655/988/512 657/992/516 275/993/517 +f 275/993/517 657/992/516 658/994/518 276/995/519 +f 276/996/519 658/997/518 659/998/520 277/999/521 +f 277/999/521 659/998/520 656/991/515 278/990/514 +f 279/1000/522 660/1001/2 661/1002/523 280/1003/524 +f 284/1004/525 662/1005/526 660/1001/2 279/1000/522 +f 280/1003/524 661/1002/523 663/1006/527 281/1007/528 +f 281/1007/528 663/1006/527 664/1008/1 282/1009/529 +f 282/1010/529 664/1011/1 665/1012/530 283/1013/531 +f 283/1013/531 665/1012/530 662/1005/526 284/1004/525 +f 285/1014/532 666/1015/533 667/1016/534 286/1017/535 +f 290/1018/536 668/1019/537 666/1015/533 285/1014/532 +f 286/1017/535 667/1016/534 669/1020/538 287/1021/539 +f 287/1021/539 669/1020/538 670/1022/540 288/1023/541 +f 288/1024/541 670/1025/540 671/1026/542 289/1027/543 +f 289/1027/543 671/1026/542 668/1019/537 290/1018/536 +f 291/1028/544 672/1029/269 673/1030/545 292/1031/546 +f 296/1032/547 674/1033/548 672/1029/269 291/1028/544 +f 292/1031/546 673/1030/545 675/1034/549 293/1035/550 +f 293/1035/550 675/1034/549 676/1036/262 294/1037/551 +f 294/1038/551 676/1039/262 677/1040/552 295/1041/553 +f 295/1041/553 677/1040/552 674/1033/548 296/1032/547 +f 297/1042/519 678/1043/518 679/1044/520 298/1045/521 +f 302/1046/517 680/1047/516 678/1043/518 297/1042/519 +f 298/1045/521 679/1044/520 681/1048/515 299/1049/514 +f 299/1049/514 681/1048/515 682/1050/511 300/1051/510 +f 300/1052/510 682/1053/511 683/1054/512 301/1055/513 +f 301/1055/513 683/1054/512 680/1047/516 302/1046/517 +f 303/1056/529 684/1057/1 685/1058/530 304/1059/531 +f 308/1060/528 686/1061/527 684/1057/1 303/1056/529 +f 304/1059/531 685/1058/530 687/1062/526 305/1063/525 +f 305/1063/525 687/1062/526 688/1064/2 306/1065/522 +f 306/1066/522 688/1067/2 689/1068/523 307/1069/524 +f 307/1069/524 689/1068/523 686/1061/527 308/1060/528 +f 309/1070/541 690/1071/540 691/1072/542 310/1073/543 +f 314/1074/539 692/1075/538 690/1071/540 309/1070/541 +f 310/1073/543 691/1072/542 693/1076/537 311/1077/536 +f 311/1077/536 693/1076/537 694/1078/533 312/1079/532 +f 312/1080/532 694/1081/533 695/1082/534 313/1083/535 +f 313/1083/535 695/1082/534 692/1075/538 314/1074/539 +f 315/1084/551 696/1085/262 697/1086/552 316/1087/554 +f 320/1088/555 698/1089/549 696/1085/262 315/1084/551 +f 316/1087/554 697/1086/552 699/1090/548 317/1091/547 +f 317/1091/547 699/1090/548 700/1092/269 318/1093/544 +f 318/1094/544 700/1095/269 701/1096/545 319/1097/546 +f 319/1097/546 701/1096/545 698/1089/549 320/1088/555 +f 653/985/509 595/843/408 575/803/370 574/802/369 +f 533/731/300 702/1098/556 545/743/312 539/737/306 +f 520/718/287 519/717/286 702/1098/556 533/731/300 +f 381/448/127 703/1099/557 450/583/215 382/449/128 +f 378/445/124 377/444/123 437/570/202 704/1100/558 +f 381/448/127 378/445/124 704/1100/558 703/1099/557 +f 454/587/219 453/586/218 705/1101/559 706/1102/560 +f 452/585/217 510/708/277 707/1103/561 708/1104/562 +f 439/572/204 440/573/205 709/1105/563 710/1106/564 +f 453/586/218 443/576/208 711/1107/565 705/1101/559 +f 510/708/277 448/581/213 712/1108/566 707/1103/561 +f 437/570/202 438/571/203 713/1109/567 714/1110/568 +f 442/575/207 452/585/217 708/1104/562 715/1111/569 +f 440/573/205 461/595/226 716/1112/570 709/1105/563 +f 436/569/201 435/568/200 717/1113/571 718/1114/572 +f 451/584/216 449/582/214 719/1115/573 720/1116/574 +f 461/595/226 451/584/216 720/1116/574 716/1112/570 +f 435/568/200 433/566/198 721/1117/575 717/1113/571 +f 704/1100/558 437/570/202 714/1110/568 722/1118/576 +f 450/583/215 703/1099/557 723/1119/577 724/1120/578 +f 433/566/198 434/567/199 725/1121/579 721/1117/575 +f 445/578/210 447/580/212 726/1122/580 727/1123/581 +f 446/579/211 460/594/225 728/1124/582 729/1125/583 +f 438/571/203 444/577/209 730/1126/584 713/1109/567 +f 460/594/225 459/593/224 731/1127/585 728/1124/582 +f 449/582/214 450/583/215 724/1120/578 719/1115/573 +f 459/593/224 458/592/223 732/1128/586 731/1127/585 +f 448/581/213 439/572/204 710/1106/564 712/1108/566 +f 458/592/223 457/591/222 733/1129/587 732/1128/586 +f 447/580/212 446/579/211 729/1125/583 726/1122/580 +f 457/590/222 456/589/221 734/1130/588 733/1131/587 +f 703/1099/557 704/1100/558 722/1118/576 723/1119/577 +f 456/589/221 455/588/220 735/1132/589 734/1130/588 +f 444/577/209 445/578/210 727/1123/581 730/1126/584 +f 455/588/220 436/569/201 718/1114/572 735/1132/589 +f 443/576/208 442/575/207 715/1111/569 711/1107/565 +f 441/574/206 454/587/219 706/1102/560 736/1133/590 +f 434/567/199 441/574/206 736/1133/590 725/1121/579 +f 712/1108/566 710/1106/564 737/1134/591 738/1135/592 +f 732/1128/586 733/1129/587 739/1136/593 740/1137/594 +f 726/1122/580 729/1125/583 741/1138/595 742/1139/596 +f 733/1131/587 734/1130/588 743/1140/597 739/1141/593 +f 723/1119/577 722/1118/576 744/1142/598 745/1143/599 +f 734/1130/588 735/1132/589 746/1144/600 743/1140/597 +f 730/1126/584 727/1123/581 747/1145/601 748/1146/602 +f 735/1132/589 718/1114/572 749/1147/603 746/1144/600 +f 711/1107/565 715/1111/569 750/1148/604 751/1149/605 +f 736/1133/590 706/1102/560 752/1150/606 753/1151/607 +f 725/1121/579 736/1133/590 753/1151/607 754/1152/608 +f 706/1102/560 705/1101/559 755/1153/609 752/1150/606 +f 708/1104/562 707/1103/561 756/1154/610 757/1155/611 +f 710/1106/564 709/1105/563 758/1156/612 737/1134/591 +f 705/1101/559 711/1107/565 751/1149/605 755/1153/609 +f 707/1103/561 712/1108/566 738/1135/592 756/1154/610 +f 714/1110/568 713/1109/567 759/1157/613 760/1158/614 +f 715/1111/569 708/1104/562 757/1155/611 750/1148/604 +f 709/1105/563 716/1112/570 761/1159/615 758/1156/612 +f 718/1114/572 717/1113/571 762/1160/616 749/1147/603 +f 720/1116/574 719/1115/573 763/1161/617 764/1162/618 +f 716/1112/570 720/1116/574 764/1162/618 761/1159/615 +f 717/1113/571 721/1117/575 765/1163/619 762/1160/616 +f 722/1118/576 714/1110/568 760/1158/614 744/1142/598 +f 724/1120/578 723/1119/577 745/1143/599 766/1164/620 +f 721/1117/575 725/1121/579 754/1152/608 765/1163/619 +f 727/1123/581 726/1122/580 742/1139/596 747/1145/601 +f 729/1125/583 728/1124/582 767/1165/621 741/1138/595 +f 713/1109/567 730/1126/584 748/1146/602 759/1157/613 +f 728/1124/582 731/1127/585 768/1166/622 767/1165/621 +f 719/1115/573 724/1120/578 766/1164/620 763/1161/617 +f 731/1127/585 732/1128/586 740/1137/594 768/1166/622 +f 748/1146/602 747/1145/601 769/1167/623 770/1168/624 +f 746/1144/600 749/1147/603 771/1169/625 772/1170/626 +f 751/1149/605 750/1148/604 773/1171/627 774/1172/628 +f 753/1151/607 752/1150/606 775/1173/629 776/1174/630 +f 754/1152/608 753/1151/607 776/1174/630 777/1175/631 +f 752/1150/606 755/1153/609 778/1176/632 775/1173/629 +f 757/1155/611 756/1154/610 779/1177/633 780/1178/634 +f 737/1134/591 758/1156/612 781/1179/635 782/1180/636 +f 755/1153/609 751/1149/605 774/1172/628 778/1176/632 +f 756/1154/610 738/1135/592 783/1181/637 779/1177/633 +f 760/1158/614 759/1157/613 784/1182/638 785/1183/639 +f 750/1148/604 757/1155/611 780/1178/634 773/1171/627 +f 758/1156/612 761/1159/615 786/1184/640 781/1179/635 +f 749/1147/603 762/1160/616 787/1185/641 771/1169/625 +f 764/1162/618 763/1161/617 788/1186/642 789/1187/643 +f 761/1159/615 764/1162/618 789/1187/643 786/1184/640 +f 762/1160/616 765/1163/619 790/1188/644 787/1185/641 +f 744/1142/598 760/1158/614 785/1183/639 791/1189/645 +f 766/1164/620 745/1143/599 792/1190/646 793/1191/647 +f 765/1163/619 754/1152/608 777/1175/631 790/1188/644 +f 747/1145/601 742/1139/596 794/1192/648 769/1167/623 +f 741/1138/595 767/1165/621 795/1193/649 796/1194/650 +f 759/1157/613 748/1146/602 770/1168/624 784/1182/638 +f 767/1165/621 768/1166/622 797/1195/651 795/1193/649 +f 763/1161/617 766/1164/620 793/1191/647 788/1186/642 +f 768/1166/622 740/1137/594 798/1196/652 797/1195/651 +f 738/1135/592 737/1134/591 782/1180/636 783/1181/637 +f 740/1137/594 739/1136/593 799/1197/653 798/1196/652 +f 742/1139/596 741/1138/595 796/1194/650 794/1192/648 +f 739/1141/593 743/1140/597 800/1198/654 799/1199/653 +f 745/1143/599 744/1142/598 791/1189/645 792/1190/646 +f 743/1140/597 746/1144/600 772/1170/626 800/1198/654 +f 782/1180/636 781/1179/635 801/1200/655 802/1201/656 +f 778/1176/632 774/1172/628 803/1202/657 804/1203/658 +f 779/1177/633 783/1181/637 805/1204/659 806/1205/660 +f 785/1183/639 784/1182/638 807/1206/661 808/1207/662 +f 773/1171/627 780/1178/634 809/1208/663 810/1209/664 +f 781/1179/635 786/1184/640 811/1210/665 801/1200/655 +f 771/1169/625 787/1185/641 812/1211/666 813/1212/667 +f 789/1187/643 788/1186/642 814/1213/668 815/1214/669 +f 786/1184/640 789/1187/643 815/1214/669 811/1210/665 +f 787/1185/641 790/1188/644 816/1215/670 812/1211/666 +f 791/1189/645 785/1183/639 808/1207/662 817/1216/671 +f 793/1191/647 792/1190/646 818/1217/672 819/1218/673 +f 790/1188/644 777/1175/631 820/1219/674 816/1215/670 +f 769/1167/623 794/1192/648 821/1220/675 822/1221/676 +f 796/1194/650 795/1193/649 823/1222/677 824/1223/678 +f 784/1182/638 770/1168/624 825/1224/679 807/1206/661 +f 795/1193/649 797/1195/651 826/1225/680 823/1222/677 +f 788/1186/642 793/1191/647 819/1218/673 814/1213/668 +f 797/1195/651 798/1196/652 827/1226/681 826/1225/680 +f 783/1181/637 782/1180/636 802/1201/656 805/1204/659 +f 798/1196/652 799/1197/653 828/1227/682 827/1226/681 +f 794/1192/648 796/1194/650 824/1223/678 821/1220/675 +f 799/1199/653 800/1198/654 829/1228/683 828/1229/682 +f 792/1190/646 791/1189/645 817/1216/671 818/1217/672 +f 800/1198/654 772/1170/626 830/1230/684 829/1228/683 +f 770/1168/624 769/1167/623 822/1221/676 825/1224/679 +f 772/1170/626 771/1169/625 813/1212/667 830/1230/684 +f 774/1172/628 773/1171/627 810/1209/664 803/1202/657 +f 776/1174/630 775/1173/629 831/1231/685 832/1232/686 +f 777/1175/631 776/1174/630 832/1232/686 820/1219/674 +f 775/1173/629 778/1176/632 804/1203/658 831/1231/685 +f 780/1178/634 779/1177/633 806/1205/660 809/1208/663 +f 812/1211/666 816/1215/670 833/1233/687 834/1234/688 +f 817/1216/671 808/1207/662 835/1235/689 836/1236/690 +f 819/1218/673 818/1217/672 837/1237/691 838/1238/692 +f 816/1215/670 820/1219/674 839/1239/693 833/1233/687 +f 822/1221/676 821/1220/675 840/1240/694 841/1241/695 +f 824/1223/678 823/1222/677 842/1242/696 843/1243/697 +f 807/1206/661 825/1224/679 844/1244/698 845/1245/699 +f 823/1222/677 826/1225/680 846/1246/700 842/1242/696 +f 814/1213/668 819/1218/673 838/1238/692 847/1247/701 +f 826/1225/680 827/1226/681 848/1248/702 846/1246/700 +f 805/1204/659 802/1201/656 849/1249/703 850/1250/704 +f 827/1226/681 828/1227/682 851/1251/705 848/1248/702 +f 821/1220/675 824/1223/678 843/1243/697 840/1240/694 +f 828/1229/682 829/1228/683 852/1252/706 851/1253/705 +f 818/1217/672 817/1216/671 836/1236/690 837/1237/691 +f 829/1228/683 830/1230/684 853/1254/707 852/1252/706 +f 825/1224/679 822/1221/676 841/1241/695 844/1244/698 +f 830/1230/684 813/1212/667 854/1255/708 853/1254/707 +f 803/1202/657 810/1209/664 855/1256/709 856/1257/710 +f 832/1232/686 831/1231/685 857/1258/711 858/1259/712 +f 820/1219/674 832/1232/686 858/1259/712 839/1239/693 +f 831/1231/685 804/1203/658 859/1260/713 857/1258/711 +f 809/1208/663 806/1205/660 860/1261/714 861/1262/715 +f 802/1201/656 801/1200/655 862/1263/716 849/1249/703 +f 804/1203/658 803/1202/657 856/1257/710 859/1260/713 +f 806/1205/660 805/1204/659 850/1250/704 860/1261/714 +f 808/1207/662 807/1206/661 845/1245/699 835/1235/689 +f 810/1209/664 809/1208/663 861/1262/715 855/1256/709 +f 801/1200/655 811/1210/665 863/1264/717 862/1263/716 +f 813/1212/667 812/1211/666 834/1234/688 854/1255/708 +f 815/1214/669 814/1213/668 847/1247/701 864/1265/718 +f 811/1210/665 815/1214/669 864/1265/718 863/1264/717 +f 847/1247/701 838/1238/692 865/1266/719 866/1267/720 +f 846/1246/700 848/1248/702 867/1268/721 868/1269/722 +f 850/1250/704 849/1249/703 869/1270/723 870/1271/724 +f 848/1248/702 851/1251/705 871/1272/725 867/1268/721 +f 840/1240/694 843/1243/697 872/1273/726 873/1274/727 +f 851/1253/705 852/1252/706 874/1275/728 871/1276/725 +f 837/1237/691 836/1236/690 875/1277/729 876/1278/730 +f 852/1252/706 853/1254/707 877/1279/731 874/1275/728 +f 844/1244/698 841/1241/695 878/1280/732 879/1281/733 +f 853/1254/707 854/1255/708 880/1282/734 877/1279/731 +f 856/1257/710 855/1256/709 881/1283/735 882/1284/736 +f 858/1259/712 857/1258/711 883/1285/737 884/1286/738 +f 839/1239/693 858/1259/712 884/1286/738 885/1287/739 +f 857/1258/711 859/1260/713 886/1288/740 883/1285/737 +f 861/1262/715 860/1261/714 887/1289/741 888/1290/742 +f 849/1249/703 862/1263/716 889/1291/743 869/1270/723 +f 859/1260/713 856/1257/710 882/1284/736 886/1288/740 +f 860/1261/714 850/1250/704 870/1271/724 887/1289/741 +f 835/1235/689 845/1245/699 890/1292/744 891/1293/745 +f 855/1256/709 861/1262/715 888/1290/742 881/1283/735 +f 862/1263/716 863/1264/717 892/1294/746 889/1291/743 +f 854/1255/708 834/1234/688 893/1295/747 880/1282/734 +f 864/1265/718 847/1247/701 866/1267/720 894/1296/748 +f 863/1264/717 864/1265/718 894/1296/748 892/1294/746 +f 834/1234/688 833/1233/687 895/1297/749 893/1295/747 +f 836/1236/690 835/1235/689 891/1293/745 875/1277/729 +f 838/1238/692 837/1237/691 876/1278/730 865/1266/719 +f 833/1233/687 839/1239/693 885/1287/739 895/1297/749 +f 841/1241/695 840/1240/694 873/1274/727 878/1280/732 +f 843/1243/697 842/1242/696 896/1298/750 872/1273/726 +f 845/1245/699 844/1244/698 879/1281/733 890/1292/744 +f 842/1242/696 846/1246/700 868/1269/722 896/1298/750 +f 876/1278/730 875/1277/729 897/1299/751 898/1300/752 +f 874/1275/728 877/1279/731 899/1301/753 900/1302/754 +f 879/1281/733 878/1280/732 901/1303/755 902/1304/756 +f 877/1279/731 880/1282/734 903/1305/757 899/1301/753 +f 882/1284/736 881/1283/735 904/1306/758 905/1307/759 +f 884/1286/738 883/1285/737 906/1308/760 907/1309/761 +f 885/1287/739 884/1286/738 907/1309/761 908/1310/762 +f 883/1285/737 886/1288/740 909/1311/763 906/1308/760 +f 888/1290/742 887/1289/741 910/1312/764 911/1313/765 +f 869/1270/723 889/1291/743 912/1314/766 913/1315/767 +f 886/1288/740 882/1284/736 905/1307/759 909/1311/763 +f 887/1289/741 870/1271/724 914/1316/768 910/1312/764 +f 891/1293/745 890/1292/744 915/1317/769 916/1318/770 +f 881/1283/735 888/1290/742 911/1313/765 904/1306/758 +f 889/1291/743 892/1294/746 917/1319/771 912/1314/766 +f 880/1282/734 893/1295/747 918/1320/772 903/1305/757 +f 894/1296/748 866/1267/720 919/1321/773 920/1322/774 +f 892/1294/746 894/1296/748 920/1322/774 917/1319/771 +f 893/1295/747 895/1297/749 921/1323/775 918/1320/772 +f 875/1277/729 891/1293/745 916/1318/770 897/1299/751 +f 865/1266/719 876/1278/730 898/1300/752 922/1324/776 +f 895/1297/749 885/1287/739 908/1310/762 921/1323/775 +f 878/1280/732 873/1274/727 923/1325/777 901/1303/755 +f 872/1273/726 896/1298/750 924/1326/778 925/1327/779 +f 890/1292/744 879/1281/733 902/1304/756 915/1317/769 +f 896/1298/750 868/1269/722 926/1328/780 924/1326/778 +f 866/1267/720 865/1266/719 922/1324/776 919/1321/773 +f 868/1269/722 867/1268/721 927/1329/781 926/1328/780 +f 870/1271/724 869/1270/723 913/1315/767 914/1316/768 +f 867/1268/721 871/1272/725 928/1330/782 927/1329/781 +f 873/1274/727 872/1273/726 925/1327/779 923/1325/777 +f 871/1276/725 874/1275/728 900/1302/754 928/1331/782 +f 908/1310/762 907/1309/761 929/1332/783 930/1333/784 +f 906/1308/760 909/1311/763 931/1334/785 932/1335/786 +f 911/1313/765 910/1312/764 933/1336/787 934/1337/788 +f 913/1315/767 912/1314/766 935/1338/789 936/1339/790 +f 909/1311/763 905/1307/759 937/1340/791 931/1334/785 +f 910/1312/764 914/1316/768 938/1341/792 933/1336/787 +f 916/1318/770 915/1317/769 939/1342/793 940/1343/794 +f 904/1306/758 911/1313/765 934/1337/788 941/1344/795 +f 912/1314/766 917/1319/771 942/1345/796 935/1338/789 +f 903/1305/757 918/1320/772 943/1346/797 944/1347/798 +f 920/1322/774 919/1321/773 945/1348/799 946/1349/800 +f 917/1319/771 920/1322/774 946/1349/800 942/1345/796 +f 918/1320/772 921/1323/775 947/1350/801 943/1346/797 +f 897/1299/751 916/1318/770 940/1343/794 948/1351/802 +f 922/1324/776 898/1300/752 949/1352/803 950/1353/804 +f 921/1323/775 908/1310/762 930/1333/784 947/1350/801 +f 901/1303/755 923/1325/777 951/1354/805 952/1355/806 +f 925/1327/779 924/1326/778 953/1356/807 954/1357/808 +f 915/1317/769 902/1304/756 955/1358/809 939/1342/793 +f 924/1326/778 926/1328/780 956/1359/810 953/1356/807 +f 919/1321/773 922/1324/776 950/1353/804 945/1348/799 +f 926/1328/780 927/1329/781 957/1360/811 956/1359/810 +f 914/1316/768 913/1315/767 936/1339/790 938/1341/792 +f 927/1329/781 928/1330/782 958/1361/812 957/1360/811 +f 923/1325/777 925/1327/779 954/1357/808 951/1354/805 +f 928/1331/782 900/1302/754 959/1362/813 958/1363/812 +f 898/1300/752 897/1299/751 948/1351/802 949/1352/803 +f 900/1302/754 899/1301/753 960/1364/814 959/1362/813 +f 902/1304/756 901/1303/755 952/1355/806 955/1358/809 +f 899/1301/753 903/1305/757 944/1347/798 960/1364/814 +f 905/1307/759 904/1306/758 941/1344/795 937/1340/791 +f 907/1309/761 906/1308/760 932/1335/786 929/1332/783 +f 935/1338/789 942/1345/796 961/1365/815 962/1366/816 +f 944/1347/798 943/1346/797 963/1367/817 964/1368/818 +f 946/1349/800 945/1348/799 965/1369/819 966/1370/820 +f 942/1345/796 946/1349/800 966/1370/820 961/1365/815 +f 943/1346/797 947/1350/801 967/1371/821 963/1367/817 +f 948/1351/802 940/1343/794 968/1372/822 969/1373/823 +f 950/1353/804 949/1352/803 970/1374/824 971/1375/825 +f 947/1350/801 930/1333/784 972/1376/826 967/1371/821 +f 952/1355/806 951/1354/805 973/1377/827 974/1378/828 +f 954/1357/808 953/1356/807 975/1379/829 976/1380/830 +f 939/1342/793 955/1358/809 977/1381/831 978/1382/832 +f 953/1356/807 956/1359/810 979/1383/833 975/1379/829 +f 945/1348/799 950/1353/804 971/1375/825 965/1369/819 +f 956/1359/810 957/1360/811 980/1384/834 979/1383/833 +f 938/1341/792 936/1339/790 981/1385/835 982/1386/836 +f 957/1360/811 958/1361/812 983/1387/837 980/1384/834 +f 951/1354/805 954/1357/808 976/1380/830 973/1377/827 +f 958/1363/812 959/1362/813 984/1388/838 983/1389/837 +f 949/1352/803 948/1351/802 969/1373/823 970/1374/824 +f 959/1362/813 960/1364/814 985/1390/839 984/1388/838 +f 955/1358/809 952/1355/806 974/1378/828 977/1381/831 +f 960/1364/814 944/1347/798 964/1368/818 985/1390/839 +f 937/1340/791 941/1344/795 986/1391/840 987/1392/841 +f 929/1332/783 932/1335/786 988/1393/842 989/1394/843 +f 930/1333/784 929/1332/783 989/1394/843 972/1376/826 +f 932/1335/786 931/1334/785 990/1395/844 988/1393/842 +f 934/1337/788 933/1336/787 991/1396/845 992/1397/846 +f 936/1339/790 935/1338/789 962/1366/816 981/1385/835 +f 931/1334/785 937/1340/791 987/1392/841 990/1395/844 +f 933/1336/787 938/1341/792 982/1386/836 991/1396/845 +f 940/1343/794 939/1342/793 978/1382/832 968/1372/822 +f 941/1344/795 934/1337/788 992/1397/846 986/1391/840 +f 976/1380/830 975/1379/829 993/1398/847 994/1399/848 +f 978/1382/832 977/1381/831 995/1400/849 996/1401/850 +f 975/1379/829 979/1383/833 997/1402/851 993/1398/847 +f 965/1369/819 971/1375/825 998/1403/852 999/1404/853 +f 979/1383/833 980/1384/834 1000/1405/854 997/1402/851 +f 982/1386/836 981/1385/835 1001/1406/855 1002/1407/856 +f 980/1384/834 983/1387/837 1003/1408/857 1000/1405/854 +f 973/1377/827 976/1380/830 994/1399/848 1004/1409/858 +f 983/1389/837 984/1388/838 1005/1410/859 1003/1411/857 +f 970/1374/824 969/1373/823 1006/1412/860 1007/1413/861 +f 984/1388/838 985/1390/839 1008/1414/862 1005/1410/859 +f 977/1381/831 974/1378/828 1009/1415/863 995/1400/849 +f 985/1390/839 964/1368/818 1010/1416/864 1008/1414/862 +f 987/1392/841 986/1391/840 1011/1417/865 1012/1418/866 +f 989/1394/843 988/1393/842 1013/1419/867 1014/1420/868 +f 972/1376/826 989/1394/843 1014/1420/868 1015/1421/869 +f 988/1393/842 990/1395/844 1016/1422/870 1013/1419/867 +f 992/1397/846 991/1396/845 1017/1423/871 1018/1424/872 +f 981/1385/835 962/1366/816 1019/1425/873 1001/1406/855 +f 990/1395/844 987/1392/841 1012/1418/866 1016/1422/870 +f 991/1396/845 982/1386/836 1002/1407/856 1017/1423/871 +f 968/1372/822 978/1382/832 996/1401/850 1020/1426/874 +f 986/1391/840 992/1397/846 1018/1424/872 1011/1417/865 +f 962/1366/816 961/1365/815 1021/1427/875 1019/1425/873 +f 964/1368/818 963/1367/817 1022/1428/876 1010/1416/864 +f 966/1370/820 965/1369/819 999/1404/853 1023/1429/877 +f 961/1365/815 966/1370/820 1023/1429/877 1021/1427/875 +f 963/1367/817 967/1371/821 1024/1430/878 1022/1428/876 +f 969/1373/823 968/1372/822 1020/1426/874 1006/1412/860 +f 971/1375/825 970/1374/824 1007/1413/861 998/1403/852 +f 967/1371/821 972/1376/826 1015/1421/869 1024/1430/878 +f 974/1378/828 973/1377/827 1004/1409/858 1009/1415/863 +f 1004/1409/858 994/1399/848 1025/1431/879 1026/1432/880 +f 1003/1411/857 1005/1410/859 1027/1433/881 1028/1434/882 +f 1007/1413/861 1006/1412/860 1029/1435/883 1030/1436/884 +f 1005/1410/859 1008/1414/862 1031/1437/885 1027/1433/881 +f 995/1400/849 1009/1415/863 1032/1438/886 1033/1439/887 +f 1008/1414/862 1010/1416/864 1034/1440/888 1031/1437/885 +f 1012/1418/866 1011/1417/865 1035/1441/889 1036/1442/890 +f 1014/1420/868 1013/1419/867 1037/1443/891 1038/1444/892 +f 1015/1421/869 1014/1420/868 1038/1444/892 1039/1445/893 +f 1013/1419/867 1016/1422/870 1040/1446/894 1037/1443/891 +f 1018/1424/872 1017/1423/871 1041/1447/895 1042/1448/896 +f 1001/1406/855 1019/1425/873 1043/1449/897 1044/1450/898 +f 1016/1422/870 1012/1418/866 1036/1442/890 1040/1446/894 +f 1017/1423/871 1002/1407/856 1045/1451/899 1041/1447/895 +f 1020/1426/874 996/1401/850 1046/1452/900 1047/1453/901 +f 1011/1417/865 1018/1424/872 1042/1448/896 1035/1441/889 +f 1019/1425/873 1021/1427/875 1048/1454/902 1043/1449/897 +f 1010/1416/864 1022/1428/876 1049/1455/903 1034/1440/888 +f 1023/1429/877 999/1404/853 1050/1456/904 1051/1457/905 +f 1021/1427/875 1023/1429/877 1051/1457/905 1048/1454/902 +f 1022/1428/876 1024/1430/878 1052/1458/906 1049/1455/903 +f 1006/1412/860 1020/1426/874 1047/1453/901 1029/1435/883 +f 998/1403/852 1007/1413/861 1030/1436/884 1053/1459/907 +f 1024/1430/878 1015/1421/869 1039/1445/893 1052/1458/906 +f 1009/1415/863 1004/1409/858 1026/1432/880 1032/1438/886 +f 994/1399/848 993/1398/847 1054/1460/908 1025/1431/879 +f 996/1401/850 995/1400/849 1033/1439/887 1046/1452/900 +f 993/1398/847 997/1402/851 1055/1461/909 1054/1460/908 +f 999/1404/853 998/1403/852 1053/1459/907 1050/1456/904 +f 997/1402/851 1000/1405/854 1056/1462/910 1055/1461/909 +f 1002/1407/856 1001/1406/855 1044/1450/898 1045/1451/899 +f 1000/1405/854 1003/1408/857 1028/1463/882 1056/1462/910 +f 1036/1442/890 1035/1441/889 1057/1464/911 1058/1465/912 +f 1038/1444/892 1037/1443/891 1059/1466/913 1060/1467/914 +f 1039/1445/893 1038/1444/892 1060/1467/914 1061/1468/915 +f 1037/1443/891 1040/1446/894 1062/1469/916 1059/1466/913 +f 1042/1448/896 1041/1447/895 1063/1470/917 1064/1471/918 +f 1044/1450/898 1043/1449/897 1065/1472/919 1066/1473/920 +f 1040/1446/894 1036/1442/890 1058/1465/912 1062/1469/916 +f 1041/1447/895 1045/1451/899 1067/1474/921 1063/1470/917 +f 1047/1453/901 1046/1452/900 1068/1475/922 1069/1476/923 +f 1035/1441/889 1042/1448/896 1064/1471/918 1057/1464/911 +f 1043/1449/897 1048/1454/902 1070/1477/924 1065/1472/919 +f 1034/1440/888 1049/1455/903 1071/1478/925 1072/1479/926 +f 1051/1457/905 1050/1456/904 1073/1480/927 1074/1481/928 +f 1048/1454/902 1051/1457/905 1074/1481/928 1070/1477/924 +f 1049/1455/903 1052/1458/906 1075/1482/929 1071/1478/925 +f 1029/1435/883 1047/1453/901 1069/1476/923 1076/1483/930 +f 1053/1459/907 1030/1436/884 1077/1484/931 1078/1485/932 +f 1052/1458/906 1039/1445/893 1061/1468/915 1075/1482/929 +f 1032/1438/886 1026/1432/880 1079/1486/933 1080/1487/934 +f 1025/1431/879 1054/1460/908 1081/1488/935 1082/1489/936 +f 1046/1452/900 1033/1439/887 1083/1490/937 1068/1475/922 +f 1054/1460/908 1055/1461/909 1084/1491/938 1081/1488/935 +f 1050/1456/904 1053/1459/907 1078/1485/932 1073/1480/927 +f 1055/1461/909 1056/1462/910 1085/1492/939 1084/1491/938 +f 1045/1451/899 1044/1450/898 1066/1473/920 1067/1474/921 +f 1056/1462/910 1028/1463/882 1086/1493/940 1085/1492/939 +f 1026/1432/880 1025/1431/879 1082/1489/936 1079/1486/933 +f 1028/1434/882 1027/1433/881 1087/1494/941 1086/1495/940 +f 1030/1436/884 1029/1435/883 1076/1483/930 1077/1484/931 +f 1027/1433/881 1031/1437/885 1088/1496/942 1087/1494/941 +f 1033/1439/887 1032/1438/886 1080/1487/934 1083/1490/937 +f 1031/1437/885 1034/1440/888 1072/1479/926 1088/1496/942 +f 1063/1470/917 1067/1474/921 1089/1497/943 1090/1498/944 +f 1069/1476/923 1068/1475/922 1091/1499/945 1092/1500/946 +f 1057/1464/911 1064/1471/918 1093/1501/947 1094/1502/948 +f 1065/1472/919 1070/1477/924 1095/1503/949 1096/1504/950 +f 1072/1479/926 1071/1478/925 1097/1505/951 1098/1506/952 +f 1074/1481/928 1073/1480/927 1099/1507/953 1100/1508/954 +f 1070/1477/924 1074/1481/928 1100/1508/954 1095/1503/949 +f 1071/1478/925 1075/1482/929 1101/1509/955 1097/1505/951 +f 1076/1483/930 1069/1476/923 1092/1500/946 1102/1510/956 +f 1078/1485/932 1077/1484/931 1103/1511/957 1104/1512/958 +f 1075/1482/929 1061/1468/915 1105/1513/959 1101/1509/955 +f 1080/1487/934 1079/1486/933 1106/1514/960 1107/1515/961 +f 1082/1489/936 1081/1488/935 1108/1516/962 1109/1517/963 +f 1068/1475/922 1083/1490/937 1110/1518/964 1091/1499/945 +f 1081/1488/935 1084/1491/938 1111/1519/965 1108/1516/962 +f 1073/1480/927 1078/1485/932 1104/1512/958 1099/1507/953 +f 1084/1491/938 1085/1492/939 1112/1520/966 1111/1519/965 +f 1067/1474/921 1066/1473/920 1113/1521/967 1089/1497/943 +f 1085/1492/939 1086/1493/940 1114/1522/968 1112/1520/966 +f 1079/1486/933 1082/1489/936 1109/1517/963 1106/1514/960 +f 1086/1495/940 1087/1494/941 1115/1523/969 1114/1524/968 +f 1077/1484/931 1076/1483/930 1102/1510/956 1103/1511/957 +f 1087/1494/941 1088/1496/942 1116/1525/970 1115/1523/969 +f 1083/1490/937 1080/1487/934 1107/1515/961 1110/1518/964 +f 1088/1496/942 1072/1479/926 1098/1506/952 1116/1525/970 +f 1058/1465/912 1057/1464/911 1094/1502/948 1117/1526/971 +f 1060/1467/914 1059/1466/913 1118/1527/972 1119/1528/973 +f 1061/1468/915 1060/1467/914 1119/1528/973 1105/1513/959 +f 1059/1466/913 1062/1469/916 1120/1529/974 1118/1527/972 +f 1064/1471/918 1063/1470/917 1090/1498/944 1093/1501/947 +f 1066/1473/920 1065/1472/919 1096/1504/950 1113/1521/967 +f 1062/1469/916 1058/1465/912 1117/1526/971 1120/1529/974 +f 1104/1512/958 1103/1511/957 1121/1530/975 1122/1531/976 +f 1101/1509/955 1105/1513/959 1123/1532/977 1124/1533/978 +f 1107/1515/961 1106/1514/960 1125/1534/979 1126/1535/980 +f 1109/1517/963 1108/1516/962 1127/1536/981 1128/1537/982 +f 1091/1499/945 1110/1518/964 1129/1538/983 1130/1539/984 +f 1108/1516/962 1111/1519/965 1131/1540/985 1127/1536/981 +f 1099/1507/953 1104/1512/958 1122/1531/976 1132/1541/986 +f 1111/1519/965 1112/1520/966 1133/1542/987 1131/1540/985 +f 1089/1497/943 1113/1521/967 1134/1543/988 1135/1544/989 +f 1112/1520/966 1114/1522/968 1136/1545/990 1133/1542/987 +f 1106/1514/960 1109/1517/963 1128/1537/982 1125/1534/979 +f 1114/1524/968 1115/1523/969 1137/1546/991 1136/1547/990 +f 1103/1511/957 1102/1510/956 1138/1548/992 1121/1530/975 +f 1115/1523/969 1116/1525/970 1139/1549/993 1137/1546/991 +f 1110/1518/964 1107/1515/961 1126/1535/980 1129/1538/983 +f 1116/1525/970 1098/1506/952 1140/1550/994 1139/1549/993 +f 1117/1526/971 1094/1502/948 1141/1551/995 1142/1552/996 +f 1119/1528/973 1118/1527/972 1143/1553/997 1144/1554/998 +f 1105/1513/959 1119/1528/973 1144/1554/998 1123/1532/977 +f 1118/1527/972 1120/1529/974 1145/1555/999 1143/1553/997 +f 1093/1501/947 1090/1498/944 1146/1556/1000 1147/1557/1001 +f 1113/1521/967 1096/1504/950 1148/1558/1002 1134/1543/988 +f 1120/1529/974 1117/1526/971 1142/1552/996 1145/1555/999 +f 1090/1498/944 1089/1497/943 1135/1544/989 1146/1556/1000 +f 1092/1500/946 1091/1499/945 1130/1539/984 1149/1559/1003 +f 1094/1502/948 1093/1501/947 1147/1557/1001 1141/1551/995 +f 1096/1504/950 1095/1503/949 1150/1560/1004 1148/1558/1002 +f 1098/1506/952 1097/1505/951 1151/1561/1005 1140/1550/994 +f 1100/1508/954 1099/1507/953 1132/1541/986 1152/1562/1006 +f 1095/1503/949 1100/1508/954 1152/1562/1006 1150/1560/1004 +f 1097/1505/951 1101/1509/955 1124/1533/978 1151/1561/1005 +f 1102/1510/956 1092/1500/946 1149/1559/1003 1138/1548/992 +f 1131/1540/985 1133/1542/987 1153/1563/1007 1154/1564/1008 +f 1135/1544/989 1134/1543/988 1155/1565/1009 1156/1566/1010 +f 1133/1542/987 1136/1545/990 1157/1567/1011 1153/1563/1007 +f 1125/1534/979 1128/1537/982 1158/1568/1012 1159/1569/1013 +f 1136/1547/990 1137/1546/991 1160/1570/1014 1157/1571/1011 +f 1121/1530/975 1138/1548/992 1161/1572/1015 1162/1573/1016 +f 1137/1546/991 1139/1549/993 1163/1574/1017 1160/1570/1014 +f 1129/1538/983 1126/1535/980 1164/1575/1018 1165/1576/1019 +f 1139/1549/993 1140/1550/994 1166/1577/1020 1163/1574/1017 +f 1142/1552/996 1141/1551/995 1167/1578/1021 1168/1579/1022 +f 1144/1554/998 1143/1553/997 1169/1580/1023 1170/1581/1024 +f 1123/1532/977 1144/1554/998 1170/1581/1024 1171/1582/1025 +f 1143/1553/997 1145/1555/999 1172/1583/1026 1169/1580/1023 +f 1147/1557/1001 1146/1556/1000 1173/1584/1027 1174/1585/1028 +f 1134/1543/988 1148/1558/1002 1175/1586/1029 1155/1565/1009 +f 1145/1555/999 1142/1552/996 1168/1579/1022 1172/1583/1026 +f 1146/1556/1000 1135/1544/989 1156/1566/1010 1173/1584/1027 +f 1149/1559/1003 1130/1539/984 1176/1587/1030 1177/1588/1031 +f 1141/1551/995 1147/1557/1001 1174/1585/1028 1167/1578/1021 +f 1148/1558/1002 1150/1560/1004 1178/1589/1032 1175/1586/1029 +f 1140/1550/994 1151/1561/1005 1179/1590/1033 1166/1577/1020 +f 1152/1562/1006 1132/1541/986 1180/1591/1034 1181/1592/1035 +f 1150/1560/1004 1152/1562/1006 1181/1592/1035 1178/1589/1032 +f 1151/1561/1005 1124/1533/978 1182/1593/1036 1179/1590/1033 +f 1138/1548/992 1149/1559/1003 1177/1588/1031 1161/1572/1015 +f 1122/1531/976 1121/1530/975 1162/1573/1016 1183/1594/1037 +f 1124/1533/978 1123/1532/977 1171/1582/1025 1182/1593/1036 +f 1126/1535/980 1125/1534/979 1159/1569/1013 1164/1575/1018 +f 1128/1537/982 1127/1536/981 1184/1595/1038 1158/1568/1012 +f 1130/1539/984 1129/1538/983 1165/1576/1019 1176/1587/1030 +f 1127/1536/981 1131/1540/985 1154/1564/1008 1184/1595/1038 +f 1132/1541/986 1122/1531/976 1183/1594/1037 1180/1591/1034 +f 1160/1570/1014 1163/1574/1017 536/734/303 541/739/308 +f 1165/1576/1019 1164/1575/1018 591/839/404 652/983/508 +f 1163/1574/1017 1166/1577/1020 524/722/291 536/734/303 +f 1168/1579/1022 1167/1578/1021 545/743/312 702/1098/556 +f 1170/1581/1024 1169/1580/1023 512/710/279 511/709/278 +f 1171/1582/1025 1170/1581/1024 511/709/278 515/713/282 +f 1169/1580/1023 1172/1583/1026 519/717/286 512/710/279 +f 1174/1585/1028 1173/1584/1027 650/981/506 543/741/310 +f 1155/1565/1009 1175/1586/1029 567/790/358 555/767/336 +f 1172/1583/1026 1168/1579/1022 702/1098/556 519/717/286 +f 1173/1584/1027 1156/1566/1010 558/770/339 650/981/506 +f 1177/1588/1031 1176/1587/1030 584/826/391 587/829/394 +f 1167/1578/1021 1174/1585/1028 543/741/310 545/743/312 +f 1175/1586/1029 1178/1589/1032 568/791/359 567/790/358 +f 1166/1577/1020 1179/1590/1033 521/719/288 524/722/291 +f 1181/1592/1035 1180/1591/1034 573/801/368 651/982/507 +f 1178/1589/1032 1181/1592/1035 651/982/507 568/791/359 +f 1179/1590/1033 1182/1593/1036 517/715/284 521/719/288 +f 1161/1572/1015 1177/1588/1031 587/829/394 592/840/405 +f 1183/1594/1037 1162/1573/1016 653/985/509 574/802/369 +f 1182/1593/1036 1171/1582/1025 515/713/282 517/715/284 +f 1164/1575/1018 1159/1569/1013 529/727/296 591/839/404 +f 1158/1568/1012 1184/1595/1038 563/786/354 530/728/297 +f 1176/1587/1030 1165/1576/1019 652/983/508 584/826/391 +f 1184/1595/1038 1154/1564/1008 564/787/355 563/786/354 +f 1180/1591/1034 1183/1594/1037 574/802/369 573/801/368 +f 1154/1564/1008 1153/1563/1007 551/763/332 564/787/355 +f 1156/1566/1010 1155/1565/1009 555/767/336 558/770/339 +f 1153/1563/1007 1157/1567/1011 552/764/333 551/763/332 +f 1159/1569/1013 1158/1568/1012 530/728/297 529/727/296 +f 1157/1571/1011 1160/1570/1014 541/739/308 552/984/333 +f 1162/1573/1016 1161/1572/1015 592/840/405 653/985/509 diff --git a/mods/pipeworks/models/pipeworks_pipe_4_lowpoly.obj b/mods/pipeworks/models/pipeworks_pipe_4_lowpoly.obj new file mode 100755 index 0000000..788b6b1 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_4_lowpoly.obj @@ -0,0 +1,358 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend' +# www.blender.org +o Cylinder.000_Cylinder.000_None.001 +v -0.125000 0.000000 0.051777 +v -0.051777 0.000000 0.125000 +v -0.051777 0.051777 0.125000 +v -0.088388 0.088388 0.088388 +v -0.125000 0.051777 0.051777 +v -0.125000 -0.000000 -0.051777 +v -0.125000 0.051777 -0.051777 +v -0.088388 0.088389 -0.088388 +v -0.051777 0.051777 -0.125000 +v -0.051777 -0.000000 -0.125000 +v 0.000000 0.051777 -0.125000 +v 0.000000 -0.000000 -0.125000 +v 0.000000 0.000000 0.125000 +v 0.000000 0.051777 0.125000 +v -0.125000 0.000000 0.000000 +v -0.125000 0.051777 -0.000000 +v -0.051777 0.125000 0.051777 +v -0.051777 0.125000 -0.051777 +v 0.500000 -0.156250 -0.064721 +v 0.500000 -0.064721 -0.156250 +v 0.500000 0.064721 -0.156250 +v 0.500000 0.156250 -0.064721 +v 0.500000 0.156250 0.064721 +v 0.500000 0.064721 0.156250 +v 0.500000 -0.064721 0.156250 +v 0.500000 -0.156250 0.064721 +v 0.468750 -0.064721 -0.156250 +v 0.468750 -0.156250 -0.064721 +v 0.468750 -0.156250 0.064721 +v 0.468750 -0.064721 0.156250 +v 0.468750 0.064721 0.156250 +v 0.468750 0.156250 0.064721 +v 0.468750 0.156250 -0.064721 +v 0.468750 0.064721 -0.156250 +v 0.156250 -0.468750 -0.064721 +v 0.064721 -0.468750 -0.156250 +v -0.064721 -0.468750 -0.156250 +v -0.156250 -0.468750 -0.064721 +v -0.156250 -0.468750 0.064721 +v -0.064721 -0.468750 0.156250 +v 0.064721 -0.468750 0.156250 +v 0.156250 -0.468750 0.064721 +v 0.064721 -0.500000 -0.156250 +v 0.156250 -0.500000 -0.064721 +v 0.156250 -0.500000 0.064721 +v 0.064721 -0.500000 0.156250 +v -0.064721 -0.500000 0.156250 +v -0.156250 -0.500000 0.064721 +v -0.156250 -0.500000 -0.064721 +v -0.064721 -0.500000 -0.156250 +v 0.468750 -0.125000 -0.051777 +v 0.468750 -0.051777 -0.125000 +v 0.468750 0.051777 -0.125000 +v 0.468750 0.125000 -0.051777 +v 0.468750 0.125000 0.051777 +v 0.468750 0.051777 0.125000 +v 0.468750 -0.051777 0.125000 +v 0.468750 -0.125000 0.051777 +v 0.125000 -0.468750 0.051777 +v 0.125000 -0.125000 0.051777 +v 0.051777 -0.051777 0.125000 +v 0.051777 -0.468750 0.125000 +v 0.125000 -0.468750 -0.051777 +v 0.051777 -0.468750 -0.125000 +v 0.051777 -0.051777 -0.125000 +v 0.125000 -0.125000 -0.051777 +v 0.000000 -0.051777 0.125000 +v 0.000000 -0.051777 -0.125000 +v -0.051777 -0.468750 0.125000 +v -0.125000 -0.468750 0.051777 +v -0.125000 -0.468750 -0.051777 +v -0.051777 -0.468750 -0.125000 +v -0.051777 -0.051777 -0.125000 +v -0.051777 -0.051777 0.125000 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 1.0000 0.2656 +vt 0.8750 0.2656 +vt 0.8750 0.2344 +vt 0.9375 0.2188 +vt 1.0000 0.2344 +vt 0.1250 0.2656 +vt 0.1250 0.2344 +vt 0.1875 0.2188 +vt 0.2500 0.2344 +vt 0.2500 0.2656 +vt 0.3125 0.2344 +vt 0.3125 0.2656 +vt 0.7500 0.2344 +vt 0.8125 0.2344 +vt 0.8125 0.2656 +vt 0.7500 0.2656 +vt -0.0000 0.2344 +vt 0.0625 0.2344 +vt 0.0625 0.2656 +vt -0.0000 0.2656 +vt -0.0000 0.2969 +vt 0.0625 0.2969 +vt 0.9375 0.3125 +vt 0.8750 0.2969 +vt 0.8750 0.2344 +vt 0.9375 0.2188 +vt 1.0000 0.2344 +vt 1.0000 0.2656 +vt 1.0000 0.2969 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 0.1250 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2344 +vt 0.1250 0.2031 +vt 0.8750 0.5156 +vt 0.7500 0.5156 +vt 0.8750 0.2656 +vt 0.8750 0.2969 +vt 1.0000 0.5156 +vt 1.0000 0.3281 +vt 0.2500 0.2969 +vt 0.2500 0.2656 +vt 0.3750 0.2656 +vt 0.3750 0.5156 +vt 0.2500 0.5156 +vt 0.6250 0.5156 +vt 0.6250 0.2344 +vt 0.6875 0.2188 +vt 0.1250 0.5156 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.5000 0.5156 +vt 0.5000 0.2344 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.5000 0.2656 +vt 0.3750 0.2656 +vt 0.3750 0.2344 +vt 0.3750 0.0156 +vt 0.5000 0.0156 +vt 0.7500 0.2344 +vt 0.7500 0.2656 +vt 0.6250 0.2656 +vt 0.6250 0.0156 +vt 0.7500 0.0156 +vt 0.5625 0.2656 +vt 0.8125 0.2344 +vt 0.3125 0.2344 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vt 0.3750 0.2344 +vt 0.4375 0.2188 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +vn -0.5441 0.5441 0.6386 +vn -0.8881 0.3251 0.3251 +vn -0.9054 0.3002 0.3002 +vn -0.9239 0.0000 -0.3827 +vn -0.9054 0.3002 -0.3002 +vn -0.3251 0.3251 -0.8881 +vn -0.3119 -0.1343 -0.9406 +vn -0.3827 0.0000 -0.9239 +vn -0.0783 0.5712 -0.8171 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.2288 0.3725 0.8994 +vn -0.9239 0.3827 0.0000 +vn -0.3119 0.9406 -0.1343 +vn -0.5441 0.6386 -0.5441 +vn -0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 0.2971 +vn -0.6302 -0.7173 0.2971 +vn -0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 0.7173 +vn -0.6302 -0.2971 0.7173 +vn 0.6302 0.2971 0.7173 +vn -0.6302 0.2971 0.7173 +vn 0.6302 0.7173 0.2971 +vn -0.6302 0.7173 0.2971 +vn 0.6302 0.7173 -0.2971 +vn -0.6302 0.7173 -0.2971 +vn 0.6302 0.2971 -0.7173 +vn -0.6302 0.2971 -0.7173 +vn 0.6303 -0.7173 -0.2971 +vn 0.6303 -0.2971 -0.7173 +vn 0.6303 0.2971 -0.7173 +vn 0.6303 0.7173 -0.2971 +vn 0.6303 0.7173 0.2971 +vn 0.6303 0.2971 0.7173 +vn 0.6303 -0.2971 0.7173 +vn 0.6303 -0.7173 0.2971 +vn 0.7173 -0.6303 0.2971 +vn 0.5789 -0.5789 0.5743 +vn 0.1101 -0.1101 0.9878 +vn 0.2971 -0.6303 0.7173 +vn 0.7173 -0.6303 -0.2971 +vn 0.2971 -0.6303 -0.7173 +vn 0.1101 -0.1101 -0.9878 +vn 0.5789 -0.5789 -0.5743 +vn 0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 -0.7173 +vn 0.7173 0.6302 -0.2971 +vn 0.7173 -0.6302 -0.2971 +vn 0.7173 0.6302 0.2971 +vn 0.7173 -0.6302 0.2971 +vn 0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn -0.2971 -0.6302 0.7173 +vn -0.7173 0.6302 0.2971 +vn -0.7173 -0.6302 0.2971 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 -0.6302 -0.2971 +vn -0.2971 0.6302 -0.7173 +vn -0.2971 -0.6302 -0.7173 +vn -0.2971 -0.6303 0.7173 +vn -0.7173 -0.6303 0.2971 +vn -0.7173 -0.6303 -0.2971 +vn -0.2971 -0.6303 -0.7173 +g Cylinder.000_Cylinder.000_None.001_Cylinder.000_Cylinder.000_None.001_None +s off +f 19/1/1 20/2/1 21/3/1 22/4/1 23/5/1 24/6/1 25/7/1 26/8/1 +f 27/9/2 28/10/2 29/11/2 30/12/2 31/13/2 32/14/2 33/15/2 34/16/2 +f 35/17/3 36/18/3 37/19/3 38/20/3 39/21/3 40/22/3 41/23/3 42/24/3 +f 43/25/4 44/26/4 45/27/4 46/28/4 47/29/4 48/30/4 49/31/4 50/32/4 +s 1 +f 1/33/5 2/34/6 3/35/7 4/36/8 5/37/9 +f 6/38/10 7/39/11 8/40/12 9/41/13 10/42/14 +f 9/41/13 11/43/15 12/44/16 10/42/14 +f 3/45/7 2/46/6 13/47/17 14/48/18 +f 7/49/11 6/50/10 15/51/2 16/52/19 +f 5/53/9 16/52/19 15/51/2 1/54/5 +f 4/55/8 17/56/20 18/57/21 8/58/12 7/59/11 16/60/19 5/61/9 +f 28/62/22 19/63/23 26/64/24 29/65/25 +f 27/66/26 20/67/27 19/63/23 28/62/22 +f 29/65/25 26/64/24 25/68/28 30/69/29 +f 30/70/29 25/71/28 24/72/30 31/73/31 +f 31/73/31 24/72/30 23/74/32 32/75/33 +f 32/75/33 23/74/32 22/76/34 33/77/35 +f 33/77/35 22/76/34 21/78/36 34/79/37 +f 34/79/37 21/78/36 20/67/27 27/66/26 +f 51/80/38 52/81/39 53/82/40 54/83/41 55/84/42 56/85/43 57/86/44 58/87/45 +f 59/88/46 60/89/47 61/90/48 62/91/49 +f 63/92/50 64/93/51 65/94/52 66/95/53 +f 57/96/44 56/97/43 14/48/18 13/47/17 67/98/17 61/99/48 +f 58/100/45 57/96/44 61/99/48 60/101/47 +f 65/102/52 68/103/16 12/44/16 11/104/15 53/105/40 52/106/39 +f 56/97/43 55/107/42 17/108/20 4/109/8 3/45/7 14/48/18 +f 51/110/38 58/111/45 60/112/47 66/113/53 +f 55/107/42 54/114/41 18/115/21 17/108/20 +f 43/116/54 36/117/55 35/118/56 44/119/57 +f 44/119/57 35/118/56 42/120/58 45/121/59 +f 45/121/59 42/120/58 41/122/60 46/123/61 +f 46/124/61 41/125/60 40/126/62 47/127/63 +f 47/127/63 40/126/62 39/128/64 48/129/65 +f 48/129/65 39/128/64 38/130/66 49/131/67 +f 49/131/67 38/130/66 37/132/68 50/133/69 +f 50/133/69 37/132/68 36/117/55 43/116/54 +f 64/134/51 63/135/50 59/136/46 62/137/49 69/138/70 70/139/71 71/140/72 72/141/73 +f 6/142/10 10/143/14 73/144/14 72/145/73 71/146/72 +f 74/147/6 2/148/6 1/149/5 70/150/71 69/151/70 +f 51/110/38 66/113/53 65/102/52 52/106/39 +f 70/150/71 1/149/5 15/152/2 6/142/10 71/146/72 +f 62/91/49 61/90/48 67/153/17 74/147/6 69/151/70 +f 64/93/51 72/145/73 73/144/14 68/154/16 65/94/52 +f 63/92/50 66/95/53 60/155/47 59/156/46 +f 10/143/14 12/44/16 68/154/16 73/144/14 +f 74/147/6 67/153/17 13/47/17 2/148/6 +f 53/105/40 11/104/15 9/157/13 8/158/12 18/115/21 54/114/41 diff --git a/mods/pipeworks/models/pipeworks_pipe_5.obj b/mods/pipeworks/models/pipeworks_pipe_5.obj new file mode 100755 index 0000000..27b3775 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_5.obj @@ -0,0 +1,4277 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-highpoly.blend' +# www.blender.org +o Pipe_Cylinder.002_None.001 +v 0.460914 0.136982 -0.046976 +v 0.460914 0.142474 -0.054133 +v 0.460914 0.139022 -0.062467 +v 0.460914 0.130078 -0.063644 +v 0.460914 0.124587 -0.056488 +v 0.460914 0.128039 -0.048153 +v 0.460914 0.063644 -0.130078 +v 0.460914 0.062467 -0.139022 +v 0.460914 0.054133 -0.142474 +v 0.460914 0.046976 -0.136982 +v 0.460914 0.048153 -0.128039 +v 0.460914 0.056487 -0.124587 +v 0.460914 -0.046976 -0.136982 +v 0.460914 -0.054133 -0.142474 +v 0.460914 -0.062467 -0.139022 +v 0.460914 -0.063644 -0.130078 +v 0.460914 -0.056488 -0.124587 +v 0.460914 -0.048153 -0.128039 +v 0.460914 -0.130078 -0.063644 +v 0.460914 -0.139022 -0.062467 +v 0.460914 -0.142474 -0.054133 +v 0.460914 -0.136982 -0.046976 +v 0.460914 -0.128039 -0.048153 +v 0.460914 -0.124587 -0.056487 +v 0.460914 -0.136982 0.046976 +v 0.460914 -0.142474 0.054133 +v 0.460914 -0.139022 0.062467 +v 0.460914 -0.130078 0.063644 +v 0.460914 -0.124587 0.056487 +v 0.460914 -0.128039 0.048153 +v 0.460914 -0.063644 0.130078 +v 0.460914 -0.062467 0.139022 +v 0.460914 -0.054132 0.142474 +v 0.460914 -0.046976 0.136982 +v 0.460914 -0.048153 0.128039 +v 0.460914 -0.056487 0.124587 +v 0.460914 0.046976 0.136982 +v 0.460914 0.054133 0.142474 +v 0.460914 0.062467 0.139022 +v 0.460914 0.063644 0.130078 +v 0.460914 0.056487 0.124587 +v 0.460914 0.048153 0.128039 +v 0.460914 0.130078 0.063644 +v 0.460914 0.139022 0.062467 +v 0.460914 0.142474 0.054133 +v 0.460914 0.136982 0.046976 +v 0.460914 0.128039 0.048153 +v 0.460914 0.124587 0.056487 +v 0.468750 0.099603 0.121367 +v 0.468750 0.121367 0.099603 +v 0.468750 0.138467 0.074012 +v 0.468750 0.150245 0.045576 +v 0.468750 0.156250 0.015389 +v 0.468750 0.156250 -0.015389 +v 0.468750 0.150245 -0.045576 +v 0.468750 0.138467 -0.074012 +v 0.468750 0.121367 -0.099603 +v 0.468750 0.099603 -0.121367 +v 0.468750 0.074012 -0.138467 +v 0.468750 0.045576 -0.150245 +v 0.468750 0.015389 -0.156250 +v 0.468750 -0.015389 -0.156250 +v 0.468750 -0.045576 -0.150245 +v 0.468750 -0.074012 -0.138467 +v 0.468750 -0.099603 -0.121367 +v 0.468750 -0.121367 -0.099603 +v 0.468750 -0.138467 -0.074012 +v 0.468750 -0.150245 -0.045576 +v 0.468750 -0.156250 -0.015389 +v 0.468750 -0.156250 0.015389 +v 0.468750 -0.150245 0.045576 +v 0.468750 -0.138466 0.074012 +v 0.468750 -0.121367 0.099603 +v 0.468750 -0.099603 0.121367 +v 0.468750 -0.074012 0.138467 +v 0.468750 -0.045576 0.150245 +v 0.468750 -0.015389 0.156250 +v 0.468750 0.015390 0.156250 +v 0.468750 0.045577 0.150245 +v 0.468750 0.074012 0.138467 +v 0.500000 -0.150245 -0.045576 +v 0.500000 -0.138467 -0.074012 +v 0.500000 -0.121367 -0.099603 +v 0.500000 -0.099603 -0.121367 +v 0.500000 -0.074012 -0.138467 +v 0.500000 -0.045576 -0.150245 +v 0.500000 -0.015389 -0.156250 +v 0.500000 0.015389 -0.156250 +v 0.500000 0.045576 -0.150245 +v 0.500000 0.074012 -0.138467 +v 0.500000 0.099603 -0.121367 +v 0.500000 0.121367 -0.099603 +v 0.500000 0.138467 -0.074012 +v 0.500000 0.150245 -0.045576 +v 0.500000 0.156250 -0.015389 +v 0.500000 0.156250 0.015389 +v 0.500000 0.150245 0.045576 +v 0.500000 0.138467 0.074012 +v 0.500000 0.121367 0.099603 +v 0.500000 0.099603 0.121367 +v 0.500000 0.074012 0.138467 +v 0.500000 0.045577 0.150245 +v 0.500000 0.015390 0.156250 +v 0.500000 -0.015389 0.156250 +v 0.500000 -0.045576 0.150245 +v 0.500000 -0.074012 0.138467 +v 0.500000 -0.099603 0.121367 +v 0.500000 -0.121367 0.099603 +v 0.500000 -0.138466 0.074012 +v 0.500000 -0.150245 0.045576 +v 0.500000 -0.156250 0.015389 +v 0.500000 -0.156250 -0.015389 +v 0.460914 0.108578 -0.095821 +v 0.460914 0.110913 -0.104534 +v 0.460914 0.104534 -0.110913 +v 0.460914 0.095821 -0.108578 +v 0.460914 0.093486 -0.099865 +v 0.460914 0.099865 -0.093486 +v 0.460914 0.009021 -0.144532 +v 0.460914 0.004510 -0.152344 +v 0.460914 -0.004510 -0.152344 +v 0.460914 -0.009021 -0.144532 +v 0.460914 -0.004510 -0.136720 +v 0.460914 0.004510 -0.136720 +v 0.460914 -0.095821 -0.108578 +v 0.460914 -0.104534 -0.110913 +v 0.460914 -0.110913 -0.104534 +v 0.460914 -0.108578 -0.095821 +v 0.460914 -0.099865 -0.093486 +v 0.460914 -0.093486 -0.099865 +v 0.460914 -0.144532 -0.009021 +v 0.460914 -0.152344 -0.004510 +v 0.460914 -0.152344 0.004510 +v 0.460914 -0.144532 0.009021 +v 0.460914 -0.136720 0.004510 +v 0.460914 -0.136720 -0.004510 +v 0.460914 -0.108578 0.095821 +v 0.460914 -0.110913 0.104534 +v 0.460914 -0.104534 0.110913 +v 0.460914 -0.095821 0.108578 +v 0.460914 -0.093486 0.099865 +v 0.460914 -0.099865 0.093486 +v 0.460914 -0.009021 0.144532 +v 0.460914 -0.004510 0.152344 +v 0.460914 0.004510 0.152344 +v 0.460914 0.009021 0.144532 +v 0.460914 0.004510 0.136720 +v 0.460914 -0.004510 0.136720 +v 0.460914 0.095821 0.108578 +v 0.460914 0.104534 0.110913 +v 0.460914 0.110913 0.104534 +v 0.460914 0.108578 0.095821 +v 0.460914 0.099865 0.093486 +v 0.460914 0.093486 0.099865 +v 0.460914 0.144532 0.009021 +v 0.460914 0.152344 0.004510 +v 0.460914 0.152344 -0.004510 +v 0.460914 0.144532 -0.009021 +v 0.460914 0.136720 -0.004510 +v 0.460914 0.136720 0.004510 +v -0.130078 -0.460912 -0.063644 +v -0.139022 -0.460912 -0.062467 +v -0.142474 -0.460912 -0.054133 +v -0.136982 -0.460912 -0.046976 +v -0.128039 -0.460912 -0.048153 +v -0.124587 -0.460912 -0.056487 +v -0.046976 -0.460912 -0.136982 +v -0.054133 -0.460912 -0.142474 +v -0.062467 -0.460912 -0.139022 +v -0.063644 -0.460912 -0.130078 +v -0.056488 -0.460912 -0.124587 +v -0.048153 -0.460912 -0.128039 +v 0.063644 -0.460912 -0.130078 +v 0.062467 -0.460912 -0.139022 +v 0.054132 -0.460912 -0.142474 +v 0.046976 -0.460912 -0.136982 +v 0.048153 -0.460912 -0.128039 +v 0.056487 -0.460912 -0.124587 +v 0.136982 -0.460912 -0.046976 +v 0.142474 -0.460912 -0.054133 +v 0.139022 -0.460912 -0.062467 +v 0.130078 -0.460912 -0.063644 +v 0.124587 -0.460912 -0.056488 +v 0.128039 -0.460912 -0.048154 +v 0.130078 -0.460912 0.063644 +v 0.139022 -0.460912 0.062467 +v 0.142474 -0.460912 0.054132 +v 0.136982 -0.460912 0.046976 +v 0.128039 -0.460912 0.048153 +v 0.124587 -0.460912 0.056487 +v 0.046976 -0.460912 0.136982 +v 0.054133 -0.460912 0.142474 +v 0.062467 -0.460912 0.139022 +v 0.063644 -0.460912 0.130078 +v 0.056488 -0.460912 0.124587 +v 0.048153 -0.460912 0.128039 +v -0.063644 -0.460912 0.130078 +v -0.062467 -0.460912 0.139022 +v -0.054132 -0.460912 0.142474 +v -0.046976 -0.460912 0.136982 +v -0.048153 -0.460912 0.128039 +v -0.056487 -0.460912 0.124587 +v -0.136982 -0.460912 0.046976 +v -0.142474 -0.460912 0.054133 +v -0.139022 -0.460912 0.062467 +v -0.130078 -0.460912 0.063644 +v -0.124587 -0.460912 0.056488 +v -0.128039 -0.460912 0.048153 +v 0.156250 -0.468750 -0.015389 +v 0.150245 -0.468750 -0.045576 +v 0.138467 -0.468750 -0.074012 +v 0.121367 -0.468750 -0.099603 +v 0.099603 -0.468750 -0.121367 +v 0.074012 -0.468750 -0.138467 +v 0.045576 -0.468750 -0.150245 +v 0.015389 -0.468750 -0.156250 +v -0.015389 -0.468750 -0.156250 +v -0.045576 -0.468750 -0.150245 +v -0.074012 -0.468750 -0.138467 +v -0.099603 -0.468750 -0.121367 +v -0.121367 -0.468750 -0.099603 +v -0.138467 -0.468750 -0.074012 +v -0.150245 -0.468750 -0.045576 +v -0.156249 -0.468750 -0.015389 +v -0.156249 -0.468750 0.015389 +v -0.150245 -0.468750 0.045576 +v -0.138466 -0.468750 0.074012 +v -0.121367 -0.468750 0.099603 +v -0.099603 -0.468750 0.121367 +v -0.074012 -0.468750 0.138467 +v -0.045576 -0.468750 0.150245 +v -0.015389 -0.468750 0.156250 +v 0.015389 -0.468750 0.156250 +v 0.045576 -0.468750 0.150245 +v 0.074012 -0.468750 0.138467 +v 0.099603 -0.468750 0.121367 +v 0.121367 -0.468750 0.099603 +v 0.138467 -0.468750 0.074012 +v 0.150245 -0.468750 0.045576 +v 0.156250 -0.468750 0.015389 +v 0.138467 -0.500000 0.074012 +v 0.121367 -0.500000 0.099603 +v 0.099603 -0.500000 0.121367 +v 0.074012 -0.500000 0.138467 +v 0.045576 -0.500000 0.150245 +v 0.015389 -0.500000 0.156250 +v -0.015389 -0.500000 0.156250 +v -0.045576 -0.500000 0.150245 +v -0.074012 -0.500000 0.138467 +v -0.099603 -0.500000 0.121367 +v -0.121367 -0.500000 0.099603 +v -0.138466 -0.500000 0.074012 +v -0.150245 -0.500000 0.045576 +v -0.156249 -0.500000 0.015389 +v -0.156250 -0.500000 -0.015389 +v -0.150245 -0.500000 -0.045576 +v -0.138467 -0.500000 -0.074012 +v -0.121367 -0.500000 -0.099603 +v -0.099603 -0.500000 -0.121367 +v -0.074012 -0.500000 -0.138467 +v -0.045576 -0.500000 -0.150245 +v -0.015389 -0.500000 -0.156250 +v 0.015389 -0.500000 -0.156250 +v 0.045576 -0.500000 -0.150245 +v 0.074012 -0.500000 -0.138467 +v 0.099603 -0.500000 -0.121367 +v 0.121367 -0.500000 -0.099603 +v 0.138467 -0.500000 -0.074012 +v 0.150245 -0.500000 -0.045576 +v 0.156250 -0.500000 -0.015389 +v 0.156250 -0.500000 0.015389 +v 0.150245 -0.500000 0.045576 +v -0.095821 -0.460912 -0.108578 +v -0.104534 -0.460912 -0.110913 +v -0.110913 -0.460912 -0.104534 +v -0.108578 -0.460912 -0.095821 +v -0.099865 -0.460912 -0.093486 +v -0.093486 -0.460912 -0.099865 +v 0.009021 -0.460912 -0.144532 +v 0.004510 -0.460912 -0.152344 +v -0.004510 -0.460912 -0.152344 +v -0.009021 -0.460912 -0.144532 +v -0.004510 -0.460912 -0.136720 +v 0.004510 -0.460912 -0.136720 +v 0.108578 -0.460912 -0.095821 +v 0.110913 -0.460912 -0.104534 +v 0.104534 -0.460912 -0.110913 +v 0.095821 -0.460912 -0.108578 +v 0.093486 -0.460912 -0.099865 +v 0.099865 -0.460912 -0.093486 +v 0.144532 -0.460912 0.009021 +v 0.152344 -0.460912 0.004510 +v 0.152344 -0.460912 -0.004511 +v 0.144532 -0.460912 -0.009021 +v 0.136720 -0.460912 -0.004511 +v 0.136720 -0.460912 0.004510 +v 0.095821 -0.460912 0.108578 +v 0.104534 -0.460912 0.110913 +v 0.110913 -0.460912 0.104534 +v 0.108578 -0.460912 0.095821 +v 0.099865 -0.460912 0.093486 +v 0.093486 -0.460912 0.099865 +v -0.009021 -0.460912 0.144532 +v -0.004510 -0.460912 0.152344 +v 0.004510 -0.460912 0.152344 +v 0.009021 -0.460912 0.144532 +v 0.004510 -0.460912 0.136720 +v -0.004510 -0.460912 0.136720 +v -0.108578 -0.460912 0.095821 +v -0.110913 -0.460912 0.104534 +v -0.104534 -0.460912 0.110913 +v -0.095821 -0.460912 0.108578 +v -0.093486 -0.460912 0.099865 +v -0.099865 -0.460912 0.093486 +v -0.144532 -0.460912 -0.009021 +v -0.152344 -0.460912 -0.004510 +v -0.152344 -0.460912 0.004510 +v -0.144532 -0.460912 0.009021 +v -0.136720 -0.460912 0.004510 +v -0.136720 -0.460912 -0.004510 +v -0.136982 -0.046976 -0.460912 +v -0.142474 -0.054133 -0.460912 +v -0.139022 -0.062467 -0.460912 +v -0.130078 -0.063644 -0.460912 +v -0.124587 -0.056488 -0.460912 +v -0.128039 -0.048153 -0.460912 +v 0.136982 0.046976 -0.460912 +v 0.142474 0.054133 -0.460912 +v 0.139022 0.062467 -0.460912 +v 0.130078 0.063644 -0.460912 +v 0.124587 0.056488 -0.460912 +v 0.128039 0.048154 -0.460912 +v 0.063644 0.130078 -0.460912 +v 0.062467 0.139022 -0.460912 +v 0.054132 0.142474 -0.460912 +v 0.046976 0.136982 -0.460912 +v 0.048153 0.128039 -0.460912 +v 0.056487 0.124587 -0.460912 +v -0.046976 0.136982 -0.460912 +v -0.054133 0.142474 -0.460912 +v -0.062467 0.139022 -0.460912 +v -0.063644 0.130078 -0.460912 +v -0.056488 0.124587 -0.460912 +v -0.048153 0.128039 -0.460912 +v -0.130078 0.063644 -0.460912 +v -0.139022 0.062467 -0.460912 +v -0.142474 0.054133 -0.460912 +v -0.136982 0.046976 -0.460912 +v -0.128039 0.048153 -0.460912 +v -0.124587 0.056487 -0.460912 +v 0.156250 0.015389 -0.468750 +v 0.150245 0.045576 -0.468750 +v 0.138467 0.074012 -0.468750 +v 0.121367 0.099603 -0.468750 +v 0.099603 0.121367 -0.468750 +v 0.074012 0.138467 -0.468750 +v 0.045576 0.150245 -0.468750 +v 0.015389 0.156250 -0.468750 +v -0.015389 0.156250 -0.468750 +v -0.045576 0.150245 -0.468750 +v -0.074012 0.138467 -0.468750 +v -0.099603 0.121367 -0.468750 +v -0.121367 0.099603 -0.468750 +v -0.138467 0.074012 -0.468750 +v -0.150245 0.045576 -0.468750 +v -0.156249 0.015389 -0.468750 +v -0.156249 -0.015389 -0.468750 +v -0.150245 -0.045576 -0.468750 +v -0.138466 -0.074012 -0.468750 +v -0.121367 -0.099603 -0.468750 +v -0.099603 -0.121367 -0.468750 +v -0.074012 -0.138467 -0.468750 +v -0.045576 -0.150245 -0.468750 +v -0.015389 -0.156250 -0.468750 +v 0.015389 -0.156250 -0.468750 +v 0.045576 -0.150245 -0.468750 +v 0.074012 -0.138467 -0.468750 +v 0.099603 -0.121367 -0.468750 +v 0.121367 -0.099603 -0.468750 +v 0.138467 -0.074012 -0.468750 +v 0.150245 -0.045576 -0.468750 +v 0.156250 -0.015389 -0.468750 +v 0.138467 -0.074012 -0.500000 +v 0.121367 -0.099603 -0.500000 +v 0.099603 -0.121367 -0.500000 +v 0.074012 -0.138467 -0.500000 +v 0.045576 -0.150245 -0.500000 +v 0.015389 -0.156250 -0.500000 +v -0.015389 -0.156250 -0.500000 +v -0.045576 -0.150245 -0.500000 +v -0.074012 -0.138467 -0.500000 +v -0.099603 -0.121367 -0.500000 +v -0.121367 -0.099603 -0.500000 +v -0.138466 -0.074012 -0.500000 +v -0.150245 -0.045576 -0.500000 +v -0.156249 -0.015389 -0.500000 +v -0.156250 0.015389 -0.500000 +v -0.150245 0.045576 -0.500000 +v -0.138467 0.074012 -0.500000 +v -0.121367 0.099603 -0.500000 +v -0.099603 0.121367 -0.500000 +v -0.074012 0.138467 -0.500000 +v -0.045576 0.150245 -0.500000 +v -0.015389 0.156250 -0.500000 +v 0.015389 0.156250 -0.500000 +v 0.045576 0.150245 -0.500000 +v 0.074012 0.138467 -0.500000 +v 0.099603 0.121367 -0.500000 +v 0.121367 0.099603 -0.500000 +v 0.138467 0.074012 -0.500000 +v 0.150245 0.045576 -0.500000 +v 0.156250 0.015389 -0.500000 +v 0.156250 -0.015389 -0.500000 +v 0.150245 -0.045576 -0.500000 +v -0.095821 0.108578 -0.460912 +v -0.104534 0.110913 -0.460912 +v -0.110913 0.104534 -0.460912 +v -0.108578 0.095821 -0.460912 +v -0.099865 0.093486 -0.460912 +v -0.093486 0.099865 -0.460912 +v 0.009021 0.144532 -0.460912 +v 0.004510 0.152344 -0.460912 +v -0.004510 0.152344 -0.460912 +v -0.009021 0.144532 -0.460912 +v -0.004510 0.136720 -0.460912 +v 0.004510 0.136720 -0.460912 +v 0.108578 0.095821 -0.460912 +v 0.110913 0.104534 -0.460912 +v 0.104534 0.110913 -0.460912 +v 0.095821 0.108578 -0.460912 +v 0.093486 0.099865 -0.460912 +v 0.099865 0.093486 -0.460912 +v 0.144532 -0.009021 -0.460912 +v 0.152344 -0.004510 -0.460912 +v 0.152344 0.004511 -0.460912 +v 0.144532 0.009021 -0.460912 +v 0.136720 0.004510 -0.460912 +v 0.136720 -0.004510 -0.460912 +v -0.108578 -0.095821 -0.460912 +v -0.110913 -0.104534 -0.460912 +v -0.104534 -0.110913 -0.460912 +v -0.095821 -0.108578 -0.460912 +v -0.093486 -0.099865 -0.460912 +v -0.099865 -0.093486 -0.460912 +v -0.144532 0.009021 -0.460912 +v -0.152344 0.004510 -0.460912 +v -0.152344 -0.004510 -0.460912 +v -0.144532 -0.009021 -0.460912 +v -0.136720 -0.004510 -0.460912 +v -0.136720 0.004510 -0.460912 +v 0.468750 0.116832 -0.062448 +v 0.437501 0.110774 -0.059210 +v 0.437501 0.120197 -0.036461 +v 0.468750 0.126770 -0.038455 +v 0.468750 0.131837 -0.012985 +v 0.437501 0.125000 -0.012312 +v 0.468750 0.131837 0.012984 +v 0.437501 0.125001 0.012311 +v 0.468750 0.126770 0.038455 +v 0.437501 0.120197 0.036461 +v 0.468750 0.116832 0.062448 +v 0.437501 0.110774 0.059210 +v 0.468750 0.102404 0.084041 +v 0.437501 0.097094 0.079683 +v 0.437501 0.079683 0.097094 +v 0.468750 0.084041 0.102404 +v 0.468750 0.062448 0.116832 +v 0.437501 0.059210 0.110774 +v 0.468750 0.038455 0.126770 +v 0.437501 0.036461 0.120197 +v 0.468750 0.012985 0.131836 +v 0.437501 0.012312 0.125000 +v 0.437501 -0.012311 0.125000 +v 0.468750 -0.012985 0.131836 +v 0.437501 -0.036461 0.120197 +v 0.468750 -0.038455 0.126770 +v 0.468750 -0.062448 0.116832 +v 0.437501 -0.059210 0.110774 +v 0.437501 -0.079683 0.097094 +v 0.468750 -0.084041 0.102404 +v 0.437501 -0.097094 0.079683 +v 0.468750 -0.102404 0.084041 +v 0.468750 -0.116832 0.062448 +v 0.437501 -0.110774 0.059210 +v 0.437501 -0.120197 0.036461 +v 0.468750 -0.126770 0.038455 +v 0.468750 -0.131836 0.012985 +v 0.437501 -0.125000 0.012311 +v 0.437501 -0.125000 -0.012311 +v 0.468750 -0.131836 -0.012985 +v 0.468750 -0.126770 -0.038455 +v 0.437501 -0.120197 -0.036461 +v 0.437501 -0.110774 -0.059210 +v 0.468750 -0.116832 -0.062448 +v 0.437501 -0.097094 -0.079683 +v 0.468750 -0.102404 -0.084041 +v 0.437501 -0.079683 -0.097094 +v 0.468750 -0.084041 -0.102404 +v 0.437501 -0.059210 -0.110774 +v 0.468750 -0.062448 -0.116832 +v 0.437501 -0.036461 -0.120197 +v 0.468750 -0.038455 -0.126770 +v 0.437501 -0.012311 -0.125001 +v 0.468750 -0.012985 -0.131836 +v 0.468750 0.038455 -0.126770 +v 0.468750 0.012985 -0.131837 +v 0.437501 0.012311 -0.125001 +v 0.437501 0.036461 -0.120197 +v 0.468750 0.084041 -0.102404 +v 0.468750 0.062448 -0.116832 +v 0.437501 0.059210 -0.110774 +v 0.437501 0.079683 -0.097094 +v 0.468750 0.102404 -0.084041 +v 0.437501 0.097094 -0.079683 +v 0.468751 0.136982 -0.046976 +v 0.468751 0.142474 -0.054133 +v 0.468751 0.128039 -0.048153 +v 0.468751 0.139022 -0.062467 +v 0.468751 0.130078 -0.063644 +v 0.468751 0.124587 -0.056488 +v 0.468751 0.063644 -0.130078 +v 0.468751 0.062467 -0.139022 +v 0.468751 0.056487 -0.124587 +v 0.468751 0.054133 -0.142474 +v 0.468751 0.046976 -0.136982 +v 0.468751 0.048153 -0.128039 +v 0.468751 -0.046976 -0.136982 +v 0.468751 -0.054133 -0.142474 +v 0.468751 -0.048153 -0.128039 +v 0.468751 -0.062467 -0.139022 +v 0.468751 -0.063644 -0.130078 +v 0.468751 -0.056488 -0.124587 +v 0.468751 -0.130078 -0.063644 +v 0.468751 -0.139022 -0.062467 +v 0.468751 -0.124587 -0.056487 +v 0.468751 -0.142474 -0.054133 +v 0.468751 -0.136982 -0.046976 +v 0.468751 -0.128039 -0.048153 +v 0.468751 -0.136982 0.046976 +v 0.468751 -0.142474 0.054133 +v 0.468751 -0.128039 0.048153 +v 0.468751 -0.139022 0.062467 +v 0.468751 -0.130078 0.063644 +v 0.468751 -0.124587 0.056487 +v 0.468751 -0.063644 0.130078 +v 0.468751 -0.062467 0.139022 +v 0.468751 -0.056487 0.124587 +v 0.468751 -0.054132 0.142474 +v 0.468751 -0.046976 0.136982 +v 0.468751 -0.048153 0.128039 +v 0.468751 0.046976 0.136982 +v 0.468751 0.054133 0.142474 +v 0.468751 0.048153 0.128039 +v 0.468751 0.062467 0.139022 +v 0.468751 0.063644 0.130078 +v 0.468751 0.056487 0.124587 +v 0.468751 0.130078 0.063644 +v 0.468751 0.139022 0.062467 +v 0.468751 0.124587 0.056487 +v 0.468751 0.142474 0.054133 +v 0.468751 0.136982 0.046976 +v 0.468751 0.128039 0.048153 +v 0.059210 -0.059210 0.110774 +v 0.036461 -0.036461 0.120197 +v 0.079683 -0.079683 0.097094 +v 0.097094 -0.097094 0.079683 +v 0.036461 0.120197 -0.036461 +v 0.059210 0.110774 -0.059210 +v 0.012312 -0.012312 0.125000 +v -0.000000 0.110774 0.059210 +v -0.000000 0.097094 0.079683 +v -0.000000 0.079683 0.097094 +v -0.000000 0.059210 0.110774 +v -0.000000 0.120197 0.036461 +v 0.012312 0.125000 0.012312 +v -0.000000 0.125000 0.012311 +v 0.012311 0.125000 -0.012311 +v 0.012311 0.125000 -0.000000 +v 0.079683 0.097094 -0.079683 +v 0.097094 0.079683 -0.097094 +v -0.000000 0.036461 0.120197 +v -0.000000 0.012311 0.125001 +v 0.012312 0.012312 0.125000 +v 0.012312 0.000000 0.125000 +v 0.110774 -0.110774 0.059210 +v 0.120197 -0.120197 0.036461 +v 0.125000 -0.125000 0.012311 +v 0.125000 -0.125000 -0.012311 +v 0.120197 -0.120197 -0.036461 +v 0.110774 -0.110774 -0.059210 +v 0.097094 -0.097094 -0.079683 +v 0.088389 -0.088389 -0.088389 +v 0.097094 -0.079683 -0.097094 +v 0.110774 -0.059210 -0.110774 +v 0.120197 -0.036461 -0.120197 +v 0.125000 -0.012311 -0.125000 +v 0.125000 0.012311 -0.125000 +v 0.120197 0.036461 -0.120197 +v 0.110774 0.059210 -0.110774 +v 0.468751 0.108578 -0.095821 +v 0.468751 0.110913 -0.104534 +v 0.468751 0.099865 -0.093486 +v 0.468751 0.104534 -0.110913 +v 0.468751 0.095821 -0.108578 +v 0.468751 0.093486 -0.099865 +v 0.468751 0.009021 -0.144532 +v 0.468751 0.004510 -0.152344 +v 0.468751 0.004510 -0.136720 +v 0.468751 -0.004510 -0.152344 +v 0.468751 -0.009021 -0.144532 +v 0.468751 -0.004510 -0.136720 +v 0.468751 -0.095821 -0.108578 +v 0.468751 -0.104534 -0.110913 +v 0.468751 -0.093486 -0.099865 +v 0.468751 -0.110913 -0.104534 +v 0.468751 -0.108578 -0.095821 +v 0.468751 -0.099865 -0.093486 +v 0.468751 -0.144532 -0.009021 +v 0.468751 -0.152344 -0.004510 +v 0.468751 -0.136720 -0.004510 +v 0.468751 -0.152344 0.004510 +v 0.468751 -0.144532 0.009021 +v 0.468751 -0.136720 0.004510 +v 0.468751 -0.108578 0.095821 +v 0.468751 -0.110913 0.104534 +v 0.468751 -0.099865 0.093486 +v 0.468751 -0.104534 0.110913 +v 0.468751 -0.095821 0.108578 +v 0.468751 -0.093486 0.099865 +v 0.468751 -0.009021 0.144532 +v 0.468751 -0.004510 0.152344 +v 0.468751 -0.004510 0.136720 +v 0.468751 0.004510 0.152344 +v 0.468751 0.009021 0.144532 +v 0.468751 0.004510 0.136720 +v 0.468751 0.095821 0.108578 +v 0.468751 0.104534 0.110913 +v 0.468751 0.093486 0.099865 +v 0.468751 0.110913 0.104534 +v 0.468751 0.108578 0.095821 +v 0.468751 0.099865 0.093486 +v 0.468751 0.144532 0.009021 +v 0.468751 0.152344 0.004510 +v 0.468751 0.136720 0.004510 +v 0.468751 0.152344 -0.004510 +v 0.468751 0.144532 -0.009021 +v 0.468751 0.136720 -0.004510 +v -0.000000 0.000000 0.125605 +v 0.000000 0.125000 -0.000000 +v -0.000000 -0.012312 0.125000 +v 0.012311 -0.437501 0.125000 +v -0.012312 -0.012311 0.125000 +v -0.012312 -0.437501 0.125000 +v 0.036461 -0.437501 0.120197 +v 0.059210 -0.437501 0.110774 +v -0.012312 0.000000 0.125605 +v -0.036461 0.000000 0.120778 +v -0.036461 -0.437501 0.120197 +v 0.079683 -0.437501 0.097094 +v -0.059210 0.000000 0.111310 +v -0.059210 -0.437501 0.110774 +v -0.097094 0.000000 0.080069 +v -0.097094 -0.437501 0.079683 +v -0.079683 -0.437501 0.097094 +v -0.079683 0.000000 0.097564 +v -0.012985 -0.468750 0.131836 +v -0.038455 -0.468750 0.126770 +v 0.012985 -0.468750 0.131836 +v 0.038455 -0.468750 0.126770 +v 0.097094 0.079683 -0.437501 +v 0.079683 0.097094 -0.437501 +v -0.062448 -0.468750 0.116832 +v 0.062448 -0.468750 0.116832 +v 0.097094 -0.437501 0.079683 +v 0.110774 -0.437501 0.059210 +v -0.084041 -0.468750 0.102404 +v 0.084041 -0.468750 0.102404 +v 0.120197 -0.437501 0.036461 +v -0.120197 -0.036461 -0.437501 +v -0.120197 -0.036461 -0.036461 +v -0.125000 -0.012312 -0.012311 +v -0.125000 -0.012311 -0.437501 +v -0.102404 -0.468750 0.084041 +v 0.102404 -0.468750 0.084041 +v -0.116832 -0.468750 0.062448 +v -0.110774 -0.437501 0.059210 +v 0.116832 -0.468750 0.062448 +v 0.125001 -0.437501 0.012311 +v 0.125001 -0.437501 -0.012312 +v -0.125000 -0.012311 0.012312 +v -0.125000 -0.437501 0.012311 +v -0.120197 -0.437501 0.036461 +v -0.120197 0.000000 0.036638 +v -0.125000 0.000000 0.012371 +v -0.126770 -0.468750 0.038455 +v 0.126770 -0.468750 0.038455 +v -0.131836 -0.468750 0.012985 +v 0.131837 -0.468750 0.012985 +v 0.120197 -0.437501 -0.036461 +v 0.110774 -0.437501 -0.059210 +v -0.120197 -0.437501 -0.036461 +v -0.125000 -0.437501 -0.012312 +v -0.131836 -0.468750 -0.012985 +v 0.131837 -0.468750 -0.012985 +v 0.097094 -0.437501 -0.079683 +v -0.110774 -0.437501 -0.059210 +v -0.110774 -0.059210 -0.059210 +v -0.126770 -0.468750 -0.038455 +v 0.126770 -0.468750 -0.038455 +v -0.116832 -0.468750 -0.062448 +v 0.116832 -0.468750 -0.062448 +v -0.102404 -0.468750 -0.084041 +v -0.097094 -0.437501 -0.079683 +v 0.102404 -0.468750 -0.084041 +v 0.036461 -0.120197 -0.120197 +v 0.059210 -0.110774 -0.110774 +v 0.059210 -0.437501 -0.110774 +v 0.036461 -0.437501 -0.120197 +v -0.036461 -0.120197 -0.120197 +v -0.012311 -0.125000 -0.125000 +v -0.012311 -0.437501 -0.125001 +v -0.036461 -0.437501 -0.120197 +v -0.084041 -0.468750 -0.102404 +v -0.079683 -0.437501 -0.097094 +v 0.084041 -0.468750 -0.102404 +v 0.079683 -0.437501 -0.097094 +v 0.012311 -0.125000 -0.125000 +v 0.012311 -0.437501 -0.125001 +v -0.062448 -0.468750 -0.116832 +v -0.059210 -0.437501 -0.110774 +v 0.062448 -0.468750 -0.116832 +v -0.038455 -0.468750 -0.126770 +v 0.038455 -0.468750 -0.126770 +v -0.012985 -0.468750 -0.131837 +v 0.012985 -0.468750 -0.131837 +v -0.130078 -0.468749 -0.063644 +v -0.139022 -0.468749 -0.062467 +v -0.124587 -0.468749 -0.056487 +v -0.142474 -0.468749 -0.054133 +v -0.136982 -0.468749 -0.046976 +v -0.128039 -0.468749 -0.048153 +v -0.046976 -0.468749 -0.136982 +v -0.054133 -0.468749 -0.142474 +v -0.048153 -0.468749 -0.128039 +v -0.062467 -0.468749 -0.139022 +v -0.063644 -0.468749 -0.130078 +v -0.056488 -0.468749 -0.124587 +v 0.063644 -0.468749 -0.130078 +v 0.062467 -0.468749 -0.139022 +v 0.056487 -0.468749 -0.124587 +v 0.054132 -0.468749 -0.142474 +v 0.046976 -0.468749 -0.136982 +v 0.048153 -0.468749 -0.128039 +v 0.136982 -0.468749 -0.046976 +v 0.142474 -0.468749 -0.054133 +v 0.128039 -0.468749 -0.048154 +v 0.139022 -0.468749 -0.062467 +v 0.130078 -0.468749 -0.063644 +v 0.124587 -0.468749 -0.056488 +v 0.130078 -0.468749 0.063644 +v 0.139022 -0.468749 0.062466 +v 0.124587 -0.468749 0.056487 +v 0.142474 -0.468749 0.054132 +v 0.136982 -0.468749 0.046976 +v 0.128039 -0.468749 0.048153 +v 0.046976 -0.468749 0.136982 +v 0.054133 -0.468749 0.142474 +v 0.048153 -0.468749 0.128039 +v 0.062467 -0.468749 0.139022 +v 0.063644 -0.468749 0.130078 +v 0.056488 -0.468749 0.124587 +v -0.063644 -0.468749 0.130078 +v -0.062467 -0.468749 0.139022 +v -0.056487 -0.468749 0.124587 +v -0.054132 -0.468749 0.142474 +v -0.046976 -0.468749 0.136982 +v -0.048153 -0.468749 0.128039 +v -0.136982 -0.468749 0.046976 +v -0.142474 -0.468749 0.054133 +v -0.128039 -0.468749 0.048153 +v -0.139022 -0.468749 0.062467 +v -0.130078 -0.468749 0.063644 +v -0.124587 -0.468749 0.056487 +v -0.125000 0.000000 -0.000000 +v -0.125000 -0.000000 -0.012312 +v -0.125000 -0.012312 -0.000000 +v -0.110774 0.000000 0.059497 +v -0.097094 -0.079683 -0.079683 +v -0.079683 -0.097094 -0.097094 +v 0.079683 -0.097094 -0.097094 +v -0.059210 -0.110774 -0.110774 +v -0.095821 -0.468749 -0.108578 +v -0.104534 -0.468749 -0.110913 +v -0.093486 -0.468749 -0.099865 +v -0.110913 -0.468749 -0.104534 +v -0.108578 -0.468749 -0.095821 +v -0.099865 -0.468749 -0.093486 +v 0.009021 -0.468749 -0.144532 +v 0.004510 -0.468749 -0.152344 +v 0.004510 -0.468749 -0.136720 +v -0.004510 -0.468749 -0.152344 +v -0.009021 -0.468749 -0.144532 +v -0.004510 -0.468749 -0.136720 +v 0.108578 -0.468749 -0.095821 +v 0.110913 -0.468749 -0.104534 +v 0.099865 -0.468749 -0.093486 +v 0.104534 -0.468749 -0.110913 +v 0.095821 -0.468749 -0.108578 +v 0.093486 -0.468749 -0.099865 +v 0.144532 -0.468749 0.009021 +v 0.152344 -0.468749 0.004510 +v 0.136720 -0.468749 0.004510 +v 0.152344 -0.468749 -0.004511 +v 0.144532 -0.468749 -0.009021 +v 0.136720 -0.468749 -0.004511 +v 0.095821 -0.468749 0.108578 +v 0.104534 -0.468749 0.110913 +v 0.093486 -0.468749 0.099865 +v 0.110913 -0.468749 0.104534 +v 0.108578 -0.468749 0.095821 +v 0.099865 -0.468749 0.093486 +v -0.009021 -0.468749 0.144532 +v -0.004510 -0.468749 0.152344 +v -0.004510 -0.468749 0.136720 +v 0.004510 -0.468749 0.152344 +v 0.009021 -0.468749 0.144532 +v 0.004510 -0.468749 0.136720 +v -0.108578 -0.468749 0.095821 +v -0.110913 -0.468749 0.104534 +v -0.099865 -0.468749 0.093486 +v -0.104534 -0.468749 0.110913 +v -0.095821 -0.468749 0.108578 +v -0.093486 -0.468749 0.099865 +v -0.144532 -0.468749 -0.009021 +v -0.152344 -0.468749 -0.004510 +v -0.136720 -0.468749 -0.004510 +v -0.152344 -0.468749 0.004510 +v -0.144532 -0.468749 0.009021 +v -0.136720 -0.468749 0.004510 +v -0.120197 0.036461 -0.000000 +v -0.120197 0.036461 -0.437501 +v -0.125000 0.012312 -0.437501 +v -0.125000 0.012311 -0.012312 +v -0.125000 0.012311 -0.000000 +v -0.110774 -0.059210 -0.437501 +v -0.124587 -0.056488 -0.468749 +v -0.128039 -0.048153 -0.468749 +v -0.130078 -0.063644 -0.468749 +v -0.139022 -0.062467 -0.468749 +v -0.142474 -0.054133 -0.468749 +v -0.136982 -0.046976 -0.468749 +v 0.124587 0.056488 -0.468749 +v 0.128039 0.048154 -0.468749 +v 0.130078 0.063644 -0.468749 +v 0.139022 0.062467 -0.468749 +v 0.142474 0.054133 -0.468749 +v 0.136982 0.046976 -0.468749 +v 0.048153 0.128039 -0.468749 +v 0.056487 0.124587 -0.468749 +v 0.046976 0.136982 -0.468749 +v 0.054132 0.142474 -0.468749 +v 0.062467 0.139022 -0.468749 +v 0.063644 0.130078 -0.468749 +v -0.056488 0.124587 -0.468749 +v -0.048153 0.128039 -0.468749 +v -0.063644 0.130078 -0.468749 +v -0.062467 0.139022 -0.468749 +v -0.054133 0.142474 -0.468749 +v -0.046976 0.136982 -0.468749 +v -0.128039 0.048153 -0.468749 +v -0.124587 0.056487 -0.468749 +v -0.136982 0.046976 -0.468749 +v -0.142474 0.054133 -0.468749 +v -0.139022 0.062467 -0.468749 +v -0.130078 0.063644 -0.468749 +v 0.012985 0.131837 -0.468750 +v -0.012985 0.131837 -0.468750 +v -0.012311 0.125001 -0.437501 +v 0.012311 0.125001 -0.437501 +v 0.038455 0.126770 -0.468750 +v 0.036461 0.120197 -0.437501 +v -0.038455 0.126770 -0.468750 +v -0.036461 0.120197 -0.437501 +v 0.062448 0.116832 -0.468750 +v 0.059210 0.110774 -0.437501 +v -0.062448 0.116832 -0.468750 +v -0.059210 0.110774 -0.437501 +v 0.084041 0.102404 -0.468750 +v -0.084041 0.102404 -0.468750 +v -0.079683 0.097094 -0.437501 +v 0.102404 0.084041 -0.468750 +v -0.102404 0.084041 -0.468750 +v -0.097094 0.079683 -0.437501 +v -0.012311 0.125000 -0.012312 +v 0.000000 0.125000 -0.012312 +v 0.116832 0.062448 -0.468750 +v 0.110774 0.059210 -0.437501 +v -0.116832 0.062448 -0.468750 +v -0.110774 0.059210 -0.437501 +v 0.120197 0.036461 -0.437501 +v 0.126770 0.038455 -0.468750 +v -0.126770 0.038455 -0.468750 +v 0.125001 0.012311 -0.437501 +v 0.131837 0.012985 -0.468750 +v -0.131836 0.012985 -0.468750 +v 0.125001 -0.012311 -0.437501 +v 0.131837 -0.012985 -0.468750 +v -0.131836 -0.012985 -0.468750 +v 0.120197 -0.036461 -0.437501 +v 0.126770 -0.038455 -0.468750 +v -0.126770 -0.038455 -0.468750 +v 0.110774 -0.059210 -0.437501 +v 0.116832 -0.062448 -0.468750 +v -0.116832 -0.062448 -0.468750 +v 0.097094 -0.079683 -0.437501 +v 0.102404 -0.084041 -0.468750 +v -0.102404 -0.084041 -0.468750 +v -0.097094 -0.079683 -0.437501 +v 0.079683 -0.097094 -0.437501 +v 0.084041 -0.102404 -0.468750 +v -0.084041 -0.102404 -0.468750 +v -0.079683 -0.097094 -0.437501 +v 0.059210 -0.110774 -0.437501 +v 0.062448 -0.116832 -0.468750 +v -0.062448 -0.116832 -0.468750 +v -0.059210 -0.110774 -0.437501 +v 0.036461 -0.120197 -0.437501 +v 0.038455 -0.126770 -0.468750 +v -0.038455 -0.126770 -0.468750 +v -0.036461 -0.120197 -0.437501 +v 0.012311 -0.125000 -0.437501 +v 0.012985 -0.131836 -0.468750 +v -0.012312 -0.125000 -0.437501 +v -0.012985 -0.131836 -0.468750 +v -0.079683 0.097094 -0.000000 +v -0.059210 0.110774 -0.000000 +v -0.110774 0.059210 -0.000000 +v -0.036461 0.120197 -0.000000 +v -0.095821 0.108578 -0.468749 +v -0.104534 0.110913 -0.468749 +v -0.093486 0.099865 -0.468749 +v -0.110913 0.104534 -0.468749 +v -0.108578 0.095821 -0.468749 +v -0.099865 0.093486 -0.468749 +v 0.009021 0.144532 -0.468749 +v 0.004510 0.152344 -0.468749 +v 0.004510 0.136720 -0.468749 +v -0.004510 0.152344 -0.468749 +v -0.009021 0.144532 -0.468749 +v -0.004510 0.136720 -0.468749 +v 0.108578 0.095821 -0.468749 +v 0.110913 0.104534 -0.468749 +v 0.099865 0.093486 -0.468749 +v 0.104534 0.110913 -0.468749 +v 0.095821 0.108578 -0.468749 +v 0.093486 0.099865 -0.468749 +v 0.144532 -0.009021 -0.468749 +v 0.152344 -0.004510 -0.468749 +v 0.136720 -0.004510 -0.468749 +v 0.152344 0.004511 -0.468749 +v 0.144532 0.009021 -0.468749 +v 0.136720 0.004510 -0.468749 +v -0.108578 -0.095821 -0.468749 +v -0.110913 -0.104534 -0.468749 +v -0.099865 -0.093486 -0.468749 +v -0.104534 -0.110913 -0.468749 +v -0.095821 -0.108578 -0.468749 +v -0.093486 -0.099865 -0.468749 +v -0.144532 0.009021 -0.468749 +v -0.152344 0.004510 -0.468749 +v -0.136720 0.004510 -0.468749 +v -0.152344 -0.004510 -0.468749 +v -0.144532 -0.009021 -0.468749 +v -0.136720 -0.004510 -0.468749 +v -0.097094 0.079683 -0.000000 +v -0.012312 0.125000 -0.000000 +v -0.059210 0.010910 0.110774 +v -0.079683 0.009563 0.097094 +v -0.120197 0.003591 0.036461 +v -0.125000 0.001213 0.012312 +v -0.012312 0.012312 0.125001 +v -0.036461 0.011838 0.120197 +v -0.110774 0.005832 0.059210 +v -0.097094 0.007848 0.079683 +v -0.012312 0.036461 0.120197 +v -0.059210 0.032312 0.106517 +v -0.079683 0.028321 0.093363 +v -0.120197 0.010636 0.035060 +v -0.125000 0.003591 0.011838 +v -0.036461 0.035060 0.115578 +v -0.110774 0.017271 0.056935 +v -0.079683 0.045991 0.086044 +v -0.097094 0.037744 0.070614 +v -0.097094 0.023243 0.076621 +v -0.012312 0.059210 0.110774 +v -0.036461 0.056935 0.106517 +v -0.110774 0.028047 0.052471 +v -0.059210 0.052471 0.098167 +v -0.120197 0.017271 0.032312 +v -0.125000 0.005832 0.010910 +v -0.079683 0.061894 0.075418 +v -0.097094 0.050795 0.061894 +v -0.110774 0.037744 0.045991 +v -0.120197 0.023243 0.028321 +v -0.079683 0.075418 0.061894 +v -0.097094 0.061894 0.050795 +v -0.012312 0.079683 0.097094 +v -0.036461 0.076621 0.093363 +v -0.059210 0.070614 0.086044 +v -0.125000 0.007848 0.009563 +v -0.036461 0.093363 0.076621 +v -0.059210 0.086044 0.070614 +v -0.110774 0.045991 0.037744 +v -0.120197 0.028321 0.023243 +v -0.079683 0.086044 0.045991 +v -0.097094 0.070614 0.037744 +v -0.012312 0.097094 0.079683 +v -0.125000 0.009563 0.007848 +v -0.120197 0.032312 0.017271 +v -0.125000 0.010910 0.005832 +v -0.036461 0.106517 0.056935 +v -0.059210 0.098167 0.052471 +v -0.110774 0.052471 0.028046 +v -0.079683 0.093363 0.028321 +v -0.097094 0.076621 0.023243 +v -0.012312 0.110774 0.059210 +v -0.012312 0.120197 0.036461 +v -0.059210 0.106517 0.032312 +v -0.120197 0.035060 0.010635 +v -0.125000 0.011838 0.003591 +v -0.036461 0.115578 0.035060 +v -0.110774 0.056935 0.017271 +v -0.079683 0.097094 0.009563 +v -0.097094 0.079683 0.007848 +v -0.110774 0.059210 0.005832 +v -0.012312 0.125000 0.012311 +v -0.059210 0.110774 0.010910 +v -0.120197 0.036461 0.003591 +v -0.125000 0.012312 0.001212 +v -0.036461 0.120197 0.011838 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 1.0393 0.2971 +vt 1.0081 0.2851 +vt 1.0706 0.3080 +vt 1.1018 0.3172 +vt 0.6652 0.2849 +vt 0.6339 0.2969 +vt 0.9769 0.2723 +vt 0.7899 0.2657 +vt 0.8211 0.2658 +vt 0.8522 0.2658 +vt 0.8834 0.2658 +vt 0.7587 0.2657 +vt 0.7275 0.2722 +vt 0.7276 0.2657 +vt 0.6964 0.2722 +vt 0.7120 0.2722 +vt 0.6027 0.3076 +vt 0.5715 0.3168 +vt 0.9146 0.2658 +vt 0.9458 0.2658 +vt 0.9457 0.2723 +vt 0.9613 0.2723 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.3215 0.3169 +vt 0.3372 0.3122 +vt 0.3528 0.3168 +vt 0.3842 0.3241 +vt 0.4155 0.3290 +vt 0.4467 0.3316 +vt 0.4779 0.3315 +vt 0.5091 0.3290 +vt 0.5403 0.3240 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.9614 0.2658 +vt 0.7120 0.2657 +vt 0.9769 0.2658 +vt 0.9767 0.0339 +vt 0.9770 0.2593 +vt 0.9614 0.2593 +vt 0.9458 0.2593 +vt 0.9458 0.0339 +vt 1.0075 0.0339 +vt 1.0082 0.2466 +vt 1.0383 0.0339 +vt 1.0394 0.2346 +vt 0.9458 0.2658 +vt 0.9146 0.2658 +vt 0.9151 0.0339 +vt 1.0691 0.0339 +vt 1.0706 0.2237 +vt 0.8834 0.2658 +vt 0.8843 0.0339 +vt 0.8211 0.2658 +vt 0.8228 0.0338 +vt 0.8536 0.0338 +vt 0.8522 0.2658 +vt 0.9459 0.0196 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 1.0076 0.0195 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.3580 0.0320 +vt 0.3530 0.2232 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.1328 0.2072 +vt 1.1017 0.2145 +vt 1.0999 0.0340 +vt 1.1306 0.0342 +vt 0.8537 0.0195 +vt 1.0694 0.0196 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.7611 0.0336 +vt 0.7588 0.2465 +vt 0.7276 0.2592 +vt 0.7302 0.0335 +vt 0.8229 0.0194 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.7920 0.0337 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.7276 0.2592 +vt 0.7302 0.0335 +vt 0.7611 0.0336 +vt 0.7587 0.2657 +vt 0.7276 0.2657 +vt 0.7613 0.0193 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6964 0.2592 +vt 0.6653 0.2464 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.6995 0.0191 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.6375 0.0332 +vt 0.6342 0.2344 +vt 0.6686 0.0189 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.6066 0.0331 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4160 0.2019 +vt 0.3846 0.2068 +vt 0.3892 0.0320 +vt 0.4204 0.0322 +vt 0.5097 0.2021 +vt 0.4786 0.1994 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.5759 0.0186 +vt 0.5757 0.0330 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.4473 0.1994 +vt 0.4516 0.0324 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.7120 0.2657 +vt 0.6964 0.2657 +vt 0.7120 0.2592 +vt 0.7899 0.2657 +vt 0.6031 0.2236 +vt 0.5719 0.2143 +vt 1.1952 0.1995 +vt 0.3531 0.2140 +vt 0.3374 0.2186 +vt 0.5409 0.2071 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6652 0.2656 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.6964 0.2592 +vt 0.6964 0.2657 +vt 0.7920 0.0337 +vt 0.7900 0.2345 +vt 0.7120 0.2592 +vt 0.6562 0.6719 +vt 0.6562 0.6562 +vt 0.6719 0.6562 +vt 0.6719 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.7188 0.6719 +vt 0.7188 0.6562 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.7031 0.6719 +vt 0.7031 0.6562 +vt 0.6875 0.6562 +vt 0.6875 0.6719 +vt 0.6562 0.6719 +vt 0.6562 0.6562 +vt 0.6719 0.6562 +vt 0.6719 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.7188 0.6719 +vt 0.7188 0.6562 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.7031 0.6719 +vt 0.7031 0.6562 +vt 0.6875 0.6562 +vt 0.6875 0.6719 +vt 0.6562 0.6719 +vt 0.6562 0.6562 +vt 0.6719 0.6562 +vt 0.6719 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.7188 0.6719 +vt 0.7188 0.6562 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.7031 0.6719 +vt 0.7031 0.6562 +vt 0.6875 0.6562 +vt 0.6875 0.6719 +vt 0.6562 0.6719 +vt 0.6562 0.6562 +vt 0.6719 0.6562 +vt 0.6719 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.7188 0.6719 +vt 0.7188 0.6562 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.7031 0.6719 +vt 0.7031 0.6562 +vt 0.6875 0.6562 +vt 0.6875 0.6719 +vt 0.6562 0.6719 +vt 0.6562 0.6562 +vt 0.6719 0.6562 +vt 0.6719 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.7188 0.6719 +vt 0.7188 0.6562 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.7031 0.6719 +vt 0.7031 0.6562 +vt 0.6875 0.6562 +vt 0.6875 0.6719 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.2188 0.5664 +vt 0.2188 0.5898 +vt 0.2500 0.5664 +vt 0.2500 0.5898 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.2812 0.5664 +vt 0.2812 0.5898 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7812 0.5664 +vt 0.7812 0.5898 +vt 0.4519 0.0179 +vt 0.4830 0.0181 +vt 0.4827 0.0325 +vt 0.4516 0.0324 +vt 0.3125 0.5664 +vt 0.3125 0.5898 +vt 0.4208 0.0177 +vt 0.4204 0.0322 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.5140 0.0183 +vt 0.5137 0.0327 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.5938 0.5664 +vt 0.5938 0.5898 +vt 0.3438 0.5664 +vt 0.3438 0.5898 +vt 0.3895 0.0175 +vt 0.3892 0.0320 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.3750 0.5664 +vt 0.3750 0.5898 +vt 0.3583 0.0174 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.5759 0.0186 +vt 0.5757 0.0330 +vt 0.4156 0.2462 +vt 0.3843 0.2341 +vt 0.4062 0.5664 +vt 0.4062 0.5898 +vt 0.3271 0.0173 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.6068 0.0187 +vt 0.6066 0.0331 +vt 0.4468 0.2590 +vt 0.4780 0.2590 +vt 0.4624 0.2590 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.2958 0.0171 +vt 0.2956 0.0317 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.6377 0.0188 +vt 0.6375 0.0332 +vt 0.4375 0.5664 +vt 0.4375 0.5898 +vt 0.2642 0.0317 +vt 0.2641 0.0170 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.6686 0.0189 +vt 0.4688 0.5664 +vt 0.4688 0.5898 +vt 0.2327 0.0318 +vt 0.2320 0.0171 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.6995 0.0191 +vt 0.2906 0.2066 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.2015 0.0321 +vt 0.1997 0.0175 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.7304 0.0192 +vt 0.2593 0.2016 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 1.1610 0.0344 +vt 1.1624 0.0202 +vt 0.8438 0.5898 +vt 0.8438 0.5664 +vt 0.7613 0.0193 +vt 1.1306 0.0342 +vt 1.1314 0.0198 +vt 0.6250 0.5664 +vt 0.6250 0.5898 +vt 0.7921 0.0194 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 1.0999 0.0340 +vt 1.1004 0.0197 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8229 0.0194 +vt 0.8228 0.0338 +vt 0.6875 0.5664 +vt 0.6875 0.5898 +vt 1.0691 0.0339 +vt 1.0694 0.0196 +vt 0.8537 0.0195 +vt 0.8536 0.0338 +vt 1.1640 0.2021 +vt 1.1328 0.2072 +vt 1.0383 0.0339 +vt 1.0385 0.0195 +vt 0.8844 0.0196 +vt 0.8843 0.0339 +vt 1.1017 0.2145 +vt 1.0075 0.0339 +vt 1.0076 0.0195 +vt 0.9151 0.0196 +vt 0.9151 0.0339 +vt 1.0862 0.2191 +vt 1.0705 0.2145 +vt 0.9767 0.0339 +vt 0.9767 0.0195 +vt 0.9458 0.0339 +vt 0.9459 0.0196 +vt 1.0393 0.2073 +vt 0.8835 0.2074 +vt 0.8524 0.2146 +vt 1.0081 0.2024 +vt 0.9147 0.2024 +vt 0.9770 0.1999 +vt 0.9458 0.1999 +vt 0.5717 0.2656 +vt 0.5405 0.2656 +vt 0.6341 0.2656 +vt 0.8212 0.2238 +vt 1.1952 0.1995 +vt 0.5092 0.2655 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6029 0.2656 +vt 0.4780 0.2655 +vt 0.4624 0.2655 +vt 0.4467 0.2655 +vt 0.8834 0.2658 +vt 0.8522 0.2658 +vt 0.7587 0.2657 +vt 0.7276 0.2657 +vt 0.9614 0.2658 +vt 0.9458 0.2658 +vt 0.9146 0.2658 +vt 0.7899 0.2657 +vt 0.8211 0.2658 +vt 0.9614 0.2658 +vt 0.9458 0.2658 +vt 0.8834 0.2658 +vt 0.8522 0.2658 +vt 0.7587 0.2657 +vt 0.7276 0.2657 +vt 0.9146 0.2658 +vt 0.7899 0.2657 +vt 0.8522 0.2658 +vt 0.8211 0.2658 +vt 0.8211 0.2658 +vt 0.9458 0.2658 +vt 0.9146 0.2658 +vt 0.7899 0.2657 +vt 0.9614 0.2658 +vt 0.8834 0.2658 +vt 0.7587 0.2657 +vt 0.7276 0.2657 +vt 0.8522 0.2658 +vt 0.8211 0.2658 +vt 0.7899 0.2657 +vt 0.7587 0.2657 +vt 0.8522 0.2658 +vt 0.8211 0.2658 +vt 0.9458 0.2658 +vt 0.9146 0.2658 +vt 0.9614 0.2658 +vt 0.8834 0.2658 +vt 0.7276 0.2657 +vt 0.9146 0.2658 +vt 0.8834 0.2658 +vt 0.7899 0.2657 +vt 0.7587 0.2657 +vt 0.8522 0.2658 +vt 0.8211 0.2658 +vt 0.9458 0.2658 +vt 0.9614 0.2658 +vt 0.7276 0.2657 +vt 0.7587 0.2657 +vt 0.7276 0.2657 +vt 0.9146 0.2658 +vt 0.8834 0.2658 +vt 0.7899 0.2657 +vt 0.8522 0.2658 +vt 0.8211 0.2658 +vt 0.9458 0.2658 +vt 0.9614 0.2658 +vt 0.9614 0.2658 +vt 0.9458 0.2658 +vt 0.8834 0.2658 +vt 0.7587 0.2657 +vt 0.7276 0.2657 +vt 0.9146 0.2658 +vt 0.7899 0.2657 +vt 0.8522 0.2658 +vt 0.8211 0.2658 +vt 0.7899 0.2657 +vt 0.9614 0.2658 +vt 0.9458 0.2658 +vt 0.8834 0.2658 +vt 0.7587 0.2657 +vt 0.7276 0.2657 +vt 0.9146 0.2658 +vt 0.9146 0.2658 +vt 0.8834 0.2658 +vt 0.7899 0.2657 +vt 0.7587 0.2657 +vt 0.9458 0.2658 +vt 0.8211 0.2658 +vt 0.8522 0.2658 +vt 0.9614 0.2658 +vt 0.7276 0.2657 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.6857 0.2113 0.6965 +vn 0.6857 0.2113 0.6965 +vn 0.6857 0.3431 0.6419 +vn -0.6857 0.3431 0.6419 +vn -0.6857 0.0713 0.7244 +vn 0.6857 0.0713 0.7244 +vn -0.6857 -0.0713 0.7244 +vn 0.6857 -0.0713 0.7244 +vn -0.6857 -0.2112 0.6966 +vn 0.6857 -0.2114 0.6965 +vn -0.6857 -0.3432 0.6419 +vn 0.6857 -0.3432 0.6419 +vn -0.6857 -0.4618 0.5625 +vn 0.6857 -0.4618 0.5625 +vn -0.6857 -0.5627 0.4617 +vn 0.6857 -0.5627 0.4617 +vn -0.6857 -0.6420 0.3431 +vn 0.6857 -0.6419 0.3432 +vn -0.6857 -0.6966 0.2112 +vn 0.6857 -0.6966 0.2112 +vn -0.6857 -0.7244 0.0713 +vn 0.6857 -0.7244 0.0713 +vn -0.6857 -0.7244 -0.0713 +vn 0.6857 -0.7244 -0.0713 +vn -0.6857 -0.6965 -0.2113 +vn 0.6857 -0.6965 -0.2113 +vn -0.6857 -0.6419 -0.3432 +vn 0.6857 -0.6420 -0.3430 +vn -0.6857 -0.5628 -0.4616 +vn 0.6857 -0.5626 -0.4617 +vn -0.6857 -0.4617 -0.5626 +vn 0.6857 -0.4618 -0.5626 +vn -0.6857 -0.3431 -0.6419 +vn 0.6857 -0.3431 -0.6419 +vn -0.6857 -0.2115 -0.6965 +vn 0.6857 -0.2112 -0.6966 +vn -0.6857 -0.0713 -0.7244 +vn 0.6857 -0.0713 -0.7244 +vn -0.6857 0.0712 -0.7244 +vn 0.6857 0.0714 -0.7244 +vn -0.6857 0.2112 -0.6966 +vn 0.6857 0.2114 -0.6965 +vn -0.6857 0.4617 -0.5626 +vn 0.6857 0.4616 -0.5627 +vn 0.6857 0.3431 -0.6419 +vn -0.6857 0.3431 -0.6419 +vn -0.6857 0.5626 -0.4618 +vn 0.6857 0.5626 -0.4617 +vn -0.6857 0.6420 -0.3430 +vn 0.6857 0.6419 -0.3432 +vn -0.6857 0.6965 -0.2113 +vn 0.6857 0.6965 -0.2113 +vn -0.6857 0.7244 -0.0713 +vn 0.6857 0.7244 -0.0713 +vn -0.6857 0.6965 0.2114 +vn 0.6857 0.6965 0.2113 +vn 0.6857 0.7244 0.0713 +vn -0.6857 0.7244 0.0713 +vn -0.6857 0.6419 0.3432 +vn 0.6857 0.6420 0.3430 +vn -0.6857 0.5626 0.4617 +vn 0.6857 0.5625 0.4618 +vn -0.2147 0.8614 -0.4604 +vn -0.1087 0.8767 -0.4686 +vn -0.1087 0.9513 -0.2886 +vn -0.2147 0.9346 -0.2835 +vn -0.2147 0.9720 -0.0957 +vn -0.1087 0.9893 -0.0974 +vn -0.2147 0.9720 0.0957 +vn -0.1087 0.9893 0.0974 +vn -0.2147 0.9346 0.2835 +vn -0.1087 0.9513 0.2886 +vn -0.2147 0.8614 0.4604 +vn -0.1087 0.8767 0.4686 +vn -0.2147 0.7550 0.6196 +vn -0.1087 0.7684 0.6306 +vn -0.1087 0.6306 0.7684 +vn -0.2147 0.6196 0.7550 +vn -0.2147 0.4604 0.8614 +vn -0.1087 0.4686 0.8767 +vn -0.2147 0.2835 0.9346 +vn -0.1087 0.2886 0.9513 +vn -0.2147 0.0957 0.9720 +vn -0.1087 0.0974 0.9893 +vn -0.1087 -0.0974 0.9893 +vn -0.2147 -0.0957 0.9720 +vn -0.1087 -0.2886 0.9513 +vn -0.2147 -0.2835 0.9346 +vn -0.2147 -0.4604 0.8614 +vn -0.1087 -0.4686 0.8767 +vn -0.1087 -0.6306 0.7684 +vn -0.2147 -0.6196 0.7550 +vn -0.1087 -0.7684 0.6306 +vn -0.2147 -0.7550 0.6196 +vn -0.2147 -0.8614 0.4604 +vn -0.1087 -0.8767 0.4686 +vn -0.1087 -0.9513 0.2886 +vn -0.2147 -0.9346 0.2835 +vn -0.2147 -0.9720 0.0957 +vn -0.1087 -0.9893 0.0974 +vn -0.1087 -0.9893 -0.0974 +vn -0.2147 -0.9720 -0.0957 +vn -0.2147 -0.9346 -0.2835 +vn -0.1087 -0.9513 -0.2886 +vn -0.1087 -0.8767 -0.4686 +vn -0.2147 -0.8614 -0.4604 +vn -0.1087 -0.7684 -0.6306 +vn -0.2147 -0.7550 -0.6196 +vn -0.1087 -0.6306 -0.7684 +vn -0.2147 -0.6196 -0.7550 +vn -0.1087 -0.4686 -0.8767 +vn -0.2147 -0.4604 -0.8614 +vn -0.1087 -0.2886 -0.9513 +vn -0.2147 -0.2835 -0.9346 +vn -0.1087 -0.0974 -0.9893 +vn -0.2147 -0.0957 -0.9720 +vn -0.2147 0.2835 -0.9346 +vn -0.2147 0.0957 -0.9720 +vn -0.1087 0.0974 -0.9893 +vn -0.1087 0.2886 -0.9513 +vn -0.2147 0.6196 -0.7550 +vn -0.2147 0.4604 -0.8614 +vn -0.1087 0.4686 -0.8767 +vn -0.1087 0.6306 -0.7684 +vn -0.2147 0.7550 -0.6196 +vn -0.1087 0.7684 -0.6306 +vn 0.6857 0.4617 0.5626 +vn -0.6857 0.4616 0.5627 +vn -0.6100 0.3031 0.7322 +vn -0.0000 0.3827 0.9239 +vn -0.0000 0.9914 0.1305 +vn -0.6100 0.7856 0.1034 +vn -0.6100 -0.4824 0.6287 +vn 0.0000 -0.6088 0.7934 +vn 0.0000 0.6087 -0.7934 +vn -0.6100 0.4824 -0.6286 +vn 0.0000 -0.3827 -0.9239 +vn -0.6100 -0.3033 -0.7321 +vn 0.0000 -0.9914 -0.1305 +vn -0.6100 -0.7856 -0.1034 +vn -0.6100 0.7320 0.3034 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.7934 -0.6087 +vn -0.6100 0.6287 -0.4823 +vn -0.6100 0.1034 0.7856 +vn 0.0000 0.1305 0.9914 +vn 0.0000 -0.1305 -0.9914 +vn -0.6100 -0.1034 -0.7856 +vn 0.0000 -0.9239 -0.3827 +vn -0.6100 -0.7321 -0.3032 +vn 0.0000 -0.7934 0.6087 +vn -0.6100 -0.6288 0.4823 +vn -0.6100 0.7321 -0.3032 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.1305 -0.9914 +vn -0.6100 0.1034 -0.7856 +vn -0.6100 0.6287 0.4824 +vn 0.0000 0.7934 0.6088 +vn 0.0000 -0.7934 -0.6087 +vn -0.6100 -0.6286 -0.4824 +vn 0.0000 -0.9239 0.3827 +vn -0.6100 -0.7321 0.3032 +vn 0.0000 -0.1306 0.9914 +vn -0.6100 -0.1034 0.7856 +vn -0.6100 0.3032 -0.7321 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.6087 -0.7934 +vn -0.6100 -0.4823 -0.6287 +vn -0.6100 0.7856 -0.1034 +vn 0.0000 0.9914 -0.1305 +vn -0.0000 -0.9914 0.1305 +vn -0.6100 -0.7856 0.1034 +vn -0.0000 -0.3827 0.9239 +vn -0.6100 -0.3033 0.7321 +vn 0.0000 0.6087 0.7934 +vn -0.6100 0.4824 0.6286 +vn -0.6100 -0.3032 -0.7321 +vn -0.6100 0.4824 -0.6287 +vn -0.0000 -0.6087 0.7934 +vn -0.6100 -0.4824 0.6286 +vn -0.6100 0.3032 0.7321 +vn -0.6100 -0.7320 -0.3034 +vn 0.0000 -0.7934 0.6088 +vn -0.6100 -0.6287 0.4824 +vn 0.0000 0.1306 0.9914 +vn -0.6100 0.7321 0.3032 +vn -0.6100 0.6288 -0.4823 +vn 0.0000 -0.1305 0.9914 +vn -0.6100 -0.6286 -0.4825 +vn 0.0000 0.7934 0.6087 +vn -0.6100 0.6287 0.4823 +vn -0.6100 0.7322 -0.3030 +vn -0.6100 -0.3032 0.7321 +vn -0.6100 0.4822 0.6288 +vn -0.6100 -0.4824 -0.6286 +vn 0.2267 -0.2267 0.9472 +vn 0.1243 -0.1243 0.9844 +vn 0.3333 -0.3333 0.8819 +vn 0.4431 -0.4431 0.7793 +vn 0.1243 0.9844 -0.1243 +vn 0.2267 0.9472 -0.2267 +vn 0.0309 -0.0309 0.9990 +vn -0.0000 0.8819 0.4714 +vn -0.0000 0.7730 0.6344 +vn -0.0000 0.6344 0.7730 +vn -0.0000 0.4714 0.8819 +vn -0.0000 0.9569 0.2903 +vn -0.0000 0.9952 0.0980 +vn 0.0247 0.9994 -0.0247 +vn 0.3333 0.8819 -0.3333 +vn 0.4431 0.7793 -0.4431 +vn 0.0000 0.2903 0.9569 +vn 0.0062 0.1163 0.9932 +vn 0.0062 0.1041 0.9945 +vn 0.0123 -0.0000 0.9999 +vn 0.5510 -0.5510 0.6267 +vn 0.6437 -0.6437 0.4139 +vn 0.6995 -0.6995 0.1458 +vn 0.6995 -0.6995 -0.1458 +vn 0.6437 -0.6437 -0.4139 +vn 0.5510 -0.5510 -0.6267 +vn 0.4431 -0.4431 -0.7793 +vn 0.5774 -0.5774 -0.5774 +vn 0.4431 -0.7793 -0.4431 +vn 0.5510 -0.6267 -0.5510 +vn 0.6437 -0.4139 -0.6437 +vn 0.6995 -0.1458 -0.6995 +vn 0.6995 0.1458 -0.6995 +vn 0.6437 0.4139 -0.6437 +vn 0.5510 0.6267 -0.5510 +vn -0.6100 0.5602 0.5604 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.9659 -0.2588 +vn -0.6100 0.7654 -0.2051 +vn -0.6100 -0.2051 0.7654 +vn 0.0000 -0.2588 0.9659 +vn 0.0000 0.2588 -0.9659 +vn -0.6100 0.2051 -0.7654 +vn 0.0000 -0.7071 -0.7071 +vn -0.6100 -0.5603 -0.5603 +vn 0.0000 -0.9659 0.2588 +vn -0.6100 -0.7654 0.2052 +vn -0.6100 0.7924 -0.0001 +vn 0.0000 0.5000 -0.8660 +vn -0.6100 0.3961 -0.6863 +vn -0.6100 0.3961 0.6863 +vn 0.0000 0.5000 0.8660 +vn 0.0000 -0.5000 -0.8660 +vn -0.6100 -0.3963 -0.6861 +vn -0.6100 -0.7924 0.0001 +vn 0.0000 -0.5000 0.8660 +vn -0.6100 -0.3962 0.6862 +vn -0.6100 0.5603 -0.5603 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.2588 -0.9659 +vn -0.6100 -0.2050 -0.7654 +vn -0.6100 0.7654 0.2050 +vn 0.0000 0.9659 0.2588 +vn 0.0000 -0.9659 -0.2588 +vn -0.6100 -0.7654 -0.2051 +vn 0.0000 -0.7071 0.7071 +vn -0.6100 -0.5604 0.5602 +vn 0.0000 0.2588 0.9659 +vn -0.6100 0.2051 0.7654 +vn -0.6100 0.0001 -0.7924 +vn 0.0000 -0.8660 -0.5000 +vn -0.6100 -0.6862 -0.3963 +vn -0.6100 0.6862 -0.3963 +vn 0.0000 0.8660 -0.5000 +vn -0.0000 -0.8660 0.5000 +vn -0.6100 -0.6864 0.3959 +vn -0.6100 -0.0002 0.7924 +vn -0.0000 0.8660 0.5000 +vn -0.6100 0.6862 0.3962 +vn -0.6100 -0.7654 0.2051 +vn -0.6100 -0.2052 0.7654 +vn -0.6100 0.5603 0.5603 +vn -0.6100 0.7654 -0.2052 +vn -0.6100 -0.3961 -0.6863 +vn -0.6100 0.3962 0.6862 +vn -0.6100 0.3962 -0.6862 +vn -0.6100 -0.5603 0.5603 +vn -0.6100 0.2049 0.7654 +vn -0.6100 -0.7654 -0.2050 +vn -0.6100 0.7654 0.2051 +vn -0.6100 -0.2051 -0.7654 +vn -0.6100 0.6862 0.3963 +vn -0.6100 -0.6862 0.3962 +vn -0.6100 0.6863 -0.3961 +vn -0.6100 -0.6862 -0.3962 +vn 0.0061 -0.0184 0.9998 +vn 0.0974 0.1087 0.9893 +vn -0.0917 -0.0131 0.9957 +vn -0.0946 0.1083 0.9896 +vn 0.2886 0.1087 0.9513 +vn 0.4686 0.1087 0.8767 +vn -0.0952 0.0117 0.9954 +vn -0.2879 0.0228 0.9574 +vn -0.2861 0.1081 0.9521 +vn 0.6306 0.1087 0.7684 +vn -0.4719 0.0211 0.8814 +vn -0.4691 0.1082 0.8765 +vn -0.7733 0.0153 0.6339 +vn -0.7688 0.1084 0.6302 +vn -0.6311 0.1083 0.7681 +vn -0.6349 0.0185 0.7724 +vn -0.0957 0.2147 0.9720 +vn -0.2835 0.2147 0.9346 +vn 0.0957 0.2147 0.9720 +vn 0.2835 0.2147 0.9346 +vn 0.7684 0.6306 0.1087 +vn 0.6306 0.7684 0.1087 +vn -0.4604 0.2147 0.8614 +vn 0.4604 0.2147 0.8614 +vn 0.7684 0.1087 0.6306 +vn 0.8767 0.1087 0.4686 +vn -0.6196 0.2147 0.7550 +vn 0.6196 0.2147 0.7550 +vn 0.9513 0.1087 0.2886 +vn -0.9513 -0.2886 0.1087 +vn -0.9844 -0.1243 -0.1243 +vn -0.9994 -0.0247 -0.0247 +vn -0.9893 -0.0974 0.1087 +vn -0.7550 0.2147 0.6196 +vn 0.5626 0.6857 0.4617 +vn 0.5626 -0.6857 0.4617 +vn 0.6419 -0.6857 0.3431 +vn 0.6419 0.6857 0.3431 +vn 0.7244 0.6857 0.0713 +vn 0.7244 -0.6857 0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.7244 0.6857 -0.0713 +vn 0.7550 0.2147 0.6196 +vn 0.4618 0.6857 0.5625 +vn 0.4618 -0.6857 0.5626 +vn -0.8614 0.2147 0.4604 +vn -0.8769 0.1085 0.4682 +vn 0.6966 -0.6857 -0.2112 +vn 0.6965 0.6857 -0.2114 +vn 0.8614 0.2147 0.4604 +vn 0.3430 0.6857 0.6420 +vn 0.3432 -0.6857 0.6419 +vn 0.9893 0.1087 0.0974 +vn 0.9893 0.1087 -0.0974 +vn -0.9952 -0.0000 0.0975 +vn -0.9893 0.1087 0.0973 +vn -0.9514 0.1086 0.2882 +vn -0.9568 0.0071 0.2907 +vn -0.9951 0.0025 0.0992 +vn -0.9346 0.2147 0.2835 +vn 0.2113 0.6857 0.6965 +vn 0.2113 -0.6857 0.6965 +vn 0.9346 0.2147 0.2835 +vn -0.0713 0.6857 0.7244 +vn -0.0713 -0.6857 0.7244 +vn 0.0713 -0.6857 0.7244 +vn 0.0713 0.6857 0.7244 +vn -0.9720 0.2147 0.0957 +vn 0.6420 -0.6857 -0.3430 +vn 0.6419 0.6857 -0.3432 +vn 0.9720 0.2147 0.0957 +vn -0.2113 0.6857 0.6965 +vn -0.2113 -0.6857 0.6965 +vn 0.9513 0.1087 -0.2886 +vn 0.8767 0.1087 -0.4686 +vn -0.9513 0.1087 -0.2886 +vn -0.9893 0.1087 -0.0974 +vn -0.9720 0.2147 -0.0957 +vn 0.5628 -0.6857 -0.4616 +vn 0.5628 0.6857 -0.4616 +vn 0.9720 0.2147 -0.0957 +vn -0.3432 0.6857 0.6419 +vn -0.3430 -0.6857 0.6420 +vn 0.7684 0.1087 -0.6306 +vn -0.8767 0.1087 -0.4686 +vn -0.9472 -0.2267 -0.2267 +vn -0.9346 0.2147 -0.2835 +vn 0.4617 -0.6857 -0.5626 +vn 0.4617 0.6857 -0.5626 +vn 0.9346 0.2147 -0.2835 +vn -0.4617 0.6857 0.5626 +vn -0.4618 -0.6857 0.5626 +vn -0.8614 0.2147 -0.4604 +vn 0.3430 -0.6857 -0.6420 +vn 0.3432 0.6857 -0.6419 +vn 0.8614 0.2147 -0.4604 +vn -0.5627 0.6857 0.4617 +vn -0.5627 -0.6857 0.4617 +vn -0.7550 0.2147 -0.6196 +vn -0.7684 0.1087 -0.6306 +vn 0.2113 0.6857 -0.6965 +vn 0.2113 -0.6857 -0.6965 +vn 0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn 0.7550 0.2147 -0.6196 +vn 0.4139 -0.6437 -0.6437 +vn 0.6267 -0.5510 -0.5510 +vn 0.4686 0.1087 -0.8767 +vn 0.2886 0.1087 -0.9513 +vn -0.4139 -0.6437 -0.6437 +vn -0.1458 -0.6995 -0.6995 +vn -0.0974 0.1087 -0.9893 +vn -0.2886 0.1087 -0.9513 +vn -0.6196 0.2147 -0.7550 +vn -0.6306 0.1087 -0.7684 +vn -0.0713 -0.6857 -0.7244 +vn -0.0713 0.6857 -0.7244 +vn 0.6965 -0.6857 0.2113 +vn 0.6965 0.6857 0.2113 +vn 0.6196 0.2147 -0.7550 +vn 0.6306 0.1087 -0.7684 +vn -0.6420 0.6857 0.3430 +vn -0.6419 -0.6857 0.3433 +vn 0.1458 -0.6995 -0.6995 +vn 0.0974 0.1087 -0.9893 +vn -0.4604 0.2147 -0.8614 +vn -0.4686 0.1087 -0.8767 +vn -0.2113 -0.6857 -0.6965 +vn -0.2113 0.6857 -0.6965 +vn 0.4604 0.2147 -0.8614 +vn -0.6965 0.6857 0.2113 +vn -0.6965 -0.6857 0.2113 +vn -0.2835 0.2147 -0.9346 +vn -0.3434 -0.6857 -0.6418 +vn -0.3431 0.6857 -0.6419 +vn 0.2835 0.2147 -0.9346 +vn -0.7244 0.6857 0.0713 +vn -0.7244 -0.6857 0.0711 +vn -0.0957 0.2147 -0.9720 +vn -0.4617 -0.6857 -0.5626 +vn -0.4617 0.6857 -0.5626 +vn 0.0957 0.2147 -0.9720 +vn -0.7244 0.6857 -0.0713 +vn -0.7244 -0.6857 -0.0713 +vn -0.6965 0.6857 -0.2113 +vn -0.6965 -0.6857 -0.2113 +vn -0.5626 -0.6857 -0.4617 +vn -0.5626 0.6857 -0.4617 +vn -0.6419 0.6857 -0.3431 +vn -0.6419 -0.6857 -0.3431 +vn 0.3032 0.6100 -0.7321 +vn 0.3827 -0.0000 -0.9239 +vn -0.6087 -0.0000 -0.7934 +vn -0.4824 0.6100 -0.6287 +vn 0.7856 0.6100 -0.1034 +vn 0.9914 0.0000 -0.1305 +vn -0.9914 -0.0000 0.1305 +vn -0.7856 0.6100 0.1034 +vn -0.3827 0.0000 0.9239 +vn -0.3033 0.6100 0.7321 +vn 0.6087 0.0000 0.7934 +vn 0.4824 0.6100 0.6287 +vn 0.7320 0.6100 -0.3034 +vn 0.9239 0.0000 -0.3827 +vn 0.1305 0.0000 -0.9914 +vn 0.1033 0.6100 -0.7857 +vn 0.6287 0.6100 0.4824 +vn 0.7934 0.0000 0.6088 +vn -0.7934 0.0000 -0.6087 +vn -0.6287 0.6100 -0.4823 +vn -0.9239 0.0000 0.3827 +vn -0.7321 0.6100 0.3032 +vn -0.1305 0.0000 0.9914 +vn -0.1034 0.6100 0.7856 +vn 0.7322 0.6100 0.3031 +vn 0.9239 0.0000 0.3827 +vn 0.7934 0.0000 -0.6088 +vn 0.6286 0.6100 -0.4825 +vn 0.1033 0.6100 0.7856 +vn 0.1305 0.0000 0.9914 +vn -0.1306 0.0000 -0.9914 +vn -0.1034 0.6100 -0.7856 +vn -0.9239 0.0000 -0.3827 +vn -0.7321 0.6100 -0.3032 +vn -0.7934 0.0000 0.6087 +vn -0.6287 0.6100 0.4824 +vn 0.3032 0.6100 0.7321 +vn 0.3826 0.0000 0.9239 +vn 0.9914 0.0000 0.1305 +vn 0.7856 0.6100 0.1035 +vn -0.4824 0.6100 0.6287 +vn -0.6088 0.0000 0.7933 +vn 0.6087 0.0000 -0.7934 +vn 0.4824 0.6100 -0.6287 +vn -0.3827 -0.0000 -0.9239 +vn -0.3031 0.6100 -0.7321 +vn -0.9914 0.0000 -0.1305 +vn -0.7856 0.6100 -0.1036 +vn -0.3032 0.6100 0.7321 +vn 0.6088 -0.0001 0.7933 +vn 0.4823 0.6100 0.6288 +vn 0.9914 -0.0000 -0.1306 +vn -0.7320 0.6100 0.3034 +vn -0.1033 0.6100 0.7857 +vn -0.6287 0.6100 -0.4824 +vn -0.7934 0.0000 -0.6088 +vn 0.7934 0.0000 0.6087 +vn 0.6287 0.6100 0.4823 +vn 0.7321 0.6100 -0.3032 +vn 0.1035 0.6100 -0.7856 +vn -0.7322 0.6100 -0.3031 +vn -0.7934 0.0000 0.6088 +vn -0.6286 0.6100 0.4825 +vn -0.1033 0.6100 -0.7856 +vn -0.1305 0.0000 -0.9914 +vn 0.1306 0.0000 0.9914 +vn 0.1034 0.6100 0.7856 +vn 0.7321 0.6100 0.3032 +vn 0.7934 0.0000 -0.6087 +vn 0.6287 0.6100 -0.4824 +vn -0.3031 0.6100 -0.7322 +vn -0.7856 0.6100 -0.1033 +vn 0.6088 0.0000 -0.7934 +vn -0.6087 0.0000 0.7934 +vn -0.4825 0.6100 0.6286 +vn 0.3827 -0.0000 0.9239 +vn 0.9915 -0.0000 0.1305 +vn 0.7856 0.6100 0.1034 +vn -0.8819 0.0114 0.4713 +vn -0.8819 -0.3333 -0.3333 +vn -0.7793 -0.4431 -0.4431 +vn 0.7793 -0.4431 -0.4431 +vn -0.6267 -0.5510 -0.5510 +vn 0.5604 0.6100 -0.5602 +vn 0.7071 0.0000 -0.7071 +vn -0.2588 0.0000 -0.9659 +vn -0.2052 0.6100 -0.7654 +vn 0.7654 0.6100 0.2051 +vn 0.9659 0.0000 0.2588 +vn -0.9659 0.0000 -0.2588 +vn -0.7654 0.6100 -0.2050 +vn -0.7071 0.0000 0.7071 +vn -0.5604 0.6100 0.5602 +vn 0.2588 0.0000 0.9659 +vn 0.2051 0.6100 0.7654 +vn 0.7924 0.6100 0.0001 +vn 0.5000 0.0000 -0.8660 +vn 0.3962 0.6100 -0.6862 +vn 0.3963 0.6100 0.6862 +vn 0.5000 0.0000 0.8660 +vn -0.5000 0.0000 -0.8660 +vn -0.3961 0.6100 -0.6863 +vn -0.7924 0.6100 0.0000 +vn -0.5000 0.0000 0.8660 +vn -0.3962 0.6100 0.6862 +vn 0.5602 0.6100 0.5604 +vn 0.7071 0.0000 0.7071 +vn 0.9659 0.0000 -0.2588 +vn 0.7654 0.6100 -0.2052 +vn -0.2051 0.6100 0.7654 +vn -0.2588 0.0000 0.9659 +vn 0.2588 0.0000 -0.9659 +vn 0.2050 0.6100 -0.7654 +vn -0.7071 0.0000 -0.7071 +vn -0.5602 0.6100 -0.5604 +vn -0.9659 0.0000 0.2588 +vn -0.7654 0.6100 0.2051 +vn -0.0001 0.6100 0.7924 +vn 0.8660 0.0000 0.5000 +vn 0.6862 0.6100 0.3962 +vn -0.6863 0.6100 0.3961 +vn -0.8660 0.0000 0.5000 +vn 0.8660 0.0000 -0.5000 +vn 0.6863 0.6100 -0.3961 +vn -0.0000 0.6100 -0.7924 +vn -0.8660 -0.0000 -0.5000 +vn -0.6862 0.6100 -0.3963 +vn 0.2052 0.6100 0.7654 +vn -0.7654 0.6100 -0.2051 +vn 0.7654 0.6100 0.2050 +vn -0.2051 0.6100 -0.7654 +vn -0.7924 0.6100 -0.0001 +vn -0.3963 0.6100 -0.6862 +vn 0.3961 0.6100 0.6863 +vn 0.7924 0.6100 -0.0000 +vn -0.7654 0.6100 0.2052 +vn 0.2051 0.6100 -0.7654 +vn -0.2050 0.6100 0.7654 +vn 0.7654 0.6100 -0.2051 +vn -0.0001 0.6100 -0.7924 +vn -0.6863 0.6100 -0.3961 +vn 0.6861 0.6100 -0.3963 +vn -0.6862 0.6100 0.3962 +vn 0.0000 0.6100 0.7924 +vn -0.9569 0.2903 -0.0000 +vn -0.9513 0.2886 0.1087 +vn -0.9893 0.0974 0.1087 +vn -0.9952 0.0980 0.0000 +vn -0.8767 -0.4686 0.1087 +vn 0.7856 -0.1035 0.6100 +vn 0.9914 -0.1306 0.0000 +vn 0.6088 0.7933 0.0000 +vn 0.4824 0.6286 0.6100 +vn 0.3032 -0.7321 0.6100 +vn 0.3827 -0.9239 0.0000 +vn -0.4824 -0.6287 0.6100 +vn -0.6087 -0.7934 0.0000 +vn -0.7856 0.1034 0.6100 +vn -0.9914 0.1305 0.0000 +vn -0.3827 0.9239 0.0000 +vn -0.3032 0.7321 0.6100 +vn -0.7856 0.1033 0.6100 +vn -0.6088 -0.7933 -0.0000 +vn -0.4825 -0.6286 0.6100 +vn 0.4823 0.6287 0.6100 +vn 0.6087 0.7934 0.0000 +vn 0.7856 -0.1034 0.6100 +vn 0.9914 -0.1305 0.0000 +vn 0.3826 -0.9239 0.0000 +vn 0.3030 -0.7322 0.6100 +vn -0.6287 -0.4824 0.6100 +vn -0.7934 -0.6087 0.0000 +vn 0.1305 -0.9914 0.0000 +vn 0.1036 -0.7856 0.6100 +vn -0.7321 0.3032 0.6100 +vn -0.9239 0.3827 0.0000 +vn -0.1034 0.7856 0.6100 +vn -0.1306 0.9914 0.0000 +vn 0.6287 0.4824 0.6100 +vn 0.7934 0.6088 0.0000 +vn 0.9239 -0.3827 0.0000 +vn 0.7321 -0.3032 0.6100 +vn -0.1034 -0.7856 0.6100 +vn -0.1305 -0.9914 0.0000 +vn 0.7934 -0.6088 0.0000 +vn 0.6287 -0.4824 0.6100 +vn -0.7321 -0.3031 0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.6287 0.4823 0.6100 +vn -0.7934 0.6087 0.0000 +vn 0.1034 0.7856 0.6100 +vn 0.1305 0.9914 0.0000 +vn 0.9239 0.3827 0.0000 +vn 0.7322 0.3031 0.6100 +vn 0.4824 -0.6287 0.6100 +vn 0.6088 -0.7934 0.0000 +vn 0.9914 0.1305 0.0000 +vn 0.7856 0.1033 0.6100 +vn -0.3034 -0.7320 0.6100 +vn -0.3827 -0.9239 0.0000 +vn -0.7856 -0.1034 0.6100 +vn -0.9914 -0.1305 0.0000 +vn -0.4824 0.6287 0.6100 +vn -0.6087 0.7934 0.0000 +vn 0.3827 0.9239 0.0000 +vn 0.3032 0.7321 0.6100 +vn -0.5626 0.4617 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.6420 0.3430 -0.6857 +vn -0.6419 0.3432 0.6857 +vn -0.6966 0.2111 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.4617 0.5626 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.7244 0.0713 0.6857 +vn 0.6965 -0.2113 0.6857 +vn 0.6965 -0.2113 -0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.0957 0.9720 0.2147 +vn -0.0957 0.9720 0.2147 +vn -0.0974 0.9893 0.1087 +vn 0.0974 0.9893 0.1087 +vn -0.7244 -0.0712 -0.6857 +vn -0.7244 -0.0714 0.6857 +vn 0.2835 0.9346 0.2147 +vn 0.2886 0.9513 0.1087 +vn -0.3431 0.6419 0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.2835 0.9346 0.2147 +vn -0.2886 0.9513 0.1087 +vn 0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn 0.2113 -0.6965 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn 0.4604 0.8614 0.2147 +vn 0.4686 0.8767 0.1087 +vn -0.2114 0.6965 0.6857 +vn -0.2112 0.6966 -0.6857 +vn -0.4604 0.8614 0.2147 +vn -0.4686 0.8767 0.1087 +vn -0.6419 -0.3432 -0.6857 +vn -0.6420 -0.3431 0.6857 +vn 0.6196 0.7550 0.2147 +vn -0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn -0.6196 0.7550 0.2147 +vn -0.6306 0.7684 0.1087 +vn -0.5627 -0.4617 -0.6857 +vn -0.5627 -0.4617 0.6857 +vn 0.7550 0.6196 0.2147 +vn 0.6419 -0.3432 0.6857 +vn 0.6420 -0.3430 -0.6857 +vn 0.0713 0.7244 0.6857 +vn 0.0713 0.7244 -0.6857 +vn -0.7550 0.6196 0.2147 +vn -0.7684 0.6306 0.1087 +vn -0.0980 0.9952 0.0000 +vn 0.3431 0.6419 0.6857 +vn 0.3431 0.6419 -0.6857 +vn 0.2113 0.6965 -0.6857 +vn 0.2113 0.6965 0.6857 +vn 0.8614 0.4604 0.2147 +vn 0.8767 0.4686 0.1087 +vn -0.8614 0.4604 0.2147 +vn -0.8767 0.4686 0.1087 +vn -0.4618 -0.5626 -0.6857 +vn -0.4616 -0.5627 0.6857 +vn 0.9513 0.2886 0.1087 +vn 0.9346 0.2835 0.2147 +vn 0.4617 0.5626 0.6857 +vn 0.4617 0.5626 -0.6857 +vn -0.9346 0.2835 0.2147 +vn -0.3432 -0.6419 -0.6857 +vn -0.3430 -0.6420 0.6857 +vn 0.9893 0.0974 0.1087 +vn 0.9720 0.0957 0.2147 +vn 0.5625 0.4618 0.6857 +vn 0.5628 0.4616 -0.6857 +vn -0.9720 0.0957 0.2147 +vn -0.2112 -0.6966 -0.6857 +vn -0.2112 -0.6966 0.6857 +vn 0.9893 -0.0974 0.1087 +vn 0.9720 -0.0957 0.2147 +vn 0.6420 0.3430 0.6857 +vn 0.6419 0.3432 -0.6857 +vn -0.9720 -0.0957 0.2147 +vn -0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn 0.9513 -0.2886 0.1087 +vn 0.9346 -0.2835 0.2147 +vn 0.6965 0.2113 0.6857 +vn 0.6966 0.2112 -0.6857 +vn -0.9346 -0.2835 0.2147 +vn 0.8767 -0.4686 0.1087 +vn 0.8614 -0.4604 0.2147 +vn 0.3430 -0.6420 -0.6857 +vn 0.3432 -0.6419 0.6857 +vn -0.8614 -0.4604 0.2147 +vn 0.4616 -0.5627 -0.6857 +vn 0.4618 -0.5626 0.6857 +vn 0.7684 -0.6306 0.1087 +vn 0.7550 -0.6196 0.2147 +vn 0.7244 0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn -0.7550 -0.6196 0.2147 +vn -0.7684 -0.6306 0.1087 +vn 0.5625 -0.4618 -0.6857 +vn 0.5628 -0.4616 0.6857 +vn 0.6306 -0.7684 0.1087 +vn 0.6196 -0.7550 0.2147 +vn -0.6196 -0.7550 0.2147 +vn -0.6306 -0.7684 0.1087 +vn 0.4686 -0.8767 0.1087 +vn 0.4604 -0.8614 0.2147 +vn -0.4604 -0.8614 0.2147 +vn -0.4686 -0.8767 0.1087 +vn 0.2886 -0.9513 0.1087 +vn 0.2835 -0.9346 0.2147 +vn -0.2835 -0.9346 0.2147 +vn -0.2886 -0.9513 0.1087 +vn 0.0974 -0.9893 0.1087 +vn 0.0957 -0.9720 0.2147 +vn -0.0974 -0.9893 0.1087 +vn -0.0957 -0.9720 0.2147 +vn -0.6344 0.7730 -0.0000 +vn -0.4714 0.8819 -0.0000 +vn -0.8819 0.4714 -0.0000 +vn -0.2903 0.9569 0.0000 +vn 0.5604 0.5602 0.6100 +vn 0.7071 0.7071 -0.0000 +vn -0.2588 0.9659 -0.0000 +vn -0.2051 0.7654 0.6100 +vn 0.7654 -0.2051 0.6100 +vn 0.9659 -0.2588 0.0000 +vn -0.9659 0.2588 -0.0000 +vn -0.7654 0.2051 0.6100 +vn -0.7071 -0.7071 -0.0000 +vn -0.5604 -0.5602 0.6100 +vn 0.2588 -0.9659 0.0000 +vn 0.2051 -0.7654 0.6100 +vn 0.7924 0.0000 0.6100 +vn 0.5000 0.8660 0.0000 +vn 0.3962 0.6862 0.6100 +vn 0.3962 -0.6862 0.6100 +vn 0.5000 -0.8660 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.3962 0.6862 0.6100 +vn -0.7924 -0.0000 0.6100 +vn -0.5000 -0.8660 -0.0000 +vn -0.3961 -0.6863 0.6100 +vn 0.5602 -0.5604 0.6100 +vn 0.7071 -0.7071 0.0000 +vn 0.9659 0.2588 0.0000 +vn 0.7654 0.2051 0.6100 +vn -0.2052 -0.7654 0.6100 +vn -0.2588 -0.9659 0.0000 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 0.6100 +vn -0.7071 0.7071 -0.0000 +vn -0.5602 0.5604 0.6100 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 0.6100 +vn -0.0001 -0.7924 0.6100 +vn 0.8660 -0.5000 0.0000 +vn 0.6862 -0.3963 0.6100 +vn -0.6861 -0.3963 0.6100 +vn -0.8660 -0.5000 0.0000 +vn 0.8660 0.5000 -0.0000 +vn 0.6862 0.3962 0.6100 +vn -0.0001 0.7924 0.6100 +vn -0.8660 0.5000 -0.0000 +vn -0.6862 0.3962 0.6100 +vn -0.2051 -0.7654 0.6100 +vn -0.0000 0.7924 0.6100 +vn 0.6862 0.3963 0.6100 +vn -0.6862 -0.3962 0.6100 +vn 0.0000 -0.7924 0.6100 +vn 0.6863 -0.3961 0.6100 +vn -0.7730 0.6344 -0.0000 +vn -0.4711 0.1079 0.8754 +vn -0.6338 0.0947 0.7677 +vn -0.9560 0.0360 0.2911 +vn -0.9948 0.0126 0.1013 +vn -0.0980 0.1217 0.9877 +vn -0.2902 0.1170 0.9498 +vn -0.8809 0.0581 0.4698 +vn -0.7721 0.0779 0.6307 +vn -0.0979 0.2889 0.9523 +vn -0.4706 0.2561 0.8444 +vn -0.6332 0.2247 0.7407 +vn -0.9556 0.0855 0.2819 +vn -0.9946 0.0301 0.0991 +vn -0.2898 0.2778 0.9159 +vn -0.8803 0.1377 0.4540 +vn -0.6332 0.3649 0.6826 +vn -0.7715 0.2999 0.5611 +vn -0.7715 0.1847 0.6088 +vn -0.0979 0.4691 0.8777 +vn -0.2898 0.4512 0.8441 +vn -0.8803 0.2236 0.4184 +vn -0.4706 0.4159 0.7782 +vn -0.9556 0.1389 0.2598 +vn -0.9946 0.0488 0.0913 +vn -0.6332 0.4910 0.5983 +vn -0.7715 0.4036 0.4918 +vn -0.8803 0.3010 0.3667 +vn -0.9556 0.1869 0.2277 +vn -0.6332 0.5983 0.4910 +vn -0.7715 0.4918 0.4036 +vn -0.0979 0.6314 0.7693 +vn -0.2898 0.6072 0.7398 +vn -0.4706 0.5598 0.6821 +vn -0.9946 0.0657 0.0801 +vn -0.2898 0.7398 0.6072 +vn -0.4706 0.6821 0.5598 +vn -0.8803 0.3667 0.3010 +vn -0.9556 0.2277 0.1869 +vn -0.6332 0.6826 0.3649 +vn -0.7715 0.5611 0.2999 +vn -0.0979 0.7693 0.6314 +vn -0.9946 0.0801 0.0657 +vn -0.9556 0.2598 0.1389 +vn -0.9946 0.0913 0.0488 +vn -0.2898 0.8441 0.4512 +vn -0.4706 0.7782 0.4159 +vn -0.8803 0.4184 0.2236 +vn -0.6332 0.7407 0.2247 +vn -0.7715 0.6088 0.1847 +vn -0.0979 0.8777 0.4691 +vn -0.0979 0.9523 0.2889 +vn -0.4706 0.8444 0.2561 +vn -0.9556 0.2819 0.0855 +vn -0.9946 0.0991 0.0301 +vn -0.2898 0.9159 0.2778 +vn -0.8803 0.4540 0.1377 +vn -0.6332 0.7703 0.0759 +vn -0.7715 0.6332 0.0624 +vn -0.8803 0.4721 0.0465 +vn -0.0979 0.9904 0.0975 +vn -0.4706 0.8781 0.0865 +vn -0.9556 0.2932 0.0289 +vn -0.9946 0.1031 0.0101 +vn -0.2898 0.9525 0.0938 +g Pipe_Cylinder.002_None.001_Pipe_Cylinder.002_None.001_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 +f 7/7/1 8/8/1 9/9/1 10/10/1 11/11/1 12/12/1 +f 13/13/1 14/14/1 15/15/1 16/16/1 17/17/1 18/18/1 +f 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 +f 25/25/1 26/26/1 27/27/1 28/28/1 29/29/1 30/30/1 +f 31/31/1 32/32/1 33/33/1 34/34/1 35/35/1 36/36/1 +f 37/37/1 38/38/1 39/39/1 40/40/1 41/41/1 42/42/1 +f 43/43/1 44/44/1 45/45/1 46/46/1 47/47/1 48/48/1 +f 49/49/1 50/50/1 51/51/1 52/52/1 53/53/1 54/54/1 55/55/1 56/56/1 57/57/1 58/58/1 59/59/1 60/60/1 61/61/1 62/62/1 63/63/1 64/64/1 65/65/1 66/66/1 67/67/1 68/68/1 69/69/1 70/70/1 71/71/1 72/72/1 73/73/1 74/74/1 75/75/1 76/76/1 77/77/1 78/78/1 79/79/1 80/80/1 +f 81/81/2 82/82/2 83/83/2 84/84/2 85/85/2 86/86/2 87/87/2 88/88/2 89/89/2 90/90/2 91/91/2 92/92/2 93/93/2 94/94/2 95/95/2 96/96/2 97/97/2 98/98/2 99/99/2 100/100/2 101/101/2 102/102/2 103/103/2 104/104/2 105/105/2 106/106/2 107/107/2 108/108/2 109/109/2 110/110/2 111/111/2 112/112/2 +f 113/113/1 114/114/1 115/115/1 116/116/1 117/117/1 118/118/1 +f 119/119/1 120/120/1 121/121/1 122/122/1 123/123/1 124/124/1 +f 125/125/1 126/126/1 127/127/1 128/128/1 129/129/1 130/130/1 +f 131/131/1 132/132/1 133/133/1 134/134/1 135/135/1 136/136/1 +f 137/137/1 138/138/1 139/139/1 140/140/1 141/141/1 142/142/1 +f 143/143/1 144/144/1 145/145/1 146/146/1 147/147/1 148/148/1 +f 149/149/1 150/150/1 151/151/1 152/152/1 153/153/1 154/154/1 +f 155/155/1 156/156/1 157/157/1 158/158/1 159/159/1 160/160/1 +f 161/161/3 162/162/3 163/163/3 164/164/3 165/165/3 166/166/3 +f 167/167/3 168/168/3 169/169/3 170/170/3 171/171/3 172/172/3 +f 173/173/3 174/174/3 175/175/3 176/176/3 177/177/3 178/178/3 +f 179/179/3 180/180/3 181/181/3 182/182/3 183/183/3 184/184/3 +f 185/185/3 186/186/3 187/187/3 188/188/3 189/189/3 190/190/3 +f 191/191/3 192/192/3 193/193/3 194/194/3 195/195/3 196/196/3 +f 197/197/3 198/198/3 199/199/3 200/200/3 201/201/3 202/202/3 +f 203/203/3 204/204/3 205/205/3 206/206/3 207/207/3 208/208/3 +f 209/209/3 210/210/3 211/211/3 212/212/3 213/213/3 214/214/3 215/215/3 216/216/3 217/217/3 218/218/3 219/219/3 220/220/3 221/221/3 222/222/3 223/223/3 224/224/3 225/225/3 226/226/3 227/227/3 228/228/3 229/229/3 230/230/3 231/231/3 232/232/3 233/233/3 234/234/3 235/235/3 236/236/3 237/237/3 238/238/3 239/239/3 240/240/3 +f 241/241/4 242/242/4 243/243/4 244/244/4 245/245/4 246/246/4 247/247/4 248/248/4 249/249/4 250/250/4 251/251/4 252/252/4 253/253/4 254/254/4 255/255/4 256/256/4 257/257/4 258/258/4 259/259/4 260/260/4 261/261/4 262/262/4 263/263/4 264/264/4 265/265/4 266/266/4 267/267/4 268/268/4 269/269/4 270/270/4 271/271/4 272/272/4 +f 273/273/3 274/274/3 275/275/3 276/276/3 277/277/3 278/278/3 +f 279/279/3 280/280/3 281/281/3 282/282/3 283/283/3 284/284/3 +f 285/285/3 286/286/3 287/287/3 288/288/3 289/289/3 290/290/3 +f 291/291/3 292/292/3 293/293/3 294/294/3 295/295/3 296/296/3 +f 297/297/3 298/298/3 299/299/3 300/300/3 301/301/3 302/302/3 +f 303/303/3 304/304/3 305/305/3 306/306/3 307/307/3 308/308/3 +f 309/309/3 310/310/3 311/311/3 312/312/3 313/313/3 314/314/3 +f 315/315/3 316/316/3 317/317/3 318/318/3 319/319/3 320/320/3 +f 321/321/5 322/322/5 323/323/5 324/324/5 325/325/5 326/326/5 +f 327/327/5 328/328/5 329/329/5 330/330/5 331/331/5 332/332/5 +f 333/333/5 334/334/5 335/335/5 336/336/5 337/337/5 338/338/5 +f 339/339/5 340/340/5 341/341/5 342/342/5 343/343/5 344/344/5 +f 345/345/5 346/346/5 347/347/5 348/348/5 349/349/5 350/350/5 +f 351/351/5 352/352/5 353/353/5 354/354/5 355/355/5 356/356/5 357/357/5 358/358/5 359/359/5 360/360/5 361/361/5 362/362/5 363/363/5 364/364/5 365/365/5 366/366/5 367/367/5 368/368/5 369/369/5 370/370/5 371/371/5 372/372/5 373/373/5 374/374/5 375/375/5 376/376/5 377/377/5 378/378/5 379/379/5 380/380/5 381/381/5 382/382/5 +f 383/383/6 384/384/6 385/385/6 386/386/6 387/387/6 388/388/6 389/389/6 390/390/6 391/391/6 392/392/6 393/393/6 394/394/6 395/395/6 396/396/6 397/397/6 398/398/6 399/399/6 400/400/6 401/401/6 402/402/6 403/403/6 404/404/6 405/405/6 406/406/6 407/407/6 408/408/6 409/409/6 410/410/6 411/411/6 412/412/6 413/413/6 414/414/6 +f 415/415/5 416/416/5 417/417/5 418/418/5 419/419/5 420/420/5 +f 421/421/5 422/422/5 423/423/5 424/424/5 425/425/5 426/426/5 +f 427/427/5 428/428/5 429/429/5 430/430/5 431/431/5 432/432/5 +f 433/433/5 434/434/5 435/435/5 436/436/5 437/437/5 438/438/5 +f 439/439/5 440/440/5 441/441/5 442/442/5 443/443/5 444/444/5 +f 445/445/5 446/446/5 447/447/5 448/448/5 449/449/5 450/450/5 +s 1 +f 79/451/7 102/452/8 101/453/9 80/454/10 +f 78/455/11 103/456/12 102/452/8 79/451/7 +f 77/457/13 104/458/14 103/456/12 78/455/11 +f 76/459/15 105/460/16 104/458/14 77/457/13 +f 75/461/17 106/462/18 105/460/16 76/459/15 +f 74/463/19 107/464/20 106/462/18 75/461/17 +f 73/465/21 108/466/22 107/464/20 74/463/19 +f 72/467/23 109/468/24 108/466/22 73/465/21 +f 71/469/25 110/470/26 109/468/24 72/467/23 +f 70/471/27 111/472/28 110/470/26 71/469/25 +f 69/473/29 112/474/30 111/472/28 70/471/27 +f 68/475/31 81/476/32 112/474/30 69/473/29 +f 67/477/33 82/478/34 81/476/32 68/475/31 +f 66/479/35 83/480/36 82/481/34 67/477/33 +f 65/482/37 84/483/38 83/480/36 66/479/35 +f 64/484/39 85/485/40 84/483/38 65/482/37 +f 63/486/41 86/487/42 85/488/40 64/489/39 +f 62/490/43 87/491/44 86/487/42 63/486/41 +f 61/492/45 88/493/46 87/491/44 62/490/43 +f 60/494/47 89/495/48 88/493/46 61/492/45 +f 58/496/49 91/497/50 90/498/51 59/499/52 +f 59/499/52 90/498/51 89/495/48 60/494/47 +f 57/500/53 92/501/54 91/497/50 58/496/49 +f 56/502/55 93/503/56 92/501/54 57/500/53 +f 55/504/57 94/505/58 93/503/56 56/502/55 +f 54/506/59 95/507/60 94/505/58 55/504/57 +f 52/508/61 97/509/62 96/510/63 53/511/64 +f 53/511/64 96/510/63 95/507/60 54/506/59 +f 51/512/65 98/513/66 97/509/62 52/508/61 +f 50/514/67 99/515/68 98/513/66 51/512/65 +f 451/516/69 452/517/70 453/518/71 454/519/72 +f 455/520/73 454/519/72 453/518/71 456/521/74 +f 457/522/75 455/520/73 456/521/74 458/523/76 +f 459/524/77 457/522/75 458/523/76 460/525/78 +f 461/526/79 459/524/77 460/525/78 462/527/80 +f 463/528/81 461/526/79 462/527/80 464/529/82 +f 463/528/81 464/529/82 465/530/83 466/531/84 +f 467/532/85 466/531/84 465/530/83 468/533/86 +f 469/534/87 467/532/85 468/533/86 470/535/88 +f 471/536/89 469/534/87 470/535/88 472/537/90 +f 471/536/89 472/537/90 473/538/91 474/539/92 +f 474/539/92 473/538/91 475/540/93 476/541/94 +f 477/542/95 478/543/96 479/544/97 480/545/98 +f 476/541/94 475/540/93 478/543/96 477/542/95 +f 480/545/98 479/544/97 481/546/99 482/547/100 +f 483/548/101 482/547/100 481/546/99 484/549/102 +f 483/548/101 484/549/102 485/550/103 486/551/104 +f 487/552/105 486/551/104 485/550/103 488/553/106 +f 487/554/105 488/555/106 489/556/107 490/557/108 +f 491/558/109 490/557/108 489/556/107 492/559/110 +f 491/558/109 492/559/110 493/560/111 494/561/112 +f 494/561/112 493/560/111 495/562/113 496/563/114 +f 496/563/114 495/562/113 497/564/115 498/565/116 +f 498/565/116 497/564/115 499/566/117 500/567/118 +f 500/567/118 499/566/117 501/568/119 502/569/120 +f 502/569/120 501/568/119 503/570/121 504/571/122 +f 505/572/123 506/573/124 507/574/125 508/575/126 +f 506/573/124 504/571/122 503/570/121 507/574/125 +f 509/576/127 510/577/128 511/578/129 512/579/130 +f 505/572/123 508/575/126 511/578/129 510/577/128 +f 513/580/131 509/576/127 512/579/130 514/581/132 +f 513/580/131 514/581/132 452/517/70 451/516/69 +f 80/454/10 101/453/9 100/582/133 49/583/134 +f 1/584/135 515/585/136 516/586/137 2/587/138 +f 6/588/139 517/589/140 515/585/136 1/584/135 +f 2/587/138 516/586/137 518/590/141 3/591/142 +f 3/591/142 518/590/141 519/592/143 4/593/144 +f 4/594/144 519/595/143 520/596/145 5/597/146 +f 5/597/146 520/596/145 517/589/140 6/588/139 +f 7/598/147 521/599/148 522/600/149 8/601/150 +f 12/602/151 523/603/152 521/599/148 7/598/147 +f 8/601/150 522/600/149 524/604/153 9/605/154 +f 9/605/154 524/604/153 525/606/155 10/607/156 +f 10/608/156 525/609/155 526/610/157 11/611/158 +f 11/611/158 526/610/157 523/603/152 12/602/151 +f 13/612/159 527/613/160 528/614/161 14/615/162 +f 18/616/163 529/617/164 527/613/160 13/612/159 +f 14/615/162 528/614/161 530/618/165 15/619/166 +f 15/619/166 530/618/165 531/620/167 16/621/168 +f 16/622/168 531/623/167 532/624/169 17/625/170 +f 17/625/170 532/624/169 529/617/164 18/616/163 +f 19/626/171 533/627/172 534/628/173 20/629/174 +f 24/630/175 535/631/176 533/627/172 19/626/171 +f 20/629/174 534/628/173 536/632/177 21/633/178 +f 21/633/178 536/632/177 537/634/179 22/635/180 +f 22/636/180 537/637/179 538/638/181 23/639/182 +f 23/639/182 538/638/181 535/631/176 24/630/175 +f 25/640/183 539/641/143 540/642/145 26/643/146 +f 30/644/184 541/645/141 539/641/143 25/640/183 +f 26/643/146 540/642/145 542/646/185 27/647/186 +f 27/647/186 542/646/185 543/648/136 28/649/187 +f 28/650/187 543/651/136 544/652/137 29/653/138 +f 29/653/138 544/652/137 541/645/141 30/644/184 +f 31/654/188 545/655/155 546/656/189 32/657/190 +f 36/658/154 547/659/153 545/655/155 31/654/188 +f 32/657/190 546/656/189 548/660/191 33/661/151 +f 33/661/151 548/660/191 549/662/148 34/663/192 +f 34/664/192 549/665/148 550/666/149 35/667/193 +f 35/667/193 550/666/149 547/659/153 36/658/154 +f 37/668/168 551/669/167 552/670/194 38/671/170 +f 42/672/195 553/673/165 551/669/167 37/668/168 +f 38/671/170 552/670/194 554/674/196 39/675/197 +f 39/675/197 554/674/196 555/676/160 40/677/198 +f 40/678/198 555/679/160 556/680/161 41/681/162 +f 41/681/162 556/680/161 553/673/165 42/672/195 +f 43/682/199 557/683/179 558/684/181 44/685/200 +f 48/686/178 559/687/177 557/683/179 43/682/199 +f 44/685/200 558/684/181 560/688/176 45/689/175 +f 45/689/175 560/688/176 561/690/172 46/691/171 +f 46/692/171 561/693/172 562/694/173 47/695/201 +f 47/695/201 562/694/173 559/687/177 48/686/178 +f 563/696/202 478/543/96 475/540/93 564/697/203 +f 565/698/204 479/544/97 478/543/96 563/696/202 +f 565/698/204 566/699/205 481/546/99 479/544/97 +f 567/700/206 453/518/71 452/517/70 568/701/207 +f 564/697/203 475/540/93 473/538/91 569/702/208 +f 570/703/209 571/704/210 464/529/82 462/527/80 +f 572/705/211 573/706/212 468/533/86 465/530/83 +f 574/707/213 460/525/78 458/523/76 575/708/214 576/709/214 +f 575/708/214 458/523/76 456/521/74 577/710/215 578/711/3 +f 514/581/132 579/712/216 568/701/207 452/517/70 +f 456/521/74 453/518/71 567/700/206 577/710/215 +f 571/704/210 572/705/211 465/530/83 464/529/82 +f 49/583/134 100/582/133 99/515/68 50/514/67 +f 580/713/217 579/712/216 514/581/132 512/579/130 +f 573/706/212 581/714/218 470/535/88 468/533/86 +f 581/714/218 582/715/219 583/716/220 472/537/90 470/535/88 +f 569/702/208 473/538/91 472/537/90 583/716/220 584/717/221 +f 566/699/205 585/718/222 484/549/102 481/546/99 +f 585/718/222 586/719/223 485/550/103 484/549/102 +f 586/719/223 587/720/224 488/553/106 485/550/103 +f 587/721/224 588/722/225 489/556/107 488/555/106 +f 588/722/225 589/723/226 492/559/110 489/556/107 +f 589/723/226 590/724/227 493/560/111 492/559/110 +f 590/724/227 591/725/228 495/562/113 493/560/111 +f 591/725/228 592/726/229 593/727/230 497/564/115 495/562/113 +f 593/727/230 594/728/231 499/566/117 497/564/115 +f 594/728/231 595/729/232 501/568/119 499/566/117 +f 595/729/232 596/730/233 503/570/121 501/568/119 +f 597/731/234 598/732/235 508/575/126 507/574/125 +f 596/730/233 597/731/234 507/574/125 503/570/121 +f 599/733/236 580/713/217 512/579/130 511/578/129 +f 598/732/235 599/733/236 511/578/129 508/575/126 +f 113/734/237 600/735/238 601/736/239 114/737/240 +f 118/738/241 602/739/242 600/735/238 113/734/237 +f 114/737/240 601/736/239 603/740/243 115/741/244 +f 115/741/244 603/740/243 604/742/245 116/743/246 +f 116/744/246 604/745/245 605/746/247 117/747/248 +f 117/747/248 605/746/247 602/739/242 118/738/241 +f 119/748/249 606/749/3 607/750/250 120/751/251 +f 124/752/252 608/753/253 606/749/3 119/748/249 +f 120/751/251 607/750/250 609/754/254 121/755/255 +f 121/755/255 609/754/254 610/756/4 122/757/256 +f 122/758/256 610/759/4 611/760/257 123/761/258 +f 123/761/258 611/760/257 608/753/253 124/752/252 +f 125/762/259 612/763/260 613/764/261 126/765/262 +f 130/766/263 614/767/264 612/763/260 125/762/259 +f 126/765/262 613/764/261 615/768/265 127/769/266 +f 127/769/266 615/768/265 616/770/267 128/771/268 +f 128/772/268 616/773/267 617/774/269 129/775/270 +f 129/775/270 617/774/269 614/767/264 130/766/263 +f 131/776/271 618/777/6 619/778/272 132/779/273 +f 136/780/274 620/781/275 618/777/6 131/776/271 +f 132/779/273 619/778/272 621/782/276 133/783/277 +f 133/783/277 621/782/276 622/784/5 134/785/278 +f 134/786/278 622/787/5 623/788/279 135/789/280 +f 135/789/280 623/788/279 620/781/275 136/780/274 +f 137/790/246 624/791/245 625/792/247 138/793/281 +f 142/794/244 626/795/243 624/791/245 137/790/246 +f 138/793/281 625/792/247 627/796/242 139/797/282 +f 139/797/282 627/796/242 628/798/238 140/799/283 +f 140/800/283 628/801/238 629/802/239 141/803/284 +f 141/803/284 629/802/239 626/795/243 142/794/244 +f 143/804/256 630/805/4 631/806/257 144/807/258 +f 148/808/285 632/809/254 630/805/4 143/804/256 +f 144/807/258 631/806/257 633/810/253 145/811/286 +f 145/811/286 633/810/253 634/812/3 146/813/249 +f 146/814/249 634/815/3 635/816/250 147/817/287 +f 147/817/287 635/816/250 632/809/254 148/808/285 +f 149/818/288 636/819/267 637/820/269 150/821/289 +f 154/822/290 638/823/265 636/819/267 149/818/288 +f 150/821/289 637/820/269 639/824/264 151/825/291 +f 151/825/291 639/824/264 640/826/260 152/827/259 +f 152/828/259 640/829/260 641/830/261 153/831/292 +f 153/831/292 641/830/261 638/823/265 154/822/290 +f 155/832/278 642/833/5 643/834/279 156/835/293 +f 160/836/294 644/837/276 642/833/5 155/832/278 +f 156/835/293 643/834/279 645/838/275 157/839/295 +f 157/839/295 645/838/275 646/840/6 158/841/271 +f 158/842/271 646/843/6 647/844/272 159/845/296 +f 159/845/296 647/844/272 644/837/276 160/836/294 +f 570/703/209 462/527/80 460/525/78 574/707/213 +f 584/717/221 583/716/220 582/715/219 648/846/221 +f 575/708/214 578/711/3 649/847/3 576/709/214 +f 569/702/208 584/717/221 648/846/221 650/848/297 +f 651/849/298 569/850/208 650/851/297 652/852/299 653/853/300 +f 654/854/301 564/855/203 569/850/208 651/849/298 +f 655/856/302 563/857/202 564/855/203 654/854/301 +f 652/852/299 656/858/303 657/859/304 658/860/305 653/853/300 +f 659/861/306 565/862/204 563/857/202 655/856/302 +f 658/860/305 657/859/304 660/863/307 661/864/308 +f 662/865/309 663/866/310 664/867/311 665/868/312 +f 666/869/313 653/853/300 658/860/305 667/870/314 +f 668/871/315 651/849/298 653/853/300 666/869/313 +f 669/872/316 654/854/301 651/849/298 668/871/315 +f 580/873/217 670/874/317 671/875/318 579/876/216 +f 667/870/314 658/860/305 661/864/308 672/877/319 +f 673/878/320 655/856/302 654/854/301 669/872/316 +f 585/879/222 566/880/205 674/881/321 675/882/322 +f 676/883/323 672/877/319 661/864/308 664/867/311 +f 677/884/324 659/861/306 655/856/302 673/878/320 +f 586/885/223 585/879/222 675/882/322 678/886/325 +f 679/887/326 680/888/327 681/889/328 682/890/329 +f 683/891/330 676/883/323 664/867/311 663/866/310 +f 237/892/331 242/893/332 241/894/333 238/895/334 +f 240/896/335 271/897/336 270/898/337 209/899/338 +f 684/900/339 674/881/321 659/861/306 677/884/324 +f 236/901/340 243/902/341 242/893/332 237/892/331 +f 685/903/342 683/891/330 663/866/310 686/904/343 +f 209/899/338 270/898/337 269/905/344 210/906/345 +f 687/907/346 675/882/322 674/881/321 684/900/339 +f 235/908/347 244/909/348 243/902/341 236/901/340 +f 588/910/225 587/911/224 688/912/349 689/913/350 +f 690/914/351 691/915/352 692/916/353 693/917/354 694/918/355 +f 695/919/356 685/903/342 686/904/343 692/916/353 +f 234/920/357 245/921/358 244/909/348 235/908/347 +f 696/922/359 678/886/325 675/882/322 687/907/346 +f 232/923/360 247/924/361 246/925/362 233/926/363 +f 697/927/364 695/919/356 692/916/353 691/915/352 +f 210/906/345 269/905/344 268/928/365 211/929/366 +f 698/930/367 688/931/349 678/886/325 696/922/359 +f 231/932/368 248/933/369 247/924/361 232/923/360 +f 590/934/227 589/935/226 699/936/370 700/937/371 +f 681/938/328 680/939/327 701/940/372 702/941/373 +f 703/942/374 697/927/364 691/915/352 702/941/373 +f 211/929/366 268/928/365 267/943/375 212/944/376 +f 704/945/377 689/913/350 688/912/349 698/946/367 +f 230/947/378 249/948/379 248/933/369 231/932/368 +f 591/949/228 590/934/227 700/937/371 705/950/380 +f 706/951/381 701/940/372 680/939/327 707/952/382 +f 708/953/383 703/942/374 702/941/373 701/940/372 +f 212/944/376 267/943/375 266/954/384 213/955/385 +f 709/956/386 699/936/370 689/913/350 704/945/377 +f 229/957/387 250/958/388 249/948/379 230/947/378 +f 710/959/389 708/953/383 701/940/372 706/951/381 +f 213/955/385 266/954/384 265/960/390 214/961/391 +f 711/962/392 700/937/371 699/936/370 709/956/386 +f 228/963/393 251/964/394 250/958/388 229/957/387 +f 712/965/395 710/959/389 706/951/381 713/966/396 +f 215/967/397 264/968/398 263/969/399 216/970/400 +f 711/962/392 714/971/401 705/950/380 700/937/371 +f 214/961/391 265/960/390 264/972/398 215/973/397 +f 715/974/402 716/975/403 717/976/404 718/977/405 +f 719/978/406 720/979/407 721/980/408 722/981/409 +f 723/982/410 712/965/395 713/966/396 724/983/411 +f 216/970/400 263/969/399 262/984/412 217/985/413 +f 238/895/334 241/894/333 272/986/414 239/987/415 +f 725/988/416 726/989/417 705/950/380 714/971/401 +f 227/990/418 252/991/419 251/964/394 228/963/393 +f 727/992/420 715/974/402 718/977/405 728/993/421 +f 721/980/408 720/979/407 727/992/420 728/993/421 +f 729/994/422 723/982/410 724/983/411 730/995/423 +f 217/985/413 262/984/412 261/996/424 218/997/425 +f 725/988/416 731/998/426 717/976/404 726/989/417 +f 226/999/427 253/1000/428 252/991/419 227/990/418 +f 732/1001/429 729/994/422 730/995/423 722/981/409 +f 218/997/425 261/1002/424 260/1003/430 219/1004/431 +f 731/998/426 733/1005/432 718/977/405 717/976/404 +f 225/1006/433 254/1007/434 253/1000/428 226/999/427 +f 233/926/363 246/925/362 245/921/358 234/920/357 +f 734/1008/435 732/1001/429 722/981/409 721/980/408 +f 219/1004/431 260/1003/430 259/1009/436 220/1010/437 +f 733/1005/432 735/1011/438 728/993/421 718/977/405 +f 224/1012/439 255/1013/440 254/1007/434 225/1006/433 +f 735/1011/438 734/1008/435 721/980/408 728/993/421 +f 239/987/415 272/986/414 271/897/336 240/896/335 +f 223/1014/441 256/1015/442 255/1013/440 224/1012/439 +f 220/1010/437 259/1009/436 258/1016/443 221/1017/444 +f 222/1018/445 257/1019/446 256/1015/442 223/1014/441 +f 221/1017/444 258/1016/443 257/1019/446 222/1018/445 +f 161/1020/447 736/1021/448 737/1022/449 162/1023/450 +f 166/1024/451 738/1025/452 736/1021/448 161/1020/447 +f 162/1023/450 737/1022/449 739/1026/453 163/1027/454 +f 163/1027/454 739/1026/453 740/1028/455 164/1029/456 +f 164/1030/456 740/1031/455 741/1032/457 165/1033/458 +f 165/1033/458 741/1032/457 738/1025/452 166/1024/451 +f 167/1034/459 742/1035/460 743/1036/461 168/1037/462 +f 172/1038/463 744/1039/464 742/1035/460 167/1034/459 +f 168/1037/462 743/1036/461 745/1040/465 169/1041/466 +f 169/1041/466 745/1040/465 746/1042/467 170/1043/468 +f 170/1044/468 746/1045/467 747/1046/469 171/1047/470 +f 171/1047/470 747/1046/469 744/1039/464 172/1038/463 +f 173/1048/471 748/1049/472 749/1050/473 174/1051/474 +f 178/1052/475 750/1053/476 748/1049/472 173/1048/471 +f 174/1051/474 749/1050/473 751/1054/477 175/1055/478 +f 175/1055/478 751/1054/477 752/1056/479 176/1057/480 +f 176/1058/480 752/1059/479 753/1060/481 177/1061/482 +f 177/1061/482 753/1060/481 750/1053/476 178/1052/475 +f 179/1062/483 754/1063/484 755/1064/485 180/1065/486 +f 184/1066/487 756/1067/488 754/1063/484 179/1062/483 +f 180/1065/486 755/1064/485 757/1068/489 181/1069/490 +f 181/1069/490 757/1068/489 758/1070/491 182/1071/492 +f 182/1072/492 758/1073/491 759/1074/493 183/1075/494 +f 183/1075/494 759/1074/493 756/1067/488 184/1066/487 +f 185/1076/495 760/1077/455 761/1078/496 186/1079/497 +f 190/1080/454 762/1081/453 760/1077/455 185/1076/495 +f 186/1079/497 761/1078/496 763/1082/498 187/1083/451 +f 187/1083/451 763/1082/498 764/1084/448 188/1085/447 +f 188/1086/447 764/1087/448 765/1088/449 189/1089/450 +f 189/1089/450 765/1088/449 762/1081/453 190/1080/454 +f 191/1090/499 766/1091/467 767/1092/469 192/1093/500 +f 196/1094/501 768/1095/502 766/1091/467 191/1090/499 +f 192/1093/500 767/1092/469 769/1096/503 193/1097/504 +f 193/1097/504 769/1096/503 770/1098/460 194/1099/505 +f 194/1100/505 770/1101/460 771/1102/461 195/1103/506 +f 195/1103/506 771/1102/461 768/1095/502 196/1094/501 +f 197/1104/507 772/1105/479 773/1106/508 198/1107/509 +f 202/1108/510 774/1109/511 772/1105/479 197/1104/507 +f 198/1107/509 773/1106/508 775/1110/512 199/1111/513 +f 199/1111/513 775/1110/512 776/1112/472 200/1113/514 +f 200/1114/514 776/1115/472 777/1116/515 201/1117/516 +f 201/1117/516 777/1116/515 774/1109/511 202/1108/510 +f 203/1118/517 778/1119/491 779/1120/493 204/1121/518 +f 208/1122/490 780/1123/519 778/1119/491 203/1118/517 +f 204/1121/518 779/1120/493 781/1124/520 205/1125/521 +f 205/1125/521 781/1124/520 782/1126/522 206/1127/483 +f 206/1128/483 782/1129/522 783/1130/523 207/1131/524 +f 207/1131/524 783/1130/523 780/1123/519 208/1122/490 +f 648/846/221 656/858/303 652/852/299 650/851/297 +f 784/1132/1 785/1133/1 681/938/328 786/1134/1 +f 661/864/308 660/863/307 665/868/312 664/867/311 +f 787/1135/525 686/904/343 663/866/310 662/865/309 +f 681/938/328 702/941/373 691/915/352 690/914/351 786/1134/1 +f 788/1136/526 789/1137/527 724/983/411 713/966/396 +f 706/951/381 707/952/382 788/1136/526 713/966/396 +f 587/1138/224 586/885/223 678/886/325 688/931/349 +f 589/935/226 588/910/225 689/913/350 699/936/370 +f 790/1139/528 592/1140/229 591/949/228 705/950/380 726/989/417 +f 789/1137/527 791/1141/529 730/995/423 724/983/411 +f 716/975/403 790/1139/528 726/989/417 717/976/404 +f 791/1141/529 719/978/406 722/981/409 730/995/423 +f 273/1142/530 792/1143/531 793/1144/532 274/1145/533 +f 278/1146/534 794/1147/535 792/1143/531 273/1142/530 +f 274/1145/533 793/1144/532 795/1148/536 275/1149/537 +f 275/1149/537 795/1148/536 796/1150/538 276/1151/539 +f 276/1152/539 796/1153/538 797/1154/540 277/1155/541 +f 277/1155/541 797/1154/540 794/1147/535 278/1146/534 +f 279/1156/542 798/1157/2 799/1158/543 280/1159/544 +f 284/1160/545 800/1161/546 798/1157/2 279/1156/542 +f 280/1159/544 799/1158/543 801/1162/547 281/1163/548 +f 281/1163/548 801/1162/547 802/1164/1 282/1165/549 +f 282/1166/549 802/1167/1 803/1168/550 283/1169/551 +f 283/1169/551 803/1168/550 800/1161/546 284/1160/545 +f 285/1170/552 804/1171/553 805/1172/554 286/1173/555 +f 290/1174/556 806/1175/557 804/1171/553 285/1170/552 +f 286/1173/555 805/1172/554 807/1176/558 287/1177/559 +f 287/1177/559 807/1176/558 808/1178/560 288/1179/561 +f 288/1180/561 808/1181/560 809/1182/562 289/1183/563 +f 289/1183/563 809/1182/562 806/1175/557 290/1174/556 +f 291/1184/564 810/1185/5 811/1186/565 292/1187/566 +f 296/1188/567 812/1189/568 810/1185/5 291/1184/564 +f 292/1187/566 811/1186/565 813/1190/569 293/1191/570 +f 293/1191/570 813/1190/569 814/1192/6 294/1193/571 +f 294/1194/571 814/1195/6 815/1196/572 295/1197/573 +f 295/1197/573 815/1196/572 812/1189/568 296/1188/567 +f 297/1198/539 816/1199/538 817/1200/540 298/1201/574 +f 302/1202/575 818/1203/536 816/1199/538 297/1198/539 +f 298/1201/574 817/1200/540 819/1204/535 299/1205/576 +f 299/1205/576 819/1204/535 820/1206/531 300/1207/530 +f 300/1208/530 820/1209/531 821/1210/532 301/1211/577 +f 301/1211/577 821/1210/532 818/1203/536 302/1202/575 +f 303/1212/578 822/1213/1 823/1214/550 304/1215/551 +f 308/1216/579 824/1217/547 822/1213/1 303/1212/578 +f 304/1215/551 823/1214/550 825/1218/546 305/1219/580 +f 305/1219/580 825/1218/546 826/1220/2 306/1221/581 +f 306/1222/581 826/1223/2 827/1224/543 307/1225/544 +f 307/1225/544 827/1224/543 824/1217/547 308/1216/579 +f 309/1226/561 828/1227/560 829/1228/562 310/1229/582 +f 314/1230/583 830/1231/558 828/1227/560 309/1226/561 +f 310/1229/582 829/1228/562 831/1232/557 311/1233/584 +f 311/1233/584 831/1232/557 832/1234/553 312/1235/552 +f 312/1236/552 832/1237/553 833/1238/554 313/1239/585 +f 313/1239/585 833/1238/554 830/1231/558 314/1230/583 +f 315/1240/586 834/1241/6 835/1242/572 316/1243/587 +f 320/1244/588 836/1245/569 834/1241/6 315/1240/586 +f 316/1243/587 835/1242/572 837/1246/568 317/1247/589 +f 317/1247/589 837/1246/568 838/1248/5 318/1249/590 +f 318/1250/590 838/1251/5 839/1252/565 319/1253/566 +f 319/1253/566 839/1252/565 836/1245/569 320/1244/588 +f 694/918/355 784/1132/1 786/1134/1 690/914/351 +f 840/1254/591 841/1255/592 842/1256/593 843/1257/594 844/1258/594 +f 565/862/204 659/861/306 674/881/321 566/880/205 +f 845/1259/595 707/1260/382 680/888/327 679/887/326 +f 693/917/354 692/916/353 686/904/343 787/1135/525 +f 784/1132/1 844/1258/594 843/1257/594 785/1261/1 +f 325/1262/596 846/1263/597 847/1264/598 326/1265/599 +f 324/1266/600 848/1267/601 846/1263/597 325/1262/596 +f 323/1268/602 849/1269/603 848/1270/601 324/1271/600 +f 322/1272/604 850/1273/605 849/1269/603 323/1268/602 +f 326/1265/599 847/1264/598 851/1274/606 321/1275/607 +f 321/1275/607 851/1274/606 850/1273/605 322/1272/604 +f 331/1276/608 852/1277/605 853/1278/609 332/1279/610 +f 330/1280/607 854/1281/606 852/1277/605 331/1276/608 +f 329/1282/611 855/1283/612 854/1284/606 330/1285/607 +f 328/1286/613 856/1287/614 855/1283/612 329/1282/611 +f 332/1279/610 853/1278/609 857/1288/615 327/1289/616 +f 327/1289/616 857/1288/615 856/1287/614 328/1286/613 +f 337/1290/617 858/1291/618 859/1292/619 338/1293/620 +f 336/1294/621 860/1295/622 858/1291/618 337/1290/617 +f 335/1296/623 861/1297/624 860/1298/622 336/1299/621 +f 334/1300/625 862/1301/626 861/1297/624 335/1296/623 +f 338/1293/620 859/1292/619 863/1302/627 333/1303/628 +f 333/1303/628 863/1302/627 862/1301/626 334/1300/625 +f 343/1304/629 864/1305/630 865/1306/631 344/1307/632 +f 342/1308/633 866/1309/634 864/1305/630 343/1304/629 +f 341/1310/635 867/1311/636 866/1312/634 342/1313/633 +f 340/1314/637 868/1315/638 867/1311/636 341/1310/635 +f 344/1307/632 865/1306/631 869/1316/639 339/1317/640 +f 339/1317/640 869/1316/639 868/1315/638 340/1314/637 +f 349/1318/641 870/1319/642 871/1320/643 350/1321/644 +f 348/1322/645 872/1323/646 870/1319/642 349/1318/641 +f 347/1324/647 873/1325/648 872/1326/646 348/1327/645 +f 346/1328/649 874/1329/650 873/1325/648 347/1324/647 +f 350/1321/644 871/1320/643 875/1330/651 345/1331/652 +f 345/1331/652 875/1330/651 874/1329/650 346/1328/649 +f 363/1332/653 400/1333/654 399/1334/655 364/1335/656 +f 364/1335/656 399/1334/655 398/1336/657 365/1337/658 +f 362/1338/659 401/1339/660 400/1333/654 363/1332/653 +f 365/1337/658 398/1336/657 397/1340/661 366/1341/662 +f 381/1342/663 414/1343/664 413/1344/665 382/1345/666 +f 876/1346/667 877/1347/668 878/1348/669 879/1349/670 +f 366/1341/662 397/1340/661 396/1350/671 367/1351/672 +f 880/1352/673 876/1346/667 879/1349/670 881/1353/674 +f 361/1354/675 402/1355/676 401/1339/660 362/1338/659 +f 877/1347/668 882/1356/677 883/1357/678 878/1348/669 +f 375/1358/679 388/1359/680 387/1360/681 376/1361/682 +f 367/1351/672 396/1350/671 395/1362/683 368/1363/684 +f 884/1364/685 880/1352/673 881/1353/674 885/1365/686 +f 360/1366/687 403/1367/688 402/1355/676 361/1354/675 +f 882/1356/677 886/1368/689 887/1369/690 883/1357/678 +f 368/1363/684 395/1362/683 394/1370/691 369/1371/692 +f 888/1372/693 884/1364/685 885/1365/686 671/875/318 +f 359/1373/694 404/1374/695 403/1375/688 360/1366/687 +f 886/1368/689 889/1376/696 890/1377/697 887/1369/690 +f 881/1353/674 567/1378/206 568/1379/207 885/1365/686 +f 843/1257/594 842/1256/593 682/890/329 681/889/328 785/1261/1 +f 369/1371/692 394/1370/691 393/1380/698 370/1381/699 +f 888/1372/693 671/875/318 670/874/317 891/1382/700 +f 380/1383/701 383/1384/702 414/1343/664 381/1342/663 +f 358/1385/703 405/1386/704 404/1374/695 359/1373/694 +f 889/1376/696 892/1387/705 893/1388/706 890/1377/697 +f 577/1389/215 879/1349/670 878/1348/669 894/1390/707 895/1391/3 +f 671/875/318 885/1365/686 568/1379/207 579/876/216 +f 356/1392/708 407/1393/709 406/1394/710 357/1395/711 +f 896/1396/712 891/1382/700 670/874/317 897/1397/713 +f 357/1398/711 406/1399/710 405/1386/704 358/1385/703 +f 892/1387/705 898/1400/714 899/1401/715 893/1388/706 +f 370/1381/699 393/1380/698 392/1402/716 371/1403/717 +f 896/1396/712 897/1397/713 900/1404/718 901/1405/719 +f 355/1406/720 408/1407/721 407/1393/709 356/1392/708 +f 898/1400/714 902/1408/722 841/1255/592 899/1401/715 +f 371/1403/717 392/1402/716 391/1409/723 372/1410/724 +f 901/1405/719 900/1404/718 903/1411/725 904/1412/726 +f 354/1413/727 409/1414/728 408/1407/721 355/1406/720 +f 902/1408/722 905/1415/729 842/1256/593 841/1255/592 +f 580/873/217 599/1416/236 897/1397/713 670/874/317 +f 372/1410/724 391/1409/723 390/1417/730 373/1418/731 +f 904/1412/726 903/1411/725 906/1419/732 907/1420/733 +f 353/1421/734 410/1422/735 409/1414/728 354/1413/727 +f 905/1415/729 908/1423/736 682/890/329 842/1256/593 +f 599/1416/236 598/1424/235 900/1404/718 897/1397/713 +f 373/1418/731 390/1417/730 389/1425/737 374/1426/738 +f 907/1427/733 906/1428/732 909/1429/739 910/1430/740 +f 352/1431/741 411/1432/742 410/1422/735 353/1421/734 +f 908/1423/736 911/1433/743 679/887/326 682/890/329 +f 374/1426/738 389/1425/737 388/1359/680 375/1358/679 +f 910/1430/740 909/1429/739 912/1434/744 913/1435/745 +f 376/1361/682 387/1360/681 386/1436/746 377/1437/747 +f 911/1433/743 914/1438/748 845/1259/595 679/887/326 +f 597/1439/234 596/1440/233 906/1419/732 903/1411/725 +f 377/1437/747 386/1436/746 385/1441/749 378/1442/750 +f 913/1435/745 912/1434/744 915/1443/751 916/1444/752 +f 351/1445/753 412/1446/754 411/1432/742 352/1431/741 +f 914/1438/748 917/1447/755 918/1448/756 845/1259/595 +f 378/1442/750 385/1441/749 384/1449/757 379/1450/758 +f 916/1444/752 915/1443/751 919/1451/759 920/1452/760 +f 382/1345/666 413/1344/665 412/1446/754 351/1445/753 +f 379/1450/758 384/1449/757 383/1384/702 380/1383/701 +f 917/1447/755 921/1453/761 922/1454/762 918/1448/756 +f 595/1455/232 594/1456/231 912/1434/744 909/1429/739 +f 920/1452/760 919/1451/759 923/1457/763 924/1458/764 +f 921/1453/761 925/1459/765 926/1460/766 922/1454/762 +f 594/1456/231 593/1461/230 915/1443/751 912/1434/744 +f 924/1458/764 923/1457/763 927/1462/767 928/1463/768 +f 929/1464/769 930/1465/770 926/1460/766 925/1459/765 +f 593/1461/230 592/1466/229 790/1467/528 919/1451/759 915/1443/751 +f 928/1463/768 927/1462/767 931/1468/771 932/1469/772 +f 932/1469/772 931/1468/771 933/1470/773 934/1471/774 +f 934/1471/774 933/1470/773 930/1465/770 929/1464/769 +f 790/1467/528 716/1472/403 923/1457/763 919/1451/759 +f 926/1460/766 791/1473/529 789/1474/527 922/1454/762 +f 716/1472/403 715/1475/402 927/1462/767 923/1457/763 +f 930/1465/770 719/1476/406 791/1473/529 926/1460/766 +f 715/1475/402 727/1477/420 931/1468/771 927/1462/767 +f 727/1477/420 720/1478/407 933/1470/773 931/1468/771 +f 720/1478/407 719/1476/406 930/1465/770 933/1470/773 +f 890/1377/697 935/1479/775 936/1480/776 887/1369/690 +f 937/1481/777 899/1401/715 841/1255/592 840/1254/591 +f 577/1389/215 567/1378/206 881/1353/674 879/1349/670 +f 922/1454/762 789/1474/527 788/1482/526 918/1448/756 +f 596/1483/233 595/1455/232 909/1429/739 906/1428/732 +f 598/1424/235 597/1439/234 903/1411/725 900/1404/718 +f 887/1369/690 936/1480/776 938/1484/778 883/1357/678 +f 415/1485/779 939/1486/780 940/1487/781 416/1488/782 +f 420/1489/783 941/1490/784 939/1486/780 415/1485/779 +f 416/1488/782 940/1487/781 942/1491/785 417/1492/786 +f 417/1492/786 942/1491/785 943/1493/787 418/1494/788 +f 418/1495/788 943/1496/787 944/1497/789 419/1498/790 +f 419/1498/790 944/1497/789 941/1490/784 420/1489/783 +f 421/1499/791 945/1500/2 946/1501/792 422/1502/793 +f 426/1503/794 947/1504/795 945/1500/2 421/1499/791 +f 422/1502/793 946/1501/792 948/1505/796 423/1506/797 +f 423/1506/797 948/1505/796 949/1507/1 424/1508/798 +f 424/1509/798 949/1510/1 950/1511/799 425/1512/800 +f 425/1512/800 950/1511/799 947/1504/795 426/1503/794 +f 427/1513/801 951/1514/802 952/1515/803 428/1516/804 +f 432/1517/805 953/1518/806 951/1514/802 427/1513/801 +f 428/1516/804 952/1515/803 954/1519/807 429/1520/808 +f 429/1520/808 954/1519/807 955/1521/809 430/1522/810 +f 430/1523/810 955/1524/809 956/1525/811 431/1526/812 +f 431/1526/812 956/1525/811 953/1518/806 432/1517/805 +f 433/1527/813 957/1528/4 958/1529/814 434/1530/815 +f 438/1531/816 959/1532/817 957/1528/4 433/1527/813 +f 434/1530/815 958/1529/814 960/1533/818 435/1534/819 +f 435/1534/819 960/1533/818 961/1535/3 436/1536/820 +f 436/1537/820 961/1538/3 962/1539/821 437/1540/822 +f 437/1540/822 962/1539/821 959/1532/817 438/1531/816 +f 439/1541/810 963/1542/809 964/1543/811 440/1544/812 +f 444/1545/808 965/1546/807 963/1542/809 439/1541/810 +f 440/1544/812 964/1543/811 966/1547/806 441/1548/823 +f 441/1548/823 966/1547/806 967/1549/802 442/1550/801 +f 442/1551/801 967/1552/802 968/1553/803 443/1554/804 +f 443/1554/804 968/1553/803 965/1546/807 444/1545/808 +f 445/1555/824 969/1556/3 970/1557/821 446/1558/822 +f 450/1559/825 971/1560/818 969/1556/3 445/1555/824 +f 446/1558/822 970/1557/821 972/1561/817 447/1562/826 +f 447/1562/826 972/1561/817 973/1563/4 448/1564/827 +f 448/1565/827 973/1566/4 974/1567/814 449/1568/828 +f 449/1568/828 974/1567/814 971/1560/818 450/1559/825 +f 975/1569/829 935/1479/775 890/1377/697 893/1388/706 +f 918/1448/756 788/1482/526 707/1260/382 845/1259/595 +f 894/1390/707 878/1348/669 883/1357/678 938/1484/778 976/1570/707 +f 937/1481/777 975/1569/829 893/1388/706 899/1401/715 +f 895/1391/3 894/1390/707 976/1570/707 649/1571/3 +f 577/1389/215 895/1391/3 649/1571/3 578/1572/3 +f 665/868/312 660/863/307 977/1573/830 978/1574/831 +f 694/918/355 693/917/354 979/1575/832 980/1576/833 +f 656/858/303 648/846/221 582/1577/219 981/1578/834 +f 660/863/307 657/859/304 982/1579/835 977/1573/830 +f 784/1132/1 694/918/355 980/1576/833 +f 693/917/354 787/1135/525 983/1580/836 979/1575/832 +f 657/859/304 656/858/303 981/1578/834 982/1579/835 +f 787/1135/525 662/865/309 984/1581/837 983/1580/836 +f 662/865/309 665/868/312 978/1574/831 984/1581/837 +f 582/1577/219 581/1582/218 985/1583/838 981/1578/834 +f 977/1573/830 986/1584/839 987/1585/840 978/1574/831 +f 979/1575/832 988/1586/841 989/1587/842 980/1576/833 +f 980/1576/833 989/1587/842 784/1132/1 +f 982/1579/835 990/1588/843 986/1584/839 977/1573/830 +f 983/1580/836 991/1589/844 988/1586/841 979/1575/832 +f 987/1585/840 992/1590/845 993/1591/846 994/1592/847 +f 981/1578/834 985/1583/838 990/1588/843 982/1579/835 +f 984/1581/837 994/1592/847 991/1589/844 983/1580/836 +f 985/1583/838 995/1593/848 996/1594/849 990/1588/843 +f 994/1592/847 993/1591/846 997/1595/850 991/1589/844 +f 581/1582/218 573/1596/212 995/1593/848 985/1583/838 +f 986/1584/839 998/1597/851 992/1590/845 987/1585/840 +f 988/1586/841 999/1598/852 1000/1599/853 989/1587/842 +f 989/1587/842 1000/1599/853 784/1132/1 +f 990/1588/843 996/1594/849 998/1597/851 986/1584/839 +f 991/1589/844 997/1595/850 999/1598/852 988/1586/841 +f 992/1590/845 1001/1600/854 1002/1601/855 993/1591/846 +f 997/1595/850 1003/1602/856 1004/1603/857 999/1598/852 +f 1001/1600/854 1005/1604/858 1006/1605/859 1002/1601/855 +f 995/1593/848 1007/1606/860 1008/1607/861 996/1594/849 +f 993/1591/846 1002/1601/855 1003/1602/856 997/1595/850 +f 573/1596/212 572/1608/211 1007/1606/860 995/1593/848 +f 998/1597/851 1009/1609/862 1001/1600/854 992/1590/845 +f 999/1598/852 1004/1603/857 1010/1610/863 1000/1599/853 +f 1000/1599/853 1010/1610/863 784/1132/1 +f 996/1594/849 1008/1607/861 1009/1609/862 998/1597/851 +f 1008/1607/861 1011/1611/864 1012/1612/865 1009/1609/862 +f 1003/1602/856 1013/1613/866 1014/1614/867 1004/1603/857 +f 1005/1604/858 1015/1615/868 1016/1616/869 1006/1605/859 +f 1007/1606/860 1017/1617/870 1011/1611/864 1008/1607/861 +f 1002/1601/855 1006/1605/859 1013/1613/866 1003/1602/856 +f 572/1608/211 571/1618/210 1017/1617/870 1007/1606/860 +f 1009/1609/862 1012/1612/865 1005/1604/858 1001/1600/854 +f 1004/1603/857 1014/1614/867 1018/1619/871 1010/1610/863 +f 1010/1610/863 1018/1619/871 784/1132/1 +f 1014/1614/867 1019/1620/872 1020/1621/873 1018/1619/871 +f 1018/1619/871 1020/1621/873 784/1132/1 +f 1011/1611/864 1021/1622/874 1022/1623/875 1012/1612/865 +f 1013/1613/866 1023/1624/876 1019/1620/872 1014/1614/867 +f 1015/1615/868 1024/1625/877 1025/1626/878 1016/1616/869 +f 1017/1617/870 1026/1627/879 1021/1622/874 1011/1611/864 +f 1006/1605/859 1016/1616/869 1023/1624/876 1013/1613/866 +f 571/1618/210 570/1628/209 1026/1627/879 1017/1617/870 +f 1012/1612/865 1022/1623/875 1015/1615/868 1005/1604/858 +f 570/1628/209 574/1629/213 1027/1630/880 1026/1627/879 +f 1022/1623/875 1028/1631/881 1024/1625/877 1015/1615/868 +f 1019/1620/872 1029/1632/882 1030/1633/883 1020/1621/873 +f 1020/1621/873 1030/1633/883 784/1132/1 +f 1021/1622/874 1031/1634/884 1028/1631/881 1022/1623/875 +f 1023/1624/876 1032/1635/885 1029/1632/882 1019/1620/872 +f 1024/1625/877 1033/1636/886 1034/1637/887 1025/1626/878 +f 1026/1627/879 1027/1630/880 1031/1634/884 1021/1622/874 +f 1016/1616/869 1025/1626/878 1032/1635/885 1023/1624/876 +f 1025/1626/878 1034/1637/887 1035/1638/888 1032/1635/885 +f 574/1629/213 576/1639/214 1036/1640/889 1027/1630/880 +f 1028/1631/881 1037/1641/890 1033/1636/886 1024/1625/877 +f 1029/1632/882 1038/1642/891 1039/1643/892 1030/1633/883 +f 1030/1633/883 1039/1643/892 784/1132/1 +f 1031/1634/884 1040/1644/893 1037/1641/890 1028/1631/881 +f 1032/1635/885 1035/1638/888 1038/1642/891 1029/1632/882 +f 1027/1630/880 1036/1640/889 1040/1644/893 1031/1634/884 +f 1037/1641/890 1040/1644/893 938/1645/778 936/1646/776 +f 1038/1642/891 1035/1638/888 937/1647/777 840/1648/591 +f 1040/1644/893 1036/1640/889 976/1649/707 938/1645/778 +f 1035/1638/888 1034/1637/887 975/1650/829 937/1647/777 +f 1034/1637/887 1033/1636/886 935/1651/775 975/1650/829 +f 1036/1640/889 576/1639/214 649/1652/3 976/1649/707 +f 1033/1636/886 1037/1641/890 936/1646/776 935/1651/775 +f 1039/1643/892 1038/1642/891 840/1648/591 844/1653/594 +f 784/1132/1 1039/1643/892 844/1653/594 +f 978/1574/831 987/1585/840 994/1592/847 984/1581/837 diff --git a/mods/pipeworks/models/pipeworks_pipe_5_lowpoly.obj b/mods/pipeworks/models/pipeworks_pipe_5_lowpoly.obj new file mode 100755 index 0000000..9c6bf3d --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_5_lowpoly.obj @@ -0,0 +1,461 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend' +# www.blender.org +o Cylinder.000_Cylinder.000_None_pipeworks_pipe_plain.png.000 +v -0.051777 0.051777 0.125000 +v 0.468750 0.051777 0.125000 +v 0.468750 0.125000 0.051777 +v 0.051777 0.125000 0.051777 +v -0.051777 0.125000 0.051777 +v -0.088388 0.088388 0.088388 +v -0.125000 -0.051777 0.051777 +v -0.125000 0.051777 0.051777 +v -0.125000 0.051777 -0.468750 +v -0.125000 -0.051777 -0.468750 +v -0.125000 -0.051777 -0.051777 +v -0.051777 -0.051777 0.125000 +v 0.051777 -0.051777 0.125000 +v 0.468750 -0.051777 0.125000 +v -0.051777 0.125000 -0.468750 +v -0.125000 -0.468750 0.051777 +v -0.051777 -0.468750 0.125000 +v 0.051777 0.125000 -0.051777 +v 0.051777 0.125000 -0.468750 +v 0.500000 -0.156250 -0.064721 +v 0.500000 -0.064721 -0.156250 +v 0.500000 0.064721 -0.156250 +v 0.500000 0.156250 -0.064721 +v 0.500000 0.156250 0.064721 +v 0.500000 0.064721 0.156250 +v 0.500000 -0.064721 0.156250 +v 0.500000 -0.156250 0.064721 +v 0.468750 -0.064721 -0.156250 +v 0.468750 -0.156250 -0.064721 +v 0.468750 -0.156250 0.064721 +v 0.468750 -0.064721 0.156250 +v 0.468750 0.064721 0.156250 +v 0.468750 0.156250 0.064721 +v 0.468750 0.156250 -0.064721 +v 0.468750 0.064721 -0.156250 +v 0.156250 -0.500000 0.064721 +v 0.064721 -0.500000 0.156250 +v -0.064721 -0.500000 0.156250 +v -0.156250 -0.500000 0.064721 +v -0.156250 -0.500000 -0.064721 +v -0.064721 -0.500000 -0.156250 +v 0.064721 -0.500000 -0.156250 +v 0.156250 -0.500000 -0.064721 +v 0.064721 -0.468750 0.156250 +v 0.156250 -0.468750 0.064721 +v 0.156250 -0.468750 -0.064721 +v 0.064721 -0.468750 -0.156250 +v -0.064721 -0.468750 -0.156250 +v -0.156250 -0.468750 -0.064721 +v -0.156250 -0.468750 0.064721 +v -0.064721 -0.468750 0.156250 +v 0.064721 -0.156250 -0.468750 +v 0.156250 -0.064721 -0.468750 +v 0.156250 0.064721 -0.468750 +v 0.064721 0.156250 -0.468750 +v -0.064721 0.156250 -0.468750 +v -0.156250 0.064721 -0.468750 +v -0.156250 -0.064721 -0.468750 +v -0.064721 -0.156250 -0.468750 +v 0.156250 -0.064721 -0.500000 +v 0.064721 -0.156250 -0.500000 +v -0.064721 -0.156250 -0.500000 +v -0.156250 -0.064721 -0.500000 +v -0.156250 0.064721 -0.500000 +v -0.064721 0.156250 -0.500000 +v 0.064721 0.156250 -0.500000 +v 0.156250 0.064721 -0.500000 +v -0.125000 -0.051777 0.051777 +v -0.125000 -0.051777 -0.051777 +v -0.125000 -0.468750 -0.051777 +v -0.125000 -0.468750 0.051777 +v 0.125000 -0.468750 0.051777 +v 0.125000 -0.468750 -0.051777 +v 0.125000 -0.125000 -0.051777 +v 0.125000 -0.125000 0.051777 +v 0.051777 -0.468750 -0.125000 +v 0.051777 -0.125000 -0.125000 +v 0.088388 -0.088388 -0.088388 +v -0.051777 -0.468750 -0.125000 +v -0.051777 -0.125000 -0.125000 +v 0.468750 -0.125000 -0.051777 +v 0.468750 -0.051777 -0.125000 +v 0.468750 0.051777 -0.125000 +v 0.468750 0.125000 -0.051777 +v 0.468750 0.125000 0.051777 +v 0.468750 0.051777 0.125000 +v 0.468750 -0.051777 0.125000 +v 0.468750 -0.125000 0.051777 +v 0.051777 0.125000 -0.468750 +v 0.051777 0.125000 -0.051777 +v 0.125000 0.051777 -0.125000 +v 0.125000 0.051777 -0.468750 +v -0.051777 -0.125000 -0.468750 +v -0.125000 -0.051777 -0.468750 +v 0.051777 -0.051777 0.125000 +v 0.051777 0.125000 0.051777 +v 0.125000 -0.051777 -0.125000 +v 0.051777 -0.468750 0.125000 +v -0.051777 -0.468750 0.125000 +v 0.125000 -0.051777 -0.468750 +v 0.051777 -0.125000 -0.468750 +v -0.125000 0.051777 -0.468750 +v -0.051777 0.125000 -0.468750 +v -0.051777 -0.051777 0.125000 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.7500 0.2344 +vt 0.7500 0.5156 +vt 0.6250 0.5156 +vt 0.6250 0.2969 +vt 0.6250 0.2344 +vt 0.6875 0.2188 +vt 0.8750 0.2656 +vt 0.7500 0.2656 +vt 0.7500 0.0156 +vt 0.8750 0.0156 +vt 0.8750 0.2344 +vt 0.8750 0.2656 +vt 0.8750 0.2969 +vt 0.8750 0.5156 +vt 0.7500 0.2656 +vt 0.6875 0.3125 +vt 0.6250 0.2969 +vt 0.6250 0.0156 +vt 0.7500 0.2969 +vt 1.0000 0.2969 +vt 0.9375 0.3125 +vt 0.8750 0.2969 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 1.0000 0.0156 +vt 1.0000 0.2344 +vt 0.6250 0.2656 +vt 0.5000 0.2656 +vt 0.5000 0.2344 +vt 0.5000 0.0156 +vt 0.8750 0.2344 +vt 0.7500 0.2344 +vt 0.7500 0.0156 +vt 0.8750 0.0156 +vt 0.2500 0.0156 +vt 0.3750 0.0156 +vt 0.3750 0.2031 +vt 0.2500 0.2031 +vt 0.5000 0.0156 +vt 0.5000 0.2031 +vt 0.4375 0.2188 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.6250 0.0156 +vt 0.6250 0.2031 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.5000 0.0156 +vt 0.5000 0.2344 +vt 0.3750 0.2031 +vt 0.3750 0.0156 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 1.0000 0.5156 +vt 0.8750 0.5156 +vt 0.8750 0.2969 +vt 1.0000 0.3281 +vt 0.6250 0.5156 +vt 0.5000 0.5156 +vt 0.5000 0.2969 +vt 0.6250 0.2969 +vt 0.1250 0.5156 +vt 0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.1875 0.3125 +vt 0.2500 0.3281 +vt 0.2500 0.5156 +vt 0.3750 0.3281 +vt 0.3750 0.5156 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.7500 0.5938 +vt 0.7500 0.5625 +vt 0.8125 0.5625 +vt 0.8125 0.5938 +vt 0.6875 0.5938 +vt 0.6875 0.5625 +vt 0.6250 0.5938 +vt 0.6250 0.5625 +vt 0.5625 0.5938 +vt 0.5625 0.5625 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.9375 0.5938 +vt 0.9375 0.5625 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.8750 0.5938 +vt 0.8750 0.5625 +vt 0.1250 0.0156 +vt 0.1250 0.2344 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt -0.0000 0.2344 +vt -0.0000 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2031 +vt 0.1250 0.0156 +vt 0.1875 0.2188 +vt 0.1250 0.2031 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.3002 0.3002 0.9054 +vn 0.6302 0.2971 0.7173 +vn 0.6302 0.7173 0.2971 +vn -0.0000 0.9239 0.3826 +vn -0.3002 0.9054 0.3002 +vn -0.5774 0.5774 0.5774 +vn -0.9239 0.0000 0.3826 +vn -0.9054 0.3002 0.3002 +vn -0.7173 0.2971 -0.6302 +vn -0.7173 -0.2972 -0.6302 +vn -0.9878 -0.1100 -0.1100 +vn -0.3826 0.0000 0.9239 +vn 0.1100 -0.1100 0.9878 +vn 0.6302 -0.2972 0.7173 +vn -0.2971 0.7173 -0.6302 +vn -0.7173 -0.6302 0.2971 +vn -0.2971 -0.6302 0.7173 +vn 0.1100 0.9878 -0.1100 +vn 0.2972 0.7173 -0.6302 +vn -0.7173 -0.6303 -0.2971 +vn 0.7173 -0.6303 0.2971 +vn 0.7173 -0.6303 -0.2971 +vn 0.5789 -0.5789 -0.5743 +vn 0.5789 -0.5789 0.5743 +vn 0.2971 -0.6303 -0.7173 +vn 0.5743 -0.5789 -0.5789 +vn 0.5774 -0.5774 -0.5774 +vn -0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 0.2971 +vn -0.6302 -0.7173 0.2971 +vn -0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 0.7173 +vn -0.6302 -0.2971 0.7173 +vn -0.6302 0.2971 0.7173 +vn -0.6302 0.7173 0.2971 +vn 0.6302 0.7173 -0.2971 +vn -0.6302 0.7173 -0.2971 +vn 0.6302 0.2971 -0.7173 +vn -0.6302 0.2971 -0.7173 +vn -0.2971 -0.6303 -0.7173 +vn -0.5743 -0.5789 -0.5789 +vn 0.6303 -0.7173 -0.2971 +vn 0.6303 -0.2971 -0.7173 +vn 0.6303 0.2971 -0.7173 +vn 0.6303 0.7173 -0.2971 +vn 0.6303 -0.7173 0.2971 +vn 0.2971 0.7173 -0.6302 +vn 0.5789 0.5743 -0.5789 +vn 0.7173 0.2971 -0.6303 +vn -0.2971 -0.7173 -0.6303 +vn -0.7173 -0.2971 -0.6302 +vn 0.5789 -0.5743 -0.5789 +vn 0.2971 -0.6303 0.7173 +vn 0.7173 -0.6302 -0.2971 +vn 0.7173 0.6302 -0.2971 +vn 0.7173 0.6302 0.2971 +vn 0.7173 -0.6302 0.2971 +vn 0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 -0.7173 +vn -0.2971 -0.6302 -0.7173 +vn -0.2971 0.6302 -0.7173 +vn -0.7173 -0.6302 -0.2971 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 0.6302 0.2971 +vn -0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn 0.2971 0.6302 0.7173 +vn 0.7173 -0.2971 -0.6302 +vn 0.7173 -0.2971 0.6302 +vn 0.2971 -0.7173 0.6302 +vn 0.2971 -0.7173 -0.6302 +vn -0.2971 -0.7173 0.6302 +vn -0.2971 -0.7173 -0.6302 +vn -0.7173 -0.2971 0.6302 +vn -0.7173 0.2971 0.6302 +vn -0.2971 0.7173 0.6302 +vn 0.2971 0.7173 0.6302 +vn 0.7173 0.2971 0.6302 +vn 0.7173 0.2971 -0.6302 +vn 0.7173 -0.2971 -0.6303 +vn 0.2971 -0.7173 -0.6303 +g Cylinder.000_Cylinder.000_None_pipeworks_pipe_plain.png.000_Cylinder.000_Cylinder.000_None_pipeworks_pipe_plain.png.000_None +s off +f 20/1/1 21/2/1 22/3/1 23/4/1 24/5/1 25/6/1 26/7/1 27/8/1 +f 28/9/2 29/10/2 30/11/2 31/12/2 32/13/2 33/14/2 34/15/2 35/16/2 +f 36/17/3 37/18/3 38/19/3 39/20/3 40/21/3 41/22/3 42/23/3 43/24/3 +f 44/25/4 45/26/4 46/27/4 47/28/4 48/29/4 49/30/4 50/31/4 51/32/4 +f 52/33/5 53/34/5 54/35/5 55/36/5 56/37/5 57/38/5 58/39/5 59/40/5 +f 60/41/6 61/42/6 62/43/6 63/44/6 64/45/6 65/46/6 66/47/6 67/48/6 +s 1 +f 1/49/7 2/50/8 3/51/9 4/52/10 5/53/11 6/54/12 +f 7/55/13 8/56/14 9/57/15 10/58/16 11/59/17 +f 12/60/18 13/61/19 14/62/20 2/50/8 1/63/7 +f 6/64/12 5/65/11 15/66/21 9/57/15 8/67/14 +f 1/68/7 6/69/12 8/70/14 7/71/13 16/72/22 17/73/23 12/74/18 +f 5/75/11 4/76/10 18/77/24 19/78/25 15/66/21 +f 68/79/13 69/80/17 70/81/26 71/82/22 +f 72/83/27 73/84/28 74/85/29 75/86/30 +f 76/87/31 77/88/32 78/89/33 74/85/29 73/84/28 +f 29/90/34 20/91/35 27/92/36 30/93/37 +f 28/94/38 21/95/39 20/91/35 29/90/34 +f 30/93/37 27/92/36 26/96/40 31/97/41 +f 31/98/41 26/99/40 25/100/8 32/101/42 +f 32/101/42 25/100/8 24/102/9 33/103/43 +f 33/103/43 24/102/9 23/104/44 34/105/45 +f 34/105/45 23/104/44 22/106/46 35/107/47 +f 35/107/47 22/106/46 21/95/39 28/94/38 +f 79/108/48 80/109/49 77/88/32 76/87/31 +f 81/110/50 82/111/51 83/112/52 84/113/53 85/114/9 86/115/8 87/116/40 88/117/54 +f 89/118/55 90/119/24 91/120/56 92/121/57 +f 93/122/58 80/123/49 69/124/17 94/125/59 +f 79/108/48 70/81/26 69/80/17 80/109/49 +f 88/126/54 87/127/40 95/128/19 75/129/30 +f 85/130/9 84/131/53 90/132/24 96/133/10 +f 81/134/50 88/135/54 75/136/30 74/137/29 +f 81/134/50 74/137/29 78/138/33 97/139/60 82/140/51 +f 82/140/51 97/139/60 91/141/56 83/142/52 +f 72/143/27 98/144/61 99/145/23 71/146/22 70/147/26 79/148/48 76/149/31 73/150/28 +f 43/151/62 46/152/63 45/153/64 36/154/65 +f 42/155/66 47/156/67 46/152/63 43/151/62 +f 41/157/68 48/158/69 47/156/67 42/155/66 +f 40/159/70 49/160/71 48/158/69 41/157/68 +f 39/161/22 50/162/72 49/160/71 40/159/70 +f 38/163/23 51/164/73 50/165/72 39/166/22 +f 37/167/74 44/168/75 51/164/73 38/163/23 +f 98/169/61 72/83/27 75/86/30 95/170/19 +f 36/154/65 45/153/64 44/168/75 37/167/74 +f 60/171/76 53/172/77 52/173/78 61/174/79 +f 61/174/79 52/173/78 59/175/80 62/176/81 +f 62/176/81 59/175/80 58/177/82 63/178/59 +f 63/179/59 58/180/82 57/181/83 64/182/15 +f 64/182/15 57/181/83 56/183/84 65/184/21 +f 65/184/21 56/183/84 55/185/85 66/186/55 +f 66/186/55 55/185/85 54/187/86 67/188/87 +f 67/188/87 54/187/86 53/172/77 60/171/76 +f 100/189/88 101/190/89 93/191/58 94/192/59 102/193/15 103/194/21 89/195/55 92/196/57 +f 104/197/18 99/198/23 98/169/61 95/170/19 +f 100/199/88 92/121/57 91/120/56 97/200/60 +f 101/201/89 100/199/88 97/200/60 78/202/33 77/203/32 +f 101/201/89 77/203/32 80/204/49 93/205/58 +f 83/142/52 91/141/56 90/132/24 84/131/53 diff --git a/mods/pipeworks/models/pipeworks_pipe_6.obj b/mods/pipeworks/models/pipeworks_pipe_6.obj new file mode 100755 index 0000000..c6b060e --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_6.obj @@ -0,0 +1,3819 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-highpoly.blend' +# www.blender.org +o Pipe_Cylinder.002 +v -0.468750 0.126770 0.038455 +v -0.468750 0.131837 0.012985 +v -0.468750 0.131837 -0.012984 +v -0.468750 0.126770 -0.038455 +v -0.468750 0.116832 -0.062448 +v -0.468750 0.102404 -0.084041 +v -0.468750 0.084041 -0.102404 +v -0.468750 0.062448 -0.116832 +v -0.468750 0.038455 -0.126770 +v -0.468750 0.012985 -0.131836 +v -0.468750 -0.012985 -0.131836 +v -0.468750 -0.062448 -0.116832 +v -0.468750 -0.084041 -0.102404 +v -0.468750 -0.102404 -0.084041 +v -0.468750 -0.116832 -0.062448 +v -0.468750 -0.126770 -0.038455 +v -0.468750 -0.131836 -0.012985 +v -0.468750 -0.131836 0.012985 +v -0.468750 -0.126770 0.038455 +v -0.468750 -0.116832 0.062448 +v -0.468750 -0.084041 0.102404 +v -0.468750 -0.102404 0.084041 +v -0.468750 -0.062448 0.116832 +v -0.468750 -0.038455 0.126770 +v -0.468750 0.012985 0.131837 +v -0.468750 0.062448 0.116832 +v -0.468750 0.038455 0.126770 +v -0.468750 0.084041 0.102404 +v -0.468750 0.102404 0.084041 +v -0.468750 0.116832 0.062448 +v -0.468750 -0.038455 -0.126770 +v -0.468750 -0.012985 0.131836 +v -0.437501 0.110774 0.059210 +v -0.437501 0.120197 0.036461 +v -0.437501 0.125000 0.012312 +v -0.437501 0.125001 -0.012311 +v -0.437501 0.120197 -0.036461 +v -0.437501 0.110774 -0.059210 +v -0.437501 0.097094 -0.079683 +v -0.437501 0.079683 -0.097094 +v -0.437501 0.059210 -0.110774 +v -0.437501 0.036461 -0.120197 +v -0.437501 0.012312 -0.125000 +v -0.437501 -0.012311 -0.125000 +v -0.437501 -0.036461 -0.120197 +v -0.437501 -0.059210 -0.110774 +v -0.437501 -0.079683 -0.097094 +v -0.437501 -0.097094 -0.079683 +v -0.437501 -0.110774 -0.059210 +v -0.437501 -0.120197 -0.036461 +v -0.437501 -0.125000 -0.012311 +v -0.437501 -0.125000 0.012311 +v -0.437501 -0.120197 0.036461 +v -0.437501 -0.110774 0.059210 +v -0.437501 -0.097094 0.079683 +v -0.437501 -0.079683 0.097094 +v -0.437501 -0.059210 0.110774 +v -0.437501 -0.036461 0.120197 +v -0.437501 -0.012311 0.125001 +v -0.437501 0.012311 0.125001 +v -0.437501 0.036461 0.120197 +v -0.437501 0.059210 0.110774 +v -0.437501 0.079683 0.097094 +v -0.437501 0.097094 0.079683 +v 0.437501 0.036461 -0.120197 +v 0.437501 0.012312 -0.125001 +v 0.437501 -0.012311 -0.125000 +v 0.437501 -0.036461 -0.120197 +v 0.437501 0.059210 -0.110774 +v 0.468750 0.012985 -0.131836 +v 0.468750 0.038455 -0.126770 +v 0.468750 -0.012985 -0.131836 +v 0.437501 -0.059210 -0.110774 +v 0.468750 -0.038455 -0.126770 +v 0.437501 0.079683 -0.097094 +v 0.468750 0.062448 -0.116832 +v 0.437501 -0.079683 -0.097094 +v 0.468750 -0.062448 -0.116832 +v 0.437501 0.097094 -0.079683 +v 0.468750 0.084041 -0.102404 +v 0.437501 -0.097094 -0.079683 +v 0.468750 -0.084041 -0.102404 +v 0.437501 0.110774 -0.059210 +v 0.468750 0.102404 -0.084041 +v 0.437501 -0.110774 -0.059210 +v 0.468750 -0.102404 -0.084041 +v 0.437501 0.120197 -0.036461 +v 0.468750 0.116832 -0.062448 +v 0.437501 -0.120197 -0.036461 +v 0.468750 -0.116832 -0.062448 +v 0.437501 0.125000 -0.012311 +v 0.468750 0.126770 -0.038455 +v 0.437501 -0.125001 -0.012311 +v 0.468750 -0.126770 -0.038455 +v 0.437501 0.125000 0.012312 +v 0.468750 0.131836 -0.012985 +v 0.437501 -0.125001 0.012311 +v 0.468750 -0.131837 -0.012985 +v 0.437501 0.120197 0.036461 +v 0.468750 0.131836 0.012985 +v 0.437501 -0.120197 0.036461 +v 0.468750 -0.131837 0.012985 +v 0.437501 0.110774 0.059210 +v 0.468750 0.126770 0.038455 +v 0.437501 -0.110774 0.059210 +v 0.468750 -0.126770 0.038455 +v 0.437501 0.097094 0.079683 +v 0.468750 0.116832 0.062448 +v 0.437501 -0.097094 0.079683 +v 0.468750 -0.116832 0.062448 +v 0.437501 0.079683 0.097094 +v 0.468750 0.102404 0.084041 +v 0.437501 -0.079683 0.097094 +v 0.468750 -0.102404 0.084041 +v 0.437501 0.059210 0.110774 +v 0.468750 0.084041 0.102404 +v 0.437501 -0.059210 0.110774 +v 0.468750 -0.084041 0.102404 +v 0.437501 0.036461 0.120197 +v 0.468750 0.062448 0.116832 +v 0.437501 -0.036461 0.120197 +v 0.468750 -0.062448 0.116832 +v 0.437501 0.012311 0.125000 +v 0.468750 0.038455 0.126770 +v 0.437501 -0.012311 0.125000 +v 0.468750 -0.038455 0.126770 +v 0.468750 0.012985 0.131837 +v 0.468750 -0.012985 0.131836 +v 0.460912 0.130078 0.063644 +v 0.468749 0.130078 0.063644 +v 0.468749 0.139022 0.062467 +v 0.460912 0.139022 0.062467 +v 0.460912 0.142474 0.054132 +v 0.460912 0.136982 0.046976 +v 0.460912 0.128039 0.048153 +v 0.460912 0.124587 0.056487 +v 0.468749 0.124587 0.056487 +v 0.468749 0.142474 0.054132 +v 0.468749 0.136982 0.046976 +v 0.468749 0.128039 0.048153 +v -0.460914 0.136982 0.046976 +v -0.468751 0.136982 0.046976 +v -0.468751 0.142474 0.054133 +v -0.460914 0.142474 0.054133 +v -0.460914 0.139022 0.062467 +v -0.460914 0.130078 0.063644 +v -0.460914 0.124587 0.056488 +v -0.460914 0.128039 0.048153 +v -0.468751 0.128039 0.048153 +v -0.468751 0.139022 0.062467 +v -0.468751 0.130078 0.063644 +v -0.468751 0.124587 0.056488 +v 0.460912 0.046976 0.136982 +v 0.468749 0.046976 0.136982 +v 0.468749 0.054133 0.142474 +v 0.460912 0.054133 0.142474 +v 0.460912 0.062467 0.139022 +v 0.460912 0.063644 0.130078 +v 0.460912 0.056488 0.124587 +v 0.460912 0.048154 0.128039 +v 0.468749 0.048154 0.128039 +v 0.468749 0.062467 0.139022 +v 0.468749 0.063644 0.130078 +v 0.468749 0.056488 0.124587 +v -0.460914 0.063644 0.130078 +v -0.468751 0.063644 0.130078 +v -0.468751 0.062467 0.139022 +v -0.460914 0.062467 0.139022 +v -0.460914 0.054133 0.142474 +v -0.460914 0.046976 0.136982 +v -0.460914 0.048153 0.128039 +v -0.460914 0.056487 0.124587 +v -0.468751 0.056487 0.124587 +v -0.468751 0.054133 0.142474 +v -0.468751 0.046976 0.136982 +v -0.468751 0.048153 0.128039 +v 0.460912 -0.063644 0.130078 +v 0.468749 -0.063644 0.130078 +v 0.468749 -0.062467 0.139022 +v 0.460912 -0.062467 0.139022 +v 0.460912 -0.054132 0.142474 +v 0.460912 -0.046976 0.136982 +v 0.460912 -0.048153 0.128039 +v 0.460912 -0.056487 0.124587 +v 0.468749 -0.056487 0.124587 +v 0.468749 -0.054132 0.142474 +v 0.468749 -0.046976 0.136982 +v 0.468749 -0.048153 0.128039 +v -0.460914 -0.046976 0.136982 +v -0.468751 -0.046976 0.136982 +v -0.468751 -0.054133 0.142474 +v -0.460914 -0.054133 0.142474 +v -0.460914 -0.062467 0.139022 +v -0.460914 -0.063644 0.130078 +v -0.460914 -0.056488 0.124587 +v -0.460914 -0.048153 0.128039 +v -0.468751 -0.048153 0.128039 +v -0.468751 -0.062467 0.139022 +v -0.468751 -0.063644 0.130078 +v -0.468751 -0.056488 0.124587 +v 0.460912 -0.136982 0.046976 +v 0.468749 -0.136982 0.046976 +v 0.468749 -0.142474 0.054133 +v 0.460912 -0.142474 0.054133 +v 0.460912 -0.139022 0.062467 +v 0.460912 -0.130078 0.063644 +v 0.460912 -0.124587 0.056488 +v 0.460912 -0.128039 0.048153 +v 0.468749 -0.128039 0.048153 +v 0.468749 -0.139022 0.062467 +v 0.468749 -0.130078 0.063644 +v 0.468749 -0.124587 0.056488 +v -0.460914 -0.130078 0.063644 +v -0.468751 -0.130078 0.063644 +v -0.468751 -0.139022 0.062467 +v -0.460914 -0.139022 0.062467 +v -0.460914 -0.142474 0.054133 +v -0.460914 -0.136982 0.046976 +v -0.460914 -0.128039 0.048153 +v -0.460914 -0.124587 0.056487 +v -0.468751 -0.124587 0.056487 +v -0.468751 -0.142474 0.054133 +v -0.468751 -0.136982 0.046976 +v -0.468751 -0.128039 0.048153 +v 0.460912 -0.130078 -0.063644 +v 0.468749 -0.130078 -0.063644 +v 0.468749 -0.139022 -0.062467 +v 0.460912 -0.139022 -0.062467 +v 0.460912 -0.142474 -0.054132 +v 0.460912 -0.136982 -0.046976 +v 0.460912 -0.128039 -0.048153 +v 0.460912 -0.124587 -0.056487 +v 0.468749 -0.124587 -0.056487 +v 0.468749 -0.142474 -0.054132 +v 0.468749 -0.136982 -0.046976 +v 0.468749 -0.128039 -0.048153 +v -0.460914 -0.136982 -0.046976 +v -0.468751 -0.136982 -0.046976 +v -0.468751 -0.142474 -0.054133 +v -0.460914 -0.142474 -0.054133 +v -0.460914 -0.139022 -0.062467 +v -0.460914 -0.130078 -0.063644 +v -0.460914 -0.124587 -0.056487 +v -0.460914 -0.128039 -0.048153 +v -0.468751 -0.128039 -0.048153 +v -0.468751 -0.139022 -0.062467 +v -0.468751 -0.130078 -0.063644 +v -0.468751 -0.124587 -0.056487 +v 0.460912 -0.046976 -0.136982 +v 0.468749 -0.046976 -0.136982 +v 0.468749 -0.054133 -0.142474 +v 0.460912 -0.054133 -0.142474 +v 0.460912 -0.062467 -0.139022 +v 0.460912 -0.063644 -0.130078 +v 0.460912 -0.056488 -0.124587 +v 0.460912 -0.048153 -0.128039 +v 0.468749 -0.048153 -0.128039 +v 0.468749 -0.062467 -0.139022 +v 0.468749 -0.063644 -0.130078 +v 0.468749 -0.056488 -0.124587 +v -0.460914 -0.063644 -0.130078 +v -0.468751 -0.063644 -0.130078 +v -0.468751 -0.062467 -0.139022 +v -0.460914 -0.062467 -0.139022 +v -0.460914 -0.054132 -0.142474 +v -0.460914 -0.046976 -0.136982 +v -0.460914 -0.048153 -0.128039 +v -0.460914 -0.056487 -0.124587 +v -0.468751 -0.056487 -0.124587 +v -0.468751 -0.054132 -0.142474 +v -0.468751 -0.046976 -0.136982 +v -0.468751 -0.048153 -0.128039 +v 0.460912 0.063644 -0.130078 +v 0.468749 0.063644 -0.130078 +v 0.468749 0.062467 -0.139022 +v 0.460912 0.062467 -0.139022 +v 0.460912 0.054132 -0.142474 +v 0.460912 0.046976 -0.136982 +v 0.460912 0.048153 -0.128039 +v 0.460912 0.056487 -0.124587 +v 0.468749 0.056487 -0.124587 +v 0.468749 0.054132 -0.142474 +v 0.468749 0.046976 -0.136982 +v 0.468749 0.048153 -0.128039 +v -0.460914 0.046976 -0.136982 +v -0.468751 0.046976 -0.136982 +v -0.468751 0.054133 -0.142474 +v -0.460914 0.054133 -0.142474 +v -0.460914 0.062467 -0.139022 +v -0.460914 0.063644 -0.130078 +v -0.460914 0.056487 -0.124587 +v -0.460914 0.048153 -0.128039 +v -0.468751 0.048153 -0.128039 +v -0.468751 0.062467 -0.139022 +v -0.468751 0.063644 -0.130078 +v -0.468751 0.056487 -0.124587 +v 0.460912 0.136982 -0.046976 +v 0.468749 0.136982 -0.046976 +v 0.468749 0.142474 -0.054133 +v 0.460912 0.142474 -0.054133 +v 0.460912 0.139022 -0.062467 +v 0.460912 0.130078 -0.063644 +v 0.460912 0.124587 -0.056488 +v 0.460912 0.128039 -0.048153 +v 0.468749 0.128039 -0.048153 +v 0.468749 0.139022 -0.062467 +v 0.468749 0.130078 -0.063644 +v 0.468749 0.124587 -0.056488 +v -0.460914 0.130078 -0.063644 +v -0.468751 0.130078 -0.063644 +v -0.468751 0.139022 -0.062467 +v -0.460914 0.139022 -0.062467 +v -0.460914 0.142474 -0.054133 +v -0.460914 0.136982 -0.046976 +v -0.460914 0.128039 -0.048153 +v -0.460914 0.124587 -0.056487 +v -0.468751 0.124587 -0.056487 +v -0.468751 0.142474 -0.054133 +v -0.468751 0.136982 -0.046976 +v -0.468751 0.128039 -0.048153 +v -0.012312 -0.012312 -0.125000 +v -0.036461 -0.036461 -0.120197 +v -0.059210 -0.059210 -0.110774 +v -0.079683 -0.079683 -0.097094 +v -0.097094 -0.097094 -0.079683 +v -0.110774 -0.110774 -0.059210 +v -0.120197 -0.120197 -0.036461 +v -0.125000 -0.125000 -0.012311 +v -0.125000 -0.125000 0.012311 +v -0.120197 -0.120197 0.036461 +v 0.125000 -0.125001 -0.012311 +v 0.110774 -0.110774 0.059210 +v 0.097094 -0.097094 0.079683 +v 0.079683 -0.079683 0.097094 +v 0.036461 -0.036461 0.120197 +v 0.110774 -0.110774 -0.059210 +v 0.059210 -0.059210 0.110774 +v 0.012311 -0.012311 0.125000 +v -0.500000 0.099603 -0.121367 +v -0.500000 0.074012 -0.138467 +v -0.500000 0.045577 -0.150245 +v -0.500000 0.015390 -0.156250 +v -0.500000 -0.015389 -0.156250 +v -0.500000 -0.045576 -0.150245 +v -0.500000 -0.074012 -0.138467 +v -0.500000 -0.099603 -0.121367 +v -0.500000 -0.121367 -0.099603 +v -0.500000 -0.150245 -0.045576 +v -0.500000 -0.156250 0.015389 +v -0.500000 -0.150245 0.045576 +v -0.500000 -0.121367 0.099603 +v -0.500000 -0.099603 0.121367 +v -0.500000 -0.074012 0.138467 +v -0.500000 -0.045576 0.150245 +v -0.500000 -0.015389 0.156250 +v -0.500000 0.045576 0.150245 +v -0.500000 0.074012 0.138467 +v -0.500000 0.099603 0.121367 +v -0.500000 0.138467 0.074012 +v -0.500000 0.156250 0.015389 +v -0.500000 0.156250 -0.015389 +v -0.500000 0.150245 -0.045576 +v -0.500000 0.138467 -0.074012 +v -0.500000 0.121367 -0.099603 +v -0.500000 -0.138466 -0.074012 +v -0.500000 -0.156250 -0.015389 +v -0.500000 -0.138467 0.074012 +v -0.500000 0.015389 0.156250 +v -0.500000 0.121367 0.099603 +v -0.500000 0.150245 0.045576 +v -0.468750 0.099603 -0.121367 +v -0.468750 0.121367 -0.099603 +v -0.468750 0.074012 -0.138467 +v -0.468750 0.045577 -0.150245 +v -0.468750 0.015390 -0.156250 +v -0.468750 -0.015389 -0.156250 +v -0.468750 -0.045576 -0.150245 +v -0.468750 -0.074012 -0.138467 +v -0.468750 -0.099603 -0.121367 +v -0.468750 -0.121367 -0.099603 +v -0.468750 -0.138466 -0.074012 +v -0.468750 -0.150245 -0.045576 +v -0.468750 -0.156250 -0.015389 +v -0.468750 -0.156250 0.015389 +v -0.468750 -0.150245 0.045576 +v -0.468750 -0.138467 0.074012 +v -0.468750 -0.121367 0.099603 +v -0.468750 -0.099603 0.121367 +v -0.468750 -0.074012 0.138467 +v -0.468750 -0.045576 0.150245 +v -0.468750 -0.015389 0.156250 +v -0.468750 0.015389 0.156250 +v -0.468750 0.074012 0.138467 +v -0.468750 0.045576 0.150245 +v -0.468750 0.099603 0.121367 +v -0.468750 0.121367 0.099603 +v -0.468750 0.138467 0.074012 +v -0.468750 0.150245 0.045576 +v -0.468750 0.156250 -0.015389 +v -0.468750 0.156250 0.015389 +v -0.468750 0.150245 -0.045576 +v -0.468750 0.138467 -0.074012 +v 0.468750 -0.138466 -0.074012 +v 0.468750 -0.150245 -0.045576 +v 0.468750 -0.156250 -0.015389 +v 0.468750 -0.121367 -0.099603 +v 0.468750 -0.156250 0.015389 +v 0.468750 -0.074012 -0.138467 +v 0.468750 -0.099603 -0.121367 +v 0.500000 -0.121367 -0.099603 +v 0.500000 -0.138467 -0.074012 +v 0.500000 -0.150245 -0.045576 +v 0.500000 -0.156250 -0.015389 +v 0.500000 -0.156250 0.015389 +v 0.468750 -0.045576 -0.150245 +v 0.500000 -0.099603 -0.121367 +v 0.468750 -0.150245 0.045576 +v 0.500000 -0.150245 0.045576 +v 0.468750 -0.015389 -0.156250 +v 0.500000 -0.045576 -0.150245 +v 0.500000 -0.074012 -0.138467 +v 0.468750 -0.138467 0.074012 +v 0.500000 -0.138467 0.074012 +v 0.468750 0.015389 -0.156250 +v 0.500000 -0.015389 -0.156250 +v 0.468750 -0.121367 0.099603 +v 0.500000 -0.121367 0.099603 +v 0.468750 0.045576 -0.150245 +v 0.500000 0.015389 -0.156250 +v 0.468750 -0.099603 0.121367 +v 0.500000 -0.099603 0.121367 +v 0.468750 0.074012 -0.138467 +v 0.500000 0.045576 -0.150245 +v 0.468750 -0.045576 0.150245 +v 0.468750 -0.074012 0.138467 +v 0.500000 -0.074012 0.138467 +v 0.468750 0.099603 -0.121367 +v 0.500000 0.074012 -0.138467 +v 0.468750 -0.015389 0.156250 +v 0.500000 -0.045576 0.150245 +v 0.468750 0.121367 -0.099603 +v 0.500000 0.099603 -0.121367 +v 0.468750 0.015389 0.156250 +v 0.500000 -0.015389 0.156250 +v 0.468750 0.138466 -0.074012 +v 0.500000 0.121367 -0.099603 +v 0.468750 0.045576 0.150245 +v 0.500000 0.015389 0.156250 +v 0.468750 0.150245 -0.045577 +v 0.500000 0.138466 -0.074012 +v 0.468750 0.074012 0.138467 +v 0.500000 0.045576 0.150245 +v 0.468750 0.156249 -0.015389 +v 0.500000 0.150245 -0.045577 +v 0.500000 0.156250 0.015389 +v 0.468750 0.099603 0.121367 +v 0.500000 0.074012 0.138467 +v 0.468750 0.156250 0.015389 +v 0.500000 0.156250 -0.015389 +v 0.500000 0.138467 0.074012 +v 0.500000 0.150245 0.045576 +v 0.500000 0.121367 0.099603 +v 0.500000 0.099603 0.121367 +v 0.468750 0.150245 0.045576 +v 0.468750 0.121367 0.099603 +v 0.468750 0.138467 0.074012 +v 0.460912 0.095821 0.108578 +v 0.468749 0.095821 0.108578 +v 0.468749 0.104534 0.110913 +v 0.460912 0.104534 0.110913 +v 0.460912 0.110913 0.104534 +v 0.460912 0.108578 0.095821 +v 0.460912 0.099865 0.093486 +v 0.460912 0.093486 0.099865 +v 0.468749 0.093486 0.099865 +v 0.468749 0.110913 0.104534 +v 0.468749 0.108578 0.095821 +v 0.468749 0.099865 0.093486 +v -0.460914 0.108578 0.095821 +v -0.468751 0.108578 0.095821 +v -0.468751 0.110913 0.104534 +v -0.460914 0.110913 0.104534 +v -0.460914 0.104534 0.110913 +v -0.460914 0.095821 0.108578 +v -0.460914 0.093486 0.099865 +v -0.460914 0.099865 0.093486 +v -0.468751 0.099865 0.093486 +v -0.468751 0.104534 0.110913 +v -0.468751 0.095821 0.108578 +v -0.468751 0.093486 0.099865 +v 0.460912 -0.009021 0.144532 +v 0.468749 -0.009021 0.144532 +v 0.468749 -0.004510 0.152344 +v 0.460912 -0.004510 0.152344 +v 0.460912 0.004510 0.152344 +v 0.460912 0.009021 0.144532 +v 0.460912 0.004510 0.136720 +v 0.460912 -0.004510 0.136720 +v 0.468749 -0.004510 0.136720 +v 0.468749 0.004510 0.152344 +v 0.468749 0.009021 0.144532 +v 0.468749 0.004510 0.136720 +v -0.460914 0.009021 0.144532 +v -0.468751 0.009021 0.144532 +v -0.468751 0.004510 0.152344 +v -0.460914 0.004510 0.152344 +v -0.460914 -0.004510 0.152344 +v -0.460914 -0.009021 0.144532 +v -0.460914 -0.004510 0.136720 +v -0.460914 0.004510 0.136720 +v -0.468751 0.004510 0.136720 +v -0.468751 -0.004510 0.152344 +v -0.468751 -0.009021 0.144532 +v -0.468751 -0.004510 0.136720 +v 0.460912 -0.108578 0.095821 +v 0.468749 -0.108578 0.095821 +v 0.468749 -0.110913 0.104534 +v 0.460912 -0.110913 0.104534 +v 0.460912 -0.104534 0.110913 +v 0.460912 -0.095821 0.108578 +v 0.460912 -0.093486 0.099865 +v 0.460912 -0.099865 0.093486 +v 0.468749 -0.099865 0.093486 +v 0.468749 -0.104534 0.110913 +v 0.468749 -0.095821 0.108578 +v 0.468749 -0.093486 0.099865 +v -0.460914 -0.095821 0.108578 +v -0.468751 -0.095821 0.108578 +v -0.468751 -0.104534 0.110913 +v -0.460914 -0.104534 0.110913 +v -0.460914 -0.110913 0.104534 +v -0.460914 -0.108578 0.095821 +v -0.460914 -0.099865 0.093486 +v -0.460914 -0.093486 0.099865 +v -0.468751 -0.093486 0.099865 +v -0.468751 -0.110913 0.104534 +v -0.468751 -0.108578 0.095821 +v -0.468751 -0.099865 0.093486 +v 0.460912 -0.144532 -0.009021 +v 0.468749 -0.144532 -0.009021 +v 0.468749 -0.152344 -0.004510 +v 0.460912 -0.152344 -0.004510 +v 0.460912 -0.152344 0.004511 +v 0.460912 -0.144532 0.009021 +v 0.460912 -0.136720 0.004510 +v 0.460912 -0.136720 -0.004510 +v 0.468749 -0.136720 -0.004510 +v 0.468749 -0.152344 0.004511 +v 0.468749 -0.144532 0.009021 +v 0.468749 -0.136720 0.004510 +v -0.460914 -0.144532 0.009021 +v -0.468751 -0.144532 0.009021 +v -0.468751 -0.152344 0.004510 +v -0.460914 -0.152344 0.004510 +v -0.460914 -0.152344 -0.004510 +v -0.460914 -0.144532 -0.009021 +v -0.460914 -0.136720 -0.004510 +v -0.460914 -0.136720 0.004510 +v -0.468751 -0.136720 0.004510 +v -0.468751 -0.152344 -0.004510 +v -0.468751 -0.144532 -0.009021 +v -0.468751 -0.136720 -0.004510 +v 0.460912 -0.095821 -0.108578 +v 0.468749 -0.095821 -0.108578 +v 0.468749 -0.104534 -0.110913 +v 0.460912 -0.104534 -0.110913 +v 0.460912 -0.110913 -0.104534 +v 0.460912 -0.108578 -0.095821 +v 0.460912 -0.099865 -0.093486 +v 0.460912 -0.093486 -0.099865 +v 0.468749 -0.093486 -0.099865 +v 0.468749 -0.110913 -0.104534 +v 0.468749 -0.108578 -0.095821 +v 0.468749 -0.099865 -0.093486 +v -0.460914 -0.108578 -0.095821 +v -0.468751 -0.108578 -0.095821 +v -0.468751 -0.110913 -0.104534 +v -0.460914 -0.110913 -0.104534 +v -0.460914 -0.104534 -0.110913 +v -0.460914 -0.095821 -0.108578 +v -0.460914 -0.093486 -0.099865 +v -0.460914 -0.099865 -0.093486 +v -0.468751 -0.099865 -0.093486 +v -0.468751 -0.104534 -0.110913 +v -0.468751 -0.095821 -0.108578 +v -0.468751 -0.093486 -0.099865 +v 0.460912 0.009021 -0.144532 +v 0.468749 0.009021 -0.144532 +v 0.468749 0.004510 -0.152344 +v 0.460912 0.004510 -0.152344 +v 0.460912 -0.004510 -0.152344 +v 0.460912 -0.009021 -0.144532 +v 0.460912 -0.004510 -0.136720 +v 0.460912 0.004510 -0.136720 +v 0.468749 0.004510 -0.136720 +v 0.468749 -0.004510 -0.152344 +v 0.468749 -0.009021 -0.144532 +v 0.468749 -0.004510 -0.136720 +v -0.460914 -0.009021 -0.144532 +v -0.468751 -0.009021 -0.144532 +v -0.468751 -0.004510 -0.152344 +v -0.460914 -0.004510 -0.152344 +v -0.460914 0.004510 -0.152344 +v -0.460914 0.009021 -0.144532 +v -0.460914 0.004510 -0.136720 +v -0.460914 -0.004510 -0.136720 +v -0.468751 -0.004510 -0.136720 +v -0.468751 0.004510 -0.152344 +v -0.468751 0.009021 -0.144532 +v -0.468751 0.004510 -0.136720 +v 0.460912 0.108578 -0.095821 +v 0.468749 0.108578 -0.095821 +v 0.468749 0.110913 -0.104534 +v 0.460912 0.110913 -0.104534 +v 0.460912 0.104534 -0.110913 +v 0.460912 0.095821 -0.108578 +v 0.460912 0.093486 -0.099865 +v 0.460912 0.099865 -0.093486 +v 0.468749 0.099865 -0.093486 +v 0.468749 0.104534 -0.110913 +v 0.468749 0.095821 -0.108578 +v 0.468749 0.093486 -0.099865 +v -0.460914 0.095821 -0.108578 +v -0.468751 0.095821 -0.108578 +v -0.468751 0.104534 -0.110913 +v -0.460914 0.104534 -0.110913 +v -0.460914 0.110913 -0.104534 +v -0.460914 0.108578 -0.095821 +v -0.460914 0.099865 -0.093486 +v -0.460914 0.093486 -0.099865 +v -0.468751 0.093486 -0.099865 +v -0.468751 0.110913 -0.104534 +v -0.468751 0.108578 -0.095821 +v -0.468751 0.099865 -0.093486 +v 0.460912 0.144532 0.009021 +v 0.468749 0.144532 0.009021 +v 0.468749 0.152344 0.004510 +v 0.460912 0.152344 0.004510 +v 0.460912 0.152344 -0.004510 +v 0.460912 0.144532 -0.009021 +v 0.460912 0.136720 -0.004510 +v 0.460912 0.136720 0.004510 +v 0.468749 0.136720 0.004510 +v 0.468749 0.152344 -0.004510 +v 0.468749 0.144532 -0.009021 +v 0.468749 0.136720 -0.004510 +v -0.460914 0.144532 -0.009021 +v -0.468751 0.144532 -0.009021 +v -0.468751 0.152344 -0.004510 +v -0.460914 0.152344 -0.004510 +v -0.460914 0.152344 0.004510 +v -0.460914 0.144532 0.009021 +v -0.460914 0.136720 0.004510 +v -0.460914 0.136720 -0.004510 +v -0.468751 0.136720 -0.004510 +v -0.468751 0.152344 0.004510 +v -0.468751 0.144532 0.009021 +v -0.468751 0.136720 0.004510 +v -0.126770 -0.468750 0.038456 +v -0.131837 -0.468750 0.012985 +v -0.131837 -0.468750 -0.012984 +v -0.126770 -0.468750 -0.038455 +v -0.116832 -0.468750 -0.062448 +v -0.102404 -0.468750 -0.084041 +v -0.084041 -0.468750 -0.102404 +v -0.062448 -0.468750 -0.116832 +v -0.038455 -0.468750 -0.126770 +v -0.012985 -0.468750 -0.131836 +v 0.012985 -0.468750 -0.131836 +v 0.062448 -0.468750 -0.116832 +v 0.084041 -0.468750 -0.102404 +v 0.102404 -0.468750 -0.084041 +v 0.116832 -0.468750 -0.062448 +v 0.126770 -0.468750 -0.038455 +v 0.131836 -0.468750 -0.012985 +v 0.131836 -0.468750 0.012985 +v 0.126770 -0.468750 0.038455 +v 0.116832 -0.468750 0.062448 +v 0.084041 -0.468750 0.102404 +v 0.102404 -0.468750 0.084041 +v 0.062448 -0.468750 0.116832 +v 0.038455 -0.468750 0.126770 +v -0.012985 -0.468750 0.131837 +v -0.062448 -0.468750 0.116832 +v -0.038455 -0.468750 0.126770 +v -0.084041 -0.468750 0.102404 +v -0.102404 -0.468750 0.084041 +v -0.116832 -0.468750 0.062448 +v 0.038455 -0.468750 -0.126770 +v 0.012985 -0.468750 0.131837 +v -0.110774 -0.437501 0.059210 +v -0.120197 -0.437501 0.036462 +v -0.125001 -0.437501 0.012312 +v -0.125001 -0.437501 -0.012311 +v -0.120197 -0.437501 -0.036461 +v -0.110774 -0.437501 -0.059210 +v -0.097094 -0.437501 -0.079683 +v -0.079683 -0.437501 -0.097094 +v -0.059210 -0.437501 -0.110774 +v -0.036461 -0.437501 -0.120197 +v -0.012312 -0.437501 -0.125000 +v 0.012311 -0.437501 -0.125000 +v 0.036461 -0.437501 -0.120197 +v 0.059210 -0.437501 -0.110774 +v 0.079683 -0.437501 -0.097094 +v 0.097094 -0.437501 -0.079683 +v 0.110774 -0.437501 -0.059210 +v 0.120197 -0.437501 -0.036461 +v 0.125000 -0.437501 -0.012311 +v 0.125000 -0.437501 0.012312 +v 0.120197 -0.437501 0.036461 +v 0.110774 -0.437501 0.059210 +v 0.097094 -0.437501 0.079683 +v 0.079683 -0.437501 0.097094 +v 0.059210 -0.437501 0.110774 +v 0.036461 -0.437501 0.120197 +v 0.012311 -0.437501 0.125001 +v -0.012311 -0.437501 0.125001 +v -0.036461 -0.437501 0.120197 +v -0.059210 -0.437501 0.110774 +v -0.079683 -0.437501 0.097094 +v -0.097094 -0.437501 0.079683 +v -0.136982 -0.460914 0.046976 +v -0.136982 -0.468751 0.046976 +v -0.142474 -0.468751 0.054133 +v -0.142474 -0.460914 0.054133 +v -0.139022 -0.460914 0.062467 +v -0.130078 -0.460914 0.063644 +v -0.124587 -0.460914 0.056488 +v -0.128039 -0.460914 0.048154 +v -0.128039 -0.468751 0.048154 +v -0.139022 -0.468751 0.062467 +v -0.130078 -0.468751 0.063644 +v -0.124587 -0.468751 0.056488 +v -0.063644 -0.460914 0.130078 +v -0.063644 -0.468751 0.130078 +v -0.062467 -0.468751 0.139022 +v -0.062467 -0.460914 0.139022 +v -0.054133 -0.460914 0.142474 +v -0.046976 -0.460914 0.136982 +v -0.048153 -0.460914 0.128039 +v -0.056487 -0.460914 0.124587 +v -0.056487 -0.468751 0.124587 +v -0.054133 -0.468751 0.142474 +v -0.046976 -0.468751 0.136982 +v -0.048153 -0.468751 0.128039 +v 0.046976 -0.460914 0.136982 +v 0.046976 -0.468751 0.136982 +v 0.054133 -0.468751 0.142474 +v 0.054133 -0.460914 0.142474 +v 0.062467 -0.460914 0.139022 +v 0.063644 -0.460914 0.130078 +v 0.056487 -0.460914 0.124587 +v 0.048153 -0.460914 0.128039 +v 0.048153 -0.468751 0.128039 +v 0.062467 -0.468751 0.139022 +v 0.063644 -0.468751 0.130078 +v 0.056487 -0.468751 0.124587 +v 0.130078 -0.460914 0.063644 +v 0.130078 -0.468751 0.063644 +v 0.139022 -0.468751 0.062467 +v 0.139022 -0.460914 0.062467 +v 0.142474 -0.460914 0.054133 +v 0.136982 -0.460914 0.046976 +v 0.128039 -0.460914 0.048153 +v 0.124587 -0.460914 0.056488 +v 0.124587 -0.468751 0.056488 +v 0.142474 -0.468751 0.054133 +v 0.136982 -0.468751 0.046976 +v 0.128039 -0.468751 0.048153 +v 0.136982 -0.460914 -0.046976 +v 0.136982 -0.468751 -0.046976 +v 0.142474 -0.468751 -0.054133 +v 0.142474 -0.460914 -0.054133 +v 0.139022 -0.460914 -0.062467 +v 0.130078 -0.460914 -0.063644 +v 0.124587 -0.460914 -0.056487 +v 0.128039 -0.460914 -0.048153 +v 0.128039 -0.468751 -0.048153 +v 0.139022 -0.468751 -0.062467 +v 0.130078 -0.468751 -0.063644 +v 0.124587 -0.468751 -0.056487 +v 0.063644 -0.460914 -0.130078 +v 0.063644 -0.468751 -0.130078 +v 0.062467 -0.468751 -0.139022 +v 0.062467 -0.460914 -0.139022 +v 0.054132 -0.460914 -0.142474 +v 0.046976 -0.460914 -0.136982 +v 0.048153 -0.460914 -0.128039 +v 0.056487 -0.460914 -0.124587 +v 0.056487 -0.468751 -0.124587 +v 0.054132 -0.468751 -0.142474 +v 0.046976 -0.468751 -0.136982 +v 0.048153 -0.468751 -0.128039 +v -0.046976 -0.460914 -0.136982 +v -0.046976 -0.468751 -0.136982 +v -0.054133 -0.468751 -0.142474 +v -0.054133 -0.460914 -0.142474 +v -0.062467 -0.460914 -0.139022 +v -0.063644 -0.460914 -0.130078 +v -0.056488 -0.460914 -0.124587 +v -0.048153 -0.460914 -0.128039 +v -0.048153 -0.468751 -0.128039 +v -0.062467 -0.468751 -0.139022 +v -0.063644 -0.468751 -0.130078 +v -0.056488 -0.468751 -0.124587 +v -0.130078 -0.460914 -0.063644 +v -0.130078 -0.468751 -0.063644 +v -0.139022 -0.468751 -0.062467 +v -0.139022 -0.460914 -0.062467 +v -0.142474 -0.460914 -0.054132 +v -0.136982 -0.460914 -0.046976 +v -0.128039 -0.460914 -0.048153 +v -0.124587 -0.460914 -0.056487 +v -0.124587 -0.468751 -0.056487 +v -0.142474 -0.468751 -0.054132 +v -0.136982 -0.468751 -0.046976 +v -0.128039 -0.468751 -0.048153 +v 0.012312 -0.012312 -0.125000 +v 0.036461 -0.036461 -0.120197 +v 0.059210 -0.059210 -0.110774 +v 0.079683 -0.079683 -0.097094 +v 0.097094 -0.097094 -0.079683 +v 0.120197 -0.120197 -0.036461 +v 0.125000 -0.125000 0.012311 +v 0.120197 -0.120197 0.036461 +v -0.110774 -0.110774 0.059210 +v -0.097094 -0.097094 0.079683 +v -0.079683 -0.079683 0.097094 +v -0.059210 -0.059210 0.110774 +v -0.036461 -0.036461 0.120197 +v -0.012311 -0.012312 0.125000 +v -0.099603 -0.500000 -0.121367 +v -0.074012 -0.500000 -0.138466 +v -0.045577 -0.500000 -0.150245 +v -0.015390 -0.500000 -0.156249 +v 0.015389 -0.500000 -0.156249 +v 0.045576 -0.500000 -0.150245 +v 0.074012 -0.500000 -0.138467 +v 0.099603 -0.500000 -0.121367 +v 0.121367 -0.500000 -0.099603 +v 0.150245 -0.500000 -0.045576 +v 0.156249 -0.500000 0.015389 +v 0.150245 -0.500000 0.045576 +v 0.121367 -0.500000 0.099603 +v 0.099603 -0.500000 0.121367 +v 0.074012 -0.500000 0.138467 +v 0.045576 -0.500000 0.150245 +v 0.015389 -0.500000 0.156250 +v -0.045576 -0.500000 0.150245 +v -0.074012 -0.500000 0.138467 +v -0.099603 -0.500000 0.121367 +v -0.138467 -0.500000 0.074012 +v -0.156250 -0.500000 0.015389 +v -0.156250 -0.500000 -0.015389 +v -0.150245 -0.500000 -0.045576 +v -0.138467 -0.500000 -0.074012 +v -0.121367 -0.500000 -0.099603 +v 0.138466 -0.500000 -0.074012 +v 0.156249 -0.500000 -0.015389 +v 0.138467 -0.500000 0.074012 +v -0.015389 -0.500000 0.156250 +v -0.121367 -0.500000 0.099603 +v -0.150245 -0.500000 0.045576 +v -0.099604 -0.468750 -0.121367 +v -0.121367 -0.468750 -0.099603 +v -0.074012 -0.468750 -0.138466 +v -0.045577 -0.468750 -0.150245 +v -0.015390 -0.468750 -0.156250 +v 0.015389 -0.468750 -0.156250 +v 0.045576 -0.468750 -0.150245 +v 0.074012 -0.468750 -0.138467 +v 0.099603 -0.468750 -0.121367 +v 0.121367 -0.468750 -0.099603 +v 0.138466 -0.468750 -0.074012 +v 0.150245 -0.468750 -0.045576 +v 0.156249 -0.468750 -0.015389 +v 0.156249 -0.468750 0.015389 +v 0.150245 -0.468750 0.045576 +v 0.138467 -0.468750 0.074012 +v 0.121367 -0.468750 0.099603 +v 0.099603 -0.468750 0.121367 +v 0.074012 -0.468750 0.138467 +v 0.045576 -0.468750 0.150245 +v 0.015389 -0.468750 0.156250 +v -0.015389 -0.468750 0.156250 +v -0.074012 -0.468750 0.138467 +v -0.045576 -0.468750 0.150245 +v -0.099603 -0.468750 0.121367 +v -0.121367 -0.468750 0.099603 +v -0.138467 -0.468750 0.074012 +v -0.150245 -0.468750 0.045576 +v -0.156250 -0.468750 -0.015389 +v -0.156250 -0.468750 0.015389 +v -0.150245 -0.468750 -0.045576 +v -0.138467 -0.468750 -0.074012 +v -0.108578 -0.460914 0.095821 +v -0.108578 -0.468751 0.095821 +v -0.110913 -0.468751 0.104534 +v -0.110913 -0.460914 0.104534 +v -0.104534 -0.460914 0.110913 +v -0.095821 -0.460914 0.108578 +v -0.093486 -0.460914 0.099865 +v -0.099865 -0.460914 0.093486 +v -0.099865 -0.468751 0.093486 +v -0.104534 -0.468751 0.110913 +v -0.095821 -0.468751 0.108578 +v -0.093486 -0.468751 0.099865 +v -0.009021 -0.460914 0.144532 +v -0.009021 -0.468751 0.144532 +v -0.004510 -0.468751 0.152344 +v -0.004510 -0.460914 0.152344 +v 0.004510 -0.460914 0.152344 +v 0.009021 -0.460914 0.144532 +v 0.004510 -0.460914 0.136720 +v -0.004510 -0.460914 0.136720 +v -0.004510 -0.468751 0.136720 +v 0.004510 -0.468751 0.152344 +v 0.009021 -0.468751 0.144532 +v 0.004510 -0.468751 0.136720 +v 0.095821 -0.460914 0.108578 +v 0.095821 -0.468751 0.108578 +v 0.104534 -0.468751 0.110913 +v 0.104534 -0.460914 0.110913 +v 0.110913 -0.460914 0.104534 +v 0.108578 -0.460914 0.095821 +v 0.099865 -0.460914 0.093486 +v 0.093486 -0.460914 0.099865 +v 0.093486 -0.468751 0.099865 +v 0.110913 -0.468751 0.104534 +v 0.108578 -0.468751 0.095821 +v 0.099865 -0.468751 0.093486 +v 0.144532 -0.460914 0.009021 +v 0.144532 -0.468751 0.009021 +v 0.152344 -0.468751 0.004510 +v 0.152344 -0.460914 0.004510 +v 0.152344 -0.460914 -0.004510 +v 0.144532 -0.460914 -0.009021 +v 0.136720 -0.460914 -0.004510 +v 0.136720 -0.460914 0.004510 +v 0.136720 -0.468751 0.004510 +v 0.152344 -0.468751 -0.004510 +v 0.144532 -0.468751 -0.009021 +v 0.136720 -0.468751 -0.004510 +v 0.108578 -0.460914 -0.095821 +v 0.108578 -0.468751 -0.095821 +v 0.110913 -0.468751 -0.104534 +v 0.110913 -0.460914 -0.104534 +v 0.104534 -0.460914 -0.110913 +v 0.095821 -0.460914 -0.108578 +v 0.093486 -0.460914 -0.099865 +v 0.099865 -0.460914 -0.093486 +v 0.099865 -0.468751 -0.093486 +v 0.104534 -0.468751 -0.110913 +v 0.095821 -0.468751 -0.108578 +v 0.093486 -0.468751 -0.099865 +v 0.009021 -0.460914 -0.144532 +v 0.009021 -0.468751 -0.144532 +v 0.004510 -0.468751 -0.152344 +v 0.004510 -0.460914 -0.152344 +v -0.004510 -0.460914 -0.152344 +v -0.009021 -0.460914 -0.144532 +v -0.004510 -0.460914 -0.136720 +v 0.004510 -0.460914 -0.136720 +v 0.004510 -0.468751 -0.136720 +v -0.004510 -0.468751 -0.152344 +v -0.009021 -0.468751 -0.144532 +v -0.004510 -0.468751 -0.136720 +v -0.095821 -0.460914 -0.108578 +v -0.095821 -0.468751 -0.108578 +v -0.104534 -0.468751 -0.110913 +v -0.104534 -0.460914 -0.110913 +v -0.110913 -0.460914 -0.104534 +v -0.108578 -0.460914 -0.095821 +v -0.099865 -0.460914 -0.093486 +v -0.093486 -0.460914 -0.099865 +v -0.093486 -0.468751 -0.099865 +v -0.110913 -0.468751 -0.104534 +v -0.108578 -0.468751 -0.095821 +v -0.099865 -0.468751 -0.093486 +v -0.144532 -0.460914 -0.009021 +v -0.144532 -0.468751 -0.009021 +v -0.152344 -0.468751 -0.004510 +v -0.152344 -0.460914 -0.004510 +v -0.152344 -0.460914 0.004511 +v -0.144532 -0.460914 0.009021 +v -0.136720 -0.460914 0.004510 +v -0.136720 -0.460914 -0.004510 +v -0.136720 -0.468751 -0.004510 +v -0.152344 -0.468751 0.004511 +v -0.144532 -0.468751 0.009021 +v -0.136720 -0.468751 0.004510 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 1.0081 0.2851 +vt 0.9769 0.2723 +vt 1.0393 0.2971 +vt 1.0706 0.3080 +vt 0.9459 0.0196 +vt 0.9458 0.0339 +vt 0.9151 0.0339 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 0.9767 0.0339 +vt 1.0076 0.0195 +vt 1.0075 0.0339 +vt 0.3215 0.3169 +vt 0.3528 0.3076 +vt 0.8843 0.0339 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.0383 0.0339 +vt 1.1328 0.2072 +vt 1.1017 0.2145 +vt 1.0999 0.0340 +vt 1.1306 0.0342 +vt 0.8537 0.0195 +vt 0.8536 0.0338 +vt 1.0694 0.0196 +vt 1.0691 0.0339 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.8229 0.0194 +vt 0.8228 0.0338 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.7920 0.0337 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.7613 0.0193 +vt 0.7611 0.0336 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.7302 0.0335 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6995 0.0191 +vt 0.6994 0.0334 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.6686 0.0189 +vt 0.6685 0.0333 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.6375 0.0332 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.6066 0.0331 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4467 0.2720 +vt 0.4154 0.2848 +vt 0.5759 0.0186 +vt 0.5757 0.0330 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3842 0.2968 +vt 0.5447 0.0328 +vt 0.5450 0.0184 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3892 0.0320 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.4204 0.0322 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.4516 0.0324 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 1.0394 0.2346 +vt 1.0082 0.2466 +vt 1.0706 0.2237 +vt 1.1018 0.3172 +vt 0.9770 0.2593 +vt 0.4780 0.2720 +vt 0.4790 0.4981 +vt 0.4481 0.4981 +vt 0.4467 0.2720 +vt 0.4468 0.2590 +vt 0.4156 0.2462 +vt 0.3530 0.2232 +vt 0.3843 0.2341 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 1.1952 0.1995 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.9457 0.2723 +vt 0.9145 0.2850 +vt 1.0393 0.2971 +vt 1.0081 0.2851 +vt 1.0706 0.3080 +vt 0.8833 0.2970 +vt 1.1018 0.3172 +vt 0.9769 0.2723 +vt 0.3215 0.3169 +vt 0.3528 0.3076 +vt 0.5715 0.3076 +vt 0.6027 0.3168 +vt 0.4154 0.2848 +vt 0.3842 0.2968 +vt 0.5092 0.2848 +vt 0.5403 0.2968 +vt 0.8521 0.3078 +vt 0.8209 0.3169 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vn -1.0000 -0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn -0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.6857 0.2113 -0.6965 +vn -0.6857 0.2113 -0.6965 +vn -0.6857 0.3431 -0.6419 +vn 0.6857 0.3431 -0.6419 +vn 0.6857 0.0713 -0.7244 +vn -0.6857 0.0713 -0.7244 +vn 0.6857 -0.0713 -0.7244 +vn -0.6857 -0.0713 -0.7244 +vn 0.6857 -0.2113 -0.6965 +vn -0.6857 -0.2113 -0.6965 +vn 0.6857 -0.3431 -0.6419 +vn -0.6857 -0.3431 -0.6419 +vn 0.6857 -0.4617 -0.5626 +vn -0.6857 -0.4617 -0.5626 +vn 0.6857 -0.5626 -0.4617 +vn -0.6857 -0.5626 -0.4617 +vn 0.6857 -0.6419 -0.3431 +vn -0.6857 -0.6419 -0.3431 +vn 0.6857 -0.6965 -0.2113 +vn -0.6857 -0.6965 -0.2113 +vn 0.6857 -0.7244 -0.0713 +vn -0.6857 -0.7244 -0.0713 +vn 0.6857 -0.7244 0.0713 +vn -0.6857 -0.7244 0.0713 +vn 0.6857 -0.6965 0.2113 +vn -0.6857 -0.6965 0.2113 +vn 0.6857 -0.6419 0.3431 +vn -0.6857 -0.6419 0.3431 +vn 0.6857 -0.5626 0.4617 +vn -0.6857 -0.5626 0.4617 +vn 0.6857 -0.4617 0.5626 +vn -0.6857 -0.4617 0.5626 +vn 0.6857 -0.3431 0.6419 +vn -0.6857 -0.3431 0.6419 +vn 0.6857 -0.2113 0.6965 +vn -0.6857 -0.2113 0.6965 +vn 0.6857 -0.0713 0.7244 +vn -0.6857 -0.0713 0.7244 +vn 0.6857 0.0713 0.7244 +vn -0.6857 0.0713 0.7244 +vn 0.6857 0.2113 0.6965 +vn -0.6857 0.2113 0.6965 +vn 0.6857 0.4617 0.5626 +vn -0.6857 0.4617 0.5626 +vn -0.6857 0.3431 0.6419 +vn 0.6857 0.3431 0.6419 +vn 0.6857 0.5626 0.4617 +vn -0.6857 0.5626 0.4617 +vn 0.6857 0.6419 0.3431 +vn -0.6857 0.6419 0.3431 +vn 0.6857 0.6965 0.2113 +vn -0.6857 0.6965 0.2113 +vn 0.6857 0.7244 0.0713 +vn -0.6857 0.7244 0.0713 +vn 0.6857 0.6965 -0.2113 +vn -0.6857 0.6965 -0.2113 +vn -0.6857 0.7244 -0.0713 +vn 0.6857 0.7244 -0.0713 +vn 0.6857 0.6419 -0.3431 +vn -0.6857 0.6419 -0.3431 +vn 0.6857 0.5626 -0.4617 +vn -0.6857 0.5626 -0.4617 +vn 0.2147 0.8614 0.4604 +vn 0.1087 0.8767 0.4686 +vn 0.1087 0.9513 0.2886 +vn 0.2147 0.9346 0.2835 +vn 0.2147 0.9720 0.0957 +vn 0.1087 0.9893 0.0974 +vn 0.2147 0.9720 -0.0957 +vn 0.1087 0.9893 -0.0974 +vn 0.2147 0.9346 -0.2835 +vn 0.1087 0.9513 -0.2886 +vn 0.2147 0.8614 -0.4604 +vn 0.1087 0.8767 -0.4686 +vn 0.2147 0.7550 -0.6196 +vn 0.1087 0.7684 -0.6306 +vn 0.1087 0.6306 -0.7684 +vn 0.2147 0.6196 -0.7550 +vn 0.2147 0.4604 -0.8614 +vn 0.1087 0.4686 -0.8767 +vn 0.2147 0.2835 -0.9346 +vn 0.1087 0.2886 -0.9513 +vn 0.2147 0.0957 -0.9720 +vn 0.1087 0.0974 -0.9893 +vn 0.1087 -0.0974 -0.9893 +vn 0.2147 -0.0957 -0.9720 +vn 0.1087 -0.2886 -0.9513 +vn 0.2147 -0.2835 -0.9346 +vn 0.2147 -0.4604 -0.8614 +vn 0.1087 -0.4686 -0.8767 +vn 0.1087 -0.6306 -0.7684 +vn 0.2147 -0.6196 -0.7550 +vn 0.1087 -0.7684 -0.6306 +vn 0.2147 -0.7550 -0.6196 +vn 0.2147 -0.8614 -0.4604 +vn 0.1087 -0.8767 -0.4686 +vn 0.1087 -0.9513 -0.2886 +vn 0.2147 -0.9346 -0.2835 +vn 0.2147 -0.9720 -0.0957 +vn 0.1087 -0.9893 -0.0974 +vn 0.1087 -0.9893 0.0974 +vn 0.2147 -0.9720 0.0957 +vn 0.2147 -0.9346 0.2835 +vn 0.1087 -0.9513 0.2886 +vn 0.1087 -0.8767 0.4686 +vn 0.2147 -0.8614 0.4604 +vn 0.1087 -0.7684 0.6306 +vn 0.2147 -0.7550 0.6196 +vn 0.1087 -0.6306 0.7684 +vn 0.2147 -0.6196 0.7550 +vn 0.1087 -0.4686 0.8767 +vn 0.2147 -0.4604 0.8614 +vn 0.1087 -0.2886 0.9513 +vn 0.2147 -0.2835 0.9346 +vn 0.1087 -0.0974 0.9893 +vn 0.2147 -0.0957 0.9720 +vn 0.2147 0.2835 0.9346 +vn 0.2147 0.0957 0.9720 +vn 0.1087 0.0974 0.9893 +vn 0.1087 0.2886 0.9513 +vn 0.2147 0.6196 0.7550 +vn 0.2147 0.4604 0.8614 +vn 0.1087 0.4686 0.8767 +vn 0.1087 0.6306 0.7684 +vn 0.2147 0.7550 0.6196 +vn 0.1087 0.7684 0.6306 +vn -0.1243 -0.1243 -0.9844 +vn -0.0247 -0.0247 -0.9994 +vn -0.2267 -0.2267 -0.9472 +vn -0.3333 -0.3333 -0.8819 +vn -0.2147 0.0957 -0.9720 +vn -0.1087 0.0974 -0.9893 +vn -0.1087 0.2886 -0.9513 +vn -0.2147 0.2835 -0.9346 +vn -0.2147 -0.0957 -0.9720 +vn -0.1087 -0.0974 -0.9893 +vn -0.2147 -0.2835 -0.9346 +vn -0.1087 -0.2886 -0.9513 +vn -0.4431 -0.4431 0.7793 +vn -0.3333 -0.3333 0.8819 +vn -0.1087 0.4686 -0.8767 +vn -0.2147 0.4604 -0.8614 +vn -0.2147 -0.4604 -0.8614 +vn -0.1087 -0.4686 -0.8767 +vn 0.5510 -0.5510 -0.6267 +vn 0.4431 -0.4431 -0.7793 +vn -0.1087 -0.7684 -0.6306 +vn -0.1087 -0.8767 -0.4686 +vn -0.2147 0.6196 -0.7550 +vn -0.1087 0.6306 -0.7684 +vn -0.2147 -0.6196 -0.7550 +vn -0.1087 -0.6306 -0.7684 +vn 0.6437 -0.6437 -0.4139 +vn -0.1087 -0.9513 -0.2886 +vn -0.2147 0.7550 -0.6196 +vn -0.1087 0.7684 -0.6306 +vn -0.2147 -0.7550 -0.6196 +vn -0.2147 0.8614 -0.4604 +vn -0.1087 0.8767 -0.4686 +vn -0.2147 -0.8614 -0.4604 +vn 0.6995 -0.6995 0.1458 +vn 0.6995 -0.6995 -0.1458 +vn -0.1087 -0.9893 -0.0974 +vn -0.1087 -0.9893 0.0974 +vn -0.2147 0.9346 -0.2835 +vn -0.1087 0.9513 -0.2886 +vn -0.2147 -0.9346 -0.2835 +vn -0.2147 0.9720 -0.0957 +vn -0.1087 0.9893 -0.0974 +vn -0.2147 -0.9720 -0.0957 +vn 0.5510 -0.5510 0.6267 +vn 0.6437 -0.6437 0.4139 +vn -0.1087 -0.9513 0.2886 +vn -0.1087 -0.8767 0.4686 +vn -0.2147 0.9720 0.0957 +vn -0.1087 0.9893 0.0974 +vn -0.2147 -0.9720 0.0957 +vn -0.6857 0.4617 -0.5626 +vn 0.6857 0.4617 -0.5626 +vn 0.4431 -0.4431 0.7793 +vn -0.1087 -0.7684 0.6306 +vn -0.1087 0.0974 0.9893 +vn -0.1087 0.2886 0.9513 +vn -0.2147 0.9346 0.2835 +vn -0.1087 0.9513 0.2886 +vn -0.2147 -0.9346 0.2835 +vn -0.2147 0.8614 0.4604 +vn -0.1087 0.8767 0.4686 +vn -0.2147 -0.8614 0.4604 +vn -0.2147 0.7550 0.6196 +vn -0.1087 0.7684 0.6306 +vn -0.2147 -0.7550 0.6196 +vn -0.0247 -0.0247 0.9994 +vn -0.1243 -0.1243 0.9844 +vn -0.2147 0.6196 0.7550 +vn -0.1087 0.6306 0.7684 +vn -0.2147 -0.6196 0.7550 +vn -0.1087 -0.6306 0.7684 +vn -0.2267 -0.2267 0.9472 +vn -0.1087 0.4686 0.8767 +vn -0.2147 0.4604 0.8614 +vn -0.2147 -0.4604 0.8614 +vn -0.1087 -0.4686 0.8767 +vn -0.2147 0.2835 0.9346 +vn -0.2147 -0.2835 0.9346 +vn -0.1087 -0.2886 0.9513 +vn -0.2147 0.0957 0.9720 +vn -0.2147 -0.0957 0.9720 +vn -0.1087 -0.0974 0.9893 +vn -0.6100 -0.3032 0.7321 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.6088 0.7933 +vn -0.6100 0.4824 0.6287 +vn -0.6100 -0.7856 0.1034 +vn 0.0000 -0.9914 0.1305 +vn 0.0000 0.9914 -0.1305 +vn -0.6100 0.7856 -0.1034 +vn 0.0000 0.3827 -0.9239 +vn -0.6100 0.3032 -0.7321 +vn 0.0000 -0.6088 -0.7933 +vn -0.6100 -0.4824 -0.6287 +vn 0.6100 0.3032 -0.7321 +vn 0.6100 0.7856 -0.1034 +vn 0.6100 -0.4824 -0.6287 +vn 0.6100 0.4824 0.6287 +vn 0.6100 -0.3032 0.7321 +vn 0.6100 -0.7856 0.1034 +vn -0.6100 -0.7321 0.3032 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.1305 0.9914 +vn -0.6100 -0.1034 0.7856 +vn -0.6100 -0.6287 -0.4824 +vn 0.0000 -0.7933 -0.6088 +vn 0.0000 0.7933 0.6088 +vn -0.6100 0.6287 0.4824 +vn 0.0000 0.9239 -0.3827 +vn -0.6100 0.7321 -0.3032 +vn 0.0000 0.1305 -0.9914 +vn -0.6100 0.1034 -0.7856 +vn 0.6100 0.7321 -0.3032 +vn 0.6100 0.6287 0.4824 +vn 0.6100 0.1034 -0.7856 +vn 0.6100 -0.1034 0.7856 +vn 0.6100 -0.7321 0.3032 +vn 0.6100 -0.6287 -0.4824 +vn -0.6100 -0.7321 -0.3032 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 -0.7933 0.6088 +vn -0.6100 -0.6287 0.4824 +vn -0.6100 -0.1034 -0.7856 +vn 0.0000 -0.1305 -0.9914 +vn 0.0000 0.1305 0.9914 +vn -0.6100 0.1034 0.7856 +vn 0.0000 0.9239 0.3827 +vn -0.6100 0.7321 0.3032 +vn 0.0000 0.7933 -0.6088 +vn -0.6100 0.6287 -0.4824 +vn 0.6100 0.7321 0.3032 +vn 0.6100 0.1034 0.7856 +vn 0.6100 0.6287 -0.4824 +vn 0.6100 -0.6287 0.4824 +vn 0.6100 -0.7321 -0.3032 +vn 0.6100 -0.1034 -0.7856 +vn -0.6100 -0.3032 -0.7321 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.9914 -0.1305 +vn -0.6100 -0.7856 -0.1034 +vn -0.6100 0.4824 -0.6287 +vn 0.0000 0.6088 -0.7933 +vn 0.0000 -0.6088 0.7933 +vn -0.6100 -0.4824 0.6287 +vn 0.0000 0.3827 0.9239 +vn -0.6100 0.3032 0.7321 +vn 0.0000 0.9914 0.1305 +vn -0.6100 0.7856 0.1034 +vn 0.6100 0.3032 0.7321 +vn 0.6100 -0.4824 0.6287 +vn 0.6100 0.7856 0.1034 +vn 0.6100 -0.7856 -0.1034 +vn 0.6100 -0.3032 -0.7321 +vn 0.6100 0.4824 -0.6287 +vn 0.2267 -0.2267 -0.9472 +vn 0.1243 -0.1243 -0.9844 +vn 0.3333 -0.3333 -0.8819 +vn -0.4431 -0.4431 -0.7793 +vn 0.0247 -0.0247 -0.9994 +vn -0.0974 0.1087 0.9893 +vn 0.0974 0.1087 0.9893 +vn 0.0247 -0.0247 0.9994 +vn 0.1243 -0.1243 0.9844 +vn 0.3333 -0.3333 0.8819 +vn 0.2267 -0.2267 0.9472 +vn -0.5510 -0.5510 -0.6267 +vn -0.6437 -0.6437 -0.4139 +vn -0.6995 -0.6995 -0.1458 +vn -0.6995 -0.6995 0.1458 +vn -0.6437 -0.6437 0.4139 +vn -0.5510 -0.5510 0.6267 +vn -0.6100 -0.5603 0.5603 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.2588 0.9659 +vn -0.6100 0.2051 0.7654 +vn -0.6100 -0.7654 -0.2051 +vn 0.0000 -0.9659 -0.2588 +vn 0.0000 0.9659 0.2588 +vn -0.6100 0.7654 0.2051 +vn 0.0000 0.7071 -0.7071 +vn -0.6100 0.5603 -0.5603 +vn 0.0000 -0.2588 -0.9659 +vn -0.6100 -0.2051 -0.7654 +vn 0.6100 0.5603 -0.5603 +vn 0.6100 0.7654 0.2051 +vn 0.6100 -0.2051 -0.7654 +vn 0.6100 0.2051 0.7654 +vn 0.6100 -0.5603 0.5603 +vn 0.6100 -0.7654 -0.2051 +vn -0.6100 -0.7924 0.0000 +vn 0.0000 -0.5000 0.8660 +vn -0.6100 -0.3962 0.6862 +vn -0.6100 -0.3962 -0.6862 +vn 0.0000 -0.5000 -0.8660 +vn 0.0000 0.5000 0.8660 +vn -0.6100 0.3962 0.6862 +vn -0.6100 0.7924 0.0000 +vn 0.0000 0.5000 -0.8660 +vn -0.6100 0.3962 -0.6862 +vn 0.6100 0.7924 0.0000 +vn 0.6100 0.3962 0.6862 +vn 0.6100 0.3962 -0.6862 +vn 0.6100 -0.3962 0.6862 +vn 0.6100 -0.7924 0.0000 +vn 0.6100 -0.3962 -0.6862 +vn -0.6100 -0.5603 -0.5603 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.9659 0.2588 +vn -0.6100 -0.7654 0.2051 +vn -0.6100 0.2051 -0.7654 +vn 0.0000 0.2588 -0.9659 +vn 0.0000 -0.2588 0.9659 +vn -0.6100 -0.2051 0.7654 +vn 0.0000 0.7071 0.7071 +vn -0.6100 0.5603 0.5603 +vn 0.0000 0.9659 -0.2588 +vn -0.6100 0.7654 -0.2051 +vn 0.6100 0.5603 0.5603 +vn 0.6100 -0.2051 0.7654 +vn 0.6100 0.7654 -0.2051 +vn 0.6100 -0.7654 0.2051 +vn 0.6100 -0.5603 -0.5603 +vn 0.6100 0.2051 -0.7654 +vn -0.6100 0.0000 -0.7924 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.8660 -0.5000 +vn -0.6100 -0.6862 -0.3962 +vn -0.6100 0.6862 -0.3962 +vn 0.0000 0.8660 -0.5000 +vn 0.0000 -0.8660 0.5000 +vn -0.6100 -0.6862 0.3962 +vn 0.0000 0.0000 1.0000 +vn -0.6100 0.0000 0.7924 +vn 0.0000 0.8660 0.5000 +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.6100 -0.6862 -0.3962 +vn 0.6100 0.0000 -0.7924 +vn 0.6100 0.6862 -0.3962 +vn -0.2113 0.6857 -0.6965 +vn -0.2113 -0.6857 -0.6965 +vn -0.3431 -0.6857 -0.6419 +vn -0.3431 0.6857 -0.6419 +vn -0.0713 0.6857 -0.7244 +vn -0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn 0.0713 -0.6857 -0.7244 +vn 0.2113 0.6857 -0.6965 +vn 0.2113 -0.6857 -0.6965 +vn 0.3431 0.6857 -0.6419 +vn 0.3431 -0.6857 -0.6419 +vn 0.4617 0.6857 -0.5626 +vn 0.4617 -0.6857 -0.5626 +vn 0.5626 0.6857 -0.4617 +vn 0.5626 -0.6857 -0.4617 +vn 0.6419 0.6857 -0.3431 +vn 0.6419 -0.6857 -0.3431 +vn 0.6965 0.6857 -0.2113 +vn 0.6965 -0.6857 -0.2113 +vn 0.7244 0.6857 -0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.7244 0.6857 0.0713 +vn 0.7244 -0.6857 0.0713 +vn 0.6965 0.6857 0.2113 +vn 0.6965 -0.6857 0.2113 +vn 0.6419 0.6857 0.3431 +vn 0.6419 -0.6857 0.3431 +vn 0.5626 0.6857 0.4617 +vn 0.5626 -0.6857 0.4617 +vn 0.4617 0.6857 0.5626 +vn 0.4617 -0.6857 0.5626 +vn 0.3431 0.6857 0.6419 +vn 0.3431 -0.6857 0.6419 +vn 0.2113 0.6857 0.6965 +vn 0.2113 -0.6857 0.6965 +vn 0.0713 0.6857 0.7244 +vn 0.0713 -0.6857 0.7244 +vn -0.0713 0.6857 0.7244 +vn -0.0713 -0.6857 0.7244 +vn -0.2113 0.6857 0.6965 +vn -0.2113 -0.6857 0.6965 +vn -0.4617 0.6857 0.5626 +vn -0.4617 -0.6857 0.5626 +vn -0.3431 -0.6857 0.6419 +vn -0.3431 0.6857 0.6419 +vn -0.5626 0.6857 0.4617 +vn -0.5626 -0.6857 0.4617 +vn -0.6419 0.6857 0.3431 +vn -0.6419 -0.6857 0.3431 +vn -0.6965 0.6857 0.2113 +vn -0.6965 -0.6857 0.2113 +vn -0.7244 0.6857 0.0713 +vn -0.7244 -0.6857 0.0713 +vn -0.6965 0.6857 -0.2113 +vn -0.6965 -0.6857 -0.2113 +vn -0.7244 -0.6857 -0.0713 +vn -0.7244 0.6857 -0.0713 +vn -0.6419 0.6857 -0.3431 +vn -0.6419 -0.6857 -0.3431 +vn -0.5626 0.6857 -0.4617 +vn -0.5626 -0.6857 -0.4617 +vn -0.8614 0.2147 0.4604 +vn -0.8767 0.1087 0.4686 +vn -0.9513 0.1087 0.2886 +vn -0.9346 0.2147 0.2835 +vn -0.9720 0.2147 0.0957 +vn -0.9893 0.1087 0.0974 +vn -0.9720 0.2147 -0.0957 +vn -0.9893 0.1087 -0.0974 +vn -0.9346 0.2147 -0.2835 +vn -0.9513 0.1087 -0.2886 +vn -0.8614 0.2147 -0.4604 +vn -0.8767 0.1087 -0.4686 +vn -0.7550 0.2147 -0.6196 +vn -0.7684 0.1087 -0.6306 +vn -0.6306 0.1087 -0.7684 +vn -0.6196 0.2147 -0.7550 +vn -0.4604 0.2147 -0.8614 +vn -0.4686 0.1087 -0.8767 +vn -0.2835 0.2147 -0.9346 +vn -0.2886 0.1087 -0.9513 +vn -0.0957 0.2147 -0.9720 +vn -0.0974 0.1087 -0.9893 +vn 0.0974 0.1087 -0.9893 +vn 0.0957 0.2147 -0.9720 +vn 0.2886 0.1087 -0.9513 +vn 0.2835 0.2147 -0.9346 +vn 0.4604 0.2147 -0.8614 +vn 0.4686 0.1087 -0.8767 +vn 0.6306 0.1087 -0.7684 +vn 0.6196 0.2147 -0.7550 +vn 0.7684 0.1087 -0.6306 +vn 0.7550 0.2147 -0.6196 +vn 0.8614 0.2147 -0.4604 +vn 0.8767 0.1087 -0.4686 +vn 0.9513 0.1087 -0.2886 +vn 0.9346 0.2147 -0.2835 +vn 0.9720 0.2147 -0.0957 +vn 0.9893 0.1087 -0.0974 +vn 0.9893 0.1087 0.0974 +vn 0.9720 0.2147 0.0957 +vn 0.9346 0.2147 0.2835 +vn 0.9513 0.1087 0.2886 +vn 0.8767 0.1087 0.4686 +vn 0.8614 0.2147 0.4604 +vn 0.7684 0.1087 0.6306 +vn 0.7550 0.2147 0.6196 +vn 0.6306 0.1087 0.7684 +vn 0.6196 0.2147 0.7550 +vn 0.4686 0.1087 0.8767 +vn 0.4604 0.2147 0.8614 +vn 0.2886 0.1087 0.9513 +vn 0.2835 0.2147 0.9346 +vn 0.0957 0.2147 0.9720 +vn -0.2835 0.2147 0.9346 +vn -0.0957 0.2147 0.9720 +vn -0.2886 0.1087 0.9513 +vn -0.6196 0.2147 0.7550 +vn -0.4604 0.2147 0.8614 +vn -0.4686 0.1087 0.8767 +vn -0.6306 0.1087 0.7684 +vn -0.7550 0.2147 0.6196 +vn -0.7684 0.1087 0.6306 +vn -0.4617 -0.6857 -0.5626 +vn -0.4617 0.6857 -0.5626 +vn -0.3032 0.6100 -0.7321 +vn -0.3827 0.0000 -0.9239 +vn -0.9914 0.0000 -0.1305 +vn -0.7856 0.6100 -0.1034 +vn 0.4824 0.6100 -0.6287 +vn 0.6088 0.0000 -0.7933 +vn -0.6088 0.0000 0.7933 +vn -0.4824 0.6100 0.6287 +vn 0.3827 0.0000 0.9239 +vn 0.3032 0.6100 0.7321 +vn 0.9914 0.0000 0.1305 +vn 0.7856 0.6100 0.1034 +vn -0.7321 0.6100 -0.3032 +vn -0.9239 0.0000 -0.3827 +vn -0.7933 0.0000 0.6088 +vn -0.6287 0.6100 0.4824 +vn -0.1034 0.6100 -0.7856 +vn -0.1305 0.0000 -0.9914 +vn 0.1305 0.0000 0.9914 +vn 0.1034 0.6100 0.7856 +vn 0.9239 0.0000 0.3827 +vn 0.7321 0.6100 0.3032 +vn 0.7933 0.0000 -0.6088 +vn 0.6287 0.6100 -0.4824 +vn -0.7321 0.6100 0.3032 +vn -0.9239 0.0000 0.3827 +vn -0.1305 0.0000 0.9914 +vn -0.1034 0.6100 0.7856 +vn -0.6287 0.6100 -0.4824 +vn -0.7933 0.0000 -0.6088 +vn 0.7933 0.0000 0.6088 +vn 0.6287 0.6100 0.4824 +vn 0.9239 0.0000 -0.3827 +vn 0.7321 0.6100 -0.3032 +vn 0.1305 0.0000 -0.9914 +vn 0.1034 0.6100 -0.7856 +vn -0.3032 0.6100 0.7321 +vn -0.3827 0.0000 0.9239 +vn 0.6088 0.0000 0.7933 +vn 0.4824 0.6100 0.6287 +vn -0.7856 0.6100 0.1034 +vn -0.9914 0.0000 0.1305 +vn 0.9914 0.0000 -0.1305 +vn 0.7856 0.6100 -0.1034 +vn 0.3827 0.0000 -0.9239 +vn 0.3032 0.6100 -0.7321 +vn -0.6088 0.0000 -0.7933 +vn -0.4824 0.6100 -0.6287 +vn -0.5603 0.6100 -0.5603 +vn -0.7071 0.0000 -0.7071 +vn -0.9659 0.0000 0.2588 +vn -0.7654 0.6100 0.2051 +vn 0.2051 0.6100 -0.7654 +vn 0.2588 0.0000 -0.9659 +vn -0.2588 0.0000 0.9659 +vn -0.2051 0.6100 0.7654 +vn 0.7071 0.0000 0.7071 +vn 0.5603 0.6100 0.5603 +vn 0.9659 0.0000 -0.2588 +vn 0.7654 0.6100 -0.2051 +vn -0.7924 0.6100 0.0000 +vn -0.5000 0.0000 0.8660 +vn -0.3962 0.6100 0.6862 +vn -0.3962 0.6100 -0.6862 +vn -0.5000 0.0000 -0.8660 +vn 0.5000 0.0000 0.8660 +vn 0.3962 0.6100 0.6862 +vn 0.7924 0.6100 0.0000 +vn 0.5000 0.0000 -0.8660 +vn 0.3962 0.6100 -0.6862 +vn -0.5603 0.6100 0.5603 +vn -0.7071 0.0000 0.7071 +vn 0.2588 0.0000 0.9659 +vn 0.2051 0.6100 0.7654 +vn -0.7654 0.6100 -0.2051 +vn -0.9659 0.0000 -0.2588 +vn 0.9659 0.0000 0.2588 +vn 0.7654 0.6100 0.2051 +vn 0.7071 0.0000 -0.7071 +vn 0.5603 0.6100 -0.5603 +vn -0.2588 0.0000 -0.9659 +vn -0.2051 0.6100 -0.7654 +vn 0.0000 0.6100 0.7924 +vn 0.8660 0.0000 0.5000 +vn 0.6862 0.6100 0.3962 +vn -0.6862 0.6100 0.3962 +vn -0.8660 0.0000 0.5000 +vn 0.8660 0.0000 -0.5000 +vn 0.6862 0.6100 -0.3962 +vn 0.0000 0.6100 -0.7924 +vn -0.8660 0.0000 -0.5000 +vn -0.6862 0.6100 -0.3962 +g Pipe_Cylinder.002_None +s off +f 129/1/1 132/2/1 133/3/1 134/4/1 135/5/1 136/6/1 +f 141/7/2 144/8/2 145/9/2 146/10/2 147/11/2 148/12/2 +f 153/13/1 156/14/1 157/15/1 158/16/1 159/17/1 160/18/1 +f 165/19/2 168/20/2 169/21/2 170/22/2 171/23/2 172/24/2 +f 177/25/1 180/26/1 181/27/1 182/28/1 183/29/1 184/30/1 +f 189/31/2 192/32/2 193/33/2 194/34/2 195/35/2 196/36/2 +f 201/37/1 204/38/1 205/39/1 206/40/1 207/41/1 208/42/1 +f 213/43/2 216/44/2 217/45/2 218/46/2 219/47/2 220/48/2 +f 225/49/1 228/50/1 229/51/1 230/52/1 231/53/1 232/54/1 +f 237/55/2 240/56/2 241/57/2 242/58/2 243/59/2 244/60/2 +f 249/61/1 252/62/1 253/63/1 254/64/1 255/65/1 256/66/1 +f 261/67/2 264/68/2 265/69/2 266/70/2 267/71/2 268/72/2 +f 273/73/1 276/74/1 277/75/1 278/76/1 279/77/1 280/78/1 +f 285/79/2 288/80/2 289/81/2 290/82/2 291/83/2 292/84/2 +f 297/85/1 300/86/1 301/87/1 302/88/1 303/89/1 304/90/1 +f 309/91/2 312/92/2 313/93/2 314/94/2 315/95/2 316/96/2 +f 371/97/2 372/98/2 402/99/2 401/100/2 399/101/2 400/102/2 398/103/2 397/104/2 396/105/2 395/106/2 393/107/2 394/108/2 392/109/2 391/110/2 390/111/2 389/112/2 388/113/2 387/114/2 386/115/2 385/116/2 384/117/2 383/118/2 382/119/2 381/120/2 380/121/2 379/122/2 378/123/2 377/124/2 376/125/2 375/126/2 374/127/2 373/128/2 +f 350/129/1 367/130/1 351/131/1 352/132/1 353/133/1 354/134/1 355/135/1 368/136/1 356/137/1 357/138/1 358/139/1 369/140/1 359/141/1 370/142/1 360/143/1 361/144/1 362/145/1 363/146/1 364/147/1 339/148/1 340/149/1 341/150/1 342/151/1 343/152/1 344/153/1 345/154/1 346/155/1 347/156/1 365/157/1 348/158/1 366/159/1 349/160/1 +f 407/161/1 417/162/1 422/163/1 426/164/1 430/165/1 435/166/1 434/167/1 439/168/1 443/169/1 447/170/1 451/171/1 456/172/1 465/173/1 466/174/1 464/175/1 458/176/1 453/177/1 449/178/1 445/179/1 441/180/1 437/181/1 432/182/1 428/183/1 424/184/1 419/185/1 415/186/1 408/187/1 409/188/1 406/189/1 403/190/1 404/191/1 405/192/1 +f 411/193/2 410/194/2 416/195/2 421/196/2 420/197/2 425/198/2 429/199/2 433/200/2 438/201/2 442/202/2 446/203/2 450/204/2 454/205/2 459/206/2 455/207/2 461/208/2 460/209/2 462/210/2 463/211/2 457/212/2 452/213/2 448/214/2 444/215/2 440/216/2 436/217/2 431/218/2 427/219/2 423/220/2 418/221/2 414/222/2 413/223/2 412/224/2 +f 467/225/1 470/226/1 471/227/1 472/228/1 473/229/1 474/230/1 +f 479/231/2 482/232/2 483/233/2 484/234/2 485/235/2 486/236/2 +f 491/237/1 494/238/1 495/239/1 496/240/1 497/241/1 498/242/1 +f 503/243/2 506/244/2 507/245/2 508/246/2 509/247/2 510/248/2 +f 515/249/1 518/250/1 519/251/1 520/252/1 521/253/1 522/254/1 +f 527/255/2 530/256/2 531/257/2 532/258/2 533/259/2 534/260/2 +f 539/261/1 542/262/1 543/263/1 544/264/1 545/265/1 546/266/1 +f 551/267/2 554/268/2 555/269/2 556/270/2 557/271/2 558/272/2 +f 563/273/1 566/274/1 567/275/1 568/276/1 569/277/1 570/278/1 +f 575/279/2 578/280/2 579/281/2 580/282/2 581/283/2 582/284/2 +f 587/285/1 590/286/1 591/287/1 592/288/1 593/289/1 594/290/1 +f 599/291/2 602/292/2 603/293/2 604/294/2 605/295/2 606/296/2 +f 611/297/1 614/298/1 615/299/1 616/300/1 617/301/1 618/302/1 +f 623/303/2 626/304/2 627/305/2 628/306/2 629/307/2 630/308/2 +f 635/309/1 638/310/1 639/311/1 640/312/1 641/313/1 642/314/1 +f 647/315/2 650/316/2 651/317/2 652/318/2 653/319/2 654/320/2 +f 723/321/3 726/322/3 727/323/3 728/324/3 729/325/3 730/326/3 +f 735/327/3 738/328/3 739/329/3 740/330/3 741/331/3 742/332/3 +f 747/333/3 750/334/3 751/335/3 752/336/3 753/337/3 754/338/3 +f 759/339/3 762/340/3 763/341/3 764/342/3 765/343/3 766/344/3 +f 771/345/3 774/346/3 775/347/3 776/348/3 777/349/3 778/350/3 +f 783/351/3 786/352/3 787/353/3 788/354/3 789/355/3 790/356/3 +f 795/357/3 798/358/3 799/359/3 800/360/3 801/361/3 802/362/3 +f 807/363/3 810/364/3 811/365/3 812/366/3 813/367/3 814/368/3 +f 865/369/3 866/370/3 896/371/3 895/372/3 893/373/3 894/374/3 892/375/3 891/376/3 890/377/3 889/378/3 887/379/3 888/380/3 886/381/3 885/382/3 884/383/3 883/384/3 882/385/3 881/386/3 880/387/3 879/388/3 878/389/3 877/390/3 876/391/3 875/392/3 874/393/3 873/394/3 872/395/3 871/396/3 870/397/3 869/398/3 868/399/3 867/400/3 +f 844/401/4 861/402/4 845/403/4 846/404/4 847/405/4 848/406/4 849/407/4 862/408/4 850/409/4 851/410/4 852/411/4 863/412/4 853/413/4 864/414/4 854/415/4 855/416/4 856/417/4 857/418/4 858/419/4 833/420/4 834/421/4 835/422/4 836/423/4 837/424/4 838/425/4 839/426/4 840/427/4 841/428/4 859/429/4 842/430/4 860/431/4 843/432/4 +f 897/433/3 900/434/3 901/435/3 902/436/3 903/437/3 904/438/3 +f 909/439/3 912/440/3 913/441/3 914/442/3 915/443/3 916/444/3 +f 921/445/3 924/446/3 925/447/3 926/448/3 927/449/3 928/450/3 +f 933/451/3 936/452/3 937/453/3 938/454/3 939/455/3 940/456/3 +f 945/457/3 948/458/3 949/459/3 950/460/3 951/461/3 952/462/3 +f 957/463/3 960/464/3 961/465/3 962/466/3 963/467/3 964/468/3 +f 969/469/3 972/470/3 973/471/3 974/472/3 975/473/3 976/474/3 +f 981/475/3 984/476/3 985/477/3 986/478/3 987/479/3 988/480/3 +s 1 +f 374/481/5 341/482/6 340/483/7 373/484/8 +f 375/485/9 342/486/10 341/482/6 374/481/5 +f 376/487/11 343/488/12 342/486/10 375/485/9 +f 377/489/13 344/490/14 343/488/12 376/487/11 +f 378/491/15 345/492/16 344/490/14 377/489/13 +f 379/493/17 346/494/18 345/492/16 378/491/15 +f 380/495/19 347/496/20 346/494/18 379/493/17 +f 381/497/21 365/498/22 347/496/20 380/495/19 +f 382/499/23 348/500/24 365/498/22 381/497/21 +f 383/501/25 366/502/26 348/500/24 382/499/23 +f 384/503/27 349/504/28 366/502/26 383/501/25 +f 385/505/29 350/506/30 349/504/28 384/503/27 +f 386/507/31 367/508/32 350/506/30 385/505/29 +f 387/509/33 351/510/34 367/511/32 386/507/31 +f 388/512/35 352/513/36 351/510/34 387/509/33 +f 389/514/37 353/515/38 352/513/36 388/512/35 +f 390/516/39 354/517/40 353/518/38 389/519/37 +f 391/520/41 355/521/42 354/517/40 390/516/39 +f 392/522/43 368/523/44 355/521/42 391/520/41 +f 394/524/45 356/525/46 368/523/44 392/522/43 +f 395/526/47 358/527/48 357/528/49 393/529/50 +f 393/529/50 357/528/49 356/525/46 394/524/45 +f 396/530/51 369/531/52 358/527/48 395/526/47 +f 397/532/53 359/533/54 369/531/52 396/530/51 +f 398/534/55 370/535/56 359/533/54 397/532/53 +f 400/536/57 360/537/58 370/535/56 398/534/55 +f 401/538/59 362/539/60 361/540/61 399/541/62 +f 399/541/62 361/540/61 360/537/58 400/536/57 +f 402/542/63 363/543/64 362/539/60 401/538/59 +f 372/544/65 364/545/66 363/543/64 402/542/63 +f 30/546/67 33/547/68 34/548/69 1/549/70 +f 2/550/71 1/549/70 34/548/69 35/551/72 +f 3/552/73 2/550/71 35/551/72 36/553/74 +f 4/554/75 3/552/73 36/553/74 37/555/76 +f 5/556/77 4/554/75 37/555/76 38/557/78 +f 6/558/79 5/556/77 38/557/78 39/559/80 +f 6/558/79 39/559/80 40/560/81 7/561/82 +f 8/562/83 7/561/82 40/560/81 41/563/84 +f 9/564/85 8/562/83 41/563/84 42/565/86 +f 10/566/87 9/564/85 42/565/86 43/567/88 +f 10/566/87 43/567/88 44/568/89 11/569/90 +f 11/569/90 44/568/89 45/570/91 31/571/92 +f 12/572/93 46/573/94 47/574/95 13/575/96 +f 31/571/92 45/570/91 46/573/94 12/572/93 +f 13/575/96 47/574/95 48/576/97 14/577/98 +f 15/578/99 14/577/98 48/576/97 49/579/100 +f 15/578/99 49/579/100 50/580/101 16/581/102 +f 17/582/103 16/581/102 50/580/101 51/583/104 +f 17/584/103 51/585/104 52/586/105 18/587/106 +f 19/588/107 18/587/106 52/586/105 53/589/108 +f 19/588/107 53/589/108 54/590/109 20/591/110 +f 20/591/110 54/590/109 55/592/111 22/593/112 +f 22/593/112 55/592/111 56/594/113 21/595/114 +f 21/595/114 56/594/113 57/596/115 23/597/116 +f 23/597/116 57/596/115 58/598/117 24/599/118 +f 24/599/118 58/598/117 59/600/119 32/601/120 +f 27/602/121 25/603/122 60/604/123 61/605/124 +f 25/603/122 32/601/120 59/600/119 60/604/123 +f 28/606/125 26/607/126 62/608/127 63/609/128 +f 27/602/121 61/605/124 62/608/127 26/607/126 +f 29/610/129 28/606/125 63/609/128 64/611/130 +f 29/610/129 64/611/130 33/547/68 30/546/67 +f 322/612/131 45/570/91 44/568/89 321/613/132 +f 323/614/133 46/573/94 45/570/91 322/612/131 +f 324/615/134 47/574/95 46/573/94 323/614/133 +f 70/616/135 66/617/136 65/618/137 71/619/138 +f 72/620/139 67/621/140 66/617/136 70/616/135 +f 74/622/141 68/623/142 67/621/140 72/620/139 +f 828/624/143 829/625/144 56/594/113 55/592/111 +f 71/619/138 65/618/137 69/626/145 76/627/146 +f 78/628/147 73/629/148 68/623/142 74/622/141 +f 336/630/149 823/631/150 81/632/151 85/633/152 +f 80/634/153 76/627/146 69/626/145 75/635/154 +f 82/636/155 77/637/156 73/629/148 78/628/147 +f 824/638/157 336/630/149 85/633/152 89/639/158 +f 84/640/159 80/634/153 75/635/154 79/641/160 +f 406/642/20 410/643/19 411/644/21 403/645/22 +f 405/646/26 413/647/25 414/648/27 407/649/28 +f 86/650/161 81/632/151 77/637/156 82/636/155 +f 409/651/18 416/652/17 410/643/19 406/642/20 +f 88/653/162 84/640/159 79/641/160 83/654/163 +f 407/649/28 414/648/27 418/655/29 417/656/30 +f 90/657/164 85/633/152 81/632/151 86/650/161 +f 408/658/16 421/659/15 416/652/17 409/651/18 +f 825/660/165 331/661/166 93/662/167 97/663/168 +f 92/664/169 88/653/162 83/654/163 87/665/170 +f 415/666/14 420/667/13 421/659/15 408/658/16 +f 94/668/171 89/639/158 85/633/152 90/657/164 +f 424/669/10 429/670/9 425/671/11 419/672/12 +f 96/673/172 92/664/169 87/665/170 91/674/173 +f 417/656/30 418/655/29 423/675/31 422/676/32 +f 98/677/174 93/678/167 89/639/158 94/668/171 +f 428/679/6 433/680/5 429/670/9 424/669/10 +f 332/681/175 826/682/176 101/683/177 105/684/178 +f 100/685/179 96/673/172 91/674/173 95/686/180 +f 422/676/32 423/675/31 427/687/33 426/688/34 +f 102/689/181 97/663/168 93/662/167 98/690/174 +f 373/484/8 340/483/7 339/691/182 371/692/183 +f 432/693/7 438/694/8 433/680/5 428/679/6 +f 333/695/184 332/681/175 105/684/178 109/696/185 +f 61/605/124 60/604/123 123/697/186 119/698/187 +f 104/699/188 100/685/179 95/686/180 99/700/189 +f 426/688/34 427/687/33 431/701/35 430/702/36 +f 106/703/190 101/683/177 97/663/168 102/689/181 +f 437/704/182 442/705/183 438/694/8 432/693/7 +f 108/706/191 104/699/188 99/700/189 103/707/192 +f 430/702/36 431/701/35 436/708/37 435/709/38 +f 110/710/193 105/684/178 101/683/177 106/703/190 +f 441/711/66 446/712/65 442/705/183 437/704/182 +f 112/713/194 108/706/191 103/707/192 107/714/195 +f 434/715/40 440/716/39 444/717/41 439/718/42 +f 110/710/193 114/719/196 109/696/185 105/684/178 +f 435/709/38 436/708/37 440/720/39 434/721/40 +f 832/722/197 59/600/119 58/598/117 831/723/198 +f 116/724/199 112/713/194 107/714/195 111/725/200 +f 439/718/42 444/717/41 448/726/43 443/727/44 +f 403/645/22 411/644/21 412/728/23 404/729/24 +f 118/730/201 113/731/202 109/696/185 114/719/196 +f 445/732/64 450/733/63 446/712/65 441/711/66 +f 831/723/198 58/598/117 57/596/115 830/734/203 +f 61/605/124 119/698/187 115/735/204 62/608/127 +f 120/736/205 116/724/199 111/725/200 115/735/204 +f 443/727/44 448/726/43 452/737/45 447/738/46 +f 118/730/201 122/739/206 117/740/207 113/731/202 +f 449/741/60 454/742/59 450/733/63 445/732/64 +f 124/743/208 120/736/205 115/735/204 119/698/187 +f 447/738/46 452/744/45 457/745/50 451/746/49 +f 122/739/206 126/747/209 121/748/210 117/740/207 +f 453/749/61 459/750/62 454/742/59 449/741/60 +f 419/672/12 425/671/11 420/667/13 415/666/14 +f 127/751/211 124/743/208 119/698/187 123/697/186 +f 451/746/49 457/745/50 463/752/47 456/753/48 +f 126/747/209 128/754/212 125/755/213 121/748/210 +f 458/756/58 455/757/57 459/750/62 453/749/61 +f 128/754/212 127/751/211 123/697/186 125/755/213 +f 404/729/24 412/728/23 413/647/25 405/646/26 +f 464/758/56 461/759/55 455/757/57 458/756/58 +f 456/753/48 463/752/47 462/760/51 465/761/52 +f 466/762/54 460/763/53 461/759/55 464/758/56 +f 465/761/52 462/760/51 460/763/53 466/762/54 +f 129/764/214 130/765/215 131/766/216 132/767/217 +f 136/768/218 137/769/219 130/765/215 129/764/214 +f 132/767/217 131/766/216 138/770/220 133/771/221 +f 133/771/221 138/770/220 139/772/222 134/773/223 +f 134/774/223 139/775/222 140/776/224 135/777/225 +f 135/777/225 140/776/224 137/769/219 136/768/218 +f 141/778/226 142/779/222 143/780/220 144/781/227 +f 148/782/228 149/783/224 142/779/222 141/778/226 +f 144/781/227 143/780/220 150/784/216 145/785/229 +f 145/785/229 150/784/216 151/786/215 146/787/230 +f 146/788/230 151/789/215 152/790/219 147/791/231 +f 147/791/231 152/790/219 149/783/224 148/782/228 +f 153/792/232 154/793/233 155/794/234 156/795/235 +f 160/796/236 161/797/237 154/793/233 153/792/232 +f 156/795/235 155/794/234 162/798/238 157/799/239 +f 157/799/239 162/798/238 163/800/240 158/801/241 +f 158/802/241 163/803/240 164/804/242 159/805/243 +f 159/805/243 164/804/242 161/797/237 160/796/236 +f 165/806/244 166/807/240 167/808/238 168/809/245 +f 172/810/246 173/811/242 166/807/240 165/806/244 +f 168/809/245 167/808/238 174/812/234 169/813/247 +f 169/813/247 174/812/234 175/814/233 170/815/248 +f 170/816/248 175/817/233 176/818/237 171/819/249 +f 171/819/249 176/818/237 173/811/242 172/810/246 +f 177/820/250 178/821/251 179/822/252 180/823/253 +f 184/824/254 185/825/255 178/821/251 177/820/250 +f 180/823/253 179/822/252 186/826/256 181/827/257 +f 181/827/257 186/826/256 187/828/258 182/829/259 +f 182/830/259 187/831/258 188/832/260 183/833/261 +f 183/833/261 188/832/260 185/825/255 184/824/254 +f 189/834/262 190/835/258 191/836/256 192/837/263 +f 196/838/264 197/839/260 190/835/258 189/834/262 +f 192/837/263 191/836/256 198/840/252 193/841/265 +f 193/841/265 198/840/252 199/842/251 194/843/266 +f 194/844/266 199/845/251 200/846/255 195/847/267 +f 195/847/267 200/846/255 197/839/260 196/838/264 +f 201/848/268 202/849/269 203/850/270 204/851/271 +f 208/852/272 209/853/273 202/849/269 201/848/268 +f 204/851/271 203/850/270 210/854/274 205/855/275 +f 205/855/275 210/854/274 211/856/276 206/857/277 +f 206/858/277 211/859/276 212/860/278 207/861/279 +f 207/861/279 212/860/278 209/853/273 208/852/272 +f 213/862/280 214/863/276 215/864/274 216/865/281 +f 220/866/282 221/867/278 214/863/276 213/862/280 +f 216/865/281 215/864/274 222/868/270 217/869/283 +f 217/869/283 222/868/270 223/870/269 218/871/284 +f 218/872/284 223/873/269 224/874/273 219/875/285 +f 219/875/285 224/874/273 221/867/278 220/866/282 +f 225/876/223 226/877/222 227/878/224 228/879/225 +f 232/880/221 233/881/220 226/877/222 225/876/223 +f 228/879/225 227/878/224 234/882/219 229/883/218 +f 229/883/218 234/882/219 235/884/215 230/885/214 +f 230/886/214 235/887/215 236/888/216 231/889/217 +f 231/889/217 236/888/216 233/881/220 232/880/221 +f 237/890/230 238/891/215 239/892/219 240/893/231 +f 244/894/229 245/895/216 238/891/215 237/890/230 +f 240/893/231 239/892/219 246/896/224 241/897/228 +f 241/897/228 246/896/224 247/898/222 242/899/226 +f 242/900/226 247/901/222 248/902/220 243/903/227 +f 243/903/227 248/902/220 245/895/216 244/894/229 +f 249/904/241 250/905/240 251/906/242 252/907/243 +f 256/908/239 257/909/238 250/905/240 249/904/241 +f 252/907/243 251/906/242 258/910/237 253/911/236 +f 253/911/236 258/910/237 259/912/233 254/913/232 +f 254/914/232 259/915/233 260/916/234 255/917/235 +f 255/917/235 260/916/234 257/909/238 256/908/239 +f 261/918/248 262/919/233 263/920/237 264/921/249 +f 268/922/247 269/923/234 262/919/233 261/918/248 +f 264/921/249 263/920/237 270/924/242 265/925/246 +f 265/925/246 270/924/242 271/926/240 266/927/244 +f 266/928/244 271/929/240 272/930/238 267/931/245 +f 267/931/245 272/930/238 269/923/234 268/922/247 +f 273/932/259 274/933/258 275/934/260 276/935/261 +f 280/936/257 281/937/256 274/933/258 273/932/259 +f 276/935/261 275/934/260 282/938/255 277/939/254 +f 277/939/254 282/938/255 283/940/251 278/941/250 +f 278/942/250 283/943/251 284/944/252 279/945/253 +f 279/945/253 284/944/252 281/937/256 280/936/257 +f 285/946/266 286/947/251 287/948/255 288/949/267 +f 292/950/265 293/951/252 286/947/251 285/946/266 +f 288/949/267 287/948/255 294/952/260 289/953/264 +f 289/953/264 294/952/260 295/954/258 290/955/262 +f 290/956/262 295/957/258 296/958/256 291/959/263 +f 291/959/263 296/958/256 293/951/252 292/950/265 +f 297/960/277 298/961/276 299/962/278 300/963/279 +f 304/964/275 305/965/274 298/961/276 297/960/277 +f 300/963/279 299/962/278 306/966/273 301/967/272 +f 301/967/272 306/966/273 307/968/269 302/969/268 +f 302/970/268 307/971/269 308/972/270 303/973/271 +f 303/973/271 308/972/270 305/965/274 304/964/275 +f 309/974/284 310/975/269 311/976/273 312/977/285 +f 316/978/283 317/979/270 310/975/269 309/974/284 +f 312/977/285 311/976/273 318/980/278 313/981/282 +f 313/981/282 318/980/278 319/982/276 314/983/280 +f 314/984/280 319/985/276 320/986/274 315/987/281 +f 315/987/281 320/986/274 317/979/270 316/978/283 +f 821/988/286 820/989/287 68/623/142 73/629/148 +f 822/990/288 821/988/286 73/629/148 77/637/156 +f 324/615/134 325/991/289 48/576/97 47/574/95 +f 64/611/130 63/609/128 111/725/200 107/714/195 +f 820/989/287 819/992/290 67/621/140 68/623/142 +f 832/993/197 718/994/291 717/995/292 338/996/293 +f 64/611/130 107/714/195 103/707/192 33/547/68 +f 65/618/137 42/565/86 41/563/84 69/626/145 +f 338/997/293 335/998/294 121/748/210 125/755/213 +f 62/608/127 115/735/204 111/725/200 63/609/128 +f 36/553/74 91/674/173 87/665/170 37/555/76 +f 38/557/78 37/555/76 87/665/170 83/654/163 +f 334/999/295 333/695/184 109/696/185 113/731/202 +f 335/998/294 337/1000/296 117/740/207 121/748/210 +f 334/999/295 113/731/202 117/740/207 337/1000/296 +f 39/559/80 79/641/160 75/635/154 40/560/81 +f 35/551/72 34/548/69 99/700/189 95/686/180 +f 830/734/203 57/596/115 56/594/113 829/625/144 +f 371/692/183 339/691/182 364/545/66 372/544/65 +f 36/553/74 35/551/72 95/686/180 91/674/173 +f 43/567/88 42/565/86 65/618/137 66/617/136 +f 325/991/289 326/1001/297 49/579/100 48/576/97 +f 326/1001/297 327/1002/298 50/580/101 49/579/100 +f 327/1002/298 328/1003/299 51/583/104 50/580/101 +f 328/1004/299 329/1005/300 52/586/105 51/585/104 +f 329/1005/300 330/1006/301 53/589/108 52/586/105 +f 330/1006/301 827/1007/302 54/590/109 53/589/108 +f 827/1007/302 828/624/143 55/592/111 54/590/109 +f 34/548/69 33/547/68 103/707/192 99/700/189 +f 331/1008/166 824/638/157 89/639/158 93/678/167 +f 826/682/176 825/660/165 97/663/168 101/683/177 +f 467/1009/303 468/1010/304 469/1011/305 470/1012/306 +f 474/1013/307 475/1014/308 468/1010/304 467/1009/303 +f 470/1012/306 469/1011/305 476/1015/309 471/1016/310 +f 471/1016/310 476/1015/309 477/1017/311 472/1018/312 +f 472/1019/312 477/1020/311 478/1021/313 473/1022/314 +f 473/1022/314 478/1021/313 475/1014/308 474/1013/307 +f 479/1023/315 480/1024/311 481/1025/309 482/1026/316 +f 486/1027/317 487/1028/313 480/1024/311 479/1023/315 +f 482/1026/316 481/1025/309 488/1029/305 483/1030/318 +f 483/1030/318 488/1029/305 489/1031/304 484/1032/319 +f 484/1033/319 489/1034/304 490/1035/308 485/1036/320 +f 485/1036/320 490/1035/308 487/1028/313 486/1027/317 +f 491/1037/321 492/1038/4 493/1039/322 494/1040/323 +f 498/1041/324 499/1042/325 492/1038/4 491/1037/321 +f 494/1040/323 493/1039/322 500/1043/326 495/1044/327 +f 495/1044/327 500/1043/326 501/1045/3 496/1046/328 +f 496/1047/328 501/1048/3 502/1049/329 497/1050/330 +f 497/1050/330 502/1049/329 499/1042/325 498/1041/324 +f 503/1051/331 504/1052/3 505/1053/326 506/1054/332 +f 510/1055/333 511/1056/329 504/1052/3 503/1051/331 +f 506/1054/332 505/1053/326 512/1057/322 507/1058/334 +f 507/1058/334 512/1057/322 513/1059/4 508/1060/335 +f 508/1061/335 513/1062/4 514/1063/325 509/1064/336 +f 509/1064/336 514/1063/325 511/1056/329 510/1055/333 +f 515/1065/337 516/1066/338 517/1067/339 518/1068/340 +f 522/1069/341 523/1070/342 516/1066/338 515/1065/337 +f 518/1068/340 517/1067/339 524/1071/343 519/1072/344 +f 519/1072/344 524/1071/343 525/1073/345 520/1074/346 +f 520/1075/346 525/1076/345 526/1077/347 521/1078/348 +f 521/1078/348 526/1077/347 523/1070/342 522/1069/341 +f 527/1079/349 528/1080/345 529/1081/343 530/1082/350 +f 534/1083/351 535/1084/347 528/1080/345 527/1079/349 +f 530/1082/350 529/1081/343 536/1085/339 531/1086/352 +f 531/1086/352 536/1085/339 537/1087/338 532/1088/353 +f 532/1089/353 537/1090/338 538/1091/342 533/1092/354 +f 533/1092/354 538/1091/342 535/1084/347 534/1083/351 +f 539/1093/355 540/1094/356 541/1095/357 542/1096/358 +f 546/1097/359 547/1098/360 540/1094/356 539/1093/355 +f 542/1096/358 541/1095/357 548/1099/361 543/1100/362 +f 543/1100/362 548/1099/361 549/1101/363 544/1102/364 +f 544/1103/364 549/1104/363 550/1105/365 545/1106/366 +f 545/1106/366 550/1105/365 547/1098/360 546/1097/359 +f 551/1107/367 552/1108/363 553/1109/361 554/1110/368 +f 558/1111/369 559/1112/365 552/1108/363 551/1107/367 +f 554/1110/368 553/1109/361 560/1113/357 555/1114/370 +f 555/1114/370 560/1113/357 561/1115/356 556/1116/371 +f 556/1117/371 561/1118/356 562/1119/360 557/1120/372 +f 557/1120/372 562/1119/360 559/1112/365 558/1111/369 +f 563/1121/312 564/1122/311 565/1123/313 566/1124/314 +f 570/1125/310 571/1126/309 564/1122/311 563/1121/312 +f 566/1124/314 565/1123/313 572/1127/308 567/1128/307 +f 567/1128/307 572/1127/308 573/1129/304 568/1130/303 +f 568/1131/303 573/1132/304 574/1133/305 569/1134/306 +f 569/1134/306 574/1133/305 571/1126/309 570/1125/310 +f 575/1135/319 576/1136/304 577/1137/308 578/1138/320 +f 582/1139/318 583/1140/305 576/1136/304 575/1135/319 +f 578/1138/320 577/1137/308 584/1141/313 579/1142/317 +f 579/1142/317 584/1141/313 585/1143/311 580/1144/315 +f 580/1145/315 585/1146/311 586/1147/309 581/1148/316 +f 581/1148/316 586/1147/309 583/1140/305 582/1139/318 +f 587/1149/328 588/1150/3 589/1151/329 590/1152/330 +f 594/1153/327 595/1154/326 588/1150/3 587/1149/328 +f 590/1152/330 589/1151/329 596/1155/325 591/1156/324 +f 591/1156/324 596/1155/325 597/1157/4 592/1158/321 +f 592/1159/321 597/1160/4 598/1161/322 593/1162/323 +f 593/1162/323 598/1161/322 595/1154/326 594/1153/327 +f 599/1163/335 600/1164/4 601/1165/325 602/1166/336 +f 606/1167/334 607/1168/322 600/1164/4 599/1163/335 +f 602/1166/336 601/1165/325 608/1169/329 603/1170/333 +f 603/1170/333 608/1169/329 609/1171/3 604/1172/331 +f 604/1173/331 609/1174/3 610/1175/326 605/1176/332 +f 605/1176/332 610/1175/326 607/1168/322 606/1167/334 +f 611/1177/346 612/1178/345 613/1179/347 614/1180/348 +f 618/1181/344 619/1182/343 612/1178/345 611/1177/346 +f 614/1180/348 613/1179/347 620/1183/342 615/1184/341 +f 615/1184/341 620/1183/342 621/1185/338 616/1186/337 +f 616/1187/337 621/1188/338 622/1189/339 617/1190/340 +f 617/1190/340 622/1189/339 619/1182/343 618/1181/344 +f 623/1191/353 624/1192/338 625/1193/342 626/1194/354 +f 630/1195/352 631/1196/339 624/1192/338 623/1191/353 +f 626/1194/354 625/1193/342 632/1197/347 627/1198/351 +f 627/1198/351 632/1197/347 633/1199/345 628/1200/349 +f 628/1201/349 633/1202/345 634/1203/343 629/1204/350 +f 629/1204/350 634/1203/343 631/1196/339 630/1195/352 +f 635/1205/364 636/1206/363 637/1207/365 638/1208/366 +f 642/1209/362 643/1210/361 636/1206/363 635/1205/364 +f 638/1208/366 637/1207/365 644/1211/360 639/1212/359 +f 639/1212/359 644/1211/360 645/1213/356 640/1214/355 +f 640/1215/355 645/1216/356 646/1217/357 641/1218/358 +f 641/1218/358 646/1217/357 643/1210/361 642/1209/362 +f 647/1219/371 648/1220/356 649/1221/360 650/1222/372 +f 654/1223/370 655/1224/357 648/1220/356 647/1219/371 +f 650/1222/372 649/1221/360 656/1225/365 651/1226/369 +f 651/1226/369 656/1225/365 657/1227/363 652/1228/367 +f 652/1229/367 657/1230/363 658/1231/361 653/1232/368 +f 653/1232/368 658/1231/361 655/1224/357 654/1223/370 +f 38/557/78 83/654/163 79/641/160 39/559/80 +f 69/626/145 41/563/84 40/560/81 75/635/154 +f 822/990/288 77/637/156 81/632/151 823/631/150 +f 43/567/88 66/617/136 67/621/140 819/992/290 321/613/132 44/568/89 +f 60/604/123 59/600/119 832/722/197 338/997/293 125/755/213 123/697/186 +f 868/1233/373 835/1234/374 834/1235/375 867/1236/376 +f 869/1237/377 836/1238/378 835/1234/374 868/1233/373 +f 870/1239/379 837/1240/380 836/1238/378 869/1237/377 +f 871/1241/381 838/1242/382 837/1240/380 870/1239/379 +f 872/1243/383 839/1244/384 838/1242/382 871/1241/381 +f 873/1245/385 840/1246/386 839/1244/384 872/1243/383 +f 874/1247/387 841/1248/388 840/1246/386 873/1245/385 +f 875/1249/389 859/1250/390 841/1248/388 874/1247/387 +f 876/1251/391 842/1252/392 859/1250/390 875/1249/389 +f 877/1253/393 860/1254/394 842/1252/392 876/1251/391 +f 878/1255/395 843/1256/396 860/1254/394 877/1253/393 +f 879/1257/397 844/1258/398 843/1256/396 878/1255/395 +f 880/1259/399 861/1260/400 844/1258/398 879/1257/397 +f 881/1261/401 845/1262/402 861/1263/400 880/1259/399 +f 882/1264/403 846/1265/404 845/1262/402 881/1261/401 +f 883/1266/405 847/1267/406 846/1265/404 882/1264/403 +f 884/1268/407 848/1269/408 847/1270/406 883/1271/405 +f 885/1272/409 849/1273/410 848/1269/408 884/1268/407 +f 886/1274/411 862/1275/412 849/1273/410 885/1272/409 +f 888/1276/413 850/1277/414 862/1275/412 886/1274/411 +f 889/1278/415 852/1279/416 851/1280/417 887/1281/418 +f 887/1281/418 851/1280/417 850/1277/414 888/1276/413 +f 890/1282/419 863/1283/420 852/1279/416 889/1278/415 +f 891/1284/421 853/1285/422 863/1283/420 890/1282/419 +f 892/1286/423 864/1287/424 853/1285/422 891/1284/421 +f 894/1288/425 854/1289/426 864/1287/424 892/1286/423 +f 895/1290/427 856/1291/428 855/1292/429 893/1293/430 +f 893/1293/430 855/1292/429 854/1289/426 894/1288/425 +f 896/1294/431 857/1295/432 856/1291/428 895/1290/427 +f 866/1296/433 858/1297/434 857/1295/432 896/1294/431 +f 688/1298/435 691/1299/436 692/1300/437 659/1301/438 +f 660/1302/439 659/1301/438 692/1300/437 693/1303/440 +f 661/1304/441 660/1302/439 693/1303/440 694/1305/442 +f 662/1306/443 661/1304/441 694/1305/442 695/1307/444 +f 663/1308/445 662/1306/443 695/1307/444 696/1309/446 +f 664/1310/447 663/1308/445 696/1309/446 697/1311/448 +f 664/1310/447 697/1311/448 698/1312/449 665/1313/450 +f 666/1314/451 665/1313/450 698/1312/449 699/1315/452 +f 667/1316/453 666/1314/451 699/1315/452 700/1317/454 +f 668/1318/455 667/1316/453 700/1317/454 701/1319/456 +f 668/1318/455 701/1319/456 702/1320/457 669/1321/458 +f 669/1321/458 702/1320/457 703/1322/459 689/1323/460 +f 670/1324/461 704/1325/462 705/1326/463 671/1327/464 +f 689/1323/460 703/1322/459 704/1325/462 670/1324/461 +f 671/1327/464 705/1326/463 706/1328/465 672/1329/466 +f 673/1330/467 672/1329/466 706/1328/465 707/1331/468 +f 673/1330/467 707/1331/468 708/1332/469 674/1333/470 +f 675/1334/471 674/1333/470 708/1332/469 709/1335/472 +f 675/1336/471 709/1337/472 710/1338/473 676/1339/474 +f 677/1340/475 676/1339/474 710/1338/473 711/1341/476 +f 677/1340/475 711/1341/476 712/1342/477 678/1343/478 +f 678/1343/478 712/1342/477 713/1344/479 680/1345/480 +f 680/1345/480 713/1344/479 714/1346/481 679/1347/482 +f 679/1347/482 714/1346/481 715/1348/483 681/1349/484 +f 681/1349/484 715/1348/483 716/1350/485 682/1351/486 +f 682/1351/486 716/1350/485 717/995/292 690/1352/487 +f 685/1353/488 683/1354/489 718/994/291 719/1355/490 +f 683/1354/489 690/1352/487 717/995/292 718/994/291 +f 686/1356/491 684/1357/492 720/1358/493 721/1359/494 +f 685/1353/488 719/1355/490 720/1358/493 684/1357/492 +f 687/1360/495 686/1356/491 721/1359/494 722/1361/496 +f 687/1360/495 722/1361/496 691/1299/436 688/1298/435 +f 867/1236/376 834/1235/375 833/1362/497 865/1363/498 +f 723/1364/499 724/1365/500 725/1366/501 726/1367/502 +f 730/1368/503 731/1369/504 724/1365/500 723/1364/499 +f 726/1367/502 725/1366/501 732/1370/505 727/1371/506 +f 727/1371/506 732/1370/505 733/1372/507 728/1373/508 +f 728/1374/508 733/1375/507 734/1376/509 729/1377/510 +f 729/1377/510 734/1376/509 731/1369/504 730/1368/503 +f 735/1378/511 736/1379/512 737/1380/513 738/1381/514 +f 742/1382/515 743/1383/516 736/1379/512 735/1378/511 +f 738/1381/514 737/1380/513 744/1384/517 739/1385/518 +f 739/1385/518 744/1384/517 745/1386/519 740/1387/520 +f 740/1388/520 745/1389/519 746/1390/521 741/1391/522 +f 741/1391/522 746/1390/521 743/1383/516 742/1382/515 +f 747/1392/523 748/1393/524 749/1394/525 750/1395/526 +f 754/1396/527 755/1397/528 748/1393/524 747/1392/523 +f 750/1395/526 749/1394/525 756/1398/529 751/1399/530 +f 751/1399/530 756/1398/529 757/1400/531 752/1401/532 +f 752/1402/532 757/1403/531 758/1404/533 753/1405/534 +f 753/1405/534 758/1404/533 755/1397/528 754/1396/527 +f 759/1406/535 760/1407/536 761/1408/537 762/1409/538 +f 766/1410/539 767/1411/540 760/1407/536 759/1406/535 +f 762/1409/538 761/1408/537 768/1412/541 763/1413/542 +f 763/1413/542 768/1412/541 769/1414/543 764/1415/544 +f 764/1416/544 769/1417/543 770/1418/545 765/1419/546 +f 765/1419/546 770/1418/545 767/1411/540 766/1410/539 +f 771/1420/508 772/1421/507 773/1422/509 774/1423/510 +f 778/1424/506 779/1425/505 772/1421/507 771/1420/508 +f 774/1423/510 773/1422/509 780/1426/504 775/1427/503 +f 775/1427/503 780/1426/504 781/1428/500 776/1429/499 +f 776/1430/499 781/1431/500 782/1432/501 777/1433/502 +f 777/1433/502 782/1432/501 779/1425/505 778/1424/506 +f 783/1434/520 784/1435/519 785/1436/521 786/1437/522 +f 790/1438/518 791/1439/517 784/1435/519 783/1434/520 +f 786/1437/522 785/1436/521 792/1440/516 787/1441/515 +f 787/1441/515 792/1440/516 793/1442/512 788/1443/511 +f 788/1444/511 793/1445/512 794/1446/513 789/1447/514 +f 789/1447/514 794/1446/513 791/1439/517 790/1438/518 +f 795/1448/532 796/1449/531 797/1450/533 798/1451/534 +f 802/1452/530 803/1453/529 796/1449/531 795/1448/532 +f 798/1451/534 797/1450/533 804/1454/528 799/1455/527 +f 799/1455/527 804/1454/528 805/1456/524 800/1457/523 +f 800/1458/523 805/1459/524 806/1460/525 801/1461/526 +f 801/1461/526 806/1460/525 803/1453/529 802/1452/530 +f 807/1462/544 808/1463/543 809/1464/545 810/1465/546 +f 814/1466/542 815/1467/541 808/1463/543 807/1462/544 +f 810/1465/546 809/1464/545 816/1468/540 811/1469/539 +f 811/1469/539 816/1468/540 817/1470/536 812/1471/535 +f 812/1472/535 817/1473/536 818/1474/537 813/1475/538 +f 813/1475/538 818/1474/537 815/1467/541 814/1466/542 +f 321/1476/132 701/1319/456 700/1317/454 322/1477/131 +f 821/1478/286 704/1325/462 703/1322/459 820/1479/287 +f 822/1480/288 705/1326/463 704/1325/462 821/1478/286 +f 322/1477/131 700/1317/454 699/1315/452 323/1481/133 +f 822/1480/288 823/1482/150 706/1328/465 705/1326/463 +f 819/1483/290 702/1320/457 701/1319/456 321/1476/132 +f 820/1479/287 703/1322/459 702/1320/457 819/1483/290 +f 333/1484/184 334/1485/295 714/1346/481 713/1344/479 +f 829/1486/144 828/1487/143 722/1361/496 721/1359/494 +f 338/996/293 717/995/292 716/1350/485 335/1488/294 +f 337/1489/296 715/1348/483 714/1346/481 334/1485/295 +f 831/1490/198 719/1355/490 718/994/291 832/993/197 +f 830/1491/203 720/1358/493 719/1355/490 831/1490/198 +f 829/1486/144 721/1359/494 720/1358/493 830/1491/203 +f 335/1488/294 716/1350/485 715/1348/483 337/1489/296 +f 323/1481/133 699/1315/452 698/1312/449 324/1492/134 +f 325/1493/289 324/1492/134 698/1312/449 697/1311/448 +f 865/1363/498 833/1362/497 858/1297/434 866/1296/433 +f 827/1494/302 330/1495/301 692/1300/437 691/1299/436 +f 330/1495/301 329/1496/300 693/1303/440 692/1300/437 +f 329/1496/300 328/1497/299 694/1305/442 693/1303/440 +f 328/1497/299 327/1498/298 695/1307/444 694/1305/442 +f 327/1498/298 326/1499/297 696/1309/446 695/1307/444 +f 326/1499/297 325/1493/289 697/1311/448 696/1309/446 +f 823/1482/150 336/1500/149 707/1331/468 706/1328/465 +f 336/1500/149 824/1501/157 708/1332/469 707/1331/468 +f 824/1501/157 331/1502/166 709/1335/472 708/1332/469 +f 331/1503/166 825/1504/165 710/1338/473 709/1337/472 +f 825/1504/165 826/1505/176 711/1341/476 710/1338/473 +f 826/1505/176 332/1506/175 712/1342/477 711/1341/476 +f 332/1506/175 333/1484/184 713/1344/479 712/1342/477 +f 722/1361/496 828/1487/143 827/1494/302 691/1299/436 +f 897/1507/547 898/1508/548 899/1509/549 900/1510/550 +f 904/1511/551 905/1512/552 898/1508/548 897/1507/547 +f 900/1510/550 899/1509/549 906/1513/553 901/1514/554 +f 901/1514/554 906/1513/553 907/1515/555 902/1516/556 +f 902/1517/556 907/1518/555 908/1519/557 903/1520/558 +f 903/1520/558 908/1519/557 905/1512/552 904/1511/551 +f 909/1521/559 910/1522/1 911/1523/560 912/1524/561 +f 916/1525/562 917/1526/563 910/1522/1 909/1521/559 +f 912/1524/561 911/1523/560 918/1527/564 913/1528/565 +f 913/1528/565 918/1527/564 919/1529/2 914/1530/566 +f 914/1531/566 919/1532/2 920/1533/567 915/1534/568 +f 915/1534/568 920/1533/567 917/1526/563 916/1525/562 +f 921/1535/569 922/1536/570 923/1537/571 924/1538/572 +f 928/1539/573 929/1540/574 922/1536/570 921/1535/569 +f 924/1538/572 923/1537/571 930/1541/575 925/1542/576 +f 925/1542/576 930/1541/575 931/1543/577 926/1544/578 +f 926/1545/578 931/1546/577 932/1547/579 927/1548/580 +f 927/1548/580 932/1547/579 929/1540/574 928/1539/573 +f 933/1549/581 934/1550/363 935/1551/582 936/1552/583 +f 940/1553/584 941/1554/585 934/1550/363 933/1549/581 +f 936/1552/583 935/1551/582 942/1555/586 937/1556/587 +f 937/1556/587 942/1555/586 943/1557/356 938/1558/588 +f 938/1559/588 943/1560/356 944/1561/589 939/1562/590 +f 939/1562/590 944/1561/589 941/1554/585 940/1553/584 +f 945/1563/556 946/1564/555 947/1565/557 948/1566/558 +f 952/1567/554 953/1568/553 946/1564/555 945/1563/556 +f 948/1566/558 947/1565/557 954/1569/552 949/1570/551 +f 949/1570/551 954/1569/552 955/1571/548 950/1572/547 +f 950/1573/547 955/1574/548 956/1575/549 951/1576/550 +f 951/1576/550 956/1575/549 953/1568/553 952/1567/554 +f 957/1577/566 958/1578/2 959/1579/567 960/1580/568 +f 964/1581/565 965/1582/564 958/1578/2 957/1577/566 +f 960/1580/568 959/1579/567 966/1583/563 961/1584/562 +f 961/1584/562 966/1583/563 967/1585/1 962/1586/559 +f 962/1587/559 967/1588/1 968/1589/560 963/1590/561 +f 963/1590/561 968/1589/560 965/1582/564 964/1581/565 +f 969/1591/578 970/1592/577 971/1593/579 972/1594/580 +f 976/1595/576 977/1596/575 970/1592/577 969/1591/578 +f 972/1594/580 971/1593/579 978/1597/574 973/1598/573 +f 973/1598/573 978/1597/574 979/1599/570 974/1600/569 +f 974/1601/569 979/1602/570 980/1603/571 975/1604/572 +f 975/1604/572 980/1603/571 977/1596/575 976/1595/576 +f 981/1605/588 982/1606/356 983/1607/589 984/1608/590 +f 988/1609/587 989/1610/586 982/1606/356 981/1605/588 +f 984/1608/590 983/1607/589 990/1611/585 985/1612/584 +f 985/1612/584 990/1611/585 991/1613/363 986/1614/581 +f 986/1615/581 991/1616/363 992/1617/582 987/1618/583 +f 987/1618/583 992/1617/582 989/1610/586 988/1609/587 diff --git a/mods/pipeworks/models/pipeworks_pipe_6_lowpoly.obj b/mods/pipeworks/models/pipeworks_pipe_6_lowpoly.obj new file mode 100755 index 0000000..0ab94eb --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_6_lowpoly.obj @@ -0,0 +1,378 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend' +# www.blender.org +o Cylinder.002_Cylinder.006_None.001 +v -0.468750 -0.156250 -0.064721 +v -0.468750 -0.064721 -0.156250 +v -0.468750 0.064721 -0.156250 +v -0.468750 0.156250 -0.064721 +v -0.468750 0.156250 0.064721 +v -0.468750 0.064721 0.156250 +v -0.468750 -0.064721 0.156250 +v -0.468750 -0.156250 0.064721 +v -0.500000 -0.064721 -0.156250 +v -0.500000 -0.156250 -0.064721 +v -0.500000 -0.156250 0.064721 +v -0.500000 -0.064721 0.156250 +v -0.500000 0.064721 0.156250 +v -0.500000 0.156250 0.064721 +v -0.500000 0.156250 -0.064721 +v -0.500000 0.064721 -0.156250 +v 0.500000 -0.156250 -0.064721 +v 0.500000 -0.064721 -0.156250 +v 0.500000 0.064721 -0.156250 +v 0.500000 0.156250 -0.064721 +v 0.500000 0.156250 0.064721 +v 0.500000 0.064721 0.156250 +v 0.500000 -0.064721 0.156250 +v 0.500000 -0.156250 0.064721 +v 0.468750 -0.064721 -0.156250 +v 0.468750 -0.156250 -0.064721 +v 0.468750 -0.156250 0.064721 +v 0.468750 -0.064721 0.156250 +v 0.468750 0.064721 0.156250 +v 0.468750 0.156250 0.064721 +v 0.468750 0.156250 -0.064721 +v 0.468750 0.064721 -0.156250 +v -0.156250 -0.500000 -0.064721 +v -0.064721 -0.500000 -0.156250 +v 0.064721 -0.500000 -0.156250 +v 0.156250 -0.500000 -0.064721 +v 0.156250 -0.500000 0.064721 +v 0.064721 -0.500000 0.156250 +v -0.064721 -0.500000 0.156250 +v -0.156250 -0.500000 0.064721 +v -0.064721 -0.468750 -0.156250 +v -0.156250 -0.468750 -0.064721 +v -0.156250 -0.468750 0.064721 +v -0.064721 -0.468750 0.156250 +v 0.064721 -0.468750 0.156250 +v 0.156250 -0.468750 0.064721 +v 0.156250 -0.468750 -0.064721 +v 0.064721 -0.468750 -0.156250 +v -0.468750 -0.051777 -0.125000 +v -0.468750 -0.125000 -0.051777 +v -0.468750 -0.125000 0.051777 +v -0.468750 -0.051777 0.125000 +v -0.468750 0.051777 0.125000 +v -0.468750 0.125000 0.051777 +v -0.468750 0.125000 -0.051777 +v -0.468750 0.051777 -0.125000 +v 0.468750 -0.125000 -0.051777 +v 0.468750 -0.051777 -0.125000 +v 0.468750 0.051777 -0.125000 +v 0.468750 0.125000 -0.051777 +v 0.468750 0.125000 0.051777 +v 0.468750 0.051777 0.125000 +v 0.468750 -0.051777 0.125000 +v 0.468750 -0.125000 0.051777 +v 0.051777 -0.051777 0.125000 +v 0.125000 -0.125000 0.051777 +v 0.125000 -0.125000 -0.051777 +v 0.051777 -0.051777 -0.125000 +v -0.051777 -0.468750 -0.125000 +v -0.051777 -0.051777 -0.125000 +v 0.051777 -0.468750 -0.125000 +v -0.051777 -0.051777 0.125000 +v -0.051777 -0.468750 0.125000 +v 0.051777 -0.468750 0.125000 +v -0.125000 -0.125000 -0.051777 +v -0.125000 -0.125000 0.051777 +v -0.125000 -0.468750 -0.051777 +v 0.125000 -0.468750 -0.051777 +v 0.125000 -0.468750 0.051777 +v -0.125000 -0.468750 0.051777 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0022 0.5135 +vt 0.8768 0.5135 +vt 0.8768 0.2909 +vt 1.0022 0.3300 +vt 0.1242 0.5135 +vt 0.1242 0.3300 +vt 0.2498 0.2909 +vt 0.2498 0.5135 +vt 0.2498 0.5135 +vt 0.2498 0.2909 +vt 0.3752 0.2909 +vt 0.3752 0.5135 +vt 0.6260 0.5135 +vt 0.5006 0.5135 +vt 0.5006 0.0130 +vt 0.6259 0.0130 +vt 0.7514 0.0130 +vt 0.7514 0.5135 +vt 0.8767 0.0130 +vt 0.8768 0.2356 +vt -0.0012 0.5135 +vt -0.0012 0.3300 +vt 0.8768 0.5135 +vt 0.7514 0.5135 +vt 0.7514 0.2909 +vt 0.8768 0.2909 +vt 0.3752 0.5135 +vt 0.3751 0.0130 +vt 0.1242 0.0130 +vt 0.1242 0.1965 +vt -0.0012 0.1965 +vt -0.0013 0.0130 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.1242 0.5135 +vt 0.1242 0.3300 +vt 1.0022 0.5135 +vt 1.0022 0.3300 +vt 0.2498 0.2356 +vt 0.2498 0.0130 +vt 0.5006 0.3300 +vt 0.5006 0.5135 +vt 0.6260 0.5135 +vt 0.6260 0.3300 +vt -0.0012 0.5135 +vt -0.0012 0.3300 +vt 1.0021 0.0130 +vt 1.0022 0.1965 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn -0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 -0.7173 +vn 0.6302 -0.7173 -0.2971 +vn -0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 0.2971 +vn -0.6302 -0.7173 0.2971 +vn 0.6302 -0.2971 0.7173 +vn -0.6302 -0.2971 0.7173 +vn 0.6302 0.2971 0.7173 +vn -0.6302 0.2971 0.7173 +vn 0.6302 0.7173 0.2971 +vn -0.6302 0.7173 0.2971 +vn 0.6302 0.7173 -0.2971 +vn -0.6302 0.7173 -0.2971 +vn 0.6302 0.2971 -0.7173 +vn -0.6302 0.2971 -0.7173 +vn -0.6303 -0.2971 -0.7173 +vn -0.6303 -0.7173 -0.2971 +vn -0.6303 -0.7173 0.2971 +vn -0.6303 -0.2971 0.7173 +vn -0.6303 0.2971 0.7173 +vn -0.6303 0.7173 0.2971 +vn -0.6303 0.7173 -0.2971 +vn -0.6303 0.2971 -0.7173 +vn 0.6303 -0.7173 -0.2971 +vn 0.6303 -0.2971 -0.7173 +vn 0.6303 0.2971 -0.7173 +vn 0.6303 0.7173 -0.2971 +vn 0.6303 0.7173 0.2971 +vn 0.6303 0.2971 0.7173 +vn 0.6303 -0.2971 0.7173 +vn 0.6303 -0.7173 0.2971 +vn 0.1101 -0.1101 0.9878 +vn 0.5789 -0.5789 0.5743 +vn 0.5789 -0.5789 -0.5743 +vn 0.1101 -0.1101 -0.9878 +vn -0.2971 -0.6303 -0.7173 +vn -0.1101 -0.1101 -0.9878 +vn 0.2971 -0.6303 -0.7173 +vn -0.1101 -0.1101 0.9878 +vn -0.2971 -0.6303 0.7173 +vn 0.2971 -0.6303 0.7173 +vn -0.5789 -0.5789 -0.5743 +vn -0.5789 -0.5789 0.5743 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 -0.6302 -0.2971 +vn -0.7173 -0.6302 0.2971 +vn -0.7173 0.6302 0.2971 +vn -0.2971 0.6302 -0.7173 +vn -0.2971 -0.6302 -0.7173 +vn -0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn 0.2971 0.6302 0.7173 +vn 0.7173 -0.6302 0.2971 +vn 0.7173 0.6302 0.2971 +vn 0.7173 -0.6302 -0.2971 +vn 0.7173 0.6302 -0.2971 +vn 0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 -0.7173 +vn -0.7173 -0.6303 -0.2971 +vn 0.7173 -0.6303 -0.2971 +vn 0.7173 -0.6303 0.2971 +vn -0.7173 -0.6303 0.2971 +g Cylinder.002_Cylinder.006_None.001_Cylinder.002_Cylinder.006_None.001_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2 +f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 +f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2 +f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3 +f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4 +s 1 +f 9/49/5 2/50/6 1/51/7 10/52/8 +f 10/52/8 1/51/7 8/53/9 11/54/10 +f 11/54/10 8/53/9 7/55/11 12/56/12 +f 12/57/12 7/58/11 6/59/13 13/60/14 +f 13/60/14 6/59/13 5/61/15 14/62/16 +f 14/62/16 5/61/15 4/63/17 15/64/18 +f 15/64/18 4/63/17 3/65/19 16/66/20 +f 16/66/20 3/65/19 2/50/6 9/49/5 +f 26/67/8 17/68/7 24/69/9 27/70/10 +f 25/71/5 18/72/6 17/68/7 26/67/8 +f 27/70/10 24/69/9 23/73/11 28/74/12 +f 28/75/12 23/76/11 22/77/13 29/78/14 +f 29/78/14 22/77/13 21/79/15 30/80/16 +f 30/80/16 21/79/15 20/81/17 31/82/18 +f 31/82/18 20/81/17 19/83/19 32/84/20 +f 32/84/20 19/83/19 18/72/6 25/71/5 +f 49/85/21 50/86/22 51/87/23 52/88/24 53/89/25 54/90/26 55/91/27 56/92/28 +f 57/93/29 58/94/30 59/95/31 60/96/32 61/97/33 62/98/34 63/99/35 64/100/36 +f 64/101/36 63/102/35 65/103/37 66/104/38 +f 57/105/29 67/106/39 68/107/40 58/108/30 +f 69/109/41 70/110/42 68/111/40 71/112/43 +f 61/113/33 60/114/32 55/115/27 54/116/26 +f 53/117/25 62/118/34 61/113/33 54/116/26 +f 53/117/25 52/119/24 72/120/44 65/103/37 63/102/35 62/118/34 +f 57/105/29 64/121/36 66/122/38 67/106/39 +f 73/123/45 74/124/46 65/125/37 72/126/44 +f 55/115/27 60/114/32 59/127/31 56/128/28 +f 50/129/22 75/130/47 76/131/48 51/132/23 +f 42/133/49 33/134/50 40/135/51 43/136/52 +f 41/137/53 34/138/54 33/134/50 42/133/49 +f 43/136/52 40/135/51 39/139/55 44/140/56 +f 44/141/56 39/142/55 38/143/57 45/144/58 +f 45/144/58 38/143/57 37/145/59 46/146/60 +f 46/146/60 37/145/59 36/147/61 47/148/62 +f 47/148/62 36/147/61 35/149/63 48/150/64 +f 48/150/64 35/149/63 34/138/54 41/137/53 +f 77/151/65 69/152/41 71/153/43 78/154/66 79/155/67 74/156/46 73/157/45 80/158/68 +f 77/159/65 75/160/47 70/110/42 69/109/41 +f 80/161/68 73/123/45 72/126/44 76/162/48 +f 58/108/30 68/107/40 70/163/42 49/164/21 56/128/28 59/127/31 +f 71/112/43 68/111/40 67/165/39 78/166/66 +f 79/167/67 66/168/38 65/125/37 74/124/46 +f 50/129/22 49/164/21 70/163/42 75/130/47 +f 79/167/67 78/166/66 67/165/39 66/168/38 +f 77/159/65 80/169/68 76/170/48 75/160/47 +f 51/171/23 76/172/48 72/120/44 52/119/24 diff --git a/mods/pipeworks/models/pipeworks_pipe_7.obj b/mods/pipeworks/models/pipeworks_pipe_7.obj new file mode 100755 index 0000000..12d389a --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_7.obj @@ -0,0 +1,5314 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-spigot-pouring.blend' +# www.blender.org +o Pipe_Cylinder.002_None.004 +v -0.460912 0.130078 -0.063644 +v -0.460912 0.139022 -0.062467 +v -0.460912 0.142474 -0.054132 +v -0.460912 0.136982 -0.046976 +v -0.460912 0.128039 -0.048153 +v -0.460912 0.124587 -0.056487 +v 0.460914 0.136982 -0.046976 +v 0.460914 0.142474 -0.054133 +v 0.460914 0.139022 -0.062467 +v 0.460914 0.130078 -0.063644 +v 0.460914 0.124587 -0.056488 +v 0.460914 0.128039 -0.048153 +v -0.460912 0.046976 -0.136982 +v -0.460912 0.054133 -0.142474 +v -0.460912 0.062467 -0.139022 +v -0.460912 0.063644 -0.130078 +v -0.460912 0.056488 -0.124587 +v -0.460912 0.048154 -0.128039 +v 0.460914 0.063644 -0.130078 +v 0.460914 0.062467 -0.139022 +v 0.460914 0.054133 -0.142474 +v 0.460914 0.046976 -0.136982 +v 0.460914 0.048153 -0.128039 +v 0.460914 0.056487 -0.124587 +v -0.460912 -0.063644 -0.130078 +v -0.460912 -0.062467 -0.139022 +v -0.460912 -0.054132 -0.142474 +v -0.460912 -0.046976 -0.136982 +v -0.460912 -0.048153 -0.128039 +v -0.460912 -0.056487 -0.124587 +v 0.460914 -0.046976 -0.136982 +v 0.460914 -0.054133 -0.142474 +v 0.460914 -0.062467 -0.139022 +v 0.460914 -0.063644 -0.130078 +v 0.460914 -0.056488 -0.124587 +v 0.460914 -0.048153 -0.128039 +v -0.460912 -0.136982 -0.046976 +v -0.460912 -0.142474 -0.054133 +v -0.460912 -0.139022 -0.062467 +v -0.460912 -0.130078 -0.063644 +v -0.460912 -0.124587 -0.056488 +v -0.460912 -0.128039 -0.048153 +v 0.460914 -0.130078 -0.063644 +v 0.460914 -0.139022 -0.062467 +v 0.460914 -0.142474 -0.054133 +v 0.460914 -0.136982 -0.046976 +v 0.460914 -0.128039 -0.048153 +v 0.460914 -0.124587 -0.056487 +v -0.460912 -0.130078 0.063644 +v -0.460912 -0.139022 0.062467 +v -0.460912 -0.142474 0.054132 +v -0.460912 -0.136982 0.046976 +v -0.460912 -0.128039 0.048153 +v -0.460912 -0.124587 0.056487 +v 0.460914 -0.136982 0.046976 +v 0.460914 -0.142474 0.054133 +v 0.460914 -0.139022 0.062467 +v 0.460914 -0.130078 0.063644 +v 0.460914 -0.124587 0.056487 +v 0.460914 -0.128039 0.048153 +v -0.460912 -0.046976 0.136982 +v -0.460912 -0.054133 0.142474 +v -0.460912 -0.062467 0.139022 +v -0.460912 -0.063644 0.130078 +v -0.460912 -0.056488 0.124587 +v -0.460912 -0.048153 0.128039 +v 0.460914 -0.063644 0.130078 +v 0.460914 -0.062467 0.139022 +v 0.460914 -0.054132 0.142474 +v 0.460914 -0.046976 0.136982 +v 0.460914 -0.048153 0.128039 +v 0.460914 -0.056487 0.124587 +v -0.460912 0.063644 0.130078 +v -0.460912 0.062467 0.139022 +v -0.460912 0.054132 0.142474 +v -0.460912 0.046976 0.136982 +v -0.460912 0.048153 0.128039 +v -0.460912 0.056487 0.124587 +v 0.460914 0.046976 0.136982 +v 0.460914 0.054133 0.142474 +v 0.460914 0.062467 0.139022 +v 0.460914 0.063644 0.130078 +v 0.460914 0.056487 0.124587 +v 0.460914 0.048153 0.128039 +v -0.460912 0.136982 0.046976 +v -0.460912 0.142474 0.054133 +v -0.460912 0.139022 0.062467 +v -0.460912 0.130078 0.063644 +v -0.460912 0.124587 0.056488 +v -0.460912 0.128039 0.048153 +v 0.460914 0.130078 0.063644 +v 0.460914 0.139022 0.062467 +v 0.460914 0.142474 0.054133 +v 0.460914 0.136982 0.046976 +v 0.460914 0.128039 0.048153 +v 0.460914 0.124587 0.056487 +v 0.468750 0.099603 0.121367 +v 0.468750 0.121367 0.099603 +v 0.468750 0.138467 0.074012 +v 0.468750 0.150245 0.045576 +v 0.468750 0.156250 0.015389 +v 0.468750 0.156250 -0.015389 +v 0.468750 0.150245 -0.045576 +v 0.468750 0.138467 -0.074012 +v 0.468750 0.121367 -0.099603 +v 0.468750 0.099603 -0.121367 +v 0.468750 0.074012 -0.138467 +v 0.468750 0.045576 -0.150245 +v 0.468750 0.015389 -0.156250 +v 0.468750 -0.015389 -0.156250 +v 0.468750 -0.045576 -0.150245 +v 0.468750 -0.074012 -0.138467 +v 0.468750 -0.099603 -0.121367 +v 0.468750 -0.121367 -0.099603 +v 0.468750 -0.138467 -0.074012 +v 0.468750 -0.150245 -0.045576 +v 0.468750 -0.156250 -0.015389 +v 0.468750 -0.156250 0.015389 +v 0.468750 -0.150245 0.045576 +v 0.468750 -0.138466 0.074012 +v 0.468750 -0.121367 0.099603 +v 0.468750 -0.099603 0.121367 +v 0.468750 -0.074012 0.138467 +v 0.468750 -0.045576 0.150245 +v 0.468750 -0.015389 0.156250 +v 0.468750 0.015390 0.156250 +v 0.468750 0.045577 0.150245 +v 0.468750 0.074012 0.138467 +v 0.500000 -0.150245 -0.045576 +v 0.500000 -0.138467 -0.074012 +v 0.500000 -0.121367 -0.099603 +v 0.500000 -0.099603 -0.121367 +v 0.500000 -0.074012 -0.138467 +v 0.500000 -0.045576 -0.150245 +v 0.500000 -0.015389 -0.156250 +v 0.500000 0.015389 -0.156250 +v 0.500000 0.045576 -0.150245 +v 0.500000 0.074012 -0.138467 +v 0.500000 0.099603 -0.121367 +v 0.500000 0.121367 -0.099603 +v 0.500000 0.138467 -0.074012 +v 0.500000 0.150245 -0.045576 +v 0.500000 0.156250 -0.015389 +v 0.500000 0.156250 0.015389 +v 0.500000 0.150245 0.045576 +v 0.500000 0.138467 0.074012 +v 0.500000 0.121367 0.099603 +v 0.500000 0.099603 0.121367 +v 0.500000 0.074012 0.138467 +v 0.500000 0.045577 0.150245 +v 0.500000 0.015390 0.156250 +v 0.500000 -0.015389 0.156250 +v 0.500000 -0.045576 0.150245 +v 0.500000 -0.074012 0.138467 +v 0.500000 -0.099603 0.121367 +v 0.500000 -0.121367 0.099603 +v 0.500000 -0.138466 0.074012 +v 0.500000 -0.150245 0.045576 +v 0.500000 -0.156250 0.015389 +v 0.500000 -0.156250 -0.015389 +v -0.468750 -0.156250 -0.015389 +v -0.468750 -0.150245 -0.045576 +v -0.468750 -0.138467 -0.074012 +v -0.468750 -0.121367 -0.099603 +v -0.468750 -0.099603 -0.121367 +v -0.468750 -0.074012 -0.138467 +v -0.468750 -0.045576 -0.150245 +v -0.468750 -0.015389 -0.156250 +v -0.468750 0.015389 -0.156250 +v -0.468750 0.045576 -0.150245 +v -0.468750 0.074012 -0.138467 +v -0.468750 0.099603 -0.121367 +v -0.468750 0.121367 -0.099603 +v -0.468750 0.138467 -0.074012 +v -0.468750 0.150245 -0.045576 +v -0.468750 0.156250 -0.015389 +v -0.468750 0.156249 0.015389 +v -0.468750 0.150245 0.045577 +v -0.468750 0.138466 0.074012 +v -0.468750 0.121367 0.099603 +v -0.468750 0.099603 0.121367 +v -0.468750 0.074012 0.138467 +v -0.468750 0.045576 0.150245 +v -0.468750 0.015389 0.156250 +v -0.468750 -0.015389 0.156250 +v -0.468750 -0.045576 0.150245 +v -0.468750 -0.074012 0.138467 +v -0.468750 -0.099603 0.121367 +v -0.468750 -0.121367 0.099603 +v -0.468750 -0.138466 0.074012 +v -0.468750 -0.150245 0.045576 +v -0.468750 -0.156250 0.015389 +v -0.500000 -0.138467 0.074012 +v -0.500000 -0.121367 0.099603 +v -0.500000 -0.099603 0.121367 +v -0.500000 -0.074012 0.138467 +v -0.500000 -0.045576 0.150245 +v -0.500000 -0.015389 0.156250 +v -0.500000 0.015389 0.156250 +v -0.500000 0.045576 0.150245 +v -0.500000 0.074012 0.138467 +v -0.500000 0.099603 0.121367 +v -0.500000 0.121367 0.099603 +v -0.500000 0.138466 0.074012 +v -0.500000 0.150245 0.045577 +v -0.500000 0.156250 0.015389 +v -0.500000 0.156250 -0.015389 +v -0.500000 0.150245 -0.045576 +v -0.500000 0.138467 -0.074012 +v -0.500000 0.121367 -0.099603 +v -0.500000 0.099603 -0.121367 +v -0.500000 0.074012 -0.138467 +v -0.500000 0.045576 -0.150245 +v -0.500000 0.015389 -0.156250 +v -0.500000 -0.015389 -0.156250 +v -0.500000 -0.045576 -0.150245 +v -0.500000 -0.074012 -0.138467 +v -0.500000 -0.099603 -0.121367 +v -0.500000 -0.121367 -0.099603 +v -0.500000 -0.138467 -0.074012 +v -0.500000 -0.150245 -0.045576 +v -0.500000 -0.156250 -0.015389 +v -0.500000 -0.156250 0.015389 +v -0.500000 -0.150245 0.045576 +v -0.460912 0.095821 -0.108578 +v -0.460912 0.104534 -0.110913 +v -0.460912 0.110913 -0.104534 +v -0.460912 0.108578 -0.095821 +v -0.460912 0.099865 -0.093486 +v -0.460912 0.093486 -0.099865 +v 0.460914 0.108578 -0.095821 +v 0.460914 0.110913 -0.104534 +v 0.460914 0.104534 -0.110913 +v 0.460914 0.095821 -0.108578 +v 0.460914 0.093486 -0.099865 +v 0.460914 0.099865 -0.093486 +v -0.460912 -0.009021 -0.144532 +v -0.460912 -0.004510 -0.152344 +v -0.460912 0.004510 -0.152344 +v -0.460912 0.009021 -0.144532 +v -0.460912 0.004510 -0.136720 +v -0.460912 -0.004510 -0.136720 +v 0.460914 0.009021 -0.144532 +v 0.460914 0.004510 -0.152344 +v 0.460914 -0.004510 -0.152344 +v 0.460914 -0.009021 -0.144532 +v 0.460914 -0.004510 -0.136720 +v 0.460914 0.004510 -0.136720 +v -0.460912 -0.108578 -0.095821 +v -0.460912 -0.110913 -0.104534 +v -0.460912 -0.104534 -0.110913 +v -0.460912 -0.095821 -0.108578 +v -0.460912 -0.093486 -0.099865 +v -0.460912 -0.099865 -0.093486 +v 0.460914 -0.095821 -0.108578 +v 0.460914 -0.104534 -0.110913 +v 0.460914 -0.110913 -0.104534 +v 0.460914 -0.108578 -0.095821 +v 0.460914 -0.099865 -0.093486 +v 0.460914 -0.093486 -0.099865 +v -0.460912 -0.144532 0.009021 +v -0.460912 -0.152344 0.004510 +v -0.460912 -0.152344 -0.004511 +v -0.460912 -0.144532 -0.009021 +v -0.460912 -0.136720 -0.004510 +v -0.460912 -0.136720 0.004510 +v 0.460914 -0.144532 -0.009021 +v 0.460914 -0.152344 -0.004510 +v 0.460914 -0.152344 0.004510 +v 0.460914 -0.144532 0.009021 +v 0.460914 -0.136720 0.004510 +v 0.460914 -0.136720 -0.004510 +v -0.460912 -0.095821 0.108578 +v -0.460912 -0.104534 0.110913 +v -0.460912 -0.110913 0.104534 +v -0.460912 -0.108578 0.095821 +v -0.460912 -0.099865 0.093486 +v -0.460912 -0.093486 0.099865 +v 0.460914 -0.108578 0.095821 +v 0.460914 -0.110913 0.104534 +v 0.460914 -0.104534 0.110913 +v 0.460914 -0.095821 0.108578 +v 0.460914 -0.093486 0.099865 +v 0.460914 -0.099865 0.093486 +v -0.460912 0.009021 0.144532 +v -0.460912 0.004510 0.152344 +v -0.460912 -0.004510 0.152344 +v -0.460912 -0.009021 0.144532 +v -0.460912 -0.004510 0.136720 +v -0.460912 0.004510 0.136720 +v 0.460914 -0.009021 0.144532 +v 0.460914 -0.004510 0.152344 +v 0.460914 0.004510 0.152344 +v 0.460914 0.009021 0.144532 +v 0.460914 0.004510 0.136720 +v 0.460914 -0.004510 0.136720 +v -0.460912 0.108578 0.095821 +v -0.460912 0.110913 0.104534 +v -0.460912 0.104534 0.110913 +v -0.460912 0.095821 0.108578 +v -0.460912 0.093486 0.099865 +v -0.460912 0.099865 0.093486 +v 0.460914 0.095821 0.108578 +v 0.460914 0.104534 0.110913 +v 0.460914 0.110913 0.104534 +v 0.460914 0.108578 0.095821 +v 0.460914 0.099865 0.093486 +v 0.460914 0.093486 0.099865 +v -0.460912 0.144532 -0.009021 +v -0.460912 0.152344 -0.004510 +v -0.460912 0.152344 0.004510 +v -0.460912 0.144532 0.009021 +v -0.460912 0.136720 0.004510 +v -0.460912 0.136720 -0.004510 +v 0.460914 0.144532 0.009021 +v 0.460914 0.152344 0.004510 +v 0.460914 0.152344 -0.004510 +v 0.460914 0.144532 -0.009021 +v 0.460914 0.136720 -0.004510 +v 0.460914 0.136720 0.004510 +v 0.136982 -0.460914 -0.046976 +v 0.142474 -0.460914 -0.054133 +v 0.139022 -0.460914 -0.062467 +v 0.130078 -0.460914 -0.063644 +v 0.124587 -0.460914 -0.056488 +v 0.128039 -0.460914 -0.048154 +v 0.063644 -0.460914 -0.130078 +v 0.062467 -0.460914 -0.139022 +v 0.054133 -0.460914 -0.142474 +v 0.046976 -0.460914 -0.136982 +v 0.048153 -0.460914 -0.128039 +v 0.056487 -0.460914 -0.124587 +v -0.046976 -0.460914 -0.136982 +v -0.054133 -0.460914 -0.142474 +v -0.062467 -0.460914 -0.139022 +v -0.063644 -0.460914 -0.130078 +v -0.056487 -0.460914 -0.124587 +v -0.048153 -0.460914 -0.128039 +v -0.130078 -0.460914 -0.063644 +v -0.139022 -0.460914 -0.062467 +v -0.142474 -0.460914 -0.054133 +v -0.136982 -0.460914 -0.046976 +v -0.128039 -0.460914 -0.048153 +v -0.124587 -0.460914 -0.056488 +v -0.136982 -0.460914 0.046976 +v -0.142474 -0.460914 0.054133 +v -0.139022 -0.460914 0.062467 +v -0.130078 -0.460914 0.063644 +v -0.124587 -0.460914 0.056487 +v -0.128039 -0.460914 0.048153 +v -0.063644 -0.460914 0.130078 +v -0.062467 -0.460914 0.139022 +v -0.054132 -0.460914 0.142474 +v -0.046976 -0.460914 0.136982 +v -0.048153 -0.460914 0.128039 +v -0.056487 -0.460914 0.124587 +v 0.046976 -0.460914 0.136982 +v 0.054133 -0.460914 0.142474 +v 0.062467 -0.460914 0.139022 +v 0.063644 -0.460914 0.130078 +v 0.056488 -0.460914 0.124587 +v 0.048153 -0.460914 0.128039 +v 0.130078 -0.460914 0.063644 +v 0.139022 -0.460914 0.062467 +v 0.142474 -0.460914 0.054132 +v 0.136982 -0.460914 0.046976 +v 0.128039 -0.460914 0.048153 +v 0.124587 -0.460914 0.056487 +v 0.099604 -0.468750 0.121367 +v 0.121367 -0.468750 0.099603 +v 0.138467 -0.468750 0.074012 +v 0.150245 -0.468750 0.045576 +v 0.156250 -0.468750 0.015389 +v 0.156250 -0.468750 -0.015389 +v 0.150245 -0.468750 -0.045576 +v 0.138467 -0.468750 -0.074012 +v 0.121367 -0.468750 -0.099603 +v 0.099603 -0.468750 -0.121367 +v 0.074012 -0.468750 -0.138467 +v 0.045576 -0.468750 -0.150245 +v 0.015389 -0.468750 -0.156250 +v -0.015389 -0.468750 -0.156250 +v -0.045576 -0.468750 -0.150245 +v -0.074012 -0.468750 -0.138467 +v -0.099603 -0.468750 -0.121367 +v -0.121367 -0.468750 -0.099603 +v -0.138467 -0.468750 -0.074012 +v -0.150245 -0.468750 -0.045576 +v -0.156249 -0.468750 -0.015389 +v -0.156249 -0.468750 0.015389 +v -0.150245 -0.468750 0.045576 +v -0.138466 -0.468750 0.074012 +v -0.121367 -0.468750 0.099603 +v -0.099603 -0.468750 0.121367 +v -0.074012 -0.468750 0.138467 +v -0.045576 -0.468750 0.150245 +v -0.015389 -0.468750 0.156250 +v 0.015390 -0.468750 0.156250 +v 0.045577 -0.468750 0.150245 +v 0.074012 -0.468750 0.138466 +v -0.150245 -0.500000 -0.045576 +v -0.138467 -0.500000 -0.074012 +v -0.121367 -0.500000 -0.099603 +v -0.099603 -0.500000 -0.121367 +v -0.074012 -0.500000 -0.138467 +v -0.045576 -0.500000 -0.150245 +v -0.015389 -0.500000 -0.156250 +v 0.015389 -0.500000 -0.156250 +v 0.045576 -0.500000 -0.150245 +v 0.074012 -0.500000 -0.138467 +v 0.099603 -0.500000 -0.121367 +v 0.121367 -0.500000 -0.099603 +v 0.138467 -0.500000 -0.074012 +v 0.150245 -0.500000 -0.045576 +v 0.156250 -0.500000 -0.015389 +v 0.156250 -0.500000 0.015389 +v 0.150245 -0.500000 0.045576 +v 0.138467 -0.500000 0.074012 +v 0.121367 -0.500000 0.099603 +v 0.099603 -0.500000 0.121367 +v 0.074012 -0.500000 0.138466 +v 0.045577 -0.500000 0.150245 +v 0.015390 -0.500000 0.156249 +v -0.015389 -0.500000 0.156249 +v -0.045576 -0.500000 0.150245 +v -0.074012 -0.500000 0.138467 +v -0.099603 -0.500000 0.121367 +v -0.121367 -0.500000 0.099603 +v -0.138466 -0.500000 0.074012 +v -0.150245 -0.500000 0.045576 +v -0.156249 -0.500000 0.015389 +v -0.156249 -0.500000 -0.015389 +v 0.108578 -0.460914 -0.095821 +v 0.110913 -0.460914 -0.104534 +v 0.104534 -0.460914 -0.110913 +v 0.095821 -0.460914 -0.108578 +v 0.093486 -0.460914 -0.099865 +v 0.099865 -0.460914 -0.093486 +v 0.009021 -0.460914 -0.144532 +v 0.004510 -0.460914 -0.152344 +v -0.004510 -0.460914 -0.152344 +v -0.009021 -0.460914 -0.144532 +v -0.004510 -0.460914 -0.136720 +v 0.004510 -0.460914 -0.136720 +v -0.095821 -0.460914 -0.108578 +v -0.104534 -0.460914 -0.110913 +v -0.110913 -0.460914 -0.104534 +v -0.108578 -0.460914 -0.095821 +v -0.099865 -0.460914 -0.093486 +v -0.093486 -0.460914 -0.099865 +v -0.144532 -0.460914 -0.009021 +v -0.152344 -0.460914 -0.004510 +v -0.152344 -0.460914 0.004510 +v -0.144532 -0.460914 0.009021 +v -0.136720 -0.460914 0.004510 +v -0.136720 -0.460914 -0.004510 +v -0.108578 -0.460914 0.095821 +v -0.110913 -0.460914 0.104534 +v -0.104534 -0.460914 0.110913 +v -0.095821 -0.460914 0.108578 +v -0.093486 -0.460914 0.099865 +v -0.099865 -0.460914 0.093486 +v -0.009021 -0.460914 0.144532 +v -0.004510 -0.460914 0.152344 +v 0.004510 -0.460914 0.152344 +v 0.009021 -0.460914 0.144532 +v 0.004510 -0.460914 0.136720 +v -0.004510 -0.460914 0.136720 +v 0.095821 -0.460914 0.108578 +v 0.104534 -0.460914 0.110913 +v 0.110913 -0.460914 0.104534 +v 0.108578 -0.460914 0.095821 +v 0.099865 -0.460914 0.093486 +v 0.093486 -0.460914 0.099865 +v 0.144532 -0.460914 0.009021 +v 0.152344 -0.460914 0.004510 +v 0.152344 -0.460914 -0.004511 +v 0.144532 -0.460914 -0.009021 +v 0.136720 -0.460914 -0.004510 +v 0.136720 -0.460914 0.004510 +v 0.136982 0.046976 -0.460914 +v 0.142474 0.054133 -0.460914 +v 0.139022 0.062467 -0.460914 +v 0.130078 0.063644 -0.460914 +v 0.124587 0.056488 -0.460914 +v 0.128039 0.048154 -0.460914 +v 0.063644 0.130078 -0.460914 +v 0.062467 0.139022 -0.460914 +v 0.054133 0.142474 -0.460914 +v 0.046976 0.136982 -0.460914 +v 0.048153 0.128039 -0.460914 +v 0.056487 0.124587 -0.460914 +v -0.046976 0.136982 -0.460914 +v -0.054133 0.142474 -0.460914 +v -0.062467 0.139022 -0.460914 +v -0.063644 0.130078 -0.460914 +v -0.056487 0.124587 -0.460914 +v -0.048153 0.128039 -0.460914 +v -0.130078 0.063644 -0.460914 +v -0.139022 0.062467 -0.460914 +v -0.142474 0.054133 -0.460914 +v -0.136982 0.046976 -0.460914 +v -0.128039 0.048153 -0.460914 +v -0.124587 0.056487 -0.460914 +v -0.136982 -0.046976 -0.460914 +v -0.142474 -0.054133 -0.460914 +v -0.139022 -0.062467 -0.460914 +v -0.130078 -0.063644 -0.460914 +v -0.124587 -0.056487 -0.460914 +v -0.128039 -0.048153 -0.460914 +v -0.063644 -0.130078 -0.460914 +v -0.062467 -0.139022 -0.460914 +v -0.054132 -0.142474 -0.460914 +v -0.046976 -0.136982 -0.460914 +v -0.048153 -0.128039 -0.460914 +v -0.056487 -0.124587 -0.460914 +v 0.046976 -0.136982 -0.460914 +v 0.054133 -0.142474 -0.460914 +v 0.062467 -0.139022 -0.460914 +v 0.063644 -0.130078 -0.460914 +v 0.056488 -0.124587 -0.460914 +v 0.048153 -0.128039 -0.460914 +v 0.130078 -0.063644 -0.460914 +v 0.139022 -0.062467 -0.460914 +v 0.142474 -0.054132 -0.460914 +v 0.136982 -0.046976 -0.460914 +v 0.128039 -0.048153 -0.460914 +v 0.124587 -0.056487 -0.460914 +v 0.099604 -0.121367 -0.468750 +v 0.121367 -0.099603 -0.468750 +v 0.138467 -0.074012 -0.468750 +v 0.150245 -0.045576 -0.468750 +v 0.156250 -0.015389 -0.468750 +v 0.156250 0.015389 -0.468750 +v 0.150245 0.045576 -0.468750 +v 0.138467 0.074012 -0.468750 +v 0.121367 0.099603 -0.468750 +v 0.099603 0.121367 -0.468750 +v 0.074012 0.138467 -0.468750 +v 0.045576 0.150245 -0.468750 +v 0.015389 0.156250 -0.468750 +v -0.015389 0.156250 -0.468750 +v -0.045576 0.150245 -0.468750 +v -0.074012 0.138467 -0.468750 +v -0.099603 0.121367 -0.468750 +v -0.121367 0.099603 -0.468750 +v -0.138467 0.074012 -0.468750 +v -0.150245 0.045576 -0.468750 +v -0.156249 0.015389 -0.468750 +v -0.156249 -0.015389 -0.468750 +v -0.150245 -0.045576 -0.468750 +v -0.138466 -0.074012 -0.468750 +v -0.121367 -0.099603 -0.468750 +v -0.099603 -0.121367 -0.468750 +v -0.074012 -0.138467 -0.468750 +v -0.045576 -0.150245 -0.468750 +v -0.015389 -0.156250 -0.468750 +v 0.015390 -0.156250 -0.468750 +v 0.045577 -0.150245 -0.468750 +v 0.074012 -0.138467 -0.468750 +v -0.150245 0.045576 -0.500000 +v -0.138467 0.074012 -0.500000 +v -0.121367 0.099603 -0.500000 +v -0.099603 0.121367 -0.500000 +v -0.074012 0.138467 -0.500000 +v -0.045576 0.150245 -0.500000 +v -0.015389 0.156250 -0.500000 +v 0.015389 0.156250 -0.500000 +v 0.045576 0.150245 -0.500000 +v 0.074012 0.138467 -0.500000 +v 0.099603 0.121367 -0.500000 +v 0.121367 0.099603 -0.500000 +v 0.138467 0.074012 -0.500000 +v 0.150245 0.045576 -0.500000 +v 0.156250 0.015389 -0.500000 +v 0.156250 -0.015389 -0.500000 +v 0.150245 -0.045576 -0.500000 +v 0.138467 -0.074012 -0.500000 +v 0.121367 -0.099603 -0.500000 +v 0.099603 -0.121367 -0.500000 +v 0.074012 -0.138467 -0.500000 +v 0.045577 -0.150245 -0.500000 +v 0.015390 -0.156250 -0.500000 +v -0.015389 -0.156250 -0.500000 +v -0.045576 -0.150245 -0.500000 +v -0.074012 -0.138467 -0.500000 +v -0.099603 -0.121367 -0.500000 +v -0.121367 -0.099603 -0.500000 +v -0.138466 -0.074012 -0.500000 +v -0.150245 -0.045576 -0.500000 +v -0.156249 -0.015389 -0.500000 +v -0.156249 0.015389 -0.500000 +v 0.108578 0.095821 -0.460914 +v 0.110913 0.104534 -0.460914 +v 0.104534 0.110913 -0.460914 +v 0.095821 0.108578 -0.460914 +v 0.093486 0.099865 -0.460914 +v 0.099865 0.093486 -0.460914 +v 0.009021 0.144532 -0.460914 +v 0.004510 0.152344 -0.460914 +v -0.004510 0.152344 -0.460914 +v -0.009021 0.144532 -0.460914 +v -0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.460914 +v -0.095821 0.108578 -0.460914 +v -0.104534 0.110913 -0.460914 +v -0.110913 0.104534 -0.460914 +v -0.108578 0.095821 -0.460914 +v -0.099865 0.093486 -0.460914 +v -0.093486 0.099865 -0.460914 +v -0.144532 0.009021 -0.460914 +v -0.152344 0.004510 -0.460914 +v -0.152344 -0.004510 -0.460914 +v -0.144532 -0.009021 -0.460914 +v -0.136720 -0.004510 -0.460914 +v -0.136720 0.004510 -0.460914 +v -0.108578 -0.095821 -0.460914 +v -0.110913 -0.104534 -0.460914 +v -0.104534 -0.110913 -0.460914 +v -0.095821 -0.108578 -0.460914 +v -0.093486 -0.099865 -0.460914 +v -0.099865 -0.093486 -0.460914 +v -0.009021 -0.144532 -0.460914 +v -0.004510 -0.152344 -0.460914 +v 0.004510 -0.152344 -0.460914 +v 0.009021 -0.144532 -0.460914 +v 0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.460914 +v 0.095821 -0.108578 -0.460914 +v 0.104534 -0.110913 -0.460914 +v 0.110913 -0.104534 -0.460914 +v 0.108578 -0.095821 -0.460914 +v 0.099865 -0.093486 -0.460914 +v 0.093486 -0.099865 -0.460914 +v 0.144532 -0.009021 -0.460914 +v 0.152344 -0.004510 -0.460914 +v 0.152344 0.004510 -0.460914 +v 0.144532 0.009021 -0.460914 +v 0.136720 0.004510 -0.460914 +v 0.136720 -0.004510 -0.460914 +v 0.468750 0.116832 -0.062448 +v 0.437501 0.110774 -0.059210 +v 0.437501 0.120197 -0.036461 +v 0.468750 0.126770 -0.038455 +v 0.468750 0.131837 -0.012985 +v 0.437501 0.125000 -0.012312 +v 0.468750 0.131837 0.012984 +v 0.437501 0.125001 0.012311 +v 0.468750 0.126770 0.038455 +v 0.437501 0.120197 0.036461 +v 0.468750 0.116832 0.062448 +v 0.437501 0.110774 0.059210 +v 0.468750 0.102404 0.084041 +v 0.437501 0.097094 0.079683 +v 0.437501 0.079683 0.097094 +v 0.468750 0.084041 0.102404 +v 0.468750 0.062448 0.116832 +v 0.437501 0.059210 0.110774 +v 0.468750 0.038455 0.126770 +v 0.437501 0.036461 0.120197 +v 0.468750 0.012985 0.131836 +v 0.437501 0.012312 0.125000 +v 0.437501 -0.012311 0.125000 +v 0.468750 -0.012985 0.131836 +v 0.437501 -0.036461 0.120197 +v 0.468750 -0.038455 0.126770 +v 0.468750 -0.062448 0.116832 +v 0.437501 -0.059210 0.110774 +v 0.437501 -0.079683 0.097094 +v 0.468750 -0.084041 0.102404 +v 0.437501 -0.097094 0.079683 +v 0.468750 -0.102404 0.084041 +v 0.468750 -0.116832 0.062448 +v 0.437501 -0.110774 0.059210 +v 0.437501 -0.120197 0.036461 +v 0.468750 -0.126770 0.038455 +v 0.468750 -0.131836 0.012985 +v 0.437501 -0.125000 0.012311 +v 0.437501 -0.125000 -0.012311 +v 0.468750 -0.131836 -0.012985 +v 0.468750 -0.126770 -0.038455 +v 0.437501 -0.120197 -0.036461 +v 0.437501 -0.110774 -0.059210 +v 0.468750 -0.116832 -0.062448 +v 0.437501 -0.097094 -0.079683 +v 0.468750 -0.102404 -0.084041 +v 0.437501 -0.079683 -0.097094 +v 0.468750 -0.084041 -0.102404 +v 0.437501 -0.059210 -0.110774 +v 0.468750 -0.062448 -0.116832 +v 0.437501 -0.036461 -0.120197 +v 0.468750 -0.038455 -0.126770 +v 0.437501 -0.012311 -0.125001 +v 0.468750 -0.012985 -0.131836 +v 0.468750 0.038455 -0.126770 +v 0.468750 0.012985 -0.131837 +v 0.437501 0.012311 -0.125001 +v 0.437501 0.036461 -0.120197 +v 0.468750 0.084041 -0.102404 +v 0.468750 0.062448 -0.116832 +v 0.437501 0.059210 -0.110774 +v 0.437501 0.079683 -0.097094 +v 0.468750 0.102404 -0.084041 +v 0.437501 0.097094 -0.079683 +v 0.036461 -0.036461 0.120197 +v 0.012312 -0.012312 0.125000 +v 0.059210 -0.059210 0.110774 +v 0.079683 -0.079683 0.097094 +v -0.468750 0.012985 0.131836 +v -0.437501 0.012312 0.125001 +v -0.437501 0.036461 0.120197 +v -0.468750 0.038455 0.126770 +v -0.468750 -0.012985 0.131836 +v -0.437501 -0.012311 0.125000 +v -0.468750 -0.038455 0.126770 +v -0.437501 -0.036461 0.120197 +v 0.097094 -0.097094 0.079683 +v 0.079683 -0.437501 0.097094 +v 0.097094 -0.437501 0.079683 +v -0.437501 0.059210 0.110774 +v -0.468750 0.062448 0.116832 +v -0.468750 -0.062448 0.116832 +v -0.437501 -0.059210 0.110774 +v -0.110774 -0.110774 0.059210 +v -0.097094 -0.097094 0.079683 +v -0.437501 -0.097094 0.079683 +v -0.437501 -0.110774 0.059210 +v -0.468750 0.084041 0.102404 +v -0.437501 0.079683 0.097094 +v -0.468750 -0.084041 0.102404 +v -0.437501 -0.079683 0.097094 +v -0.120197 -0.120197 0.036461 +v -0.437501 -0.120197 0.036461 +v -0.468750 0.102404 0.084041 +v -0.437501 0.097094 0.079683 +v -0.468750 -0.102404 0.084041 +v -0.468750 0.116832 0.062448 +v -0.437501 0.110774 0.059210 +v -0.468750 -0.116832 0.062448 +v -0.125000 -0.125000 -0.012311 +v -0.125000 -0.125001 0.012311 +v -0.437501 -0.125001 0.012311 +v -0.437501 -0.125001 -0.012311 +v -0.468750 0.126770 0.038455 +v -0.437501 0.120197 0.036461 +v -0.468750 -0.126770 0.038455 +v -0.468750 0.131836 0.012985 +v -0.437501 0.125000 0.012311 +v -0.468750 -0.131837 0.012985 +v -0.110774 -0.110774 -0.059210 +v -0.120197 -0.120197 -0.036461 +v -0.437501 -0.120197 -0.036461 +v -0.437501 -0.110774 -0.059210 +v -0.012312 0.125000 -0.012311 +v -0.036461 0.120197 -0.036461 +v -0.437501 0.120197 -0.036461 +v -0.437501 0.125000 -0.012312 +v -0.468750 0.131836 -0.012985 +v -0.468750 -0.131837 -0.012985 +v -0.097094 -0.097094 -0.079683 +v -0.437501 -0.097094 -0.079683 +v -0.059210 0.110774 -0.059210 +v -0.437501 0.110774 -0.059210 +v -0.468750 0.126770 -0.038455 +v -0.468750 -0.126770 -0.038455 +v -0.468750 0.116832 -0.062448 +v -0.468750 -0.116832 -0.062448 +v -0.468750 0.102404 -0.084041 +v -0.437501 0.097094 -0.079683 +v -0.468750 -0.102404 -0.084041 +v -0.120197 -0.036461 -0.120197 +v -0.110774 -0.059210 -0.110774 +v -0.437501 -0.059210 -0.110774 +v -0.437501 -0.036461 -0.120197 +v -0.120197 0.036461 -0.120197 +v -0.125001 0.012311 -0.125000 +v -0.437501 0.012311 -0.125000 +v -0.437501 0.036461 -0.120197 +v -0.468750 0.084041 -0.102404 +v -0.437501 0.079683 -0.097094 +v -0.468750 -0.084041 -0.102404 +v -0.437501 -0.079683 -0.097094 +v -0.125000 -0.012311 -0.125000 +v -0.437501 -0.012311 -0.125000 +v -0.468750 0.062448 -0.116832 +v -0.437501 0.059210 -0.110774 +v -0.468750 -0.062448 -0.116832 +v -0.468750 0.038455 -0.126770 +v -0.468750 -0.038455 -0.126770 +v -0.468750 0.012985 -0.131837 +v -0.468750 -0.012985 -0.131836 +v -0.468749 0.130078 -0.063644 +v -0.468749 0.139022 -0.062467 +v -0.468749 0.124587 -0.056487 +v -0.468749 0.142474 -0.054132 +v -0.468749 0.136982 -0.046976 +v -0.468749 0.128039 -0.048153 +v 0.468751 0.136982 -0.046976 +v 0.468751 0.142474 -0.054133 +v 0.468751 0.128039 -0.048153 +v 0.468751 0.139022 -0.062467 +v 0.468751 0.130078 -0.063644 +v 0.468751 0.124587 -0.056488 +v -0.468749 0.046976 -0.136982 +v -0.468749 0.054133 -0.142474 +v -0.468749 0.048154 -0.128039 +v -0.468749 0.062467 -0.139022 +v -0.468749 0.063644 -0.130078 +v -0.468749 0.056488 -0.124587 +v 0.468751 0.063644 -0.130078 +v 0.468751 0.062467 -0.139022 +v 0.468751 0.056487 -0.124587 +v 0.468751 0.054133 -0.142474 +v 0.468751 0.046976 -0.136982 +v 0.468751 0.048153 -0.128039 +v -0.468749 -0.063644 -0.130078 +v -0.468749 -0.062467 -0.139022 +v -0.468749 -0.056487 -0.124587 +v -0.468749 -0.054132 -0.142474 +v -0.468749 -0.046976 -0.136982 +v -0.468749 -0.048153 -0.128039 +v 0.468751 -0.046976 -0.136982 +v 0.468751 -0.054133 -0.142474 +v 0.468751 -0.048153 -0.128039 +v 0.468751 -0.062467 -0.139022 +v 0.468751 -0.063644 -0.130078 +v 0.468751 -0.056488 -0.124587 +v -0.468749 -0.136982 -0.046976 +v -0.468749 -0.142474 -0.054133 +v -0.468749 -0.128039 -0.048153 +v -0.468749 -0.139022 -0.062467 +v -0.468749 -0.130078 -0.063644 +v -0.468749 -0.124587 -0.056488 +v 0.468751 -0.130078 -0.063644 +v 0.468751 -0.139022 -0.062467 +v 0.468751 -0.124587 -0.056487 +v 0.468751 -0.142474 -0.054133 +v 0.468751 -0.136982 -0.046976 +v 0.468751 -0.128039 -0.048153 +v -0.468749 -0.130078 0.063644 +v -0.468749 -0.139022 0.062467 +v -0.468749 -0.124587 0.056487 +v -0.468749 -0.142474 0.054132 +v -0.468749 -0.136982 0.046976 +v -0.468749 -0.128039 0.048153 +v 0.468751 -0.136982 0.046976 +v 0.468751 -0.142474 0.054133 +v 0.468751 -0.128039 0.048153 +v 0.468751 -0.139022 0.062467 +v 0.468751 -0.130078 0.063644 +v 0.468751 -0.124587 0.056487 +v -0.468749 -0.046976 0.136982 +v -0.468749 -0.054133 0.142474 +v -0.468749 -0.048153 0.128039 +v -0.468749 -0.062467 0.139022 +v -0.468749 -0.063644 0.130078 +v -0.468749 -0.056488 0.124587 +v 0.468751 -0.063644 0.130078 +v 0.468751 -0.062467 0.139022 +v 0.468751 -0.056487 0.124587 +v 0.468751 -0.054132 0.142474 +v 0.468751 -0.046976 0.136982 +v 0.468751 -0.048153 0.128039 +v -0.468749 0.063644 0.130078 +v -0.468749 0.062467 0.139022 +v -0.468749 0.056487 0.124587 +v -0.468749 0.054132 0.142474 +v -0.468749 0.046976 0.136982 +v -0.468749 0.048153 0.128039 +v 0.468751 0.046976 0.136982 +v 0.468751 0.054133 0.142474 +v 0.468751 0.048153 0.128039 +v 0.468751 0.062467 0.139022 +v 0.468751 0.063644 0.130078 +v 0.468751 0.056487 0.124587 +v -0.468749 0.136982 0.046976 +v -0.468749 0.142474 0.054133 +v -0.468749 0.128039 0.048153 +v -0.468749 0.139022 0.062467 +v -0.468749 0.130078 0.063644 +v -0.468749 0.124587 0.056488 +v 0.468751 0.130078 0.063644 +v 0.468751 0.139022 0.062467 +v 0.468751 0.124587 0.056487 +v 0.468751 0.142474 0.054133 +v 0.468751 0.136982 0.046976 +v 0.468751 0.128039 0.048153 +v -0.059210 -0.059210 0.110774 +v -0.036461 -0.036461 0.120197 +v -0.079683 -0.079683 0.097094 +v -0.012312 -0.012312 0.125000 +v -0.079683 0.097094 -0.079683 +v -0.097094 0.079683 -0.097094 +v 0.059210 0.110774 -0.059210 +v 0.036461 0.120197 -0.036461 +v 0.079683 0.097094 -0.079683 +v 0.012311 0.125000 -0.012312 +v 0.097094 0.079683 -0.097094 +v 0.059210 -0.437501 0.110774 +v 0.110774 -0.110774 0.059210 +v 0.120197 -0.120197 0.036461 +v 0.125000 -0.125000 0.012311 +v 0.125000 -0.125000 -0.012311 +v 0.120197 -0.120197 -0.036461 +v 0.110774 -0.110774 -0.059210 +v 0.097094 -0.097094 -0.079683 +v 0.088389 -0.088389 -0.088389 +v 0.097094 -0.079683 -0.097094 +v 0.110774 -0.059210 -0.110774 +v 0.120197 -0.036461 -0.120197 +v 0.125000 -0.012311 -0.125000 +v 0.125000 0.012311 -0.125000 +v 0.120197 0.036461 -0.120197 +v 0.110774 0.059210 -0.110774 +v -0.097094 -0.079683 -0.097094 +v -0.088389 -0.088389 -0.088389 +v -0.110774 0.059210 -0.110774 +v -0.468749 0.095821 -0.108578 +v -0.468749 0.104534 -0.110913 +v -0.468749 0.093486 -0.099865 +v -0.468749 0.110913 -0.104534 +v -0.468749 0.108578 -0.095821 +v -0.468749 0.099865 -0.093486 +v 0.468751 0.108578 -0.095821 +v 0.468751 0.110913 -0.104534 +v 0.468751 0.099865 -0.093486 +v 0.468751 0.104534 -0.110913 +v 0.468751 0.095821 -0.108578 +v 0.468751 0.093486 -0.099865 +v -0.468749 -0.009021 -0.144532 +v -0.468749 -0.004510 -0.152344 +v -0.468749 -0.004510 -0.136720 +v -0.468749 0.004510 -0.152344 +v -0.468749 0.009021 -0.144532 +v -0.468749 0.004510 -0.136720 +v 0.468751 0.009021 -0.144532 +v 0.468751 0.004510 -0.152344 +v 0.468751 0.004510 -0.136720 +v 0.468751 -0.004510 -0.152344 +v 0.468751 -0.009021 -0.144532 +v 0.468751 -0.004510 -0.136720 +v -0.468749 -0.108578 -0.095821 +v -0.468749 -0.110913 -0.104534 +v -0.468749 -0.099865 -0.093486 +v -0.468749 -0.104534 -0.110913 +v -0.468749 -0.095821 -0.108578 +v -0.468749 -0.093486 -0.099865 +v 0.468751 -0.095821 -0.108578 +v 0.468751 -0.104534 -0.110913 +v 0.468751 -0.093486 -0.099865 +v 0.468751 -0.110913 -0.104534 +v 0.468751 -0.108578 -0.095821 +v 0.468751 -0.099865 -0.093486 +v -0.468749 -0.144532 0.009021 +v -0.468749 -0.152344 0.004510 +v -0.468749 -0.136720 0.004510 +v -0.468749 -0.152344 -0.004511 +v -0.468749 -0.144532 -0.009021 +v -0.468749 -0.136720 -0.004510 +v 0.468751 -0.144532 -0.009021 +v 0.468751 -0.152344 -0.004510 +v 0.468751 -0.136720 -0.004510 +v 0.468751 -0.152344 0.004510 +v 0.468751 -0.144532 0.009021 +v 0.468751 -0.136720 0.004510 +v -0.468749 -0.095821 0.108578 +v -0.468749 -0.104534 0.110913 +v -0.468749 -0.093486 0.099865 +v -0.468749 -0.110913 0.104534 +v -0.468749 -0.108578 0.095821 +v -0.468749 -0.099865 0.093486 +v 0.468751 -0.108578 0.095821 +v 0.468751 -0.110913 0.104534 +v 0.468751 -0.099865 0.093486 +v 0.468751 -0.104534 0.110913 +v 0.468751 -0.095821 0.108578 +v 0.468751 -0.093486 0.099865 +v -0.468749 0.009021 0.144532 +v -0.468749 0.004510 0.152344 +v -0.468749 0.004510 0.136720 +v -0.468749 -0.004510 0.152344 +v -0.468749 -0.009021 0.144532 +v -0.468749 -0.004510 0.136720 +v 0.468751 -0.009021 0.144532 +v 0.468751 -0.004510 0.152344 +v 0.468751 -0.004510 0.136720 +v 0.468751 0.004510 0.152344 +v 0.468751 0.009021 0.144532 +v 0.468751 0.004510 0.136720 +v -0.468749 0.108578 0.095821 +v -0.468749 0.110913 0.104534 +v -0.468749 0.099865 0.093486 +v -0.468749 0.104534 0.110913 +v -0.468749 0.095821 0.108578 +v -0.468749 0.093486 0.099865 +v 0.468751 0.095821 0.108578 +v 0.468751 0.104534 0.110913 +v 0.468751 0.093486 0.099865 +v 0.468751 0.110913 0.104534 +v 0.468751 0.108578 0.095821 +v 0.468751 0.099865 0.093486 +v -0.468749 0.144532 -0.009021 +v -0.468749 0.152344 -0.004510 +v -0.468749 0.136720 -0.004510 +v -0.468749 0.152344 0.004510 +v -0.468749 0.144532 0.009021 +v -0.468749 0.136720 0.004510 +v 0.468751 0.144532 0.009021 +v 0.468751 0.152344 0.004510 +v 0.468751 0.136720 0.004510 +v 0.468751 0.152344 -0.004510 +v 0.468751 0.144532 -0.009021 +v 0.468751 0.136720 -0.004510 +v 0.116832 -0.468750 -0.062448 +v 0.110774 -0.437501 -0.059210 +v 0.120197 -0.437501 -0.036462 +v 0.126770 -0.468750 -0.038456 +v 0.131837 -0.468750 -0.012985 +v 0.125001 -0.437501 -0.012312 +v 0.131837 -0.468750 0.012984 +v 0.125001 -0.437501 0.012311 +v 0.126770 -0.468750 0.038455 +v 0.120197 -0.437501 0.036461 +v 0.116832 -0.468750 0.062448 +v 0.110774 -0.437501 0.059210 +v 0.102404 -0.468750 0.084041 +v 0.084041 -0.468750 0.102404 +v 0.062448 -0.468750 0.116832 +v 0.038455 -0.468750 0.126770 +v 0.036461 -0.437501 0.120197 +v 0.012985 -0.468750 0.131836 +v 0.012312 -0.437501 0.125000 +v -0.012311 -0.437501 0.125000 +v -0.012985 -0.468750 0.131836 +v -0.036461 -0.437501 0.120197 +v -0.038455 -0.468750 0.126770 +v -0.062448 -0.468750 0.116832 +v -0.059210 -0.437501 0.110774 +v -0.079683 -0.437501 0.097094 +v -0.084041 -0.468750 0.102404 +v -0.097094 -0.437501 0.079683 +v -0.102404 -0.468750 0.084041 +v -0.116832 -0.468750 0.062448 +v -0.110774 -0.437501 0.059210 +v -0.120197 -0.437501 0.036461 +v -0.126770 -0.468750 0.038455 +v -0.131836 -0.468750 0.012985 +v -0.125000 -0.437501 0.012311 +v -0.125000 -0.437501 -0.012312 +v -0.131836 -0.468750 -0.012985 +v -0.126770 -0.468750 -0.038455 +v -0.120197 -0.437501 -0.036461 +v -0.110774 -0.437501 -0.059210 +v -0.116832 -0.468750 -0.062448 +v -0.097094 -0.437501 -0.079683 +v -0.102404 -0.468750 -0.084041 +v -0.079683 -0.437501 -0.097094 +v -0.084041 -0.468750 -0.102404 +v -0.059210 -0.437501 -0.110774 +v -0.062448 -0.468750 -0.116832 +v -0.036461 -0.437501 -0.120197 +v -0.038455 -0.468750 -0.126770 +v -0.012311 -0.437501 -0.125001 +v -0.012985 -0.468750 -0.131837 +v 0.038455 -0.468750 -0.126770 +v 0.012985 -0.468750 -0.131837 +v 0.012311 -0.437501 -0.125001 +v 0.036461 -0.437501 -0.120197 +v 0.084041 -0.468750 -0.102404 +v 0.062448 -0.468750 -0.116832 +v 0.059210 -0.437501 -0.110774 +v 0.079683 -0.437501 -0.097094 +v 0.102404 -0.468750 -0.084041 +v 0.097094 -0.437501 -0.079683 +v 0.136982 -0.468751 -0.046976 +v 0.142474 -0.468751 -0.054133 +v 0.128039 -0.468751 -0.048154 +v 0.139022 -0.468751 -0.062467 +v 0.130078 -0.468751 -0.063644 +v 0.124587 -0.468751 -0.056488 +v 0.063644 -0.468751 -0.130078 +v 0.062467 -0.468751 -0.139022 +v 0.056487 -0.468751 -0.124587 +v 0.054133 -0.468751 -0.142474 +v 0.046976 -0.468751 -0.136982 +v 0.048153 -0.468751 -0.128039 +v -0.046976 -0.468751 -0.136982 +v -0.054133 -0.468751 -0.142474 +v -0.048153 -0.468751 -0.128039 +v -0.062467 -0.468751 -0.139022 +v -0.063644 -0.468751 -0.130078 +v -0.056487 -0.468751 -0.124587 +v -0.130078 -0.468751 -0.063644 +v -0.139022 -0.468751 -0.062467 +v -0.124587 -0.468751 -0.056488 +v -0.142474 -0.468751 -0.054133 +v -0.136982 -0.468751 -0.046976 +v -0.128039 -0.468751 -0.048153 +v -0.136982 -0.468751 0.046976 +v -0.142474 -0.468751 0.054133 +v -0.128039 -0.468751 0.048153 +v -0.139022 -0.468751 0.062467 +v -0.130078 -0.468751 0.063644 +v -0.124587 -0.468751 0.056487 +v -0.063644 -0.468751 0.130078 +v -0.062467 -0.468751 0.139022 +v -0.056487 -0.468751 0.124587 +v -0.054132 -0.468751 0.142474 +v -0.046976 -0.468751 0.136982 +v -0.048153 -0.468751 0.128039 +v 0.046976 -0.468751 0.136982 +v 0.054133 -0.468751 0.142474 +v 0.048153 -0.468751 0.128039 +v 0.062467 -0.468751 0.139022 +v 0.063644 -0.468751 0.130078 +v 0.056488 -0.468751 0.124587 +v 0.130078 -0.468751 0.063644 +v 0.139022 -0.468751 0.062467 +v 0.124587 -0.468751 0.056487 +v 0.142474 -0.468751 0.054132 +v 0.136982 -0.468751 0.046976 +v 0.128039 -0.468751 0.048153 +v -0.079683 0.097094 -0.437501 +v -0.097094 0.079683 -0.437501 +v 0.012311 0.125001 -0.437501 +v -0.012311 0.125001 -0.437501 +v -0.079683 -0.097094 -0.097094 +v -0.059210 -0.110774 -0.110774 +v -0.036461 -0.120197 -0.120197 +v -0.012312 -0.125000 -0.125001 +v 0.012311 -0.125000 -0.125001 +v 0.036461 -0.120197 -0.120197 +v 0.059210 -0.110774 -0.110774 +v 0.079683 -0.097094 -0.097094 +v 0.108578 -0.468751 -0.095821 +v 0.110913 -0.468751 -0.104534 +v 0.099865 -0.468751 -0.093486 +v 0.104534 -0.468751 -0.110913 +v 0.095821 -0.468751 -0.108578 +v 0.093486 -0.468751 -0.099865 +v 0.009021 -0.468751 -0.144532 +v 0.004510 -0.468751 -0.152344 +v 0.004510 -0.468751 -0.136720 +v -0.004510 -0.468751 -0.152344 +v -0.009021 -0.468751 -0.144532 +v -0.004510 -0.468751 -0.136720 +v -0.095821 -0.468751 -0.108578 +v -0.104534 -0.468751 -0.110913 +v -0.093486 -0.468751 -0.099865 +v -0.110913 -0.468751 -0.104534 +v -0.108578 -0.468751 -0.095821 +v -0.099865 -0.468751 -0.093486 +v -0.144532 -0.468751 -0.009021 +v -0.152344 -0.468751 -0.004510 +v -0.136720 -0.468751 -0.004510 +v -0.152344 -0.468751 0.004510 +v -0.144532 -0.468751 0.009021 +v -0.136720 -0.468751 0.004510 +v -0.108578 -0.468751 0.095821 +v -0.110913 -0.468751 0.104534 +v -0.099865 -0.468751 0.093486 +v -0.104534 -0.468751 0.110913 +v -0.095821 -0.468751 0.108578 +v -0.093486 -0.468751 0.099865 +v -0.009021 -0.468751 0.144532 +v -0.004510 -0.468751 0.152344 +v -0.004510 -0.468751 0.136720 +v 0.004510 -0.468751 0.152344 +v 0.009021 -0.468751 0.144532 +v 0.004510 -0.468751 0.136720 +v 0.095821 -0.468751 0.108578 +v 0.104534 -0.468751 0.110913 +v 0.093486 -0.468751 0.099865 +v 0.110913 -0.468751 0.104534 +v 0.108578 -0.468751 0.095821 +v 0.099865 -0.468751 0.093486 +v 0.144532 -0.468751 0.009021 +v 0.152344 -0.468751 0.004510 +v 0.136720 -0.468751 0.004510 +v 0.152344 -0.468751 -0.004511 +v 0.144532 -0.468751 -0.009021 +v 0.136720 -0.468751 -0.004510 +v 0.116832 0.062448 -0.468750 +v 0.110774 0.059210 -0.437501 +v 0.120197 0.036461 -0.437501 +v 0.126770 0.038455 -0.468750 +v 0.131837 0.012985 -0.468750 +v 0.125001 0.012312 -0.437501 +v 0.131837 -0.012984 -0.468750 +v 0.125001 -0.012311 -0.437501 +v 0.126770 -0.038455 -0.468750 +v 0.120197 -0.036461 -0.437501 +v 0.116832 -0.062448 -0.468750 +v 0.110774 -0.059210 -0.437501 +v 0.102404 -0.084041 -0.468750 +v 0.097094 -0.079683 -0.437501 +v 0.079683 -0.097094 -0.437501 +v 0.084041 -0.102404 -0.468750 +v 0.062448 -0.116832 -0.468750 +v 0.059210 -0.110774 -0.437501 +v 0.038455 -0.126770 -0.468750 +v 0.036461 -0.120197 -0.437501 +v 0.012985 -0.131836 -0.468750 +v 0.012312 -0.125000 -0.437501 +v -0.012311 -0.125000 -0.437501 +v -0.012985 -0.131836 -0.468750 +v -0.036461 -0.120197 -0.437501 +v -0.038455 -0.126770 -0.468750 +v -0.062448 -0.116832 -0.468750 +v -0.059210 -0.110774 -0.437501 +v -0.079683 -0.097094 -0.437501 +v -0.084041 -0.102404 -0.468750 +v -0.097094 -0.079683 -0.437501 +v -0.102404 -0.084041 -0.468750 +v -0.116832 -0.062448 -0.468750 +v -0.110774 -0.059210 -0.437501 +v -0.120197 -0.036461 -0.437501 +v -0.126770 -0.038455 -0.468750 +v -0.131836 -0.012985 -0.468750 +v -0.125000 -0.012311 -0.437501 +v -0.125000 0.012311 -0.437501 +v -0.131836 0.012985 -0.468750 +v -0.126770 0.038455 -0.468750 +v -0.120197 0.036461 -0.437501 +v -0.110774 0.059210 -0.437501 +v -0.116832 0.062448 -0.468750 +v -0.102404 0.084041 -0.468750 +v -0.084041 0.102404 -0.468750 +v -0.059210 0.110774 -0.437501 +v -0.062448 0.116832 -0.468750 +v -0.036461 0.120197 -0.437501 +v -0.038455 0.126770 -0.468750 +v -0.012985 0.131837 -0.468750 +v 0.038455 0.126770 -0.468750 +v 0.012985 0.131837 -0.468750 +v 0.036461 0.120197 -0.437501 +v 0.084041 0.102404 -0.468750 +v 0.062448 0.116832 -0.468750 +v 0.059210 0.110774 -0.437501 +v 0.079683 0.097094 -0.437501 +v 0.102404 0.084041 -0.468750 +v 0.097094 0.079683 -0.437501 +v 0.136982 0.046976 -0.468751 +v 0.142474 0.054133 -0.468751 +v 0.128039 0.048154 -0.468751 +v 0.139022 0.062467 -0.468751 +v 0.130078 0.063644 -0.468751 +v 0.124587 0.056488 -0.468751 +v 0.063644 0.130078 -0.468751 +v 0.062467 0.139022 -0.468751 +v 0.056487 0.124587 -0.468751 +v 0.054133 0.142474 -0.468751 +v 0.046976 0.136982 -0.468751 +v 0.048153 0.128039 -0.468751 +v -0.046976 0.136982 -0.468751 +v -0.054133 0.142474 -0.468751 +v -0.048153 0.128039 -0.468751 +v -0.062467 0.139022 -0.468751 +v -0.063644 0.130078 -0.468751 +v -0.056487 0.124587 -0.468751 +v -0.130078 0.063644 -0.468751 +v -0.139022 0.062467 -0.468751 +v -0.124587 0.056488 -0.468751 +v -0.142474 0.054133 -0.468751 +v -0.136982 0.046976 -0.468751 +v -0.128039 0.048153 -0.468751 +v -0.136982 -0.046976 -0.468751 +v -0.142474 -0.054133 -0.468751 +v -0.128039 -0.048153 -0.468751 +v -0.139022 -0.062467 -0.468751 +v -0.130078 -0.063644 -0.468751 +v -0.124587 -0.056487 -0.468751 +v -0.063644 -0.130078 -0.468751 +v -0.062467 -0.139022 -0.468751 +v -0.056487 -0.124587 -0.468751 +v -0.054132 -0.142474 -0.468751 +v -0.046976 -0.136982 -0.468751 +v -0.048153 -0.128039 -0.468751 +v 0.046976 -0.136982 -0.468751 +v 0.054133 -0.142474 -0.468751 +v 0.048153 -0.128039 -0.468751 +v 0.062467 -0.139022 -0.468751 +v 0.063644 -0.130078 -0.468751 +v 0.056488 -0.124587 -0.468751 +v 0.130078 -0.063644 -0.468751 +v 0.139022 -0.062467 -0.468751 +v 0.124587 -0.056487 -0.468751 +v 0.142474 -0.054132 -0.468751 +v 0.136982 -0.046976 -0.468751 +v 0.128039 -0.048153 -0.468751 +v 0.108578 0.095821 -0.468751 +v 0.110913 0.104534 -0.468751 +v 0.099865 0.093486 -0.468751 +v 0.104534 0.110913 -0.468751 +v 0.095821 0.108578 -0.468751 +v 0.093486 0.099865 -0.468751 +v 0.009021 0.144532 -0.468751 +v 0.004510 0.152344 -0.468751 +v 0.004510 0.136720 -0.468751 +v -0.004510 0.152344 -0.468751 +v -0.009021 0.144532 -0.468751 +v -0.004510 0.136720 -0.468751 +v -0.095821 0.108578 -0.468751 +v -0.104534 0.110913 -0.468751 +v -0.093486 0.099865 -0.468751 +v -0.110913 0.104534 -0.468751 +v -0.108578 0.095821 -0.468751 +v -0.099865 0.093486 -0.468751 +v -0.144532 0.009021 -0.468751 +v -0.152344 0.004510 -0.468751 +v -0.136720 0.004510 -0.468751 +v -0.152344 -0.004510 -0.468751 +v -0.144532 -0.009021 -0.468751 +v -0.136720 -0.004510 -0.468751 +v -0.108578 -0.095821 -0.468751 +v -0.110913 -0.104534 -0.468751 +v -0.099865 -0.093486 -0.468751 +v -0.104534 -0.110913 -0.468751 +v -0.095821 -0.108578 -0.468751 +v -0.093486 -0.099865 -0.468751 +v -0.009021 -0.144532 -0.468751 +v -0.004510 -0.152344 -0.468751 +v -0.004510 -0.136720 -0.468751 +v 0.004510 -0.152344 -0.468751 +v 0.009021 -0.144532 -0.468751 +v 0.004510 -0.136720 -0.468751 +v 0.095821 -0.108578 -0.468751 +v 0.104534 -0.110913 -0.468751 +v 0.093486 -0.099865 -0.468751 +v 0.110913 -0.104534 -0.468751 +v 0.108578 -0.095821 -0.468751 +v 0.099865 -0.093486 -0.468751 +v 0.144532 -0.009021 -0.468751 +v 0.152344 -0.004510 -0.468751 +v 0.136720 -0.004510 -0.468751 +v 0.152344 0.004510 -0.468751 +v 0.144532 0.009021 -0.468751 +v 0.136720 0.004510 -0.468751 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 1.0081 0.2851 +vt 0.9769 0.2723 +vt 1.0393 0.2971 +vt 1.0706 0.3080 +vt 0.9459 0.0196 +vt 0.9458 0.0339 +vt 0.9151 0.0339 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 0.9767 0.0339 +vt 1.0076 0.0195 +vt 1.0075 0.0339 +vt 0.8209 0.3169 +vt 0.8521 0.3078 +vt 0.8506 0.4981 +vt 0.8196 0.4980 +vt 0.8843 0.0339 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.0383 0.0339 +vt 1.1328 0.2072 +vt 1.1017 0.2145 +vt 1.0999 0.0340 +vt 1.1306 0.0342 +vt 0.8537 0.0195 +vt 0.8536 0.0338 +vt 1.0694 0.0196 +vt 1.0691 0.0339 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.8229 0.0194 +vt 0.8228 0.0338 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.7920 0.0337 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.7613 0.0193 +vt 0.7611 0.0336 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.7302 0.0335 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6964 0.2592 +vt 0.6653 0.2464 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.6995 0.0191 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.6342 0.2344 +vt 0.6375 0.0332 +vt 0.6686 0.0189 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.6066 0.0331 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4160 0.2019 +vt 0.3846 0.2068 +vt 0.3892 0.0320 +vt 0.4204 0.0322 +vt 0.5097 0.2021 +vt 0.4786 0.1994 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.5759 0.0186 +vt 0.5757 0.0330 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.4473 0.1994 +vt 0.4516 0.0324 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 1.0394 0.2346 +vt 1.0082 0.2466 +vt 1.0706 0.2237 +vt 1.1018 0.3172 +vt 0.9770 0.2593 +vt 0.6031 0.2236 +vt 0.5719 0.2143 +vt 0.6339 0.2969 +vt 0.6652 0.2849 +vt 0.6027 0.3076 +vt 0.6964 0.2722 +vt 0.5715 0.3168 +vt 0.8815 0.4981 +vt 0.8833 0.2970 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.3215 0.3169 +vt 0.3372 0.3122 +vt 0.3528 0.3168 +vt 0.3842 0.3241 +vt 0.4155 0.3290 +vt 0.4467 0.3316 +vt 0.4779 0.3315 +vt 0.5091 0.3290 +vt 0.5403 0.3240 +vt 1.1952 0.1995 +vt 0.3531 0.2140 +vt 0.3374 0.2186 +vt 0.5409 0.2071 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.9145 0.2850 +vt 0.9457 0.2723 +vt 1.0393 0.2971 +vt 1.0081 0.2851 +vt 1.0706 0.3080 +vt 0.3215 0.3169 +vt 0.3528 0.3076 +vt 0.3553 0.4982 +vt 0.3244 0.4982 +vt 0.4780 0.2720 +vt 0.4790 0.4981 +vt 0.4481 0.4981 +vt 0.4467 0.2720 +vt 0.9769 0.2723 +vt 1.1018 0.3172 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.3215 0.3169 +vt 0.3372 0.3122 +vt 0.3528 0.3168 +vt 0.3842 0.3241 +vt 0.4155 0.3290 +vt 0.4467 0.3316 +vt 0.4779 0.3315 +vt 0.5091 0.3290 +vt 0.5403 0.3240 +vt 0.5715 0.3168 +vt 0.5871 0.3122 +vt 0.6027 0.3168 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3245 0.5127 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6027 0.3168 +vt 0.5715 0.3076 +vt 0.4154 0.2848 +vt 0.3842 0.2968 +vt 0.5092 0.2848 +vt 0.5403 0.2968 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 0.8209 0.3169 +vt 0.8365 0.3124 +vt 0.8521 0.3170 +vt 0.8832 0.3242 +vt 0.9143 0.3292 +vt 0.9455 0.3318 +vt 0.9767 0.3318 +vt 1.0079 0.3293 +vt 1.0391 0.3244 +vt 1.0705 0.3172 +vt 1.0862 0.3126 +vt 1.1018 0.3172 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.0000 0.0000 -1.0000 +vn -0.6857 0.2114 0.6965 +vn 0.6857 0.2113 0.6965 +vn 0.6857 0.3431 0.6419 +vn -0.6857 0.3431 0.6419 +vn -0.6857 0.0713 0.7244 +vn 0.6857 0.0713 0.7244 +vn -0.6857 -0.0713 0.7244 +vn 0.6857 -0.0713 0.7244 +vn -0.6857 -0.2113 0.6965 +vn 0.6857 -0.2113 0.6965 +vn -0.6857 -0.3430 0.6420 +vn 0.6857 -0.3432 0.6419 +vn -0.6857 -0.4616 0.5627 +vn 0.6857 -0.4618 0.5626 +vn -0.6857 -0.5627 0.4617 +vn 0.6857 -0.5627 0.4617 +vn -0.6857 -0.6420 0.3431 +vn 0.6857 -0.6419 0.3432 +vn -0.6857 -0.6965 0.2113 +vn 0.6857 -0.6965 0.2113 +vn -0.6857 -0.7244 0.0713 +vn 0.6857 -0.7244 0.0713 +vn -0.6857 -0.7244 -0.0713 +vn 0.6857 -0.7244 -0.0713 +vn -0.6857 -0.6966 -0.2112 +vn 0.6857 -0.6965 -0.2114 +vn -0.6857 -0.6419 -0.3432 +vn 0.6857 -0.6420 -0.3430 +vn -0.6857 -0.5626 -0.4617 +vn 0.6857 -0.5626 -0.4617 +vn -0.6857 -0.4617 -0.5626 +vn 0.6857 -0.4617 -0.5626 +vn -0.6857 -0.3431 -0.6419 +vn 0.6857 -0.3431 -0.6419 +vn -0.6857 -0.2113 -0.6965 +vn 0.6857 -0.2113 -0.6965 +vn -0.6857 -0.0713 -0.7244 +vn 0.6857 -0.0713 -0.7244 +vn -0.6857 0.0713 -0.7244 +vn 0.6857 0.0713 -0.7244 +vn -0.6857 0.2113 -0.6965 +vn 0.6857 0.2113 -0.6965 +vn -0.6857 0.4616 -0.5627 +vn 0.6857 0.4618 -0.5626 +vn 0.6857 0.3432 -0.6419 +vn -0.6857 0.3430 -0.6420 +vn -0.6857 0.5626 -0.4617 +vn 0.6857 0.5626 -0.4617 +vn -0.6857 0.6420 -0.3430 +vn 0.6857 0.6419 -0.3432 +vn -0.6857 0.6965 -0.2113 +vn 0.6857 0.6965 -0.2113 +vn -0.6857 0.7244 -0.0713 +vn 0.6857 0.7244 -0.0713 +vn -0.6857 0.6966 0.2112 +vn 0.6857 0.6965 0.2114 +vn 0.6857 0.7244 0.0713 +vn -0.6857 0.7244 0.0713 +vn -0.6857 0.6419 0.3432 +vn 0.6857 0.6420 0.3430 +vn -0.6857 0.5626 0.4617 +vn 0.6857 0.5626 0.4617 +vn -0.2147 0.8614 -0.4604 +vn -0.1087 0.8767 -0.4686 +vn -0.1087 0.9513 -0.2886 +vn -0.2147 0.9346 -0.2835 +vn -0.2147 0.9720 -0.0957 +vn -0.1087 0.9893 -0.0974 +vn -0.2147 0.9720 0.0957 +vn -0.1087 0.9893 0.0974 +vn -0.2147 0.9346 0.2835 +vn -0.1087 0.9513 0.2886 +vn -0.2147 0.8614 0.4604 +vn -0.1087 0.8767 0.4686 +vn -0.2147 0.7550 0.6196 +vn -0.1087 0.7684 0.6306 +vn -0.1087 0.6306 0.7684 +vn -0.2147 0.6196 0.7550 +vn -0.2147 0.4604 0.8614 +vn -0.1087 0.4686 0.8767 +vn -0.2147 0.2835 0.9346 +vn -0.1087 0.2886 0.9513 +vn -0.2147 0.0957 0.9720 +vn -0.1087 0.0974 0.9893 +vn -0.1087 -0.0974 0.9893 +vn -0.2147 -0.0957 0.9720 +vn -0.1087 -0.2886 0.9513 +vn -0.2147 -0.2835 0.9346 +vn -0.2147 -0.4604 0.8614 +vn -0.1087 -0.4686 0.8767 +vn -0.1087 -0.6306 0.7684 +vn -0.2147 -0.6196 0.7550 +vn -0.1087 -0.7684 0.6306 +vn -0.2147 -0.7550 0.6196 +vn -0.2147 -0.8614 0.4604 +vn -0.1087 -0.8767 0.4686 +vn -0.1087 -0.9513 0.2886 +vn -0.2147 -0.9346 0.2835 +vn -0.2147 -0.9720 0.0957 +vn -0.1087 -0.9893 0.0974 +vn -0.1087 -0.9893 -0.0974 +vn -0.2147 -0.9720 -0.0957 +vn -0.2147 -0.9346 -0.2835 +vn -0.1087 -0.9513 -0.2886 +vn -0.1087 -0.8767 -0.4686 +vn -0.2147 -0.8614 -0.4604 +vn -0.1087 -0.7684 -0.6306 +vn -0.2147 -0.7550 -0.6196 +vn -0.1087 -0.6306 -0.7684 +vn -0.2147 -0.6196 -0.7550 +vn -0.1087 -0.4686 -0.8767 +vn -0.2147 -0.4604 -0.8614 +vn -0.1087 -0.2886 -0.9513 +vn -0.2147 -0.2835 -0.9346 +vn -0.1087 -0.0974 -0.9893 +vn -0.2147 -0.0957 -0.9720 +vn -0.2147 0.2835 -0.9346 +vn -0.2147 0.0957 -0.9720 +vn -0.1087 0.0974 -0.9893 +vn -0.1087 0.2886 -0.9513 +vn -0.2147 0.6196 -0.7550 +vn -0.2147 0.4604 -0.8614 +vn -0.1087 0.4686 -0.8767 +vn -0.1087 0.6306 -0.7684 +vn -0.2147 0.7550 -0.6196 +vn -0.1087 0.7684 -0.6306 +vn 0.1243 -0.1243 0.9844 +vn 0.0247 -0.0247 0.9994 +vn 0.2267 -0.2267 0.9472 +vn 0.3333 -0.3333 0.8819 +vn 0.2147 0.0957 0.9720 +vn 0.1087 0.0974 0.9893 +vn 0.1087 0.2886 0.9513 +vn 0.2147 0.2835 0.9346 +vn 0.2147 -0.0957 0.9720 +vn 0.1087 -0.0974 0.9893 +vn 0.2147 -0.2835 0.9346 +vn 0.1087 -0.2886 0.9513 +vn 0.4431 -0.4431 0.7793 +vn 0.6306 0.1087 0.7684 +vn 0.7684 0.1087 0.6306 +vn 0.1087 0.4686 0.8767 +vn 0.2147 0.4604 0.8614 +vn 0.2147 -0.4604 0.8614 +vn 0.1087 -0.4686 0.8767 +vn -0.5510 -0.5510 0.6267 +vn -0.4431 -0.4431 0.7793 +vn 0.1087 -0.7684 0.6306 +vn 0.1087 -0.8767 0.4686 +vn 0.2147 0.6196 0.7550 +vn 0.1087 0.6306 0.7684 +vn 0.2147 -0.6196 0.7550 +vn 0.1087 -0.6306 0.7684 +vn -0.6437 -0.6437 0.4139 +vn 0.1087 -0.9513 0.2886 +vn 0.2147 0.7550 0.6196 +vn 0.1087 0.7684 0.6306 +vn 0.6858 -0.5627 0.4617 +vn -0.6857 -0.5626 0.4617 +vn -0.6857 -0.6419 0.3431 +vn 0.6857 -0.6419 0.3431 +vn 0.2147 -0.7550 0.6196 +vn 0.2147 0.8614 0.4604 +vn 0.1087 0.8767 0.4686 +vn 0.2147 -0.8614 0.4604 +vn -0.6995 -0.6996 -0.1458 +vn -0.6996 -0.6995 0.1458 +vn 0.1087 -0.9893 0.0974 +vn 0.1087 -0.9893 -0.0974 +vn 0.2147 0.9346 0.2835 +vn 0.1087 0.9513 0.2886 +vn 0.2147 -0.9346 0.2835 +vn 0.2147 0.9720 0.0957 +vn 0.1087 0.9893 0.0974 +vn 0.2147 -0.9720 0.0957 +vn -0.6857 0.2113 0.6965 +vn -0.5510 -0.5510 -0.6267 +vn -0.6437 -0.6437 -0.4139 +vn 0.1087 -0.9513 -0.2886 +vn 0.1087 -0.8767 -0.4686 +vn -0.0247 0.9994 -0.0247 +vn -0.1243 0.9844 -0.1243 +vn 0.1087 0.9513 -0.2886 +vn 0.1087 0.9893 -0.0974 +vn 0.2147 0.9720 -0.0957 +vn 0.2147 -0.9720 -0.0957 +vn 0.6857 0.4617 0.5626 +vn -0.6857 0.4617 0.5626 +vn -0.4431 -0.4431 -0.7793 +vn 0.1087 -0.7684 -0.6306 +vn -0.2267 0.9472 -0.2267 +vn 0.1087 0.8767 -0.4686 +vn 0.2147 0.9346 -0.2835 +vn 0.2147 -0.9346 -0.2835 +vn 0.2147 0.8614 -0.4604 +vn 0.2147 -0.8614 -0.4604 +vn 0.6857 0.5627 0.4617 +vn -0.6857 0.5627 0.4617 +vn 0.2147 0.7550 -0.6196 +vn 0.1087 0.7684 -0.6306 +vn 0.2147 -0.7550 -0.6196 +vn -0.6437 -0.4139 -0.6437 +vn -0.5510 -0.6267 -0.5510 +vn 0.1087 -0.4686 -0.8767 +vn 0.1087 -0.2886 -0.9513 +vn -0.6437 0.4139 -0.6437 +vn -0.6995 0.1458 -0.6996 +vn 0.1087 0.0974 -0.9893 +vn 0.1087 0.2886 -0.9513 +vn 0.2147 0.6196 -0.7550 +vn 0.1087 0.6306 -0.7684 +vn 0.2147 -0.6196 -0.7550 +vn 0.1087 -0.6306 -0.7684 +vn -0.6857 0.6419 0.3433 +vn -0.6996 -0.1458 -0.6995 +vn 0.1087 -0.0974 -0.9893 +vn 0.2147 0.4604 -0.8614 +vn 0.1087 0.4686 -0.8767 +vn 0.2147 -0.4604 -0.8614 +vn 0.6857 0.6965 0.2113 +vn -0.6857 0.6965 0.2113 +vn 0.2147 0.2835 -0.9346 +vn 0.2147 -0.2835 -0.9346 +vn 0.6857 0.7244 0.0714 +vn -0.6857 0.7244 0.0712 +vn 0.2147 0.0957 -0.9720 +vn 0.2147 -0.0957 -0.9720 +vn 0.6100 -0.3032 -0.7321 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 0.6088 -0.7934 +vn 0.6100 0.4824 -0.6287 +vn 0.6100 -0.7856 -0.1034 +vn 0.0000 -0.9914 -0.1305 +vn 0.0000 0.9914 0.1306 +vn 0.6100 0.7856 0.1034 +vn 0.0000 0.3827 0.9239 +vn 0.6100 0.3032 0.7321 +vn 0.0000 -0.6087 0.7934 +vn 0.6100 -0.4824 0.6287 +vn -0.6100 0.3032 0.7321 +vn 0.0000 0.9914 0.1305 +vn -0.6100 0.7856 0.1034 +vn -0.6100 -0.4824 0.6287 +vn 0.0000 -0.6088 0.7934 +vn 0.0000 0.6087 -0.7934 +vn -0.6100 0.4824 -0.6287 +vn -0.6100 -0.3032 -0.7321 +vn -0.6100 -0.7856 -0.1034 +vn 0.6100 -0.7321 -0.3032 +vn 0.0000 -0.9239 -0.3826 +vn 0.0000 -0.1305 -0.9914 +vn 0.6100 -0.1034 -0.7856 +vn 0.6100 -0.6288 0.4823 +vn 0.0000 -0.7933 0.6088 +vn 0.0000 0.7934 -0.6087 +vn 0.6100 0.6287 -0.4824 +vn 0.0000 0.9239 0.3827 +vn 0.6100 0.7321 0.3032 +vn 0.0000 0.1305 0.9914 +vn 0.6100 0.1035 0.7856 +vn -0.6100 0.7320 0.3034 +vn -0.6100 0.6287 -0.4824 +vn -0.6100 0.1034 0.7856 +vn -0.6100 -0.1034 -0.7856 +vn 0.0000 -0.9239 -0.3827 +vn -0.6100 -0.7321 -0.3032 +vn 0.0000 -0.7934 0.6087 +vn -0.6100 -0.6288 0.4823 +vn 0.6100 -0.7321 0.3032 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.7934 -0.6088 +vn 0.6100 -0.6287 -0.4824 +vn 0.6100 -0.1035 0.7856 +vn 0.0000 -0.1305 0.9914 +vn 0.0000 0.1306 -0.9914 +vn 0.6100 0.1034 -0.7856 +vn 0.0000 0.9239 -0.3827 +vn 0.6100 0.7321 -0.3032 +vn 0.0000 0.7934 0.6087 +vn 0.6100 0.6287 0.4824 +vn -0.6100 0.7321 -0.3032 +vn 0.0000 0.1305 -0.9914 +vn -0.6100 0.1034 -0.7856 +vn -0.6100 0.6287 0.4824 +vn 0.0000 0.7934 0.6088 +vn 0.0000 -0.7934 -0.6087 +vn -0.6100 -0.6287 -0.4824 +vn -0.6100 -0.7321 0.3032 +vn 0.0000 -0.1306 0.9914 +vn -0.6100 -0.1034 0.7856 +vn 0.6100 -0.3032 0.7321 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 -0.9914 0.1305 +vn 0.6100 -0.7856 0.1034 +vn 0.6100 0.4824 0.6287 +vn 0.0000 0.6088 0.7934 +vn 0.0000 -0.6087 -0.7934 +vn 0.6100 -0.4824 -0.6287 +vn 0.0000 0.3827 -0.9239 +vn 0.6100 0.3032 -0.7321 +vn 0.0000 0.9914 -0.1306 +vn 0.6100 0.7856 -0.1035 +vn -0.6100 0.3031 -0.7321 +vn -0.6100 -0.4824 -0.6287 +vn -0.6100 0.7856 -0.1034 +vn 0.0000 0.9914 -0.1305 +vn -0.6100 -0.7856 0.1034 +vn -0.6100 -0.3032 0.7321 +vn 0.0000 0.6087 0.7934 +vn -0.6100 0.4824 0.6286 +vn 0.0000 -0.9914 -0.1306 +vn -0.6100 0.3033 0.7320 +vn 0.6100 0.1034 0.7856 +vn 0.0000 0.7934 -0.6088 +vn 0.6100 -0.6287 0.4824 +vn 0.0000 -0.1306 -0.9914 +vn 0.6100 -0.1033 -0.7856 +vn -0.6100 -0.7320 -0.3034 +vn 0.0000 -0.7934 0.6088 +vn -0.6100 -0.6287 0.4824 +vn 0.0000 0.1306 0.9914 +vn -0.6100 0.7321 0.3032 +vn -0.6100 0.6288 -0.4823 +vn 0.6100 0.1035 -0.7856 +vn 0.6100 -0.1034 0.7856 +vn -0.6100 -0.6286 -0.4825 +vn -0.6100 0.7322 -0.3030 +vn -0.6100 0.1033 -0.7856 +vn 0.6100 0.7856 -0.1034 +vn 0.0000 -0.6088 -0.7934 +vn 0.0000 -0.9914 0.1306 +vn 0.6100 -0.7856 0.1035 +vn -0.6100 -0.3031 0.7321 +vn -0.6100 0.4824 0.6287 +vn -0.6100 0.3032 -0.7321 +vn -0.6100 -0.4824 -0.6286 +vn -0.2267 -0.2267 0.9472 +vn -0.1243 -0.1243 0.9844 +vn -0.3333 -0.3333 0.8819 +vn -0.0247 -0.0247 0.9994 +vn -0.3333 0.8819 -0.3333 +vn -0.4431 0.7793 -0.4431 +vn 0.2267 0.9472 -0.2267 +vn 0.1243 0.9844 -0.1243 +vn 0.3333 0.8819 -0.3333 +vn 0.0247 0.9994 -0.0247 +vn 0.4431 0.7793 -0.4431 +vn 0.4686 0.1087 0.8767 +vn 0.5510 -0.5510 0.6267 +vn 0.6437 -0.6437 0.4139 +vn 0.6995 -0.6995 0.1458 +vn 0.6995 -0.6995 -0.1458 +vn 0.6437 -0.6437 -0.4139 +vn 0.5510 -0.5510 -0.6267 +vn 0.4431 -0.4431 -0.7793 +vn 0.5774 -0.5774 -0.5774 +vn 0.4431 -0.7793 -0.4431 +vn 0.5510 -0.6267 -0.5510 +vn 0.6437 -0.4139 -0.6437 +vn 0.6995 -0.1458 -0.6995 +vn 0.6995 0.1458 -0.6995 +vn 0.6437 0.4139 -0.6437 +vn 0.5510 0.6267 -0.5510 +vn -0.4431 -0.7793 -0.4431 +vn -0.5774 -0.5774 -0.5774 +vn -0.5510 0.6267 -0.5510 +vn 0.6100 -0.5603 -0.5603 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.2588 -0.9659 +vn 0.6100 0.2051 -0.7654 +vn 0.6100 -0.7654 0.2051 +vn 0.0000 -0.9659 0.2588 +vn 0.0000 0.9659 -0.2588 +vn 0.6100 0.7654 -0.2051 +vn 0.0000 0.7071 0.7071 +vn 0.6100 0.5603 0.5603 +vn 0.0000 -0.2588 0.9659 +vn 0.6100 -0.2051 0.7654 +vn -0.6100 0.5603 0.5603 +vn -0.6100 0.7654 -0.2051 +vn -0.6100 -0.2051 0.7654 +vn -0.6100 0.2051 -0.7654 +vn -0.6100 -0.5603 -0.5603 +vn -0.6100 -0.7654 0.2051 +vn 0.6100 -0.7924 -0.0000 +vn 0.0000 -0.5000 -0.8660 +vn 0.6100 -0.3962 -0.6862 +vn 0.6100 -0.3963 0.6861 +vn 0.0000 -0.5000 0.8660 +vn 0.0000 0.5000 -0.8660 +vn 0.6100 0.3962 -0.6862 +vn 0.6100 0.7924 0.0000 +vn 0.0000 0.5000 0.8660 +vn 0.6100 0.3962 0.6862 +vn -0.6100 0.7924 -0.0000 +vn -0.6100 0.3962 -0.6862 +vn -0.6100 0.3961 0.6863 +vn -0.6100 -0.3962 -0.6862 +vn -0.6100 -0.7924 0.0000 +vn -0.6100 -0.3962 0.6862 +vn 0.6100 -0.5603 0.5603 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.9659 -0.2588 +vn 0.6100 -0.7654 -0.2051 +vn 0.6100 0.2051 0.7654 +vn 0.0000 0.2588 0.9659 +vn 0.0000 -0.2588 -0.9659 +vn 0.6100 -0.2051 -0.7654 +vn 0.0000 0.7071 -0.7071 +vn 0.6100 0.5603 -0.5603 +vn 0.0000 0.9659 0.2588 +vn 0.6100 0.7654 0.2051 +vn -0.6100 0.5603 -0.5603 +vn -0.6100 -0.2051 -0.7654 +vn -0.6100 0.7654 0.2051 +vn -0.6100 -0.7654 -0.2051 +vn -0.6100 -0.5603 0.5603 +vn -0.6100 0.2051 0.7654 +vn 0.6100 0.0001 0.7924 +vn 0.0000 -0.8660 0.5000 +vn 0.6100 -0.6862 0.3962 +vn 0.6100 0.6861 0.3963 +vn 0.0000 0.8660 0.5000 +vn 0.0000 -0.8660 -0.5000 +vn 0.6100 -0.6862 -0.3962 +vn 0.6100 0.0000 -0.7924 +vn 0.0000 0.8660 -0.5000 +vn 0.6100 0.6863 -0.3961 +vn -0.6100 -0.0000 -0.7924 +vn -0.6100 -0.6862 -0.3962 +vn -0.6100 0.6861 -0.3963 +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.3963 -0.6861 +vn 0.6100 -0.3962 0.6862 +vn -0.6100 -0.3961 -0.6863 +vn -0.6100 0.3962 0.6862 +vn 0.6100 -0.0001 -0.7924 +vn 0.6100 0.6862 -0.3962 +vn 0.6100 -0.6861 -0.3963 +vn 0.6100 0.6862 0.3962 +vn 0.6100 -0.0000 0.7924 +vn 0.6100 -0.6863 0.3961 +vn -0.6100 -0.6861 0.3963 +vn -0.6100 0.6862 -0.3962 +vn 0.2113 0.6857 0.6965 +vn 0.2113 -0.6857 0.6965 +vn 0.3431 -0.6857 0.6419 +vn 0.3431 0.6857 0.6419 +vn 0.0712 0.6857 0.7244 +vn 0.0713 -0.6857 0.7244 +vn -0.0714 0.6857 0.7244 +vn -0.0713 -0.6857 0.7244 +vn -0.2112 0.6857 0.6965 +vn -0.2113 -0.6857 0.6965 +vn -0.3432 0.6857 0.6419 +vn -0.3430 -0.6857 0.6420 +vn -0.4617 0.6857 0.5626 +vn -0.4617 -0.6857 0.5626 +vn -0.5627 0.6857 0.4617 +vn -0.5627 -0.6857 0.4617 +vn -0.6419 0.6857 0.3431 +vn -0.6419 -0.6857 0.3431 +vn -0.6965 0.6857 0.2113 +vn -0.6965 -0.6857 0.2113 +vn -0.7244 0.6857 0.0713 +vn -0.7244 -0.6857 0.0716 +vn -0.7244 0.6857 -0.0716 +vn -0.7244 -0.6857 -0.0713 +vn -0.6965 0.6857 -0.2113 +vn -0.6965 -0.6857 -0.2113 +vn -0.6419 0.6857 -0.3431 +vn -0.6419 -0.6857 -0.3431 +vn -0.5626 0.6857 -0.4617 +vn -0.5626 -0.6857 -0.4617 +vn -0.4617 0.6857 -0.5626 +vn -0.4617 -0.6857 -0.5626 +vn -0.3430 0.6857 -0.6420 +vn -0.3432 -0.6857 -0.6419 +vn -0.2113 0.6857 -0.6965 +vn -0.2113 -0.6857 -0.6965 +vn -0.0713 0.6857 -0.7244 +vn -0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn 0.0713 -0.6857 -0.7244 +vn 0.2113 0.6857 -0.6965 +vn 0.2113 -0.6857 -0.6965 +vn 0.4617 0.6857 -0.5626 +vn 0.4617 -0.6857 -0.5626 +vn 0.3430 -0.6857 -0.6420 +vn 0.3432 0.6857 -0.6419 +vn 0.5626 0.6857 -0.4617 +vn 0.5626 -0.6857 -0.4617 +vn 0.6419 0.6857 -0.3431 +vn 0.6419 -0.6857 -0.3431 +vn 0.6966 0.6857 -0.2112 +vn 0.6965 -0.6857 -0.2113 +vn 0.7244 0.6857 -0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.6965 0.6857 0.2113 +vn 0.6965 -0.6857 0.2113 +vn 0.7244 -0.6857 0.0713 +vn 0.7244 0.6857 0.0713 +vn 0.6419 0.6857 0.3431 +vn 0.6419 -0.6857 0.3431 +vn 0.5626 0.6857 0.4617 +vn 0.5626 -0.6857 0.4617 +vn 0.8614 0.2147 -0.4604 +vn 0.8767 0.1087 -0.4686 +vn 0.9513 0.1087 -0.2886 +vn 0.9346 0.2147 -0.2835 +vn 0.9720 0.2147 -0.0957 +vn 0.9893 0.1087 -0.0974 +vn 0.9720 0.2147 0.0957 +vn 0.9893 0.1087 0.0974 +vn 0.9346 0.2147 0.2835 +vn 0.9513 0.1087 0.2886 +vn 0.8614 0.2147 0.4604 +vn 0.8767 0.1087 0.4686 +vn 0.7550 0.2147 0.6196 +vn 0.6196 0.2147 0.7550 +vn 0.4604 0.2147 0.8614 +vn 0.2835 0.2147 0.9346 +vn 0.2886 0.1087 0.9513 +vn 0.0957 0.2147 0.9720 +vn 0.0974 0.1087 0.9893 +vn -0.0974 0.1087 0.9893 +vn -0.0957 0.2147 0.9720 +vn -0.2886 0.1087 0.9513 +vn -0.2835 0.2147 0.9346 +vn -0.4604 0.2147 0.8614 +vn -0.4686 0.1087 0.8767 +vn -0.6306 0.1087 0.7684 +vn -0.6196 0.2147 0.7550 +vn -0.7684 0.1087 0.6306 +vn -0.7550 0.2147 0.6196 +vn -0.8614 0.2147 0.4604 +vn -0.8767 0.1087 0.4686 +vn -0.9513 0.1087 0.2886 +vn -0.9346 0.2147 0.2835 +vn -0.9720 0.2147 0.0957 +vn -0.9893 0.1087 0.0974 +vn -0.9893 0.1087 -0.0974 +vn -0.9720 0.2147 -0.0957 +vn -0.9346 0.2147 -0.2835 +vn -0.9513 0.1087 -0.2886 +vn -0.8767 0.1087 -0.4686 +vn -0.8614 0.2147 -0.4604 +vn -0.7684 0.1087 -0.6306 +vn -0.7550 0.2147 -0.6196 +vn -0.6306 0.1087 -0.7684 +vn -0.6196 0.2147 -0.7550 +vn -0.4686 0.1087 -0.8767 +vn -0.4604 0.2147 -0.8614 +vn -0.2886 0.1087 -0.9513 +vn -0.2835 0.2147 -0.9346 +vn -0.0974 0.1087 -0.9893 +vn -0.0957 0.2147 -0.9720 +vn 0.2835 0.2147 -0.9346 +vn 0.0957 0.2147 -0.9720 +vn 0.0974 0.1087 -0.9893 +vn 0.2886 0.1087 -0.9513 +vn 0.6196 0.2147 -0.7550 +vn 0.4604 0.2147 -0.8614 +vn 0.4686 0.1087 -0.8767 +vn 0.6306 0.1087 -0.7684 +vn 0.7550 0.2147 -0.6196 +vn 0.7684 0.1087 -0.6306 +vn 0.4617 -0.6858 0.5626 +vn 0.4617 0.6857 0.5627 +vn 0.3032 0.6100 0.7321 +vn 0.3826 0.0000 0.9239 +vn 0.9914 0.0000 0.1305 +vn 0.7856 0.6100 0.1035 +vn -0.4824 0.6100 0.6287 +vn -0.6088 0.0000 0.7933 +vn 0.6087 -0.0000 -0.7934 +vn 0.4824 0.6100 -0.6287 +vn -0.3827 -0.0000 -0.9239 +vn -0.3032 0.6100 -0.7321 +vn -0.9914 -0.0000 -0.1305 +vn -0.7856 0.6100 -0.1035 +vn 0.7321 0.6100 0.3032 +vn 0.9239 0.0000 0.3827 +vn 0.7934 0.0000 -0.6087 +vn 0.6287 0.6100 -0.4824 +vn 0.1034 0.6100 0.7856 +vn 0.1305 0.0000 0.9914 +vn -0.1305 0.0000 -0.9914 +vn -0.1034 0.6100 -0.7856 +vn -0.9239 0.0000 -0.3827 +vn -0.7321 0.6100 -0.3032 +vn -0.7934 0.0000 0.6087 +vn -0.6286 0.6100 0.4824 +vn 0.7321 0.6100 -0.3032 +vn 0.9239 0.0000 -0.3827 +vn 0.1305 0.0000 -0.9914 +vn 0.1034 0.6100 -0.7856 +vn 0.6287 0.6100 0.4823 +vn 0.7934 0.0000 0.6087 +vn -0.7934 0.0000 -0.6087 +vn -0.6287 0.6100 -0.4824 +vn -0.9239 0.0000 0.3827 +vn -0.7321 0.6100 0.3032 +vn -0.1305 0.0000 0.9914 +vn -0.1034 0.6100 0.7856 +vn 0.3032 0.6100 -0.7321 +vn 0.3827 -0.0000 -0.9239 +vn -0.6087 -0.0000 -0.7934 +vn -0.4824 0.6100 -0.6287 +vn 0.7856 0.6100 -0.1034 +vn 0.9914 -0.0000 -0.1306 +vn -0.9914 0.0000 0.1305 +vn -0.7856 0.6100 0.1033 +vn -0.3827 0.0000 0.9239 +vn -0.3032 0.6100 0.7321 +vn 0.6088 0.0000 0.7934 +vn 0.4824 0.6100 0.6287 +vn -0.7856 0.6100 -0.1034 +vn 0.4825 0.6100 -0.6286 +vn -0.6087 0.0000 0.7934 +vn -0.4824 0.6100 0.6286 +vn 0.3827 0.0000 0.9239 +vn 0.3030 0.6100 0.7322 +vn 0.7856 0.6100 0.1034 +vn -0.7321 0.6100 -0.3031 +vn -0.7934 0.0000 0.6088 +vn -0.1035 0.6100 -0.7856 +vn 0.1306 0.0000 0.9914 +vn 0.6286 0.6100 -0.4824 +vn -0.7934 0.0000 -0.6088 +vn 0.6287 0.6100 0.4824 +vn 0.1306 0.0000 -0.9914 +vn -0.3034 0.6100 0.7320 +vn -0.7856 0.6100 0.1034 +vn -0.4823 0.6100 -0.6288 +vn -0.6306 0.7684 0.1087 +vn -0.7684 0.6306 0.1087 +vn 0.0974 0.9893 0.1087 +vn -0.0974 0.9893 0.1087 +vn -0.7793 -0.4431 -0.4431 +vn -0.6267 -0.5510 -0.5510 +vn -0.4139 -0.6437 -0.6437 +vn -0.1458 -0.6996 -0.6995 +vn 0.1458 -0.6996 -0.6995 +vn 0.4139 -0.6437 -0.6437 +vn 0.6267 -0.5510 -0.5510 +vn 0.7793 -0.4431 -0.4431 +vn 0.5603 0.6100 0.5603 +vn 0.7071 0.0000 0.7071 +vn 0.9659 0.0000 -0.2588 +vn 0.7654 0.6100 -0.2051 +vn -0.2051 0.6100 0.7654 +vn -0.2588 0.0000 0.9659 +vn 0.2588 0.0000 -0.9659 +vn 0.2051 0.6100 -0.7654 +vn -0.7071 0.0000 -0.7071 +vn -0.5603 0.6100 -0.5603 +vn -0.9659 0.0000 0.2588 +vn -0.7654 0.6100 0.2051 +vn 0.7924 0.6100 -0.0000 +vn 0.5000 0.0000 -0.8660 +vn 0.3962 0.6100 -0.6862 +vn 0.3962 0.6100 0.6862 +vn 0.5000 0.0000 0.8660 +vn -0.5000 0.0000 -0.8660 +vn -0.3962 0.6100 -0.6862 +vn -0.7924 0.6100 0.0000 +vn -0.5000 0.0000 0.8660 +vn -0.3962 0.6100 0.6862 +vn 0.5603 0.6100 -0.5603 +vn 0.7071 0.0000 -0.7071 +vn -0.2588 0.0000 -0.9659 +vn -0.2051 0.6100 -0.7654 +vn 0.7654 0.6100 0.2051 +vn 0.9659 0.0000 0.2588 +vn -0.9659 0.0000 -0.2588 +vn -0.7654 0.6100 -0.2051 +vn -0.7071 0.0000 0.7071 +vn -0.5603 0.6100 0.5603 +vn 0.2588 0.0000 0.9659 +vn 0.2051 0.6100 0.7654 +vn -0.0000 0.6100 -0.7924 +vn -0.8660 0.0000 -0.5000 +vn -0.6861 0.6100 -0.3963 +vn 0.6863 0.6100 -0.3961 +vn 0.8660 0.0000 -0.5000 +vn -0.8660 0.0000 0.5000 +vn -0.6862 0.6100 0.3962 +vn 0.0000 0.6100 0.7924 +vn 0.8660 0.0000 0.5000 +vn 0.6861 0.6100 0.3963 +vn 0.6862 0.6100 0.3962 +vn -0.6863 0.6100 0.3961 +vn 0.6862 0.6100 -0.3962 +vn 0.0003 0.6100 -0.7924 +vn 0.2113 -0.6965 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.3432 -0.6419 0.6857 +vn 0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn -0.2113 -0.6965 0.6857 +vn -0.2113 -0.6965 -0.6857 +vn -0.3430 -0.6420 0.6857 +vn -0.3432 -0.6419 -0.6857 +vn -0.4616 -0.5627 0.6857 +vn -0.4618 -0.5626 -0.6857 +vn -0.5627 -0.4617 0.6857 +vn -0.5627 -0.4617 -0.6857 +vn -0.6419 -0.3431 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.7244 0.0713 0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.6965 0.2113 -0.6857 +vn -0.6419 0.3431 0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.5626 0.4617 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.4617 0.5626 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.2113 0.6965 -0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn 0.0713 0.7244 -0.6857 +vn 0.2113 0.6965 0.6857 +vn 0.2113 0.6965 -0.6857 +vn 0.4617 0.5626 0.6857 +vn 0.4617 0.5626 -0.6857 +vn 0.3431 0.6419 -0.6857 +vn 0.3431 0.6419 0.6857 +vn 0.5626 0.4617 0.6857 +vn 0.5626 0.4617 -0.6857 +vn 0.6419 0.3431 0.6857 +vn 0.6419 0.3431 -0.6857 +vn 0.6965 0.2115 0.6857 +vn 0.6966 0.2112 -0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn 0.6966 -0.2112 0.6857 +vn 0.6965 -0.2114 -0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.6419 -0.3431 0.6857 +vn 0.6419 -0.3431 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.5626 -0.4617 -0.6857 +vn 0.8614 0.4604 0.2147 +vn 0.8767 0.4686 0.1087 +vn 0.9513 0.2886 0.1087 +vn 0.9346 0.2835 0.2147 +vn 0.9720 0.0957 0.2147 +vn 0.9893 0.0974 0.1087 +vn 0.9720 -0.0957 0.2147 +vn 0.9893 -0.0974 0.1087 +vn 0.9346 -0.2835 0.2147 +vn 0.9513 -0.2886 0.1087 +vn 0.8614 -0.4604 0.2147 +vn 0.8767 -0.4686 0.1087 +vn 0.7550 -0.6196 0.2147 +vn 0.7684 -0.6306 0.1087 +vn 0.6306 -0.7684 0.1087 +vn 0.6196 -0.7550 0.2147 +vn 0.4604 -0.8614 0.2147 +vn 0.4686 -0.8767 0.1087 +vn 0.2835 -0.9346 0.2147 +vn 0.2886 -0.9513 0.1087 +vn 0.0957 -0.9720 0.2147 +vn 0.0974 -0.9893 0.1087 +vn -0.0974 -0.9893 0.1087 +vn -0.0957 -0.9720 0.2147 +vn -0.2886 -0.9513 0.1087 +vn -0.2835 -0.9346 0.2147 +vn -0.4604 -0.8614 0.2147 +vn -0.4686 -0.8767 0.1087 +vn -0.6306 -0.7684 0.1087 +vn -0.6196 -0.7550 0.2147 +vn -0.7684 -0.6306 0.1087 +vn -0.7550 -0.6196 0.2147 +vn -0.8614 -0.4604 0.2147 +vn -0.8767 -0.4686 0.1087 +vn -0.9513 -0.2886 0.1087 +vn -0.9346 -0.2835 0.2147 +vn -0.9720 -0.0957 0.2147 +vn -0.9893 -0.0974 0.1087 +vn -0.9893 0.0974 0.1087 +vn -0.9720 0.0957 0.2147 +vn -0.9346 0.2835 0.2147 +vn -0.9513 0.2886 0.1087 +vn -0.8767 0.4686 0.1087 +vn -0.8614 0.4604 0.2147 +vn -0.7550 0.6196 0.2147 +vn -0.6196 0.7550 0.2147 +vn -0.4686 0.8767 0.1087 +vn -0.4604 0.8614 0.2147 +vn -0.2886 0.9513 0.1087 +vn -0.2835 0.9346 0.2147 +vn -0.0957 0.9720 0.2147 +vn 0.2835 0.9346 0.2147 +vn 0.0957 0.9720 0.2147 +vn 0.2886 0.9513 0.1087 +vn 0.6196 0.7550 0.2147 +vn 0.4604 0.8614 0.2147 +vn 0.4686 0.8767 0.1087 +vn 0.6306 0.7684 0.1087 +vn 0.7550 0.6196 0.2147 +vn 0.7684 0.6306 0.1087 +vn 0.4617 -0.5626 -0.6858 +vn 0.4617 -0.5626 0.6857 +vn 0.3032 -0.7321 0.6100 +vn 0.3826 -0.9239 0.0000 +vn 0.9914 -0.1305 0.0000 +vn 0.7856 -0.1036 0.6100 +vn -0.4825 -0.6286 0.6100 +vn -0.6088 -0.7933 0.0000 +vn 0.6087 0.7934 0.0000 +vn 0.4824 0.6286 0.6100 +vn -0.3827 0.9239 0.0000 +vn -0.3032 0.7321 0.6100 +vn -0.9914 0.1305 0.0000 +vn -0.7856 0.1033 0.6100 +vn 0.7321 -0.3033 0.6100 +vn 0.9239 -0.3827 0.0000 +vn 0.7934 0.6087 0.0000 +vn 0.6287 0.4824 0.6100 +vn 0.1034 -0.7856 0.6100 +vn 0.1305 -0.9914 0.0000 +vn -0.1305 0.9914 0.0000 +vn -0.1034 0.7856 0.6100 +vn -0.9239 0.3827 0.0000 +vn -0.7321 0.3032 0.6100 +vn -0.7934 -0.6087 0.0000 +vn -0.6288 -0.4823 0.6100 +vn 0.7321 0.3032 0.6100 +vn 0.9239 0.3827 0.0000 +vn 0.1305 0.9914 0.0000 +vn 0.1034 0.7856 0.6100 +vn 0.6286 -0.4825 0.6100 +vn 0.7934 -0.6087 0.0000 +vn -0.7934 0.6087 0.0000 +vn -0.6287 0.4824 0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.7321 -0.3031 0.6100 +vn -0.1305 -0.9914 0.0000 +vn -0.1034 -0.7856 0.6100 +vn 0.3032 0.7321 0.6100 +vn 0.3827 0.9239 0.0000 +vn -0.6087 0.7934 0.0000 +vn -0.4823 0.6287 0.6100 +vn 0.7856 0.1033 0.6100 +vn 0.9914 0.1306 0.0000 +vn -0.9914 -0.1305 0.0000 +vn -0.7856 -0.1033 0.6100 +vn -0.3827 -0.9239 0.0000 +vn -0.3032 -0.7321 0.6100 +vn 0.6088 -0.7934 -0.0000 +vn 0.4824 -0.6286 0.6100 +vn -0.3033 0.7321 0.6100 +vn -0.7856 0.1034 0.6100 +vn 0.4824 0.6287 0.6100 +vn -0.6087 -0.7934 0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.3033 -0.7321 0.6100 +vn 0.7856 -0.1034 0.6100 +vn -0.7321 0.3033 0.6100 +vn -0.7934 -0.6088 0.0000 +vn -0.6287 -0.4824 0.6100 +vn -0.1035 0.7856 0.6100 +vn 0.1306 -0.9914 0.0000 +vn 0.7321 -0.3032 0.6100 +vn 0.6287 0.4823 0.6100 +vn -0.7321 -0.3032 0.6100 +vn -0.7934 0.6088 0.0000 +vn 0.6287 -0.4824 0.6100 +vn 0.7321 0.3033 0.6100 +vn 0.1306 0.9914 0.0000 +vn -0.3031 -0.7322 0.6100 +vn 0.4823 -0.6287 0.6100 +vn -0.7856 -0.1034 0.6100 +vn 0.7856 0.1034 0.6100 +vn -0.4824 0.6287 0.6100 +vn 0.5603 -0.5603 0.6100 +vn 0.7071 -0.7071 0.0000 +vn 0.9659 0.2588 0.0000 +vn 0.7654 0.2051 0.6100 +vn -0.2051 -0.7654 0.6100 +vn -0.2588 -0.9659 0.0000 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 0.6100 +vn -0.7071 0.7071 0.0000 +vn -0.5603 0.5603 0.6100 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 0.6100 +vn 0.7924 0.0000 0.6100 +vn 0.5000 0.8660 0.0000 +vn 0.3962 0.6862 0.6100 +vn 0.3962 -0.6862 0.6100 +vn 0.5000 -0.8660 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.3962 0.6862 0.6100 +vn -0.7924 -0.0000 0.6100 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 0.6100 +vn 0.5603 0.5603 0.6100 +vn 0.7071 0.7071 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 0.6100 +vn 0.7654 -0.2051 0.6100 +vn 0.9659 -0.2588 0.0000 +vn -0.9659 0.2588 0.0000 +vn -0.7654 0.2051 0.6100 +vn -0.7071 -0.7071 0.0000 +vn -0.5603 -0.5603 0.6100 +vn 0.2588 -0.9659 0.0000 +vn 0.2051 -0.7654 0.6100 +vn 0.0001 0.7924 0.6100 +vn -0.8660 0.5000 -0.0000 +vn -0.6862 0.3962 0.6100 +vn 0.6862 0.3963 0.6100 +vn 0.8660 0.5000 -0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.6863 -0.3961 0.6100 +vn -0.0001 -0.7924 0.6100 +vn 0.8660 -0.5000 0.0000 +vn 0.6862 -0.3962 0.6100 +vn 0.0000 -0.7924 0.6100 +vn 0.6862 -0.3963 0.6100 +vn -0.6861 -0.3963 0.6100 +vn 0.6862 0.3962 0.6100 +vn -0.0000 0.7924 0.6100 +vn -0.6863 0.3961 0.6100 +g Pipe_Cylinder.002_None.004_Pipe_Cylinder.002_None.004_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 +f 7/7/2 8/8/2 9/9/2 10/10/2 11/11/2 12/12/2 +f 13/13/1 14/14/1 15/15/1 16/16/1 17/17/1 18/18/1 +f 19/19/2 20/20/2 21/21/2 22/22/2 23/23/2 24/24/2 +f 25/25/1 26/26/1 27/27/1 28/28/1 29/29/1 30/30/1 +f 31/31/2 32/32/2 33/33/2 34/34/2 35/35/2 36/36/2 +f 37/37/1 38/38/1 39/39/1 40/40/1 41/41/1 42/42/1 +f 43/43/2 44/44/2 45/45/2 46/46/2 47/47/2 48/48/2 +f 49/49/1 50/50/1 51/51/1 52/52/1 53/53/1 54/54/1 +f 55/55/2 56/56/2 57/57/2 58/58/2 59/59/2 60/60/2 +f 61/61/1 62/62/1 63/63/1 64/64/1 65/65/1 66/66/1 +f 67/67/2 68/68/2 69/69/2 70/70/2 71/71/2 72/72/2 +f 73/73/1 74/74/1 75/75/1 76/76/1 77/77/1 78/78/1 +f 79/79/2 80/80/2 81/81/2 82/82/2 83/83/2 84/84/2 +f 85/85/1 86/86/1 87/87/1 88/88/1 89/89/1 90/90/1 +f 91/91/2 92/92/2 93/93/2 94/94/2 95/95/2 96/96/2 +f 97/97/2 98/98/2 99/99/2 100/100/2 101/101/2 102/102/2 103/103/2 104/104/2 105/105/2 106/106/2 107/107/2 108/108/2 109/109/2 110/110/2 111/111/2 112/112/2 113/113/2 114/114/2 115/115/2 116/116/2 117/117/2 118/118/2 119/119/2 120/120/2 121/121/2 122/122/2 123/123/2 124/124/2 125/125/2 126/126/2 127/127/2 128/128/2 +f 129/129/1 130/130/1 131/131/1 132/132/1 133/133/1 134/134/1 135/135/1 136/136/1 137/137/1 138/138/1 139/139/1 140/140/1 141/141/1 142/142/1 143/143/1 144/144/1 145/145/1 146/146/1 147/147/1 148/148/1 149/149/1 150/150/1 151/151/1 152/152/1 153/153/1 154/154/1 155/155/1 156/156/1 157/157/1 158/158/1 159/159/1 160/160/1 +f 161/161/1 162/162/1 163/163/1 164/164/1 165/165/1 166/166/1 167/167/1 168/168/1 169/169/1 170/170/1 171/171/1 172/172/1 173/173/1 174/174/1 175/175/1 176/176/1 177/177/1 178/178/1 179/179/1 180/180/1 181/181/1 182/182/1 183/183/1 184/184/1 185/185/1 186/186/1 187/187/1 188/188/1 189/189/1 190/190/1 191/191/1 192/192/1 +f 193/193/2 194/194/2 195/195/2 196/196/2 197/197/2 198/198/2 199/199/2 200/200/2 201/201/2 202/202/2 203/203/2 204/204/2 205/205/2 206/206/2 207/207/2 208/208/2 209/209/2 210/210/2 211/211/2 212/212/2 213/213/2 214/214/2 215/215/2 216/216/2 217/217/2 218/218/2 219/219/2 220/220/2 221/221/2 222/222/2 223/223/2 224/224/2 +f 225/225/1 226/226/1 227/227/1 228/228/1 229/229/1 230/230/1 +f 231/231/2 232/232/2 233/233/2 234/234/2 235/235/2 236/236/2 +f 237/237/1 238/238/1 239/239/1 240/240/1 241/241/1 242/242/1 +f 243/243/2 244/244/2 245/245/2 246/246/2 247/247/2 248/248/2 +f 249/249/1 250/250/1 251/251/1 252/252/1 253/253/1 254/254/1 +f 255/255/2 256/256/2 257/257/2 258/258/2 259/259/2 260/260/2 +f 261/261/1 262/262/1 263/263/1 264/264/1 265/265/1 266/266/1 +f 267/267/2 268/268/2 269/269/2 270/270/2 271/271/2 272/272/2 +f 273/273/1 274/274/1 275/275/1 276/276/1 277/277/1 278/278/1 +f 279/279/2 280/280/2 281/281/2 282/282/2 283/283/2 284/284/2 +f 285/285/1 286/286/1 287/287/1 288/288/1 289/289/1 290/290/1 +f 291/291/2 292/292/2 293/293/2 294/294/2 295/295/2 296/296/2 +f 297/297/1 298/298/1 299/299/1 300/300/1 301/301/1 302/302/1 +f 303/303/2 304/304/2 305/305/2 306/306/2 307/307/2 308/308/2 +f 309/309/1 310/310/1 311/311/1 312/312/1 313/313/1 314/314/1 +f 315/315/2 316/316/2 317/317/2 318/318/2 319/319/2 320/320/2 +f 321/321/3 322/322/3 323/323/3 324/324/3 325/325/3 326/326/3 +f 327/327/3 328/328/3 329/329/3 330/330/3 331/331/3 332/332/3 +f 333/333/3 334/334/3 335/335/3 336/336/3 337/337/3 338/338/3 +f 339/339/3 340/340/3 341/341/3 342/342/3 343/343/3 344/344/3 +f 345/345/3 346/346/3 347/347/3 348/348/3 349/349/3 350/350/3 +f 351/351/3 352/352/3 353/353/3 354/354/3 355/355/3 356/356/3 +f 357/357/3 358/358/3 359/359/3 360/360/3 361/361/3 362/362/3 +f 363/363/3 364/364/3 365/365/3 366/366/3 367/367/3 368/368/3 +f 369/369/3 370/370/3 371/371/3 372/372/3 373/373/3 374/374/3 375/375/3 376/376/3 377/377/3 378/378/3 379/379/3 380/380/3 381/381/3 382/382/3 383/383/3 384/384/3 385/385/3 386/386/3 387/387/3 388/388/3 389/389/3 390/390/3 391/391/3 392/392/3 393/393/3 394/394/3 395/395/3 396/396/3 397/397/3 398/398/3 399/399/3 400/400/3 +f 401/401/4 402/402/4 403/403/4 404/404/4 405/405/4 406/406/4 407/407/4 408/408/4 409/409/4 410/410/4 411/411/4 412/412/4 413/413/4 414/414/4 415/415/4 416/416/4 417/417/4 418/418/4 419/419/4 420/420/4 421/421/4 422/422/4 423/423/4 424/424/4 425/425/4 426/426/4 427/427/4 428/428/4 429/429/4 430/430/4 431/431/4 432/432/4 +f 433/433/3 434/434/3 435/435/3 436/436/3 437/437/3 438/438/3 +f 439/439/3 440/440/3 441/441/3 442/442/3 443/443/3 444/444/3 +f 445/445/3 446/446/3 447/447/3 448/448/3 449/449/3 450/450/3 +f 451/451/3 452/452/3 453/453/3 454/454/3 455/455/3 456/456/3 +f 457/457/3 458/458/3 459/459/3 460/460/3 461/461/3 462/462/3 +f 463/463/3 464/464/3 465/465/3 466/466/3 467/467/3 468/468/3 +f 469/469/3 470/470/3 471/471/3 472/472/3 473/473/3 474/474/3 +f 475/475/3 476/476/3 477/477/3 478/478/3 479/479/3 480/480/3 +f 481/481/5 482/482/5 483/483/5 484/484/5 485/485/5 486/486/5 +f 487/487/5 488/488/5 489/489/5 490/490/5 491/491/5 492/492/5 +f 493/493/5 494/494/5 495/495/5 496/496/5 497/497/5 498/498/5 +f 499/499/5 500/500/5 501/501/5 502/502/5 503/503/5 504/504/5 +f 505/505/5 506/506/5 507/507/5 508/508/5 509/509/5 510/510/5 +f 511/511/5 512/512/5 513/513/5 514/514/5 515/515/5 516/516/5 +f 517/517/5 518/518/5 519/519/5 520/520/5 521/521/5 522/522/5 +f 523/523/5 524/524/5 525/525/5 526/526/5 527/527/5 528/528/5 +f 529/529/5 530/530/5 531/531/5 532/532/5 533/533/5 534/534/5 535/535/5 536/536/5 537/537/5 538/538/5 539/539/5 540/540/5 541/541/5 542/542/5 543/543/5 544/544/5 545/545/5 546/546/5 547/547/5 548/548/5 549/549/5 550/550/5 551/551/5 552/552/5 553/553/5 554/554/5 555/555/5 556/556/5 557/557/5 558/558/5 559/559/5 560/560/5 +f 561/561/6 562/562/6 563/563/6 564/564/6 565/565/6 566/566/6 567/567/6 568/568/6 569/569/6 570/570/6 571/571/6 572/572/6 573/573/6 574/574/6 575/575/6 576/576/6 577/577/6 578/578/6 579/579/6 580/580/6 581/581/6 582/582/6 583/583/6 584/584/6 585/585/6 586/586/6 587/587/6 588/588/6 589/589/6 590/590/6 591/591/6 592/592/6 +f 593/593/5 594/594/5 595/595/5 596/596/5 597/597/5 598/598/5 +f 599/599/5 600/600/5 601/601/5 602/602/5 603/603/5 604/604/5 +f 605/605/5 606/606/5 607/607/5 608/608/5 609/609/5 610/610/5 +f 611/611/5 612/612/5 613/613/5 614/614/5 615/615/5 616/616/5 +f 617/617/5 618/618/5 619/619/5 620/620/5 621/621/5 622/622/5 +f 623/623/5 624/624/5 625/625/5 626/626/5 627/627/5 628/628/5 +f 629/629/5 630/630/5 631/631/5 632/632/5 633/633/5 634/634/5 +f 635/635/5 636/636/5 637/637/5 638/638/5 639/639/5 640/640/5 +s 1 +f 127/641/7 150/642/8 149/643/9 128/644/10 +f 126/645/11 151/646/12 150/642/8 127/641/7 +f 125/647/13 152/648/14 151/646/12 126/645/11 +f 124/649/15 153/650/16 152/648/14 125/647/13 +f 123/651/17 154/652/18 153/650/16 124/649/15 +f 122/653/19 155/654/20 154/652/18 123/651/17 +f 121/655/21 156/656/22 155/654/20 122/653/19 +f 120/657/23 157/658/24 156/656/22 121/655/21 +f 119/659/25 158/660/26 157/658/24 120/657/23 +f 118/661/27 159/662/28 158/660/26 119/659/25 +f 117/663/29 160/664/30 159/662/28 118/661/27 +f 116/665/31 129/666/32 160/664/30 117/663/29 +f 115/667/33 130/668/34 129/666/32 116/665/31 +f 114/669/35 131/670/36 130/671/34 115/667/33 +f 113/672/37 132/673/38 131/670/36 114/669/35 +f 112/674/39 133/675/40 132/673/38 113/672/37 +f 111/676/41 134/677/42 133/678/40 112/679/39 +f 110/680/43 135/681/44 134/677/42 111/676/41 +f 109/682/45 136/683/46 135/681/44 110/680/43 +f 108/684/47 137/685/48 136/683/46 109/682/45 +f 106/686/49 139/687/50 138/688/51 107/689/52 +f 107/689/52 138/688/51 137/685/48 108/684/47 +f 105/690/53 140/691/54 139/687/50 106/686/49 +f 104/692/55 141/693/56 140/691/54 105/690/53 +f 103/694/57 142/695/58 141/693/56 104/692/55 +f 102/696/59 143/697/60 142/695/58 103/694/57 +f 100/698/61 145/699/62 144/700/63 101/701/64 +f 101/701/64 144/700/63 143/697/60 102/696/59 +f 99/702/65 146/703/66 145/699/62 100/698/61 +f 98/704/67 147/705/68 146/703/66 99/702/65 +f 641/706/69 642/707/70 643/708/71 644/709/72 +f 645/710/73 644/709/72 643/708/71 646/711/74 +f 647/712/75 645/710/73 646/711/74 648/713/76 +f 649/714/77 647/712/75 648/713/76 650/715/78 +f 651/716/79 649/714/77 650/715/78 652/717/80 +f 653/718/81 651/716/79 652/717/80 654/719/82 +f 653/718/81 654/719/82 655/720/83 656/721/84 +f 657/722/85 656/721/84 655/720/83 658/723/86 +f 659/724/87 657/722/85 658/723/86 660/725/88 +f 661/726/89 659/724/87 660/725/88 662/727/90 +f 661/726/89 662/727/90 663/728/91 664/729/92 +f 664/729/92 663/728/91 665/730/93 666/731/94 +f 667/732/95 668/733/96 669/734/97 670/735/98 +f 666/731/94 665/730/93 668/733/96 667/732/95 +f 670/735/98 669/734/97 671/736/99 672/737/100 +f 673/738/101 672/737/100 671/736/99 674/739/102 +f 673/738/101 674/739/102 675/740/103 676/741/104 +f 677/742/105 676/741/104 675/740/103 678/743/106 +f 677/744/105 678/745/106 679/746/107 680/747/108 +f 681/748/109 680/747/108 679/746/107 682/749/110 +f 681/748/109 682/749/110 683/750/111 684/751/112 +f 684/751/112 683/750/111 685/752/113 686/753/114 +f 686/753/114 685/752/113 687/754/115 688/755/116 +f 688/755/116 687/754/115 689/756/117 690/757/118 +f 690/757/118 689/756/117 691/758/119 692/759/120 +f 692/759/120 691/758/119 693/760/121 694/761/122 +f 695/762/123 696/763/124 697/764/125 698/765/126 +f 696/763/124 694/761/122 693/760/121 697/764/125 +f 699/766/127 700/767/128 701/768/129 702/769/130 +f 695/762/123 698/765/126 701/768/129 700/767/128 +f 703/770/131 699/766/127 702/769/130 704/771/132 +f 703/770/131 704/771/132 642/707/70 641/706/69 +f 705/772/133 665/730/93 663/728/91 706/773/134 +f 707/774/135 668/733/96 665/730/93 705/772/133 +f 708/775/136 669/734/97 668/733/96 707/774/135 +f 709/776/137 710/777/138 711/778/139 712/779/140 +f 713/780/141 714/781/142 710/777/138 709/776/137 +f 715/782/143 716/783/144 714/781/142 713/780/141 +f 717/784/145 708/785/136 718/786/146 719/787/147 +f 712/779/140 711/778/139 720/788/148 721/789/149 +f 722/790/150 723/791/151 716/783/144 715/782/143 +f 724/792/152 725/793/153 726/794/154 727/795/155 +f 728/796/156 721/789/149 720/788/148 729/797/157 +f 730/798/158 731/799/159 723/791/151 722/790/150 +f 732/800/160 724/792/152 727/795/155 733/801/161 +f 734/802/162 728/796/156 729/797/157 735/803/163 +f 189/804/164 194/805/165 193/806/166 190/807/167 +f 192/808/28 223/809/27 222/810/29 161/811/30 +f 736/812/168 726/794/154 731/799/159 730/798/158 +f 188/813/20 195/814/19 194/805/165 189/804/164 +f 737/815/169 734/802/162 735/803/163 738/816/170 +f 161/811/30 222/810/29 221/817/31 162/818/32 +f 739/819/171 727/795/155 726/794/154 736/812/168 +f 187/820/18 196/821/17 195/814/19 188/813/20 +f 740/822/172 741/823/173 742/824/174 743/825/175 +f 744/826/176 737/815/169 738/816/170 745/827/177 +f 186/828/16 197/829/15 196/821/17 187/820/18 +f 746/830/178 733/801/161 727/795/155 739/819/171 +f 184/831/12 199/832/11 198/833/13 185/834/14 +f 747/835/179 744/826/176 745/827/177 748/836/180 +f 162/818/32 221/817/31 220/837/33 163/838/34 +f 749/839/181 742/840/174 733/801/161 746/830/178 +f 183/841/8 200/842/182 199/832/11 184/831/12 +f 750/843/183 751/844/184 752/845/185 753/846/186 +f 754/847/187 755/848/188 756/849/189 757/850/190 +f 758/851/191 747/835/179 748/836/180 757/850/190 +f 163/838/34 220/837/33 219/852/35 164/853/36 +f 759/854/192 743/825/175 742/824/174 749/855/181 +f 128/644/10 149/643/9 148/856/193 97/857/194 +f 182/858/9 201/859/10 200/842/182 183/841/8 +f 760/860/195 750/843/183 753/846/186 761/861/196 +f 762/862/197 763/863/198 756/849/189 755/848/188 +f 764/864/199 758/851/191 757/850/190 756/849/189 +f 164/853/36 219/852/35 218/865/37 165/866/38 +f 765/867/200 752/845/185 743/825/175 759/854/192 +f 181/868/193 202/869/194 201/859/10 182/858/9 +f 766/870/201 764/864/199 756/849/189 763/863/198 +f 165/866/38 218/865/37 217/871/39 166/872/40 +f 767/873/202 753/846/186 752/845/185 765/867/200 +f 180/874/203 203/875/204 202/869/194 181/868/193 +f 768/876/205 766/870/201 763/863/198 769/877/206 +f 167/878/42 216/879/41 215/880/43 168/881/44 +f 767/873/202 770/882/207 761/861/196 753/846/186 +f 166/872/40 217/871/39 216/883/41 167/884/42 +f 771/885/208 772/886/209 773/887/210 774/888/211 +f 775/889/212 776/890/213 777/891/214 778/892/215 +f 779/893/216 768/876/205 769/877/206 780/894/217 +f 168/881/44 215/880/43 214/895/45 169/896/46 +f 190/807/167 193/806/166 224/897/25 191/898/26 +f 781/899/218 782/900/219 761/861/196 770/882/207 +f 179/901/66 204/902/220 203/875/204 180/874/203 +f 783/903/221 771/885/208 774/888/211 784/904/222 +f 777/891/214 776/890/213 783/903/221 784/904/222 +f 785/905/223 779/893/216 780/894/217 786/906/224 +f 169/896/46 214/895/45 213/907/47 170/908/48 +f 781/899/218 787/909/225 773/887/210 782/900/219 +f 178/910/226 205/911/227 204/902/220 179/901/66 +f 788/912/228 785/905/223 786/906/224 778/892/215 +f 170/908/48 213/913/47 212/914/52 171/915/51 +f 787/909/225 789/916/229 774/888/211 773/887/210 +f 177/917/230 206/918/231 205/911/227 178/910/226 +f 185/834/14 198/833/13 197/829/15 186/828/16 +f 790/919/232 788/912/228 778/892/215 777/891/214 +f 171/915/51 212/914/52 211/920/49 172/921/50 +f 789/916/229 791/922/233 784/904/222 774/888/211 +f 176/923/60 207/924/59 206/918/231 177/917/230 +f 791/922/233 790/919/232 777/891/214 784/904/222 +f 191/898/26 224/897/25 223/809/27 192/808/28 +f 175/925/58 208/926/57 207/924/59 176/923/60 +f 172/921/50 211/920/49 210/927/53 173/928/54 +f 174/929/56 209/930/55 208/926/57 175/925/58 +f 173/928/54 210/927/53 209/930/55 174/929/56 +f 1/931/234 792/932/235 793/933/236 2/934/237 +f 6/935/238 794/936/239 792/932/235 1/931/234 +f 2/934/237 793/933/236 795/937/240 3/938/241 +f 3/938/241 795/937/240 796/939/242 4/940/243 +f 4/941/243 796/942/242 797/943/244 5/944/245 +f 5/944/245 797/943/244 794/936/239 6/935/238 +f 7/945/246 798/946/242 799/947/247 8/948/248 +f 12/949/249 800/950/250 798/946/242 7/945/246 +f 8/948/248 799/947/247 801/951/251 9/952/252 +f 9/952/252 801/951/251 802/953/235 10/954/253 +f 10/955/253 802/956/235 803/957/239 11/958/254 +f 11/958/254 803/957/239 800/950/250 12/949/249 +f 13/959/255 804/960/256 805/961/257 14/962/258 +f 18/963/259 806/964/260 804/960/256 13/959/255 +f 14/962/258 805/961/257 807/965/261 15/966/262 +f 15/966/262 807/965/261 808/967/263 16/968/264 +f 16/969/264 808/970/263 809/971/265 17/972/266 +f 17/972/266 809/971/265 806/964/260 18/963/259 +f 19/973/267 810/974/263 811/975/261 20/976/268 +f 24/977/269 812/978/265 810/974/263 19/973/267 +f 20/976/268 811/975/261 813/979/257 21/980/270 +f 21/980/270 813/979/257 814/981/271 22/982/272 +f 22/983/272 814/984/271 815/985/273 23/986/274 +f 23/986/274 815/985/273 812/978/265 24/977/269 +f 25/987/275 816/988/276 817/989/277 26/990/278 +f 30/991/279 818/992/280 816/988/276 25/987/275 +f 26/990/278 817/989/277 819/993/281 27/994/282 +f 27/994/282 819/993/281 820/995/283 28/996/284 +f 28/997/284 820/998/283 821/999/285 29/1000/286 +f 29/1000/286 821/999/285 818/992/280 30/991/279 +f 31/1001/287 822/1002/283 823/1003/288 32/1004/289 +f 36/1005/290 824/1006/291 822/1002/283 31/1001/287 +f 32/1004/289 823/1003/288 825/1007/292 33/1008/293 +f 33/1008/293 825/1007/292 826/1009/276 34/1010/294 +f 34/1011/294 826/1012/276 827/1013/295 35/1014/296 +f 35/1014/296 827/1013/295 824/1006/291 36/1005/290 +f 37/1015/297 828/1016/298 829/1017/299 38/1018/300 +f 42/1019/301 830/1020/302 828/1016/298 37/1015/297 +f 38/1018/300 829/1017/299 831/1021/303 39/1022/304 +f 39/1022/304 831/1021/303 832/1023/305 40/1024/306 +f 40/1025/306 832/1026/305 833/1027/307 41/1028/308 +f 41/1028/308 833/1027/307 830/1020/302 42/1019/301 +f 43/1029/309 834/1030/305 835/1031/303 44/1032/310 +f 48/1033/311 836/1034/312 834/1030/305 43/1029/309 +f 44/1032/310 835/1031/303 837/1035/299 45/1036/313 +f 45/1036/313 837/1035/299 838/1037/298 46/1038/314 +f 46/1039/314 838/1040/298 839/1041/315 47/1042/316 +f 47/1042/316 839/1041/315 836/1034/312 48/1033/311 +f 49/1043/243 840/1044/242 841/1045/250 50/1046/245 +f 54/1047/241 842/1048/247 840/1044/242 49/1043/243 +f 50/1046/245 841/1045/250 843/1049/317 51/1050/238 +f 51/1050/238 843/1049/317 844/1051/235 52/1052/234 +f 52/1053/234 844/1054/235 845/1055/251 53/1056/237 +f 53/1056/237 845/1055/251 842/1048/247 54/1047/241 +f 55/1057/253 846/1058/235 847/1059/239 56/1060/254 +f 60/1061/252 848/1062/251 846/1058/235 55/1057/253 +f 56/1060/254 847/1059/239 849/1063/244 57/1064/249 +f 57/1064/249 849/1063/244 850/1065/242 58/1066/318 +f 58/1067/318 850/1068/242 851/1069/247 59/1070/248 +f 59/1070/248 851/1069/247 848/1062/251 60/1061/252 +f 61/1071/264 852/1072/263 853/1073/265 62/1074/319 +f 66/1075/262 854/1076/320 852/1072/263 61/1071/264 +f 62/1074/319 853/1073/265 855/1077/273 63/1078/321 +f 63/1078/321 855/1077/273 856/1079/271 64/1080/255 +f 64/1081/255 856/1082/271 857/1083/322 65/1084/323 +f 65/1084/323 857/1083/322 854/1076/320 66/1075/262 +f 67/1085/324 858/1086/271 859/1087/325 68/1088/326 +f 72/1089/270 860/1090/257 858/1086/271 67/1085/324 +f 68/1088/326 859/1087/325 861/1091/327 69/1092/269 +f 69/1092/269 861/1091/327 862/1093/263 70/1094/328 +f 70/1095/328 862/1096/263 863/1097/261 71/1098/329 +f 71/1098/329 863/1097/261 860/1090/257 72/1089/270 +f 73/1099/284 864/1100/283 865/1101/291 74/1102/286 +f 78/1103/330 866/1104/288 864/1100/283 73/1099/284 +f 74/1102/286 865/1101/291 867/1105/295 75/1106/331 +f 75/1106/331 867/1105/295 868/1107/276 76/1108/275 +f 76/1109/275 868/1110/276 869/1111/292 77/1112/278 +f 77/1112/278 869/1111/292 866/1104/288 78/1103/330 +f 79/1113/294 870/1114/276 871/1115/280 80/1116/296 +f 84/1117/332 872/1118/292 870/1114/276 79/1113/294 +f 80/1116/296 871/1115/280 873/1119/285 81/1120/290 +f 81/1120/290 873/1119/285 874/1121/283 82/1122/333 +f 82/1123/333 874/1124/283 875/1125/288 83/1126/334 +f 83/1126/334 875/1125/288 872/1118/292 84/1117/332 +f 85/1127/306 876/1128/305 877/1129/312 86/1130/335 +f 90/1131/304 878/1132/336 876/1128/305 85/1127/306 +f 86/1130/335 877/1129/312 879/1133/315 87/1134/301 +f 87/1134/301 879/1133/315 880/1135/298 88/1136/297 +f 88/1137/297 880/1138/298 881/1139/337 89/1140/338 +f 89/1140/338 881/1139/337 878/1132/336 90/1131/304 +f 91/1141/339 882/1142/298 883/1143/315 92/1144/340 +f 96/1145/313 884/1146/299 882/1142/298 91/1141/339 +f 92/1144/340 883/1143/315 885/1147/312 93/1148/311 +f 93/1148/311 885/1147/312 886/1149/305 94/1150/341 +f 94/1151/341 886/1152/305 887/1153/303 95/1154/342 +f 95/1154/342 887/1153/303 884/1146/299 96/1145/313 +f 723/791/151 888/1155/343 889/1156/344 716/783/144 +f 731/799/159 890/1157/345 888/1155/343 723/791/151 +f 708/775/136 717/1158/145 671/736/99 669/734/97 +f 654/719/82 735/803/163 729/797/157 655/720/83 +f 891/1159/346 706/773/134 663/728/91 662/727/90 710/777/138 714/781/142 +f 892/1160/347 893/1161/348 780/894/217 769/877/206 +f 643/708/71 642/707/70 894/1162/349 895/1163/350 +f 762/862/197 892/1160/347 769/877/206 763/863/198 +f 711/778/139 660/725/88 658/723/86 720/788/148 +f 652/717/80 650/715/78 745/827/177 738/816/170 +f 704/771/132 896/1164/351 894/1162/349 642/707/70 +f 646/711/74 643/708/71 895/1163/350 897/1165/352 +f 648/713/76 748/836/180 745/827/177 650/715/78 +f 97/857/194 148/856/193 147/705/68 98/704/67 +f 898/1166/353 896/1164/351 704/771/132 702/769/130 +f 662/727/90 660/725/88 711/778/139 710/777/138 +f 899/1167/354 718/786/146 708/785/136 707/1168/135 +f 716/783/144 889/1156/344 891/1159/346 714/781/142 +f 717/1158/145 900/1169/355 674/739/102 671/736/99 +f 900/1169/355 901/1170/356 675/740/103 674/739/102 +f 901/1170/356 902/1171/357 678/743/106 675/740/103 +f 902/1172/357 903/1173/358 679/746/107 678/745/106 +f 903/1173/358 904/1174/359 682/749/110 679/746/107 +f 904/1174/359 905/1175/360 683/750/111 682/749/110 +f 905/1175/360 906/1176/361 685/752/113 683/750/111 +f 906/1176/361 907/1177/362 908/1178/363 687/754/115 685/752/113 +f 908/1178/363 909/1179/364 689/756/117 687/754/115 +f 909/1179/364 910/1180/365 691/758/119 689/756/117 +f 910/1180/365 911/1181/366 693/760/121 691/758/119 +f 912/1182/367 913/1183/368 698/765/126 697/764/125 +f 911/1181/366 912/1182/367 697/764/125 693/760/121 +f 914/1184/369 898/1166/353 702/769/130 701/768/129 +f 913/1183/368 914/1184/369 701/768/129 698/765/126 +f 741/1185/173 732/800/160 733/801/161 742/840/174 +f 751/844/184 740/822/172 743/825/175 752/845/185 +f 915/1186/370 916/1187/371 760/860/195 761/861/196 782/900/219 +f 893/1161/348 917/1188/372 786/906/224 780/894/217 +f 772/886/209 915/1186/370 782/900/219 773/887/210 +f 917/1188/372 775/889/212 778/892/215 786/906/224 +f 225/1189/373 918/1190/374 919/1191/375 226/1192/376 +f 230/1193/377 920/1194/378 918/1190/374 225/1189/373 +f 226/1192/376 919/1191/375 921/1195/379 227/1196/380 +f 227/1196/380 921/1195/379 922/1197/381 228/1198/382 +f 228/1199/382 922/1200/381 923/1201/383 229/1202/384 +f 229/1202/384 923/1201/383 920/1194/378 230/1193/377 +f 231/1203/385 924/1204/381 925/1205/379 232/1206/386 +f 236/1207/387 926/1208/383 924/1204/381 231/1203/385 +f 232/1206/386 925/1205/379 927/1209/375 233/1210/388 +f 233/1210/388 927/1209/375 928/1211/374 234/1212/389 +f 234/1213/389 928/1214/374 929/1215/378 235/1216/390 +f 235/1216/390 929/1215/378 926/1208/383 236/1207/387 +f 237/1217/391 930/1218/4 931/1219/392 238/1220/393 +f 242/1221/394 932/1222/395 930/1218/4 237/1217/391 +f 238/1220/393 931/1219/392 933/1223/396 239/1224/397 +f 239/1224/397 933/1223/396 934/1225/3 240/1226/398 +f 240/1227/398 934/1228/3 935/1229/399 241/1230/400 +f 241/1230/400 935/1229/399 932/1222/395 242/1221/394 +f 243/1231/401 936/1232/3 937/1233/396 244/1234/402 +f 248/1235/403 938/1236/399 936/1232/3 243/1231/401 +f 244/1234/402 937/1233/396 939/1237/392 245/1238/404 +f 245/1238/404 939/1237/392 940/1239/4 246/1240/405 +f 246/1241/405 940/1242/4 941/1243/395 247/1244/406 +f 247/1244/406 941/1243/395 938/1236/399 248/1235/403 +f 249/1245/407 942/1246/408 943/1247/409 250/1248/410 +f 254/1249/411 944/1250/412 942/1246/408 249/1245/407 +f 250/1248/410 943/1247/409 945/1251/413 251/1252/414 +f 251/1252/414 945/1251/413 946/1253/415 252/1254/416 +f 252/1255/416 946/1256/415 947/1257/417 253/1258/418 +f 253/1258/418 947/1257/417 944/1250/412 254/1249/411 +f 255/1259/419 948/1260/415 949/1261/413 256/1262/420 +f 260/1263/421 950/1264/417 948/1260/415 255/1259/419 +f 256/1262/420 949/1261/413 951/1265/409 257/1266/422 +f 257/1266/422 951/1265/409 952/1267/408 258/1268/423 +f 258/1269/423 952/1270/408 953/1271/412 259/1272/424 +f 259/1272/424 953/1271/412 950/1264/417 260/1263/421 +f 261/1273/425 954/1274/5 955/1275/426 262/1276/427 +f 266/1277/428 956/1278/429 954/1274/5 261/1273/425 +f 262/1276/427 955/1275/426 957/1279/430 263/1280/431 +f 263/1280/431 957/1279/430 958/1281/6 264/1282/432 +f 264/1283/432 958/1284/6 959/1285/433 265/1286/434 +f 265/1286/434 959/1285/433 956/1278/429 266/1277/428 +f 267/1287/435 960/1288/6 961/1289/430 268/1290/436 +f 272/1291/437 962/1292/433 960/1288/6 267/1287/435 +f 268/1290/436 961/1289/430 963/1293/426 269/1294/438 +f 269/1294/438 963/1293/426 964/1295/5 270/1296/439 +f 270/1297/439 964/1298/5 965/1299/429 271/1300/440 +f 271/1300/440 965/1299/429 962/1292/433 272/1291/437 +f 273/1301/382 966/1302/381 967/1303/383 274/1304/384 +f 278/1305/380 968/1306/379 966/1302/381 273/1301/382 +f 274/1304/384 967/1303/383 969/1307/378 275/1308/377 +f 275/1308/377 969/1307/378 970/1309/374 276/1310/373 +f 276/1311/373 970/1312/374 971/1313/375 277/1314/376 +f 277/1314/376 971/1313/375 968/1306/379 278/1305/380 +f 279/1315/389 972/1316/374 973/1317/378 280/1318/390 +f 284/1319/388 974/1320/375 972/1316/374 279/1315/389 +f 280/1318/390 973/1317/378 975/1321/383 281/1322/387 +f 281/1322/387 975/1321/383 976/1323/381 282/1324/385 +f 282/1325/385 976/1326/381 977/1327/379 283/1328/386 +f 283/1328/386 977/1327/379 974/1320/375 284/1319/388 +f 285/1329/398 978/1330/3 979/1331/399 286/1332/400 +f 290/1333/441 980/1334/396 978/1330/3 285/1329/398 +f 286/1332/400 979/1331/399 981/1335/395 287/1336/442 +f 287/1336/442 981/1335/395 982/1337/4 288/1338/391 +f 288/1339/391 982/1340/4 983/1341/392 289/1342/393 +f 289/1342/393 983/1341/392 980/1334/396 290/1333/441 +f 291/1343/405 984/1344/4 985/1345/395 292/1346/406 +f 296/1347/443 986/1348/392 984/1344/4 291/1343/405 +f 292/1346/406 985/1345/395 987/1349/399 293/1350/444 +f 293/1350/444 987/1349/399 988/1351/3 294/1352/401 +f 294/1353/401 988/1354/3 989/1355/396 295/1356/402 +f 295/1356/402 989/1355/396 986/1348/392 296/1347/443 +f 297/1357/416 990/1358/415 991/1359/417 298/1360/418 +f 302/1361/414 992/1362/413 990/1358/415 297/1357/416 +f 298/1360/418 991/1359/417 993/1363/412 299/1364/411 +f 299/1364/411 993/1363/412 994/1365/408 300/1366/407 +f 300/1367/407 994/1368/408 995/1369/409 301/1370/410 +f 301/1370/410 995/1369/409 992/1362/413 302/1361/414 +f 303/1371/423 996/1372/408 997/1373/412 304/1374/424 +f 308/1375/422 998/1376/409 996/1372/408 303/1371/423 +f 304/1374/424 997/1373/412 999/1377/417 305/1378/421 +f 305/1378/421 999/1377/417 1000/1379/415 306/1380/419 +f 306/1381/419 1000/1382/415 1001/1383/413 307/1384/420 +f 307/1384/420 1001/1383/413 998/1376/409 308/1375/422 +f 309/1385/445 1002/1386/6 1003/1387/433 310/1388/446 +f 314/1389/447 1004/1390/430 1002/1386/6 309/1385/445 +f 310/1388/446 1003/1387/433 1005/1391/429 311/1392/448 +f 311/1392/448 1005/1391/429 1006/1393/5 312/1394/449 +f 312/1395/449 1006/1396/5 1007/1397/426 313/1398/450 +f 313/1398/450 1007/1397/426 1004/1390/430 314/1389/447 +f 315/1399/439 1008/1400/5 1009/1401/429 316/1402/440 +f 320/1403/451 1010/1404/426 1008/1400/5 315/1399/439 +f 316/1402/440 1009/1401/429 1011/1405/433 317/1406/452 +f 317/1406/452 1011/1405/433 1012/1407/6 318/1408/435 +f 318/1409/435 1012/1410/6 1013/1411/430 319/1412/436 +f 319/1412/436 1013/1411/430 1010/1404/426 320/1403/451 +f 652/717/80 738/816/170 735/803/163 654/719/82 +f 720/788/148 658/723/86 655/720/83 729/797/157 +f 648/713/76 646/711/74 897/1165/352 754/847/187 757/850/190 748/836/180 +f 399/1413/453 422/1414/454 421/1415/455 400/1416/456 +f 398/1417/457 423/1418/458 422/1414/454 399/1413/453 +f 397/1419/459 424/1420/460 423/1418/458 398/1417/457 +f 396/1421/461 425/1422/462 424/1420/460 397/1419/459 +f 395/1423/463 426/1424/464 425/1422/462 396/1421/461 +f 394/1425/465 427/1426/466 426/1424/464 395/1423/463 +f 393/1427/467 428/1428/468 427/1426/466 394/1425/465 +f 392/1429/469 429/1430/470 428/1428/468 393/1427/467 +f 391/1431/471 430/1432/472 429/1430/470 392/1429/469 +f 390/1433/473 431/1434/474 430/1432/472 391/1431/471 +f 389/1435/475 432/1436/476 431/1434/474 390/1433/473 +f 388/1437/477 401/1438/478 432/1436/476 389/1435/475 +f 387/1439/479 402/1440/480 401/1438/478 388/1437/477 +f 386/1441/481 403/1442/482 402/1443/480 387/1439/479 +f 385/1444/483 404/1445/484 403/1442/482 386/1441/481 +f 384/1446/485 405/1447/486 404/1445/484 385/1444/483 +f 383/1448/487 406/1449/488 405/1450/486 384/1451/485 +f 382/1452/489 407/1453/490 406/1449/488 383/1448/487 +f 381/1454/491 408/1455/492 407/1453/490 382/1452/489 +f 380/1456/493 409/1457/494 408/1455/492 381/1454/491 +f 378/1458/495 411/1459/496 410/1460/497 379/1461/498 +f 379/1461/498 410/1460/497 409/1457/494 380/1456/493 +f 377/1462/499 412/1463/500 411/1459/496 378/1458/495 +f 376/1464/501 413/1465/502 412/1463/500 377/1462/499 +f 375/1466/503 414/1467/504 413/1465/502 376/1464/501 +f 374/1468/505 415/1469/506 414/1467/504 375/1466/503 +f 372/1470/507 417/1471/508 416/1472/509 373/1473/510 +f 373/1473/510 416/1472/509 415/1469/506 374/1468/505 +f 371/1474/511 418/1475/512 417/1471/508 372/1470/507 +f 370/1476/513 419/1477/514 418/1475/512 371/1474/511 +f 1014/1478/515 1015/1479/516 1016/1480/517 1017/1481/518 +f 1018/1482/519 1017/1481/518 1016/1480/517 1019/1483/520 +f 1020/1484/521 1018/1482/519 1019/1483/520 1021/1485/522 +f 1022/1486/523 1020/1484/521 1021/1485/522 1023/1487/524 +f 1024/1488/525 1022/1486/523 1023/1487/524 1025/1489/526 +f 1026/1490/527 1024/1488/525 1025/1489/526 719/787/147 +f 1026/1490/527 719/787/147 718/786/146 1027/1491/528 +f 1028/1492/529 1027/1491/528 718/786/146 899/1167/354 +f 1029/1493/530 1028/1492/529 899/1167/354 1030/1494/531 +f 1031/1495/532 1029/1493/530 1030/1494/531 1032/1496/533 +f 1031/1495/532 1032/1496/533 1033/1497/534 1034/1498/535 +f 1034/1498/535 1033/1497/534 1035/1499/536 1036/1500/537 +f 1037/1501/538 1038/1502/539 1039/1503/540 1040/1504/541 +f 1036/1500/537 1035/1499/536 1038/1502/539 1037/1501/538 +f 1040/1504/541 1039/1503/540 1041/1505/542 1042/1506/543 +f 1043/1507/544 1042/1506/543 1041/1505/542 1044/1508/545 +f 1043/1507/544 1044/1508/545 1045/1509/546 1046/1510/547 +f 1047/1511/548 1046/1510/547 1045/1509/546 1048/1512/549 +f 1047/1513/548 1048/1514/549 1049/1515/550 1050/1516/551 +f 1051/1517/552 1050/1516/551 1049/1515/550 1052/1518/553 +f 1051/1517/552 1052/1518/553 1053/1519/554 1054/1520/555 +f 1054/1520/555 1053/1519/554 1055/1521/556 1056/1522/557 +f 1056/1522/557 1055/1521/556 1057/1523/558 1058/1524/559 +f 1058/1524/559 1057/1523/558 1059/1525/560 1060/1526/561 +f 1060/1526/561 1059/1525/560 1061/1527/562 1062/1528/563 +f 1062/1528/563 1061/1527/562 1063/1529/564 1064/1530/565 +f 1065/1531/566 1066/1532/567 1067/1533/568 1068/1534/569 +f 1066/1532/567 1064/1530/565 1063/1529/564 1067/1533/568 +f 1069/1535/570 1070/1536/571 1071/1537/572 1072/1538/573 +f 1065/1531/566 1068/1534/569 1071/1537/572 1070/1536/571 +f 1073/1539/574 1069/1535/570 1072/1538/573 1074/1540/575 +f 1073/1539/574 1074/1540/575 1015/1479/516 1014/1478/515 +f 400/1416/456 421/1415/455 420/1541/576 369/1542/577 +f 321/1543/578 1075/1544/579 1076/1545/580 322/1546/581 +f 326/1547/582 1077/1548/583 1075/1544/579 321/1543/578 +f 322/1546/581 1076/1545/580 1078/1549/584 323/1550/585 +f 323/1550/585 1078/1549/584 1079/1551/586 324/1552/587 +f 324/1553/587 1079/1554/586 1080/1555/588 325/1556/589 +f 325/1556/589 1080/1555/588 1077/1548/583 326/1547/582 +f 327/1557/590 1081/1558/591 1082/1559/592 328/1560/593 +f 332/1561/594 1083/1562/595 1081/1558/591 327/1557/590 +f 328/1560/593 1082/1559/592 1084/1563/596 329/1564/597 +f 329/1564/597 1084/1563/596 1085/1565/598 330/1566/599 +f 330/1567/599 1085/1568/598 1086/1569/600 331/1570/601 +f 331/1570/601 1086/1569/600 1083/1562/595 332/1561/594 +f 333/1571/602 1087/1572/603 1088/1573/604 334/1574/605 +f 338/1575/606 1089/1576/607 1087/1572/603 333/1571/602 +f 334/1574/605 1088/1573/604 1090/1577/608 335/1578/609 +f 335/1578/609 1090/1577/608 1091/1579/610 336/1580/611 +f 336/1581/611 1091/1582/610 1092/1583/612 337/1584/613 +f 337/1584/613 1092/1583/612 1089/1576/607 338/1575/606 +f 339/1585/614 1093/1586/615 1094/1587/616 340/1588/617 +f 344/1589/618 1095/1590/619 1093/1586/615 339/1585/614 +f 340/1588/617 1094/1587/616 1096/1591/620 341/1592/621 +f 341/1592/621 1096/1591/620 1097/1593/622 342/1594/623 +f 342/1595/623 1097/1596/622 1098/1597/624 343/1598/625 +f 343/1598/625 1098/1597/624 1095/1590/619 344/1589/618 +f 345/1599/587 1099/1600/586 1100/1601/588 346/1602/626 +f 350/1603/627 1101/1604/584 1099/1600/586 345/1599/587 +f 346/1602/626 1100/1601/588 1102/1605/628 347/1606/629 +f 347/1606/629 1102/1605/628 1103/1607/630 348/1608/631 +f 348/1609/631 1103/1610/630 1104/1611/580 349/1612/632 +f 349/1612/632 1104/1611/580 1101/1604/584 350/1603/627 +f 351/1613/633 1105/1614/598 1106/1615/634 352/1616/601 +f 356/1617/635 1107/1618/596 1105/1614/598 351/1613/633 +f 352/1616/601 1106/1615/634 1108/1619/636 353/1620/594 +f 353/1620/594 1108/1619/636 1109/1621/591 354/1622/590 +f 354/1623/590 1109/1624/591 1110/1625/592 355/1626/637 +f 355/1626/637 1110/1625/592 1107/1618/596 356/1617/635 +f 357/1627/611 1111/1628/610 1112/1629/612 358/1630/613 +f 362/1631/609 1113/1632/638 1111/1628/610 357/1627/611 +f 358/1630/613 1112/1629/612 1114/1633/607 359/1634/639 +f 359/1634/639 1114/1633/607 1115/1635/603 360/1636/602 +f 360/1637/602 1115/1638/603 1116/1639/640 361/1640/605 +f 361/1640/605 1116/1639/640 1113/1632/638 362/1631/609 +f 363/1641/641 1117/1642/622 1118/1643/624 364/1644/625 +f 368/1645/642 1119/1646/620 1117/1642/622 363/1641/641 +f 364/1644/625 1118/1643/624 1120/1647/619 365/1648/618 +f 365/1648/618 1120/1647/619 1121/1649/615 366/1650/614 +f 366/1651/614 1121/1652/615 1122/1653/616 367/1654/643 +f 367/1654/643 1122/1653/616 1119/1646/620 368/1645/642 +f 1032/1496/533 1030/1494/531 705/1655/133 706/1656/134 +f 888/1657/343 1038/1502/539 1035/1499/536 889/1658/344 +f 890/1659/345 1039/1503/540 1038/1502/539 888/1657/343 +f 1030/1494/531 899/1167/354 707/1168/135 705/1655/133 +f 893/1660/348 892/1661/347 1123/1662/644 1124/1663/645 +f 897/1664/352 1125/1665/646 1126/1666/647 754/1667/187 +f 891/1668/346 1033/1497/534 1032/1496/533 706/1656/134 +f 889/1658/344 1035/1499/536 1033/1497/534 891/1668/346 +f 890/1659/345 725/1669/153 1041/1505/542 1039/1503/540 +f 369/1542/577 420/1541/576 419/1477/514 370/1476/513 +f 905/1670/360 904/1671/359 1016/1480/517 1015/1479/516 +f 904/1671/359 903/1672/358 1019/1483/520 1016/1480/517 +f 903/1672/358 902/1673/357 1021/1485/522 1019/1483/520 +f 902/1673/357 901/1674/356 1023/1487/524 1021/1485/522 +f 901/1674/356 900/1675/355 1025/1489/526 1023/1487/524 +f 900/1675/355 717/784/145 719/787/147 1025/1489/526 +f 725/1669/153 724/1676/152 1044/1508/545 1041/1505/542 +f 724/1676/152 732/1677/160 1045/1509/546 1044/1508/545 +f 732/1677/160 741/1678/173 1048/1512/549 1045/1509/546 +f 741/1679/173 740/1680/172 1049/1515/550 1048/1514/549 +f 740/1680/172 751/1681/184 1052/1518/553 1049/1515/550 +f 751/1681/184 750/1682/183 1053/1519/554 1052/1518/553 +f 750/1682/183 760/1683/195 1055/1521/556 1053/1519/554 +f 760/1683/195 916/1684/371 1127/1685/648 1057/1523/558 1055/1521/556 +f 1127/1685/648 1128/1686/649 1059/1525/560 1057/1523/558 +f 1128/1686/649 1129/1687/650 1061/1527/562 1059/1525/560 +f 1129/1687/650 1130/1688/651 1063/1529/564 1061/1527/562 +f 1131/1689/652 1132/1690/653 1068/1534/569 1067/1533/568 +f 1130/1688/651 1131/1689/652 1067/1533/568 1063/1529/564 +f 1133/1691/654 1134/1692/655 1072/1538/573 1071/1537/572 +f 1132/1690/653 1133/1691/654 1071/1537/572 1068/1534/569 +f 1134/1692/655 907/1693/362 906/1694/361 1074/1540/575 1072/1538/573 +f 1074/1540/575 906/1694/361 905/1670/360 1015/1479/516 +f 433/1695/656 1135/1696/657 1136/1697/658 434/1698/659 +f 438/1699/660 1137/1700/661 1135/1696/657 433/1695/656 +f 434/1698/659 1136/1697/658 1138/1701/662 435/1702/663 +f 435/1702/663 1138/1701/662 1139/1703/664 436/1704/665 +f 436/1705/665 1139/1706/664 1140/1707/666 437/1708/667 +f 437/1708/667 1140/1707/666 1137/1700/661 438/1699/660 +f 439/1709/668 1141/1710/1 1142/1711/669 440/1712/670 +f 444/1713/671 1143/1714/672 1141/1710/1 439/1709/668 +f 440/1712/670 1142/1711/669 1144/1715/673 441/1716/674 +f 441/1716/674 1144/1715/673 1145/1717/2 442/1718/675 +f 442/1719/675 1145/1720/2 1146/1721/676 443/1722/677 +f 443/1722/677 1146/1721/676 1143/1714/672 444/1713/671 +f 445/1723/678 1147/1724/679 1148/1725/680 446/1726/681 +f 450/1727/682 1149/1728/683 1147/1724/679 445/1723/678 +f 446/1726/681 1148/1725/680 1150/1729/684 447/1730/685 +f 447/1730/685 1150/1729/684 1151/1731/686 448/1732/687 +f 448/1733/687 1151/1734/686 1152/1735/688 449/1736/689 +f 449/1736/689 1152/1735/688 1149/1728/683 450/1727/682 +f 451/1737/690 1153/1738/6 1154/1739/691 452/1740/692 +f 456/1741/693 1155/1742/694 1153/1738/6 451/1737/690 +f 452/1740/692 1154/1739/691 1156/1743/695 453/1744/696 +f 453/1744/696 1156/1743/695 1157/1745/5 454/1746/697 +f 454/1747/697 1157/1748/5 1158/1749/698 455/1750/699 +f 455/1750/699 1158/1749/698 1155/1742/694 456/1741/693 +f 457/1751/665 1159/1752/664 1160/1753/666 458/1754/667 +f 462/1755/663 1161/1756/662 1159/1752/664 457/1751/665 +f 458/1754/667 1160/1753/666 1162/1757/661 459/1758/660 +f 459/1758/660 1162/1757/661 1163/1759/657 460/1760/656 +f 460/1761/656 1163/1762/657 1164/1763/658 461/1764/659 +f 461/1764/659 1164/1763/658 1161/1756/662 462/1755/663 +f 463/1765/675 1165/1766/2 1166/1767/676 464/1768/677 +f 468/1769/674 1167/1770/673 1165/1766/2 463/1765/675 +f 464/1768/677 1166/1767/676 1168/1771/672 465/1772/671 +f 465/1772/671 1168/1771/672 1169/1773/1 466/1774/668 +f 466/1775/668 1169/1776/1 1170/1777/669 467/1778/670 +f 467/1778/670 1170/1777/669 1167/1770/673 468/1769/674 +f 469/1779/687 1171/1780/686 1172/1781/688 470/1782/689 +f 474/1783/685 1173/1784/684 1171/1780/686 469/1779/687 +f 470/1782/689 1172/1781/688 1174/1785/683 471/1786/682 +f 471/1786/682 1174/1785/683 1175/1787/679 472/1788/678 +f 472/1789/678 1175/1790/679 1176/1791/680 473/1792/681 +f 473/1792/681 1176/1791/680 1173/1784/684 474/1783/685 +f 475/1793/697 1177/1794/5 1178/1795/698 476/1796/700 +f 480/1797/701 1179/1798/695 1177/1794/5 475/1793/697 +f 476/1796/700 1178/1795/698 1180/1799/694 477/1800/702 +f 477/1800/702 1180/1799/694 1181/1801/6 478/1802/703 +f 478/1803/703 1181/1804/6 1182/1805/691 479/1806/692 +f 479/1806/692 1182/1805/691 1179/1798/695 480/1797/701 +f 559/1807/704 582/1808/705 581/1809/706 560/1810/707 +f 558/1811/708 583/1812/709 582/1808/705 559/1807/704 +f 557/1813/710 584/1814/711 583/1812/709 558/1811/708 +f 556/1815/712 585/1816/713 584/1814/711 557/1813/710 +f 555/1817/714 586/1818/715 585/1816/713 556/1815/712 +f 554/1819/716 587/1820/717 586/1818/715 555/1817/714 +f 553/1821/718 588/1822/719 587/1820/717 554/1819/716 +f 552/1823/720 589/1824/721 588/1822/719 553/1821/718 +f 551/1825/722 590/1826/723 589/1824/721 552/1823/720 +f 550/1827/724 591/1828/725 590/1826/723 551/1825/722 +f 549/1829/726 592/1830/727 591/1828/725 550/1827/724 +f 548/1831/728 561/1832/729 592/1830/727 549/1829/726 +f 547/1833/730 562/1834/731 561/1832/729 548/1831/728 +f 546/1835/732 563/1836/733 562/1837/731 547/1833/730 +f 545/1838/734 564/1839/735 563/1836/733 546/1835/732 +f 544/1840/736 565/1841/737 564/1839/735 545/1838/734 +f 543/1842/738 566/1843/739 565/1844/737 544/1845/736 +f 542/1846/740 567/1847/741 566/1843/739 543/1842/738 +f 541/1848/742 568/1849/743 567/1847/741 542/1846/740 +f 540/1850/744 569/1851/745 568/1849/743 541/1848/742 +f 538/1852/746 571/1853/747 570/1854/748 539/1855/749 +f 539/1855/749 570/1854/748 569/1851/745 540/1850/744 +f 537/1856/750 572/1857/751 571/1853/747 538/1852/746 +f 536/1858/752 573/1859/753 572/1857/751 537/1856/750 +f 535/1860/754 574/1861/755 573/1859/753 536/1858/752 +f 534/1862/756 575/1863/757 574/1861/755 535/1860/754 +f 532/1864/758 577/1865/759 576/1866/760 533/1867/761 +f 533/1867/761 576/1866/760 575/1863/757 534/1862/756 +f 531/1868/762 578/1869/763 577/1865/759 532/1864/758 +f 530/1870/764 579/1871/765 578/1869/763 531/1868/762 +f 1183/1872/766 1184/1873/767 1185/1874/768 1186/1875/769 +f 1187/1876/770 1186/1875/769 1185/1874/768 1188/1877/771 +f 1189/1878/772 1187/1876/770 1188/1877/771 1190/1879/773 +f 1191/1880/774 1189/1878/772 1190/1879/773 1192/1881/775 +f 1193/1882/776 1191/1880/774 1192/1881/775 1194/1883/777 +f 1195/1884/778 1193/1882/776 1194/1883/777 1196/1885/779 +f 1195/1884/778 1196/1885/779 1197/1886/780 1198/1887/781 +f 1199/1888/782 1198/1887/781 1197/1886/780 1200/1889/783 +f 1201/1890/784 1199/1888/782 1200/1889/783 1202/1891/785 +f 1203/1892/786 1201/1890/784 1202/1891/785 1204/1893/787 +f 1203/1892/786 1204/1893/787 1205/1894/788 1206/1895/789 +f 1206/1895/789 1205/1894/788 1207/1896/790 1208/1897/791 +f 1209/1898/792 1210/1899/793 1211/1900/794 1212/1901/795 +f 1208/1897/791 1207/1896/790 1210/1899/793 1209/1898/792 +f 1212/1901/795 1211/1900/794 1213/1902/796 1214/1903/797 +f 1215/1904/798 1214/1903/797 1213/1902/796 1216/1905/799 +f 1215/1904/798 1216/1905/799 1217/1906/800 1218/1907/801 +f 1219/1908/802 1218/1907/801 1217/1906/800 1220/1909/803 +f 1219/1910/802 1220/1911/803 1221/1912/804 1222/1913/805 +f 1223/1914/806 1222/1913/805 1221/1912/804 1224/1915/807 +f 1223/1914/806 1224/1915/807 1225/1916/808 1226/1917/809 +f 1226/1917/809 1225/1916/808 1124/1663/645 1227/1918/810 +f 1227/1918/810 1124/1663/645 1123/1662/644 1228/1919/811 +f 1228/1919/811 1123/1662/644 1229/1920/812 1230/1921/813 +f 1230/1921/813 1229/1920/812 1231/1922/814 1232/1923/815 +f 1232/1923/815 1231/1922/814 1126/1666/647 1233/1924/816 +f 1234/1925/817 1235/1926/818 1125/1665/646 1236/1927/819 +f 1235/1926/818 1233/1924/816 1126/1666/647 1125/1665/646 +f 1237/1928/820 1238/1929/821 1239/1930/822 1240/1931/823 +f 1234/1925/817 1236/1927/819 1239/1930/822 1238/1929/821 +f 1241/1932/824 1237/1928/820 1240/1931/823 1242/1933/825 +f 1241/1932/824 1242/1933/825 1184/1873/767 1183/1872/766 +f 560/1810/707 581/1809/706 580/1934/826 529/1935/827 +f 481/1936/828 1243/1937/829 1244/1938/830 482/1939/831 +f 486/1940/832 1245/1941/833 1243/1937/829 481/1936/828 +f 482/1939/831 1244/1938/830 1246/1942/834 483/1943/835 +f 483/1943/835 1246/1942/834 1247/1944/836 484/1945/837 +f 484/1946/837 1247/1947/836 1248/1948/838 485/1949/839 +f 485/1949/839 1248/1948/838 1245/1941/833 486/1940/832 +f 487/1950/840 1249/1951/841 1250/1952/842 488/1953/843 +f 492/1954/844 1251/1955/845 1249/1951/841 487/1950/840 +f 488/1953/843 1250/1952/842 1252/1956/846 489/1957/847 +f 489/1957/847 1252/1956/846 1253/1958/848 490/1959/849 +f 490/1960/849 1253/1961/848 1254/1962/850 491/1963/851 +f 491/1963/851 1254/1962/850 1251/1955/845 492/1954/844 +f 493/1964/852 1255/1965/853 1256/1966/854 494/1967/855 +f 498/1968/856 1257/1969/857 1255/1965/853 493/1964/852 +f 494/1967/855 1256/1966/854 1258/1970/858 495/1971/859 +f 495/1971/859 1258/1970/858 1259/1972/860 496/1973/861 +f 496/1974/861 1259/1975/860 1260/1976/862 497/1977/863 +f 497/1977/863 1260/1976/862 1257/1969/857 498/1968/856 +f 499/1978/864 1261/1979/865 1262/1980/866 500/1981/867 +f 504/1982/868 1263/1983/869 1261/1979/865 499/1978/864 +f 500/1981/867 1262/1980/866 1264/1984/870 501/1985/871 +f 501/1985/871 1264/1984/870 1265/1986/872 502/1987/873 +f 502/1988/873 1265/1989/872 1266/1990/874 503/1991/875 +f 503/1991/875 1266/1990/874 1263/1983/869 504/1982/868 +f 505/1992/876 1267/1993/836 1268/1994/838 506/1995/877 +f 510/1996/878 1269/1997/834 1267/1993/836 505/1992/876 +f 506/1995/877 1268/1994/838 1270/1998/879 507/1999/832 +f 507/1999/832 1270/1998/879 1271/2000/880 508/2001/881 +f 508/2002/881 1271/2003/880 1272/2004/830 509/2005/882 +f 509/2005/882 1272/2004/830 1269/1997/834 510/1996/878 +f 511/2006/883 1273/2007/848 1274/2008/884 512/2009/885 +f 516/2010/886 1275/2011/846 1273/2007/848 511/2006/883 +f 512/2009/885 1274/2008/884 1276/2012/887 513/2013/844 +f 513/2013/844 1276/2012/887 1277/2014/841 514/2015/888 +f 514/2016/888 1277/2017/841 1278/2018/842 515/2019/889 +f 515/2019/889 1278/2018/842 1275/2011/846 516/2010/886 +f 517/2020/890 1279/2021/860 1280/2022/862 518/2023/863 +f 522/2024/859 1281/2025/891 1279/2021/860 517/2020/890 +f 518/2023/863 1280/2022/862 1282/2026/857 519/2027/892 +f 519/2027/892 1282/2026/857 1283/2028/853 520/2029/893 +f 520/2030/893 1283/2031/853 1284/2032/894 521/2033/855 +f 521/2033/855 1284/2032/894 1281/2025/891 522/2024/859 +f 523/2034/895 1285/2035/872 1286/2036/874 524/2037/896 +f 528/2038/897 1287/2039/870 1285/2035/872 523/2034/895 +f 524/2037/896 1286/2036/874 1288/2040/869 525/2041/898 +f 525/2041/898 1288/2040/869 1289/2042/865 526/2043/864 +f 526/2044/864 1289/2045/865 1290/2046/866 527/2047/899 +f 527/2047/899 1290/2046/866 1287/2039/870 528/2038/897 +f 898/2048/353 1242/1933/825 1240/1931/823 896/2049/351 +f 1126/1666/647 1231/1922/814 755/2050/188 754/1667/187 +f 1229/1920/812 1123/1662/644 892/1661/347 762/2051/197 +f 895/2052/350 1236/1927/819 1125/1665/646 897/1664/352 +f 1239/1930/822 1236/1927/819 895/2052/350 894/2053/349 +f 896/2049/351 1240/1931/823 1239/1930/822 894/2053/349 +f 1231/1922/814 1229/1920/812 762/2051/197 755/2050/188 +f 890/1157/345 731/799/159 726/794/154 725/793/153 +f 529/1935/827 580/1934/826 579/1871/765 530/1870/764 +f 914/2054/369 913/2055/368 1185/1874/768 1184/1873/767 +f 913/2055/368 912/2056/367 1188/1877/771 1185/1874/768 +f 912/2056/367 911/2057/366 1190/1879/773 1188/1877/771 +f 911/2057/366 910/2058/365 1192/1881/775 1190/1879/773 +f 910/2058/365 909/2059/364 1194/1883/777 1192/1881/775 +f 909/2059/364 908/2060/363 1196/1885/779 1194/1883/777 +f 908/2060/363 907/2061/362 1134/2062/655 1197/1886/780 1196/1885/779 +f 1134/2062/655 1133/2063/654 1200/1889/783 1197/1886/780 +f 1133/2063/654 1132/2064/653 1202/1891/785 1200/1889/783 +f 1132/2064/653 1131/2065/652 1204/1893/787 1202/1891/785 +f 1131/2065/652 1130/2066/651 1205/1894/788 1204/1893/787 +f 1130/2066/651 1129/2067/650 1207/1896/790 1205/1894/788 +f 1128/2068/649 1127/2069/648 1211/1900/794 1210/1899/793 +f 1129/2067/650 1128/2068/649 1210/1899/793 1207/1896/790 +f 1127/2069/648 916/2070/371 915/2071/370 1213/1902/796 1211/1900/794 +f 915/2071/370 772/2072/209 1216/1905/799 1213/1902/796 +f 772/2072/209 771/2073/208 1217/1906/800 1216/1905/799 +f 771/2073/208 783/2074/221 1220/1909/803 1217/1906/800 +f 783/2075/221 776/2076/213 1221/1912/804 1220/1911/803 +f 776/2076/213 775/2077/212 1224/1915/807 1221/1912/804 +f 775/2077/212 917/2078/372 1225/1916/808 1224/1915/807 +f 917/2078/372 893/1660/348 1124/1663/645 1225/1916/808 +f 1242/1933/825 898/2048/353 914/2054/369 1184/1873/767 +f 593/2079/900 1291/2080/901 1292/2081/902 594/2082/903 +f 598/2083/904 1293/2084/905 1291/2080/901 593/2079/900 +f 594/2082/903 1292/2081/902 1294/2085/906 595/2086/907 +f 595/2086/907 1294/2085/906 1295/2087/908 596/2088/909 +f 596/2089/909 1295/2090/908 1296/2091/910 597/2092/911 +f 597/2092/911 1296/2091/910 1293/2084/905 598/2083/904 +f 599/2093/912 1297/2094/1 1298/2095/913 600/2096/914 +f 604/2097/915 1299/2098/916 1297/2094/1 599/2093/912 +f 600/2096/914 1298/2095/913 1300/2099/917 601/2100/918 +f 601/2100/918 1300/2099/917 1301/2101/2 602/2102/919 +f 602/2103/919 1301/2104/2 1302/2105/920 603/2106/921 +f 603/2106/921 1302/2105/920 1299/2098/916 604/2097/915 +f 605/2107/922 1303/2108/923 1304/2109/924 606/2110/925 +f 610/2111/926 1305/2112/927 1303/2108/923 605/2107/922 +f 606/2110/925 1304/2109/924 1306/2113/928 607/2114/929 +f 607/2114/929 1306/2113/928 1307/2115/930 608/2116/931 +f 608/2117/931 1307/2118/930 1308/2119/932 609/2120/933 +f 609/2120/933 1308/2119/932 1305/2112/927 610/2111/926 +f 611/2121/934 1309/2122/3 1310/2123/935 612/2124/936 +f 616/2125/937 1311/2126/938 1309/2122/3 611/2121/934 +f 612/2124/936 1310/2123/935 1312/2127/939 613/2128/940 +f 613/2128/940 1312/2127/939 1313/2129/4 614/2130/941 +f 614/2131/941 1313/2132/4 1314/2133/942 615/2134/943 +f 615/2134/943 1314/2133/942 1311/2126/938 616/2125/937 +f 617/2135/909 1315/2136/908 1316/2137/910 618/2138/911 +f 622/2139/907 1317/2140/906 1315/2136/908 617/2135/909 +f 618/2138/911 1316/2137/910 1318/2141/905 619/2142/904 +f 619/2142/904 1318/2141/905 1319/2143/901 620/2144/900 +f 620/2145/900 1319/2146/901 1320/2147/902 621/2148/903 +f 621/2148/903 1320/2147/902 1317/2140/906 622/2139/907 +f 623/2149/919 1321/2150/2 1322/2151/920 624/2152/921 +f 628/2153/918 1323/2154/917 1321/2150/2 623/2149/919 +f 624/2152/921 1322/2151/920 1324/2155/916 625/2156/915 +f 625/2156/915 1324/2155/916 1325/2157/1 626/2158/912 +f 626/2159/912 1325/2160/1 1326/2161/913 627/2162/914 +f 627/2162/914 1326/2161/913 1323/2154/917 628/2153/918 +f 629/2163/931 1327/2164/930 1328/2165/932 630/2166/933 +f 634/2167/929 1329/2168/928 1327/2164/930 629/2163/931 +f 630/2166/933 1328/2165/932 1330/2169/927 631/2170/926 +f 631/2170/926 1330/2169/927 1331/2171/923 632/2172/922 +f 632/2173/922 1331/2174/923 1332/2175/924 633/2176/925 +f 633/2176/925 1332/2175/924 1329/2168/928 634/2167/929 +f 635/2177/944 1333/2178/4 1334/2179/942 636/2180/945 +f 640/2181/946 1335/2182/939 1333/2178/4 635/2177/944 +f 636/2180/945 1334/2179/942 1336/2183/938 637/2184/947 +f 637/2184/947 1336/2183/938 1337/2185/3 638/2186/948 +f 638/2187/948 1337/2188/3 1338/2189/935 639/2190/949 +f 639/2190/949 1338/2189/935 1335/2182/939 640/2181/946 diff --git a/mods/pipeworks/models/pipeworks_pipe_7_lowpoly.obj b/mods/pipeworks/models/pipeworks_pipe_7_lowpoly.obj new file mode 100755 index 0000000..4b2dd4c --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_7_lowpoly.obj @@ -0,0 +1,535 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend' +# www.blender.org +o Cylinder.002_Cylinder.006_None.002 +v -0.468750 -0.156250 -0.064721 +v -0.468750 -0.064721 -0.156250 +v -0.468750 0.064721 -0.156250 +v -0.468750 0.156250 -0.064721 +v -0.468750 0.156250 0.064721 +v -0.468750 0.064721 0.156250 +v -0.468750 -0.064721 0.156250 +v -0.468750 -0.156250 0.064721 +v -0.500000 -0.064721 -0.156250 +v -0.500000 -0.156250 -0.064721 +v -0.500000 -0.156250 0.064721 +v -0.500000 -0.064721 0.156250 +v -0.500000 0.064721 0.156250 +v -0.500000 0.156250 0.064721 +v -0.500000 0.156250 -0.064721 +v -0.500000 0.064721 -0.156250 +v 0.500000 -0.156250 -0.064721 +v 0.500000 -0.064721 -0.156250 +v 0.500000 0.064721 -0.156250 +v 0.500000 0.156250 -0.064721 +v 0.500000 0.156250 0.064721 +v 0.500000 0.064721 0.156250 +v 0.500000 -0.064721 0.156250 +v 0.500000 -0.156250 0.064721 +v 0.468750 -0.064721 -0.156250 +v 0.468750 -0.156250 -0.064721 +v 0.468750 -0.156250 0.064721 +v 0.468750 -0.064721 0.156250 +v 0.468750 0.064721 0.156250 +v 0.468750 0.156250 0.064721 +v 0.468750 0.156250 -0.064721 +v 0.468750 0.064721 -0.156250 +v 0.064721 -0.156250 -0.468750 +v 0.156250 -0.064721 -0.468750 +v 0.156250 0.064721 -0.468750 +v 0.064721 0.156250 -0.468750 +v -0.064721 0.156250 -0.468750 +v -0.156250 0.064721 -0.468750 +v -0.156250 -0.064721 -0.468750 +v -0.064721 -0.156250 -0.468750 +v 0.156250 -0.064721 -0.500000 +v 0.064721 -0.156250 -0.500000 +v -0.064721 -0.156250 -0.500000 +v -0.156250 -0.064721 -0.500000 +v -0.156250 0.064721 -0.500000 +v -0.064721 0.156250 -0.500000 +v 0.064721 0.156250 -0.500000 +v 0.156250 0.064721 -0.500000 +v 0.064721 -0.468750 0.156250 +v 0.156250 -0.468750 0.064721 +v 0.156250 -0.468750 -0.064721 +v 0.064721 -0.468750 -0.156250 +v -0.064721 -0.468750 -0.156250 +v -0.156250 -0.468750 -0.064721 +v -0.156250 -0.468750 0.064721 +v -0.064721 -0.468750 0.156250 +v 0.156250 -0.500000 0.064721 +v 0.064721 -0.500000 0.156250 +v -0.064721 -0.500000 0.156250 +v -0.156250 -0.500000 0.064721 +v -0.156250 -0.500000 -0.064721 +v -0.064721 -0.500000 -0.156250 +v 0.064721 -0.500000 -0.156250 +v 0.156250 -0.500000 -0.064721 +v -0.468750 -0.051777 -0.125000 +v -0.468750 -0.125000 -0.051777 +v -0.468750 -0.125000 0.051777 +v -0.468750 -0.051777 0.125000 +v -0.468750 0.051777 0.125000 +v -0.468750 0.125000 0.051777 +v -0.468750 0.125000 -0.051777 +v -0.468750 0.051777 -0.125000 +v 0.468750 -0.125000 -0.051777 +v 0.468750 -0.051777 -0.125000 +v 0.468750 0.051777 -0.125000 +v 0.468750 0.125000 -0.051777 +v 0.468750 0.125000 0.051777 +v 0.468750 0.051777 0.125000 +v 0.468750 -0.051777 0.125000 +v 0.468750 -0.125000 0.051777 +v -0.051777 0.125000 -0.468750 +v -0.051777 0.125000 -0.051777 +v 0.051777 0.125000 -0.051777 +v 0.051777 0.125000 -0.468750 +v -0.051777 -0.468750 0.125000 +v -0.051777 -0.051777 0.125000 +v -0.125000 -0.125000 0.051777 +v -0.125000 -0.468750 0.051777 +v 0.051777 -0.468750 0.125000 +v 0.125000 -0.468750 0.051777 +v 0.125000 -0.125000 0.051777 +v 0.051777 -0.051777 0.125000 +v 0.125000 0.051777 -0.125000 +v 0.125000 -0.125000 -0.051777 +v 0.088388 -0.088388 -0.088388 +v 0.125000 -0.051777 -0.125000 +v 0.125000 0.051777 -0.468750 +v -0.125000 0.051777 -0.125000 +v -0.125000 -0.051777 -0.125000 +v -0.088388 -0.088388 -0.088388 +v -0.125000 -0.125000 -0.051777 +v 0.125000 -0.051777 -0.468750 +v 0.051777 -0.125000 -0.468750 +v -0.051777 -0.125000 -0.468750 +v -0.125000 -0.051777 -0.468750 +v -0.125000 0.051777 -0.468750 +v -0.051777 -0.125000 -0.125000 +v 0.051777 -0.125000 -0.125000 +v -0.125000 -0.468750 -0.051777 +v -0.051777 -0.468750 -0.125000 +v 0.051777 -0.468750 -0.125000 +v 0.125000 -0.468750 -0.051777 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.6250 0.0156 +vt 0.6250 0.2344 +vt 0.5000 0.2344 +vt 0.5000 0.0156 +vt 0.6250 0.5156 +vt 0.6250 0.0156 +vt 0.7500 0.0156 +vt 0.7500 0.5156 +vt 1.0000 0.0156 +vt 1.0000 0.2344 +vt 0.8750 0.1875 +vt 0.8750 0.0156 +vt 0.1250 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.1875 +vt 0.1250 0.2344 +vt 0.5000 0.2969 +vt 0.5000 0.5156 +vt 0.3750 0.5156 +vt 0.3750 0.3281 +vt -0.0000 0.2344 +vt -0.0000 0.0156 +vt 0.1250 0.5156 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.1875 0.3125 +vt 0.2500 0.3281 +vt 0.2500 0.5156 +vt 0.5000 0.2344 +vt 0.5000 0.0156 +vt 0.3750 0.1875 +vt 0.3750 0.0156 +vt 0.2500 0.0156 +vt 0.3750 0.0156 +vt 0.3750 0.1875 +vt 0.2500 0.1875 +vt 0.1250 0.0156 +vt 0.1875 0.2188 +vt 0.1250 0.1875 +vt -0.0000 0.1875 +vt -0.0000 0.0156 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0156 +vt 1.0000 0.1875 +vt 0.9375 0.2188 +vt 0.8750 0.1875 +vt 0.8750 0.0156 +vt 0.7500 0.1875 +vt 0.7500 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.1875 +vt 0.1250 0.0156 +vt 0.1875 0.2188 +vt 0.1250 0.1875 +vt -0.0000 0.1875 +vt -0.0000 0.0156 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.5156 +vt 0.8750 0.5156 +vt 0.8750 0.2969 +vt 1.0000 0.3281 +vt 1.0000 0.0156 +vt 1.0000 0.1875 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 0.7500 0.1875 +vt 0.7500 0.0156 +vt 0.6250 0.0156 +vt 0.6875 0.2188 +vt 0.6250 0.1875 +vt 0.5000 0.1875 +vt 0.5000 0.0156 +vt 0.4375 0.2188 +vt 0.3750 0.1875 +vt 0.3750 0.0156 +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.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 -0.7173 +vn 0.6302 -0.7173 -0.2971 +vn -0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 0.2971 +vn -0.6302 -0.7173 0.2971 +vn 0.6302 -0.2971 0.7173 +vn -0.6302 -0.2971 0.7173 +vn 0.6302 0.2971 0.7173 +vn -0.6302 0.2971 0.7173 +vn 0.6302 0.7173 0.2971 +vn -0.6302 0.7173 0.2971 +vn 0.6302 0.7173 -0.2971 +vn -0.6302 0.7173 -0.2971 +vn 0.6302 0.2971 -0.7173 +vn -0.6302 0.2971 -0.7173 +vn -0.6303 -0.2971 -0.7173 +vn -0.6303 -0.7173 -0.2971 +vn -0.6303 -0.7173 0.2971 +vn -0.6303 -0.2971 0.7173 +vn -0.6303 0.2971 0.7173 +vn -0.6303 0.7173 0.2971 +vn -0.6303 0.7173 -0.2971 +vn -0.6303 0.2971 -0.7173 +vn 0.6303 -0.7173 -0.2971 +vn 0.6303 -0.2971 -0.7173 +vn 0.6303 0.2971 -0.7173 +vn 0.6303 0.7173 -0.2971 +vn 0.6303 0.7173 0.2971 +vn 0.6303 0.2971 0.7173 +vn 0.6303 -0.2971 0.7173 +vn 0.6303 -0.7173 0.2971 +vn -0.2971 0.7173 -0.6303 +vn -0.1101 0.9878 -0.1101 +vn 0.1101 0.9878 -0.1101 +vn 0.2971 0.7173 -0.6303 +vn -0.2971 -0.6303 0.7173 +vn -0.1101 -0.1101 0.9878 +vn -0.5789 -0.5789 0.5743 +vn -0.7173 -0.6303 0.2971 +vn 0.2971 -0.6303 0.7173 +vn 0.7173 -0.6303 0.2971 +vn 0.5789 -0.5789 0.5743 +vn 0.1101 -0.1101 0.9878 +vn 0.5789 0.5743 -0.5789 +vn 0.5789 -0.5789 -0.5743 +vn 0.5774 -0.5774 -0.5774 +vn 0.5789 -0.5743 -0.5789 +vn 0.7173 0.2971 -0.6303 +vn -0.5789 0.5743 -0.5789 +vn -0.5789 -0.5743 -0.5789 +vn -0.5774 -0.5774 -0.5774 +vn -0.5789 -0.5789 -0.5743 +vn 0.7173 -0.2971 -0.6302 +vn 0.7173 -0.2971 0.6302 +vn 0.2971 -0.7173 0.6302 +vn 0.2971 -0.7173 -0.6302 +vn -0.2971 -0.7173 0.6302 +vn -0.2971 -0.7173 -0.6302 +vn -0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 -0.6302 +vn -0.7173 0.2971 0.6302 +vn -0.7173 0.2971 -0.6302 +vn -0.2971 0.7173 0.6302 +vn -0.2971 0.7173 -0.6302 +vn 0.2971 0.7173 0.6302 +vn 0.2971 0.7173 -0.6302 +vn 0.7173 0.2971 0.6302 +vn 0.7173 0.2971 -0.6302 +vn 0.7173 -0.2971 -0.6303 +vn 0.2971 -0.7173 -0.6303 +vn -0.2971 -0.7173 -0.6303 +vn -0.7173 -0.2971 -0.6303 +vn -0.7173 0.2971 -0.6303 +vn -0.5743 -0.5789 -0.5789 +vn 0.5743 -0.5789 -0.5789 +vn 0.7173 -0.6302 0.2971 +vn 0.7173 0.6302 0.2971 +vn 0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn -0.2971 -0.6302 0.7173 +vn -0.7173 0.6302 0.2971 +vn -0.7173 -0.6302 0.2971 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 -0.6302 -0.2971 +vn -0.2971 0.6302 -0.7173 +vn -0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 -0.7173 +vn 0.2971 -0.6302 -0.7173 +vn 0.7173 0.6302 -0.2971 +vn 0.7173 -0.6302 -0.2971 +vn -0.7173 -0.6303 -0.2971 +vn -0.2971 -0.6303 -0.7173 +vn 0.2971 -0.6303 -0.7173 +vn 0.7173 -0.6303 -0.2971 +g Cylinder.002_Cylinder.006_None.002_Cylinder.002_Cylinder.006_None.002_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2 +f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 +f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2 +f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3 +f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4 +f 49/49/5 50/50/5 51/51/5 52/52/5 53/53/5 54/54/5 55/55/5 56/56/5 +f 57/57/6 58/58/6 59/59/6 60/60/6 61/61/6 62/62/6 63/63/6 64/64/6 +s 1 +f 9/65/7 2/66/8 1/67/9 10/68/10 +f 10/68/10 1/67/9 8/69/11 11/70/12 +f 11/70/12 8/69/11 7/71/13 12/72/14 +f 12/73/14 7/74/13 6/75/15 13/76/16 +f 13/76/16 6/75/15 5/77/17 14/78/18 +f 14/78/18 5/77/17 4/79/19 15/80/20 +f 15/80/20 4/79/19 3/81/21 16/82/22 +f 16/82/22 3/81/21 2/66/8 9/65/7 +f 26/83/10 17/84/9 24/85/11 27/86/12 +f 25/87/7 18/88/8 17/84/9 26/83/10 +f 27/86/12 24/85/11 23/89/13 28/90/14 +f 28/91/14 23/92/13 22/93/15 29/94/16 +f 29/94/16 22/93/15 21/95/17 30/96/18 +f 30/96/18 21/95/17 20/97/19 31/98/20 +f 31/98/20 20/97/19 19/99/21 32/100/22 +f 32/100/22 19/99/21 18/88/8 25/87/7 +f 65/101/23 66/102/24 67/103/25 68/104/26 69/105/27 70/106/28 71/107/29 72/108/30 +f 73/109/31 74/110/32 75/111/33 76/112/34 77/113/35 78/114/36 79/115/37 80/116/38 +f 81/117/39 82/118/40 83/119/41 84/120/42 +f 77/121/35 70/122/28 69/123/27 78/124/36 +f 85/125/43 86/126/44 87/127/45 88/128/46 +f 89/129/47 90/130/48 91/131/49 92/132/50 +f 83/133/41 76/134/34 75/135/33 93/136/51 +f 89/129/47 92/132/50 86/137/44 85/138/43 +f 73/139/31 80/140/38 91/141/49 94/142/52 +f 73/139/31 94/142/52 95/143/53 96/144/54 74/145/32 +f 74/145/32 96/144/54 93/136/51 75/135/33 +f 77/121/35 76/134/34 83/133/41 82/146/40 71/147/29 70/122/28 +f 83/119/41 93/148/51 97/149/55 84/120/42 +f 65/150/23 72/151/30 98/152/56 99/153/57 +f 66/154/24 65/150/23 99/153/57 100/155/58 101/156/59 +f 66/154/24 101/156/59 87/157/45 67/158/25 +f 41/159/60 34/160/61 33/161/62 42/162/63 +f 42/162/63 33/161/62 40/163/64 43/164/65 +f 43/164/65 40/163/64 39/165/66 44/166/67 +f 44/167/67 39/168/66 38/169/68 45/170/69 +f 45/170/69 38/169/68 37/171/70 46/172/71 +f 46/172/71 37/171/70 36/173/72 47/174/73 +f 47/174/73 36/173/72 35/175/74 48/176/75 +f 48/176/75 35/175/74 34/160/61 41/159/60 +f 102/177/76 103/178/77 104/179/78 105/180/79 106/181/80 81/182/39 84/183/42 97/184/55 +f 104/185/78 107/186/81 100/187/58 99/188/57 105/189/79 +f 105/189/79 99/188/57 98/190/56 106/191/80 +f 82/118/40 81/117/39 106/191/80 98/190/56 +f 102/192/76 97/149/55 93/148/51 96/193/54 +f 103/194/77 102/192/76 96/193/54 95/195/53 108/196/82 +f 103/194/77 108/196/82 107/197/81 104/198/78 +f 57/199/83 50/200/84 49/201/85 58/202/86 +f 58/202/86 49/201/85 56/203/87 59/204/88 +f 59/204/88 56/203/87 55/205/89 60/206/90 +f 60/207/90 55/208/89 54/209/91 61/210/92 +f 61/210/92 54/209/91 53/211/93 62/212/94 +f 62/212/94 53/211/93 52/213/95 63/214/96 +f 63/214/96 52/213/95 51/215/97 64/216/98 +f 64/216/98 51/215/97 50/200/84 57/199/83 +f 90/217/48 89/218/47 85/219/43 88/220/46 109/221/99 110/222/100 111/223/101 112/224/102 +f 82/146/40 98/152/56 72/151/30 71/147/29 +f 80/225/38 79/226/37 92/227/50 91/228/49 +f 67/229/25 87/230/45 86/231/44 68/232/26 +f 86/231/44 92/227/50 79/226/37 78/124/36 69/123/27 68/232/26 +f 88/128/46 87/127/45 101/233/59 109/234/99 +f 110/235/100 109/234/99 101/233/59 100/236/58 107/237/81 +f 110/235/100 107/237/81 108/238/82 111/239/101 +f 111/239/101 108/238/82 95/240/53 94/241/52 112/242/102 +f 90/130/48 112/242/102 94/241/52 91/131/49 diff --git a/mods/pipeworks/models/pipeworks_pipe_8.obj b/mods/pipeworks/models/pipeworks_pipe_8.obj new file mode 100755 index 0000000..21c6876 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_8.obj @@ -0,0 +1,5122 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-highpoly.blend' +# www.blender.org +o Pipe_Cylinder.002 +v -0.468750 0.126770 0.038455 +v -0.468750 0.131837 0.012985 +v -0.468750 0.131837 -0.012984 +v -0.468750 0.126770 -0.038455 +v -0.468750 0.116832 -0.062448 +v -0.468750 0.102404 -0.084041 +v -0.468750 0.084041 -0.102404 +v -0.468750 0.062448 -0.116832 +v -0.468750 0.038455 -0.126770 +v -0.468750 0.012985 -0.131836 +v -0.468750 -0.012985 -0.131836 +v -0.468750 -0.062448 -0.116832 +v -0.468750 -0.084041 -0.102404 +v -0.468750 -0.102404 -0.084041 +v -0.468750 -0.116832 -0.062448 +v -0.468750 -0.126770 -0.038455 +v -0.468750 -0.131836 -0.012985 +v -0.468750 -0.131836 0.012985 +v -0.468750 -0.126770 0.038455 +v -0.468750 -0.116832 0.062448 +v -0.468750 -0.084041 0.102404 +v -0.468750 -0.102404 0.084041 +v -0.468750 -0.062448 0.116832 +v -0.468750 -0.038455 0.126770 +v -0.468750 0.012985 0.131837 +v -0.468750 0.062448 0.116832 +v -0.468750 0.038455 0.126770 +v -0.468750 0.084041 0.102404 +v -0.468750 0.102404 0.084041 +v -0.468750 0.116832 0.062448 +v -0.468750 -0.038455 -0.126770 +v -0.468750 -0.012985 0.131836 +v -0.437501 0.110774 0.059210 +v -0.437501 0.120197 0.036461 +v -0.437501 0.125000 0.012312 +v -0.437501 0.125001 -0.012311 +v -0.437501 0.120197 -0.036461 +v -0.437501 0.110774 -0.059210 +v -0.437501 0.097094 -0.079683 +v -0.437501 0.079683 -0.097094 +v -0.437501 0.059210 -0.110774 +v -0.437501 0.036461 -0.120197 +v -0.437501 0.012312 -0.125000 +v -0.437501 -0.012311 -0.125000 +v -0.437501 -0.036461 -0.120197 +v -0.437501 -0.059210 -0.110774 +v -0.437501 -0.079683 -0.097094 +v -0.437501 -0.097094 -0.079683 +v -0.437501 -0.110774 -0.059210 +v -0.437501 -0.120197 -0.036461 +v -0.437501 -0.125000 -0.012311 +v -0.437501 -0.125000 0.012311 +v -0.437501 -0.120197 0.036461 +v -0.437501 -0.110774 0.059210 +v -0.437501 -0.097094 0.079683 +v -0.437501 -0.079683 0.097094 +v -0.437501 -0.059210 0.110774 +v -0.437501 -0.036461 0.120197 +v -0.437501 -0.012311 0.125001 +v -0.437501 0.012311 0.125001 +v -0.437501 0.036461 0.120197 +v -0.437501 0.059210 0.110774 +v -0.437501 0.079683 0.097094 +v -0.437501 0.097094 0.079683 +v 0.437501 0.036461 -0.120197 +v 0.437501 0.012312 -0.125001 +v 0.437501 -0.012311 -0.125000 +v 0.437501 -0.036461 -0.120197 +v 0.437501 0.059210 -0.110774 +v 0.468750 0.012985 -0.131836 +v 0.468750 0.038455 -0.126770 +v 0.468750 -0.012985 -0.131836 +v 0.437501 -0.059210 -0.110774 +v 0.468750 -0.038455 -0.126770 +v 0.437501 0.079683 -0.097094 +v 0.468750 0.062448 -0.116832 +v 0.437501 -0.079683 -0.097094 +v 0.468750 -0.062448 -0.116832 +v 0.437501 0.097094 -0.079683 +v 0.468750 0.084041 -0.102404 +v 0.437501 -0.097094 -0.079683 +v 0.468750 -0.084041 -0.102404 +v 0.437501 0.110774 -0.059210 +v 0.468750 0.102404 -0.084041 +v 0.437501 -0.110774 -0.059210 +v 0.468750 -0.102404 -0.084041 +v 0.437501 0.120197 -0.036461 +v 0.468750 0.116832 -0.062448 +v 0.437501 -0.120197 -0.036461 +v 0.468750 -0.116832 -0.062448 +v 0.437501 0.125000 -0.012311 +v 0.468750 0.126770 -0.038455 +v 0.437501 -0.125001 -0.012311 +v 0.468750 -0.126770 -0.038455 +v 0.437501 0.125000 0.012312 +v 0.468750 0.131836 -0.012985 +v 0.437501 -0.125001 0.012311 +v 0.468750 -0.131837 -0.012985 +v 0.437501 0.120197 0.036461 +v 0.468750 0.131836 0.012985 +v 0.437501 -0.120197 0.036461 +v 0.468750 -0.131837 0.012985 +v 0.437501 0.110774 0.059210 +v 0.468750 0.126770 0.038455 +v 0.437501 -0.110774 0.059210 +v 0.468750 -0.126770 0.038455 +v 0.437501 0.097094 0.079683 +v 0.468750 0.116832 0.062448 +v 0.437501 -0.097094 0.079683 +v 0.468750 -0.116832 0.062448 +v 0.437501 0.079683 0.097094 +v 0.468750 0.102404 0.084041 +v 0.437501 -0.079683 0.097094 +v 0.468750 -0.102404 0.084041 +v 0.437501 0.059210 0.110774 +v 0.468750 0.084041 0.102404 +v 0.437501 -0.059210 0.110774 +v 0.468750 -0.084041 0.102404 +v 0.437501 0.036461 0.120197 +v 0.468750 0.062448 0.116832 +v 0.437501 -0.036461 0.120197 +v 0.468750 -0.062448 0.116832 +v 0.437501 0.012311 0.125000 +v 0.468750 0.038455 0.126770 +v 0.437501 -0.012311 0.125000 +v 0.468750 -0.038455 0.126770 +v 0.468750 0.012985 0.131837 +v 0.468750 -0.012985 0.131836 +v 0.460912 0.130078 0.063644 +v 0.468749 0.130078 0.063644 +v 0.468749 0.139022 0.062467 +v 0.460912 0.139022 0.062467 +v 0.460912 0.142474 0.054132 +v 0.460912 0.136982 0.046976 +v 0.460912 0.128039 0.048153 +v 0.460912 0.124587 0.056487 +v 0.468749 0.124587 0.056487 +v 0.468749 0.142474 0.054132 +v 0.468749 0.136982 0.046976 +v 0.468749 0.128039 0.048153 +v -0.460914 0.136982 0.046976 +v -0.468751 0.136982 0.046976 +v -0.468751 0.142474 0.054133 +v -0.460914 0.142474 0.054133 +v -0.460914 0.139022 0.062467 +v -0.460914 0.130078 0.063644 +v -0.460914 0.124587 0.056488 +v -0.460914 0.128039 0.048153 +v -0.468751 0.128039 0.048153 +v -0.468751 0.139022 0.062467 +v -0.468751 0.130078 0.063644 +v -0.468751 0.124587 0.056488 +v 0.460912 0.046976 0.136982 +v 0.468749 0.046976 0.136982 +v 0.468749 0.054133 0.142474 +v 0.460912 0.054133 0.142474 +v 0.460912 0.062467 0.139022 +v 0.460912 0.063644 0.130078 +v 0.460912 0.056488 0.124587 +v 0.460912 0.048154 0.128039 +v 0.468749 0.048154 0.128039 +v 0.468749 0.062467 0.139022 +v 0.468749 0.063644 0.130078 +v 0.468749 0.056488 0.124587 +v -0.460914 0.063644 0.130078 +v -0.468751 0.063644 0.130078 +v -0.468751 0.062467 0.139022 +v -0.460914 0.062467 0.139022 +v -0.460914 0.054133 0.142474 +v -0.460914 0.046976 0.136982 +v -0.460914 0.048153 0.128039 +v -0.460914 0.056487 0.124587 +v -0.468751 0.056487 0.124587 +v -0.468751 0.054133 0.142474 +v -0.468751 0.046976 0.136982 +v -0.468751 0.048153 0.128039 +v 0.460912 -0.063644 0.130078 +v 0.468749 -0.063644 0.130078 +v 0.468749 -0.062467 0.139022 +v 0.460912 -0.062467 0.139022 +v 0.460912 -0.054132 0.142474 +v 0.460912 -0.046976 0.136982 +v 0.460912 -0.048153 0.128039 +v 0.460912 -0.056487 0.124587 +v 0.468749 -0.056487 0.124587 +v 0.468749 -0.054132 0.142474 +v 0.468749 -0.046976 0.136982 +v 0.468749 -0.048153 0.128039 +v -0.460914 -0.046976 0.136982 +v -0.468751 -0.046976 0.136982 +v -0.468751 -0.054133 0.142474 +v -0.460914 -0.054133 0.142474 +v -0.460914 -0.062467 0.139022 +v -0.460914 -0.063644 0.130078 +v -0.460914 -0.056488 0.124587 +v -0.460914 -0.048153 0.128039 +v -0.468751 -0.048153 0.128039 +v -0.468751 -0.062467 0.139022 +v -0.468751 -0.063644 0.130078 +v -0.468751 -0.056488 0.124587 +v 0.460912 -0.136982 0.046976 +v 0.468749 -0.136982 0.046976 +v 0.468749 -0.142474 0.054133 +v 0.460912 -0.142474 0.054133 +v 0.460912 -0.139022 0.062467 +v 0.460912 -0.130078 0.063644 +v 0.460912 -0.124587 0.056488 +v 0.460912 -0.128039 0.048153 +v 0.468749 -0.128039 0.048153 +v 0.468749 -0.139022 0.062467 +v 0.468749 -0.130078 0.063644 +v 0.468749 -0.124587 0.056488 +v -0.460914 -0.130078 0.063644 +v -0.468751 -0.130078 0.063644 +v -0.468751 -0.139022 0.062467 +v -0.460914 -0.139022 0.062467 +v -0.460914 -0.142474 0.054133 +v -0.460914 -0.136982 0.046976 +v -0.460914 -0.128039 0.048153 +v -0.460914 -0.124587 0.056487 +v -0.468751 -0.124587 0.056487 +v -0.468751 -0.142474 0.054133 +v -0.468751 -0.136982 0.046976 +v -0.468751 -0.128039 0.048153 +v 0.460912 -0.130078 -0.063644 +v 0.468749 -0.130078 -0.063644 +v 0.468749 -0.139022 -0.062467 +v 0.460912 -0.139022 -0.062467 +v 0.460912 -0.142474 -0.054132 +v 0.460912 -0.136982 -0.046976 +v 0.460912 -0.128039 -0.048153 +v 0.460912 -0.124587 -0.056487 +v 0.468749 -0.124587 -0.056487 +v 0.468749 -0.142474 -0.054132 +v 0.468749 -0.136982 -0.046976 +v 0.468749 -0.128039 -0.048153 +v -0.460914 -0.136982 -0.046976 +v -0.468751 -0.136982 -0.046976 +v -0.468751 -0.142474 -0.054133 +v -0.460914 -0.142474 -0.054133 +v -0.460914 -0.139022 -0.062467 +v -0.460914 -0.130078 -0.063644 +v -0.460914 -0.124587 -0.056487 +v -0.460914 -0.128039 -0.048153 +v -0.468751 -0.128039 -0.048153 +v -0.468751 -0.139022 -0.062467 +v -0.468751 -0.130078 -0.063644 +v -0.468751 -0.124587 -0.056487 +v 0.460912 -0.046976 -0.136982 +v 0.468749 -0.046976 -0.136982 +v 0.468749 -0.054133 -0.142474 +v 0.460912 -0.054133 -0.142474 +v 0.460912 -0.062467 -0.139022 +v 0.460912 -0.063644 -0.130078 +v 0.460912 -0.056488 -0.124587 +v 0.460912 -0.048153 -0.128039 +v 0.468749 -0.048153 -0.128039 +v 0.468749 -0.062467 -0.139022 +v 0.468749 -0.063644 -0.130078 +v 0.468749 -0.056488 -0.124587 +v -0.460914 -0.063644 -0.130078 +v -0.468751 -0.063644 -0.130078 +v -0.468751 -0.062467 -0.139022 +v -0.460914 -0.062467 -0.139022 +v -0.460914 -0.054132 -0.142474 +v -0.460914 -0.046976 -0.136982 +v -0.460914 -0.048153 -0.128039 +v -0.460914 -0.056487 -0.124587 +v -0.468751 -0.056487 -0.124587 +v -0.468751 -0.054132 -0.142474 +v -0.468751 -0.046976 -0.136982 +v -0.468751 -0.048153 -0.128039 +v 0.460912 0.063644 -0.130078 +v 0.468749 0.063644 -0.130078 +v 0.468749 0.062467 -0.139022 +v 0.460912 0.062467 -0.139022 +v 0.460912 0.054132 -0.142474 +v 0.460912 0.046976 -0.136982 +v 0.460912 0.048153 -0.128039 +v 0.460912 0.056487 -0.124587 +v 0.468749 0.056487 -0.124587 +v 0.468749 0.054132 -0.142474 +v 0.468749 0.046976 -0.136982 +v 0.468749 0.048153 -0.128039 +v -0.460914 0.046976 -0.136982 +v -0.468751 0.046976 -0.136982 +v -0.468751 0.054133 -0.142474 +v -0.460914 0.054133 -0.142474 +v -0.460914 0.062467 -0.139022 +v -0.460914 0.063644 -0.130078 +v -0.460914 0.056487 -0.124587 +v -0.460914 0.048153 -0.128039 +v -0.468751 0.048153 -0.128039 +v -0.468751 0.062467 -0.139022 +v -0.468751 0.063644 -0.130078 +v -0.468751 0.056487 -0.124587 +v 0.460912 0.136982 -0.046976 +v 0.468749 0.136982 -0.046976 +v 0.468749 0.142474 -0.054133 +v 0.460912 0.142474 -0.054133 +v 0.460912 0.139022 -0.062467 +v 0.460912 0.130078 -0.063644 +v 0.460912 0.124587 -0.056488 +v 0.460912 0.128039 -0.048153 +v 0.468749 0.128039 -0.048153 +v 0.468749 0.139022 -0.062467 +v 0.468749 0.130078 -0.063644 +v 0.468749 0.124587 -0.056488 +v -0.460914 0.130078 -0.063644 +v -0.468751 0.130078 -0.063644 +v -0.468751 0.139022 -0.062467 +v -0.460914 0.139022 -0.062467 +v -0.460914 0.142474 -0.054133 +v -0.460914 0.136982 -0.046976 +v -0.460914 0.128039 -0.048153 +v -0.460914 0.124587 -0.056487 +v -0.468751 0.124587 -0.056487 +v -0.468751 0.142474 -0.054133 +v -0.468751 0.136982 -0.046976 +v -0.468751 0.128039 -0.048153 +v -0.012312 -0.012312 -0.125000 +v -0.036461 -0.036461 -0.120197 +v -0.079683 -0.079683 -0.097094 +v -0.097094 -0.097094 -0.079683 +v -0.120197 -0.120197 -0.036461 +v 0.110774 0.110774 -0.059210 +v 0.120197 0.120197 -0.036461 +v 0.125000 -0.125001 -0.012311 +v 0.110774 -0.110774 0.059210 +v 0.097094 -0.097094 0.079683 +v 0.079683 -0.079683 0.097094 +v 0.036461 -0.036461 0.120197 +v 0.012312 -0.012312 -0.125000 +v 0.110774 -0.110774 -0.059210 +v 0.125001 0.125001 -0.012311 +v -0.120197 0.120197 0.036461 +v 0.110774 0.110774 0.059210 +v 0.079683 0.079683 0.097094 +v 0.012312 0.012312 0.125000 +v -0.500000 0.099603 -0.121367 +v -0.500000 0.074012 -0.138467 +v -0.500000 0.045577 -0.150245 +v -0.500000 0.015390 -0.156250 +v -0.500000 -0.015389 -0.156250 +v -0.500000 -0.045576 -0.150245 +v -0.500000 -0.074012 -0.138467 +v -0.500000 -0.099603 -0.121367 +v -0.500000 -0.121367 -0.099603 +v -0.500000 -0.150245 -0.045576 +v -0.500000 -0.156250 0.015389 +v -0.500000 -0.150245 0.045576 +v -0.500000 -0.121367 0.099603 +v -0.500000 -0.099603 0.121367 +v -0.500000 -0.074012 0.138467 +v -0.500000 -0.045576 0.150245 +v -0.500000 -0.015389 0.156250 +v -0.500000 0.045576 0.150245 +v -0.500000 0.074012 0.138467 +v -0.500000 0.099603 0.121367 +v -0.500000 0.138467 0.074012 +v -0.500000 0.156250 0.015389 +v -0.500000 0.156250 -0.015389 +v -0.500000 0.150245 -0.045576 +v -0.500000 0.138467 -0.074012 +v -0.500000 0.121367 -0.099603 +v -0.500000 -0.138466 -0.074012 +v -0.500000 -0.156250 -0.015389 +v -0.500000 -0.138467 0.074012 +v -0.500000 0.015389 0.156250 +v -0.500000 0.121367 0.099603 +v -0.500000 0.150245 0.045576 +v -0.468750 0.099603 -0.121367 +v -0.468750 0.121367 -0.099603 +v -0.468750 0.074012 -0.138467 +v -0.468750 0.045577 -0.150245 +v -0.468750 0.015390 -0.156250 +v -0.468750 -0.015389 -0.156250 +v -0.468750 -0.045576 -0.150245 +v -0.468750 -0.074012 -0.138467 +v -0.468750 -0.099603 -0.121367 +v -0.468750 -0.121367 -0.099603 +v -0.468750 -0.138466 -0.074012 +v -0.468750 -0.150245 -0.045576 +v -0.468750 -0.156250 -0.015389 +v -0.468750 -0.156250 0.015389 +v -0.468750 -0.150245 0.045576 +v -0.468750 -0.138467 0.074012 +v -0.468750 -0.121367 0.099603 +v -0.468750 -0.099603 0.121367 +v -0.468750 -0.074012 0.138467 +v -0.468750 -0.045576 0.150245 +v -0.468750 -0.015389 0.156250 +v -0.468750 0.015389 0.156250 +v -0.468750 0.074012 0.138467 +v -0.468750 0.045576 0.150245 +v -0.468750 0.099603 0.121367 +v -0.468750 0.121367 0.099603 +v -0.468750 0.138467 0.074012 +v -0.468750 0.150245 0.045576 +v -0.468750 0.156250 -0.015389 +v -0.468750 0.156250 0.015389 +v -0.468750 0.150245 -0.045576 +v -0.468750 0.138467 -0.074012 +v 0.468750 -0.138466 -0.074012 +v 0.468750 -0.150245 -0.045576 +v 0.468750 -0.156250 -0.015389 +v 0.468750 -0.121367 -0.099603 +v 0.468750 -0.156250 0.015389 +v 0.468750 -0.074012 -0.138467 +v 0.468750 -0.099603 -0.121367 +v 0.500000 -0.121367 -0.099603 +v 0.500000 -0.138467 -0.074012 +v 0.500000 -0.150245 -0.045576 +v 0.500000 -0.156250 -0.015389 +v 0.500000 -0.156250 0.015389 +v 0.468750 -0.045576 -0.150245 +v 0.500000 -0.099603 -0.121367 +v 0.468750 -0.150245 0.045576 +v 0.500000 -0.150245 0.045576 +v 0.468750 -0.015389 -0.156250 +v 0.500000 -0.045576 -0.150245 +v 0.500000 -0.074012 -0.138467 +v 0.468750 -0.138467 0.074012 +v 0.500000 -0.138467 0.074012 +v 0.468750 0.015389 -0.156250 +v 0.500000 -0.015389 -0.156250 +v 0.468750 -0.121367 0.099603 +v 0.500000 -0.121367 0.099603 +v 0.468750 0.045576 -0.150245 +v 0.500000 0.015389 -0.156250 +v 0.468750 -0.099603 0.121367 +v 0.500000 -0.099603 0.121367 +v 0.468750 0.074012 -0.138467 +v 0.500000 0.045576 -0.150245 +v 0.468750 -0.045576 0.150245 +v 0.468750 -0.074012 0.138467 +v 0.500000 -0.074012 0.138467 +v 0.468750 0.099603 -0.121367 +v 0.500000 0.074012 -0.138467 +v 0.468750 -0.015389 0.156250 +v 0.500000 -0.045576 0.150245 +v 0.468750 0.121367 -0.099603 +v 0.500000 0.099603 -0.121367 +v 0.468750 0.015389 0.156250 +v 0.500000 -0.015389 0.156250 +v 0.468750 0.138466 -0.074012 +v 0.500000 0.121367 -0.099603 +v 0.468750 0.045576 0.150245 +v 0.500000 0.015389 0.156250 +v 0.468750 0.150245 -0.045577 +v 0.500000 0.138466 -0.074012 +v 0.468750 0.074012 0.138467 +v 0.500000 0.045576 0.150245 +v 0.468750 0.156249 -0.015389 +v 0.500000 0.150245 -0.045577 +v 0.500000 0.156250 0.015389 +v 0.468750 0.099603 0.121367 +v 0.500000 0.074012 0.138467 +v 0.468750 0.156250 0.015389 +v 0.500000 0.156250 -0.015389 +v 0.500000 0.138467 0.074012 +v 0.500000 0.150245 0.045576 +v 0.500000 0.121367 0.099603 +v 0.500000 0.099603 0.121367 +v 0.468750 0.150245 0.045576 +v 0.468750 0.121367 0.099603 +v 0.468750 0.138467 0.074012 +v 0.460912 0.095821 0.108578 +v 0.468749 0.095821 0.108578 +v 0.468749 0.104534 0.110913 +v 0.460912 0.104534 0.110913 +v 0.460912 0.110913 0.104534 +v 0.460912 0.108578 0.095821 +v 0.460912 0.099865 0.093486 +v 0.460912 0.093486 0.099865 +v 0.468749 0.093486 0.099865 +v 0.468749 0.110913 0.104534 +v 0.468749 0.108578 0.095821 +v 0.468749 0.099865 0.093486 +v -0.460914 0.108578 0.095821 +v -0.468751 0.108578 0.095821 +v -0.468751 0.110913 0.104534 +v -0.460914 0.110913 0.104534 +v -0.460914 0.104534 0.110913 +v -0.460914 0.095821 0.108578 +v -0.460914 0.093486 0.099865 +v -0.460914 0.099865 0.093486 +v -0.468751 0.099865 0.093486 +v -0.468751 0.104534 0.110913 +v -0.468751 0.095821 0.108578 +v -0.468751 0.093486 0.099865 +v 0.460912 -0.009021 0.144532 +v 0.468749 -0.009021 0.144532 +v 0.468749 -0.004510 0.152344 +v 0.460912 -0.004510 0.152344 +v 0.460912 0.004510 0.152344 +v 0.460912 0.009021 0.144532 +v 0.460912 0.004510 0.136720 +v 0.460912 -0.004510 0.136720 +v 0.468749 -0.004510 0.136720 +v 0.468749 0.004510 0.152344 +v 0.468749 0.009021 0.144532 +v 0.468749 0.004510 0.136720 +v -0.460914 0.009021 0.144532 +v -0.468751 0.009021 0.144532 +v -0.468751 0.004510 0.152344 +v -0.460914 0.004510 0.152344 +v -0.460914 -0.004510 0.152344 +v -0.460914 -0.009021 0.144532 +v -0.460914 -0.004510 0.136720 +v -0.460914 0.004510 0.136720 +v -0.468751 0.004510 0.136720 +v -0.468751 -0.004510 0.152344 +v -0.468751 -0.009021 0.144532 +v -0.468751 -0.004510 0.136720 +v 0.460912 -0.108578 0.095821 +v 0.468749 -0.108578 0.095821 +v 0.468749 -0.110913 0.104534 +v 0.460912 -0.110913 0.104534 +v 0.460912 -0.104534 0.110913 +v 0.460912 -0.095821 0.108578 +v 0.460912 -0.093486 0.099865 +v 0.460912 -0.099865 0.093486 +v 0.468749 -0.099865 0.093486 +v 0.468749 -0.104534 0.110913 +v 0.468749 -0.095821 0.108578 +v 0.468749 -0.093486 0.099865 +v -0.460914 -0.095821 0.108578 +v -0.468751 -0.095821 0.108578 +v -0.468751 -0.104534 0.110913 +v -0.460914 -0.104534 0.110913 +v -0.460914 -0.110913 0.104534 +v -0.460914 -0.108578 0.095821 +v -0.460914 -0.099865 0.093486 +v -0.460914 -0.093486 0.099865 +v -0.468751 -0.093486 0.099865 +v -0.468751 -0.110913 0.104534 +v -0.468751 -0.108578 0.095821 +v -0.468751 -0.099865 0.093486 +v 0.460912 -0.144532 -0.009021 +v 0.468749 -0.144532 -0.009021 +v 0.468749 -0.152344 -0.004510 +v 0.460912 -0.152344 -0.004510 +v 0.460912 -0.152344 0.004511 +v 0.460912 -0.144532 0.009021 +v 0.460912 -0.136720 0.004510 +v 0.460912 -0.136720 -0.004510 +v 0.468749 -0.136720 -0.004510 +v 0.468749 -0.152344 0.004511 +v 0.468749 -0.144532 0.009021 +v 0.468749 -0.136720 0.004510 +v -0.460914 -0.144532 0.009021 +v -0.468751 -0.144532 0.009021 +v -0.468751 -0.152344 0.004510 +v -0.460914 -0.152344 0.004510 +v -0.460914 -0.152344 -0.004510 +v -0.460914 -0.144532 -0.009021 +v -0.460914 -0.136720 -0.004510 +v -0.460914 -0.136720 0.004510 +v -0.468751 -0.136720 0.004510 +v -0.468751 -0.152344 -0.004510 +v -0.468751 -0.144532 -0.009021 +v -0.468751 -0.136720 -0.004510 +v 0.460912 -0.095821 -0.108578 +v 0.468749 -0.095821 -0.108578 +v 0.468749 -0.104534 -0.110913 +v 0.460912 -0.104534 -0.110913 +v 0.460912 -0.110913 -0.104534 +v 0.460912 -0.108578 -0.095821 +v 0.460912 -0.099865 -0.093486 +v 0.460912 -0.093486 -0.099865 +v 0.468749 -0.093486 -0.099865 +v 0.468749 -0.110913 -0.104534 +v 0.468749 -0.108578 -0.095821 +v 0.468749 -0.099865 -0.093486 +v -0.460914 -0.108578 -0.095821 +v -0.468751 -0.108578 -0.095821 +v -0.468751 -0.110913 -0.104534 +v -0.460914 -0.110913 -0.104534 +v -0.460914 -0.104534 -0.110913 +v -0.460914 -0.095821 -0.108578 +v -0.460914 -0.093486 -0.099865 +v -0.460914 -0.099865 -0.093486 +v -0.468751 -0.099865 -0.093486 +v -0.468751 -0.104534 -0.110913 +v -0.468751 -0.095821 -0.108578 +v -0.468751 -0.093486 -0.099865 +v 0.460912 0.009021 -0.144532 +v 0.468749 0.009021 -0.144532 +v 0.468749 0.004510 -0.152344 +v 0.460912 0.004510 -0.152344 +v 0.460912 -0.004510 -0.152344 +v 0.460912 -0.009021 -0.144532 +v 0.460912 -0.004510 -0.136720 +v 0.460912 0.004510 -0.136720 +v 0.468749 0.004510 -0.136720 +v 0.468749 -0.004510 -0.152344 +v 0.468749 -0.009021 -0.144532 +v 0.468749 -0.004510 -0.136720 +v -0.460914 -0.009021 -0.144532 +v -0.468751 -0.009021 -0.144532 +v -0.468751 -0.004510 -0.152344 +v -0.460914 -0.004510 -0.152344 +v -0.460914 0.004510 -0.152344 +v -0.460914 0.009021 -0.144532 +v -0.460914 0.004510 -0.136720 +v -0.460914 -0.004510 -0.136720 +v -0.468751 -0.004510 -0.136720 +v -0.468751 0.004510 -0.152344 +v -0.468751 0.009021 -0.144532 +v -0.468751 0.004510 -0.136720 +v 0.460912 0.108578 -0.095821 +v 0.468749 0.108578 -0.095821 +v 0.468749 0.110913 -0.104534 +v 0.460912 0.110913 -0.104534 +v 0.460912 0.104534 -0.110913 +v 0.460912 0.095821 -0.108578 +v 0.460912 0.093486 -0.099865 +v 0.460912 0.099865 -0.093486 +v 0.468749 0.099865 -0.093486 +v 0.468749 0.104534 -0.110913 +v 0.468749 0.095821 -0.108578 +v 0.468749 0.093486 -0.099865 +v -0.460914 0.095821 -0.108578 +v -0.468751 0.095821 -0.108578 +v -0.468751 0.104534 -0.110913 +v -0.460914 0.104534 -0.110913 +v -0.460914 0.110913 -0.104534 +v -0.460914 0.108578 -0.095821 +v -0.460914 0.099865 -0.093486 +v -0.460914 0.093486 -0.099865 +v -0.468751 0.093486 -0.099865 +v -0.468751 0.110913 -0.104534 +v -0.468751 0.108578 -0.095821 +v -0.468751 0.099865 -0.093486 +v 0.460912 0.144532 0.009021 +v 0.468749 0.144532 0.009021 +v 0.468749 0.152344 0.004510 +v 0.460912 0.152344 0.004510 +v 0.460912 0.152344 -0.004510 +v 0.460912 0.144532 -0.009021 +v 0.460912 0.136720 -0.004510 +v 0.460912 0.136720 0.004510 +v 0.468749 0.136720 0.004510 +v 0.468749 0.152344 -0.004510 +v 0.468749 0.144532 -0.009021 +v 0.468749 0.136720 -0.004510 +v -0.460914 0.144532 -0.009021 +v -0.468751 0.144532 -0.009021 +v -0.468751 0.152344 -0.004510 +v -0.460914 0.152344 -0.004510 +v -0.460914 0.152344 0.004510 +v -0.460914 0.144532 0.009021 +v -0.460914 0.136720 0.004510 +v -0.460914 0.136720 -0.004510 +v -0.468751 0.136720 -0.004510 +v -0.468751 0.152344 0.004510 +v -0.468751 0.144532 0.009021 +v -0.468751 0.136720 0.004510 +v 0.126770 0.468750 0.038455 +v 0.131837 0.468750 0.012985 +v 0.131837 0.468750 -0.012984 +v 0.126770 0.468750 -0.038455 +v 0.116832 0.468750 -0.062448 +v 0.102404 0.468750 -0.084041 +v 0.084041 0.468750 -0.102404 +v 0.062448 0.468750 -0.116832 +v 0.038455 0.468750 -0.126770 +v 0.012985 0.468750 -0.131837 +v -0.012985 0.468750 -0.131837 +v -0.062448 0.468750 -0.116832 +v -0.084041 0.468750 -0.102404 +v -0.102404 0.468750 -0.084041 +v -0.116832 0.468750 -0.062448 +v -0.126770 0.468750 -0.038455 +v -0.131837 0.468750 -0.012985 +v -0.131837 0.468750 0.012985 +v -0.126770 0.468750 0.038455 +v -0.116832 0.468750 0.062448 +v -0.084041 0.468750 0.102404 +v -0.102404 0.468750 0.084041 +v -0.062448 0.468750 0.116832 +v -0.038455 0.468750 0.126770 +v 0.012985 0.468750 0.131836 +v 0.062448 0.468750 0.116832 +v 0.038455 0.468750 0.126770 +v 0.084041 0.468750 0.102404 +v 0.102404 0.468750 0.084041 +v 0.116832 0.468750 0.062448 +v -0.038455 0.468750 -0.126770 +v -0.012985 0.468750 0.131836 +v 0.110774 0.437501 0.059210 +v 0.120197 0.437501 0.036461 +v 0.125000 0.437501 0.012312 +v 0.125000 0.437501 -0.012311 +v 0.120197 0.437501 -0.036461 +v 0.110774 0.437501 -0.059210 +v 0.097094 0.437501 -0.079683 +v 0.079683 0.437501 -0.097094 +v 0.059210 0.437501 -0.110774 +v 0.036461 0.437501 -0.120197 +v 0.012311 0.437501 -0.125001 +v -0.012311 0.437501 -0.125001 +v -0.036461 0.437501 -0.120197 +v -0.059210 0.437501 -0.110774 +v -0.079683 0.437501 -0.097094 +v -0.097094 0.437501 -0.079683 +v -0.110774 0.437501 -0.059210 +v -0.120197 0.437501 -0.036461 +v -0.125000 0.437501 -0.012312 +v -0.125001 0.437501 0.012311 +v -0.120197 0.437501 0.036461 +v -0.110774 0.437501 0.059210 +v -0.097094 0.437501 0.079683 +v -0.079683 0.437501 0.097094 +v -0.059210 0.437501 0.110774 +v -0.036461 0.437501 0.120197 +v -0.012312 0.437501 0.125000 +v 0.012311 0.437501 0.125000 +v 0.036461 0.437501 0.120197 +v 0.059210 0.437501 0.110774 +v 0.079683 0.437501 0.097094 +v 0.097094 0.437501 0.079683 +v 0.036461 -0.437501 -0.120197 +v 0.012312 -0.437501 -0.125000 +v -0.012311 -0.437501 -0.125000 +v -0.036461 -0.437501 -0.120197 +v 0.059210 -0.437501 -0.110774 +v 0.012985 -0.468750 -0.131836 +v 0.038455 -0.468750 -0.126770 +v -0.012985 -0.468750 -0.131836 +v -0.059210 -0.437501 -0.110774 +v -0.038455 -0.468750 -0.126770 +v 0.079683 -0.437501 -0.097094 +v 0.062448 -0.468750 -0.116832 +v -0.079683 -0.437501 -0.097094 +v -0.062448 -0.468750 -0.116832 +v 0.097094 -0.437501 -0.079683 +v 0.084041 -0.468750 -0.102404 +v -0.097094 -0.437501 -0.079683 +v -0.084041 -0.468750 -0.102404 +v 0.110774 -0.437501 -0.059210 +v 0.102404 -0.468750 -0.084041 +v -0.110774 -0.437501 -0.059210 +v -0.102404 -0.468750 -0.084041 +v 0.120197 -0.437501 -0.036461 +v 0.116832 -0.468750 -0.062448 +v -0.120197 -0.437501 -0.036461 +v -0.116832 -0.468750 -0.062448 +v 0.125001 -0.437501 -0.012311 +v 0.126770 -0.468750 -0.038455 +v -0.125000 -0.437501 -0.012311 +v -0.126770 -0.468750 -0.038455 +v 0.125000 -0.437501 0.012312 +v 0.131837 -0.468750 -0.012985 +v -0.125000 -0.437501 0.012312 +v -0.131836 -0.468750 -0.012985 +v 0.120197 -0.437501 0.036461 +v 0.131836 -0.468750 0.012985 +v -0.120197 -0.437501 0.036461 +v -0.131836 -0.468750 0.012985 +v 0.110774 -0.437501 0.059210 +v 0.126770 -0.468750 0.038455 +v -0.110774 -0.437501 0.059210 +v -0.126770 -0.468750 0.038455 +v 0.097094 -0.437501 0.079683 +v 0.116832 -0.468750 0.062448 +v -0.097094 -0.437501 0.079683 +v -0.116832 -0.468750 0.062448 +v 0.079683 -0.437501 0.097094 +v 0.102404 -0.468750 0.084041 +v -0.079683 -0.437501 0.097094 +v -0.102404 -0.468750 0.084041 +v 0.059210 -0.437501 0.110774 +v 0.084041 -0.468750 0.102404 +v -0.059210 -0.437501 0.110774 +v -0.084041 -0.468750 0.102404 +v 0.036461 -0.437501 0.120197 +v 0.062448 -0.468750 0.116832 +v -0.036461 -0.437501 0.120197 +v -0.062448 -0.468750 0.116832 +v 0.012311 -0.437501 0.125001 +v 0.038455 -0.468750 0.126770 +v -0.012311 -0.437501 0.125001 +v -0.038455 -0.468750 0.126770 +v 0.012985 -0.468750 0.131837 +v -0.012985 -0.468750 0.131837 +v 0.130078 -0.460912 0.063644 +v 0.130078 -0.468749 0.063644 +v 0.139022 -0.468749 0.062467 +v 0.139022 -0.460912 0.062467 +v 0.142474 -0.460912 0.054133 +v 0.136982 -0.460912 0.046976 +v 0.128039 -0.460912 0.048153 +v 0.124587 -0.460912 0.056487 +v 0.124587 -0.468749 0.056487 +v 0.142474 -0.468749 0.054133 +v 0.136982 -0.468749 0.046976 +v 0.128039 -0.468749 0.048153 +v 0.136982 0.460914 0.046976 +v 0.136982 0.468751 0.046976 +v 0.142474 0.468751 0.054133 +v 0.142474 0.460914 0.054133 +v 0.139022 0.460914 0.062467 +v 0.130078 0.460914 0.063644 +v 0.124587 0.460914 0.056487 +v 0.128039 0.460914 0.048153 +v 0.128039 0.468751 0.048153 +v 0.139022 0.468751 0.062467 +v 0.130078 0.468751 0.063644 +v 0.124587 0.468751 0.056487 +v 0.046976 -0.460912 0.136982 +v 0.046976 -0.468749 0.136982 +v 0.054133 -0.468749 0.142474 +v 0.054133 -0.460912 0.142474 +v 0.062467 -0.460912 0.139022 +v 0.063644 -0.460912 0.130078 +v 0.056488 -0.460912 0.124587 +v 0.048154 -0.460912 0.128039 +v 0.048154 -0.468749 0.128039 +v 0.062467 -0.468749 0.139022 +v 0.063644 -0.468749 0.130078 +v 0.056488 -0.468749 0.124587 +v 0.063644 0.460914 0.130078 +v 0.063644 0.468751 0.130078 +v 0.062467 0.468751 0.139022 +v 0.062467 0.460914 0.139022 +v 0.054132 0.460914 0.142474 +v 0.046976 0.460914 0.136982 +v 0.048153 0.460914 0.128039 +v 0.056487 0.460914 0.124587 +v 0.056487 0.468751 0.124587 +v 0.054132 0.468751 0.142474 +v 0.046976 0.468751 0.136982 +v 0.048153 0.468751 0.128039 +v -0.063644 -0.460912 0.130078 +v -0.063644 -0.468749 0.130078 +v -0.062467 -0.468749 0.139022 +v -0.062467 -0.460912 0.139022 +v -0.054132 -0.460912 0.142474 +v -0.046976 -0.460912 0.136982 +v -0.048153 -0.460912 0.128039 +v -0.056487 -0.460912 0.124587 +v -0.056487 -0.468749 0.124587 +v -0.054132 -0.468749 0.142474 +v -0.046976 -0.468749 0.136982 +v -0.048153 -0.468749 0.128039 +v -0.046976 0.460914 0.136982 +v -0.046976 0.468751 0.136982 +v -0.054133 0.468751 0.142474 +v -0.054133 0.460914 0.142474 +v -0.062467 0.460914 0.139022 +v -0.063644 0.460914 0.130078 +v -0.056488 0.460914 0.124587 +v -0.048153 0.460914 0.128039 +v -0.048153 0.468751 0.128039 +v -0.062467 0.468751 0.139022 +v -0.063644 0.468751 0.130078 +v -0.056488 0.468751 0.124587 +v -0.136982 -0.460912 0.046976 +v -0.136982 -0.468749 0.046976 +v -0.142474 -0.468749 0.054133 +v -0.142474 -0.460912 0.054133 +v -0.139022 -0.460912 0.062467 +v -0.130078 -0.460912 0.063644 +v -0.124587 -0.460912 0.056488 +v -0.128039 -0.460912 0.048154 +v -0.128039 -0.468749 0.048154 +v -0.139022 -0.468749 0.062467 +v -0.130078 -0.468749 0.063644 +v -0.124587 -0.468749 0.056488 +v -0.130078 0.460914 0.063644 +v -0.130078 0.468751 0.063644 +v -0.139022 0.468751 0.062467 +v -0.139022 0.460914 0.062467 +v -0.142474 0.460914 0.054132 +v -0.136982 0.460914 0.046976 +v -0.128039 0.460914 0.048153 +v -0.124587 0.460914 0.056487 +v -0.124587 0.468751 0.056487 +v -0.142474 0.468751 0.054132 +v -0.136982 0.468751 0.046976 +v -0.128039 0.468751 0.048153 +v -0.130078 -0.460912 -0.063644 +v -0.130078 -0.468749 -0.063644 +v -0.139022 -0.468749 -0.062466 +v -0.139022 -0.460912 -0.062467 +v -0.142474 -0.460912 -0.054132 +v -0.136982 -0.460912 -0.046976 +v -0.128039 -0.460912 -0.048153 +v -0.124587 -0.460912 -0.056487 +v -0.124587 -0.468749 -0.056487 +v -0.142474 -0.468749 -0.054132 +v -0.136982 -0.468749 -0.046976 +v -0.128039 -0.468749 -0.048153 +v -0.136982 0.460914 -0.046976 +v -0.136982 0.468751 -0.046976 +v -0.142474 0.468751 -0.054133 +v -0.142474 0.460914 -0.054133 +v -0.139022 0.460914 -0.062467 +v -0.130078 0.460914 -0.063644 +v -0.124587 0.460914 -0.056488 +v -0.128039 0.460914 -0.048153 +v -0.128039 0.468751 -0.048153 +v -0.139022 0.468751 -0.062467 +v -0.130078 0.468751 -0.063644 +v -0.124587 0.468751 -0.056488 +v -0.046976 -0.460912 -0.136982 +v -0.046976 -0.468749 -0.136982 +v -0.054133 -0.468749 -0.142474 +v -0.054133 -0.460912 -0.142474 +v -0.062467 -0.460912 -0.139022 +v -0.063644 -0.460912 -0.130078 +v -0.056488 -0.460912 -0.124587 +v -0.048153 -0.460912 -0.128039 +v -0.048153 -0.468749 -0.128039 +v -0.062467 -0.468749 -0.139022 +v -0.063644 -0.468749 -0.130078 +v -0.056488 -0.468749 -0.124587 +v -0.063644 0.460914 -0.130078 +v -0.063644 0.468751 -0.130078 +v -0.062467 0.468751 -0.139022 +v -0.062467 0.460914 -0.139022 +v -0.054133 0.460914 -0.142474 +v -0.046976 0.460914 -0.136982 +v -0.048153 0.460914 -0.128039 +v -0.056487 0.460914 -0.124587 +v -0.056487 0.468751 -0.124587 +v -0.054133 0.468751 -0.142474 +v -0.046976 0.468751 -0.136982 +v -0.048153 0.468751 -0.128039 +v 0.063644 -0.460912 -0.130078 +v 0.063644 -0.468749 -0.130078 +v 0.062467 -0.468749 -0.139022 +v 0.062467 -0.460912 -0.139022 +v 0.054132 -0.460912 -0.142474 +v 0.046976 -0.460912 -0.136982 +v 0.048153 -0.460912 -0.128039 +v 0.056487 -0.460912 -0.124587 +v 0.056487 -0.468749 -0.124587 +v 0.054132 -0.468749 -0.142474 +v 0.046976 -0.468749 -0.136982 +v 0.048153 -0.468749 -0.128039 +v 0.046976 0.460914 -0.136982 +v 0.046976 0.468751 -0.136982 +v 0.054133 0.468751 -0.142474 +v 0.054133 0.460914 -0.142474 +v 0.062467 0.460914 -0.139022 +v 0.063644 0.460914 -0.130078 +v 0.056487 0.460914 -0.124587 +v 0.048153 0.460914 -0.128039 +v 0.048153 0.468751 -0.128039 +v 0.062467 0.468751 -0.139022 +v 0.063644 0.468751 -0.130078 +v 0.056487 0.468751 -0.124587 +v 0.136982 -0.460912 -0.046976 +v 0.136982 -0.468749 -0.046976 +v 0.142474 -0.468749 -0.054133 +v 0.142474 -0.460912 -0.054133 +v 0.139022 -0.460912 -0.062467 +v 0.130078 -0.460912 -0.063644 +v 0.124587 -0.460912 -0.056488 +v 0.128039 -0.460912 -0.048153 +v 0.128039 -0.468749 -0.048153 +v 0.139022 -0.468749 -0.062467 +v 0.130078 -0.468749 -0.063644 +v 0.124587 -0.468749 -0.056487 +v 0.130078 0.460914 -0.063644 +v 0.130078 0.468751 -0.063644 +v 0.139022 0.468751 -0.062467 +v 0.139022 0.460914 -0.062467 +v 0.142474 0.460914 -0.054133 +v 0.136982 0.460914 -0.046976 +v 0.128039 0.460914 -0.048153 +v 0.124587 0.460914 -0.056487 +v 0.124587 0.468751 -0.056487 +v 0.142474 0.468751 -0.054133 +v 0.136982 0.468751 -0.046976 +v 0.128039 0.468751 -0.048153 +v 0.097094 0.097094 -0.079683 +v 0.079683 0.079683 -0.097094 +v 0.059210 0.059210 -0.110774 +v 0.036461 0.036461 -0.120197 +v 0.012312 0.012311 -0.125000 +v 0.036461 -0.036461 -0.120197 +v -0.012312 0.012311 -0.125000 +v -0.036461 0.036461 -0.120197 +v -0.059210 0.059210 -0.110774 +v -0.079683 0.079683 -0.097094 +v -0.097094 0.097094 -0.079683 +v -0.110774 0.110774 -0.059210 +v -0.120197 0.120197 -0.036461 +v -0.125000 0.125000 -0.012311 +v -0.125001 0.125000 0.012311 +v -0.110774 0.110774 0.059210 +v -0.097094 0.097094 0.079683 +v -0.079683 0.079683 0.097094 +v -0.036461 0.036461 0.120197 +v 0.059210 -0.059210 -0.110774 +v 0.079683 -0.079683 -0.097094 +v 0.097094 -0.097094 -0.079683 +v 0.120197 -0.120197 -0.036461 +v -0.125001 -0.125001 -0.012311 +v 0.120197 -0.120197 0.036461 +v -0.110774 -0.110774 0.059210 +v -0.097094 -0.097094 0.079683 +v -0.079683 -0.079683 0.097094 +v 0.059210 -0.059210 0.110774 +v -0.036461 -0.036461 0.120197 +v -0.059210 -0.059210 -0.110774 +v -0.110774 -0.110774 -0.059210 +v -0.125000 -0.125000 0.012311 +v -0.120197 -0.120197 0.036461 +v -0.059210 -0.059210 0.110774 +v -0.012311 -0.012311 0.125000 +v -0.012311 0.012311 0.125000 +v -0.059210 0.059210 0.110774 +v 0.125000 0.125000 0.012311 +v 0.125001 -0.125000 0.012311 +v 0.120197 0.120197 0.036461 +v 0.097094 0.097094 0.079683 +v 0.059210 0.059210 0.110774 +v 0.036461 0.036461 0.120197 +v 0.012311 -0.012312 0.125000 +v 0.099603 0.500000 -0.121367 +v 0.074012 0.500000 -0.138467 +v 0.045577 0.500000 -0.150245 +v 0.015390 0.500000 -0.156250 +v -0.015389 0.500000 -0.156250 +v -0.045576 0.500000 -0.150245 +v -0.074012 0.500000 -0.138467 +v -0.099603 0.500000 -0.121367 +v -0.121367 0.500000 -0.099603 +v -0.150245 0.500000 -0.045576 +v -0.156250 0.500000 0.015389 +v -0.150245 0.500000 0.045576 +v -0.121367 0.500000 0.099603 +v -0.099603 0.500000 0.121367 +v -0.074012 0.500000 0.138467 +v -0.045576 0.500000 0.150245 +v -0.015389 0.500000 0.156250 +v 0.045576 0.500000 0.150245 +v 0.074012 0.500000 0.138467 +v 0.099603 0.500000 0.121367 +v 0.138467 0.500000 0.074012 +v 0.156250 0.500000 0.015389 +v 0.156250 0.500000 -0.015389 +v 0.150245 0.500000 -0.045576 +v 0.138467 0.500000 -0.074012 +v 0.121367 0.500000 -0.099603 +v -0.138466 0.500000 -0.074012 +v -0.156250 0.500000 -0.015389 +v -0.138467 0.500000 0.074012 +v 0.015389 0.500000 0.156250 +v 0.121367 0.500000 0.099603 +v 0.150245 0.500000 0.045576 +v 0.099603 0.468750 -0.121367 +v 0.121367 0.468750 -0.099603 +v 0.074012 0.468750 -0.138467 +v 0.045577 0.468750 -0.150245 +v 0.015390 0.468750 -0.156250 +v -0.015389 0.468750 -0.156250 +v -0.045576 0.468750 -0.150245 +v -0.074012 0.468750 -0.138467 +v -0.099603 0.468750 -0.121367 +v -0.121367 0.468750 -0.099603 +v -0.138466 0.468750 -0.074012 +v -0.150245 0.468750 -0.045576 +v -0.156250 0.468750 -0.015389 +v -0.156250 0.468750 0.015389 +v -0.150245 0.468750 0.045576 +v -0.138467 0.468750 0.074012 +v -0.121367 0.468750 0.099603 +v -0.099603 0.468750 0.121367 +v -0.074012 0.468750 0.138467 +v -0.045576 0.468750 0.150245 +v -0.015389 0.468750 0.156250 +v 0.015389 0.468750 0.156250 +v 0.074012 0.468750 0.138467 +v 0.045576 0.468750 0.150245 +v 0.099603 0.468750 0.121367 +v 0.121367 0.468750 0.099603 +v 0.138467 0.468750 0.074012 +v 0.150245 0.468750 0.045576 +v 0.156250 0.468750 -0.015389 +v 0.156250 0.468750 0.015389 +v 0.150245 0.468750 -0.045576 +v 0.138467 0.468750 -0.074012 +v -0.138466 -0.468750 -0.074012 +v -0.150245 -0.468750 -0.045576 +v -0.156249 -0.468750 -0.015389 +v -0.121367 -0.468750 -0.099603 +v -0.156249 -0.468750 0.015389 +v -0.074012 -0.468750 -0.138467 +v -0.099603 -0.468750 -0.121367 +v -0.121367 -0.500000 -0.099603 +v -0.138467 -0.500000 -0.074012 +v -0.150245 -0.500000 -0.045576 +v -0.156249 -0.500000 -0.015389 +v -0.156250 -0.500000 0.015389 +v -0.045576 -0.468750 -0.150245 +v -0.099603 -0.500000 -0.121367 +v -0.150245 -0.468750 0.045576 +v -0.150245 -0.500000 0.045576 +v -0.015389 -0.468750 -0.156250 +v -0.045576 -0.500000 -0.150245 +v -0.074012 -0.500000 -0.138467 +v -0.138467 -0.468750 0.074012 +v -0.138467 -0.500000 0.074012 +v 0.015389 -0.468750 -0.156250 +v -0.015389 -0.500000 -0.156250 +v -0.121367 -0.468750 0.099603 +v -0.121367 -0.500000 0.099603 +v 0.045576 -0.468750 -0.150245 +v 0.015389 -0.500000 -0.156250 +v -0.099603 -0.468750 0.121367 +v -0.099603 -0.500000 0.121367 +v 0.074012 -0.468750 -0.138467 +v 0.045576 -0.500000 -0.150245 +v -0.045576 -0.468750 0.150245 +v -0.074012 -0.468750 0.138467 +v -0.074012 -0.500000 0.138467 +v 0.099603 -0.468750 -0.121367 +v 0.074012 -0.500000 -0.138467 +v -0.015389 -0.468750 0.156250 +v -0.045576 -0.500000 0.150245 +v 0.121367 -0.468750 -0.099603 +v 0.099603 -0.500000 -0.121367 +v 0.015389 -0.468750 0.156250 +v -0.015389 -0.500000 0.156250 +v 0.138466 -0.468750 -0.074012 +v 0.121367 -0.500000 -0.099603 +v 0.045576 -0.468750 0.150245 +v 0.015389 -0.500000 0.156250 +v 0.150245 -0.468750 -0.045576 +v 0.138466 -0.500000 -0.074012 +v 0.074012 -0.468750 0.138467 +v 0.045576 -0.500000 0.150245 +v 0.156250 -0.468750 -0.015389 +v 0.150245 -0.500000 -0.045576 +v 0.156250 -0.500000 0.015389 +v 0.099603 -0.468750 0.121367 +v 0.074012 -0.500000 0.138467 +v 0.156250 -0.468750 0.015389 +v 0.156250 -0.500000 -0.015389 +v 0.138467 -0.500000 0.074012 +v 0.150245 -0.500000 0.045576 +v 0.121367 -0.500000 0.099603 +v 0.099603 -0.500000 0.121367 +v 0.150245 -0.468750 0.045576 +v 0.121367 -0.468750 0.099603 +v 0.138467 -0.468750 0.074012 +v 0.095821 -0.460912 0.108578 +v 0.095821 -0.468749 0.108578 +v 0.104534 -0.468749 0.110913 +v 0.104534 -0.460912 0.110913 +v 0.110913 -0.460912 0.104534 +v 0.108578 -0.460912 0.095821 +v 0.099865 -0.460912 0.093486 +v 0.093486 -0.460912 0.099865 +v 0.093486 -0.468749 0.099865 +v 0.110913 -0.468749 0.104534 +v 0.108578 -0.468749 0.095821 +v 0.099865 -0.468749 0.093486 +v 0.108578 0.460914 0.095821 +v 0.108578 0.468751 0.095821 +v 0.110913 0.468751 0.104534 +v 0.110913 0.460914 0.104534 +v 0.104534 0.460914 0.110913 +v 0.095821 0.460914 0.108578 +v 0.093486 0.460914 0.099865 +v 0.099865 0.460914 0.093486 +v 0.099865 0.468751 0.093486 +v 0.104534 0.468751 0.110913 +v 0.095821 0.468751 0.108578 +v 0.093486 0.468751 0.099865 +v -0.009021 -0.460912 0.144532 +v -0.009021 -0.468749 0.144532 +v -0.004510 -0.468749 0.152344 +v -0.004510 -0.460912 0.152344 +v 0.004511 -0.460912 0.152344 +v 0.009021 -0.460912 0.144532 +v 0.004510 -0.460912 0.136720 +v -0.004510 -0.460912 0.136720 +v -0.004510 -0.468749 0.136720 +v 0.004511 -0.468749 0.152344 +v 0.009021 -0.468749 0.144532 +v 0.004510 -0.468749 0.136720 +v 0.009021 0.460914 0.144532 +v 0.009021 0.468751 0.144532 +v 0.004510 0.468751 0.152344 +v 0.004510 0.460914 0.152344 +v -0.004510 0.460914 0.152344 +v -0.009021 0.460914 0.144532 +v -0.004510 0.460914 0.136720 +v 0.004510 0.460914 0.136720 +v 0.004510 0.468751 0.136720 +v -0.004510 0.468751 0.152344 +v -0.009021 0.468751 0.144532 +v -0.004510 0.468751 0.136720 +v -0.108578 -0.460912 0.095821 +v -0.108578 -0.468749 0.095821 +v -0.110913 -0.468749 0.104535 +v -0.110913 -0.460912 0.104534 +v -0.104534 -0.460912 0.110913 +v -0.095821 -0.460912 0.108578 +v -0.093486 -0.460912 0.099865 +v -0.099865 -0.460912 0.093486 +v -0.099865 -0.468749 0.093486 +v -0.104534 -0.468749 0.110913 +v -0.095821 -0.468749 0.108578 +v -0.093486 -0.468749 0.099865 +v -0.095821 0.460914 0.108578 +v -0.095821 0.468751 0.108578 +v -0.104534 0.468751 0.110913 +v -0.104534 0.460914 0.110913 +v -0.110913 0.460914 0.104534 +v -0.108578 0.460914 0.095821 +v -0.099865 0.460914 0.093486 +v -0.093486 0.460914 0.099865 +v -0.093486 0.468751 0.099865 +v -0.110913 0.468751 0.104534 +v -0.108578 0.468751 0.095821 +v -0.099865 0.468751 0.093486 +v -0.144532 -0.460912 -0.009021 +v -0.144532 -0.468749 -0.009021 +v -0.152344 -0.468749 -0.004510 +v -0.152344 -0.460912 -0.004510 +v -0.152344 -0.460912 0.004511 +v -0.144532 -0.460912 0.009021 +v -0.136720 -0.460912 0.004511 +v -0.136720 -0.460912 -0.004510 +v -0.136720 -0.468749 -0.004510 +v -0.152344 -0.468749 0.004511 +v -0.144532 -0.468749 0.009021 +v -0.136720 -0.468749 0.004511 +v -0.144532 0.460914 0.009021 +v -0.144532 0.468751 0.009021 +v -0.152344 0.468751 0.004510 +v -0.152344 0.460914 0.004510 +v -0.152344 0.460914 -0.004511 +v -0.144532 0.460914 -0.009021 +v -0.136720 0.460914 -0.004510 +v -0.136720 0.460914 0.004510 +v -0.136720 0.468751 0.004510 +v -0.152344 0.468751 -0.004511 +v -0.144532 0.468751 -0.009021 +v -0.136720 0.468751 -0.004510 +v -0.095821 -0.460912 -0.108578 +v -0.095821 -0.468749 -0.108578 +v -0.104534 -0.468749 -0.110913 +v -0.104534 -0.460912 -0.110913 +v -0.110913 -0.460912 -0.104534 +v -0.108578 -0.460912 -0.095821 +v -0.099865 -0.460912 -0.093486 +v -0.093486 -0.460912 -0.099865 +v -0.093486 -0.468749 -0.099865 +v -0.110913 -0.468749 -0.104534 +v -0.108578 -0.468749 -0.095821 +v -0.099865 -0.468749 -0.093486 +v -0.108578 0.460914 -0.095821 +v -0.108578 0.468751 -0.095821 +v -0.110913 0.468751 -0.104534 +v -0.110913 0.460914 -0.104534 +v -0.104534 0.460914 -0.110913 +v -0.095821 0.460914 -0.108578 +v -0.093486 0.460914 -0.099865 +v -0.099865 0.460914 -0.093486 +v -0.099865 0.468751 -0.093486 +v -0.104534 0.468751 -0.110913 +v -0.095821 0.468751 -0.108578 +v -0.093486 0.468751 -0.099865 +v 0.009021 -0.460912 -0.144532 +v 0.009021 -0.468749 -0.144532 +v 0.004510 -0.468749 -0.152344 +v 0.004510 -0.460912 -0.152344 +v -0.004510 -0.460912 -0.152344 +v -0.009021 -0.460912 -0.144532 +v -0.004510 -0.460912 -0.136720 +v 0.004510 -0.460912 -0.136720 +v 0.004510 -0.468749 -0.136720 +v -0.004510 -0.468749 -0.152344 +v -0.009021 -0.468749 -0.144532 +v -0.004510 -0.468749 -0.136720 +v -0.009021 0.460914 -0.144532 +v -0.009021 0.468751 -0.144532 +v -0.004510 0.468751 -0.152344 +v -0.004510 0.460914 -0.152344 +v 0.004510 0.460914 -0.152344 +v 0.009021 0.460914 -0.144532 +v 0.004510 0.460914 -0.136720 +v -0.004510 0.460914 -0.136720 +v -0.004510 0.468751 -0.136720 +v 0.004510 0.468751 -0.152344 +v 0.009021 0.468751 -0.144532 +v 0.004510 0.468751 -0.136720 +v 0.108578 -0.460912 -0.095821 +v 0.108578 -0.468749 -0.095821 +v 0.110913 -0.468749 -0.104534 +v 0.110913 -0.460912 -0.104534 +v 0.104534 -0.460912 -0.110913 +v 0.095821 -0.460912 -0.108578 +v 0.093486 -0.460912 -0.099865 +v 0.099865 -0.460912 -0.093486 +v 0.099865 -0.468749 -0.093486 +v 0.104534 -0.468749 -0.110913 +v 0.095821 -0.468749 -0.108578 +v 0.093486 -0.468749 -0.099865 +v 0.095821 0.460914 -0.108578 +v 0.095821 0.468751 -0.108578 +v 0.104534 0.468751 -0.110913 +v 0.104534 0.460914 -0.110913 +v 0.110913 0.460914 -0.104534 +v 0.108578 0.460914 -0.095821 +v 0.099865 0.460914 -0.093486 +v 0.093486 0.460914 -0.099865 +v 0.093486 0.468751 -0.099865 +v 0.110913 0.468751 -0.104534 +v 0.108578 0.468751 -0.095821 +v 0.099865 0.468751 -0.093486 +v 0.144532 -0.460912 0.009021 +v 0.144532 -0.468749 0.009021 +v 0.152344 -0.468749 0.004510 +v 0.152344 -0.460912 0.004510 +v 0.152344 -0.460912 -0.004510 +v 0.144532 -0.460912 -0.009021 +v 0.136720 -0.460912 -0.004510 +v 0.136720 -0.460912 0.004510 +v 0.136720 -0.468749 0.004510 +v 0.152344 -0.468749 -0.004510 +v 0.144532 -0.468749 -0.009021 +v 0.136720 -0.468749 -0.004510 +v 0.144532 0.460914 -0.009021 +v 0.144532 0.468751 -0.009021 +v 0.152344 0.468751 -0.004510 +v 0.152344 0.460914 -0.004510 +v 0.152344 0.460914 0.004510 +v 0.144532 0.460914 0.009021 +v 0.136720 0.460914 0.004510 +v 0.136720 0.460914 -0.004510 +v 0.136720 0.468751 -0.004510 +v 0.152344 0.468751 0.004510 +v 0.144532 0.468751 0.009021 +v 0.136720 0.468751 0.004510 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.9145 0.2850 +vt 0.9457 0.2723 +vt 1.0081 0.2851 +vt 0.9769 0.2723 +vt 0.8833 0.2970 +vt 1.0393 0.2971 +vt 0.8521 0.3078 +vt 1.0706 0.3080 +vt 0.6027 0.3168 +vt 0.5715 0.3076 +vt 0.9459 0.0196 +vt 0.9458 0.0339 +vt 0.9151 0.0339 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 0.9767 0.0339 +vt 1.0076 0.0195 +vt 1.0075 0.0339 +vt 0.3215 0.3169 +vt 0.3528 0.3076 +vt 0.8228 0.0338 +vt 0.8212 0.2146 +vt 0.7902 0.2074 +vt 0.7920 0.0337 +vt 0.8843 0.0339 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.0383 0.0339 +vt 1.1328 0.2072 +vt 1.1017 0.2145 +vt 1.0999 0.0340 +vt 1.1306 0.0342 +vt 0.7591 0.2024 +vt 0.7611 0.0336 +vt 0.8537 0.0195 +vt 0.8536 0.0338 +vt 1.0694 0.0196 +vt 1.0691 0.0339 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.7280 0.1998 +vt 0.7302 0.0335 +vt 0.8229 0.0194 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.6968 0.1998 +vt 0.6656 0.2023 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.7613 0.0193 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6344 0.2072 +vt 0.6031 0.2144 +vt 0.6066 0.0331 +vt 0.6375 0.0332 +vt 0.6995 0.0191 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 1.1018 0.3172 +vt 0.6686 0.0189 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4154 0.2848 +vt 0.4467 0.2720 +vt 0.4780 0.2720 +vt 0.5092 0.2848 +vt 0.5759 0.0186 +vt 0.5757 0.0330 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3842 0.2968 +vt 0.4780 0.2590 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.5093 0.2463 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3892 0.0320 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.4204 0.0322 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.4516 0.0324 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.9146 0.2466 +vt 0.9458 0.2593 +vt 1.0394 0.2346 +vt 1.0082 0.2466 +vt 1.0706 0.2237 +vt 0.8835 0.2346 +vt 1.0706 0.2237 +vt 1.0691 0.0339 +vt 1.0999 0.0340 +vt 1.1017 0.2145 +vt 0.4790 0.4981 +vt 0.4481 0.4981 +vt 0.4467 0.2720 +vt 0.4780 0.2720 +vt 0.9770 0.2593 +vt 0.5719 0.2235 +vt 0.3530 0.2232 +vt 0.4156 0.2462 +vt 0.3843 0.2341 +vt 0.5403 0.2968 +vt 0.5406 0.2343 +vt 0.4468 0.2590 +vt 0.8524 0.2238 +vt 0.8209 0.3169 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 1.1952 0.1995 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4468 0.2590 +vt 0.9769 0.2723 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.9457 0.2723 +vt 0.9145 0.2850 +vt 1.0081 0.2851 +vt 0.8833 0.2970 +vt 1.0393 0.2971 +vt 0.8521 0.3078 +vt 1.0706 0.3080 +vt 0.8209 0.3169 +vt 0.9459 0.0196 +vt 0.9458 0.0339 +vt 0.9151 0.0339 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 0.9767 0.0339 +vt 1.0076 0.0195 +vt 1.0075 0.0339 +vt 0.5715 0.3076 +vt 0.6027 0.3168 +vt 0.8228 0.0338 +vt 0.8212 0.2146 +vt 0.7902 0.2074 +vt 0.7920 0.0337 +vt 0.8843 0.0339 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.0383 0.0339 +vt 1.1328 0.2072 +vt 1.1306 0.0342 +vt 0.7591 0.2024 +vt 0.7611 0.0336 +vt 0.8537 0.0195 +vt 0.8536 0.0338 +vt 1.0694 0.0196 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.7280 0.1998 +vt 0.7302 0.0335 +vt 0.8229 0.0194 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.6968 0.1998 +vt 0.6656 0.2023 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.7613 0.0193 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6344 0.2072 +vt 0.6031 0.2144 +vt 0.6066 0.0331 +vt 0.6375 0.0332 +vt 0.6995 0.0191 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.3215 0.3169 +vt 0.3528 0.3076 +vt 0.6686 0.0189 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4154 0.2848 +vt 0.5092 0.2848 +vt 0.5759 0.0186 +vt 0.5757 0.0330 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3842 0.2968 +vt 0.4780 0.2590 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.5093 0.2463 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3892 0.0320 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.4204 0.0322 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.4516 0.0324 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.9146 0.2466 +vt 0.9458 0.2593 +vt 1.0394 0.2346 +vt 1.0082 0.2466 +vt 0.8835 0.2346 +vt 1.1018 0.3172 +vt 0.9770 0.2593 +vt 0.5719 0.2235 +vt 0.3530 0.2232 +vt 0.4156 0.2462 +vt 0.3843 0.2341 +vt 0.5403 0.2968 +vt 0.5406 0.2343 +vt 0.8524 0.2238 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 1.1952 0.1995 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vn -1.0000 -0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.6857 0.2113 -0.6965 +vn -0.6857 0.2113 -0.6965 +vn -0.6857 0.3431 -0.6419 +vn 0.6857 0.3431 -0.6419 +vn 0.6857 0.0713 -0.7244 +vn -0.6857 0.0713 -0.7244 +vn 0.6857 -0.0713 -0.7244 +vn -0.6857 -0.0713 -0.7244 +vn 0.6857 -0.2113 -0.6965 +vn -0.6857 -0.2113 -0.6965 +vn 0.6857 -0.3431 -0.6419 +vn -0.6857 -0.3431 -0.6419 +vn 0.6857 -0.4617 -0.5626 +vn -0.6857 -0.4617 -0.5626 +vn 0.6857 -0.5626 -0.4617 +vn -0.6857 -0.5626 -0.4617 +vn 0.6857 -0.6419 -0.3431 +vn -0.6857 -0.6419 -0.3431 +vn 0.6857 -0.6965 -0.2113 +vn -0.6857 -0.6965 -0.2113 +vn 0.6857 -0.7244 -0.0713 +vn -0.6857 -0.7244 -0.0713 +vn 0.6857 -0.7244 0.0713 +vn -0.6857 -0.7244 0.0713 +vn 0.6857 -0.6965 0.2113 +vn -0.6857 -0.6965 0.2113 +vn 0.6857 -0.6419 0.3431 +vn -0.6857 -0.6419 0.3431 +vn 0.6857 -0.5626 0.4617 +vn -0.6857 -0.5626 0.4617 +vn 0.6857 -0.4617 0.5626 +vn -0.6857 -0.4617 0.5626 +vn 0.6857 -0.3431 0.6419 +vn -0.6857 -0.3431 0.6419 +vn 0.6857 -0.2113 0.6965 +vn -0.6857 -0.2113 0.6965 +vn 0.6857 -0.0713 0.7244 +vn -0.6857 -0.0713 0.7244 +vn 0.6857 0.0713 0.7244 +vn -0.6857 0.0713 0.7244 +vn 0.6857 0.2113 0.6965 +vn -0.6857 0.2113 0.6965 +vn 0.6857 0.4617 0.5626 +vn -0.6857 0.4617 0.5626 +vn -0.6857 0.3431 0.6419 +vn 0.6857 0.3431 0.6419 +vn 0.6857 0.5626 0.4617 +vn -0.6857 0.5626 0.4617 +vn 0.6857 0.6419 0.3431 +vn -0.6857 0.6419 0.3431 +vn 0.6857 0.6965 0.2113 +vn -0.6857 0.6965 0.2113 +vn 0.6857 0.7244 0.0713 +vn -0.6857 0.7244 0.0713 +vn 0.6857 0.6965 -0.2113 +vn -0.6857 0.6965 -0.2113 +vn -0.6857 0.7244 -0.0713 +vn 0.6857 0.7244 -0.0713 +vn 0.6857 0.6419 -0.3431 +vn -0.6857 0.6419 -0.3431 +vn 0.6857 0.5626 -0.4617 +vn -0.6857 0.5626 -0.4617 +vn 0.2147 0.8614 0.4604 +vn 0.1087 0.8767 0.4686 +vn 0.1087 0.9513 0.2886 +vn 0.2147 0.9346 0.2835 +vn 0.2147 0.9720 0.0957 +vn 0.1087 0.9893 0.0974 +vn 0.2147 0.9720 -0.0957 +vn 0.1087 0.9893 -0.0974 +vn 0.2147 0.9346 -0.2835 +vn 0.1087 0.9513 -0.2886 +vn 0.2147 0.8614 -0.4604 +vn 0.1087 0.8767 -0.4686 +vn 0.2147 0.7550 -0.6196 +vn 0.1087 0.7684 -0.6306 +vn 0.1087 0.6306 -0.7684 +vn 0.2147 0.6196 -0.7550 +vn 0.2147 0.4604 -0.8614 +vn 0.1087 0.4686 -0.8767 +vn 0.2147 0.2835 -0.9346 +vn 0.1087 0.2886 -0.9513 +vn 0.2147 0.0957 -0.9720 +vn 0.1087 0.0974 -0.9893 +vn 0.1087 -0.0974 -0.9893 +vn 0.2147 -0.0957 -0.9720 +vn 0.1087 -0.2886 -0.9513 +vn 0.2147 -0.2835 -0.9346 +vn 0.2147 -0.4604 -0.8614 +vn 0.1087 -0.4686 -0.8767 +vn 0.1087 -0.6306 -0.7684 +vn 0.2147 -0.6196 -0.7550 +vn 0.1087 -0.7684 -0.6306 +vn 0.2147 -0.7550 -0.6196 +vn 0.2147 -0.8614 -0.4604 +vn 0.1087 -0.8767 -0.4686 +vn 0.1087 -0.9513 -0.2886 +vn 0.2147 -0.9346 -0.2835 +vn 0.2147 -0.9720 -0.0957 +vn 0.1087 -0.9893 -0.0974 +vn 0.1087 -0.9893 0.0974 +vn 0.2147 -0.9720 0.0957 +vn 0.2147 -0.9346 0.2835 +vn 0.1087 -0.9513 0.2886 +vn 0.1087 -0.8767 0.4686 +vn 0.2147 -0.8614 0.4604 +vn 0.1087 -0.7684 0.6306 +vn 0.2147 -0.7550 0.6196 +vn 0.1087 -0.6306 0.7684 +vn 0.2147 -0.6196 0.7550 +vn 0.1087 -0.4686 0.8767 +vn 0.2147 -0.4604 0.8614 +vn 0.1087 -0.2886 0.9513 +vn 0.2147 -0.2835 0.9346 +vn 0.1087 -0.0974 0.9893 +vn 0.2147 -0.0957 0.9720 +vn 0.2147 0.2835 0.9346 +vn 0.2147 0.0957 0.9720 +vn 0.1087 0.0974 0.9893 +vn 0.1087 0.2886 0.9513 +vn 0.2147 0.6196 0.7550 +vn 0.2147 0.4604 0.8614 +vn 0.1087 0.4686 0.8767 +vn 0.1087 0.6306 0.7684 +vn 0.2147 0.7550 0.6196 +vn 0.1087 0.7684 0.6306 +vn -0.1243 0.1243 -0.9844 +vn -0.0247 0.0247 -0.9994 +vn -0.1243 -0.1243 -0.9844 +vn -0.0247 -0.0247 -0.9994 +vn -0.2267 0.2267 -0.9472 +vn -0.2267 -0.2267 -0.9472 +vn -0.3333 0.3333 -0.8819 +vn -0.3333 -0.3333 -0.8819 +vn -0.4431 0.4431 0.7793 +vn -0.3333 0.3333 0.8819 +vn -0.2147 0.0957 -0.9720 +vn -0.1087 0.0974 -0.9893 +vn -0.1087 0.2886 -0.9513 +vn -0.2147 0.2835 -0.9346 +vn -0.2147 -0.0957 -0.9720 +vn -0.1087 -0.0974 -0.9893 +vn -0.2147 -0.2835 -0.9346 +vn -0.1087 -0.2886 -0.9513 +vn -0.4431 -0.4431 0.7793 +vn -0.3333 -0.3333 0.8819 +vn -0.1087 0.7684 -0.6306 +vn 0.4431 0.4431 -0.7793 +vn 0.5510 0.5510 -0.6267 +vn -0.1087 0.8767 -0.4686 +vn -0.1087 0.4686 -0.8767 +vn -0.2147 0.4604 -0.8614 +vn -0.2147 -0.4604 -0.8614 +vn -0.1087 -0.4686 -0.8767 +vn 0.5510 -0.5510 -0.6267 +vn 0.4431 -0.4431 -0.7793 +vn -0.1087 -0.7684 -0.6306 +vn -0.1087 -0.8767 -0.4686 +vn 0.6437 0.6437 -0.4139 +vn -0.1087 0.9513 -0.2886 +vn -0.2147 0.6196 -0.7550 +vn -0.1087 0.6306 -0.7684 +vn -0.2147 -0.6196 -0.7550 +vn -0.1087 -0.6306 -0.7684 +vn 0.6437 -0.6437 -0.4139 +vn -0.1087 -0.9513 -0.2886 +vn 0.6995 0.6995 -0.1458 +vn -0.1087 0.9893 -0.0974 +vn -0.2147 0.7550 -0.6196 +vn -0.2147 -0.7550 -0.6196 +vn -0.2147 0.8614 -0.4604 +vn -0.2147 -0.8614 -0.4604 +vn 0.6995 -0.6995 0.1458 +vn 0.6995 -0.6995 -0.1458 +vn -0.1087 -0.9893 -0.0974 +vn -0.1087 -0.9893 0.0974 +vn 0.6995 0.6995 0.1458 +vn 0.6437 0.6437 0.4139 +vn -0.1087 0.9513 0.2886 +vn -0.1087 0.9893 0.0974 +vn -0.2147 0.9346 -0.2835 +vn -0.2147 -0.9346 -0.2835 +vn -0.2147 0.9720 -0.0957 +vn -0.2147 -0.9720 -0.0957 +vn 0.5510 -0.5510 0.6267 +vn 0.6437 -0.6437 0.4139 +vn -0.1087 -0.9513 0.2886 +vn -0.1087 -0.8767 0.4686 +vn 0.5510 0.5510 0.6267 +vn 0.4431 0.4431 0.7793 +vn -0.1087 0.7684 0.6306 +vn -0.1087 0.8767 0.4686 +vn -0.2147 0.9720 0.0957 +vn -0.2147 -0.9720 0.0957 +vn -0.6857 0.4617 -0.5626 +vn 0.6857 0.4617 -0.5626 +vn 0.4431 -0.4431 0.7793 +vn -0.1087 -0.7684 0.6306 +vn -0.4431 -0.4431 -0.7793 +vn -0.2147 0.9346 0.2835 +vn -0.2147 -0.9346 0.2835 +vn -0.2147 0.8614 0.4604 +vn -0.2147 -0.8614 0.4604 +vn -0.2147 0.7550 0.6196 +vn -0.2147 -0.7550 0.6196 +vn -0.1243 -0.1243 0.9844 +vn -0.0247 -0.0247 0.9994 +vn -0.0247 0.0247 0.9994 +vn -0.1243 0.1243 0.9844 +vn -0.2147 0.6196 0.7550 +vn -0.1087 0.6306 0.7684 +vn -0.2147 -0.6196 0.7550 +vn -0.1087 -0.6306 0.7684 +vn -0.2267 -0.2267 0.9472 +vn 0.0247 0.0247 0.9994 +vn -0.1087 0.0974 0.9893 +vn -0.1087 0.2886 0.9513 +vn 0.1243 0.1243 0.9844 +vn -0.2147 0.4604 0.8614 +vn -0.1087 0.4686 0.8767 +vn -0.2147 -0.4604 0.8614 +vn -0.1087 -0.4686 0.8767 +vn -0.2147 0.2835 0.9346 +vn -0.2147 -0.2835 0.9346 +vn -0.1087 -0.2886 0.9513 +vn -0.2147 0.0957 0.9720 +vn -0.2147 -0.0957 0.9720 +vn -0.1087 -0.0974 0.9893 +vn -0.6100 -0.3032 0.7321 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.6088 0.7933 +vn -0.6100 0.4824 0.6287 +vn -0.6100 -0.7856 0.1034 +vn 0.0000 -0.9914 0.1305 +vn 0.0000 0.9914 -0.1305 +vn -0.6100 0.7856 -0.1034 +vn 0.0000 0.3827 -0.9239 +vn -0.6100 0.3032 -0.7321 +vn 0.0000 -0.6088 -0.7933 +vn -0.6100 -0.4824 -0.6287 +vn 0.6100 0.3032 -0.7321 +vn 0.6100 0.7856 -0.1034 +vn 0.6100 -0.4824 -0.6287 +vn 0.6100 0.4824 0.6287 +vn 0.6100 -0.3032 0.7321 +vn 0.6100 -0.7856 0.1034 +vn -0.6100 -0.7321 0.3032 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.1305 0.9914 +vn -0.6100 -0.1034 0.7856 +vn -0.6100 -0.6287 -0.4824 +vn 0.0000 -0.7933 -0.6088 +vn 0.0000 0.7933 0.6088 +vn -0.6100 0.6287 0.4824 +vn 0.0000 0.9239 -0.3827 +vn -0.6100 0.7321 -0.3032 +vn 0.0000 0.1305 -0.9914 +vn -0.6100 0.1034 -0.7856 +vn 0.6100 0.7321 -0.3032 +vn 0.6100 0.6287 0.4824 +vn 0.6100 0.1034 -0.7856 +vn 0.6100 -0.1034 0.7856 +vn 0.6100 -0.7321 0.3032 +vn 0.6100 -0.6287 -0.4824 +vn -0.6100 -0.7321 -0.3032 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 -0.7933 0.6088 +vn -0.6100 -0.6287 0.4824 +vn -0.6100 -0.1034 -0.7856 +vn 0.0000 -0.1305 -0.9914 +vn 0.0000 0.1305 0.9914 +vn -0.6100 0.1034 0.7856 +vn 0.0000 0.9239 0.3827 +vn -0.6100 0.7321 0.3032 +vn 0.0000 0.7933 -0.6088 +vn -0.6100 0.6287 -0.4824 +vn 0.6100 0.7321 0.3032 +vn 0.6100 0.1034 0.7856 +vn 0.6100 0.6287 -0.4824 +vn 0.6100 -0.6287 0.4824 +vn 0.6100 -0.7321 -0.3032 +vn 0.6100 -0.1034 -0.7856 +vn -0.6100 -0.3032 -0.7321 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.9914 -0.1305 +vn -0.6100 -0.7856 -0.1034 +vn -0.6100 0.4824 -0.6287 +vn 0.0000 0.6088 -0.7933 +vn 0.0000 -0.6088 0.7933 +vn -0.6100 -0.4824 0.6287 +vn 0.0000 0.3827 0.9239 +vn -0.6100 0.3032 0.7321 +vn 0.0000 0.9914 0.1305 +vn -0.6100 0.7856 0.1034 +vn 0.6100 0.3032 0.7321 +vn 0.6100 -0.4824 0.6287 +vn 0.6100 0.7856 0.1034 +vn 0.6100 -0.7856 -0.1034 +vn 0.6100 -0.3032 -0.7321 +vn 0.6100 0.4824 -0.6287 +vn 0.1243 0.1243 -0.9844 +vn 0.0247 0.0247 -0.9994 +vn 0.2267 -0.2267 -0.9472 +vn 0.1243 -0.1243 -0.9844 +vn 0.3333 -0.3333 -0.8819 +vn 0.2267 0.2267 -0.9472 +vn -0.6306 0.1087 -0.7684 +vn -0.7684 0.1087 -0.6306 +vn 0.0974 -0.1087 0.9893 +vn -0.0974 -0.1087 0.9893 +vn 0.0247 -0.0247 -0.9994 +vn 0.3333 0.3333 0.8819 +vn 0.3333 -0.3333 0.8819 +vn 0.1243 -0.1243 0.9844 +vn 0.2267 -0.2267 0.9472 +vn -0.2267 0.2267 0.9472 +vn 0.2267 0.2267 0.9472 +vn 0.0247 -0.0247 0.9994 +vn 0.3333 0.3333 -0.8819 +vn -0.4431 0.4431 -0.7793 +vn -0.5510 0.5510 0.6267 +vn -0.6437 0.6437 0.4139 +vn -0.6995 0.6995 0.1458 +vn -0.6995 0.6995 -0.1458 +vn -0.6437 0.6437 -0.4139 +vn -0.5510 0.5510 -0.6267 +vn -0.5510 -0.5510 -0.6267 +vn -0.6437 -0.6437 -0.4139 +vn -0.6995 -0.6995 -0.1458 +vn -0.6995 -0.6995 0.1458 +vn -0.6437 -0.6437 0.4139 +vn -0.5510 -0.5510 0.6267 +vn -0.6100 -0.5603 0.5603 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.2588 0.9659 +vn -0.6100 0.2051 0.7654 +vn -0.6100 -0.7654 -0.2051 +vn 0.0000 -0.9659 -0.2588 +vn 0.0000 0.9659 0.2588 +vn -0.6100 0.7654 0.2051 +vn 0.0000 0.7071 -0.7071 +vn -0.6100 0.5603 -0.5603 +vn 0.0000 -0.2588 -0.9659 +vn -0.6100 -0.2051 -0.7654 +vn 0.6100 0.5603 -0.5603 +vn 0.6100 0.7654 0.2051 +vn 0.6100 -0.2051 -0.7654 +vn 0.6100 0.2051 0.7654 +vn 0.6100 -0.5603 0.5603 +vn 0.6100 -0.7654 -0.2051 +vn -0.6100 -0.7924 0.0000 +vn 0.0000 -0.5000 0.8660 +vn -0.6100 -0.3962 0.6862 +vn -0.6100 -0.3962 -0.6862 +vn 0.0000 -0.5000 -0.8660 +vn 0.0000 0.5000 0.8660 +vn -0.6100 0.3962 0.6862 +vn -0.6100 0.7924 0.0000 +vn 0.0000 0.5000 -0.8660 +vn -0.6100 0.3962 -0.6862 +vn 0.6100 0.7924 0.0000 +vn 0.6100 0.3962 0.6862 +vn 0.6100 0.3962 -0.6862 +vn 0.6100 -0.3962 0.6862 +vn 0.6100 -0.7924 0.0000 +vn 0.6100 -0.3962 -0.6862 +vn -0.6100 -0.5603 -0.5603 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.9659 0.2588 +vn -0.6100 -0.7654 0.2051 +vn -0.6100 0.2051 -0.7654 +vn 0.0000 0.2588 -0.9659 +vn 0.0000 -0.2588 0.9659 +vn -0.6100 -0.2051 0.7654 +vn 0.0000 0.7071 0.7071 +vn -0.6100 0.5603 0.5603 +vn 0.0000 0.9659 -0.2588 +vn -0.6100 0.7654 -0.2051 +vn 0.6100 0.5603 0.5603 +vn 0.6100 -0.2051 0.7654 +vn 0.6100 0.7654 -0.2051 +vn 0.6100 -0.7654 0.2051 +vn 0.6100 -0.5603 -0.5603 +vn 0.6100 0.2051 -0.7654 +vn -0.6100 0.0000 -0.7924 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.8660 -0.5000 +vn -0.6100 -0.6862 -0.3962 +vn -0.6100 0.6862 -0.3962 +vn 0.0000 0.8660 -0.5000 +vn 0.0000 -0.8660 0.5000 +vn -0.6100 -0.6862 0.3962 +vn 0.0000 0.0000 1.0000 +vn -0.6100 0.0000 0.7924 +vn 0.0000 0.8660 0.5000 +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.6100 -0.6862 -0.3962 +vn 0.6100 0.0000 -0.7924 +vn 0.6100 0.6862 -0.3962 +vn 0.2113 -0.6857 -0.6965 +vn 0.2113 0.6857 -0.6965 +vn 0.3431 0.6857 -0.6419 +vn 0.3431 -0.6857 -0.6419 +vn 0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn -0.0713 -0.6857 -0.7244 +vn -0.0713 0.6857 -0.7244 +vn -0.2113 -0.6857 -0.6965 +vn -0.2113 0.6857 -0.6965 +vn -0.3431 -0.6857 -0.6419 +vn -0.3431 0.6857 -0.6419 +vn -0.4617 -0.6857 -0.5626 +vn -0.4617 0.6857 -0.5626 +vn -0.5626 -0.6857 -0.4617 +vn -0.5626 0.6857 -0.4617 +vn -0.6419 -0.6857 -0.3431 +vn -0.6419 0.6857 -0.3431 +vn -0.6965 -0.6857 -0.2113 +vn -0.6965 0.6857 -0.2113 +vn -0.7244 -0.6857 -0.0713 +vn -0.7244 0.6857 -0.0713 +vn -0.7244 -0.6857 0.0713 +vn -0.7244 0.6857 0.0713 +vn -0.6965 -0.6857 0.2113 +vn -0.6965 0.6857 0.2113 +vn -0.6419 -0.6857 0.3431 +vn -0.6419 0.6857 0.3431 +vn -0.5626 -0.6857 0.4617 +vn -0.5626 0.6857 0.4617 +vn -0.4617 -0.6857 0.5626 +vn -0.4617 0.6857 0.5626 +vn -0.3431 -0.6857 0.6419 +vn -0.3431 0.6857 0.6419 +vn -0.2113 -0.6857 0.6965 +vn -0.2113 0.6857 0.6965 +vn -0.0713 -0.6857 0.7244 +vn -0.0713 0.6857 0.7244 +vn 0.0713 -0.6857 0.7244 +vn 0.0713 0.6857 0.7244 +vn 0.2113 -0.6857 0.6965 +vn 0.2113 0.6857 0.6965 +vn 0.4617 -0.6857 0.5626 +vn 0.4617 0.6857 0.5626 +vn 0.3431 0.6857 0.6419 +vn 0.3431 -0.6857 0.6419 +vn 0.5626 -0.6857 0.4617 +vn 0.5626 0.6857 0.4617 +vn 0.6419 -0.6857 0.3431 +vn 0.6419 0.6857 0.3431 +vn 0.6965 -0.6857 0.2113 +vn 0.6965 0.6857 0.2113 +vn 0.7244 -0.6857 0.0713 +vn 0.7244 0.6857 0.0713 +vn 0.6965 -0.6857 -0.2113 +vn 0.6965 0.6857 -0.2113 +vn 0.7244 0.6857 -0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.6419 -0.6857 -0.3431 +vn 0.6419 0.6857 -0.3431 +vn 0.5626 -0.6857 -0.4617 +vn 0.5626 0.6857 -0.4617 +vn 0.8614 -0.2147 0.4604 +vn 0.8767 -0.1087 0.4686 +vn 0.9513 -0.1087 0.2886 +vn 0.9346 -0.2147 0.2835 +vn 0.9720 -0.2147 0.0957 +vn 0.9893 -0.1087 0.0974 +vn 0.9720 -0.2147 -0.0957 +vn 0.9893 -0.1087 -0.0974 +vn 0.9346 -0.2147 -0.2835 +vn 0.9513 -0.1087 -0.2886 +vn 0.8614 -0.2147 -0.4604 +vn 0.8767 -0.1087 -0.4686 +vn 0.7550 -0.2147 -0.6196 +vn 0.7684 -0.1087 -0.6306 +vn 0.6306 -0.1087 -0.7684 +vn 0.6196 -0.2147 -0.7550 +vn 0.4604 -0.2147 -0.8614 +vn 0.4686 -0.1087 -0.8767 +vn 0.2835 -0.2147 -0.9346 +vn 0.2886 -0.1087 -0.9513 +vn 0.0957 -0.2147 -0.9720 +vn 0.0974 -0.1087 -0.9893 +vn -0.0974 -0.1087 -0.9893 +vn -0.0957 -0.2147 -0.9720 +vn -0.2886 -0.1087 -0.9513 +vn -0.2835 -0.2147 -0.9346 +vn -0.4604 -0.2147 -0.8614 +vn -0.4686 -0.1087 -0.8767 +vn -0.6306 -0.1087 -0.7684 +vn -0.6196 -0.2147 -0.7550 +vn -0.7684 -0.1087 -0.6306 +vn -0.7550 -0.2147 -0.6196 +vn -0.8614 -0.2147 -0.4604 +vn -0.8767 -0.1087 -0.4686 +vn -0.9513 -0.1087 -0.2886 +vn -0.9346 -0.2147 -0.2835 +vn -0.9720 -0.2147 -0.0957 +vn -0.9893 -0.1087 -0.0974 +vn -0.9893 -0.1087 0.0974 +vn -0.9720 -0.2147 0.0957 +vn -0.9346 -0.2147 0.2835 +vn -0.9513 -0.1087 0.2886 +vn -0.8767 -0.1087 0.4686 +vn -0.8614 -0.2147 0.4604 +vn -0.7684 -0.1087 0.6306 +vn -0.7550 -0.2147 0.6196 +vn -0.6306 -0.1087 0.7684 +vn -0.6196 -0.2147 0.7550 +vn -0.4686 -0.1087 0.8767 +vn -0.4604 -0.2147 0.8614 +vn -0.2886 -0.1087 0.9513 +vn -0.2835 -0.2147 0.9346 +vn -0.0957 -0.2147 0.9720 +vn 0.2835 -0.2147 0.9346 +vn 0.0957 -0.2147 0.9720 +vn 0.2886 -0.1087 0.9513 +vn 0.6196 -0.2147 0.7550 +vn 0.4604 -0.2147 0.8614 +vn 0.4686 -0.1087 0.8767 +vn 0.6306 -0.1087 0.7684 +vn 0.7550 -0.2147 0.6196 +vn 0.7684 -0.1087 0.6306 +vn 0.0957 0.2147 -0.9720 +vn 0.0974 0.1087 -0.9893 +vn 0.2886 0.1087 -0.9513 +vn 0.2835 0.2147 -0.9346 +vn -0.0957 0.2147 -0.9720 +vn -0.0974 0.1087 -0.9893 +vn -0.2835 0.2147 -0.9346 +vn -0.2886 0.1087 -0.9513 +vn 0.7684 0.1087 -0.6306 +vn 0.8767 0.1087 -0.4686 +vn 0.4686 0.1087 -0.8767 +vn 0.4604 0.2147 -0.8614 +vn -0.4604 0.2147 -0.8614 +vn -0.4686 0.1087 -0.8767 +vn -0.8767 0.1087 -0.4686 +vn 0.9513 0.1087 -0.2886 +vn 0.6196 0.2147 -0.7550 +vn 0.6306 0.1087 -0.7684 +vn -0.6196 0.2147 -0.7550 +vn -0.9513 0.1087 -0.2886 +vn 0.9893 0.1087 -0.0974 +vn 0.7550 0.2147 -0.6196 +vn -0.7550 0.2147 -0.6196 +vn 0.8614 0.2147 -0.4604 +vn -0.8614 0.2147 -0.4604 +vn -0.9893 0.1087 -0.0974 +vn -0.9893 0.1087 0.0974 +vn 0.9513 0.1087 0.2886 +vn 0.9893 0.1087 0.0974 +vn 0.9346 0.2147 -0.2835 +vn -0.9346 0.2147 -0.2835 +vn 0.9720 0.2147 -0.0957 +vn -0.9720 0.2147 -0.0957 +vn -0.9513 0.1087 0.2886 +vn -0.8767 0.1087 0.4686 +vn 0.7684 0.1087 0.6306 +vn 0.8767 0.1087 0.4686 +vn 0.9720 0.2147 0.0957 +vn -0.9720 0.2147 0.0957 +vn 0.4617 0.6857 -0.5626 +vn 0.4617 -0.6857 -0.5626 +vn -0.7684 0.1087 0.6306 +vn 0.9346 0.2147 0.2835 +vn -0.9346 0.2147 0.2835 +vn 0.8614 0.2147 0.4604 +vn -0.8614 0.2147 0.4604 +vn 0.7550 0.2147 0.6196 +vn -0.7550 0.2147 0.6196 +vn 0.6196 0.2147 0.7550 +vn 0.6306 0.1087 0.7684 +vn -0.6196 0.2147 0.7550 +vn -0.6306 0.1087 0.7684 +vn 0.0974 0.1087 0.9893 +vn 0.2886 0.1087 0.9513 +vn 0.4604 0.2147 0.8614 +vn 0.4686 0.1087 0.8767 +vn -0.4604 0.2147 0.8614 +vn -0.4686 0.1087 0.8767 +vn 0.2835 0.2147 0.9346 +vn -0.2835 0.2147 0.9346 +vn -0.2886 0.1087 0.9513 +vn 0.0957 0.2147 0.9720 +vn -0.0957 0.2147 0.9720 +vn -0.0974 0.1087 0.9893 +vn -0.3032 0.6100 0.7321 +vn -0.3827 0.0000 0.9239 +vn 0.6088 0.0000 0.7933 +vn 0.4824 0.6100 0.6287 +vn -0.7856 0.6100 0.1034 +vn -0.9914 0.0000 0.1305 +vn 0.9914 0.0000 -0.1305 +vn 0.7856 0.6100 -0.1034 +vn 0.3827 0.0000 -0.9239 +vn 0.3032 0.6100 -0.7321 +vn -0.6088 0.0000 -0.7933 +vn -0.4824 0.6100 -0.6287 +vn 0.3032 -0.6100 -0.7321 +vn 0.7856 -0.6100 -0.1034 +vn -0.4824 -0.6100 -0.6287 +vn 0.4824 -0.6100 0.6287 +vn -0.3032 -0.6100 0.7321 +vn -0.7856 -0.6100 0.1034 +vn -0.7321 0.6100 0.3032 +vn -0.9239 0.0000 0.3827 +vn -0.1305 0.0000 0.9914 +vn -0.1034 0.6100 0.7856 +vn -0.6287 0.6100 -0.4824 +vn -0.7933 0.0000 -0.6088 +vn 0.7933 0.0000 0.6088 +vn 0.6287 0.6100 0.4824 +vn 0.9239 0.0000 -0.3827 +vn 0.7321 0.6100 -0.3032 +vn 0.1305 0.0000 -0.9914 +vn 0.1034 0.6100 -0.7856 +vn 0.7321 -0.6100 -0.3032 +vn 0.6287 -0.6100 0.4824 +vn 0.1034 -0.6100 -0.7856 +vn -0.1034 -0.6100 0.7856 +vn -0.7321 -0.6100 0.3032 +vn -0.6287 -0.6100 -0.4824 +vn -0.7321 0.6100 -0.3032 +vn -0.9239 0.0000 -0.3827 +vn -0.7933 0.0000 0.6088 +vn -0.6287 0.6100 0.4824 +vn -0.1034 0.6100 -0.7856 +vn -0.1305 0.0000 -0.9914 +vn 0.1305 0.0000 0.9914 +vn 0.1034 0.6100 0.7856 +vn 0.9239 0.0000 0.3827 +vn 0.7321 0.6100 0.3032 +vn 0.7933 0.0000 -0.6088 +vn 0.6287 0.6100 -0.4824 +vn 0.7321 -0.6100 0.3032 +vn 0.1034 -0.6100 0.7856 +vn 0.6287 -0.6100 -0.4824 +vn -0.6287 -0.6100 0.4824 +vn -0.7321 -0.6100 -0.3032 +vn -0.1034 -0.6100 -0.7856 +vn -0.3032 0.6100 -0.7321 +vn -0.3827 0.0000 -0.9239 +vn -0.9914 0.0000 -0.1305 +vn -0.7856 0.6100 -0.1034 +vn 0.4824 0.6100 -0.6287 +vn 0.6088 0.0000 -0.7933 +vn -0.6088 0.0000 0.7933 +vn -0.4824 0.6100 0.6287 +vn 0.3827 0.0000 0.9239 +vn 0.3032 0.6100 0.7321 +vn 0.9914 0.0000 0.1305 +vn 0.7856 0.6100 0.1034 +vn 0.3032 -0.6100 0.7321 +vn -0.4824 -0.6100 0.6287 +vn 0.7856 -0.6100 0.1034 +vn -0.7856 -0.6100 -0.1034 +vn -0.3032 -0.6100 -0.7321 +vn 0.4824 -0.6100 -0.6287 +vn -0.5603 0.6100 0.5603 +vn -0.7071 0.0000 0.7071 +vn 0.2588 0.0000 0.9659 +vn 0.2051 0.6100 0.7654 +vn -0.7654 0.6100 -0.2051 +vn -0.9659 0.0000 -0.2588 +vn 0.9659 0.0000 0.2588 +vn 0.7654 0.6100 0.2051 +vn 0.7071 0.0000 -0.7071 +vn 0.5603 0.6100 -0.5603 +vn -0.2588 0.0000 -0.9659 +vn -0.2051 0.6100 -0.7654 +vn 0.5603 -0.6100 -0.5603 +vn 0.7654 -0.6100 0.2051 +vn -0.2051 -0.6100 -0.7654 +vn 0.2051 -0.6100 0.7654 +vn -0.5603 -0.6100 0.5603 +vn -0.7654 -0.6100 -0.2051 +vn -0.7924 0.6100 0.0000 +vn -0.5000 0.0000 0.8660 +vn -0.3962 0.6100 0.6862 +vn -0.3962 0.6100 -0.6862 +vn -0.5000 0.0000 -0.8660 +vn 0.5000 0.0000 0.8660 +vn 0.3962 0.6100 0.6862 +vn 0.7924 0.6100 0.0000 +vn 0.5000 0.0000 -0.8660 +vn 0.3962 0.6100 -0.6862 +vn 0.7924 -0.6100 0.0000 +vn 0.3962 -0.6100 0.6862 +vn 0.3962 -0.6100 -0.6862 +vn -0.3962 -0.6100 0.6862 +vn -0.7924 -0.6100 0.0000 +vn -0.3962 -0.6100 -0.6862 +vn -0.5603 0.6100 -0.5603 +vn -0.7071 0.0000 -0.7071 +vn -0.9659 0.0000 0.2588 +vn -0.7654 0.6100 0.2051 +vn 0.2051 0.6100 -0.7654 +vn 0.2588 0.0000 -0.9659 +vn -0.2588 0.0000 0.9659 +vn -0.2051 0.6100 0.7654 +vn 0.7071 0.0000 0.7071 +vn 0.5603 0.6100 0.5603 +vn 0.9659 0.0000 -0.2588 +vn 0.7654 0.6100 -0.2051 +vn 0.5603 -0.6100 0.5603 +vn -0.2051 -0.6100 0.7654 +vn 0.7654 -0.6100 -0.2051 +vn -0.7654 -0.6100 0.2051 +vn -0.5603 -0.6100 -0.5603 +vn 0.2051 -0.6100 -0.7654 +vn 0.0000 0.6100 -0.7924 +vn -0.8660 0.0000 -0.5000 +vn -0.6862 0.6100 -0.3962 +vn 0.6862 0.6100 -0.3962 +vn 0.8660 0.0000 -0.5000 +vn -0.8660 0.0000 0.5000 +vn -0.6862 0.6100 0.3962 +vn 0.0000 0.6100 0.7924 +vn 0.8660 0.0000 0.5000 +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.6862 -0.6100 -0.3962 +vn 0.0000 -0.6100 -0.7924 +vn 0.6862 -0.6100 -0.3962 +g Pipe_Cylinder.002_None +s off +f 129/1/1 132/2/1 133/3/1 134/4/1 135/5/1 136/6/1 +f 141/7/2 144/8/2 145/9/2 146/10/2 147/11/2 148/12/2 +f 153/13/1 156/14/1 157/15/1 158/16/1 159/17/1 160/18/1 +f 165/19/2 168/20/2 169/21/2 170/22/2 171/23/2 172/24/2 +f 177/25/1 180/26/1 181/27/1 182/28/1 183/29/1 184/30/1 +f 189/31/2 192/32/2 193/33/2 194/34/2 195/35/2 196/36/2 +f 201/37/1 204/38/1 205/39/1 206/40/1 207/41/1 208/42/1 +f 213/43/2 216/44/2 217/45/2 218/46/2 219/47/2 220/48/2 +f 225/49/1 228/50/1 229/51/1 230/52/1 231/53/1 232/54/1 +f 237/55/2 240/56/2 241/57/2 242/58/2 243/59/2 244/60/2 +f 249/61/1 252/62/1 253/63/1 254/64/1 255/65/1 256/66/1 +f 261/67/2 264/68/2 265/69/2 266/70/2 267/71/2 268/72/2 +f 273/73/1 276/74/1 277/75/1 278/76/1 279/77/1 280/78/1 +f 285/79/2 288/80/2 289/81/2 290/82/2 291/83/2 292/84/2 +f 297/85/1 300/86/1 301/87/1 302/88/1 303/89/1 304/90/1 +f 309/91/2 312/92/2 313/93/2 314/94/2 315/95/2 316/96/2 +f 372/97/2 373/98/2 403/99/2 402/100/2 400/101/2 401/102/2 399/103/2 398/104/2 397/105/2 396/106/2 394/107/2 395/108/2 393/109/2 392/110/2 391/111/2 390/112/2 389/113/2 388/114/2 387/115/2 386/116/2 385/117/2 384/118/2 383/119/2 382/120/2 381/121/2 380/122/2 379/123/2 378/124/2 377/125/2 376/126/2 375/127/2 374/128/2 +f 351/129/1 368/130/1 352/131/1 353/132/1 354/133/1 355/134/1 356/135/1 369/136/1 357/137/1 358/138/1 359/139/1 370/140/1 360/141/1 371/142/1 361/143/1 362/144/1 363/145/1 364/146/1 365/147/1 340/148/1 341/149/1 342/150/1 343/151/1 344/152/1 345/153/1 346/154/1 347/155/1 348/156/1 366/157/1 349/158/1 367/159/1 350/160/1 +f 408/161/1 418/162/1 423/163/1 427/164/1 431/165/1 436/166/1 435/167/1 440/168/1 444/169/1 448/170/1 452/171/1 457/172/1 466/173/1 467/174/1 465/175/1 459/176/1 454/177/1 450/178/1 446/179/1 442/180/1 438/181/1 433/182/1 429/183/1 425/184/1 420/185/1 416/186/1 409/187/1 410/188/1 407/189/1 404/190/1 405/191/1 406/192/1 +f 412/193/2 411/194/2 417/195/2 422/196/2 421/197/2 426/198/2 430/199/2 434/200/2 439/201/2 443/202/2 447/203/2 451/204/2 455/205/2 460/206/2 456/207/2 462/208/2 461/209/2 463/210/2 464/211/2 458/212/2 453/213/2 449/214/2 445/215/2 441/216/2 437/217/2 432/218/2 428/219/2 424/220/2 419/221/2 415/222/2 414/223/2 413/224/2 +f 468/225/1 471/226/1 472/227/1 473/228/1 474/229/1 475/230/1 +f 480/231/2 483/232/2 484/233/2 485/234/2 486/235/2 487/236/2 +f 492/237/1 495/238/1 496/239/1 497/240/1 498/241/1 499/242/1 +f 504/243/2 507/244/2 508/245/2 509/246/2 510/247/2 511/248/2 +f 516/249/1 519/250/1 520/251/1 521/252/1 522/253/1 523/254/1 +f 528/255/2 531/256/2 532/257/2 533/258/2 534/259/2 535/260/2 +f 540/261/1 543/262/1 544/263/1 545/264/1 546/265/1 547/266/1 +f 552/267/2 555/268/2 556/269/2 557/270/2 558/271/2 559/272/2 +f 564/273/1 567/274/1 568/275/1 569/276/1 570/277/1 571/278/1 +f 576/279/2 579/280/2 580/281/2 581/282/2 582/283/2 583/284/2 +f 588/285/1 591/286/1 592/287/1 593/288/1 594/289/1 595/290/1 +f 600/291/2 603/292/2 604/293/2 605/294/2 606/295/2 607/296/2 +f 612/297/1 615/298/1 616/299/1 617/300/1 618/301/1 619/302/1 +f 624/303/2 627/304/2 628/305/2 629/306/2 630/307/2 631/308/2 +f 636/309/1 639/310/1 640/311/1 641/312/1 642/313/1 643/314/1 +f 648/315/2 651/316/2 652/317/2 653/318/2 654/319/2 655/320/2 +f 788/321/3 791/322/3 792/323/3 793/324/3 794/325/3 795/326/3 +f 800/327/4 803/328/4 804/329/4 805/330/4 806/331/4 807/332/4 +f 812/333/3 815/334/3 816/335/3 817/336/3 818/337/3 819/338/3 +f 824/339/4 827/340/4 828/341/4 829/342/4 830/343/4 831/344/4 +f 836/345/3 839/346/3 840/347/3 841/348/3 842/349/3 843/350/3 +f 848/351/4 851/352/4 852/353/4 853/354/4 854/355/4 855/356/4 +f 860/357/3 863/358/3 864/359/3 865/360/3 866/361/3 867/362/3 +f 872/363/4 875/364/4 876/365/4 877/366/4 878/367/4 879/368/4 +f 884/369/3 887/370/3 888/371/3 889/372/3 890/373/3 891/374/3 +f 896/375/4 899/376/4 900/377/4 901/378/4 902/379/4 903/380/4 +f 908/381/3 911/382/3 912/383/3 913/384/3 914/385/3 915/386/3 +f 920/387/4 923/388/4 924/389/4 925/390/4 926/391/4 927/392/4 +f 932/393/3 935/394/3 936/395/3 937/396/3 938/397/3 939/398/3 +f 944/399/4 947/400/4 948/401/4 949/402/4 950/403/4 951/404/4 +f 956/405/3 959/406/3 960/407/3 961/408/3 962/409/3 963/410/3 +f 968/411/4 971/412/4 972/413/4 973/414/4 974/415/4 975/416/4 +f 1057/417/4 1058/418/4 1088/419/4 1087/420/4 1085/421/4 1086/422/4 1084/423/4 1083/424/4 1082/425/4 1081/426/4 1079/427/4 1080/428/4 1078/429/4 1077/430/4 1076/431/4 1075/432/4 1074/433/4 1073/434/4 1072/435/4 1071/436/4 1070/437/4 1069/438/4 1068/439/4 1067/440/4 1066/441/4 1065/442/4 1064/443/4 1063/444/4 1062/445/4 1061/446/4 1060/447/4 1059/448/4 +f 1036/449/3 1053/450/3 1037/451/3 1038/452/3 1039/453/3 1040/454/3 1041/455/3 1054/456/3 1042/457/3 1043/458/3 1044/459/3 1055/460/3 1045/461/3 1056/462/3 1046/463/3 1047/464/3 1048/465/3 1049/466/3 1050/467/3 1025/468/3 1026/469/3 1027/470/3 1028/471/3 1029/472/3 1030/473/3 1031/474/3 1032/475/3 1033/476/3 1051/477/3 1034/478/3 1052/479/3 1035/480/3 +f 1093/481/3 1103/482/3 1108/483/3 1112/484/3 1116/485/3 1121/486/3 1120/487/3 1125/488/3 1129/489/3 1133/490/3 1137/491/3 1142/492/3 1151/493/3 1152/494/3 1150/495/3 1144/496/3 1139/497/3 1135/498/3 1131/499/3 1127/500/3 1123/501/3 1118/502/3 1114/503/3 1110/504/3 1105/505/3 1101/506/3 1094/507/3 1095/508/3 1092/509/3 1089/510/3 1090/511/3 1091/512/3 +f 1097/513/4 1096/514/4 1102/515/4 1107/516/4 1106/517/4 1111/518/4 1115/519/4 1119/520/4 1124/521/4 1128/522/4 1132/523/4 1136/524/4 1140/525/4 1145/526/4 1141/527/4 1147/528/4 1146/529/4 1148/530/4 1149/531/4 1143/532/4 1138/533/4 1134/534/4 1130/535/4 1126/536/4 1122/537/4 1117/538/4 1113/539/4 1109/540/4 1104/541/4 1100/542/4 1099/543/4 1098/544/4 +f 1153/545/3 1156/546/3 1157/547/3 1158/548/3 1159/549/3 1160/550/3 +f 1165/551/4 1168/552/4 1169/553/4 1170/554/4 1171/555/4 1172/556/4 +f 1177/557/3 1180/558/3 1181/559/3 1182/560/3 1183/561/3 1184/562/3 +f 1189/563/4 1192/564/4 1193/565/4 1194/566/4 1195/567/4 1196/568/4 +f 1201/569/3 1204/570/3 1205/571/3 1206/572/3 1207/573/3 1208/574/3 +f 1213/575/4 1216/576/4 1217/577/4 1218/578/4 1219/579/4 1220/580/4 +f 1225/581/3 1228/582/3 1229/583/3 1230/584/3 1231/585/3 1232/586/3 +f 1237/587/4 1240/588/4 1241/589/4 1242/590/4 1243/591/4 1244/592/4 +f 1249/593/3 1252/594/3 1253/595/3 1254/596/3 1255/597/3 1256/598/3 +f 1261/599/4 1264/600/4 1265/601/4 1266/602/4 1267/603/4 1268/604/4 +f 1273/605/3 1276/606/3 1277/607/3 1278/608/3 1279/609/3 1280/610/3 +f 1285/611/4 1288/612/4 1289/613/4 1290/614/4 1291/615/4 1292/616/4 +f 1297/617/3 1300/618/3 1301/619/3 1302/620/3 1303/621/3 1304/622/3 +f 1309/623/4 1312/624/4 1313/625/4 1314/626/4 1315/627/4 1316/628/4 +f 1321/629/3 1324/630/3 1325/631/3 1326/632/3 1327/633/3 1328/634/3 +f 1333/635/4 1336/636/4 1337/637/4 1338/638/4 1339/639/4 1340/640/4 +s 1 +f 375/641/5 342/642/6 341/643/7 374/644/8 +f 376/645/9 343/646/10 342/642/6 375/641/5 +f 377/647/11 344/648/12 343/646/10 376/645/9 +f 378/649/13 345/650/14 344/648/12 377/647/11 +f 379/651/15 346/652/16 345/650/14 378/649/13 +f 380/653/17 347/654/18 346/652/16 379/651/15 +f 381/655/19 348/656/20 347/654/18 380/653/17 +f 382/657/21 366/658/22 348/656/20 381/655/19 +f 383/659/23 349/660/24 366/658/22 382/657/21 +f 384/661/25 367/662/26 349/660/24 383/659/23 +f 385/663/27 350/664/28 367/662/26 384/661/25 +f 386/665/29 351/666/30 350/664/28 385/663/27 +f 387/667/31 368/668/32 351/666/30 386/665/29 +f 388/669/33 352/670/34 368/671/32 387/667/31 +f 389/672/35 353/673/36 352/670/34 388/669/33 +f 390/674/37 354/675/38 353/673/36 389/672/35 +f 391/676/39 355/677/40 354/678/38 390/679/37 +f 392/680/41 356/681/42 355/677/40 391/676/39 +f 393/682/43 369/683/44 356/681/42 392/680/41 +f 395/684/45 357/685/46 369/683/44 393/682/43 +f 396/686/47 359/687/48 358/688/49 394/689/50 +f 394/689/50 358/688/49 357/685/46 395/684/45 +f 397/690/51 370/691/52 359/687/48 396/686/47 +f 398/692/53 360/693/54 370/691/52 397/690/51 +f 399/694/55 371/695/56 360/693/54 398/692/53 +f 401/696/57 361/697/58 371/695/56 399/694/55 +f 402/698/59 363/699/60 362/700/61 400/701/62 +f 400/701/62 362/700/61 361/697/58 401/696/57 +f 403/702/63 364/703/64 363/699/60 402/698/59 +f 373/704/65 365/705/66 364/703/64 403/702/63 +f 30/706/67 33/707/68 34/708/69 1/709/70 +f 2/710/71 1/709/70 34/708/69 35/711/72 +f 3/712/73 2/710/71 35/711/72 36/713/74 +f 4/714/75 3/712/73 36/713/74 37/715/76 +f 5/716/77 4/714/75 37/715/76 38/717/78 +f 6/718/79 5/716/77 38/717/78 39/719/80 +f 6/718/79 39/719/80 40/720/81 7/721/82 +f 8/722/83 7/721/82 40/720/81 41/723/84 +f 9/724/85 8/722/83 41/723/84 42/725/86 +f 10/726/87 9/724/85 42/725/86 43/727/88 +f 10/726/87 43/727/88 44/728/89 11/729/90 +f 11/729/90 44/728/89 45/730/91 31/731/92 +f 12/732/93 46/733/94 47/734/95 13/735/96 +f 31/731/92 45/730/91 46/733/94 12/732/93 +f 13/735/96 47/734/95 48/736/97 14/737/98 +f 15/738/99 14/737/98 48/736/97 49/739/100 +f 15/738/99 49/739/100 50/740/101 16/741/102 +f 17/742/103 16/741/102 50/740/101 51/743/104 +f 17/744/103 51/745/104 52/746/105 18/747/106 +f 19/748/107 18/747/106 52/746/105 53/749/108 +f 19/748/107 53/749/108 54/750/109 20/751/110 +f 20/751/110 54/750/109 55/752/111 22/753/112 +f 22/753/112 55/752/111 56/754/113 21/755/114 +f 21/755/114 56/754/113 57/756/115 23/757/116 +f 23/757/116 57/756/115 58/758/117 24/759/118 +f 24/759/118 58/758/117 59/760/119 32/761/120 +f 27/762/121 25/763/122 60/764/123 61/765/124 +f 25/763/122 32/761/120 59/760/119 60/764/123 +f 28/766/125 26/767/126 62/768/127 63/769/128 +f 27/762/121 61/765/124 62/768/127 26/767/126 +f 29/770/129 28/766/125 63/769/128 64/771/130 +f 29/770/129 64/771/130 33/707/68 30/706/67 +f 43/727/88 42/725/86 987/772/131 986/773/132 +f 322/774/133 45/730/91 44/728/89 321/775/134 +f 42/725/86 41/723/84 988/776/135 987/772/131 +f 46/733/94 45/730/91 322/774/133 1010/777/136 +f 41/723/84 40/720/81 989/778/137 988/776/135 +f 323/779/138 47/734/95 46/733/94 1010/777/136 +f 996/780/139 64/771/130 63/769/128 997/781/140 +f 70/782/141 66/783/142 65/784/143 71/785/144 +f 72/786/145 67/787/146 66/783/142 70/782/141 +f 74/788/147 68/789/148 67/787/146 72/786/145 +f 1006/790/149 1007/791/150 56/754/113 55/752/111 +f 79/792/151 980/793/152 326/794/153 83/795/154 +f 71/785/144 65/784/143 69/796/155 76/797/156 +f 78/798/157 73/799/158 68/789/148 74/788/147 +f 334/800/159 1001/801/160 81/802/161 85/803/162 +f 83/795/154 326/794/153 327/804/163 87/805/164 +f 80/806/165 76/797/156 69/796/155 75/807/166 +f 82/808/167 77/809/168 73/799/158 78/798/157 +f 1002/810/169 334/800/159 85/803/162 89/811/170 +f 87/805/164 327/804/163 335/812/171 91/813/172 +f 84/814/173 80/806/165 75/807/166 79/792/151 +f 407/815/20 411/816/19 412/817/21 404/818/22 +f 406/819/26 414/820/25 415/821/27 408/822/28 +f 86/823/174 81/802/161 77/809/168 82/808/167 +f 410/824/18 417/825/17 411/816/19 407/815/20 +f 88/826/175 84/814/173 79/792/151 83/795/154 +f 408/822/28 415/821/27 419/827/29 418/828/30 +f 90/829/176 85/803/162 81/802/161 86/823/174 +f 409/830/16 422/831/15 417/825/17 410/824/18 +f 1019/832/177 328/833/178 93/834/179 97/835/180 +f 1018/836/181 1020/837/182 99/838/183 95/839/184 +f 92/840/185 88/826/175 83/795/154 87/805/164 +f 416/841/14 421/842/13 422/831/15 409/830/16 +f 94/843/186 89/811/170 85/803/162 90/829/176 +f 425/844/10 430/845/9 426/846/11 420/847/12 +f 96/848/187 92/840/185 87/805/164 91/813/172 +f 418/828/30 419/827/29 424/849/31 423/850/32 +f 98/851/188 93/852/179 89/811/170 94/843/186 +f 429/853/6 434/854/5 430/845/9 425/844/10 +f 329/855/189 1004/856/190 101/857/191 105/858/192 +f 337/859/193 1021/860/194 107/861/195 103/862/196 +f 100/863/197 96/848/187 91/813/172 95/839/184 +f 423/850/32 424/849/31 428/864/33 427/865/34 +f 102/866/198 97/835/180 93/834/179 98/867/188 +f 374/644/8 341/643/7 340/868/199 372/869/200 +f 433/870/7 439/871/8 434/854/5 429/853/6 +f 330/872/201 329/855/189 105/858/192 109/873/202 +f 323/779/138 324/874/203 48/736/97 47/734/95 +f 104/875/204 100/863/197 95/839/184 99/838/183 +f 427/865/34 428/864/33 432/876/35 431/877/36 +f 106/878/205 101/857/191 97/835/180 102/866/198 +f 438/879/199 443/880/200 439/871/8 433/870/7 +f 108/881/206 104/875/204 99/838/183 103/862/196 +f 431/877/36 432/876/35 437/882/37 436/883/38 +f 110/884/207 105/858/192 101/857/191 106/878/205 +f 442/885/66 447/886/65 443/880/200 438/879/199 +f 112/887/208 108/881/206 103/862/196 107/861/195 +f 435/888/40 441/889/39 445/890/41 440/891/42 +f 110/884/207 114/892/209 109/873/202 105/858/192 +f 436/883/38 437/882/37 441/893/39 435/894/40 +f 59/760/119 58/758/117 1009/895/210 1015/896/211 +f 61/765/124 60/764/123 1016/897/212 998/898/213 +f 116/899/214 112/887/208 107/861/195 111/900/215 +f 440/891/42 445/890/41 449/901/43 444/902/44 +f 404/818/22 412/817/21 413/903/23 405/904/24 +f 118/905/216 113/906/217 109/873/202 114/892/209 +f 446/907/64 451/908/63 447/886/65 442/885/66 +f 58/758/117 57/756/115 1014/909/218 1009/895/210 +f 339/910/219 123/911/220 119/912/221 1023/913/222 +f 120/914/223 116/899/214 111/900/215 115/915/224 +f 444/902/44 449/901/43 453/916/45 448/917/46 +f 118/905/216 122/918/225 117/919/226 113/906/217 +f 450/920/60 455/921/59 451/908/63 446/907/64 +f 124/922/227 120/914/223 115/915/224 119/912/221 +f 448/917/46 453/923/45 458/924/50 452/925/49 +f 122/918/225 126/926/228 121/927/229 117/919/226 +f 454/928/61 460/929/62 455/921/59 450/920/60 +f 420/847/12 426/846/11 421/842/13 416/841/14 +f 127/930/230 124/922/227 119/912/221 123/911/220 +f 452/925/49 458/924/50 464/931/47 457/932/48 +f 126/926/228 128/933/231 125/934/232 121/927/229 +f 459/935/58 456/936/57 460/929/62 454/928/61 +f 128/933/231 127/930/230 123/911/220 125/934/232 +f 405/904/24 413/903/23 414/820/25 406/819/26 +f 465/937/56 462/938/55 456/936/57 459/935/58 +f 457/932/48 464/931/47 463/939/51 466/940/52 +f 467/941/54 461/942/53 462/938/55 465/937/56 +f 466/940/52 463/939/51 461/942/53 467/941/54 +f 129/943/233 130/944/234 131/945/235 132/946/236 +f 136/947/237 137/948/238 130/944/234 129/943/233 +f 132/946/236 131/945/235 138/949/239 133/950/240 +f 133/950/240 138/949/239 139/951/241 134/952/242 +f 134/953/242 139/954/241 140/955/243 135/956/244 +f 135/956/244 140/955/243 137/948/238 136/947/237 +f 141/957/245 142/958/241 143/959/239 144/960/246 +f 148/961/247 149/962/243 142/958/241 141/957/245 +f 144/960/246 143/959/239 150/963/235 145/964/248 +f 145/964/248 150/963/235 151/965/234 146/966/249 +f 146/967/249 151/968/234 152/969/238 147/970/250 +f 147/970/250 152/969/238 149/962/243 148/961/247 +f 153/971/251 154/972/252 155/973/253 156/974/254 +f 160/975/255 161/976/256 154/972/252 153/971/251 +f 156/974/254 155/973/253 162/977/257 157/978/258 +f 157/978/258 162/977/257 163/979/259 158/980/260 +f 158/981/260 163/982/259 164/983/261 159/984/262 +f 159/984/262 164/983/261 161/976/256 160/975/255 +f 165/985/263 166/986/259 167/987/257 168/988/264 +f 172/989/265 173/990/261 166/986/259 165/985/263 +f 168/988/264 167/987/257 174/991/253 169/992/266 +f 169/992/266 174/991/253 175/993/252 170/994/267 +f 170/995/267 175/996/252 176/997/256 171/998/268 +f 171/998/268 176/997/256 173/990/261 172/989/265 +f 177/999/269 178/1000/270 179/1001/271 180/1002/272 +f 184/1003/273 185/1004/274 178/1000/270 177/999/269 +f 180/1002/272 179/1001/271 186/1005/275 181/1006/276 +f 181/1006/276 186/1005/275 187/1007/277 182/1008/278 +f 182/1009/278 187/1010/277 188/1011/279 183/1012/280 +f 183/1012/280 188/1011/279 185/1004/274 184/1003/273 +f 189/1013/281 190/1014/277 191/1015/275 192/1016/282 +f 196/1017/283 197/1018/279 190/1014/277 189/1013/281 +f 192/1016/282 191/1015/275 198/1019/271 193/1020/284 +f 193/1020/284 198/1019/271 199/1021/270 194/1022/285 +f 194/1023/285 199/1024/270 200/1025/274 195/1026/286 +f 195/1026/286 200/1025/274 197/1018/279 196/1017/283 +f 201/1027/287 202/1028/288 203/1029/289 204/1030/290 +f 208/1031/291 209/1032/292 202/1028/288 201/1027/287 +f 204/1030/290 203/1029/289 210/1033/293 205/1034/294 +f 205/1034/294 210/1033/293 211/1035/295 206/1036/296 +f 206/1037/296 211/1038/295 212/1039/297 207/1040/298 +f 207/1040/298 212/1039/297 209/1032/292 208/1031/291 +f 213/1041/299 214/1042/295 215/1043/293 216/1044/300 +f 220/1045/301 221/1046/297 214/1042/295 213/1041/299 +f 216/1044/300 215/1043/293 222/1047/289 217/1048/302 +f 217/1048/302 222/1047/289 223/1049/288 218/1050/303 +f 218/1051/303 223/1052/288 224/1053/292 219/1054/304 +f 219/1054/304 224/1053/292 221/1046/297 220/1045/301 +f 225/1055/242 226/1056/241 227/1057/243 228/1058/244 +f 232/1059/240 233/1060/239 226/1056/241 225/1055/242 +f 228/1058/244 227/1057/243 234/1061/238 229/1062/237 +f 229/1062/237 234/1061/238 235/1063/234 230/1064/233 +f 230/1065/233 235/1066/234 236/1067/235 231/1068/236 +f 231/1068/236 236/1067/235 233/1060/239 232/1059/240 +f 237/1069/249 238/1070/234 239/1071/238 240/1072/250 +f 244/1073/248 245/1074/235 238/1070/234 237/1069/249 +f 240/1072/250 239/1071/238 246/1075/243 241/1076/247 +f 241/1076/247 246/1075/243 247/1077/241 242/1078/245 +f 242/1079/245 247/1080/241 248/1081/239 243/1082/246 +f 243/1082/246 248/1081/239 245/1074/235 244/1073/248 +f 249/1083/260 250/1084/259 251/1085/261 252/1086/262 +f 256/1087/258 257/1088/257 250/1084/259 249/1083/260 +f 252/1086/262 251/1085/261 258/1089/256 253/1090/255 +f 253/1090/255 258/1089/256 259/1091/252 254/1092/251 +f 254/1093/251 259/1094/252 260/1095/253 255/1096/254 +f 255/1096/254 260/1095/253 257/1088/257 256/1087/258 +f 261/1097/267 262/1098/252 263/1099/256 264/1100/268 +f 268/1101/266 269/1102/253 262/1098/252 261/1097/267 +f 264/1100/268 263/1099/256 270/1103/261 265/1104/265 +f 265/1104/265 270/1103/261 271/1105/259 266/1106/263 +f 266/1107/263 271/1108/259 272/1109/257 267/1110/264 +f 267/1110/264 272/1109/257 269/1102/253 268/1101/266 +f 273/1111/278 274/1112/277 275/1113/279 276/1114/280 +f 280/1115/276 281/1116/275 274/1112/277 273/1111/278 +f 276/1114/280 275/1113/279 282/1117/274 277/1118/273 +f 277/1118/273 282/1117/274 283/1119/270 278/1120/269 +f 278/1121/269 283/1122/270 284/1123/271 279/1124/272 +f 279/1124/272 284/1123/271 281/1116/275 280/1115/276 +f 285/1125/285 286/1126/270 287/1127/274 288/1128/286 +f 292/1129/284 293/1130/271 286/1126/270 285/1125/285 +f 288/1128/286 287/1127/274 294/1131/279 289/1132/283 +f 289/1132/283 294/1131/279 295/1133/277 290/1134/281 +f 290/1135/281 295/1136/277 296/1137/275 291/1138/282 +f 291/1138/282 296/1137/275 293/1130/271 292/1129/284 +f 297/1139/296 298/1140/295 299/1141/297 300/1142/298 +f 304/1143/294 305/1144/293 298/1140/295 297/1139/296 +f 300/1142/298 299/1141/297 306/1145/292 301/1146/291 +f 301/1146/291 306/1145/292 307/1147/288 302/1148/287 +f 302/1149/287 307/1150/288 308/1151/289 303/1152/290 +f 303/1152/290 308/1151/289 305/1144/293 304/1143/294 +f 309/1153/303 310/1154/288 311/1155/292 312/1156/304 +f 316/1157/302 317/1158/289 310/1154/288 309/1153/303 +f 312/1156/304 311/1155/292 318/1159/297 313/1160/301 +f 313/1160/301 318/1159/297 319/1161/295 314/1162/299 +f 314/1163/299 319/1164/295 320/1165/293 315/1166/300 +f 315/1166/300 320/1165/293 317/1158/289 316/1157/302 +f 983/1167/305 65/784/143 66/783/142 984/1168/306 +f 73/799/158 999/1169/307 985/1170/308 68/789/148 +f 77/809/168 1000/1171/309 999/1169/307 73/799/158 +f 982/1172/310 69/796/155 65/784/143 983/1167/305 +f 323/1173/138 736/1174/311 740/1175/312 324/1176/203 +f 719/1177/313 718/1178/314 1016/1179/212 339/1180/219 +f 68/789/148 985/1170/308 333/1181/315 67/787/146 +f 338/1182/316 111/900/215 107/861/195 1021/860/194 +f 331/1183/317 330/872/201 109/873/202 113/906/217 +f 332/1184/318 1008/1185/319 117/919/226 121/927/229 +f 331/1183/317 113/906/217 117/919/226 1008/1185/319 +f 62/768/127 61/765/124 998/898/213 1017/1186/320 +f 119/912/221 115/915/224 1022/1187/321 1023/913/222 +f 125/934/232 1024/1188/322 332/1184/318 121/927/229 +f 981/1189/323 75/807/166 69/796/155 982/1172/310 +f 990/1190/324 989/778/137 40/720/81 39/719/80 +f 63/769/128 62/768/127 1017/1186/320 997/781/140 +f 115/915/224 111/900/215 338/1182/316 1022/1187/321 +f 57/756/115 56/754/113 1007/791/150 1014/909/218 +f 75/807/166 981/1189/323 980/793/152 79/792/151 +f 372/869/200 340/868/199 365/705/66 373/704/65 +f 995/1191/325 336/1192/326 34/708/69 33/707/68 +f 336/1192/326 994/1193/327 35/711/72 34/708/69 +f 994/1193/327 993/1194/328 36/713/74 35/711/72 +f 993/1194/328 992/1195/329 37/715/76 36/713/74 +f 992/1195/329 991/1196/330 38/717/78 37/715/76 +f 991/1196/330 990/1190/324 39/719/80 38/717/78 +f 324/874/203 1011/1197/331 49/739/100 48/736/97 +f 1011/1197/331 325/1198/332 50/740/101 49/739/100 +f 325/1198/332 1003/1199/333 51/743/104 50/740/101 +f 1003/1200/333 1012/1201/334 52/746/105 51/745/104 +f 1012/1201/334 1013/1202/335 53/749/108 52/746/105 +f 1013/1202/335 1005/1203/336 54/750/109 53/749/108 +f 1005/1203/336 1006/790/149 55/752/111 54/750/109 +f 64/771/130 996/780/139 995/1191/325 33/707/68 +f 328/1204/178 1002/810/169 89/811/170 93/852/179 +f 335/812/171 1018/836/181 95/839/184 91/813/172 +f 1004/856/190 1019/832/177 97/835/180 101/857/191 +f 1020/837/182 337/859/193 103/862/196 99/838/183 +f 468/1205/337 469/1206/338 470/1207/339 471/1208/340 +f 475/1209/341 476/1210/342 469/1206/338 468/1205/337 +f 471/1208/340 470/1207/339 477/1211/343 472/1212/344 +f 472/1212/344 477/1211/343 478/1213/345 473/1214/346 +f 473/1215/346 478/1216/345 479/1217/347 474/1218/348 +f 474/1218/348 479/1217/347 476/1210/342 475/1209/341 +f 480/1219/349 481/1220/345 482/1221/343 483/1222/350 +f 487/1223/351 488/1224/347 481/1220/345 480/1219/349 +f 483/1222/350 482/1221/343 489/1225/339 484/1226/352 +f 484/1226/352 489/1225/339 490/1227/338 485/1228/353 +f 485/1229/353 490/1230/338 491/1231/342 486/1232/354 +f 486/1232/354 491/1231/342 488/1224/347 487/1223/351 +f 492/1233/355 493/1234/4 494/1235/356 495/1236/357 +f 499/1237/358 500/1238/359 493/1234/4 492/1233/355 +f 495/1236/357 494/1235/356 501/1239/360 496/1240/361 +f 496/1240/361 501/1239/360 502/1241/3 497/1242/362 +f 497/1243/362 502/1244/3 503/1245/363 498/1246/364 +f 498/1246/364 503/1245/363 500/1238/359 499/1237/358 +f 504/1247/365 505/1248/3 506/1249/360 507/1250/366 +f 511/1251/367 512/1252/363 505/1248/3 504/1247/365 +f 507/1250/366 506/1249/360 513/1253/356 508/1254/368 +f 508/1254/368 513/1253/356 514/1255/4 509/1256/369 +f 509/1257/369 514/1258/4 515/1259/359 510/1260/370 +f 510/1260/370 515/1259/359 512/1252/363 511/1251/367 +f 516/1261/371 517/1262/372 518/1263/373 519/1264/374 +f 523/1265/375 524/1266/376 517/1262/372 516/1261/371 +f 519/1264/374 518/1263/373 525/1267/377 520/1268/378 +f 520/1268/378 525/1267/377 526/1269/379 521/1270/380 +f 521/1271/380 526/1272/379 527/1273/381 522/1274/382 +f 522/1274/382 527/1273/381 524/1266/376 523/1265/375 +f 528/1275/383 529/1276/379 530/1277/377 531/1278/384 +f 535/1279/385 536/1280/381 529/1276/379 528/1275/383 +f 531/1278/384 530/1277/377 537/1281/373 532/1282/386 +f 532/1282/386 537/1281/373 538/1283/372 533/1284/387 +f 533/1285/387 538/1286/372 539/1287/376 534/1288/388 +f 534/1288/388 539/1287/376 536/1280/381 535/1279/385 +f 540/1289/389 541/1290/390 542/1291/391 543/1292/392 +f 547/1293/393 548/1294/394 541/1290/390 540/1289/389 +f 543/1292/392 542/1291/391 549/1295/395 544/1296/396 +f 544/1296/396 549/1295/395 550/1297/397 545/1298/398 +f 545/1299/398 550/1300/397 551/1301/399 546/1302/400 +f 546/1302/400 551/1301/399 548/1294/394 547/1293/393 +f 552/1303/401 553/1304/397 554/1305/395 555/1306/402 +f 559/1307/403 560/1308/399 553/1304/397 552/1303/401 +f 555/1306/402 554/1305/395 561/1309/391 556/1310/404 +f 556/1310/404 561/1309/391 562/1311/390 557/1312/405 +f 557/1313/405 562/1314/390 563/1315/394 558/1316/406 +f 558/1316/406 563/1315/394 560/1308/399 559/1307/403 +f 564/1317/346 565/1318/345 566/1319/347 567/1320/348 +f 571/1321/344 572/1322/343 565/1318/345 564/1317/346 +f 567/1320/348 566/1319/347 573/1323/342 568/1324/341 +f 568/1324/341 573/1323/342 574/1325/338 569/1326/337 +f 569/1327/337 574/1328/338 575/1329/339 570/1330/340 +f 570/1330/340 575/1329/339 572/1322/343 571/1321/344 +f 576/1331/353 577/1332/338 578/1333/342 579/1334/354 +f 583/1335/352 584/1336/339 577/1332/338 576/1331/353 +f 579/1334/354 578/1333/342 585/1337/347 580/1338/351 +f 580/1338/351 585/1337/347 586/1339/345 581/1340/349 +f 581/1341/349 586/1342/345 587/1343/343 582/1344/350 +f 582/1344/350 587/1343/343 584/1336/339 583/1335/352 +f 588/1345/362 589/1346/3 590/1347/363 591/1348/364 +f 595/1349/361 596/1350/360 589/1346/3 588/1345/362 +f 591/1348/364 590/1347/363 597/1351/359 592/1352/358 +f 592/1352/358 597/1351/359 598/1353/4 593/1354/355 +f 593/1355/355 598/1356/4 599/1357/356 594/1358/357 +f 594/1358/357 599/1357/356 596/1350/360 595/1349/361 +f 600/1359/369 601/1360/4 602/1361/359 603/1362/370 +f 607/1363/368 608/1364/356 601/1360/4 600/1359/369 +f 603/1362/370 602/1361/359 609/1365/363 604/1366/367 +f 604/1366/367 609/1365/363 610/1367/3 605/1368/365 +f 605/1369/365 610/1370/3 611/1371/360 606/1372/366 +f 606/1372/366 611/1371/360 608/1364/356 607/1363/368 +f 612/1373/380 613/1374/379 614/1375/381 615/1376/382 +f 619/1377/378 620/1378/377 613/1374/379 612/1373/380 +f 615/1376/382 614/1375/381 621/1379/376 616/1380/375 +f 616/1380/375 621/1379/376 622/1381/372 617/1382/371 +f 617/1383/371 622/1384/372 623/1385/373 618/1386/374 +f 618/1386/374 623/1385/373 620/1378/377 619/1377/378 +f 624/1387/387 625/1388/372 626/1389/376 627/1390/388 +f 631/1391/386 632/1392/373 625/1388/372 624/1387/387 +f 627/1390/388 626/1389/376 633/1393/381 628/1394/385 +f 628/1394/385 633/1393/381 634/1395/379 629/1396/383 +f 629/1397/383 634/1398/379 635/1399/377 630/1400/384 +f 630/1400/384 635/1399/377 632/1392/373 631/1391/386 +f 636/1401/398 637/1402/397 638/1403/399 639/1404/400 +f 643/1405/396 644/1406/395 637/1402/397 636/1401/398 +f 639/1404/400 638/1403/399 645/1407/394 640/1408/393 +f 640/1408/393 645/1407/394 646/1409/390 641/1410/389 +f 641/1411/389 646/1412/390 647/1413/391 642/1414/392 +f 642/1414/392 647/1413/391 644/1406/395 643/1405/396 +f 648/1415/405 649/1416/390 650/1417/394 651/1418/406 +f 655/1419/404 656/1420/391 649/1416/390 648/1415/405 +f 651/1418/406 650/1417/394 657/1421/399 652/1422/403 +f 652/1422/403 657/1421/399 658/1423/397 653/1424/401 +f 653/1425/401 658/1426/397 659/1427/395 654/1428/402 +f 654/1428/402 659/1427/395 656/1420/391 655/1419/404 +f 1024/1188/322 125/934/232 123/911/220 339/910/219 1016/897/212 60/764/123 59/760/119 1015/1429/211 +f 984/1168/306 66/783/142 67/787/146 333/1181/315 321/775/134 44/728/89 43/727/88 986/1430/132 +f 1060/1431/407 1027/1432/408 1026/1433/409 1059/1434/410 +f 1061/1435/411 1028/1436/412 1027/1432/408 1060/1431/407 +f 1062/1437/413 1029/1438/414 1028/1436/412 1061/1435/411 +f 1063/1439/415 1030/1440/416 1029/1438/414 1062/1437/413 +f 1064/1441/417 1031/1442/418 1030/1440/416 1063/1439/415 +f 1065/1443/419 1032/1444/420 1031/1442/418 1064/1441/417 +f 1066/1445/421 1033/1446/422 1032/1444/420 1065/1443/419 +f 1067/1447/423 1051/1448/424 1033/1446/422 1066/1445/421 +f 1068/1449/425 1034/1450/426 1051/1448/424 1067/1447/423 +f 1069/1451/427 1052/1452/428 1034/1450/426 1068/1449/425 +f 1070/1453/429 1035/1454/430 1052/1452/428 1069/1451/427 +f 1071/1455/431 1036/1456/432 1035/1454/430 1070/1453/429 +f 1072/1457/433 1053/1458/434 1036/1456/432 1071/1455/431 +f 1073/1459/435 1037/1460/436 1053/1461/434 1072/1457/433 +f 1074/1462/437 1038/1463/438 1037/1460/436 1073/1459/435 +f 1075/1464/439 1039/1465/440 1038/1463/438 1074/1462/437 +f 1076/1466/441 1040/1467/442 1039/1468/440 1075/1469/439 +f 1077/1470/443 1041/1471/444 1040/1467/442 1076/1466/441 +f 1078/1472/445 1054/1473/446 1041/1471/444 1077/1470/443 +f 1080/1474/447 1042/1475/448 1054/1473/446 1078/1472/445 +f 1081/1476/449 1044/1477/450 1043/1478/451 1079/1479/452 +f 1079/1479/452 1043/1478/451 1042/1475/448 1080/1474/447 +f 1082/1480/453 1055/1481/454 1044/1477/450 1081/1476/449 +f 1083/1482/455 1045/1483/456 1055/1481/454 1082/1480/453 +f 1084/1484/457 1056/1485/458 1045/1483/456 1083/1482/455 +f 1086/1486/459 1046/1487/460 1056/1485/458 1084/1484/457 +f 1087/1488/461 1048/1489/462 1047/1490/463 1085/1491/464 +f 1085/1491/464 1047/1490/463 1046/1487/460 1086/1486/459 +f 1088/1492/465 1049/1493/466 1048/1489/462 1087/1488/461 +f 1058/1494/467 1050/1495/468 1049/1493/466 1088/1492/465 +f 689/1496/469 692/1497/470 693/1498/471 660/1499/472 +f 661/1500/473 660/1499/472 693/1498/471 694/1501/474 +f 662/1502/475 661/1500/473 694/1501/474 695/1503/476 +f 663/1504/477 662/1502/475 695/1503/476 696/1505/478 +f 664/1506/479 663/1504/477 696/1505/478 697/1507/480 +f 665/1508/481 664/1506/479 697/1507/480 698/1509/482 +f 665/1508/481 698/1509/482 699/1510/483 666/1511/484 +f 667/1512/485 666/1511/484 699/1510/483 700/1513/486 +f 668/1514/487 667/1512/485 700/1513/486 701/1515/488 +f 669/1516/489 668/1514/487 701/1515/488 702/1517/490 +f 669/1516/489 702/1517/490 703/1518/491 670/1519/492 +f 670/1519/492 703/1518/491 704/1520/493 690/1521/494 +f 671/1522/495 705/1523/496 706/1524/497 672/1525/498 +f 690/1521/494 704/1520/493 705/1523/496 671/1522/495 +f 672/1525/498 706/1524/497 707/1526/499 673/1527/500 +f 674/1528/501 673/1527/500 707/1526/499 708/1529/502 +f 674/1528/501 708/1529/502 709/1530/503 675/1531/504 +f 676/1532/505 675/1531/504 709/1530/503 710/1533/506 +f 676/1534/505 710/1535/506 711/1536/507 677/1537/508 +f 678/1538/509 677/1537/508 711/1536/507 712/1539/510 +f 678/1538/509 712/1539/510 713/1540/511 679/1541/512 +f 679/1541/512 713/1540/511 714/1542/513 681/1543/514 +f 681/1543/514 714/1542/513 715/1544/515 680/1545/516 +f 680/1545/516 715/1544/515 716/1546/517 682/1547/518 +f 682/1547/518 716/1546/517 717/1548/519 683/1549/520 +f 683/1549/520 717/1548/519 718/1178/314 691/1550/521 +f 686/1551/522 684/1552/523 719/1177/313 720/1553/524 +f 684/1552/523 691/1550/521 718/1178/314 719/1177/313 +f 687/1554/525 685/1555/526 721/1556/527 722/1557/528 +f 686/1551/522 720/1553/524 721/1556/527 685/1555/526 +f 688/1558/529 687/1554/525 722/1557/528 723/1559/530 +f 688/1558/529 723/1559/530 692/1497/470 689/1496/469 +f 984/1560/306 702/1517/490 701/1515/488 983/1561/305 +f 986/1430/132 703/1518/491 702/1517/490 984/1560/306 +f 987/1562/131 704/1520/493 703/1518/491 986/1430/132 +f 983/1561/305 701/1515/488 700/1513/486 982/1563/310 +f 988/1564/135 705/1523/496 704/1520/493 987/1562/131 +f 982/1563/310 700/1513/486 699/1510/483 981/1565/323 +f 989/1566/137 706/1524/497 705/1523/496 988/1564/135 +f 980/1567/152 981/1565/323 699/1510/483 698/1509/482 +f 729/1568/531 725/1569/532 724/1570/533 730/1571/534 +f 731/1572/535 726/1573/536 725/1569/532 729/1568/531 +f 733/1574/537 727/1575/538 726/1573/536 731/1572/535 +f 338/1576/316 1021/1577/194 723/1559/530 722/1557/528 +f 738/1578/539 1001/1579/160 334/1580/159 742/1581/540 +f 730/1571/534 724/1570/533 728/1582/541 735/1583/542 +f 737/1584/543 732/1585/544 727/1575/538 733/1574/537 +f 1011/1586/331 324/1176/203 740/1175/312 744/1587/545 +f 742/1581/540 334/1580/159 1002/1588/169 746/1589/546 +f 739/1590/547 735/1583/542 728/1582/541 734/1591/548 +f 741/1592/549 736/1174/311 732/1585/544 737/1584/543 +f 325/1593/332 1011/1586/331 744/1587/545 748/1594/550 +f 746/1589/546 1002/1588/169 328/1595/178 750/1596/551 +f 743/1597/552 739/1590/547 734/1591/548 738/1578/539 +f 1092/1598/422 1096/1599/421 1097/1600/423 1089/1601/424 +f 1091/1602/428 1099/1603/427 1100/1604/429 1093/1605/430 +f 745/1606/553 740/1175/312 736/1174/311 741/1592/549 +f 1095/1607/420 1102/1608/419 1096/1599/421 1092/1598/422 +f 747/1609/554 743/1597/552 738/1578/539 742/1581/540 +f 1093/1605/430 1100/1604/429 1104/1610/431 1103/1611/432 +f 749/1612/555 744/1587/545 740/1175/312 745/1606/553 +f 1094/1613/418 1107/1614/417 1102/1608/419 1095/1607/420 +f 1012/1615/334 1003/1616/333 752/1617/556 756/1618/557 +f 1019/1619/177 1004/1620/190 758/1621/558 754/1622/559 +f 751/1623/560 747/1609/554 742/1581/540 746/1589/546 +f 1101/1624/416 1106/1625/415 1107/1614/417 1094/1613/418 +f 753/1626/561 748/1594/550 744/1587/545 749/1612/555 +f 1110/1627/412 1115/1628/411 1111/1629/413 1105/1630/414 +f 755/1631/562 751/1623/560 746/1589/546 750/1596/551 +f 1103/1611/432 1104/1610/431 1109/1632/433 1108/1633/434 +f 757/1634/563 752/1635/556 748/1594/550 753/1626/561 +f 1114/1636/408 1119/1637/407 1115/1628/411 1110/1627/412 +f 1005/1638/336 1013/1639/335 760/1640/564 764/1641/565 +f 329/1642/189 330/1643/201 766/1644/566 762/1645/567 +f 759/1646/568 755/1631/562 750/1596/551 754/1622/559 +f 1108/1633/434 1109/1632/433 1113/1647/435 1112/1648/436 +f 761/1649/569 756/1618/557 752/1617/556 757/1650/563 +f 1059/1434/410 1026/1433/409 1025/1651/570 1057/1652/571 +f 1118/1653/409 1124/1654/410 1119/1637/407 1114/1636/408 +f 1006/1655/149 1005/1638/336 764/1641/565 768/1656/572 +f 996/1657/139 997/1658/140 715/1544/515 714/1542/513 +f 763/1659/573 759/1646/568 754/1622/559 758/1621/558 +f 1112/1648/436 1113/1647/435 1117/1660/437 1116/1661/438 +f 765/1662/574 760/1640/564 756/1618/557 761/1649/569 +f 1123/1663/570 1128/1664/571 1124/1654/410 1118/1653/409 +f 767/1665/575 763/1659/573 758/1621/558 762/1645/567 +f 1116/1661/438 1117/1660/437 1122/1666/439 1121/1667/440 +f 769/1668/576 764/1641/565 760/1640/564 765/1662/574 +f 1127/1669/468 1132/1670/467 1128/1664/571 1123/1663/570 +f 771/1671/577 767/1665/575 762/1645/567 766/1644/566 +f 1120/1672/442 1126/1673/441 1130/1674/443 1125/1675/444 +f 769/1668/576 773/1676/578 768/1656/572 764/1641/565 +f 1121/1667/440 1122/1666/439 1126/1677/441 1120/1678/442 +f 1016/1179/212 718/1178/314 717/1548/519 998/1679/213 +f 1023/1680/222 720/1553/524 719/1177/313 339/1180/219 +f 775/1681/579 771/1671/577 766/1644/566 770/1682/580 +f 1125/1675/444 1130/1674/443 1134/1683/445 1129/1684/446 +f 1089/1601/424 1097/1600/423 1098/1685/425 1090/1686/426 +f 777/1687/581 772/1688/582 768/1656/572 773/1676/578 +f 1131/1689/466 1136/1690/465 1132/1670/467 1127/1669/468 +f 998/1679/213 717/1548/519 716/1546/517 1017/1691/320 +f 1024/1692/322 782/1693/583 778/1694/584 332/1695/318 +f 779/1696/585 775/1681/579 770/1682/580 774/1697/586 +f 1129/1684/446 1134/1683/445 1138/1698/447 1133/1699/448 +f 777/1687/581 781/1700/587 776/1701/588 772/1688/582 +f 1135/1702/462 1140/1703/461 1136/1690/465 1131/1689/466 +f 783/1704/589 779/1696/585 774/1697/586 778/1694/584 +f 1133/1699/448 1138/1705/447 1143/1706/452 1137/1707/451 +f 781/1700/587 785/1708/590 780/1709/591 776/1701/588 +f 1139/1710/463 1145/1711/464 1140/1703/461 1135/1702/462 +f 1105/1630/414 1111/1629/413 1106/1625/415 1101/1624/416 +f 786/1712/592 783/1704/589 778/1694/584 782/1693/583 +f 1137/1707/451 1143/1706/452 1149/1713/449 1142/1714/450 +f 785/1708/590 787/1715/593 784/1716/594 780/1709/591 +f 1144/1717/460 1141/1718/459 1145/1711/464 1139/1710/463 +f 787/1715/593 786/1712/592 782/1693/583 784/1716/594 +f 1090/1686/426 1098/1685/425 1099/1603/427 1091/1602/428 +f 1150/1719/458 1147/1720/457 1141/1718/459 1144/1717/460 +f 1142/1714/450 1149/1713/449 1148/1721/453 1151/1722/454 +f 1152/1723/456 1146/1724/455 1147/1720/457 1150/1719/458 +f 1151/1722/454 1148/1721/453 1146/1724/455 1152/1723/456 +f 788/1725/595 789/1726/596 790/1727/597 791/1728/598 +f 795/1729/599 796/1730/600 789/1726/596 788/1725/595 +f 791/1728/598 790/1727/597 797/1731/601 792/1732/602 +f 792/1732/602 797/1731/601 798/1733/603 793/1734/604 +f 793/1735/604 798/1736/603 799/1737/605 794/1738/606 +f 794/1738/606 799/1737/605 796/1730/600 795/1729/599 +f 800/1739/607 801/1740/603 802/1741/601 803/1742/608 +f 807/1743/609 808/1744/605 801/1740/603 800/1739/607 +f 803/1742/608 802/1741/601 809/1745/597 804/1746/610 +f 804/1746/610 809/1745/597 810/1747/596 805/1748/611 +f 805/1749/611 810/1750/596 811/1751/600 806/1752/612 +f 806/1752/612 811/1751/600 808/1744/605 807/1743/609 +f 812/1753/613 813/1754/614 814/1755/615 815/1756/616 +f 819/1757/617 820/1758/618 813/1754/614 812/1753/613 +f 815/1756/616 814/1755/615 821/1759/619 816/1760/620 +f 816/1760/620 821/1759/619 822/1761/621 817/1762/622 +f 817/1763/622 822/1764/621 823/1765/623 818/1766/624 +f 818/1766/624 823/1765/623 820/1758/618 819/1757/617 +f 824/1767/625 825/1768/621 826/1769/619 827/1770/626 +f 831/1771/627 832/1772/623 825/1768/621 824/1767/625 +f 827/1770/626 826/1769/619 833/1773/615 828/1774/628 +f 828/1774/628 833/1773/615 834/1775/614 829/1776/629 +f 829/1777/629 834/1778/614 835/1779/618 830/1780/630 +f 830/1780/630 835/1779/618 832/1772/623 831/1771/627 +f 836/1781/631 837/1782/632 838/1783/633 839/1784/634 +f 843/1785/635 844/1786/636 837/1782/632 836/1781/631 +f 839/1784/634 838/1783/633 845/1787/637 840/1788/638 +f 840/1788/638 845/1787/637 846/1789/639 841/1790/640 +f 841/1791/640 846/1792/639 847/1793/641 842/1794/642 +f 842/1794/642 847/1793/641 844/1786/636 843/1785/635 +f 848/1795/643 849/1796/639 850/1797/637 851/1798/644 +f 855/1799/645 856/1800/641 849/1796/639 848/1795/643 +f 851/1798/644 850/1797/637 857/1801/633 852/1802/646 +f 852/1802/646 857/1801/633 858/1803/632 853/1804/647 +f 853/1805/647 858/1806/632 859/1807/636 854/1808/648 +f 854/1808/648 859/1807/636 856/1800/641 855/1799/645 +f 860/1809/649 861/1810/650 862/1811/651 863/1812/652 +f 867/1813/653 868/1814/654 861/1810/650 860/1809/649 +f 863/1812/652 862/1811/651 869/1815/655 864/1816/656 +f 864/1816/656 869/1815/655 870/1817/657 865/1818/658 +f 865/1819/658 870/1820/657 871/1821/659 866/1822/660 +f 866/1822/660 871/1821/659 868/1814/654 867/1813/653 +f 872/1823/661 873/1824/657 874/1825/655 875/1826/662 +f 879/1827/663 880/1828/659 873/1824/657 872/1823/661 +f 875/1826/662 874/1825/655 881/1829/651 876/1830/664 +f 876/1830/664 881/1829/651 882/1831/650 877/1832/665 +f 877/1833/665 882/1834/650 883/1835/654 878/1836/666 +f 878/1836/666 883/1835/654 880/1828/659 879/1827/663 +f 884/1837/604 885/1838/603 886/1839/605 887/1840/606 +f 891/1841/602 892/1842/601 885/1838/603 884/1837/604 +f 887/1840/606 886/1839/605 893/1843/600 888/1844/599 +f 888/1844/599 893/1843/600 894/1845/596 889/1846/595 +f 889/1847/595 894/1848/596 895/1849/597 890/1850/598 +f 890/1850/598 895/1849/597 892/1842/601 891/1841/602 +f 896/1851/611 897/1852/596 898/1853/600 899/1854/612 +f 903/1855/610 904/1856/597 897/1852/596 896/1851/611 +f 899/1854/612 898/1853/600 905/1857/605 900/1858/609 +f 900/1858/609 905/1857/605 906/1859/603 901/1860/607 +f 901/1861/607 906/1862/603 907/1863/601 902/1864/608 +f 902/1864/608 907/1863/601 904/1856/597 903/1855/610 +f 908/1865/622 909/1866/621 910/1867/623 911/1868/624 +f 915/1869/620 916/1870/619 909/1866/621 908/1865/622 +f 911/1868/624 910/1867/623 917/1871/618 912/1872/617 +f 912/1872/617 917/1871/618 918/1873/614 913/1874/613 +f 913/1875/613 918/1876/614 919/1877/615 914/1878/616 +f 914/1878/616 919/1877/615 916/1870/619 915/1869/620 +f 920/1879/629 921/1880/614 922/1881/618 923/1882/630 +f 927/1883/628 928/1884/615 921/1880/614 920/1879/629 +f 923/1882/630 922/1881/618 929/1885/623 924/1886/627 +f 924/1886/627 929/1885/623 930/1887/621 925/1888/625 +f 925/1889/625 930/1890/621 931/1891/619 926/1892/626 +f 926/1892/626 931/1891/619 928/1884/615 927/1883/628 +f 932/1893/640 933/1894/639 934/1895/641 935/1896/642 +f 939/1897/638 940/1898/637 933/1894/639 932/1893/640 +f 935/1896/642 934/1895/641 941/1899/636 936/1900/635 +f 936/1900/635 941/1899/636 942/1901/632 937/1902/631 +f 937/1903/631 942/1904/632 943/1905/633 938/1906/634 +f 938/1906/634 943/1905/633 940/1898/637 939/1897/638 +f 944/1907/647 945/1908/632 946/1909/636 947/1910/648 +f 951/1911/646 952/1912/633 945/1908/632 944/1907/647 +f 947/1910/648 946/1909/636 953/1913/641 948/1914/645 +f 948/1914/645 953/1913/641 954/1915/639 949/1916/643 +f 949/1917/643 954/1918/639 955/1919/637 950/1920/644 +f 950/1920/644 955/1919/637 952/1912/633 951/1911/646 +f 956/1921/658 957/1922/657 958/1923/659 959/1924/660 +f 963/1925/656 964/1926/655 957/1922/657 956/1921/658 +f 959/1924/660 958/1923/659 965/1927/654 960/1928/653 +f 960/1928/653 965/1927/654 966/1929/650 961/1930/649 +f 961/1931/649 966/1932/650 967/1933/651 962/1934/652 +f 962/1934/652 967/1933/651 964/1926/655 963/1925/656 +f 968/1935/665 969/1936/650 970/1937/654 971/1938/666 +f 975/1939/664 976/1940/651 969/1936/650 968/1935/665 +f 971/1938/666 970/1937/654 977/1941/659 972/1942/663 +f 972/1942/663 977/1941/659 978/1943/657 973/1944/661 +f 973/1945/661 978/1946/657 979/1947/655 974/1948/662 +f 974/1948/662 979/1947/655 976/1940/651 975/1939/664 +f 985/1949/308 724/1570/533 725/1569/532 333/1950/315 +f 1010/1951/136 322/1952/133 727/1575/538 732/1585/544 +f 736/1174/311 323/1173/138 1010/1951/136 732/1585/544 +f 999/1953/307 728/1582/541 724/1570/533 985/1949/308 +f 989/1566/137 990/1954/324 707/1526/499 706/1524/497 +f 1000/1171/309 77/809/168 81/802/161 1001/801/160 +f 726/1573/536 321/1955/134 333/1950/315 725/1569/532 +f 727/1575/538 322/1952/133 321/1955/134 726/1573/536 +f 331/1956/317 770/1682/580 766/1644/566 330/1643/201 +f 1007/1957/150 1006/1655/149 768/1656/572 772/1688/582 +f 1009/1958/210 1014/1959/218 776/1701/588 780/1709/591 +f 1007/1957/150 772/1688/582 776/1701/588 1014/1959/218 +f 1015/1429/211 784/1716/594 782/1693/583 1024/1692/322 +f 1022/1960/321 721/1556/527 720/1553/524 1023/1680/222 +f 778/1694/584 774/1697/586 1008/1961/319 332/1695/318 +f 1015/1429/211 1009/1958/210 780/1709/591 784/1716/594 +f 1000/1962/309 734/1591/548 728/1582/541 999/1953/307 +f 722/1557/528 721/1556/527 1022/1960/321 338/1576/316 +f 1008/1961/319 774/1697/586 770/1682/580 331/1956/317 +f 1017/1691/320 716/1546/517 715/1544/515 997/1658/140 +f 1000/1962/309 1001/1579/160 738/1578/539 734/1591/548 +f 1057/1652/571 1025/1651/570 1050/1495/468 1058/1494/467 +f 337/1963/193 1020/1964/182 693/1498/471 692/1497/470 +f 1020/1964/182 1018/1965/181 694/1501/474 693/1498/471 +f 1018/1965/181 335/1966/171 695/1503/476 694/1501/474 +f 335/1966/171 327/1967/163 696/1505/478 695/1503/476 +f 327/1967/163 326/1968/153 697/1507/480 696/1505/478 +f 326/1968/153 980/1567/152 698/1509/482 697/1507/480 +f 990/1954/324 991/1969/330 708/1529/502 707/1526/499 +f 991/1969/330 992/1970/329 709/1530/503 708/1529/502 +f 992/1970/329 993/1971/328 710/1533/506 709/1530/503 +f 993/1972/328 994/1973/327 711/1536/507 710/1535/506 +f 994/1973/327 336/1974/326 712/1539/510 711/1536/507 +f 336/1974/326 995/1975/325 713/1540/511 712/1539/510 +f 995/1975/325 996/1657/139 714/1542/513 713/1540/511 +f 723/1559/530 1021/1577/194 337/1963/193 692/1497/470 +f 1003/1976/333 325/1593/332 748/1594/550 752/1635/556 +f 328/1595/178 1019/1619/177 754/1622/559 750/1596/551 +f 1013/1639/335 1012/1615/334 756/1618/557 760/1640/564 +f 1004/1620/190 329/1642/189 762/1645/567 758/1621/558 +f 1153/1977/667 1154/1978/668 1155/1979/669 1156/1980/670 +f 1160/1981/671 1161/1982/672 1154/1978/668 1153/1977/667 +f 1156/1980/670 1155/1979/669 1162/1983/673 1157/1984/674 +f 1157/1984/674 1162/1983/673 1163/1985/675 1158/1986/676 +f 1158/1987/676 1163/1988/675 1164/1989/677 1159/1990/678 +f 1159/1990/678 1164/1989/677 1161/1982/672 1160/1981/671 +f 1165/1991/679 1166/1992/675 1167/1993/673 1168/1994/680 +f 1172/1995/681 1173/1996/677 1166/1992/675 1165/1991/679 +f 1168/1994/680 1167/1993/673 1174/1997/669 1169/1998/682 +f 1169/1998/682 1174/1997/669 1175/1999/668 1170/2000/683 +f 1170/2001/683 1175/2002/668 1176/2003/672 1171/2004/684 +f 1171/2004/684 1176/2003/672 1173/1996/677 1172/1995/681 +f 1177/2005/685 1178/2006/1 1179/2007/686 1180/2008/687 +f 1184/2009/688 1185/2010/689 1178/2006/1 1177/2005/685 +f 1180/2008/687 1179/2007/686 1186/2011/690 1181/2012/691 +f 1181/2012/691 1186/2011/690 1187/2013/2 1182/2014/692 +f 1182/2015/692 1187/2016/2 1188/2017/693 1183/2018/694 +f 1183/2018/694 1188/2017/693 1185/2010/689 1184/2009/688 +f 1189/2019/695 1190/2020/2 1191/2021/690 1192/2022/696 +f 1196/2023/697 1197/2024/693 1190/2020/2 1189/2019/695 +f 1192/2022/696 1191/2021/690 1198/2025/686 1193/2026/698 +f 1193/2026/698 1198/2025/686 1199/2027/1 1194/2028/699 +f 1194/2029/699 1199/2030/1 1200/2031/689 1195/2032/700 +f 1195/2032/700 1200/2031/689 1197/2024/693 1196/2023/697 +f 1201/2033/701 1202/2034/702 1203/2035/703 1204/2036/704 +f 1208/2037/705 1209/2038/706 1202/2034/702 1201/2033/701 +f 1204/2036/704 1203/2035/703 1210/2039/707 1205/2040/708 +f 1205/2040/708 1210/2039/707 1211/2041/709 1206/2042/710 +f 1206/2043/710 1211/2044/709 1212/2045/711 1207/2046/712 +f 1207/2046/712 1212/2045/711 1209/2038/706 1208/2037/705 +f 1213/2047/713 1214/2048/709 1215/2049/707 1216/2050/714 +f 1220/2051/715 1221/2052/711 1214/2048/709 1213/2047/713 +f 1216/2050/714 1215/2049/707 1222/2053/703 1217/2054/716 +f 1217/2054/716 1222/2053/703 1223/2055/702 1218/2056/717 +f 1218/2057/717 1223/2058/702 1224/2059/706 1219/2060/718 +f 1219/2060/718 1224/2059/706 1221/2052/711 1220/2051/715 +f 1225/2061/719 1226/2062/390 1227/2063/720 1228/2064/721 +f 1232/2065/722 1233/2066/723 1226/2062/390 1225/2061/719 +f 1228/2064/721 1227/2063/720 1234/2067/724 1229/2068/725 +f 1229/2068/725 1234/2067/724 1235/2069/397 1230/2070/726 +f 1230/2071/726 1235/2072/397 1236/2073/727 1231/2074/728 +f 1231/2074/728 1236/2073/727 1233/2066/723 1232/2065/722 +f 1237/2075/729 1238/2076/397 1239/2077/724 1240/2078/730 +f 1244/2079/731 1245/2080/727 1238/2076/397 1237/2075/729 +f 1240/2078/730 1239/2077/724 1246/2081/720 1241/2082/732 +f 1241/2082/732 1246/2081/720 1247/2083/390 1242/2084/733 +f 1242/2085/733 1247/2086/390 1248/2087/723 1243/2088/734 +f 1243/2088/734 1248/2087/723 1245/2080/727 1244/2079/731 +f 1249/2089/676 1250/2090/675 1251/2091/677 1252/2092/678 +f 1256/2093/674 1257/2094/673 1250/2090/675 1249/2089/676 +f 1252/2092/678 1251/2091/677 1258/2095/672 1253/2096/671 +f 1253/2096/671 1258/2095/672 1259/2097/668 1254/2098/667 +f 1254/2099/667 1259/2100/668 1260/2101/669 1255/2102/670 +f 1255/2102/670 1260/2101/669 1257/2094/673 1256/2093/674 +f 1261/2103/683 1262/2104/668 1263/2105/672 1264/2106/684 +f 1268/2107/682 1269/2108/669 1262/2104/668 1261/2103/683 +f 1264/2106/684 1263/2105/672 1270/2109/677 1265/2110/681 +f 1265/2110/681 1270/2109/677 1271/2111/675 1266/2112/679 +f 1266/2113/679 1271/2114/675 1272/2115/673 1267/2116/680 +f 1267/2116/680 1272/2115/673 1269/2108/669 1268/2107/682 +f 1273/2117/692 1274/2118/2 1275/2119/693 1276/2120/694 +f 1280/2121/691 1281/2122/690 1274/2118/2 1273/2117/692 +f 1276/2120/694 1275/2119/693 1282/2123/689 1277/2124/688 +f 1277/2124/688 1282/2123/689 1283/2125/1 1278/2126/685 +f 1278/2127/685 1283/2128/1 1284/2129/686 1279/2130/687 +f 1279/2130/687 1284/2129/686 1281/2122/690 1280/2121/691 +f 1285/2131/699 1286/2132/1 1287/2133/689 1288/2134/700 +f 1292/2135/698 1293/2136/686 1286/2132/1 1285/2131/699 +f 1288/2134/700 1287/2133/689 1294/2137/693 1289/2138/697 +f 1289/2138/697 1294/2137/693 1295/2139/2 1290/2140/695 +f 1290/2141/695 1295/2142/2 1296/2143/690 1291/2144/696 +f 1291/2144/696 1296/2143/690 1293/2136/686 1292/2135/698 +f 1297/2145/710 1298/2146/709 1299/2147/711 1300/2148/712 +f 1304/2149/708 1305/2150/707 1298/2146/709 1297/2145/710 +f 1300/2148/712 1299/2147/711 1306/2151/706 1301/2152/705 +f 1301/2152/705 1306/2151/706 1307/2153/702 1302/2154/701 +f 1302/2155/701 1307/2156/702 1308/2157/703 1303/2158/704 +f 1303/2158/704 1308/2157/703 1305/2150/707 1304/2149/708 +f 1309/2159/717 1310/2160/702 1311/2161/706 1312/2162/718 +f 1316/2163/716 1317/2164/703 1310/2160/702 1309/2159/717 +f 1312/2162/718 1311/2161/706 1318/2165/711 1313/2166/715 +f 1313/2166/715 1318/2165/711 1319/2167/709 1314/2168/713 +f 1314/2169/713 1319/2170/709 1320/2171/707 1315/2172/714 +f 1315/2172/714 1320/2171/707 1317/2164/703 1316/2163/716 +f 1321/2173/726 1322/2174/397 1323/2175/727 1324/2176/728 +f 1328/2177/725 1329/2178/724 1322/2174/397 1321/2173/726 +f 1324/2176/728 1323/2175/727 1330/2179/723 1325/2180/722 +f 1325/2180/722 1330/2179/723 1331/2181/390 1326/2182/719 +f 1326/2183/719 1331/2184/390 1332/2185/720 1327/2186/721 +f 1327/2186/721 1332/2185/720 1329/2178/724 1328/2177/725 +f 1333/2187/733 1334/2188/390 1335/2189/723 1336/2190/734 +f 1340/2191/732 1341/2192/720 1334/2188/390 1333/2187/733 +f 1336/2190/734 1335/2189/723 1342/2193/727 1337/2194/731 +f 1337/2194/731 1342/2193/727 1343/2195/397 1338/2196/729 +f 1338/2197/729 1343/2198/397 1344/2199/724 1339/2200/730 +f 1339/2200/730 1344/2199/724 1341/2192/720 1340/2191/732 diff --git a/mods/pipeworks/models/pipeworks_pipe_8_lowpoly.obj b/mods/pipeworks/models/pipeworks_pipe_8_lowpoly.obj new file mode 100755 index 0000000..12d0129 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_8_lowpoly.obj @@ -0,0 +1,520 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +o Cylinder.002_Cylinder.006_None.003_Cylinder.002_Cylinder.00.000 +v 0.468750 -0.156250 0.064721 +v 0.468750 -0.064721 0.156250 +v 0.468750 0.064721 0.156250 +v 0.468750 0.156250 0.064721 +v 0.468750 0.156250 -0.064721 +v 0.468750 0.064721 -0.156250 +v 0.468750 -0.064721 -0.156250 +v 0.468750 -0.156250 -0.064721 +v 0.500000 -0.064721 0.156250 +v 0.500000 -0.156250 0.064721 +v 0.500000 -0.156250 -0.064721 +v 0.500000 -0.064721 -0.156250 +v 0.500000 0.064721 -0.156250 +v 0.500000 0.156250 -0.064721 +v 0.500000 0.156250 0.064721 +v 0.500000 0.064721 0.156250 +v -0.500000 -0.156250 0.064721 +v -0.500000 -0.064721 0.156250 +v -0.500000 0.064721 0.156250 +v -0.500000 0.156250 0.064721 +v -0.500000 0.156250 -0.064721 +v -0.500000 0.064721 -0.156250 +v -0.500000 -0.064721 -0.156250 +v -0.500000 -0.156250 -0.064721 +v -0.468750 -0.064721 0.156250 +v -0.468750 -0.156250 0.064721 +v -0.468750 -0.156250 -0.064721 +v -0.468750 -0.064721 -0.156250 +v -0.468750 0.064721 -0.156250 +v -0.468750 0.156250 -0.064721 +v -0.468750 0.156250 0.064721 +v -0.468750 0.064721 0.156250 +v 0.156250 0.468750 0.064721 +v 0.064721 0.468750 0.156250 +v -0.064721 0.468750 0.156250 +v -0.156250 0.468750 0.064721 +v -0.156250 0.468750 -0.064721 +v -0.064721 0.468750 -0.156250 +v 0.064721 0.468750 -0.156250 +v 0.156250 0.468750 -0.064721 +v 0.064721 0.500000 0.156250 +v 0.156250 0.500000 0.064721 +v 0.156250 0.500000 -0.064721 +v 0.064721 0.500000 -0.156250 +v -0.064721 0.500000 -0.156250 +v -0.156250 0.500000 -0.064721 +v -0.156250 0.500000 0.064721 +v -0.064721 0.500000 0.156250 +v 0.156250 -0.500000 0.064721 +v 0.064721 -0.500000 0.156250 +v -0.064721 -0.500000 0.156250 +v -0.156250 -0.500000 0.064721 +v -0.156250 -0.500000 -0.064721 +v -0.064721 -0.500000 -0.156250 +v 0.064721 -0.500000 -0.156250 +v 0.156250 -0.500000 -0.064721 +v 0.064721 -0.468750 0.156250 +v 0.156250 -0.468750 0.064721 +v 0.156250 -0.468750 -0.064721 +v 0.064721 -0.468750 -0.156250 +v -0.064721 -0.468750 -0.156250 +v -0.156250 -0.468750 -0.064721 +v -0.156250 -0.468750 0.064721 +v -0.064721 -0.468750 0.156250 +v 0.468750 -0.051777 0.125000 +v 0.468750 -0.125000 0.051777 +v 0.468750 -0.125000 -0.051777 +v 0.468750 -0.051777 -0.125000 +v 0.468750 0.051777 -0.125000 +v 0.468750 0.125000 -0.051777 +v 0.468750 0.125000 0.051777 +v 0.468750 0.051777 0.125000 +v -0.468750 -0.125000 0.051777 +v -0.468750 -0.051777 0.125000 +v -0.468750 0.051777 0.125000 +v -0.468750 0.125000 0.051777 +v -0.468750 0.125000 -0.051777 +v -0.468750 0.051777 -0.125000 +v -0.468750 -0.051777 -0.125000 +v -0.468750 -0.125000 -0.051777 +v 0.125000 0.125000 0.051777 +v 0.051777 0.051777 0.125000 +v 0.051777 -0.051777 0.125000 +v 0.125000 -0.125000 0.051777 +v 0.051777 0.051777 -0.125000 +v 0.125000 0.125000 -0.051777 +v -0.051777 -0.051777 -0.125000 +v -0.125000 -0.125000 -0.051777 +v -0.125000 -0.125000 0.051777 +v -0.051777 -0.051777 0.125000 +v -0.125000 0.125000 -0.051777 +v -0.051777 0.051777 -0.125000 +v -0.125000 0.125000 0.051777 +v 0.125000 -0.125000 -0.051777 +v 0.051777 0.468750 0.125000 +v 0.125000 0.468750 0.051777 +v 0.125000 0.468750 -0.051777 +v 0.051777 0.468750 -0.125000 +v -0.051777 0.468750 -0.125000 +v -0.125000 0.468750 -0.051777 +v -0.125000 0.468750 0.051777 +v -0.051777 0.468750 0.125000 +v 0.125000 -0.468750 0.051777 +v 0.051777 -0.468750 0.125000 +v -0.051777 -0.468750 0.125000 +v -0.125000 -0.468750 0.051777 +v -0.125000 -0.468750 -0.051777 +v -0.051777 -0.468750 -0.125000 +v 0.051777 -0.468750 -0.125000 +v 0.125000 -0.468750 -0.051777 +v -0.051777 0.051777 0.125000 +v 0.051777 -0.051777 -0.125000 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.5000 0.0156 +vt 0.5000 0.2031 +vt 0.3750 0.2344 +vt 0.3750 0.0156 +vt 0.1250 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2344 +vt 0.1250 0.2031 +vt 0.6250 0.0156 +vt 0.7500 0.0156 +vt 0.7500 0.2344 +vt 0.6250 0.2031 +vt 1.0000 0.5156 +vt 0.8750 0.5156 +vt 0.8750 0.2969 +vt 1.0000 0.3281 +vt 0.1250 0.5156 +vt 0.1250 0.3281 +vt 0.2500 0.2969 +vt 0.2500 0.5156 +vt 0.6250 0.5156 +vt 0.6250 0.3281 +vt 0.7500 0.2969 +vt 0.7500 0.5156 +vt 0.5000 0.5156 +vt 0.5000 0.3281 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.5000 0.0156 +vt 0.5000 0.2031 +vt 0.3750 0.2344 +vt 0.3750 0.0156 +vt 0.1250 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2344 +vt 0.1250 0.2031 +vt 0.6250 0.0156 +vt 0.7500 0.0156 +vt 0.7500 0.2344 +vt 0.6250 0.2031 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 1.0000 0.5156 +vt 0.8750 0.5156 +vt 0.8750 0.2969 +vt 1.0000 0.3281 +vt 0.1250 0.5156 +vt 0.1250 0.3281 +vt 0.2500 0.2969 +vt 0.2500 0.5156 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 0.6250 0.5156 +vt 0.5000 0.5156 +vt 0.5000 0.3281 +vt 0.6250 0.3281 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.3750 0.5156 +vt 0.3750 0.2969 +vt 0.7500 0.2969 +vt 0.7500 0.5156 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vt 0.3750 0.5156 +vt 0.3750 0.2969 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.6302 -0.2971 0.7173 +vn -0.6302 -0.2971 0.7173 +vn -0.6302 -0.7173 0.2971 +vn 0.6302 -0.7173 0.2971 +vn -0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 -0.2971 +vn -0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 -0.7173 +vn -0.6302 0.2971 -0.7173 +vn 0.6302 0.2971 -0.7173 +vn -0.6302 0.7173 -0.2971 +vn 0.6302 0.7173 -0.2971 +vn -0.6302 0.7173 0.2971 +vn 0.6302 0.7173 0.2971 +vn -0.6302 0.2971 0.7173 +vn 0.6302 0.2971 0.7173 +vn 0.6303 -0.2971 0.7173 +vn 0.6303 -0.7173 0.2971 +vn 0.6303 -0.7173 -0.2971 +vn 0.6303 -0.2971 -0.7173 +vn 0.6303 0.2971 -0.7173 +vn 0.6303 0.7173 -0.2971 +vn 0.6303 0.7173 0.2971 +vn 0.6303 0.2971 0.7173 +vn -0.6303 -0.7173 0.2971 +vn -0.6303 -0.2971 0.7173 +vn -0.6303 0.2971 0.7173 +vn -0.6303 0.7173 0.2971 +vn -0.6303 0.7173 -0.2971 +vn -0.6303 0.2971 -0.7173 +vn -0.6303 -0.2971 -0.7173 +vn -0.6303 -0.7173 -0.2971 +vn 0.5789 0.5789 0.5743 +vn 0.1101 0.1101 0.9878 +vn 0.1101 -0.1101 0.9878 +vn 0.5789 -0.5789 0.5743 +vn 0.1101 0.1101 -0.9878 +vn 0.5789 0.5789 -0.5743 +vn -0.1101 -0.1101 -0.9878 +vn -0.5789 -0.5789 -0.5743 +vn -0.5789 -0.5789 0.5743 +vn -0.1101 -0.1101 0.9878 +vn -0.5789 0.5789 -0.5743 +vn -0.1101 0.1101 -0.9878 +vn -0.5789 0.5789 0.5743 +vn 0.5789 -0.5789 -0.5743 +vn 0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn 0.7173 -0.6302 0.2971 +vn 0.7173 0.6302 0.2971 +vn 0.7173 -0.6302 -0.2971 +vn 0.7173 0.6302 -0.2971 +vn 0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 -0.7173 +vn -0.2971 -0.6302 -0.7173 +vn -0.2971 0.6302 -0.7173 +vn -0.7173 -0.6302 -0.2971 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 -0.6302 0.2971 +vn -0.7173 0.6302 0.2971 +vn -0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn 0.2971 0.6303 0.7173 +vn 0.7173 0.6303 0.2971 +vn 0.7173 0.6303 -0.2971 +vn 0.2971 0.6303 -0.7173 +vn -0.2971 0.6303 -0.7173 +vn -0.7173 0.6303 -0.2971 +vn -0.7173 0.6303 0.2971 +vn -0.2971 0.6303 0.7173 +vn 0.7173 -0.6303 0.2971 +vn 0.2971 -0.6303 0.7173 +vn -0.2971 -0.6303 0.7173 +vn -0.7173 -0.6303 0.2971 +vn -0.7173 -0.6303 -0.2971 +vn -0.2971 -0.6303 -0.7173 +vn 0.2971 -0.6303 -0.7173 +vn 0.7173 -0.6303 -0.2971 +vn -0.1101 0.1101 0.9878 +vn 0.1101 -0.1101 -0.9878 +g Cylinder.002_Cylinder.006_None.003_Cylinder.002_Cylinder.00.000_Cylinder.002_Cylinder.006_None.003_Cylinder.002_Cylinder.00.000_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2 +f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 +f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2 +f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3 +f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4 +f 49/49/3 50/50/3 51/51/3 52/52/3 53/53/3 54/54/3 55/55/3 56/56/3 +f 57/57/4 58/58/4 59/59/4 60/60/4 61/61/4 62/62/4 63/63/4 64/64/4 +s 1 +f 9/65/5 2/66/6 1/67/7 10/68/8 +f 10/68/8 1/67/7 8/69/9 11/70/10 +f 11/70/10 8/69/9 7/71/11 12/72/12 +f 12/73/12 7/74/11 6/75/13 13/76/14 +f 13/76/14 6/75/13 5/77/15 14/78/16 +f 14/78/16 5/77/15 4/79/17 15/80/18 +f 15/80/18 4/79/17 3/81/19 16/82/20 +f 16/82/20 3/81/19 2/66/6 9/65/5 +f 26/83/8 17/84/7 24/85/9 27/86/10 +f 25/87/5 18/88/6 17/84/7 26/83/8 +f 27/86/10 24/85/9 23/89/11 28/90/12 +f 28/91/12 23/92/11 22/93/13 29/94/14 +f 29/94/14 22/93/13 21/95/15 30/96/16 +f 30/96/16 21/95/15 20/97/17 31/98/18 +f 31/98/18 20/97/17 19/99/19 32/100/20 +f 32/100/20 19/99/19 18/88/6 25/87/5 +f 65/101/21 66/102/22 67/103/23 68/104/24 69/105/25 70/106/26 71/107/27 72/108/28 +f 73/109/29 74/110/30 75/111/31 76/112/32 77/113/33 78/114/34 79/115/35 80/116/36 +f 71/117/27 81/118/37 82/119/38 72/120/28 +f 66/121/22 65/122/21 83/123/39 84/124/40 +f 70/125/26 69/126/25 85/127/41 86/128/42 +f 80/129/36 79/130/35 87/131/43 88/132/44 +f 73/133/29 89/134/45 90/135/46 74/136/30 +f 77/137/33 91/138/47 92/139/48 78/140/34 +f 77/137/33 76/141/32 93/142/49 91/138/47 +f 73/133/29 80/143/36 88/144/44 89/134/45 +f 70/125/26 86/128/42 81/118/37 71/117/27 +f 66/121/22 84/124/40 94/145/50 67/146/23 +f 41/147/51 34/148/52 33/149/53 42/150/54 +f 42/150/54 33/149/53 40/151/55 43/152/56 +f 43/152/56 40/151/55 39/153/57 44/154/58 +f 44/155/58 39/156/57 38/157/59 45/158/60 +f 45/158/60 38/157/59 37/159/61 46/160/62 +f 46/160/62 37/159/61 36/161/63 47/162/64 +f 47/162/64 36/161/63 35/163/65 48/164/66 +f 48/164/66 35/163/65 34/148/52 41/147/51 +f 58/165/54 49/166/53 56/167/55 59/168/56 +f 57/169/51 50/170/52 49/166/53 58/165/54 +f 59/168/56 56/167/55 55/171/57 60/172/58 +f 60/173/58 55/174/57 54/175/59 61/176/60 +f 61/176/60 54/175/59 53/177/61 62/178/62 +f 62/178/62 53/177/61 52/179/63 63/180/64 +f 63/180/64 52/179/63 51/181/65 64/182/66 +f 64/182/66 51/181/65 50/170/52 57/169/51 +f 95/183/67 96/184/68 97/185/69 98/186/70 99/187/71 100/188/72 101/189/73 102/190/74 +f 103/191/75 104/192/76 105/193/77 106/194/78 107/195/79 108/196/80 109/197/81 110/198/82 +f 101/199/73 93/200/49 111/201/83 102/202/74 +f 96/203/68 95/204/67 82/205/38 81/206/37 +f 100/207/72 99/208/71 92/209/48 91/210/47 +f 97/211/69 86/212/42 85/213/41 98/214/70 +f 110/215/82 109/216/81 112/217/84 94/218/50 +f 103/219/75 84/220/40 83/221/39 104/222/76 +f 67/223/23 94/224/50 112/225/84 68/226/24 +f 107/227/79 106/228/78 89/229/45 88/230/44 +f 103/219/75 110/231/82 94/232/50 84/220/40 +f 105/233/77 90/234/46 89/229/45 106/228/78 +f 107/227/79 88/230/44 87/235/43 108/236/80 +f 100/207/72 91/210/47 93/200/49 101/199/73 +f 96/203/68 81/206/37 86/237/42 97/238/69 +f 75/239/31 111/240/83 93/142/49 76/141/32 +f 68/226/24 112/217/84 85/127/41 69/126/25 +f 108/236/80 87/131/43 112/217/84 109/216/81 +f 87/131/43 79/130/35 78/140/34 92/209/48 +f 112/217/84 87/131/43 92/209/48 85/127/41 +f 104/222/76 83/123/39 90/234/46 105/233/77 +f 72/120/28 82/205/38 83/123/39 65/122/21 +f 82/205/38 95/204/67 102/202/74 111/240/83 +f 83/123/39 82/205/38 111/240/83 90/234/46 +f 92/209/48 99/208/71 98/214/70 85/127/41 +f 111/240/83 75/239/31 74/136/30 90/234/46 diff --git a/mods/pipeworks/models/pipeworks_pipe_9.obj b/mods/pipeworks/models/pipeworks_pipe_9.obj new file mode 100755 index 0000000..23c4663 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_9.obj @@ -0,0 +1,6721 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +o Pipe_Cylinder.002_None +v -0.460912 0.130078 -0.063644 +v -0.460912 0.139022 -0.062467 +v -0.460912 0.142474 -0.054132 +v -0.460912 0.136982 -0.046976 +v -0.460912 0.128039 -0.048153 +v -0.460912 0.124587 -0.056487 +v 0.460914 0.136982 -0.046976 +v 0.460914 0.142474 -0.054133 +v 0.460914 0.139022 -0.062467 +v 0.460914 0.130078 -0.063644 +v 0.460914 0.124587 -0.056488 +v 0.460914 0.128039 -0.048153 +v -0.460912 0.046976 -0.136982 +v -0.460912 0.054133 -0.142474 +v -0.460912 0.062467 -0.139022 +v -0.460912 0.063644 -0.130078 +v -0.460912 0.056488 -0.124587 +v -0.460912 0.048154 -0.128039 +v 0.460914 0.063644 -0.130078 +v 0.460914 0.062467 -0.139022 +v 0.460914 0.054133 -0.142474 +v 0.460914 0.046976 -0.136982 +v 0.460914 0.048153 -0.128039 +v 0.460914 0.056487 -0.124587 +v -0.460912 -0.063644 -0.130078 +v -0.460912 -0.062467 -0.139022 +v -0.460912 -0.054132 -0.142474 +v -0.460912 -0.046976 -0.136982 +v -0.460912 -0.048153 -0.128039 +v -0.460912 -0.056487 -0.124587 +v 0.460914 -0.046976 -0.136982 +v 0.460914 -0.054133 -0.142474 +v 0.460914 -0.062467 -0.139022 +v 0.460914 -0.063644 -0.130078 +v 0.460914 -0.056488 -0.124587 +v 0.460914 -0.048153 -0.128039 +v -0.460912 -0.136982 -0.046976 +v -0.460912 -0.142474 -0.054133 +v -0.460912 -0.139022 -0.062467 +v -0.460912 -0.130078 -0.063644 +v -0.460912 -0.124587 -0.056488 +v -0.460912 -0.128039 -0.048153 +v 0.460914 -0.130078 -0.063644 +v 0.460914 -0.139022 -0.062467 +v 0.460914 -0.142474 -0.054133 +v 0.460914 -0.136982 -0.046976 +v 0.460914 -0.128039 -0.048153 +v 0.460914 -0.124587 -0.056487 +v -0.460912 -0.130078 0.063644 +v -0.460912 -0.139022 0.062467 +v -0.460912 -0.142474 0.054132 +v -0.460912 -0.136982 0.046976 +v -0.460912 -0.128039 0.048153 +v -0.460912 -0.124587 0.056487 +v 0.460914 -0.136982 0.046976 +v 0.460914 -0.142474 0.054133 +v 0.460914 -0.139022 0.062467 +v 0.460914 -0.130078 0.063644 +v 0.460914 -0.124587 0.056487 +v 0.460914 -0.128039 0.048153 +v -0.460912 -0.046976 0.136982 +v -0.460912 -0.054133 0.142474 +v -0.460912 -0.062467 0.139022 +v -0.460912 -0.063644 0.130078 +v -0.460912 -0.056488 0.124587 +v -0.460912 -0.048153 0.128039 +v 0.460914 -0.063644 0.130078 +v 0.460914 -0.062467 0.139022 +v 0.460914 -0.054132 0.142474 +v 0.460914 -0.046976 0.136982 +v 0.460914 -0.048153 0.128039 +v 0.460914 -0.056487 0.124587 +v -0.460912 0.063644 0.130078 +v -0.460912 0.062467 0.139022 +v -0.460912 0.054132 0.142474 +v -0.460912 0.046976 0.136982 +v -0.460912 0.048153 0.128039 +v -0.460912 0.056487 0.124587 +v 0.460914 0.046976 0.136982 +v 0.460914 0.054133 0.142474 +v 0.460914 0.062467 0.139022 +v 0.460914 0.063644 0.130078 +v 0.460914 0.056487 0.124587 +v 0.460914 0.048153 0.128039 +v -0.460912 0.136982 0.046976 +v -0.460912 0.142474 0.054133 +v -0.460912 0.139022 0.062467 +v -0.460912 0.130078 0.063644 +v -0.460912 0.124587 0.056488 +v -0.460912 0.128039 0.048153 +v 0.460914 0.130078 0.063644 +v 0.460914 0.139022 0.062467 +v 0.460914 0.142474 0.054133 +v 0.460914 0.136982 0.046976 +v 0.460914 0.128039 0.048153 +v 0.460914 0.124587 0.056487 +v 0.468750 0.099603 0.121367 +v 0.468750 0.121367 0.099603 +v 0.468750 0.138467 0.074012 +v 0.468750 0.150245 0.045576 +v 0.468750 0.156250 0.015389 +v 0.468750 0.156250 -0.015389 +v 0.468750 0.150245 -0.045576 +v 0.468750 0.138467 -0.074012 +v 0.468750 0.121367 -0.099603 +v 0.468750 0.099603 -0.121367 +v 0.468750 0.074012 -0.138467 +v 0.468750 0.045576 -0.150245 +v 0.468750 0.015389 -0.156250 +v 0.468750 -0.015389 -0.156250 +v 0.468750 -0.045576 -0.150245 +v 0.468750 -0.074012 -0.138467 +v 0.468750 -0.099603 -0.121367 +v 0.468750 -0.121367 -0.099603 +v 0.468750 -0.138467 -0.074012 +v 0.468750 -0.150245 -0.045576 +v 0.468750 -0.156250 -0.015389 +v 0.468750 -0.156250 0.015389 +v 0.468750 -0.150245 0.045576 +v 0.468750 -0.138466 0.074012 +v 0.468750 -0.121367 0.099603 +v 0.468750 -0.099603 0.121367 +v 0.468750 -0.074012 0.138467 +v 0.468750 -0.045576 0.150245 +v 0.468750 -0.015389 0.156250 +v 0.468750 0.015390 0.156250 +v 0.468750 0.045577 0.150245 +v 0.468750 0.074012 0.138467 +v 0.500000 -0.150245 -0.045576 +v 0.500000 -0.138467 -0.074012 +v 0.500000 -0.121367 -0.099603 +v 0.500000 -0.099603 -0.121367 +v 0.500000 -0.074012 -0.138467 +v 0.500000 -0.045576 -0.150245 +v 0.500000 -0.015389 -0.156250 +v 0.500000 0.015389 -0.156250 +v 0.500000 0.045576 -0.150245 +v 0.500000 0.074012 -0.138467 +v 0.500000 0.099603 -0.121367 +v 0.500000 0.121367 -0.099603 +v 0.500000 0.138467 -0.074012 +v 0.500000 0.150245 -0.045576 +v 0.500000 0.156250 -0.015389 +v 0.500000 0.156250 0.015389 +v 0.500000 0.150245 0.045576 +v 0.500000 0.138467 0.074012 +v 0.500000 0.121367 0.099603 +v 0.500000 0.099603 0.121367 +v 0.500000 0.074012 0.138467 +v 0.500000 0.045577 0.150245 +v 0.500000 0.015390 0.156250 +v 0.500000 -0.015389 0.156250 +v 0.500000 -0.045576 0.150245 +v 0.500000 -0.074012 0.138467 +v 0.500000 -0.099603 0.121367 +v 0.500000 -0.121367 0.099603 +v 0.500000 -0.138466 0.074012 +v 0.500000 -0.150245 0.045576 +v 0.500000 -0.156250 0.015389 +v 0.500000 -0.156250 -0.015389 +v -0.468750 -0.156250 -0.015389 +v -0.468750 -0.150245 -0.045576 +v -0.468750 -0.138467 -0.074012 +v -0.468750 -0.121367 -0.099603 +v -0.468750 -0.099603 -0.121367 +v -0.468750 -0.074012 -0.138467 +v -0.468750 -0.045576 -0.150245 +v -0.468750 -0.015389 -0.156250 +v -0.468750 0.015389 -0.156250 +v -0.468750 0.045576 -0.150245 +v -0.468750 0.074012 -0.138467 +v -0.468750 0.099603 -0.121367 +v -0.468750 0.121367 -0.099603 +v -0.468750 0.138467 -0.074012 +v -0.468750 0.150245 -0.045576 +v -0.468750 0.156250 -0.015389 +v -0.468750 0.156249 0.015389 +v -0.468750 0.150245 0.045577 +v -0.468750 0.138466 0.074012 +v -0.468750 0.121367 0.099603 +v -0.468750 0.099603 0.121367 +v -0.468750 0.074012 0.138467 +v -0.468750 0.045576 0.150245 +v -0.468750 0.015389 0.156250 +v -0.468750 -0.015389 0.156250 +v -0.468750 -0.045576 0.150245 +v -0.468750 -0.074012 0.138467 +v -0.468750 -0.099603 0.121367 +v -0.468750 -0.121367 0.099603 +v -0.468750 -0.138466 0.074012 +v -0.468750 -0.150245 0.045576 +v -0.468750 -0.156250 0.015389 +v -0.500000 -0.138467 0.074012 +v -0.500000 -0.121367 0.099603 +v -0.500000 -0.099603 0.121367 +v -0.500000 -0.074012 0.138467 +v -0.500000 -0.045576 0.150245 +v -0.500000 -0.015389 0.156250 +v -0.500000 0.015389 0.156250 +v -0.500000 0.045576 0.150245 +v -0.500000 0.074012 0.138467 +v -0.500000 0.099603 0.121367 +v -0.500000 0.121367 0.099603 +v -0.500000 0.138466 0.074012 +v -0.500000 0.150245 0.045577 +v -0.500000 0.156250 0.015389 +v -0.500000 0.156250 -0.015389 +v -0.500000 0.150245 -0.045576 +v -0.500000 0.138467 -0.074012 +v -0.500000 0.121367 -0.099603 +v -0.500000 0.099603 -0.121367 +v -0.500000 0.074012 -0.138467 +v -0.500000 0.045576 -0.150245 +v -0.500000 0.015389 -0.156250 +v -0.500000 -0.015389 -0.156250 +v -0.500000 -0.045576 -0.150245 +v -0.500000 -0.074012 -0.138467 +v -0.500000 -0.099603 -0.121367 +v -0.500000 -0.121367 -0.099603 +v -0.500000 -0.138467 -0.074012 +v -0.500000 -0.150245 -0.045576 +v -0.500000 -0.156250 -0.015389 +v -0.500000 -0.156250 0.015389 +v -0.500000 -0.150245 0.045576 +v -0.460912 0.095821 -0.108578 +v -0.460912 0.104534 -0.110913 +v -0.460912 0.110913 -0.104534 +v -0.460912 0.108578 -0.095821 +v -0.460912 0.099865 -0.093486 +v -0.460912 0.093486 -0.099865 +v 0.460914 0.108578 -0.095821 +v 0.460914 0.110913 -0.104534 +v 0.460914 0.104534 -0.110913 +v 0.460914 0.095821 -0.108578 +v 0.460914 0.093486 -0.099865 +v 0.460914 0.099865 -0.093486 +v -0.460912 -0.009021 -0.144532 +v -0.460912 -0.004510 -0.152344 +v -0.460912 0.004510 -0.152344 +v -0.460912 0.009021 -0.144532 +v -0.460912 0.004510 -0.136720 +v -0.460912 -0.004510 -0.136720 +v 0.460914 0.009021 -0.144532 +v 0.460914 0.004510 -0.152344 +v 0.460914 -0.004510 -0.152344 +v 0.460914 -0.009021 -0.144532 +v 0.460914 -0.004510 -0.136720 +v 0.460914 0.004510 -0.136720 +v -0.460912 -0.108578 -0.095821 +v -0.460912 -0.110913 -0.104534 +v -0.460912 -0.104534 -0.110913 +v -0.460912 -0.095821 -0.108578 +v -0.460912 -0.093486 -0.099865 +v -0.460912 -0.099865 -0.093486 +v 0.460914 -0.095821 -0.108578 +v 0.460914 -0.104534 -0.110913 +v 0.460914 -0.110913 -0.104534 +v 0.460914 -0.108578 -0.095821 +v 0.460914 -0.099865 -0.093486 +v 0.460914 -0.093486 -0.099865 +v -0.460912 -0.144532 0.009021 +v -0.460912 -0.152344 0.004510 +v -0.460912 -0.152344 -0.004511 +v -0.460912 -0.144532 -0.009021 +v -0.460912 -0.136720 -0.004510 +v -0.460912 -0.136720 0.004510 +v 0.460914 -0.144532 -0.009021 +v 0.460914 -0.152344 -0.004510 +v 0.460914 -0.152344 0.004510 +v 0.460914 -0.144532 0.009021 +v 0.460914 -0.136720 0.004510 +v 0.460914 -0.136720 -0.004510 +v -0.460912 -0.095821 0.108578 +v -0.460912 -0.104534 0.110913 +v -0.460912 -0.110913 0.104534 +v -0.460912 -0.108578 0.095821 +v -0.460912 -0.099865 0.093486 +v -0.460912 -0.093486 0.099865 +v 0.460914 -0.108578 0.095821 +v 0.460914 -0.110913 0.104534 +v 0.460914 -0.104534 0.110913 +v 0.460914 -0.095821 0.108578 +v 0.460914 -0.093486 0.099865 +v 0.460914 -0.099865 0.093486 +v -0.460912 0.009021 0.144532 +v -0.460912 0.004510 0.152344 +v -0.460912 -0.004510 0.152344 +v -0.460912 -0.009021 0.144532 +v -0.460912 -0.004510 0.136720 +v -0.460912 0.004510 0.136720 +v 0.460914 -0.009021 0.144532 +v 0.460914 -0.004510 0.152344 +v 0.460914 0.004510 0.152344 +v 0.460914 0.009021 0.144532 +v 0.460914 0.004510 0.136720 +v 0.460914 -0.004510 0.136720 +v -0.460912 0.108578 0.095821 +v -0.460912 0.110913 0.104534 +v -0.460912 0.104534 0.110913 +v -0.460912 0.095821 0.108578 +v -0.460912 0.093486 0.099865 +v -0.460912 0.099865 0.093486 +v 0.460914 0.095821 0.108578 +v 0.460914 0.104534 0.110913 +v 0.460914 0.110913 0.104534 +v 0.460914 0.108578 0.095821 +v 0.460914 0.099865 0.093486 +v 0.460914 0.093486 0.099865 +v -0.460912 0.144532 -0.009021 +v -0.460912 0.152344 -0.004510 +v -0.460912 0.152344 0.004510 +v -0.460912 0.144532 0.009021 +v -0.460912 0.136720 0.004510 +v -0.460912 0.136720 -0.004510 +v 0.460914 0.144532 0.009021 +v 0.460914 0.152344 0.004510 +v 0.460914 0.152344 -0.004510 +v 0.460914 0.144532 -0.009021 +v 0.460914 0.136720 -0.004510 +v 0.460914 0.136720 0.004510 +v 0.130078 0.460912 -0.063644 +v 0.139022 0.460912 -0.062467 +v 0.142474 0.460912 -0.054132 +v 0.136982 0.460912 -0.046976 +v 0.128039 0.460912 -0.048153 +v 0.124587 0.460912 -0.056487 +v 0.136982 -0.460914 -0.046976 +v 0.142474 -0.460914 -0.054133 +v 0.139022 -0.460914 -0.062467 +v 0.130078 -0.460914 -0.063644 +v 0.124587 -0.460914 -0.056488 +v 0.128039 -0.460914 -0.048154 +v 0.046976 0.460912 -0.136982 +v 0.054133 0.460912 -0.142474 +v 0.062467 0.460912 -0.139022 +v 0.063644 0.460912 -0.130078 +v 0.056488 0.460912 -0.124587 +v 0.048153 0.460912 -0.128039 +v 0.063644 -0.460914 -0.130078 +v 0.062467 -0.460914 -0.139022 +v 0.054133 -0.460914 -0.142474 +v 0.046976 -0.460914 -0.136982 +v 0.048153 -0.460914 -0.128039 +v 0.056487 -0.460914 -0.124587 +v -0.063644 0.460912 -0.130078 +v -0.062467 0.460912 -0.139022 +v -0.054132 0.460912 -0.142474 +v -0.046976 0.460912 -0.136982 +v -0.048153 0.460912 -0.128039 +v -0.056487 0.460912 -0.124587 +v -0.046976 -0.460914 -0.136982 +v -0.054133 -0.460914 -0.142474 +v -0.062467 -0.460914 -0.139022 +v -0.063644 -0.460914 -0.130078 +v -0.056487 -0.460914 -0.124587 +v -0.048153 -0.460914 -0.128039 +v -0.136982 0.460912 -0.046976 +v -0.142474 0.460912 -0.054133 +v -0.139022 0.460912 -0.062467 +v -0.130078 0.460912 -0.063644 +v -0.124587 0.460912 -0.056487 +v -0.128039 0.460912 -0.048153 +v -0.130078 -0.460914 -0.063644 +v -0.139022 -0.460914 -0.062467 +v -0.142474 -0.460914 -0.054133 +v -0.136982 -0.460914 -0.046976 +v -0.128039 -0.460914 -0.048153 +v -0.124587 -0.460914 -0.056488 +v -0.130078 0.460912 0.063644 +v -0.139022 0.460912 0.062467 +v -0.142474 0.460912 0.054133 +v -0.136982 0.460912 0.046976 +v -0.128039 0.460912 0.048153 +v -0.124587 0.460912 0.056487 +v -0.136982 -0.460914 0.046976 +v -0.142474 -0.460914 0.054133 +v -0.139022 -0.460914 0.062467 +v -0.130078 -0.460914 0.063644 +v -0.124587 -0.460914 0.056487 +v -0.128039 -0.460914 0.048153 +v -0.046976 0.460912 0.136982 +v -0.054133 0.460912 0.142474 +v -0.062467 0.460912 0.139022 +v -0.063644 0.460912 0.130078 +v -0.056488 0.460912 0.124587 +v -0.048153 0.460912 0.128039 +v -0.063644 -0.460914 0.130078 +v -0.062467 -0.460914 0.139022 +v -0.054132 -0.460914 0.142474 +v -0.046976 -0.460914 0.136982 +v -0.048153 -0.460914 0.128039 +v -0.056487 -0.460914 0.124587 +v 0.063644 0.460912 0.130078 +v 0.062467 0.460912 0.139022 +v 0.054132 0.460912 0.142474 +v 0.046976 0.460912 0.136982 +v 0.048153 0.460912 0.128039 +v 0.056487 0.460912 0.124587 +v 0.046976 -0.460914 0.136982 +v 0.054133 -0.460914 0.142474 +v 0.062467 -0.460914 0.139022 +v 0.063644 -0.460914 0.130078 +v 0.056488 -0.460914 0.124587 +v 0.048153 -0.460914 0.128039 +v 0.136982 0.460912 0.046976 +v 0.142474 0.460912 0.054133 +v 0.139022 0.460912 0.062467 +v 0.130078 0.460912 0.063644 +v 0.124587 0.460912 0.056488 +v 0.128039 0.460912 0.048154 +v 0.130078 -0.460914 0.063644 +v 0.139022 -0.460914 0.062467 +v 0.142474 -0.460914 0.054132 +v 0.136982 -0.460914 0.046976 +v 0.128039 -0.460914 0.048153 +v 0.124587 -0.460914 0.056487 +v 0.099604 -0.468750 0.121367 +v 0.121367 -0.468750 0.099603 +v 0.138467 -0.468750 0.074012 +v 0.150245 -0.468750 0.045576 +v 0.156250 -0.468750 0.015389 +v 0.156250 -0.468750 -0.015389 +v 0.150245 -0.468750 -0.045576 +v 0.138467 -0.468750 -0.074012 +v 0.121367 -0.468750 -0.099603 +v 0.099603 -0.468750 -0.121367 +v 0.074012 -0.468750 -0.138467 +v 0.045576 -0.468750 -0.150245 +v 0.015389 -0.468750 -0.156250 +v -0.015389 -0.468750 -0.156250 +v -0.045576 -0.468750 -0.150245 +v -0.074012 -0.468750 -0.138467 +v -0.099603 -0.468750 -0.121367 +v -0.121367 -0.468750 -0.099603 +v -0.138467 -0.468750 -0.074012 +v -0.150245 -0.468750 -0.045576 +v -0.156249 -0.468750 -0.015389 +v -0.156249 -0.468750 0.015389 +v -0.150245 -0.468750 0.045576 +v -0.138466 -0.468750 0.074012 +v -0.121367 -0.468750 0.099603 +v -0.099603 -0.468750 0.121367 +v -0.074012 -0.468750 0.138467 +v -0.045576 -0.468750 0.150245 +v -0.015389 -0.468750 0.156250 +v 0.015390 -0.468750 0.156250 +v 0.045577 -0.468750 0.150245 +v 0.074012 -0.468750 0.138466 +v -0.150245 -0.500000 -0.045576 +v -0.138467 -0.500000 -0.074012 +v -0.121367 -0.500000 -0.099603 +v -0.099603 -0.500000 -0.121367 +v -0.074012 -0.500000 -0.138467 +v -0.045576 -0.500000 -0.150245 +v -0.015389 -0.500000 -0.156250 +v 0.015389 -0.500000 -0.156250 +v 0.045576 -0.500000 -0.150245 +v 0.074012 -0.500000 -0.138467 +v 0.099603 -0.500000 -0.121367 +v 0.121367 -0.500000 -0.099603 +v 0.138467 -0.500000 -0.074012 +v 0.150245 -0.500000 -0.045576 +v 0.156250 -0.500000 -0.015389 +v 0.156250 -0.500000 0.015389 +v 0.150245 -0.500000 0.045576 +v 0.138467 -0.500000 0.074012 +v 0.121367 -0.500000 0.099603 +v 0.099603 -0.500000 0.121367 +v 0.074012 -0.500000 0.138466 +v 0.045577 -0.500000 0.150245 +v 0.015390 -0.500000 0.156249 +v -0.015389 -0.500000 0.156249 +v -0.045576 -0.500000 0.150245 +v -0.074012 -0.500000 0.138467 +v -0.099603 -0.500000 0.121367 +v -0.121367 -0.500000 0.099603 +v -0.138466 -0.500000 0.074012 +v -0.150245 -0.500000 0.045576 +v -0.156249 -0.500000 0.015389 +v -0.156249 -0.500000 -0.015389 +v -0.156250 0.468750 -0.015389 +v -0.150245 0.468750 -0.045576 +v -0.138467 0.468750 -0.074012 +v -0.121367 0.468750 -0.099603 +v -0.099603 0.468750 -0.121367 +v -0.074012 0.468750 -0.138467 +v -0.045576 0.468750 -0.150245 +v -0.015389 0.468750 -0.156250 +v 0.015389 0.468750 -0.156250 +v 0.045576 0.468750 -0.150245 +v 0.074012 0.468750 -0.138467 +v 0.099603 0.468750 -0.121367 +v 0.121367 0.468750 -0.099603 +v 0.138467 0.468750 -0.074012 +v 0.150245 0.468750 -0.045576 +v 0.156249 0.468750 -0.015389 +v 0.156249 0.468750 0.015389 +v 0.150245 0.468750 0.045577 +v 0.138466 0.468750 0.074012 +v 0.121367 0.468750 0.099604 +v 0.099603 0.468750 0.121367 +v 0.074012 0.468750 0.138467 +v 0.045576 0.468750 0.150245 +v 0.015389 0.468750 0.156250 +v -0.015389 0.468750 0.156250 +v -0.045576 0.468750 0.150245 +v -0.074012 0.468750 0.138467 +v -0.099603 0.468750 0.121367 +v -0.121367 0.468750 0.099603 +v -0.138467 0.468750 0.074012 +v -0.150245 0.468750 0.045576 +v -0.156250 0.468750 0.015389 +v -0.138467 0.500000 0.074012 +v -0.121367 0.500000 0.099603 +v -0.099603 0.500000 0.121367 +v -0.074012 0.500000 0.138467 +v -0.045576 0.500000 0.150245 +v -0.015389 0.500000 0.156250 +v 0.015389 0.500000 0.156250 +v 0.045576 0.500000 0.150245 +v 0.074012 0.500000 0.138467 +v 0.099603 0.500000 0.121367 +v 0.121367 0.500000 0.099604 +v 0.138466 0.500000 0.074012 +v 0.150245 0.500000 0.045577 +v 0.156249 0.500000 0.015389 +v 0.156250 0.500000 -0.015389 +v 0.150245 0.500000 -0.045576 +v 0.138467 0.500000 -0.074012 +v 0.121367 0.500000 -0.099603 +v 0.099603 0.500000 -0.121367 +v 0.074012 0.500000 -0.138467 +v 0.045576 0.500000 -0.150245 +v 0.015389 0.500000 -0.156250 +v -0.015389 0.500000 -0.156250 +v -0.045576 0.500000 -0.150245 +v -0.074012 0.500000 -0.138467 +v -0.099603 0.500000 -0.121367 +v -0.121367 0.500000 -0.099603 +v -0.138467 0.500000 -0.074012 +v -0.150245 0.500000 -0.045576 +v -0.156250 0.500000 -0.015389 +v -0.156250 0.500000 0.015389 +v -0.150245 0.500000 0.045576 +v 0.095821 0.460912 -0.108578 +v 0.104534 0.460912 -0.110913 +v 0.110913 0.460912 -0.104534 +v 0.108578 0.460912 -0.095821 +v 0.099865 0.460912 -0.093486 +v 0.093486 0.460912 -0.099865 +v 0.108578 -0.460914 -0.095821 +v 0.110913 -0.460914 -0.104534 +v 0.104534 -0.460914 -0.110913 +v 0.095821 -0.460914 -0.108578 +v 0.093486 -0.460914 -0.099865 +v 0.099865 -0.460914 -0.093486 +v -0.009021 0.460912 -0.144532 +v -0.004510 0.460912 -0.152344 +v 0.004510 0.460912 -0.152344 +v 0.009021 0.460912 -0.144532 +v 0.004510 0.460912 -0.136720 +v -0.004510 0.460912 -0.136720 +v 0.009021 -0.460914 -0.144532 +v 0.004510 -0.460914 -0.152344 +v -0.004510 -0.460914 -0.152344 +v -0.009021 -0.460914 -0.144532 +v -0.004510 -0.460914 -0.136720 +v 0.004510 -0.460914 -0.136720 +v -0.108578 0.460912 -0.095821 +v -0.110913 0.460912 -0.104534 +v -0.104534 0.460912 -0.110913 +v -0.095821 0.460912 -0.108578 +v -0.093486 0.460912 -0.099865 +v -0.099865 0.460912 -0.093486 +v -0.095821 -0.460914 -0.108578 +v -0.104534 -0.460914 -0.110913 +v -0.110913 -0.460914 -0.104534 +v -0.108578 -0.460914 -0.095821 +v -0.099865 -0.460914 -0.093486 +v -0.093486 -0.460914 -0.099865 +v -0.144532 0.460912 0.009021 +v -0.152344 0.460912 0.004510 +v -0.152344 0.460912 -0.004510 +v -0.144532 0.460912 -0.009021 +v -0.136720 0.460912 -0.004510 +v -0.136720 0.460912 0.004510 +v -0.144532 -0.460914 -0.009021 +v -0.152344 -0.460914 -0.004510 +v -0.152344 -0.460914 0.004510 +v -0.144532 -0.460914 0.009021 +v -0.136720 -0.460914 0.004510 +v -0.136720 -0.460914 -0.004510 +v -0.095821 0.460912 0.108578 +v -0.104534 0.460912 0.110913 +v -0.110913 0.460912 0.104534 +v -0.108578 0.460912 0.095821 +v -0.099865 0.460912 0.093486 +v -0.093486 0.460912 0.099865 +v -0.108578 -0.460914 0.095821 +v -0.110913 -0.460914 0.104534 +v -0.104534 -0.460914 0.110913 +v -0.095821 -0.460914 0.108578 +v -0.093486 -0.460914 0.099865 +v -0.099865 -0.460914 0.093486 +v 0.009021 0.460912 0.144532 +v 0.004510 0.460912 0.152344 +v -0.004510 0.460912 0.152344 +v -0.009021 0.460912 0.144532 +v -0.004510 0.460912 0.136720 +v 0.004510 0.460912 0.136720 +v -0.009021 -0.460914 0.144532 +v -0.004510 -0.460914 0.152344 +v 0.004510 -0.460914 0.152344 +v 0.009021 -0.460914 0.144532 +v 0.004510 -0.460914 0.136720 +v -0.004510 -0.460914 0.136720 +v 0.108578 0.460912 0.095821 +v 0.110913 0.460912 0.104534 +v 0.104534 0.460912 0.110913 +v 0.095821 0.460912 0.108578 +v 0.093486 0.460912 0.099865 +v 0.099865 0.460912 0.093486 +v 0.095821 -0.460914 0.108578 +v 0.104534 -0.460914 0.110913 +v 0.110913 -0.460914 0.104534 +v 0.108578 -0.460914 0.095821 +v 0.099865 -0.460914 0.093486 +v 0.093486 -0.460914 0.099865 +v 0.144532 0.460912 -0.009021 +v 0.152344 0.460912 -0.004510 +v 0.152344 0.460912 0.004511 +v 0.144532 0.460912 0.009021 +v 0.136720 0.460912 0.004511 +v 0.136720 0.460912 -0.004510 +v 0.144532 -0.460914 0.009021 +v 0.152344 -0.460914 0.004510 +v 0.152344 -0.460914 -0.004511 +v 0.144532 -0.460914 -0.009021 +v 0.136720 -0.460914 -0.004510 +v 0.136720 -0.460914 0.004510 +v 0.136982 0.046976 -0.460914 +v 0.142474 0.054133 -0.460914 +v 0.139022 0.062467 -0.460914 +v 0.130078 0.063644 -0.460914 +v 0.124587 0.056488 -0.460914 +v 0.128039 0.048154 -0.460914 +v 0.063644 0.130078 -0.460914 +v 0.062467 0.139022 -0.460914 +v 0.054133 0.142474 -0.460914 +v 0.046976 0.136982 -0.460914 +v 0.048153 0.128039 -0.460914 +v 0.056487 0.124587 -0.460914 +v -0.046976 0.136982 -0.460914 +v -0.054133 0.142474 -0.460914 +v -0.062467 0.139022 -0.460914 +v -0.063644 0.130078 -0.460914 +v -0.056487 0.124587 -0.460914 +v -0.048153 0.128039 -0.460914 +v -0.130078 0.063644 -0.460914 +v -0.139022 0.062467 -0.460914 +v -0.142474 0.054133 -0.460914 +v -0.136982 0.046976 -0.460914 +v -0.128039 0.048153 -0.460914 +v -0.124587 0.056487 -0.460914 +v -0.136982 -0.046976 -0.460914 +v -0.142474 -0.054133 -0.460914 +v -0.139022 -0.062467 -0.460914 +v -0.130078 -0.063644 -0.460914 +v -0.124587 -0.056487 -0.460914 +v -0.128039 -0.048153 -0.460914 +v -0.063644 -0.130078 -0.460914 +v -0.062467 -0.139022 -0.460914 +v -0.054132 -0.142474 -0.460914 +v -0.046976 -0.136982 -0.460914 +v -0.048153 -0.128039 -0.460914 +v -0.056487 -0.124587 -0.460914 +v 0.046976 -0.136982 -0.460914 +v 0.054133 -0.142474 -0.460914 +v 0.062467 -0.139022 -0.460914 +v 0.063644 -0.130078 -0.460914 +v 0.056488 -0.124587 -0.460914 +v 0.048153 -0.128039 -0.460914 +v 0.130078 -0.063644 -0.460914 +v 0.139022 -0.062467 -0.460914 +v 0.142474 -0.054132 -0.460914 +v 0.136982 -0.046976 -0.460914 +v 0.128039 -0.048153 -0.460914 +v 0.124587 -0.056487 -0.460914 +v 0.099604 -0.121367 -0.468750 +v 0.121367 -0.099603 -0.468750 +v 0.138467 -0.074012 -0.468750 +v 0.150245 -0.045576 -0.468750 +v 0.156250 -0.015389 -0.468750 +v 0.156250 0.015389 -0.468750 +v 0.150245 0.045576 -0.468750 +v 0.138467 0.074012 -0.468750 +v 0.121367 0.099603 -0.468750 +v 0.099603 0.121367 -0.468750 +v 0.074012 0.138467 -0.468750 +v 0.045576 0.150245 -0.468750 +v 0.015389 0.156250 -0.468750 +v -0.015389 0.156250 -0.468750 +v -0.045576 0.150245 -0.468750 +v -0.074012 0.138467 -0.468750 +v -0.099603 0.121367 -0.468750 +v -0.121367 0.099603 -0.468750 +v -0.138467 0.074012 -0.468750 +v -0.150245 0.045576 -0.468750 +v -0.156249 0.015389 -0.468750 +v -0.156249 -0.015389 -0.468750 +v -0.150245 -0.045576 -0.468750 +v -0.138466 -0.074012 -0.468750 +v -0.121367 -0.099603 -0.468750 +v -0.099603 -0.121367 -0.468750 +v -0.074012 -0.138467 -0.468750 +v -0.045576 -0.150245 -0.468750 +v -0.015389 -0.156250 -0.468750 +v 0.015390 -0.156250 -0.468750 +v 0.045577 -0.150245 -0.468750 +v 0.074012 -0.138467 -0.468750 +v -0.150245 0.045576 -0.500000 +v -0.138467 0.074012 -0.500000 +v -0.121367 0.099603 -0.500000 +v -0.099603 0.121367 -0.500000 +v -0.074012 0.138467 -0.500000 +v -0.045576 0.150245 -0.500000 +v -0.015389 0.156250 -0.500000 +v 0.015389 0.156250 -0.500000 +v 0.045576 0.150245 -0.500000 +v 0.074012 0.138467 -0.500000 +v 0.099603 0.121367 -0.500000 +v 0.121367 0.099603 -0.500000 +v 0.138467 0.074012 -0.500000 +v 0.150245 0.045576 -0.500000 +v 0.156250 0.015389 -0.500000 +v 0.156250 -0.015389 -0.500000 +v 0.150245 -0.045576 -0.500000 +v 0.138467 -0.074012 -0.500000 +v 0.121367 -0.099603 -0.500000 +v 0.099603 -0.121367 -0.500000 +v 0.074012 -0.138467 -0.500000 +v 0.045577 -0.150245 -0.500000 +v 0.015390 -0.156250 -0.500000 +v -0.015389 -0.156250 -0.500000 +v -0.045576 -0.150245 -0.500000 +v -0.074012 -0.138467 -0.500000 +v -0.099603 -0.121367 -0.500000 +v -0.121367 -0.099603 -0.500000 +v -0.138466 -0.074012 -0.500000 +v -0.150245 -0.045576 -0.500000 +v -0.156249 -0.015389 -0.500000 +v -0.156249 0.015389 -0.500000 +v 0.108578 0.095821 -0.460914 +v 0.110913 0.104534 -0.460914 +v 0.104534 0.110913 -0.460914 +v 0.095821 0.108578 -0.460914 +v 0.093486 0.099865 -0.460914 +v 0.099865 0.093486 -0.460914 +v 0.009021 0.144532 -0.460914 +v 0.004510 0.152344 -0.460914 +v -0.004510 0.152344 -0.460914 +v -0.009021 0.144532 -0.460914 +v -0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.460914 +v -0.095821 0.108578 -0.460914 +v -0.104534 0.110913 -0.460914 +v -0.110913 0.104534 -0.460914 +v -0.108578 0.095821 -0.460914 +v -0.099865 0.093486 -0.460914 +v -0.093486 0.099865 -0.460914 +v -0.144532 0.009021 -0.460914 +v -0.152344 0.004510 -0.460914 +v -0.152344 -0.004510 -0.460914 +v -0.144532 -0.009021 -0.460914 +v -0.136720 -0.004510 -0.460914 +v -0.136720 0.004510 -0.460914 +v -0.108578 -0.095821 -0.460914 +v -0.110913 -0.104534 -0.460914 +v -0.104534 -0.110913 -0.460914 +v -0.095821 -0.108578 -0.460914 +v -0.093486 -0.099865 -0.460914 +v -0.099865 -0.093486 -0.460914 +v -0.009021 -0.144532 -0.460914 +v -0.004510 -0.152344 -0.460914 +v 0.004510 -0.152344 -0.460914 +v 0.009021 -0.144532 -0.460914 +v 0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.460914 +v 0.095821 -0.108578 -0.460914 +v 0.104534 -0.110913 -0.460914 +v 0.110913 -0.104534 -0.460914 +v 0.108578 -0.095821 -0.460914 +v 0.099865 -0.093486 -0.460914 +v 0.093486 -0.099865 -0.460914 +v 0.144532 -0.009021 -0.460914 +v 0.152344 -0.004510 -0.460914 +v 0.152344 0.004510 -0.460914 +v 0.144532 0.009021 -0.460914 +v 0.136720 0.004510 -0.460914 +v 0.136720 -0.004510 -0.460914 +v 0.468750 0.116832 -0.062448 +v 0.437501 0.110774 -0.059210 +v 0.437501 0.120197 -0.036461 +v 0.468750 0.126770 -0.038455 +v 0.468750 0.131837 -0.012985 +v 0.437501 0.125000 -0.012312 +v 0.468750 0.131837 0.012984 +v 0.437501 0.125001 0.012311 +v 0.468750 0.126770 0.038455 +v 0.437501 0.120197 0.036461 +v 0.468750 0.116832 0.062448 +v 0.437501 0.110774 0.059210 +v 0.468750 0.102404 0.084041 +v 0.437501 0.097094 0.079683 +v 0.437501 0.079683 0.097094 +v 0.468750 0.084041 0.102404 +v 0.468750 0.062448 0.116832 +v 0.437501 0.059210 0.110774 +v 0.468750 0.038455 0.126770 +v 0.437501 0.036461 0.120197 +v 0.468750 0.012985 0.131836 +v 0.437501 0.012312 0.125000 +v 0.437501 -0.012311 0.125000 +v 0.468750 -0.012985 0.131836 +v 0.437501 -0.036461 0.120197 +v 0.468750 -0.038455 0.126770 +v 0.468750 -0.062448 0.116832 +v 0.437501 -0.059210 0.110774 +v 0.437501 -0.079683 0.097094 +v 0.468750 -0.084041 0.102404 +v 0.437501 -0.097094 0.079683 +v 0.468750 -0.102404 0.084041 +v 0.468750 -0.116832 0.062448 +v 0.437501 -0.110774 0.059210 +v 0.437501 -0.120197 0.036461 +v 0.468750 -0.126770 0.038455 +v 0.468750 -0.131836 0.012985 +v 0.437501 -0.125000 0.012311 +v 0.437501 -0.125000 -0.012311 +v 0.468750 -0.131836 -0.012985 +v 0.468750 -0.126770 -0.038455 +v 0.437501 -0.120197 -0.036461 +v 0.437501 -0.110774 -0.059210 +v 0.468750 -0.116832 -0.062448 +v 0.437501 -0.097094 -0.079683 +v 0.468750 -0.102404 -0.084041 +v 0.437501 -0.079683 -0.097094 +v 0.468750 -0.084041 -0.102404 +v 0.437501 -0.059210 -0.110774 +v 0.468750 -0.062448 -0.116832 +v 0.437501 -0.036461 -0.120197 +v 0.468750 -0.038455 -0.126770 +v 0.437501 -0.012311 -0.125001 +v 0.468750 -0.012985 -0.131836 +v 0.468750 0.038455 -0.126770 +v 0.468750 0.012985 -0.131837 +v 0.437501 0.012311 -0.125001 +v 0.437501 0.036461 -0.120197 +v 0.468750 0.084041 -0.102404 +v 0.468750 0.062448 -0.116832 +v 0.437501 0.059210 -0.110774 +v 0.437501 0.079683 -0.097094 +v 0.468750 0.102404 -0.084041 +v 0.437501 0.097094 -0.079683 +v 0.012312 0.012311 0.125000 +v 0.036461 0.036461 0.120197 +v 0.036461 -0.036461 0.120197 +v 0.012312 -0.012312 0.125000 +v 0.059210 0.059210 0.110774 +v 0.059210 -0.059210 0.110774 +v 0.079683 0.079683 0.097094 +v 0.079683 -0.079683 0.097094 +v 0.097094 0.097094 0.079683 +v -0.468750 0.012985 0.131836 +v -0.437501 0.012312 0.125001 +v -0.437501 0.036461 0.120197 +v -0.468750 0.038455 0.126770 +v -0.468750 -0.012985 0.131836 +v -0.437501 -0.012311 0.125000 +v -0.468750 -0.038455 0.126770 +v -0.437501 -0.036461 0.120197 +v -0.437501 0.079683 0.097094 +v -0.079683 0.079683 0.097094 +v -0.097094 0.097094 0.079683 +v -0.437501 0.097094 0.079683 +v -0.110774 0.110774 0.059210 +v -0.437501 0.110774 0.059210 +v -0.437501 0.059210 0.110774 +v -0.468750 0.062448 0.116832 +v -0.468750 -0.062448 0.116832 +v -0.437501 -0.059210 0.110774 +v -0.110774 -0.110774 0.059210 +v -0.097094 -0.097094 0.079683 +v -0.437501 -0.097094 0.079683 +v -0.437501 -0.110774 0.059210 +v -0.120197 0.120197 0.036461 +v -0.437501 0.120197 0.036461 +v -0.468750 0.084041 0.102404 +v -0.468750 -0.084041 0.102404 +v -0.437501 -0.079683 0.097094 +v -0.120197 -0.120197 0.036461 +v -0.437501 -0.120197 0.036461 +v -0.125001 0.125000 0.012311 +v -0.437501 0.125000 0.012311 +v -0.468750 0.102404 0.084041 +v -0.468750 -0.102404 0.084041 +v -0.468750 0.116832 0.062448 +v -0.468750 -0.116832 0.062448 +v -0.125000 -0.125000 -0.012311 +v -0.125000 -0.125001 0.012311 +v -0.437501 -0.125001 0.012311 +v -0.437501 -0.125001 -0.012311 +v -0.125000 0.125000 -0.012311 +v -0.120197 0.120197 -0.036461 +v -0.437501 0.120197 -0.036461 +v -0.437501 0.125000 -0.012312 +v -0.468750 0.126770 0.038455 +v -0.468750 -0.126770 0.038455 +v -0.468750 0.131836 0.012985 +v -0.468750 -0.131837 0.012985 +v -0.110774 -0.110774 -0.059210 +v -0.120197 -0.120197 -0.036461 +v -0.437501 -0.120197 -0.036461 +v -0.437501 -0.110774 -0.059210 +v -0.110774 0.110774 -0.059210 +v -0.097094 0.097094 -0.079683 +v -0.437501 0.097094 -0.079683 +v -0.437501 0.110774 -0.059210 +v -0.468750 0.131836 -0.012985 +v -0.468750 -0.131837 -0.012985 +v -0.097094 -0.097094 -0.079683 +v -0.437501 -0.097094 -0.079683 +v -0.088389 0.088389 -0.088389 +v -0.097094 0.079683 -0.097094 +v -0.437501 0.079683 -0.097094 +v -0.468750 0.126770 -0.038455 +v -0.468750 -0.126770 -0.038455 +v -0.468750 0.116832 -0.062448 +v -0.468750 -0.116832 -0.062448 +v -0.468750 0.102404 -0.084041 +v -0.468750 -0.102404 -0.084041 +v -0.120197 -0.036461 -0.120197 +v -0.110774 -0.059210 -0.110774 +v -0.437501 -0.059210 -0.110774 +v -0.437501 -0.036461 -0.120197 +v -0.120197 0.036461 -0.120197 +v -0.125001 0.012311 -0.125000 +v -0.437501 0.012311 -0.125000 +v -0.437501 0.036461 -0.120197 +v -0.468750 0.084041 -0.102404 +v -0.468750 -0.084041 -0.102404 +v -0.437501 -0.079683 -0.097094 +v -0.125000 -0.012311 -0.125000 +v -0.437501 -0.012311 -0.125000 +v -0.468750 0.062448 -0.116832 +v -0.437501 0.059210 -0.110774 +v -0.468750 -0.062448 -0.116832 +v -0.468750 0.038455 -0.126770 +v -0.468750 -0.038455 -0.126770 +v -0.468750 0.012985 -0.131837 +v -0.468750 -0.012985 -0.131836 +v -0.468749 0.130078 -0.063644 +v -0.468749 0.139022 -0.062467 +v -0.468749 0.124587 -0.056487 +v -0.468749 0.142474 -0.054132 +v -0.468749 0.136982 -0.046976 +v -0.468749 0.128039 -0.048153 +v 0.468751 0.136982 -0.046976 +v 0.468751 0.142474 -0.054133 +v 0.468751 0.128039 -0.048153 +v 0.468751 0.139022 -0.062467 +v 0.468751 0.130078 -0.063644 +v 0.468751 0.124587 -0.056488 +v -0.468749 0.046976 -0.136982 +v -0.468749 0.054133 -0.142474 +v -0.468749 0.048154 -0.128039 +v -0.468749 0.062467 -0.139022 +v -0.468749 0.063644 -0.130078 +v -0.468749 0.056488 -0.124587 +v 0.468751 0.063644 -0.130078 +v 0.468751 0.062467 -0.139022 +v 0.468751 0.056487 -0.124587 +v 0.468751 0.054133 -0.142474 +v 0.468751 0.046976 -0.136982 +v 0.468751 0.048153 -0.128039 +v -0.468749 -0.063644 -0.130078 +v -0.468749 -0.062467 -0.139022 +v -0.468749 -0.056487 -0.124587 +v -0.468749 -0.054132 -0.142474 +v -0.468749 -0.046976 -0.136982 +v -0.468749 -0.048153 -0.128039 +v 0.468751 -0.046976 -0.136982 +v 0.468751 -0.054133 -0.142474 +v 0.468751 -0.048153 -0.128039 +v 0.468751 -0.062467 -0.139022 +v 0.468751 -0.063644 -0.130078 +v 0.468751 -0.056488 -0.124587 +v -0.468749 -0.136982 -0.046976 +v -0.468749 -0.142474 -0.054133 +v -0.468749 -0.128039 -0.048153 +v -0.468749 -0.139022 -0.062467 +v -0.468749 -0.130078 -0.063644 +v -0.468749 -0.124587 -0.056488 +v 0.468751 -0.130078 -0.063644 +v 0.468751 -0.139022 -0.062467 +v 0.468751 -0.124587 -0.056487 +v 0.468751 -0.142474 -0.054133 +v 0.468751 -0.136982 -0.046976 +v 0.468751 -0.128039 -0.048153 +v -0.468749 -0.130078 0.063644 +v -0.468749 -0.139022 0.062467 +v -0.468749 -0.124587 0.056487 +v -0.468749 -0.142474 0.054132 +v -0.468749 -0.136982 0.046976 +v -0.468749 -0.128039 0.048153 +v 0.468751 -0.136982 0.046976 +v 0.468751 -0.142474 0.054133 +v 0.468751 -0.128039 0.048153 +v 0.468751 -0.139022 0.062467 +v 0.468751 -0.130078 0.063644 +v 0.468751 -0.124587 0.056487 +v -0.468749 -0.046976 0.136982 +v -0.468749 -0.054133 0.142474 +v -0.468749 -0.048153 0.128039 +v -0.468749 -0.062467 0.139022 +v -0.468749 -0.063644 0.130078 +v -0.468749 -0.056488 0.124587 +v 0.468751 -0.063644 0.130078 +v 0.468751 -0.062467 0.139022 +v 0.468751 -0.056487 0.124587 +v 0.468751 -0.054132 0.142474 +v 0.468751 -0.046976 0.136982 +v 0.468751 -0.048153 0.128039 +v -0.468749 0.063644 0.130078 +v -0.468749 0.062467 0.139022 +v -0.468749 0.056487 0.124587 +v -0.468749 0.054132 0.142474 +v -0.468749 0.046976 0.136982 +v -0.468749 0.048153 0.128039 +v 0.468751 0.046976 0.136982 +v 0.468751 0.054133 0.142474 +v 0.468751 0.048153 0.128039 +v 0.468751 0.062467 0.139022 +v 0.468751 0.063644 0.130078 +v 0.468751 0.056487 0.124587 +v -0.468749 0.136982 0.046976 +v -0.468749 0.142474 0.054133 +v -0.468749 0.128039 0.048153 +v -0.468749 0.139022 0.062467 +v -0.468749 0.130078 0.063644 +v -0.468749 0.124587 0.056488 +v 0.468751 0.130078 0.063644 +v 0.468751 0.139022 0.062467 +v 0.468751 0.124587 0.056487 +v 0.468751 0.142474 0.054133 +v 0.468751 0.136982 0.046976 +v 0.468751 0.128039 0.048153 +v -0.059210 -0.059210 0.110774 +v -0.036461 -0.036461 0.120197 +v -0.079683 -0.079683 0.097094 +v 0.097094 -0.097094 0.079683 +v 0.079683 -0.437501 0.097094 +v 0.097094 -0.437501 0.079683 +v 0.079683 0.437501 0.097094 +v 0.059210 0.437501 0.110774 +v -0.012312 -0.012312 0.125000 +v -0.012312 0.012312 0.125000 +v 0.110774 0.110774 -0.059210 +v 0.120197 0.120197 -0.036461 +v 0.125000 0.125001 -0.012311 +v 0.125000 0.125000 0.012311 +v 0.120197 0.120197 0.036461 +v 0.110774 0.110774 0.059210 +v -0.059210 0.059210 0.110774 +v -0.036461 0.036461 0.120197 +v 0.110774 -0.110774 0.059210 +v 0.120197 -0.120197 0.036461 +v 0.125000 -0.125000 0.012311 +v 0.125000 -0.125000 -0.012311 +v 0.120197 -0.120197 -0.036461 +v 0.110774 -0.110774 -0.059210 +v 0.097094 -0.097094 -0.079683 +v 0.088389 -0.088389 -0.088389 +v 0.097094 -0.079683 -0.097094 +v 0.110774 -0.059210 -0.110774 +v 0.120197 -0.036461 -0.120197 +v 0.125000 -0.012311 -0.125000 +v 0.125000 0.012311 -0.125000 +v 0.120197 0.036461 -0.120197 +v 0.110774 0.059210 -0.110774 +v 0.097094 0.079683 -0.097094 +v 0.088389 0.088389 -0.088389 +v 0.097094 0.097094 -0.079683 +v -0.097094 -0.079683 -0.097094 +v -0.088389 -0.088389 -0.088389 +v -0.110774 0.059210 -0.110774 +v -0.468749 0.095821 -0.108578 +v -0.468749 0.104534 -0.110913 +v -0.468749 0.093486 -0.099865 +v -0.468749 0.110913 -0.104534 +v -0.468749 0.108578 -0.095821 +v -0.468749 0.099865 -0.093486 +v 0.468751 0.108578 -0.095821 +v 0.468751 0.110913 -0.104534 +v 0.468751 0.099865 -0.093486 +v 0.468751 0.104534 -0.110913 +v 0.468751 0.095821 -0.108578 +v 0.468751 0.093486 -0.099865 +v -0.468749 -0.009021 -0.144532 +v -0.468749 -0.004510 -0.152344 +v -0.468749 -0.004510 -0.136720 +v -0.468749 0.004510 -0.152344 +v -0.468749 0.009021 -0.144532 +v -0.468749 0.004510 -0.136720 +v 0.468751 0.009021 -0.144532 +v 0.468751 0.004510 -0.152344 +v 0.468751 0.004510 -0.136720 +v 0.468751 -0.004510 -0.152344 +v 0.468751 -0.009021 -0.144532 +v 0.468751 -0.004510 -0.136720 +v -0.468749 -0.108578 -0.095821 +v -0.468749 -0.110913 -0.104534 +v -0.468749 -0.099865 -0.093486 +v -0.468749 -0.104534 -0.110913 +v -0.468749 -0.095821 -0.108578 +v -0.468749 -0.093486 -0.099865 +v 0.468751 -0.095821 -0.108578 +v 0.468751 -0.104534 -0.110913 +v 0.468751 -0.093486 -0.099865 +v 0.468751 -0.110913 -0.104534 +v 0.468751 -0.108578 -0.095821 +v 0.468751 -0.099865 -0.093486 +v -0.468749 -0.144532 0.009021 +v -0.468749 -0.152344 0.004510 +v -0.468749 -0.136720 0.004510 +v -0.468749 -0.152344 -0.004511 +v -0.468749 -0.144532 -0.009021 +v -0.468749 -0.136720 -0.004510 +v 0.468751 -0.144532 -0.009021 +v 0.468751 -0.152344 -0.004510 +v 0.468751 -0.136720 -0.004510 +v 0.468751 -0.152344 0.004510 +v 0.468751 -0.144532 0.009021 +v 0.468751 -0.136720 0.004510 +v -0.468749 -0.095821 0.108578 +v -0.468749 -0.104534 0.110913 +v -0.468749 -0.093486 0.099865 +v -0.468749 -0.110913 0.104534 +v -0.468749 -0.108578 0.095821 +v -0.468749 -0.099865 0.093486 +v 0.468751 -0.108578 0.095821 +v 0.468751 -0.110913 0.104534 +v 0.468751 -0.099865 0.093486 +v 0.468751 -0.104534 0.110913 +v 0.468751 -0.095821 0.108578 +v 0.468751 -0.093486 0.099865 +v -0.468749 0.009021 0.144532 +v -0.468749 0.004510 0.152344 +v -0.468749 0.004510 0.136720 +v -0.468749 -0.004510 0.152344 +v -0.468749 -0.009021 0.144532 +v -0.468749 -0.004510 0.136720 +v 0.468751 -0.009021 0.144532 +v 0.468751 -0.004510 0.152344 +v 0.468751 -0.004510 0.136720 +v 0.468751 0.004510 0.152344 +v 0.468751 0.009021 0.144532 +v 0.468751 0.004510 0.136720 +v -0.468749 0.108578 0.095821 +v -0.468749 0.110913 0.104534 +v -0.468749 0.099865 0.093486 +v -0.468749 0.104534 0.110913 +v -0.468749 0.095821 0.108578 +v -0.468749 0.093486 0.099865 +v 0.468751 0.095821 0.108578 +v 0.468751 0.104534 0.110913 +v 0.468751 0.093486 0.099865 +v 0.468751 0.110913 0.104534 +v 0.468751 0.108578 0.095821 +v 0.468751 0.099865 0.093486 +v -0.468749 0.144532 -0.009021 +v -0.468749 0.152344 -0.004510 +v -0.468749 0.136720 -0.004510 +v -0.468749 0.152344 0.004510 +v -0.468749 0.144532 0.009021 +v -0.468749 0.136720 0.004510 +v 0.468751 0.144532 0.009021 +v 0.468751 0.152344 0.004510 +v 0.468751 0.136720 0.004510 +v 0.468751 0.152344 -0.004510 +v 0.468751 0.144532 -0.009021 +v 0.468751 0.136720 -0.004510 +v 0.116832 -0.468750 -0.062448 +v 0.110774 -0.437501 -0.059210 +v 0.120197 -0.437501 -0.036462 +v 0.126770 -0.468750 -0.038456 +v 0.131837 -0.468750 -0.012985 +v 0.125001 -0.437501 -0.012312 +v 0.131837 -0.468750 0.012984 +v 0.125001 -0.437501 0.012311 +v 0.126770 -0.468750 0.038455 +v 0.120197 -0.437501 0.036461 +v 0.116832 -0.468750 0.062448 +v 0.110774 -0.437501 0.059210 +v 0.102404 -0.468750 0.084041 +v 0.084041 -0.468750 0.102404 +v 0.062448 -0.468750 0.116832 +v 0.059210 -0.437501 0.110774 +v 0.038455 -0.468750 0.126770 +v 0.036461 -0.437501 0.120197 +v 0.012985 -0.468750 0.131836 +v 0.012312 -0.437501 0.125000 +v -0.012311 -0.437501 0.125000 +v -0.012985 -0.468750 0.131836 +v -0.036461 -0.437501 0.120197 +v -0.038455 -0.468750 0.126770 +v -0.062448 -0.468750 0.116832 +v -0.059210 -0.437501 0.110774 +v -0.079683 -0.437501 0.097094 +v -0.084041 -0.468750 0.102404 +v -0.097094 -0.437501 0.079683 +v -0.102404 -0.468750 0.084041 +v -0.116832 -0.468750 0.062448 +v -0.110774 -0.437501 0.059210 +v -0.120197 -0.437501 0.036461 +v -0.126770 -0.468750 0.038455 +v -0.131836 -0.468750 0.012985 +v -0.125000 -0.437501 0.012311 +v -0.125000 -0.437501 -0.012312 +v -0.131836 -0.468750 -0.012985 +v -0.126770 -0.468750 -0.038455 +v -0.120197 -0.437501 -0.036461 +v -0.110774 -0.437501 -0.059210 +v -0.116832 -0.468750 -0.062448 +v -0.097094 -0.437501 -0.079683 +v -0.102404 -0.468750 -0.084041 +v -0.079683 -0.437501 -0.097094 +v -0.084041 -0.468750 -0.102404 +v -0.059210 -0.437501 -0.110774 +v -0.062448 -0.468750 -0.116832 +v -0.036461 -0.437501 -0.120197 +v -0.038455 -0.468750 -0.126770 +v -0.012311 -0.437501 -0.125001 +v -0.012985 -0.468750 -0.131837 +v 0.038455 -0.468750 -0.126770 +v 0.012985 -0.468750 -0.131837 +v 0.012311 -0.437501 -0.125001 +v 0.036461 -0.437501 -0.120197 +v 0.084041 -0.468750 -0.102404 +v 0.062448 -0.468750 -0.116832 +v 0.059210 -0.437501 -0.110774 +v 0.079683 -0.437501 -0.097094 +v 0.102404 -0.468750 -0.084041 +v 0.097094 -0.437501 -0.079683 +v 0.012985 0.468750 0.131837 +v 0.012311 0.437501 0.125001 +v 0.036461 0.437501 0.120197 +v 0.038455 0.468750 0.126770 +v -0.012985 0.468750 0.131837 +v -0.012311 0.437501 0.125001 +v -0.038455 0.468750 0.126770 +v -0.036461 0.437501 0.120197 +v 0.097094 0.437501 0.079683 +v 0.110774 0.437501 0.059210 +v 0.062448 0.468750 0.116832 +v -0.062448 0.468750 0.116832 +v -0.059210 0.437501 0.110774 +v -0.097094 0.437501 0.079683 +v -0.110774 0.437501 0.059210 +v 0.120197 0.437501 0.036461 +v 0.084041 0.468750 0.102404 +v -0.084041 0.468750 0.102404 +v -0.079683 0.437501 0.097094 +v -0.120197 0.437501 0.036461 +v 0.125000 0.437501 0.012311 +v 0.102404 0.468750 0.084041 +v -0.102404 0.468750 0.084041 +v 0.116832 0.468750 0.062448 +v -0.116832 0.468750 0.062448 +v -0.125001 0.437501 0.012312 +v -0.125001 0.437501 -0.012311 +v 0.120197 0.437501 -0.036461 +v 0.125000 0.437501 -0.012312 +v 0.126770 0.468750 0.038455 +v -0.126770 0.468750 0.038455 +v 0.131836 0.468750 0.012985 +v -0.131837 0.468750 0.012985 +v -0.120197 0.437501 -0.036461 +v -0.110774 0.437501 -0.059210 +v 0.097094 0.437501 -0.079683 +v 0.110774 0.437501 -0.059210 +v 0.131836 0.468750 -0.012985 +v -0.131837 0.468750 -0.012985 +v -0.097094 0.437501 -0.079683 +v 0.079683 0.097094 -0.097094 +v 0.079683 0.437501 -0.097094 +v 0.126770 0.468750 -0.038455 +v -0.126770 0.468750 -0.038455 +v 0.116832 0.468750 -0.062448 +v -0.116832 0.468750 -0.062448 +v 0.102404 0.468750 -0.084041 +v -0.102404 0.468750 -0.084041 +v -0.036461 0.120197 -0.120197 +v -0.059210 0.110774 -0.110774 +v -0.059210 0.437501 -0.110774 +v -0.036461 0.437501 -0.120197 +v 0.036461 0.120197 -0.120197 +v 0.012311 0.125000 -0.125000 +v 0.012311 0.437501 -0.125000 +v 0.036461 0.437501 -0.120197 +v 0.084041 0.468750 -0.102404 +v -0.084041 0.468750 -0.102404 +v -0.079683 0.437501 -0.097094 +v -0.012311 0.125000 -0.125000 +v -0.012312 0.437501 -0.125000 +v 0.062448 0.468750 -0.116832 +v 0.059210 0.437501 -0.110774 +v -0.062448 0.468750 -0.116832 +v 0.038455 0.468750 -0.126770 +v -0.038455 0.468750 -0.126770 +v 0.012985 0.468750 -0.131836 +v -0.012985 0.468750 -0.131836 +v 0.130078 0.468749 -0.063644 +v 0.139022 0.468749 -0.062467 +v 0.124587 0.468749 -0.056487 +v 0.142474 0.468749 -0.054132 +v 0.136982 0.468749 -0.046976 +v 0.128039 0.468749 -0.048153 +v 0.136982 -0.468751 -0.046976 +v 0.142474 -0.468751 -0.054133 +v 0.128039 -0.468751 -0.048154 +v 0.139022 -0.468751 -0.062467 +v 0.130078 -0.468751 -0.063644 +v 0.124587 -0.468751 -0.056488 +v 0.046976 0.468749 -0.136982 +v 0.054133 0.468749 -0.142474 +v 0.048153 0.468749 -0.128039 +v 0.062467 0.468749 -0.139022 +v 0.063644 0.468749 -0.130078 +v 0.056488 0.468749 -0.124587 +v 0.063644 -0.468751 -0.130078 +v 0.062467 -0.468751 -0.139022 +v 0.056487 -0.468751 -0.124587 +v 0.054133 -0.468751 -0.142474 +v 0.046976 -0.468751 -0.136982 +v 0.048153 -0.468751 -0.128039 +v -0.063644 0.468749 -0.130078 +v -0.062467 0.468749 -0.139022 +v -0.056487 0.468749 -0.124587 +v -0.054133 0.468749 -0.142474 +v -0.046976 0.468749 -0.136982 +v -0.048153 0.468749 -0.128039 +v -0.046976 -0.468751 -0.136982 +v -0.054133 -0.468751 -0.142474 +v -0.048153 -0.468751 -0.128039 +v -0.062467 -0.468751 -0.139022 +v -0.063644 -0.468751 -0.130078 +v -0.056487 -0.468751 -0.124587 +v -0.136982 0.468749 -0.046976 +v -0.142474 0.468749 -0.054133 +v -0.128039 0.468749 -0.048153 +v -0.139022 0.468749 -0.062467 +v -0.130078 0.468749 -0.063644 +v -0.124587 0.468749 -0.056487 +v -0.130078 -0.468751 -0.063644 +v -0.139022 -0.468751 -0.062467 +v -0.124587 -0.468751 -0.056488 +v -0.142474 -0.468751 -0.054133 +v -0.136982 -0.468751 -0.046976 +v -0.128039 -0.468751 -0.048153 +v -0.130078 0.468749 0.063644 +v -0.139022 0.468749 0.062467 +v -0.124587 0.468749 0.056487 +v -0.142474 0.468749 0.054133 +v -0.136982 0.468749 0.046976 +v -0.128039 0.468749 0.048153 +v -0.136982 -0.468751 0.046976 +v -0.142474 -0.468751 0.054133 +v -0.128039 -0.468751 0.048153 +v -0.139022 -0.468751 0.062467 +v -0.130078 -0.468751 0.063644 +v -0.124587 -0.468751 0.056487 +v -0.046976 0.468749 0.136982 +v -0.054133 0.468749 0.142474 +v -0.048153 0.468749 0.128039 +v -0.062467 0.468749 0.139022 +v -0.063644 0.468749 0.130078 +v -0.056488 0.468749 0.124587 +v -0.063644 -0.468751 0.130078 +v -0.062467 -0.468751 0.139022 +v -0.056487 -0.468751 0.124587 +v -0.054132 -0.468751 0.142474 +v -0.046976 -0.468751 0.136982 +v -0.048153 -0.468751 0.128039 +v 0.063644 0.468749 0.130078 +v 0.062466 0.468749 0.139022 +v 0.056487 0.468749 0.124587 +v 0.054132 0.468749 0.142474 +v 0.046976 0.468749 0.136982 +v 0.048153 0.468749 0.128039 +v 0.046976 -0.468751 0.136982 +v 0.054133 -0.468751 0.142474 +v 0.048153 -0.468751 0.128039 +v 0.062467 -0.468751 0.139022 +v 0.063644 -0.468751 0.130078 +v 0.056488 -0.468751 0.124587 +v 0.136982 0.468749 0.046976 +v 0.142474 0.468749 0.054133 +v 0.128039 0.468749 0.048154 +v 0.139022 0.468749 0.062467 +v 0.130078 0.468749 0.063644 +v 0.124587 0.468749 0.056488 +v 0.130078 -0.468751 0.063644 +v 0.139022 -0.468751 0.062467 +v 0.124587 -0.468751 0.056487 +v 0.142474 -0.468751 0.054132 +v 0.136982 -0.468751 0.046976 +v 0.128039 -0.468751 0.048153 +v -0.079683 -0.097094 -0.097094 +v -0.059210 -0.110774 -0.110774 +v -0.036461 -0.120197 -0.120197 +v -0.012312 -0.125000 -0.125001 +v 0.012311 -0.125000 -0.125001 +v 0.036461 -0.120197 -0.120197 +v 0.059210 -0.110774 -0.110774 +v 0.079683 -0.097094 -0.097094 +v -0.079683 0.097094 -0.097094 +v 0.059210 0.110774 -0.110774 +v 0.095821 0.468749 -0.108578 +v 0.104534 0.468749 -0.110913 +v 0.093486 0.468749 -0.099865 +v 0.110913 0.468749 -0.104534 +v 0.108578 0.468749 -0.095821 +v 0.099865 0.468749 -0.093486 +v 0.108578 -0.468751 -0.095821 +v 0.110913 -0.468751 -0.104534 +v 0.099865 -0.468751 -0.093486 +v 0.104534 -0.468751 -0.110913 +v 0.095821 -0.468751 -0.108578 +v 0.093486 -0.468751 -0.099865 +v -0.009021 0.468749 -0.144532 +v -0.004510 0.468749 -0.152344 +v -0.004510 0.468749 -0.136720 +v 0.004510 0.468749 -0.152344 +v 0.009021 0.468749 -0.144532 +v 0.004510 0.468749 -0.136720 +v 0.009021 -0.468751 -0.144532 +v 0.004510 -0.468751 -0.152344 +v 0.004510 -0.468751 -0.136720 +v -0.004510 -0.468751 -0.152344 +v -0.009021 -0.468751 -0.144532 +v -0.004510 -0.468751 -0.136720 +v -0.108578 0.468749 -0.095821 +v -0.110913 0.468749 -0.104534 +v -0.099865 0.468749 -0.093486 +v -0.104534 0.468749 -0.110913 +v -0.095821 0.468749 -0.108578 +v -0.093486 0.468749 -0.099865 +v -0.095821 -0.468751 -0.108578 +v -0.104534 -0.468751 -0.110913 +v -0.093486 -0.468751 -0.099865 +v -0.110913 -0.468751 -0.104534 +v -0.108578 -0.468751 -0.095821 +v -0.099865 -0.468751 -0.093486 +v -0.144532 0.468749 0.009021 +v -0.152344 0.468749 0.004510 +v -0.136720 0.468749 0.004510 +v -0.152344 0.468749 -0.004510 +v -0.144532 0.468749 -0.009021 +v -0.136720 0.468749 -0.004510 +v -0.144532 -0.468751 -0.009021 +v -0.152344 -0.468751 -0.004510 +v -0.136720 -0.468751 -0.004510 +v -0.152344 -0.468751 0.004510 +v -0.144532 -0.468751 0.009021 +v -0.136720 -0.468751 0.004510 +v -0.095821 0.468749 0.108578 +v -0.104534 0.468749 0.110913 +v -0.093486 0.468749 0.099865 +v -0.110913 0.468749 0.104534 +v -0.108578 0.468749 0.095821 +v -0.099865 0.468749 0.093486 +v -0.108578 -0.468751 0.095821 +v -0.110913 -0.468751 0.104534 +v -0.099865 -0.468751 0.093486 +v -0.104534 -0.468751 0.110913 +v -0.095821 -0.468751 0.108578 +v -0.093486 -0.468751 0.099865 +v 0.009021 0.468749 0.144532 +v 0.004510 0.468749 0.152344 +v 0.004510 0.468749 0.136720 +v -0.004510 0.468749 0.152344 +v -0.009021 0.468749 0.144532 +v -0.004510 0.468749 0.136720 +v -0.009021 -0.468751 0.144532 +v -0.004510 -0.468751 0.152344 +v -0.004510 -0.468751 0.136720 +v 0.004510 -0.468751 0.152344 +v 0.009021 -0.468751 0.144532 +v 0.004510 -0.468751 0.136720 +v 0.108578 0.468749 0.095821 +v 0.110913 0.468749 0.104534 +v 0.099865 0.468749 0.093486 +v 0.104534 0.468749 0.110913 +v 0.095821 0.468749 0.108578 +v 0.093486 0.468749 0.099865 +v 0.095821 -0.468751 0.108578 +v 0.104534 -0.468751 0.110913 +v 0.093486 -0.468751 0.099865 +v 0.110913 -0.468751 0.104534 +v 0.108578 -0.468751 0.095821 +v 0.099865 -0.468751 0.093486 +v 0.144532 0.468749 -0.009021 +v 0.152344 0.468749 -0.004510 +v 0.136720 0.468749 -0.004510 +v 0.152344 0.468749 0.004511 +v 0.144532 0.468749 0.009021 +v 0.136720 0.468749 0.004511 +v 0.144532 -0.468751 0.009021 +v 0.152344 -0.468751 0.004510 +v 0.136720 -0.468751 0.004510 +v 0.152344 -0.468751 -0.004511 +v 0.144532 -0.468751 -0.009021 +v 0.136720 -0.468751 -0.004510 +v 0.116832 0.062448 -0.468750 +v 0.110774 0.059210 -0.437501 +v 0.120197 0.036461 -0.437501 +v 0.126770 0.038455 -0.468750 +v 0.131837 0.012985 -0.468750 +v 0.125001 0.012312 -0.437501 +v 0.131837 -0.012984 -0.468750 +v 0.125001 -0.012311 -0.437501 +v 0.126770 -0.038455 -0.468750 +v 0.120197 -0.036461 -0.437501 +v 0.116832 -0.062448 -0.468750 +v 0.110774 -0.059210 -0.437501 +v 0.102404 -0.084041 -0.468750 +v 0.097094 -0.079683 -0.437501 +v 0.079683 -0.097094 -0.437501 +v 0.084041 -0.102404 -0.468750 +v 0.062448 -0.116832 -0.468750 +v 0.059210 -0.110774 -0.437501 +v 0.038455 -0.126770 -0.468750 +v 0.036461 -0.120197 -0.437501 +v 0.012985 -0.131836 -0.468750 +v 0.012312 -0.125000 -0.437501 +v -0.012311 -0.125000 -0.437501 +v -0.012985 -0.131836 -0.468750 +v -0.036461 -0.120197 -0.437501 +v -0.038455 -0.126770 -0.468750 +v -0.062448 -0.116832 -0.468750 +v -0.059210 -0.110774 -0.437501 +v -0.079683 -0.097094 -0.437501 +v -0.084041 -0.102404 -0.468750 +v -0.097094 -0.079683 -0.437501 +v -0.102404 -0.084041 -0.468750 +v -0.116832 -0.062448 -0.468750 +v -0.110774 -0.059210 -0.437501 +v -0.120197 -0.036461 -0.437501 +v -0.126770 -0.038455 -0.468750 +v -0.131836 -0.012985 -0.468750 +v -0.125000 -0.012311 -0.437501 +v -0.125000 0.012311 -0.437501 +v -0.131836 0.012985 -0.468750 +v -0.126770 0.038455 -0.468750 +v -0.120197 0.036461 -0.437501 +v -0.110774 0.059210 -0.437501 +v -0.116832 0.062448 -0.468750 +v -0.097094 0.079683 -0.437501 +v -0.102404 0.084041 -0.468750 +v -0.079683 0.097094 -0.437501 +v -0.084041 0.102404 -0.468750 +v -0.059210 0.110774 -0.437501 +v -0.062448 0.116832 -0.468750 +v -0.036461 0.120197 -0.437501 +v -0.038455 0.126770 -0.468750 +v -0.012311 0.125001 -0.437501 +v -0.012985 0.131837 -0.468750 +v 0.038455 0.126770 -0.468750 +v 0.012985 0.131837 -0.468750 +v 0.012311 0.125001 -0.437501 +v 0.036461 0.120197 -0.437501 +v 0.084041 0.102404 -0.468750 +v 0.062448 0.116832 -0.468750 +v 0.059210 0.110774 -0.437501 +v 0.079683 0.097094 -0.437501 +v 0.102404 0.084041 -0.468750 +v 0.097094 0.079683 -0.437501 +v 0.136982 0.046976 -0.468751 +v 0.142474 0.054133 -0.468751 +v 0.128039 0.048154 -0.468751 +v 0.139022 0.062467 -0.468751 +v 0.130078 0.063644 -0.468751 +v 0.124587 0.056488 -0.468751 +v 0.063644 0.130078 -0.468751 +v 0.062467 0.139022 -0.468751 +v 0.056487 0.124587 -0.468751 +v 0.054133 0.142474 -0.468751 +v 0.046976 0.136982 -0.468751 +v 0.048153 0.128039 -0.468751 +v -0.046976 0.136982 -0.468751 +v -0.054133 0.142474 -0.468751 +v -0.048153 0.128039 -0.468751 +v -0.062467 0.139022 -0.468751 +v -0.063644 0.130078 -0.468751 +v -0.056487 0.124587 -0.468751 +v -0.130078 0.063644 -0.468751 +v -0.139022 0.062467 -0.468751 +v -0.124587 0.056488 -0.468751 +v -0.142474 0.054133 -0.468751 +v -0.136982 0.046976 -0.468751 +v -0.128039 0.048153 -0.468751 +v -0.136982 -0.046976 -0.468751 +v -0.142474 -0.054133 -0.468751 +v -0.128039 -0.048153 -0.468751 +v -0.139022 -0.062467 -0.468751 +v -0.130078 -0.063644 -0.468751 +v -0.124587 -0.056487 -0.468751 +v -0.063644 -0.130078 -0.468751 +v -0.062467 -0.139022 -0.468751 +v -0.056487 -0.124587 -0.468751 +v -0.054132 -0.142474 -0.468751 +v -0.046976 -0.136982 -0.468751 +v -0.048153 -0.128039 -0.468751 +v 0.046976 -0.136982 -0.468751 +v 0.054133 -0.142474 -0.468751 +v 0.048153 -0.128039 -0.468751 +v 0.062467 -0.139022 -0.468751 +v 0.063644 -0.130078 -0.468751 +v 0.056488 -0.124587 -0.468751 +v 0.130078 -0.063644 -0.468751 +v 0.139022 -0.062467 -0.468751 +v 0.124587 -0.056487 -0.468751 +v 0.142474 -0.054132 -0.468751 +v 0.136982 -0.046976 -0.468751 +v 0.128039 -0.048153 -0.468751 +v 0.108578 0.095821 -0.468751 +v 0.110913 0.104534 -0.468751 +v 0.099865 0.093486 -0.468751 +v 0.104534 0.110913 -0.468751 +v 0.095821 0.108578 -0.468751 +v 0.093486 0.099865 -0.468751 +v 0.009021 0.144532 -0.468751 +v 0.004510 0.152344 -0.468751 +v 0.004510 0.136720 -0.468751 +v -0.004510 0.152344 -0.468751 +v -0.009021 0.144532 -0.468751 +v -0.004510 0.136720 -0.468751 +v -0.095821 0.108578 -0.468751 +v -0.104534 0.110913 -0.468751 +v -0.093486 0.099865 -0.468751 +v -0.110913 0.104534 -0.468751 +v -0.108578 0.095821 -0.468751 +v -0.099865 0.093486 -0.468751 +v -0.144532 0.009021 -0.468751 +v -0.152344 0.004510 -0.468751 +v -0.136720 0.004510 -0.468751 +v -0.152344 -0.004510 -0.468751 +v -0.144532 -0.009021 -0.468751 +v -0.136720 -0.004510 -0.468751 +v -0.108578 -0.095821 -0.468751 +v -0.110913 -0.104534 -0.468751 +v -0.099865 -0.093486 -0.468751 +v -0.104534 -0.110913 -0.468751 +v -0.095821 -0.108578 -0.468751 +v -0.093486 -0.099865 -0.468751 +v -0.009021 -0.144532 -0.468751 +v -0.004510 -0.152344 -0.468751 +v -0.004510 -0.136720 -0.468751 +v 0.004510 -0.152344 -0.468751 +v 0.009021 -0.144532 -0.468751 +v 0.004510 -0.136720 -0.468751 +v 0.095821 -0.108578 -0.468751 +v 0.104534 -0.110913 -0.468751 +v 0.093486 -0.099865 -0.468751 +v 0.110913 -0.104534 -0.468751 +v 0.108578 -0.095821 -0.468751 +v 0.099865 -0.093486 -0.468751 +v 0.144532 -0.009021 -0.468751 +v 0.152344 -0.004510 -0.468751 +v 0.136720 -0.004510 -0.468751 +v 0.152344 0.004510 -0.468751 +v 0.144532 0.009021 -0.468751 +v 0.136720 0.004510 -0.468751 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.9457 0.2723 +vt 0.9145 0.2850 +vt 1.0081 0.2851 +vt 0.9769 0.2723 +vt 0.8833 0.2970 +vt 1.0393 0.2971 +vt 0.8521 0.3078 +vt 1.0706 0.3080 +vt 0.8209 0.3169 +vt 0.9459 0.0196 +vt 0.9458 0.0339 +vt 0.9151 0.0339 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 0.9767 0.0339 +vt 1.0076 0.0195 +vt 1.0075 0.0339 +vt 0.8536 0.0338 +vt 0.8524 0.2238 +vt 0.8212 0.2146 +vt 0.8228 0.0338 +vt 0.7902 0.2074 +vt 0.7920 0.0337 +vt 0.8843 0.0339 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.0383 0.0339 +vt 1.1328 0.2072 +vt 1.1017 0.2145 +vt 1.0999 0.0340 +vt 1.1306 0.0342 +vt 0.7591 0.2024 +vt 0.7611 0.0336 +vt 0.8537 0.0195 +vt 1.0694 0.0196 +vt 1.0691 0.0339 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.7280 0.1998 +vt 0.7302 0.0335 +vt 0.8229 0.0194 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.6968 0.1998 +vt 0.6656 0.2023 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.7613 0.0193 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6344 0.2072 +vt 0.6031 0.2144 +vt 0.6066 0.0331 +vt 0.6375 0.0332 +vt 0.6995 0.0191 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.5875 0.2190 +vt 0.5719 0.2143 +vt 0.5757 0.0330 +vt 0.6686 0.0189 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4160 0.2019 +vt 0.3846 0.2068 +vt 0.3892 0.0320 +vt 0.4204 0.0322 +vt 0.5097 0.2021 +vt 0.4786 0.1994 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.5759 0.0186 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.4473 0.1994 +vt 0.4516 0.0324 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 1.0394 0.2346 +vt 1.0082 0.2466 +vt 1.0706 0.2237 +vt 0.8209 0.3169 +vt 0.8521 0.3078 +vt 0.8506 0.4981 +vt 0.8196 0.4980 +vt 0.8524 0.2238 +vt 0.8536 0.0338 +vt 0.8843 0.0339 +vt 0.8835 0.2346 +vt 0.9770 0.2593 +vt 0.9458 0.2593 +vt 1.1018 0.3172 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 0.8835 0.2346 +vt 0.9146 0.2466 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.3215 0.3169 +vt 0.3372 0.3122 +vt 0.3528 0.3168 +vt 0.3842 0.3241 +vt 0.4155 0.3290 +vt 0.4467 0.3316 +vt 0.4779 0.3315 +vt 0.5091 0.3290 +vt 0.5403 0.3240 +vt 0.5715 0.3168 +vt 0.5871 0.3122 +vt 0.6027 0.3168 +vt 1.1952 0.1995 +vt 0.3531 0.2140 +vt 0.3374 0.2186 +vt 0.5409 0.2071 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.9457 0.2723 +vt 0.9145 0.2850 +vt 0.9769 0.2723 +vt 1.0081 0.2851 +vt 0.8833 0.2970 +vt 1.0393 0.2971 +vt 1.0706 0.3080 +vt 1.1018 0.3172 +vt 0.9459 0.0196 +vt 0.9458 0.0339 +vt 0.9151 0.0339 +vt 0.9151 0.0196 +vt 0.9767 0.0195 +vt 0.9767 0.0339 +vt 1.0076 0.0195 +vt 1.0075 0.0339 +vt 0.8212 0.2146 +vt 0.8228 0.0338 +vt 0.7902 0.2074 +vt 0.7920 0.0337 +vt 0.8844 0.0196 +vt 1.0385 0.0195 +vt 1.0383 0.0339 +vt 1.1328 0.2072 +vt 1.1017 0.2145 +vt 1.0999 0.0340 +vt 1.1306 0.0342 +vt 0.7591 0.2024 +vt 0.7611 0.0336 +vt 0.8537 0.0195 +vt 1.0694 0.0196 +vt 1.0691 0.0339 +vt 1.1640 0.2021 +vt 1.1610 0.0344 +vt 0.7280 0.1998 +vt 0.7302 0.0335 +vt 0.8229 0.0194 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1004 0.0197 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.7921 0.0194 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1314 0.0198 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.2280 0.1990 +vt 0.1969 0.1988 +vt 0.2015 0.0321 +vt 0.2327 0.0318 +vt 0.6968 0.1998 +vt 0.6656 0.2023 +vt 0.6685 0.0333 +vt 0.6994 0.0334 +vt 0.7613 0.0193 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.1624 0.0202 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7304 0.0192 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.1934 0.0209 +vt 1.1908 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.2906 0.2066 +vt 0.2593 0.2016 +vt 0.2642 0.0317 +vt 0.2956 0.0317 +vt 0.6344 0.2072 +vt 0.6031 0.2144 +vt 0.6066 0.0331 +vt 0.6375 0.0332 +vt 0.6995 0.0191 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2320 0.0171 +vt 0.1997 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.3218 0.2139 +vt 0.3268 0.0318 +vt 0.5875 0.2190 +vt 0.5719 0.2143 +vt 0.5757 0.0330 +vt 0.6686 0.0189 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.2641 0.0170 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6377 0.0188 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.2958 0.0171 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6068 0.0187 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3271 0.0173 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.4160 0.2019 +vt 0.3846 0.2068 +vt 0.3892 0.0320 +vt 0.4204 0.0322 +vt 0.5097 0.2021 +vt 0.4786 0.1994 +vt 0.4827 0.0325 +vt 0.5137 0.0327 +vt 0.5759 0.0186 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3583 0.0174 +vt 0.3580 0.0320 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.4473 0.1994 +vt 0.4516 0.0324 +vt 0.5450 0.0184 +vt 0.5447 0.0328 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.3895 0.0175 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5140 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4208 0.0177 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.4830 0.0181 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4519 0.0179 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 1.0394 0.2346 +vt 1.0082 0.2466 +vt 1.0706 0.2237 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 0.9146 0.2466 +vt 0.9458 0.2593 +vt 0.9770 0.2593 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.3215 0.3169 +vt 0.3372 0.3122 +vt 0.3528 0.3168 +vt 0.3842 0.3241 +vt 0.4155 0.3290 +vt 0.4467 0.3316 +vt 0.4779 0.3315 +vt 0.5091 0.3290 +vt 0.5403 0.3240 +vt 0.5715 0.3168 +vt 0.5871 0.3122 +vt 0.6027 0.3168 +vt 1.1952 0.1995 +vt 0.3531 0.2140 +vt 0.3374 0.2186 +vt 0.5409 0.2071 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6340 0.5124 +vt 0.6340 0.4980 +vt 0.6649 0.4980 +vt 0.6649 0.5123 +vt 0.6959 0.5124 +vt 0.6959 0.4980 +vt 0.7268 0.5123 +vt 0.7268 0.4980 +vt 0.7577 0.5123 +vt 0.7578 0.4980 +vt 0.7886 0.5124 +vt 0.7887 0.4980 +vt 0.8196 0.5125 +vt 0.8196 0.4980 +vt 0.8506 0.4981 +vt 0.8505 0.5124 +vt 0.8814 0.5125 +vt 0.8815 0.4981 +vt 0.9123 0.5126 +vt 0.9125 0.4982 +vt 0.9434 0.5128 +vt 0.9436 0.4983 +vt 0.9747 0.4983 +vt 0.9745 0.5128 +vt 1.0057 0.4984 +vt 1.0055 0.5128 +vt 1.0366 0.5128 +vt 1.0367 0.4984 +vt 1.0677 0.4984 +vt 1.0677 0.5129 +vt 1.0988 0.4984 +vt 1.0988 0.5128 +vt 1.1301 0.5129 +vt 1.1297 0.4983 +vt 1.1607 0.4982 +vt 1.1617 0.5126 +vt 1.1934 0.5121 +vt 1.1912 0.4978 +vt 0.1983 0.5120 +vt 0.2004 0.4977 +vt 0.2310 0.4981 +vt 0.2300 0.5126 +vt 0.2617 0.5129 +vt 0.2621 0.4982 +vt 0.2933 0.4983 +vt 0.2932 0.5129 +vt 0.3244 0.4982 +vt 0.3245 0.5127 +vt 0.3553 0.4982 +vt 0.3554 0.5126 +vt 0.3863 0.4982 +vt 0.3864 0.5126 +vt 0.4172 0.4981 +vt 0.4173 0.5125 +vt 0.4481 0.4981 +vt 0.4482 0.5124 +vt 0.5101 0.5125 +vt 0.4791 0.5124 +vt 0.4790 0.4981 +vt 0.5100 0.4980 +vt 0.5720 0.5124 +vt 0.5410 0.5124 +vt 0.5410 0.4980 +vt 0.5719 0.4980 +vt 0.6030 0.5125 +vt 0.6030 0.4980 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6339 0.3241 +vt 0.6650 0.3290 +vt 0.6962 0.3316 +vt 0.7273 0.3316 +vt 0.7585 0.3291 +vt 0.7897 0.3241 +vt 0.8209 0.3169 +vt 0.8365 0.3124 +vt 0.8521 0.3170 +vt 0.8832 0.3242 +vt 0.9143 0.3292 +vt 0.9455 0.3318 +vt 0.9767 0.3318 +vt 1.0079 0.3293 +vt 1.0391 0.3244 +vt 1.0705 0.3172 +vt 1.0862 0.3126 +vt 1.1018 0.3172 +vt 1.1329 0.3245 +vt 1.1642 0.3296 +vt 1.1955 0.3322 +vt 0.1964 0.3319 +vt 0.2277 0.3318 +vt 0.2591 0.3292 +vt 0.2903 0.3241 +vt 0.3215 0.3169 +vt 0.3372 0.3122 +vt 0.3528 0.3168 +vt 0.3842 0.3241 +vt 0.4155 0.3290 +vt 0.4467 0.3316 +vt 0.4779 0.3315 +vt 0.5091 0.3290 +vt 0.5403 0.3240 +vt 0.5715 0.3168 +vt 0.6027 0.3168 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn -0.0000 0.0000 1.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.6857 0.2113 0.6965 +vn 0.6857 0.2113 0.6965 +vn 0.6857 0.3431 0.6419 +vn -0.6857 0.3431 0.6419 +vn -0.6857 0.0713 0.7244 +vn 0.6857 0.0713 0.7244 +vn -0.6857 -0.0713 0.7244 +vn 0.6857 -0.0713 0.7244 +vn -0.6857 -0.2113 0.6965 +vn 0.6857 -0.2113 0.6965 +vn -0.6857 -0.3431 0.6419 +vn 0.6857 -0.3431 0.6419 +vn -0.6857 -0.4617 0.5626 +vn 0.6857 -0.4616 0.5628 +vn -0.6857 -0.5627 0.4617 +vn 0.6857 -0.5627 0.4617 +vn -0.6857 -0.6421 0.3427 +vn 0.6857 -0.6419 0.3431 +vn -0.6857 -0.6966 0.2112 +vn 0.6857 -0.6965 0.2114 +vn -0.6857 -0.7244 0.0713 +vn 0.6857 -0.7244 0.0713 +vn -0.6857 -0.7244 -0.0713 +vn 0.6857 -0.7244 -0.0713 +vn -0.6857 -0.6965 -0.2113 +vn 0.6857 -0.6965 -0.2113 +vn -0.6857 -0.6419 -0.3432 +vn 0.6857 -0.6420 -0.3430 +vn -0.6857 -0.5625 -0.4618 +vn 0.6857 -0.5625 -0.4619 +vn -0.6857 -0.4617 -0.5626 +vn 0.6857 -0.4617 -0.5626 +vn -0.6857 -0.3431 -0.6419 +vn 0.6857 -0.3431 -0.6419 +vn -0.6857 -0.2113 -0.6965 +vn 0.6857 -0.2113 -0.6965 +vn -0.6857 -0.0713 -0.7244 +vn 0.6857 -0.0713 -0.7244 +vn -0.6857 0.0713 -0.7244 +vn 0.6857 0.0713 -0.7244 +vn -0.6857 0.2114 -0.6965 +vn 0.6857 0.2114 -0.6965 +vn -0.6857 0.4617 -0.5626 +vn 0.6857 0.4616 -0.5627 +vn 0.6857 0.3431 -0.6419 +vn -0.6857 0.3432 -0.6419 +vn -0.6857 0.5626 -0.4617 +vn 0.6857 0.5628 -0.4616 +vn -0.6857 0.6420 -0.3430 +vn 0.6857 0.6419 -0.3432 +vn -0.6857 0.6966 -0.2112 +vn 0.6857 0.6966 -0.2112 +vn -0.6857 0.7244 -0.0713 +vn 0.6857 0.7244 -0.0713 +vn -0.6857 0.6965 0.2113 +vn 0.6857 0.6965 0.2113 +vn 0.6857 0.7244 0.0713 +vn -0.6857 0.7244 0.0713 +vn -0.6857 0.6418 0.3433 +vn 0.6857 0.6420 0.3430 +vn -0.6857 0.5626 0.4617 +vn 0.6857 0.5628 0.4616 +vn -0.2147 0.8614 -0.4604 +vn -0.1087 0.8767 -0.4686 +vn -0.1087 0.9513 -0.2886 +vn -0.2147 0.9346 -0.2835 +vn -0.2147 0.9720 -0.0957 +vn -0.1087 0.9893 -0.0974 +vn -0.2147 0.9720 0.0957 +vn -0.1087 0.9893 0.0974 +vn -0.2147 0.9346 0.2835 +vn -0.1087 0.9513 0.2886 +vn -0.2147 0.8614 0.4604 +vn -0.1087 0.8767 0.4686 +vn -0.2147 0.7550 0.6196 +vn -0.1087 0.7684 0.6306 +vn -0.1087 0.6306 0.7684 +vn -0.2147 0.6196 0.7550 +vn -0.2147 0.4604 0.8614 +vn -0.1087 0.4686 0.8767 +vn -0.2147 0.2835 0.9346 +vn -0.1087 0.2886 0.9513 +vn -0.2147 0.0957 0.9720 +vn -0.1087 0.0974 0.9893 +vn -0.1087 -0.0974 0.9893 +vn -0.2147 -0.0957 0.9720 +vn -0.1087 -0.2886 0.9513 +vn -0.2147 -0.2835 0.9346 +vn -0.2147 -0.4604 0.8614 +vn -0.1087 -0.4686 0.8767 +vn -0.1087 -0.6306 0.7684 +vn -0.2147 -0.6196 0.7550 +vn -0.1087 -0.7684 0.6306 +vn -0.2147 -0.7550 0.6196 +vn -0.2147 -0.8614 0.4604 +vn -0.1087 -0.8767 0.4686 +vn -0.1087 -0.9513 0.2886 +vn -0.2147 -0.9346 0.2835 +vn -0.2147 -0.9720 0.0957 +vn -0.1087 -0.9893 0.0974 +vn -0.1087 -0.9893 -0.0974 +vn -0.2147 -0.9720 -0.0957 +vn -0.2147 -0.9346 -0.2835 +vn -0.1087 -0.9513 -0.2886 +vn -0.1087 -0.8767 -0.4686 +vn -0.2147 -0.8614 -0.4604 +vn -0.1087 -0.7684 -0.6306 +vn -0.2147 -0.7550 -0.6196 +vn -0.1087 -0.6306 -0.7684 +vn -0.2147 -0.6196 -0.7550 +vn -0.1087 -0.4686 -0.8767 +vn -0.2147 -0.4604 -0.8614 +vn -0.1087 -0.2886 -0.9513 +vn -0.2147 -0.2835 -0.9346 +vn -0.1087 -0.0974 -0.9893 +vn -0.2147 -0.0957 -0.9720 +vn -0.2147 0.2835 -0.9346 +vn -0.2147 0.0957 -0.9720 +vn -0.1087 0.0974 -0.9893 +vn -0.1087 0.2886 -0.9513 +vn -0.2147 0.6196 -0.7550 +vn -0.2147 0.4604 -0.8614 +vn -0.1087 0.4686 -0.8767 +vn -0.1087 0.6306 -0.7684 +vn -0.2147 0.7550 -0.6196 +vn -0.1087 0.7684 -0.6306 +vn 0.0247 0.0247 0.9994 +vn 0.1243 0.1243 0.9844 +vn 0.1243 -0.1243 0.9844 +vn 0.0247 -0.0247 0.9994 +vn 0.2267 0.2267 0.9472 +vn 0.2267 -0.2267 0.9472 +vn 0.3333 0.3333 0.8819 +vn 0.3333 -0.3333 0.8819 +vn 0.4431 0.4431 0.7793 +vn 0.2147 0.0957 0.9720 +vn 0.1087 0.0974 0.9893 +vn 0.1087 0.2886 0.9513 +vn 0.2147 0.2835 0.9346 +vn 0.2147 -0.0957 0.9720 +vn 0.1087 -0.0974 0.9893 +vn 0.2147 -0.2835 0.9346 +vn 0.1087 -0.2886 0.9513 +vn 0.1087 0.6306 0.7684 +vn -0.3333 0.3333 0.8819 +vn -0.4431 0.4431 0.7793 +vn 0.1087 0.7684 0.6306 +vn -0.5510 0.5510 0.6267 +vn 0.1087 0.8767 0.4686 +vn 0.1087 0.4686 0.8767 +vn 0.2147 0.4604 0.8614 +vn 0.2147 -0.4604 0.8614 +vn 0.1087 -0.4686 0.8767 +vn -0.5510 -0.5510 0.6267 +vn -0.4431 -0.4431 0.7793 +vn 0.1087 -0.7684 0.6306 +vn 0.1087 -0.8767 0.4686 +vn -0.6437 0.6437 0.4139 +vn 0.1087 0.9513 0.2886 +vn 0.2147 0.6196 0.7550 +vn 0.2147 -0.6196 0.7550 +vn 0.1087 -0.6306 0.7684 +vn -0.6437 -0.6437 0.4139 +vn 0.1087 -0.9513 0.2886 +vn -0.6995 0.6996 0.1458 +vn 0.1087 0.9893 0.0974 +vn 0.2147 0.7550 0.6196 +vn 0.6858 -0.5627 0.4617 +vn -0.6857 -0.5626 0.4617 +vn -0.6857 -0.6419 0.3431 +vn 0.2147 -0.7550 0.6196 +vn 0.6857 -0.4617 0.5626 +vn 0.2147 0.8614 0.4604 +vn 0.2147 -0.8614 0.4604 +vn 0.6857 -0.3429 0.6420 +vn -0.6995 -0.6996 -0.1458 +vn -0.6996 -0.6995 0.1458 +vn 0.1087 -0.9893 0.0974 +vn 0.1087 -0.9893 -0.0974 +vn -0.6996 0.6995 -0.1458 +vn -0.6437 0.6437 -0.4139 +vn 0.1087 0.9513 -0.2886 +vn 0.1087 0.9893 -0.0974 +vn 0.2147 0.9346 0.2835 +vn 0.2147 -0.9346 0.2835 +vn 0.2147 0.9720 0.0957 +vn 0.2147 -0.9720 0.0957 +vn -0.5510 -0.5510 -0.6267 +vn -0.6437 -0.6437 -0.4139 +vn 0.1087 -0.9513 -0.2886 +vn 0.1087 -0.8767 -0.4686 +vn -0.5510 0.5510 -0.6267 +vn -0.4431 0.4431 -0.7793 +vn 0.1087 0.7684 -0.6306 +vn 0.1087 0.8767 -0.4686 +vn 0.2147 0.9720 -0.0957 +vn -0.6857 -0.5626 -0.4618 +vn 0.6857 -0.5626 -0.4618 +vn 0.2147 -0.9720 -0.0957 +vn 0.6857 0.4618 0.5625 +vn -0.6857 0.4616 0.5628 +vn 0.6857 0.3432 0.6419 +vn -0.6857 0.3432 0.6419 +vn -0.4431 -0.4431 -0.7793 +vn 0.1087 -0.7684 -0.6306 +vn -0.5774 0.5774 -0.5774 +vn -0.4431 0.7793 -0.4431 +vn 0.1087 0.6306 -0.7684 +vn 0.2147 0.9346 -0.2835 +vn 0.2147 -0.9346 -0.2835 +vn 0.6857 0.4616 0.5628 +vn 0.2147 0.8614 -0.4604 +vn -0.6857 -0.3432 -0.6419 +vn 0.2147 -0.8614 -0.4604 +vn 0.6857 0.5627 0.4617 +vn -0.6857 0.5627 0.4617 +vn 0.2147 0.7550 -0.6196 +vn 0.2147 -0.7550 -0.6196 +vn -0.6437 -0.4139 -0.6437 +vn -0.5510 -0.6267 -0.5510 +vn 0.1087 -0.4686 -0.8767 +vn 0.1087 -0.2886 -0.9513 +vn -0.6437 0.4139 -0.6437 +vn -0.6995 0.1458 -0.6996 +vn 0.1087 0.0974 -0.9893 +vn 0.1087 0.2886 -0.9513 +vn 0.2147 0.6196 -0.7550 +vn -0.6857 -0.6965 0.2114 +vn 0.6857 -0.6965 0.2113 +vn 0.2147 -0.6196 -0.7550 +vn 0.1087 -0.6306 -0.7684 +vn 0.6857 0.6420 0.3431 +vn -0.6857 0.6418 0.3434 +vn -0.6996 -0.1458 -0.6995 +vn 0.1087 -0.0974 -0.9893 +vn 0.2147 0.4604 -0.8614 +vn 0.1087 0.4686 -0.8767 +vn -0.6857 0.2113 -0.6965 +vn 0.6857 0.2113 -0.6965 +vn 0.2147 -0.4604 -0.8614 +vn 0.2147 0.2835 -0.9346 +vn -0.6857 0.3431 -0.6419 +vn 0.2147 -0.2835 -0.9346 +vn 0.6857 0.7244 0.0714 +vn 0.2147 0.0957 -0.9720 +vn -0.6857 0.4618 -0.5625 +vn 0.6857 0.4616 -0.5628 +vn 0.2147 -0.0957 -0.9720 +vn 0.6857 0.6965 -0.2113 +vn -0.6857 0.6965 -0.2113 +vn 0.6857 0.5626 -0.4617 +vn 0.6100 -0.3032 -0.7321 +vn 0.0000 -0.3827 -0.9239 +vn -0.0000 0.6088 -0.7934 +vn 0.6100 0.4824 -0.6287 +vn 0.6100 -0.7856 -0.1033 +vn 0.0000 -0.9914 -0.1305 +vn 0.0000 0.9914 0.1306 +vn 0.6100 0.7856 0.1033 +vn 0.0000 0.3827 0.9239 +vn 0.6100 0.3032 0.7321 +vn 0.0000 -0.6087 0.7934 +vn 0.6100 -0.4824 0.6287 +vn -0.6100 0.3032 0.7321 +vn -0.0000 0.9914 0.1305 +vn -0.6100 0.7856 0.1036 +vn -0.6100 -0.4824 0.6287 +vn 0.0000 -0.6088 0.7934 +vn -0.0000 0.6087 -0.7934 +vn -0.6100 0.4824 -0.6286 +vn -0.6100 -0.3031 -0.7322 +vn -0.0000 -0.9914 -0.1306 +vn -0.6100 -0.7856 -0.1034 +vn 0.6100 -0.7321 -0.3032 +vn 0.0000 -0.9239 -0.3826 +vn 0.0000 -0.1305 -0.9914 +vn 0.6100 -0.1034 -0.7856 +vn 0.6100 -0.6287 0.4824 +vn 0.0000 -0.7933 0.6088 +vn 0.0000 0.7934 -0.6087 +vn 0.6100 0.6287 -0.4823 +vn 0.0000 0.9239 0.3827 +vn 0.6100 0.7322 0.3030 +vn 0.0000 0.1305 0.9914 +vn 0.6100 0.1037 0.7856 +vn -0.6100 0.7321 0.3033 +vn -0.6100 0.6287 -0.4823 +vn -0.6100 0.1034 0.7856 +vn -0.6100 -0.1033 -0.7856 +vn 0.0000 -0.9239 -0.3827 +vn -0.6100 -0.7322 -0.3031 +vn 0.0000 -0.7934 0.6087 +vn -0.6100 -0.6288 0.4823 +vn 0.6100 -0.7321 0.3032 +vn -0.0000 -0.9239 0.3827 +vn -0.0000 -0.7934 -0.6088 +vn 0.6100 -0.6287 -0.4824 +vn 0.6100 -0.1034 0.7856 +vn 0.0000 -0.1305 0.9914 +vn -0.0000 0.1306 -0.9914 +vn 0.6100 0.1035 -0.7856 +vn -0.0000 0.9239 -0.3827 +vn 0.6100 0.7321 -0.3032 +vn 0.0000 0.7934 0.6087 +vn 0.6100 0.6287 0.4824 +vn -0.6100 0.7321 -0.3032 +vn 0.0000 0.1305 -0.9914 +vn -0.6100 0.1034 -0.7856 +vn -0.6100 0.6287 0.4824 +vn 0.0000 0.7934 0.6088 +vn 0.0000 -0.7934 -0.6087 +vn -0.6100 -0.6286 -0.4824 +vn -0.6100 -0.7321 0.3032 +vn 0.0000 -0.1306 0.9914 +vn -0.6100 -0.1033 0.7856 +vn 0.6100 -0.3032 0.7321 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 -0.9914 0.1305 +vn 0.6100 -0.7856 0.1036 +vn 0.6100 0.4824 0.6287 +vn 0.0000 0.6088 0.7934 +vn -0.0000 -0.6087 -0.7934 +vn 0.6100 -0.4824 -0.6287 +vn -0.0000 0.3827 -0.9239 +vn 0.6100 0.3032 -0.7321 +vn -0.0000 0.9914 -0.1306 +vn 0.6100 0.7856 -0.1034 +vn -0.6100 0.3032 -0.7321 +vn -0.6100 -0.4823 -0.6287 +vn -0.6100 0.7856 -0.1034 +vn 0.0000 0.9914 -0.1305 +vn -0.6100 -0.7856 0.1033 +vn -0.6100 -0.3031 0.7322 +vn 0.0000 0.6087 0.7934 +vn -0.6100 0.4824 0.6287 +vn 0.6100 -0.4822 0.6288 +vn 0.6100 -0.7856 -0.1034 +vn 0.6100 -0.3031 -0.7322 +vn -0.6100 -0.3032 -0.7321 +vn -0.6100 -0.7856 -0.1036 +vn -0.6100 0.4825 -0.6286 +vn -0.6100 0.3033 0.7321 +vn -0.6100 0.7856 0.1034 +vn 0.6100 0.7322 0.3031 +vn 0.6100 0.1034 0.7856 +vn 0.6100 0.6287 -0.4824 +vn -0.0000 0.7934 -0.6088 +vn -0.0000 -0.1306 -0.9914 +vn -0.6100 -0.7320 -0.3034 +vn 0.0000 -0.7934 0.6088 +vn -0.6100 -0.6286 0.4824 +vn 0.0000 0.1306 0.9914 +vn -0.6100 0.7321 0.3032 +vn -0.6100 0.6288 -0.4823 +vn 0.6100 0.1034 -0.7856 +vn -0.6100 -0.7320 0.3034 +vn -0.6100 -0.1034 0.7856 +vn -0.6100 -0.6286 -0.4825 +vn -0.6100 0.6286 0.4824 +vn 0.6100 -0.4823 -0.6287 +vn -0.0000 -0.6088 -0.7934 +vn -0.0000 -0.9914 0.1306 +vn 0.6100 -0.7856 0.1034 +vn -0.6100 -0.3032 0.7321 +vn -0.6100 0.4823 0.6287 +vn -0.6100 -0.7856 0.1034 +vn -0.6100 0.7856 -0.1033 +vn -0.6100 0.3033 -0.7321 +vn -0.6100 -0.4824 -0.6287 +vn -0.2267 -0.2267 0.9472 +vn -0.1243 -0.1243 0.9844 +vn -0.3333 -0.3333 0.8819 +vn 0.4431 -0.4431 0.7793 +vn 0.6306 0.1087 0.7684 +vn 0.7684 0.1087 0.6306 +vn 0.6306 -0.1087 0.7684 +vn 0.4686 -0.1087 0.8767 +vn -0.0247 -0.0247 0.9994 +vn -0.0247 0.0247 0.9994 +vn 0.5510 0.5510 -0.6267 +vn 0.6437 0.6437 -0.4139 +vn 0.6996 0.6995 -0.1458 +vn 0.6995 0.6996 0.1458 +vn 0.6437 0.6437 0.4139 +vn 0.5510 0.5510 0.6267 +vn -0.2267 0.2267 0.9472 +vn -0.1243 0.1243 0.9844 +vn 0.5510 -0.5510 0.6267 +vn 0.6437 -0.6437 0.4139 +vn 0.6995 -0.6995 0.1458 +vn 0.6995 -0.6995 -0.1458 +vn 0.6437 -0.6437 -0.4139 +vn 0.5510 -0.5510 -0.6267 +vn 0.4431 -0.4431 -0.7793 +vn 0.5773 -0.5774 -0.5774 +vn 0.4431 -0.7793 -0.4431 +vn 0.5510 -0.6267 -0.5510 +vn 0.6437 -0.4139 -0.6437 +vn 0.6995 -0.1458 -0.6995 +vn 0.6995 0.1458 -0.6995 +vn 0.6437 0.4139 -0.6437 +vn 0.5510 0.6267 -0.5510 +vn 0.4431 0.7793 -0.4431 +vn 0.5773 0.5774 -0.5774 +vn 0.4431 0.4431 -0.7793 +vn -0.4431 -0.7793 -0.4431 +vn -0.5774 -0.5774 -0.5773 +vn -0.5510 0.6267 -0.5510 +vn 0.6100 -0.5603 -0.5603 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.2588 -0.9659 +vn 0.6100 0.2051 -0.7654 +vn 0.6100 -0.7654 0.2051 +vn 0.0000 -0.9659 0.2588 +vn 0.0000 0.9659 -0.2588 +vn 0.6100 0.7654 -0.2051 +vn 0.0000 0.7071 0.7071 +vn 0.6100 0.5604 0.5602 +vn 0.0000 -0.2588 0.9659 +vn 0.6100 -0.2051 0.7654 +vn -0.6100 0.5602 0.5604 +vn -0.6100 0.7654 -0.2051 +vn -0.6100 -0.2051 0.7654 +vn -0.6100 0.2052 -0.7654 +vn -0.6100 -0.5603 -0.5603 +vn -0.6100 -0.7654 0.2051 +vn 0.6100 -0.7924 -0.0001 +vn -0.0000 -0.5000 -0.8660 +vn 0.6100 -0.3961 -0.6863 +vn 0.6100 -0.3961 0.6863 +vn 0.0000 -0.5000 0.8660 +vn -0.0000 0.5000 -0.8660 +vn 0.6100 0.3963 -0.6862 +vn 0.6100 0.7924 0.0000 +vn 0.0000 0.5000 0.8660 +vn 0.6100 0.3962 0.6862 +vn -0.6100 0.7924 -0.0001 +vn -0.6100 0.3963 -0.6861 +vn -0.6100 0.3962 0.6862 +vn -0.6100 -0.3962 -0.6862 +vn -0.6100 -0.7924 0.0000 +vn -0.6100 -0.3962 0.6862 +vn 0.6100 -0.5602 0.5604 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.9659 -0.2588 +vn 0.6100 -0.7654 -0.2050 +vn 0.6100 0.2051 0.7654 +vn 0.0000 0.2588 0.9659 +vn 0.0000 -0.2588 -0.9659 +vn 0.6100 -0.2051 -0.7654 +vn -0.0000 0.7071 -0.7071 +vn 0.6100 0.5602 -0.5604 +vn 0.0000 0.9659 0.2588 +vn 0.6100 0.7655 0.2049 +vn -0.6100 0.5603 -0.5603 +vn -0.6100 -0.2051 -0.7654 +vn -0.6100 0.7654 0.2051 +vn -0.6100 -0.7654 -0.2051 +vn -0.6100 -0.5603 0.5603 +vn -0.6100 0.2052 0.7654 +vn 0.6100 0.0002 0.7924 +vn 0.0000 -0.8660 0.5000 +vn 0.6100 -0.6861 0.3964 +vn 0.6100 0.6863 0.3961 +vn 0.0000 0.8660 0.5000 +vn -0.0000 -0.8660 -0.5000 +vn 0.6100 -0.6863 -0.3961 +vn 0.6100 0.0002 -0.7924 +vn -0.0000 0.8660 -0.5000 +vn 0.6100 0.6862 -0.3962 +vn -0.6100 0.0001 -0.7924 +vn -0.6100 -0.6861 -0.3964 +vn -0.6100 0.6862 -0.3962 +vn -0.6100 -0.6863 0.3961 +vn -0.6100 -0.0001 0.7924 +vn -0.6100 0.6863 0.3961 +vn 0.6100 -0.7654 0.2052 +vn 0.6100 0.2052 -0.7654 +vn -0.6100 -0.5602 -0.5604 +vn -0.6100 0.2050 -0.7654 +vn -0.6100 -0.2052 0.7654 +vn -0.6100 0.5603 0.5603 +vn 0.6100 0.3963 -0.6861 +vn 0.6100 -0.3962 -0.6862 +vn -0.6100 -0.3961 0.6863 +vn -0.6100 -0.3961 -0.6863 +vn -0.6100 0.3963 0.6862 +vn -0.6100 0.3964 -0.6861 +vn 0.6100 0.7654 0.2051 +vn 0.6100 0.2050 0.7654 +vn 0.6100 -0.7654 -0.2053 +vn -0.6100 0.2050 0.7654 +vn -0.6100 0.5604 -0.5602 +vn 0.6100 0.0000 -0.7924 +vn 0.6100 0.6862 -0.3963 +vn 0.6100 -0.6861 -0.3963 +vn 0.6100 -0.6862 0.3962 +vn -0.6100 0.0000 0.7924 +vn -0.6100 0.6862 0.3963 +vn -0.6100 -0.6862 0.3962 +vn -0.6100 0.6863 -0.3961 +vn -0.6100 0.0002 -0.7924 +vn -0.6100 -0.6862 -0.3962 +vn 0.2114 0.6857 0.6965 +vn 0.2113 -0.6857 0.6965 +vn 0.3431 -0.6857 0.6419 +vn 0.3431 0.6857 0.6419 +vn 0.0712 0.6857 0.7244 +vn 0.0715 -0.6857 0.7244 +vn -0.0714 0.6857 0.7244 +vn -0.0712 -0.6857 0.7244 +vn -0.2114 0.6857 0.6965 +vn -0.2114 -0.6857 0.6965 +vn -0.3432 0.6857 0.6419 +vn -0.3430 -0.6857 0.6420 +vn -0.4617 0.6857 0.5626 +vn -0.4617 -0.6857 0.5626 +vn -0.5627 0.6857 0.4617 +vn -0.5627 -0.6857 0.4617 +vn -0.6421 0.6857 0.3428 +vn -0.6419 -0.6857 0.3431 +vn -0.6965 0.6857 0.2113 +vn -0.6965 -0.6857 0.2113 +vn -0.7244 0.6857 0.0710 +vn -0.7244 -0.6857 0.0713 +vn -0.7244 0.6857 -0.0714 +vn -0.7244 -0.6857 -0.0713 +vn -0.6965 0.6857 -0.2113 +vn -0.6965 -0.6857 -0.2113 +vn -0.6419 0.6857 -0.3431 +vn -0.6419 -0.6857 -0.3431 +vn -0.5628 0.6857 -0.4616 +vn -0.5628 -0.6857 -0.4616 +vn -0.4617 0.6857 -0.5626 +vn -0.4617 -0.6857 -0.5626 +vn -0.3430 0.6857 -0.6420 +vn -0.3432 -0.6857 -0.6419 +vn -0.2113 0.6857 -0.6965 +vn -0.2113 -0.6857 -0.6965 +vn -0.0713 0.6857 -0.7244 +vn -0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn 0.0713 -0.6857 -0.7244 +vn 0.2112 0.6857 -0.6966 +vn 0.2114 -0.6857 -0.6965 +vn 0.4616 0.6857 -0.5628 +vn 0.4618 -0.6857 -0.5625 +vn 0.3431 -0.6857 -0.6419 +vn 0.3431 0.6857 -0.6419 +vn 0.5626 0.6857 -0.4617 +vn 0.5626 -0.6857 -0.4617 +vn 0.6419 0.6857 -0.3431 +vn 0.6419 -0.6857 -0.3431 +vn 0.6965 0.6857 -0.2113 +vn 0.6965 -0.6857 -0.2113 +vn 0.7244 0.6857 -0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.6965 0.6857 0.2113 +vn 0.6966 -0.6857 0.2112 +vn 0.7244 -0.6857 0.0713 +vn 0.7244 0.6857 0.0713 +vn 0.6419 0.6857 0.3431 +vn 0.6419 -0.6857 0.3431 +vn 0.5627 0.6857 0.4617 +vn 0.5628 -0.6857 0.4616 +vn 0.8614 0.2147 -0.4604 +vn 0.8767 0.1087 -0.4686 +vn 0.9513 0.1087 -0.2886 +vn 0.9346 0.2147 -0.2835 +vn 0.9720 0.2147 -0.0957 +vn 0.9893 0.1087 -0.0974 +vn 0.9720 0.2147 0.0957 +vn 0.9893 0.1087 0.0974 +vn 0.9346 0.2147 0.2835 +vn 0.9513 0.1087 0.2886 +vn 0.8614 0.2147 0.4604 +vn 0.8767 0.1087 0.4686 +vn 0.7550 0.2147 0.6196 +vn 0.6196 0.2147 0.7550 +vn 0.4604 0.2147 0.8614 +vn 0.4686 0.1087 0.8767 +vn 0.2835 0.2147 0.9346 +vn 0.2886 0.1087 0.9513 +vn 0.0957 0.2147 0.9720 +vn 0.0974 0.1087 0.9893 +vn -0.0974 0.1087 0.9893 +vn -0.0957 0.2147 0.9720 +vn -0.2886 0.1087 0.9513 +vn -0.2835 0.2147 0.9346 +vn -0.4604 0.2147 0.8614 +vn -0.4686 0.1087 0.8767 +vn -0.6306 0.1087 0.7684 +vn -0.6196 0.2147 0.7550 +vn -0.7684 0.1087 0.6306 +vn -0.7550 0.2147 0.6196 +vn -0.8614 0.2147 0.4604 +vn -0.8767 0.1087 0.4686 +vn -0.9513 0.1087 0.2886 +vn -0.9346 0.2147 0.2835 +vn -0.9720 0.2147 0.0957 +vn -0.9893 0.1087 0.0974 +vn -0.9893 0.1087 -0.0974 +vn -0.9720 0.2147 -0.0957 +vn -0.9346 0.2147 -0.2835 +vn -0.9513 0.1087 -0.2886 +vn -0.8767 0.1087 -0.4686 +vn -0.8614 0.2147 -0.4604 +vn -0.7684 0.1087 -0.6306 +vn -0.7550 0.2147 -0.6196 +vn -0.6306 0.1087 -0.7684 +vn -0.6196 0.2147 -0.7550 +vn -0.4686 0.1087 -0.8767 +vn -0.4604 0.2147 -0.8614 +vn -0.2886 0.1087 -0.9513 +vn -0.2835 0.2147 -0.9346 +vn -0.0974 0.1087 -0.9893 +vn -0.0957 0.2147 -0.9720 +vn 0.2835 0.2147 -0.9346 +vn 0.0957 0.2147 -0.9720 +vn 0.0974 0.1087 -0.9893 +vn 0.2886 0.1087 -0.9513 +vn 0.6196 0.2147 -0.7550 +vn 0.4604 0.2147 -0.8614 +vn 0.4686 0.1087 -0.8767 +vn 0.6306 0.1087 -0.7684 +vn 0.7550 0.2147 -0.6196 +vn 0.7684 0.1087 -0.6306 +vn 0.0957 -0.2147 0.9720 +vn 0.0974 -0.1087 0.9893 +vn 0.2886 -0.1087 0.9513 +vn 0.2835 -0.2147 0.9346 +vn -0.0957 -0.2147 0.9720 +vn -0.0974 -0.1087 0.9893 +vn -0.2835 -0.2147 0.9346 +vn -0.2886 -0.1087 0.9513 +vn 0.7684 -0.1087 0.6306 +vn 0.8767 -0.1087 0.4686 +vn 0.4604 -0.2147 0.8614 +vn -0.4604 -0.2147 0.8614 +vn -0.4686 -0.1087 0.8767 +vn -0.7684 -0.1087 0.6306 +vn -0.8767 -0.1087 0.4686 +vn 0.9513 -0.1087 0.2886 +vn 0.6196 -0.2147 0.7550 +vn -0.6196 -0.2147 0.7550 +vn -0.6306 -0.1087 0.7684 +vn -0.9513 -0.1087 0.2886 +vn 0.9893 -0.1087 0.0974 +vn 0.7550 -0.2147 0.6196 +vn -0.5626 -0.6857 0.4617 +vn -0.5626 0.6857 0.4617 +vn -0.6419 0.6857 0.3431 +vn -0.7244 0.6857 0.0713 +vn -0.7244 0.6857 -0.0713 +vn -0.7550 -0.2147 0.6196 +vn -0.4618 -0.6857 0.5625 +vn -0.4616 0.6857 0.5628 +vn 0.8614 -0.2147 0.4604 +vn -0.6965 0.6857 -0.2114 +vn -0.8614 -0.2147 0.4604 +vn -0.3431 -0.6857 0.6419 +vn -0.3431 0.6857 0.6419 +vn -0.9893 -0.1087 0.0974 +vn -0.9893 -0.1087 -0.0974 +vn 0.9513 -0.1087 -0.2886 +vn 0.9893 -0.1087 -0.0974 +vn 0.9346 -0.2147 0.2835 +vn -0.2112 0.6857 0.6966 +vn -0.9346 -0.2147 0.2835 +vn 0.0713 -0.6857 0.7244 +vn 0.0713 0.6857 0.7244 +vn -0.0713 0.6857 0.7244 +vn -0.0713 -0.6857 0.7244 +vn 0.9720 -0.2147 0.0957 +vn -0.9720 -0.2147 0.0957 +vn 0.2113 0.6857 0.6965 +vn -0.9513 -0.1087 -0.2886 +vn -0.8767 -0.1087 -0.4686 +vn 0.7684 -0.1087 -0.6306 +vn 0.8767 -0.1087 -0.4686 +vn 0.9720 -0.2147 -0.0957 +vn -0.5625 -0.6857 -0.4618 +vn -0.9720 -0.2147 -0.0957 +vn 0.4616 -0.6858 0.5627 +vn 0.4617 0.6857 0.5627 +vn 0.3432 -0.6857 0.6419 +vn 0.3430 0.6857 0.6420 +vn -0.7684 -0.1087 -0.6306 +vn 0.7793 0.4431 -0.4431 +vn 0.6306 -0.1087 -0.7684 +vn 0.9346 -0.2147 -0.2835 +vn -0.9346 -0.2147 -0.2835 +vn 0.4616 -0.6857 0.5628 +vn 0.4616 0.6857 0.5628 +vn 0.8614 -0.2147 -0.4604 +vn -0.8614 -0.2147 -0.4604 +vn 0.5626 -0.6858 0.4617 +vn 0.5626 0.6858 0.4617 +vn 0.7550 -0.2147 -0.6196 +vn -0.2112 -0.6857 -0.6966 +vn -0.2114 0.6857 -0.6965 +vn -0.7550 -0.2147 -0.6196 +vn -0.4139 0.6437 -0.6437 +vn -0.6267 0.5510 -0.5510 +vn -0.4686 -0.1087 -0.8767 +vn -0.2886 -0.1087 -0.9513 +vn 0.4139 0.6437 -0.6437 +vn 0.1458 0.6995 -0.6995 +vn 0.0974 -0.1087 -0.9893 +vn 0.2886 -0.1087 -0.9513 +vn 0.6196 -0.2147 -0.7550 +vn -0.6196 -0.2147 -0.7550 +vn -0.6306 -0.1087 -0.7684 +vn -0.1458 0.6995 -0.6995 +vn -0.0974 -0.1087 -0.9893 +vn 0.4604 -0.2147 -0.8614 +vn 0.4686 -0.1087 -0.8767 +vn 0.2115 -0.6857 -0.6965 +vn -0.4604 -0.2147 -0.8614 +vn 0.6966 -0.6857 0.2111 +vn 0.6964 0.6857 0.2116 +vn 0.2835 -0.2147 -0.9346 +vn 0.3432 0.6857 -0.6419 +vn 0.3430 -0.6857 -0.6420 +vn -0.2835 -0.2147 -0.9346 +vn 0.0957 -0.2147 -0.9720 +vn 0.4617 0.6857 -0.5626 +vn 0.4617 -0.6857 -0.5626 +vn -0.0957 -0.2147 -0.9720 +vn 0.5625 0.6857 -0.4618 +vn 0.5626 -0.6857 -0.4618 +vn -0.3032 -0.6100 -0.7321 +vn -0.3827 0.0000 -0.9239 +vn 0.6088 0.0000 -0.7934 +vn 0.4824 -0.6100 -0.6287 +vn -0.7856 -0.6100 -0.1034 +vn -0.9914 0.0000 -0.1305 +vn 0.9914 0.0000 0.1306 +vn 0.7856 -0.6100 0.1035 +vn 0.3827 0.0000 0.9239 +vn 0.3032 -0.6100 0.7321 +vn -0.6087 0.0000 0.7934 +vn -0.4825 -0.6100 0.6286 +vn 0.3032 0.6100 0.7321 +vn 0.3826 0.0000 0.9239 +vn 0.9914 -0.0000 0.1305 +vn 0.7856 0.6100 0.1034 +vn -0.4824 0.6100 0.6287 +vn -0.6088 0.0000 0.7933 +vn 0.6087 -0.0000 -0.7934 +vn 0.4824 0.6100 -0.6286 +vn -0.3032 0.6100 -0.7321 +vn -0.7856 0.6100 -0.1034 +vn -0.7321 -0.6100 -0.3032 +vn -0.9239 0.0000 -0.3827 +vn -0.1305 0.0000 -0.9914 +vn -0.1034 -0.6100 -0.7856 +vn -0.6287 -0.6100 0.4824 +vn -0.7934 0.0000 0.6088 +vn 0.7934 0.0000 -0.6087 +vn 0.6287 -0.6100 -0.4824 +vn 0.9239 0.0000 0.3827 +vn 0.7321 -0.6100 0.3032 +vn 0.1306 0.0000 0.9914 +vn 0.1035 -0.6100 0.7856 +vn 0.7321 0.6100 0.3031 +vn 0.6287 0.6100 -0.4823 +vn 0.1034 0.6100 0.7856 +vn 0.1305 0.0000 0.9914 +vn -0.1034 0.6100 -0.7856 +vn -0.7321 0.6100 -0.3032 +vn -0.7934 0.0000 0.6087 +vn -0.6286 0.6100 0.4825 +vn -0.7321 -0.6100 0.3032 +vn -0.9239 0.0000 0.3827 +vn -0.7934 -0.0000 -0.6088 +vn -0.6287 -0.6100 -0.4824 +vn -0.1034 -0.6100 0.7856 +vn -0.1305 0.0000 0.9914 +vn 0.1305 0.0000 -0.9914 +vn 0.1034 -0.6100 -0.7856 +vn 0.9239 0.0000 -0.3827 +vn 0.7320 -0.6100 -0.3033 +vn 0.7934 0.0000 0.6087 +vn 0.6286 -0.6100 0.4824 +vn 0.7321 0.6100 -0.3032 +vn 0.1033 0.6100 -0.7856 +vn 0.6287 0.6100 0.4824 +vn -0.7934 0.0000 -0.6087 +vn -0.6286 0.6100 -0.4824 +vn -0.7321 0.6100 0.3032 +vn -0.1033 0.6100 0.7856 +vn -0.3031 -0.6100 0.7322 +vn -0.3827 0.0000 0.9239 +vn -0.9914 -0.0000 0.1305 +vn -0.7856 -0.6100 0.1034 +vn 0.4824 -0.6100 0.6287 +vn 0.6087 0.0000 0.7934 +vn -0.6087 -0.0000 -0.7934 +vn -0.4824 -0.6100 -0.6287 +vn 0.3827 0.0000 -0.9239 +vn 0.3032 -0.6100 -0.7321 +vn 0.9914 0.0000 -0.1305 +vn 0.7856 -0.6100 -0.1034 +vn 0.3032 0.6100 -0.7321 +vn -0.4823 0.6100 -0.6287 +vn 0.7856 0.6100 -0.1034 +vn 0.9914 0.0000 -0.1306 +vn -0.7856 0.6100 0.1034 +vn -0.3032 0.6100 0.7321 +vn 0.6088 0.0000 0.7934 +vn 0.4825 0.6100 0.6286 +vn -0.4824 -0.6100 0.6287 +vn 0.7856 -0.6100 0.1034 +vn -0.7857 -0.6100 -0.1033 +vn -0.3033 -0.6100 -0.7321 +vn 0.4825 0.6100 -0.6286 +vn -0.4824 0.6100 0.6286 +vn 0.3030 0.6100 0.7322 +vn 0.1033 -0.6100 0.7856 +vn 0.7934 0.0000 -0.6088 +vn -0.1306 0.0000 -0.9914 +vn -0.7321 0.6100 -0.3031 +vn -0.6287 0.6100 0.4823 +vn 0.1035 0.6100 0.7856 +vn 0.7321 0.6100 0.3032 +vn 0.6287 0.6100 -0.4824 +vn 0.7321 -0.6100 -0.3032 +vn 0.7933 0.0001 0.6088 +vn 0.6287 -0.6100 0.4823 +vn 0.1033 -0.6100 -0.7856 +vn -0.1306 0.0000 0.9914 +vn -0.1034 0.6100 0.7856 +vn -0.6288 0.6100 -0.4822 +vn 0.6286 0.6100 0.4824 +vn 0.7321 0.6100 -0.3033 +vn 0.1306 0.0000 -0.9914 +vn 0.1034 0.6100 -0.7856 +vn 0.3826 0.0000 -0.9239 +vn -0.4823 -0.6100 -0.6288 +vn -0.6088 0.0000 -0.7933 +vn -0.3031 -0.6100 0.7321 +vn -0.7856 -0.6100 0.1035 +vn -0.3034 0.6100 0.7320 +vn 0.4824 0.6100 0.6287 +vn -0.7793 -0.4431 -0.4431 +vn -0.6267 -0.5510 -0.5510 +vn -0.4140 -0.6437 -0.6437 +vn -0.1458 -0.6996 -0.6995 +vn 0.1458 -0.6996 -0.6995 +vn 0.4139 -0.6437 -0.6437 +vn 0.6267 -0.5510 -0.5510 +vn 0.7793 -0.4431 -0.4431 +vn -0.7793 0.4431 -0.4431 +vn 0.6267 0.5510 -0.5510 +vn -0.5604 -0.6100 -0.5602 +vn -0.7071 0.0000 -0.7071 +vn 0.2588 0.0000 -0.9659 +vn 0.2051 -0.6100 -0.7654 +vn -0.7654 -0.6100 0.2051 +vn -0.9659 0.0000 0.2588 +vn 0.9659 0.0000 -0.2588 +vn 0.7654 -0.6100 -0.2050 +vn 0.7071 0.0000 0.7071 +vn 0.5604 -0.6100 0.5602 +vn -0.2588 0.0000 0.9659 +vn -0.2052 -0.6100 0.7654 +vn 0.5604 0.6100 0.5602 +vn 0.7654 0.6100 -0.2049 +vn -0.2051 0.6100 0.7654 +vn 0.2051 0.6100 -0.7654 +vn -0.5603 0.6100 -0.5603 +vn -0.7654 0.6100 0.2051 +vn -0.7924 -0.6100 0.0001 +vn -0.5000 0.0000 -0.8660 +vn -0.3963 -0.6100 -0.6862 +vn -0.3962 -0.6100 0.6862 +vn -0.5000 0.0000 0.8660 +vn 0.5000 0.0000 -0.8660 +vn 0.3961 -0.6100 -0.6863 +vn 0.7924 -0.6100 -0.0001 +vn 0.5000 0.0000 0.8660 +vn 0.3962 -0.6100 0.6862 +vn 0.7924 0.6100 -0.0001 +vn 0.3962 0.6100 -0.6862 +vn 0.3963 0.6100 0.6861 +vn -0.3962 0.6100 -0.6862 +vn -0.7924 0.6100 -0.0001 +vn -0.3961 0.6100 0.6863 +vn -0.5602 -0.6100 0.5604 +vn -0.7071 0.0000 0.7071 +vn -0.9659 0.0000 -0.2588 +vn -0.7654 -0.6100 -0.2051 +vn 0.2051 -0.6100 0.7654 +vn 0.2588 0.0000 0.9659 +vn -0.2588 0.0000 -0.9659 +vn -0.2050 -0.6100 -0.7654 +vn 0.7071 0.0000 -0.7071 +vn 0.5602 -0.6100 -0.5604 +vn 0.9659 0.0000 0.2588 +vn 0.7654 -0.6100 0.2051 +vn 0.5604 0.6100 -0.5602 +vn -0.2051 0.6100 -0.7654 +vn 0.7654 0.6100 0.2050 +vn -0.7654 0.6100 -0.2051 +vn -0.5602 0.6100 0.5604 +vn 0.2051 0.6100 0.7654 +vn -0.0000 -0.6100 0.7924 +vn -0.8660 -0.0000 0.5000 +vn -0.6862 -0.6100 0.3962 +vn 0.6863 -0.6100 0.3961 +vn 0.8660 -0.0000 0.5000 +vn -0.8660 -0.0000 -0.5000 +vn -0.6862 -0.6100 -0.3962 +vn 0.0001 -0.6100 -0.7924 +vn 0.8660 -0.0000 -0.5000 +vn 0.6862 -0.6100 -0.3962 +vn -0.0000 0.6100 -0.7924 +vn -0.6862 0.6100 -0.3962 +vn 0.6863 0.6100 -0.3961 +vn -0.6862 0.6100 0.3962 +vn 0.0000 0.6100 0.7924 +vn 0.6862 0.6100 0.3963 +vn -0.2051 -0.6100 0.7654 +vn 0.2052 -0.6100 -0.7654 +vn -0.5604 0.6100 -0.5602 +vn -0.7654 0.6100 0.2049 +vn 0.5602 0.6100 0.5604 +vn 0.7654 0.6100 -0.2051 +vn 0.3963 -0.6100 0.6862 +vn 0.3962 -0.6100 -0.6862 +vn -0.3961 -0.6100 0.6863 +vn -0.3962 -0.6100 -0.6862 +vn -0.7924 0.6100 0.0001 +vn -0.3962 0.6100 0.6862 +vn -0.3963 0.6100 -0.6861 +vn 0.3962 0.6100 0.6862 +vn 0.7924 0.6100 0.0001 +vn 0.3961 0.6100 -0.6863 +vn 0.7654 -0.6100 0.2052 +vn -0.2051 -0.6100 -0.7654 +vn 0.2050 -0.6100 0.7654 +vn -0.7654 -0.6100 -0.2052 +vn 0.7654 0.6100 0.2051 +vn 0.5602 0.6100 -0.5604 +vn -0.2052 0.6100 -0.7654 +vn 0.0000 -0.6100 -0.7924 +vn -0.6862 -0.6100 -0.3963 +vn -0.0002 -0.6100 0.7924 +vn -0.6862 -0.6100 0.3963 +vn -0.0001 0.6100 0.7924 +vn 0.6862 0.6100 0.3962 +vn -0.6863 0.6100 0.3961 +vn 0.6862 0.6100 -0.3962 +vn 0.0003 0.6100 -0.7924 +vn 0.2110 -0.6966 0.6857 +vn 0.2116 -0.6964 -0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.3432 -0.6419 0.6857 +vn 0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn -0.2114 -0.6965 0.6857 +vn -0.2114 -0.6965 -0.6857 +vn -0.3431 -0.6419 0.6857 +vn -0.3431 -0.6419 -0.6857 +vn -0.4618 -0.5625 0.6857 +vn -0.4618 -0.5625 -0.6857 +vn -0.5627 -0.4617 0.6857 +vn -0.5627 -0.4617 -0.6857 +vn -0.6421 -0.3428 0.6857 +vn -0.6419 -0.3432 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.7244 -0.0711 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.7244 0.0716 0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.6965 0.2113 -0.6857 +vn -0.6418 0.3433 0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.5628 0.4616 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.4616 0.5628 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.2114 0.6965 -0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn 0.0713 0.7244 -0.6857 +vn 0.2112 0.6966 0.6857 +vn 0.2114 0.6965 -0.6857 +vn 0.4616 0.5628 0.6857 +vn 0.4617 0.5626 -0.6857 +vn 0.3431 0.6419 -0.6857 +vn 0.3431 0.6419 0.6857 +vn 0.5626 0.4617 0.6857 +vn 0.5626 0.4617 -0.6857 +vn 0.6420 0.3430 0.6857 +vn 0.6419 0.3431 -0.6857 +vn 0.6965 0.2114 0.6857 +vn 0.6965 0.2114 -0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn 0.6966 -0.2112 0.6857 +vn 0.6965 -0.2115 -0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.6419 -0.3432 0.6857 +vn 0.6420 -0.3430 -0.6857 +vn 0.5627 -0.4617 0.6857 +vn 0.5628 -0.4616 -0.6857 +vn 0.8614 0.4604 0.2147 +vn 0.8767 0.4686 0.1087 +vn 0.9513 0.2886 0.1087 +vn 0.9346 0.2835 0.2147 +vn 0.9720 0.0957 0.2147 +vn 0.9893 0.0974 0.1087 +vn 0.9720 -0.0957 0.2147 +vn 0.9893 -0.0974 0.1087 +vn 0.9346 -0.2835 0.2147 +vn 0.9513 -0.2886 0.1087 +vn 0.8614 -0.4604 0.2147 +vn 0.8767 -0.4686 0.1087 +vn 0.7550 -0.6196 0.2147 +vn 0.7684 -0.6306 0.1087 +vn 0.6306 -0.7684 0.1087 +vn 0.6196 -0.7550 0.2147 +vn 0.4604 -0.8614 0.2147 +vn 0.4686 -0.8767 0.1087 +vn 0.2835 -0.9346 0.2147 +vn 0.2886 -0.9513 0.1087 +vn 0.0957 -0.9720 0.2147 +vn 0.0974 -0.9893 0.1087 +vn -0.0974 -0.9893 0.1087 +vn -0.0957 -0.9720 0.2147 +vn -0.2886 -0.9513 0.1087 +vn -0.2835 -0.9346 0.2147 +vn -0.4604 -0.8614 0.2147 +vn -0.4686 -0.8767 0.1087 +vn -0.6306 -0.7684 0.1087 +vn -0.6196 -0.7550 0.2147 +vn -0.7684 -0.6306 0.1087 +vn -0.7550 -0.6196 0.2147 +vn -0.8614 -0.4604 0.2147 +vn -0.8767 -0.4686 0.1087 +vn -0.9513 -0.2886 0.1087 +vn -0.9346 -0.2835 0.2147 +vn -0.9720 -0.0957 0.2147 +vn -0.9893 -0.0974 0.1087 +vn -0.9893 0.0974 0.1087 +vn -0.9720 0.0957 0.2147 +vn -0.9346 0.2835 0.2147 +vn -0.9513 0.2886 0.1087 +vn -0.8767 0.4686 0.1087 +vn -0.8614 0.4604 0.2147 +vn -0.7684 0.6306 0.1087 +vn -0.7550 0.6196 0.2147 +vn -0.6306 0.7684 0.1087 +vn -0.6196 0.7550 0.2147 +vn -0.4686 0.8767 0.1087 +vn -0.4604 0.8614 0.2147 +vn -0.2886 0.9513 0.1087 +vn -0.2835 0.9346 0.2147 +vn -0.0974 0.9893 0.1087 +vn -0.0957 0.9720 0.2147 +vn 0.2835 0.9346 0.2147 +vn 0.0957 0.9720 0.2147 +vn 0.0974 0.9893 0.1087 +vn 0.2886 0.9513 0.1087 +vn 0.6196 0.7550 0.2147 +vn 0.4604 0.8614 0.2147 +vn 0.4686 0.8767 0.1087 +vn 0.6306 0.7684 0.1087 +vn 0.7550 0.6196 0.2147 +vn 0.7684 0.6306 0.1087 +vn 0.4618 -0.5625 -0.6858 +vn 0.4617 -0.5626 0.6857 +vn 0.3030 -0.7322 0.6100 +vn 0.3826 -0.9239 0.0000 +vn 0.9914 -0.1305 -0.0000 +vn 0.7856 -0.1034 0.6100 +vn -0.4825 -0.6286 0.6100 +vn -0.6088 -0.7933 0.0000 +vn 0.6087 0.7934 -0.0000 +vn 0.4824 0.6287 0.6100 +vn -0.3827 0.9239 0.0000 +vn -0.3032 0.7321 0.6100 +vn -0.9914 0.1305 0.0000 +vn -0.7856 0.1034 0.6100 +vn 0.7320 -0.3034 0.6100 +vn 0.9239 -0.3827 -0.0000 +vn 0.7934 0.6087 -0.0000 +vn 0.6288 0.4822 0.6100 +vn 0.1035 -0.7856 0.6100 +vn 0.1305 -0.9914 -0.0000 +vn -0.1305 0.9914 0.0000 +vn -0.1035 0.7856 0.6100 +vn -0.9239 0.3827 0.0000 +vn -0.7321 0.3032 0.6100 +vn -0.7934 -0.6087 0.0000 +vn -0.6288 -0.4823 0.6100 +vn 0.7321 0.3032 0.6100 +vn 0.9239 0.3827 -0.0000 +vn 0.1305 0.9914 -0.0000 +vn 0.1033 0.7857 0.6100 +vn 0.6286 -0.4825 0.6100 +vn 0.7934 -0.6087 -0.0000 +vn -0.7934 0.6087 0.0000 +vn -0.6286 0.4824 0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.7322 -0.3030 0.6100 +vn -0.1305 -0.9914 0.0000 +vn -0.1034 -0.7856 0.6100 +vn 0.3032 0.7321 0.6100 +vn 0.3827 0.9239 0.0000 +vn -0.6087 0.7934 0.0000 +vn -0.4822 0.6288 0.6100 +vn 0.7856 0.1033 0.6100 +vn 0.9914 0.1306 0.0000 +vn -0.9914 -0.1305 0.0000 +vn -0.7856 -0.1034 0.6100 +vn -0.3827 -0.9239 0.0000 +vn -0.3033 -0.7321 0.6100 +vn 0.6088 -0.7934 -0.0000 +vn 0.4825 -0.6286 0.6100 +vn -0.3031 0.7321 0.6100 +vn -0.6087 -0.7934 0.0000 +vn -0.4824 -0.6286 0.6100 +vn 0.3827 -0.9239 -0.0000 +vn 0.3032 -0.7321 0.6100 +vn -0.7321 0.3033 0.6100 +vn -0.7934 -0.6088 0.0000 +vn -0.6287 -0.4824 0.6100 +vn -0.1034 0.7856 0.6100 +vn 0.1306 -0.9914 -0.0000 +vn 0.1033 -0.7856 0.6100 +vn 0.7321 -0.3033 0.6100 +vn 0.6288 0.4823 0.6100 +vn -0.7321 -0.3032 0.6100 +vn -0.6287 0.4824 0.6100 +vn -0.7934 0.6088 0.0000 +vn 0.6287 -0.4823 0.6100 +vn 0.1306 0.9914 0.0000 +vn 0.1035 0.7856 0.6100 +vn -0.3032 -0.7321 0.6100 +vn 0.4823 -0.6287 0.6100 +vn 0.7856 0.1034 0.6100 +vn 0.5602 -0.5604 0.6100 +vn 0.7071 -0.7071 -0.0000 +vn 0.9659 0.2588 -0.0000 +vn 0.7654 0.2051 0.6100 +vn -0.2051 -0.7654 0.6100 +vn -0.2588 -0.9659 0.0000 +vn 0.2588 0.9659 -0.0000 +vn 0.2052 0.7654 0.6100 +vn -0.7071 0.7071 0.0000 +vn -0.5603 0.5603 0.6100 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 0.6100 +vn 0.7924 0.0000 0.6100 +vn 0.5000 0.8660 0.0000 +vn 0.3962 0.6862 0.6100 +vn 0.3961 -0.6863 0.6100 +vn 0.5000 -0.8660 -0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.3962 0.6862 0.6100 +vn -0.7924 -0.0000 0.6100 +vn -0.5000 -0.8660 0.0000 +vn -0.3964 -0.6861 0.6100 +vn 0.5603 0.5603 0.6100 +vn 0.7071 0.7071 -0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.2048 0.7655 0.6100 +vn 0.7654 -0.2051 0.6100 +vn 0.9659 -0.2588 -0.0000 +vn -0.9659 0.2588 0.0000 +vn -0.7654 0.2052 0.6100 +vn -0.7071 -0.7071 0.0000 +vn -0.5604 -0.5602 0.6100 +vn 0.2588 -0.9659 -0.0000 +vn 0.2051 -0.7654 0.6100 +vn -0.0000 0.7924 0.6100 +vn -0.8660 0.5000 0.0000 +vn -0.6862 0.3963 0.6100 +vn 0.6862 0.3962 0.6100 +vn 0.8660 0.5000 -0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.6863 -0.3960 0.6100 +vn -0.0002 -0.7924 0.6100 +vn 0.8660 -0.5000 -0.0000 +vn 0.6862 -0.3962 0.6100 +vn -0.5602 0.5604 0.6100 +vn 0.2051 0.7654 0.6100 +vn -0.2052 -0.7654 0.6100 +vn 0.5603 -0.5603 0.6100 +vn -0.3962 -0.6862 0.6100 +vn -0.3960 0.6863 0.6100 +vn 0.3962 -0.6862 0.6100 +vn 0.3963 0.6861 0.6100 +vn -0.5603 -0.5603 0.6100 +vn 0.2049 -0.7654 0.6100 +vn -0.7654 0.2051 0.6100 +vn 0.7654 -0.2050 0.6100 +vn 0.5604 0.5602 0.6100 +vn -0.2051 0.7654 0.6100 +vn 0.6862 -0.3963 0.6100 +vn -0.6863 -0.3961 0.6100 +vn 0.6863 0.3961 0.6100 +vn -0.6862 0.3962 0.6100 +g Pipe_Cylinder.002_None_Pipe_Cylinder.002_None_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 +f 7/7/2 8/8/2 9/9/2 10/10/2 11/11/2 12/12/2 +f 13/13/1 14/14/1 15/15/1 16/16/1 17/17/1 18/18/1 +f 19/19/2 20/20/2 21/21/2 22/22/2 23/23/2 24/24/2 +f 25/25/1 26/26/1 27/27/1 28/28/1 29/29/1 30/30/1 +f 31/31/2 32/32/2 33/33/2 34/34/2 35/35/2 36/36/2 +f 37/37/1 38/38/1 39/39/1 40/40/1 41/41/1 42/42/1 +f 43/43/2 44/44/2 45/45/2 46/46/2 47/47/2 48/48/2 +f 49/49/1 50/50/1 51/51/1 52/52/1 53/53/1 54/54/1 +f 55/55/2 56/56/2 57/57/2 58/58/2 59/59/2 60/60/2 +f 61/61/1 62/62/1 63/63/1 64/64/1 65/65/1 66/66/1 +f 67/67/2 68/68/2 69/69/2 70/70/2 71/71/2 72/72/2 +f 73/73/1 74/74/1 75/75/1 76/76/1 77/77/1 78/78/1 +f 79/79/2 80/80/2 81/81/2 82/82/2 83/83/2 84/84/2 +f 85/85/1 86/86/1 87/87/1 88/88/1 89/89/1 90/90/1 +f 91/91/2 92/92/2 93/93/2 94/94/2 95/95/2 96/96/2 +f 97/97/2 98/98/2 99/99/2 100/100/2 101/101/2 102/102/2 103/103/2 104/104/2 105/105/2 106/106/2 107/107/2 108/108/2 109/109/2 110/110/2 111/111/2 112/112/2 113/113/2 114/114/2 115/115/2 116/116/2 117/117/2 118/118/2 119/119/2 120/120/2 121/121/2 122/122/2 123/123/2 124/124/2 125/125/2 126/126/2 127/127/2 128/128/2 +f 129/129/1 130/130/1 131/131/1 132/132/1 133/133/1 134/134/1 135/135/1 136/136/1 137/137/1 138/138/1 139/139/1 140/140/1 141/141/1 142/142/1 143/143/1 144/144/1 145/145/1 146/146/1 147/147/1 148/148/1 149/149/1 150/150/1 151/151/1 152/152/1 153/153/1 154/154/1 155/155/1 156/156/1 157/157/1 158/158/1 159/159/1 160/160/1 +f 161/161/1 162/162/1 163/163/1 164/164/1 165/165/1 166/166/1 167/167/1 168/168/1 169/169/1 170/170/1 171/171/1 172/172/1 173/173/1 174/174/1 175/175/1 176/176/1 177/177/1 178/178/1 179/179/1 180/180/1 181/181/1 182/182/1 183/183/1 184/184/1 185/185/1 186/186/1 187/187/1 188/188/1 189/189/1 190/190/1 191/191/1 192/192/1 +f 193/193/2 194/194/2 195/195/2 196/196/2 197/197/2 198/198/2 199/199/2 200/200/2 201/201/2 202/202/2 203/203/2 204/204/2 205/205/2 206/206/2 207/207/2 208/208/2 209/209/2 210/210/2 211/211/2 212/212/2 213/213/2 214/214/2 215/215/2 216/216/2 217/217/2 218/218/2 219/219/2 220/220/2 221/221/2 222/222/2 223/223/2 224/224/2 +f 225/225/1 226/226/1 227/227/1 228/228/1 229/229/1 230/230/1 +f 231/231/2 232/232/2 233/233/2 234/234/2 235/235/2 236/236/2 +f 237/237/1 238/238/1 239/239/1 240/240/1 241/241/1 242/242/1 +f 243/243/2 244/244/2 245/245/2 246/246/2 247/247/2 248/248/2 +f 249/249/1 250/250/1 251/251/1 252/252/1 253/253/1 254/254/1 +f 255/255/2 256/256/2 257/257/2 258/258/2 259/259/2 260/260/2 +f 261/261/1 262/262/1 263/263/1 264/264/1 265/265/1 266/266/1 +f 267/267/2 268/268/2 269/269/2 270/270/2 271/271/2 272/272/2 +f 273/273/1 274/274/1 275/275/1 276/276/1 277/277/1 278/278/1 +f 279/279/2 280/280/2 281/281/2 282/282/2 283/283/2 284/284/2 +f 285/285/1 286/286/1 287/287/1 288/288/1 289/289/1 290/290/1 +f 291/291/2 292/292/2 293/293/2 294/294/2 295/295/2 296/296/2 +f 297/297/1 298/298/1 299/299/1 300/300/1 301/301/1 302/302/1 +f 303/303/2 304/304/2 305/305/2 306/306/2 307/307/2 308/308/2 +f 309/309/1 310/310/1 311/311/1 312/312/1 313/313/1 314/314/1 +f 315/315/2 316/316/2 317/317/2 318/318/2 319/319/2 320/320/2 +f 321/321/3 322/322/3 323/323/3 324/324/3 325/325/3 326/326/3 +f 327/327/4 328/328/4 329/329/4 330/330/4 331/331/4 332/332/4 +f 333/333/3 334/334/3 335/335/3 336/336/3 337/337/3 338/338/3 +f 339/339/4 340/340/4 341/341/4 342/342/4 343/343/4 344/344/4 +f 345/345/3 346/346/3 347/347/3 348/348/3 349/349/3 350/350/3 +f 351/351/4 352/352/4 353/353/4 354/354/4 355/355/4 356/356/4 +f 357/357/3 358/358/3 359/359/3 360/360/3 361/361/3 362/362/3 +f 363/363/4 364/364/4 365/365/4 366/366/4 367/367/4 368/368/4 +f 369/369/3 370/370/3 371/371/3 372/372/3 373/373/3 374/374/3 +f 375/375/4 376/376/4 377/377/4 378/378/4 379/379/4 380/380/4 +f 381/381/3 382/382/3 383/383/3 384/384/3 385/385/3 386/386/3 +f 387/387/4 388/388/4 389/389/4 390/390/4 391/391/4 392/392/4 +f 393/393/3 394/394/3 395/395/3 396/396/3 397/397/3 398/398/3 +f 399/399/4 400/400/4 401/401/4 402/402/4 403/403/4 404/404/4 +f 405/405/3 406/406/3 407/407/3 408/408/3 409/409/3 410/410/3 +f 411/411/4 412/412/4 413/413/4 414/414/4 415/415/4 416/416/4 +f 417/417/4 418/418/4 419/419/4 420/420/4 421/421/4 422/422/4 423/423/4 424/424/4 425/425/4 426/426/4 427/427/4 428/428/4 429/429/4 430/430/4 431/431/4 432/432/4 433/433/4 434/434/4 435/435/4 436/436/4 437/437/4 438/438/4 439/439/4 440/440/4 441/441/4 442/442/4 443/443/4 444/444/4 445/445/4 446/446/4 447/447/4 448/448/4 +f 449/449/3 450/450/3 451/451/3 452/452/3 453/453/3 454/454/3 455/455/3 456/456/3 457/457/3 458/458/3 459/459/3 460/460/3 461/461/3 462/462/3 463/463/3 464/464/3 465/465/3 466/466/3 467/467/3 468/468/3 469/469/3 470/470/3 471/471/3 472/472/3 473/473/3 474/474/3 475/475/3 476/476/3 477/477/3 478/478/3 479/479/3 480/480/3 +f 481/481/3 482/482/3 483/483/3 484/484/3 485/485/3 486/486/3 487/487/3 488/488/3 489/489/3 490/490/3 491/491/3 492/492/3 493/493/3 494/494/3 495/495/3 496/496/3 497/497/3 498/498/3 499/499/3 500/500/3 501/501/3 502/502/3 503/503/3 504/504/3 505/505/3 506/506/3 507/507/3 508/508/3 509/509/3 510/510/3 511/511/3 512/512/3 +f 513/513/4 514/514/4 515/515/4 516/516/4 517/517/4 518/518/4 519/519/4 520/520/4 521/521/4 522/522/4 523/523/4 524/524/4 525/525/4 526/526/4 527/527/4 528/528/4 529/529/4 530/530/4 531/531/4 532/532/4 533/533/4 534/534/4 535/535/4 536/536/4 537/537/4 538/538/4 539/539/4 540/540/4 541/541/4 542/542/4 543/543/4 544/544/4 +f 545/545/3 546/546/3 547/547/3 548/548/3 549/549/3 550/550/3 +f 551/551/4 552/552/4 553/553/4 554/554/4 555/555/4 556/556/4 +f 557/557/3 558/558/3 559/559/3 560/560/3 561/561/3 562/562/3 +f 563/563/4 564/564/4 565/565/4 566/566/4 567/567/4 568/568/4 +f 569/569/3 570/570/3 571/571/3 572/572/3 573/573/3 574/574/3 +f 575/575/4 576/576/4 577/577/4 578/578/4 579/579/4 580/580/4 +f 581/581/3 582/582/3 583/583/3 584/584/3 585/585/3 586/586/3 +f 587/587/4 588/588/4 589/589/4 590/590/4 591/591/4 592/592/4 +f 593/593/3 594/594/3 595/595/3 596/596/3 597/597/3 598/598/3 +f 599/599/4 600/600/4 601/601/4 602/602/4 603/603/4 604/604/4 +f 605/605/3 606/606/3 607/607/3 608/608/3 609/609/3 610/610/3 +f 611/611/4 612/612/4 613/613/4 614/614/4 615/615/4 616/616/4 +f 617/617/3 618/618/3 619/619/3 620/620/3 621/621/3 622/622/3 +f 623/623/4 624/624/4 625/625/4 626/626/4 627/627/4 628/628/4 +f 629/629/3 630/630/3 631/631/3 632/632/3 633/633/3 634/634/3 +f 635/635/4 636/636/4 637/637/4 638/638/4 639/639/4 640/640/4 +f 641/641/5 642/642/5 643/643/5 644/644/5 645/645/5 646/646/5 +f 647/647/5 648/648/5 649/649/5 650/650/5 651/651/5 652/652/5 +f 653/653/5 654/654/5 655/655/5 656/656/5 657/657/5 658/658/5 +f 659/659/5 660/660/5 661/661/5 662/662/5 663/663/5 664/664/5 +f 665/665/5 666/666/5 667/667/5 668/668/5 669/669/5 670/670/5 +f 671/671/5 672/672/5 673/673/5 674/674/5 675/675/5 676/676/5 +f 677/677/5 678/678/5 679/679/5 680/680/5 681/681/5 682/682/5 +f 683/683/5 684/684/5 685/685/5 686/686/5 687/687/5 688/688/5 +f 689/689/5 690/690/5 691/691/5 692/692/5 693/693/5 694/694/5 695/695/5 696/696/5 697/697/5 698/698/5 699/699/5 700/700/5 701/701/5 702/702/5 703/703/5 704/704/5 705/705/5 706/706/5 707/707/5 708/708/5 709/709/5 710/710/5 711/711/5 712/712/5 713/713/5 714/714/5 715/715/5 716/716/5 717/717/5 718/718/5 719/719/5 720/720/5 +f 721/721/6 722/722/6 723/723/6 724/724/6 725/725/6 726/726/6 727/727/6 728/728/6 729/729/6 730/730/6 731/731/6 732/732/6 733/733/6 734/734/6 735/735/6 736/736/6 737/737/6 738/738/6 739/739/6 740/740/6 741/741/6 742/742/6 743/743/6 744/744/6 745/745/6 746/746/6 747/747/6 748/748/6 749/749/6 750/750/6 751/751/6 752/752/6 +f 753/753/5 754/754/5 755/755/5 756/756/5 757/757/5 758/758/5 +f 759/759/5 760/760/5 761/761/5 762/762/5 763/763/5 764/764/5 +f 765/765/5 766/766/5 767/767/5 768/768/5 769/769/5 770/770/5 +f 771/771/5 772/772/5 773/773/5 774/774/5 775/775/5 776/776/5 +f 777/777/5 778/778/5 779/779/5 780/780/5 781/781/5 782/782/5 +f 783/783/5 784/784/5 785/785/5 786/786/5 787/787/5 788/788/5 +f 789/789/5 790/790/5 791/791/5 792/792/5 793/793/5 794/794/5 +f 795/795/5 796/796/5 797/797/5 798/798/5 799/799/5 800/800/5 +s 1 +f 127/801/7 150/802/8 149/803/9 128/804/10 +f 126/805/11 151/806/12 150/802/8 127/801/7 +f 125/807/13 152/808/14 151/806/12 126/805/11 +f 124/809/15 153/810/16 152/808/14 125/807/13 +f 123/811/17 154/812/18 153/810/16 124/809/15 +f 122/813/19 155/814/20 154/812/18 123/811/17 +f 121/815/21 156/816/22 155/814/20 122/813/19 +f 120/817/23 157/818/24 156/816/22 121/815/21 +f 119/819/25 158/820/26 157/818/24 120/817/23 +f 118/821/27 159/822/28 158/820/26 119/819/25 +f 117/823/29 160/824/30 159/822/28 118/821/27 +f 116/825/31 129/826/32 160/824/30 117/823/29 +f 115/827/33 130/828/34 129/826/32 116/825/31 +f 114/829/35 131/830/36 130/831/34 115/827/33 +f 113/832/37 132/833/38 131/830/36 114/829/35 +f 112/834/39 133/835/40 132/833/38 113/832/37 +f 111/836/41 134/837/42 133/838/40 112/839/39 +f 110/840/43 135/841/44 134/837/42 111/836/41 +f 109/842/45 136/843/46 135/841/44 110/840/43 +f 108/844/47 137/845/48 136/843/46 109/842/45 +f 106/846/49 139/847/50 138/848/51 107/849/52 +f 107/849/52 138/848/51 137/845/48 108/844/47 +f 105/850/53 140/851/54 139/847/50 106/846/49 +f 104/852/55 141/853/56 140/851/54 105/850/53 +f 103/854/57 142/855/58 141/853/56 104/852/55 +f 102/856/59 143/857/60 142/855/58 103/854/57 +f 100/858/61 145/859/62 144/860/63 101/861/64 +f 101/861/64 144/860/63 143/857/60 102/856/59 +f 99/862/65 146/863/66 145/859/62 100/858/61 +f 98/864/67 147/865/68 146/863/66 99/862/65 +f 801/866/69 802/867/70 803/868/71 804/869/72 +f 805/870/73 804/869/72 803/868/71 806/871/74 +f 807/872/75 805/870/73 806/871/74 808/873/76 +f 809/874/77 807/872/75 808/873/76 810/875/78 +f 811/876/79 809/874/77 810/875/78 812/877/80 +f 813/878/81 811/876/79 812/877/80 814/879/82 +f 813/878/81 814/879/82 815/880/83 816/881/84 +f 817/882/85 816/881/84 815/880/83 818/883/86 +f 819/884/87 817/882/85 818/883/86 820/885/88 +f 821/886/89 819/884/87 820/885/88 822/887/90 +f 821/886/89 822/887/90 823/888/91 824/889/92 +f 824/889/92 823/888/91 825/890/93 826/891/94 +f 827/892/95 828/893/96 829/894/97 830/895/98 +f 826/891/94 825/890/93 828/893/96 827/892/95 +f 830/895/98 829/894/97 831/896/99 832/897/100 +f 833/898/101 832/897/100 831/896/99 834/899/102 +f 833/898/101 834/899/102 835/900/103 836/901/104 +f 837/902/105 836/901/104 835/900/103 838/903/106 +f 837/904/105 838/905/106 839/906/107 840/907/108 +f 841/908/109 840/907/108 839/906/107 842/909/110 +f 841/908/109 842/909/110 843/910/111 844/911/112 +f 844/911/112 843/910/111 845/912/113 846/913/114 +f 846/913/114 845/912/113 847/914/115 848/915/116 +f 848/915/116 847/914/115 849/916/117 850/917/118 +f 850/917/118 849/916/117 851/918/119 852/919/120 +f 852/919/120 851/918/119 853/920/121 854/921/122 +f 855/922/123 856/923/124 857/924/125 858/925/126 +f 856/923/124 854/921/122 853/920/121 857/924/125 +f 859/926/127 860/927/128 861/928/129 862/929/130 +f 855/922/123 858/925/126 861/928/129 860/927/128 +f 863/930/131 859/926/127 862/929/130 864/931/132 +f 863/930/131 864/931/132 802/867/70 801/866/69 +f 865/932/133 822/887/90 820/885/88 866/933/134 +f 867/934/135 825/890/93 823/888/91 868/935/136 +f 866/933/134 820/885/88 818/883/86 869/936/137 +f 870/937/138 828/893/96 825/890/93 867/934/135 +f 869/936/137 818/883/86 815/880/83 871/938/139 +f 872/939/140 829/894/97 828/893/96 870/937/138 +f 873/940/141 871/938/139 815/880/83 814/879/82 +f 874/941/142 875/942/143 876/943/144 877/944/145 +f 878/945/146 879/946/147 875/942/143 874/941/142 +f 880/947/148 881/948/149 879/946/147 878/945/146 +f 882/949/150 883/950/151 884/951/152 885/952/153 +f 885/952/153 884/951/152 886/953/154 887/954/155 +f 877/944/145 876/943/144 888/955/156 889/956/157 +f 890/957/158 891/958/159 881/948/149 880/947/148 +f 892/959/160 893/960/161 894/961/162 895/962/163 +f 887/954/155 886/953/154 896/963/164 897/964/165 +f 898/965/166 889/956/157 888/955/156 882/949/150 +f 899/966/167 900/967/168 891/958/159 890/957/158 +f 901/968/169 892/959/160 895/962/163 902/969/170 +f 897/964/165 896/963/164 903/970/171 904/971/172 +f 905/972/173 898/965/166 882/949/150 885/952/153 +f 189/973/174 194/974/175 193/975/176 190/976/24 +f 192/977/28 223/978/27 222/979/29 161/980/30 +f 906/981/177 894/961/162 900/967/168 899/966/167 +f 188/982/178 195/983/19 194/974/175 189/973/174 +f 907/984/179 905/972/173 885/952/153 887/954/155 +f 161/980/30 222/979/29 221/985/31 162/986/32 +f 908/987/180 895/962/163 894/961/162 906/981/177 +f 187/988/181 196/989/17 195/983/19 188/982/178 +f 909/990/182 910/991/183 911/992/184 912/993/185 +f 913/994/186 914/995/187 915/996/188 916/997/189 +f 917/998/190 907/984/179 887/954/155 897/964/165 +f 186/999/16 197/1000/15 196/989/17 187/988/181 +f 918/1001/191 902/969/170 895/962/163 908/987/180 +f 184/1002/12 199/1003/11 198/1004/13 185/1005/14 +f 919/1006/192 917/998/190 897/964/165 904/971/172 +f 162/986/32 221/985/31 220/1007/33 163/1008/34 +f 920/1009/193 911/1010/184 902/969/170 918/1001/191 +f 183/1011/8 200/1012/7 199/1003/11 184/1002/12 +f 921/1013/194 922/1014/195 923/1015/196 924/1016/197 +f 925/1017/198 926/1018/199 927/1019/200 928/1020/201 +f 929/1021/202 919/1006/192 904/971/172 916/997/189 +f 163/1008/34 220/1007/33 219/1022/203 164/1023/204 +f 930/1024/205 912/993/185 911/992/184 920/1025/193 +f 128/804/10 149/803/9 148/1026/206 97/1027/207 +f 182/1028/208 201/1029/209 200/1012/7 183/1011/8 +f 931/1030/210 921/1013/194 924/1016/197 932/1031/211 +f 927/1019/200 926/1018/199 933/1032/212 934/1033/213 935/1034/214 +f 936/1035/215 929/1021/202 916/997/189 915/996/188 +f 164/1023/204 219/1022/203 218/1036/37 165/1037/38 +f 937/1038/216 923/1015/196 912/993/185 930/1024/205 +f 181/1039/217 202/1040/207 201/1029/209 182/1028/208 +f 938/1041/218 936/1035/215 915/996/188 928/1020/201 +f 165/1037/38 218/1036/37 217/1042/219 166/1043/40 +f 939/1044/220 924/1016/197 923/1015/196 937/1038/216 +f 180/1045/221 203/1046/222 202/1040/207 181/1039/217 +f 940/1047/223 938/1041/218 928/1020/201 927/1019/200 +f 167/1048/42 216/1049/41 215/1050/43 168/1051/44 +f 939/1044/220 941/1052/224 932/1031/211 924/1016/197 +f 166/1043/40 217/1042/219 216/1053/41 167/1054/42 +f 942/1055/225 943/1056/226 944/1057/227 945/1058/228 +f 946/1059/229 947/1060/230 948/1061/231 949/1062/232 +f 950/1063/233 940/1047/223 927/1019/200 935/1034/214 +f 168/1051/44 215/1050/43 214/1064/45 169/1065/46 +f 190/976/24 193/975/176 224/1066/234 191/1067/235 +f 951/1068/236 952/1069/237 932/1031/211 941/1052/224 +f 179/1070/238 204/1071/239 203/1046/222 180/1045/221 +f 953/1072/240 942/1055/225 945/1058/228 954/1073/241 +f 948/1061/231 947/1060/230 953/1072/240 954/1073/241 +f 955/1074/242 950/1063/233 935/1034/214 956/1075/243 +f 169/1065/46 214/1064/45 213/1076/244 170/1077/245 +f 951/1068/236 957/1078/246 944/1057/227 952/1069/237 +f 178/1079/62 205/1080/61 204/1071/239 179/1070/238 +f 958/1081/247 955/1074/242 956/1075/243 949/1062/232 +f 170/1077/245 213/1082/244 212/1083/248 171/1084/51 +f 957/1078/246 959/1085/249 945/1058/228 944/1057/227 +f 177/1086/250 206/1087/64 205/1080/61 178/1079/62 +f 185/1005/14 198/1004/13 197/1000/15 186/999/16 +f 960/1088/251 958/1081/247 949/1062/232 948/1061/231 +f 171/1084/51 212/1083/248 211/1089/252 172/1090/253 +f 959/1085/249 961/1091/254 954/1073/241 945/1058/228 +f 176/1092/60 207/1093/59 206/1087/64 177/1086/250 +f 961/1091/254 960/1088/251 948/1061/231 954/1073/241 +f 191/1067/235 224/1066/234 223/978/27 192/977/28 +f 175/1094/255 208/1095/256 207/1093/59 176/1092/60 +f 172/1090/253 211/1089/252 210/1096/53 173/1097/257 +f 174/1098/56 209/1099/55 208/1095/256 175/1094/255 +f 173/1097/257 210/1096/53 209/1099/55 174/1098/56 +f 1/1100/258 962/1101/259 963/1102/260 2/1103/261 +f 6/1104/262 964/1105/263 962/1101/259 1/1100/258 +f 2/1103/261 963/1102/260 965/1106/264 3/1107/265 +f 3/1107/265 965/1106/264 966/1108/266 4/1109/267 +f 4/1110/267 966/1111/266 967/1112/268 5/1113/269 +f 5/1113/269 967/1112/268 964/1105/263 6/1104/262 +f 7/1114/270 968/1115/266 969/1116/271 8/1117/272 +f 12/1118/273 970/1119/274 968/1115/266 7/1114/270 +f 8/1117/272 969/1116/271 971/1120/275 9/1121/276 +f 9/1121/276 971/1120/275 972/1122/259 10/1123/277 +f 10/1124/277 972/1125/259 973/1126/278 11/1127/279 +f 11/1127/279 973/1126/278 970/1119/274 12/1118/273 +f 13/1128/280 974/1129/281 975/1130/282 14/1131/283 +f 18/1132/284 976/1133/285 974/1129/281 13/1128/280 +f 14/1131/283 975/1130/282 977/1134/286 15/1135/287 +f 15/1135/287 977/1134/286 978/1136/288 16/1137/289 +f 16/1138/289 978/1139/288 979/1140/290 17/1141/291 +f 17/1141/291 979/1140/290 976/1133/285 18/1132/284 +f 19/1142/292 980/1143/288 981/1144/286 20/1145/293 +f 24/1146/294 982/1147/290 980/1143/288 19/1142/292 +f 20/1145/293 981/1144/286 983/1148/282 21/1149/295 +f 21/1149/295 983/1148/282 984/1150/296 22/1151/297 +f 22/1152/297 984/1153/296 985/1154/298 23/1155/299 +f 23/1155/299 985/1154/298 982/1147/290 24/1146/294 +f 25/1156/300 986/1157/301 987/1158/302 26/1159/303 +f 30/1160/304 988/1161/305 986/1157/301 25/1156/300 +f 26/1159/303 987/1158/302 989/1162/306 27/1163/307 +f 27/1163/307 989/1162/306 990/1164/308 28/1165/309 +f 28/1166/309 990/1167/308 991/1168/310 29/1169/311 +f 29/1169/311 991/1168/310 988/1161/305 30/1160/304 +f 31/1170/312 992/1171/308 993/1172/313 32/1173/314 +f 36/1174/315 994/1175/316 992/1171/308 31/1170/312 +f 32/1173/314 993/1172/313 995/1176/317 33/1177/318 +f 33/1177/318 995/1176/317 996/1178/301 34/1179/319 +f 34/1180/319 996/1181/301 997/1182/320 35/1183/321 +f 35/1183/321 997/1182/320 994/1175/316 36/1174/315 +f 37/1184/322 998/1185/323 999/1186/324 38/1187/325 +f 42/1188/326 1000/1189/327 998/1185/323 37/1184/322 +f 38/1187/325 999/1186/324 1001/1190/328 39/1191/329 +f 39/1191/329 1001/1190/328 1002/1192/330 40/1193/331 +f 40/1194/331 1002/1195/330 1003/1196/332 41/1197/333 +f 41/1197/333 1003/1196/332 1000/1189/327 42/1188/326 +f 43/1198/334 1004/1199/330 1005/1200/328 44/1201/335 +f 48/1202/336 1006/1203/337 1004/1199/330 43/1198/334 +f 44/1201/335 1005/1200/328 1007/1204/324 45/1205/338 +f 45/1205/338 1007/1204/324 1008/1206/323 46/1207/339 +f 46/1208/339 1008/1209/323 1009/1210/340 47/1211/341 +f 47/1211/341 1009/1210/340 1006/1203/337 48/1202/336 +f 49/1212/267 1010/1213/266 1011/1214/274 50/1215/342 +f 54/1216/265 1012/1217/271 1010/1213/266 49/1212/267 +f 50/1215/342 1011/1214/274 1013/1218/278 51/1219/343 +f 51/1219/343 1013/1218/278 1014/1220/259 52/1221/344 +f 52/1222/344 1014/1223/259 1015/1224/275 53/1225/261 +f 53/1225/261 1015/1224/275 1012/1217/271 54/1216/265 +f 55/1226/345 1016/1227/259 1017/1228/263 56/1229/346 +f 60/1230/347 1018/1231/275 1016/1227/259 55/1226/345 +f 56/1229/346 1017/1228/263 1019/1232/268 57/1233/273 +f 57/1233/273 1019/1232/268 1020/1234/266 58/1235/348 +f 58/1236/348 1020/1237/266 1021/1238/271 59/1239/349 +f 59/1239/349 1021/1238/271 1018/1231/275 60/1230/347 +f 61/1240/350 1022/1241/288 1023/1242/290 62/1243/351 +f 66/1244/352 1024/1245/353 1022/1241/288 61/1240/350 +f 62/1243/351 1023/1242/290 1025/1246/298 63/1247/284 +f 63/1247/284 1025/1246/298 1026/1248/296 64/1249/280 +f 64/1250/280 1026/1251/296 1027/1252/354 65/1253/283 +f 65/1253/283 1027/1252/354 1024/1245/353 66/1244/352 +f 67/1254/355 1028/1255/296 1029/1256/356 68/1257/357 +f 72/1258/295 1030/1259/282 1028/1255/296 67/1254/355 +f 68/1257/357 1029/1256/356 1031/1260/358 69/1261/294 +f 69/1261/294 1031/1260/358 1032/1262/288 70/1263/359 +f 70/1264/359 1032/1265/288 1033/1266/286 71/1267/360 +f 71/1267/360 1033/1266/286 1030/1259/282 72/1258/295 +f 73/1268/309 1034/1269/308 1035/1270/316 74/1271/311 +f 78/1272/361 1036/1273/313 1034/1269/308 73/1268/309 +f 74/1271/311 1035/1270/316 1037/1274/320 75/1275/304 +f 75/1275/304 1037/1274/320 1038/1276/301 76/1277/300 +f 76/1278/300 1038/1279/301 1039/1280/317 77/1281/303 +f 77/1281/303 1039/1280/317 1036/1273/313 78/1272/361 +f 79/1282/362 1040/1283/301 1041/1284/305 80/1285/363 +f 84/1286/364 1042/1287/317 1040/1283/301 79/1282/362 +f 80/1285/363 1041/1284/305 1043/1288/310 81/1289/365 +f 81/1289/365 1043/1288/310 1044/1290/308 82/1291/312 +f 82/1292/312 1044/1293/308 1045/1294/313 83/1295/314 +f 83/1295/314 1045/1294/313 1042/1287/317 84/1286/364 +f 85/1296/331 1046/1297/330 1047/1298/337 86/1299/333 +f 90/1300/366 1048/1301/367 1046/1297/330 85/1296/331 +f 86/1299/333 1047/1298/337 1049/1302/340 87/1303/326 +f 87/1303/326 1049/1302/340 1050/1304/323 88/1305/322 +f 88/1306/322 1050/1307/323 1051/1308/368 89/1309/369 +f 89/1309/369 1051/1308/368 1048/1301/367 90/1300/366 +f 91/1310/370 1052/1311/323 1053/1312/340 92/1313/371 +f 96/1314/372 1054/1315/324 1052/1311/323 91/1310/370 +f 92/1313/371 1053/1312/340 1055/1316/337 93/1317/373 +f 93/1317/373 1055/1316/337 1056/1318/330 94/1319/374 +f 94/1320/374 1056/1321/330 1057/1322/328 95/1323/375 +f 95/1323/375 1057/1322/328 1054/1315/324 96/1314/372 +f 891/958/159 1058/1324/376 1059/1325/377 881/948/149 +f 900/967/168 1060/1326/378 1058/1324/376 891/958/159 +f 1061/1327/379 872/1328/140 1062/1329/380 1063/1330/381 +f 871/1331/139 1064/1332/382 1065/1333/383 869/1334/137 +f 879/946/147 1066/1335/384 868/935/136 823/888/91 822/887/90 865/932/133 1067/1336/385 875/942/143 +f 872/939/140 1061/1337/379 831/896/99 829/894/97 +f 97/1027/207 148/1026/206 147/865/68 98/864/67 +f 1068/1338/386 1069/1339/387 803/868/71 802/867/70 +f 1069/1339/387 1070/1340/388 806/871/74 803/868/71 +f 1070/1340/388 1071/1341/389 808/873/76 806/871/74 +f 1071/1341/389 1072/1342/390 810/875/78 808/873/76 +f 1072/1342/390 1073/1343/391 812/877/80 810/875/78 +f 1073/1343/391 873/940/141 814/879/82 812/877/80 +f 1074/1344/392 888/955/156 876/943/144 1075/1345/393 +f 1075/1345/393 876/943/144 875/942/143 1067/1336/385 +f 881/948/149 1059/1325/377 1066/1335/384 879/946/147 +f 1061/1337/379 1076/1346/394 834/899/102 831/896/99 +f 1076/1346/394 1077/1347/395 835/900/103 834/899/102 +f 1077/1347/395 1078/1348/396 838/903/106 835/900/103 +f 1078/1349/396 1079/1350/397 839/906/107 838/905/106 +f 1079/1350/397 1080/1351/398 842/909/110 839/906/107 +f 1080/1351/398 1081/1352/399 843/910/111 842/909/110 +f 1081/1352/399 1082/1353/400 845/912/113 843/910/111 +f 1082/1353/400 1083/1354/401 1084/1355/402 847/914/115 845/912/113 +f 1084/1355/402 1085/1356/403 849/916/117 847/914/115 +f 1085/1356/403 1086/1357/404 851/918/119 849/916/117 +f 1086/1357/404 1087/1358/405 853/920/121 851/918/119 +f 1088/1359/406 1089/1360/407 858/925/126 857/924/125 +f 1087/1358/405 1088/1359/406 857/924/125 853/920/121 +f 1090/1361/408 1091/1362/409 862/929/130 861/928/129 +f 1089/1360/407 1090/1361/408 861/928/129 858/925/126 +f 1091/1362/409 1092/1363/410 1093/1364/411 864/931/132 862/929/130 +f 864/931/132 1093/1364/411 1068/1338/386 802/867/70 +f 910/1365/183 901/968/169 902/969/170 911/1010/184 +f 903/970/171 913/994/186 916/997/189 904/971/172 +f 922/1014/195 909/990/182 912/993/185 923/1015/196 +f 914/995/187 925/1017/198 928/1020/201 915/996/188 +f 1094/1366/412 1095/1367/413 931/1030/210 932/1031/211 952/1069/237 +f 934/1033/213 1096/1368/414 956/1075/243 935/1034/214 +f 943/1056/226 1094/1366/412 952/1069/237 944/1057/227 +f 1096/1368/414 946/1059/229 949/1062/232 956/1075/243 +f 225/1369/415 1097/1370/416 1098/1371/417 226/1372/418 +f 230/1373/419 1099/1374/420 1097/1370/416 225/1369/415 +f 226/1372/418 1098/1371/417 1100/1375/421 227/1376/422 +f 227/1376/422 1100/1375/421 1101/1377/423 228/1378/424 +f 228/1379/424 1101/1380/423 1102/1381/425 229/1382/426 +f 229/1382/426 1102/1381/425 1099/1374/420 230/1373/419 +f 231/1383/427 1103/1384/423 1104/1385/421 232/1386/428 +f 236/1387/429 1105/1388/425 1103/1384/423 231/1383/427 +f 232/1386/428 1104/1385/421 1106/1389/417 233/1390/430 +f 233/1390/430 1106/1389/417 1107/1391/416 234/1392/431 +f 234/1393/431 1107/1394/416 1108/1395/420 235/1396/432 +f 235/1396/432 1108/1395/420 1105/1388/425 236/1387/429 +f 237/1397/433 1109/1398/3 1110/1399/434 238/1400/435 +f 242/1401/436 1111/1402/437 1109/1398/3 237/1397/433 +f 238/1400/435 1110/1399/434 1112/1403/438 239/1404/439 +f 239/1404/439 1112/1403/438 1113/1405/4 240/1406/440 +f 240/1407/440 1113/1408/4 1114/1409/441 241/1410/442 +f 241/1410/442 1114/1409/441 1111/1402/437 242/1401/436 +f 243/1411/443 1115/1412/4 1116/1413/438 244/1414/444 +f 248/1415/445 1117/1416/441 1115/1412/4 243/1411/443 +f 244/1414/444 1116/1413/438 1118/1417/434 245/1418/446 +f 245/1418/446 1118/1417/434 1119/1419/3 246/1420/447 +f 246/1421/447 1119/1422/3 1120/1423/437 247/1424/448 +f 247/1424/448 1120/1423/437 1117/1416/441 248/1415/445 +f 249/1425/449 1121/1426/450 1122/1427/451 250/1428/452 +f 254/1429/453 1123/1430/454 1121/1426/450 249/1425/449 +f 250/1428/452 1122/1427/451 1124/1431/455 251/1432/456 +f 251/1432/456 1124/1431/455 1125/1433/457 252/1434/458 +f 252/1435/458 1125/1436/457 1126/1437/459 253/1438/460 +f 253/1438/460 1126/1437/459 1123/1430/454 254/1429/453 +f 255/1439/461 1127/1440/457 1128/1441/455 256/1442/462 +f 260/1443/463 1129/1444/459 1127/1440/457 255/1439/461 +f 256/1442/462 1128/1441/455 1130/1445/451 257/1446/464 +f 257/1446/464 1130/1445/451 1131/1447/450 258/1448/465 +f 258/1449/465 1131/1450/450 1132/1451/454 259/1452/466 +f 259/1452/466 1132/1451/454 1129/1444/459 260/1443/463 +f 261/1453/467 1133/1454/5 1134/1455/468 262/1456/469 +f 266/1457/470 1135/1458/471 1133/1454/5 261/1453/467 +f 262/1456/469 1134/1455/468 1136/1459/472 263/1460/473 +f 263/1460/473 1136/1459/472 1137/1461/6 264/1462/474 +f 264/1463/474 1137/1464/6 1138/1465/475 265/1466/476 +f 265/1466/476 1138/1465/475 1135/1458/471 266/1457/470 +f 267/1467/477 1139/1468/6 1140/1469/472 268/1470/478 +f 272/1471/479 1141/1472/475 1139/1468/6 267/1467/477 +f 268/1470/478 1140/1469/472 1142/1473/468 269/1474/480 +f 269/1474/480 1142/1473/468 1143/1475/5 270/1476/481 +f 270/1477/481 1143/1478/5 1144/1479/471 271/1480/482 +f 271/1480/482 1144/1479/471 1141/1472/475 272/1471/479 +f 273/1481/424 1145/1482/423 1146/1483/425 274/1484/426 +f 278/1485/422 1147/1486/421 1145/1482/423 273/1481/424 +f 274/1484/426 1146/1483/425 1148/1487/420 275/1488/483 +f 275/1488/483 1148/1487/420 1149/1489/416 276/1490/415 +f 276/1491/415 1149/1492/416 1150/1493/417 277/1494/484 +f 277/1494/484 1150/1493/417 1147/1486/421 278/1485/422 +f 279/1495/485 1151/1496/416 1152/1497/420 280/1498/432 +f 284/1499/486 1153/1500/417 1151/1496/416 279/1495/485 +f 280/1498/432 1152/1497/420 1154/1501/425 281/1502/487 +f 281/1502/487 1154/1501/425 1155/1503/423 282/1504/488 +f 282/1505/488 1155/1506/423 1156/1507/421 283/1508/428 +f 283/1508/428 1156/1507/421 1153/1500/417 284/1499/486 +f 285/1509/440 1157/1510/4 1158/1511/441 286/1512/442 +f 290/1513/489 1159/1514/438 1157/1510/4 285/1509/440 +f 286/1512/442 1158/1511/441 1160/1515/437 287/1516/436 +f 287/1516/436 1160/1515/437 1161/1517/3 288/1518/433 +f 288/1519/433 1161/1520/3 1162/1521/434 289/1522/490 +f 289/1522/490 1162/1521/434 1159/1514/438 290/1513/489 +f 291/1523/447 1163/1524/3 1164/1525/437 292/1526/491 +f 296/1527/492 1165/1528/434 1163/1524/3 291/1523/447 +f 292/1526/491 1164/1525/437 1166/1529/441 293/1530/493 +f 293/1530/493 1166/1529/441 1167/1531/4 294/1532/443 +f 294/1533/443 1167/1534/4 1168/1535/438 295/1536/494 +f 295/1536/494 1168/1535/438 1165/1528/434 296/1527/492 +f 297/1537/458 1169/1538/457 1170/1539/459 298/1540/495 +f 302/1541/456 1171/1542/455 1169/1538/457 297/1537/458 +f 298/1540/495 1170/1539/459 1172/1543/454 299/1544/496 +f 299/1544/496 1172/1543/454 1173/1545/450 300/1546/449 +f 300/1547/449 1173/1548/450 1174/1549/451 301/1550/497 +f 301/1550/497 1174/1549/451 1171/1542/455 302/1541/456 +f 303/1551/465 1175/1552/450 1176/1553/454 304/1554/498 +f 308/1555/464 1177/1556/451 1175/1552/450 303/1551/465 +f 304/1554/498 1176/1553/454 1178/1557/459 305/1558/463 +f 305/1558/463 1178/1557/459 1179/1559/457 306/1560/499 +f 306/1561/499 1179/1562/457 1180/1563/455 307/1564/462 +f 307/1564/462 1180/1563/455 1177/1556/451 308/1555/464 +f 309/1565/500 1181/1566/6 1182/1567/475 310/1568/501 +f 314/1569/502 1183/1570/472 1181/1566/6 309/1565/500 +f 310/1568/501 1182/1567/475 1184/1571/471 311/1572/470 +f 311/1572/470 1184/1571/471 1185/1573/5 312/1574/467 +f 312/1575/467 1185/1576/5 1186/1577/468 313/1578/503 +f 313/1578/503 1186/1577/468 1183/1570/472 314/1569/502 +f 315/1579/504 1187/1580/5 1188/1581/471 316/1582/505 +f 320/1583/506 1189/1584/468 1187/1580/5 315/1579/504 +f 316/1582/505 1188/1581/471 1190/1585/475 317/1586/507 +f 317/1586/507 1190/1585/475 1191/1587/6 318/1588/508 +f 318/1589/508 1191/1590/6 1192/1591/472 319/1592/509 +f 319/1592/509 1192/1591/472 1189/1584/468 320/1583/506 +f 447/1593/510 470/1594/511 469/1595/512 448/1596/513 +f 446/1597/514 471/1598/515 470/1594/511 447/1593/510 +f 445/1599/516 472/1600/517 471/1598/515 446/1597/514 +f 444/1601/518 473/1602/519 472/1600/517 445/1599/516 +f 443/1603/520 474/1604/521 473/1602/519 444/1601/518 +f 442/1605/522 475/1606/523 474/1604/521 443/1603/520 +f 441/1607/524 476/1608/525 475/1606/523 442/1605/522 +f 440/1609/526 477/1610/527 476/1608/525 441/1607/524 +f 439/1611/528 478/1612/529 477/1610/527 440/1609/526 +f 438/1613/530 479/1614/531 478/1612/529 439/1611/528 +f 437/1615/532 480/1616/533 479/1614/531 438/1613/530 +f 436/1617/534 449/1618/535 480/1616/533 437/1615/532 +f 435/1619/536 450/1620/537 449/1618/535 436/1617/534 +f 434/1621/538 451/1622/539 450/1623/537 435/1619/536 +f 433/1624/540 452/1625/541 451/1622/539 434/1621/538 +f 432/1626/542 453/1627/543 452/1625/541 433/1624/540 +f 431/1628/544 454/1629/545 453/1630/543 432/1631/542 +f 430/1632/546 455/1633/547 454/1629/545 431/1628/544 +f 429/1634/548 456/1635/549 455/1633/547 430/1632/546 +f 428/1636/550 457/1637/551 456/1635/549 429/1634/548 +f 426/1638/552 459/1639/553 458/1640/554 427/1641/555 +f 427/1641/555 458/1640/554 457/1637/551 428/1636/550 +f 425/1642/556 460/1643/557 459/1639/553 426/1638/552 +f 424/1644/558 461/1645/559 460/1643/557 425/1642/556 +f 423/1646/560 462/1647/561 461/1645/559 424/1644/558 +f 422/1648/562 463/1649/563 462/1647/561 423/1646/560 +f 420/1650/564 465/1651/565 464/1652/566 421/1653/567 +f 421/1653/567 464/1652/566 463/1649/563 422/1648/562 +f 419/1654/568 466/1655/569 465/1651/565 420/1650/564 +f 418/1656/570 467/1657/571 466/1655/569 419/1654/568 +f 1193/1658/572 1194/1659/573 1195/1660/574 1196/1661/575 +f 1197/1662/576 1196/1661/575 1195/1660/574 1198/1663/577 +f 1199/1664/578 1197/1662/576 1198/1663/577 1200/1665/579 +f 1201/1666/580 1199/1664/578 1200/1665/579 1202/1667/581 +f 1203/1668/582 1201/1666/580 1202/1667/581 1204/1669/583 +f 1205/1670/584 1203/1668/582 1204/1669/583 1063/1330/381 +f 1205/1670/584 1063/1330/381 1062/1329/380 1206/1671/585 +f 1207/1672/586 1206/1671/585 1062/1329/380 1208/1673/587 +f 1209/1674/588 1207/1672/586 1208/1673/587 1210/1675/589 +f 1211/1676/590 1209/1674/588 1210/1675/589 1212/1677/591 +f 1211/1676/590 1212/1677/591 1213/1678/592 1214/1679/593 +f 1214/1679/593 1213/1678/592 1215/1680/594 1216/1681/595 +f 1217/1682/596 1218/1683/597 1219/1684/598 1220/1685/599 +f 1216/1681/595 1215/1680/594 1218/1683/597 1217/1682/596 +f 1220/1685/599 1219/1684/598 1221/1686/600 1222/1687/601 +f 1223/1688/602 1222/1687/601 1221/1686/600 1224/1689/603 +f 1223/1688/602 1224/1689/603 1225/1690/604 1226/1691/605 +f 1227/1692/606 1226/1691/605 1225/1690/604 1228/1693/607 +f 1227/1694/606 1228/1695/607 1229/1696/608 1230/1697/609 +f 1231/1698/610 1230/1697/609 1229/1696/608 1232/1699/611 +f 1231/1698/610 1232/1699/611 1233/1700/612 1234/1701/613 +f 1234/1701/613 1233/1700/612 1235/1702/614 1236/1703/615 +f 1236/1703/615 1235/1702/614 1237/1704/616 1238/1705/617 +f 1238/1705/617 1237/1704/616 1239/1706/618 1240/1707/619 +f 1240/1707/619 1239/1706/618 1241/1708/620 1242/1709/621 +f 1242/1709/621 1241/1708/620 1243/1710/622 1244/1711/623 +f 1245/1712/624 1246/1713/625 1247/1714/626 1248/1715/627 +f 1246/1713/625 1244/1711/623 1243/1710/622 1247/1714/626 +f 1249/1716/628 1250/1717/629 1251/1718/630 1252/1719/631 +f 1245/1712/624 1248/1715/627 1251/1718/630 1250/1717/629 +f 1253/1720/632 1249/1716/628 1252/1719/631 1254/1721/633 +f 1253/1720/632 1254/1721/633 1194/1659/573 1193/1658/572 +f 868/1722/136 1212/1677/591 1210/1675/589 867/1723/135 +f 1066/1724/384 1213/1678/592 1212/1677/591 868/1722/136 +f 1059/1725/377 1215/1680/594 1213/1678/592 1066/1724/384 +f 867/1723/135 1210/1675/589 1208/1673/587 870/1726/138 +f 1058/1727/376 1218/1683/597 1215/1680/594 1059/1725/377 +f 870/1726/138 1208/1673/587 1062/1329/380 872/1328/140 +f 1060/1728/378 1219/1684/598 1218/1683/597 1058/1727/376 +f 1060/1728/378 893/1729/161 1221/1686/600 1219/1684/598 +f 1255/1730/634 1256/1731/635 1257/1732/636 1258/1733/637 +f 1259/1734/638 1260/1735/639 1256/1731/635 1255/1730/634 +f 1261/1736/640 1262/1737/641 1260/1735/639 1259/1734/638 +f 871/1331/139 873/1738/141 1263/1739/642 1064/1332/382 +f 1263/1739/642 873/1738/141 1073/1740/391 1264/1741/643 +f 1258/1733/637 1257/1732/636 1065/1333/383 1265/1742/644 +f 1266/1743/645 1267/1744/646 1262/1737/641 1261/1736/640 +f 886/1745/154 884/1746/152 1268/1747/647 1269/1748/648 +f 1264/1741/643 1073/1740/391 1072/1749/390 1270/1750/649 +f 1271/1751/650 1265/1742/644 1065/1333/383 1064/1332/382 +f 1272/1752/651 1273/1753/652 1267/1744/646 1266/1743/645 +f 896/1754/164 886/1745/154 1269/1748/648 1274/1755/653 +f 1270/1750/649 1072/1749/390 1071/1756/389 1275/1757/654 +f 1276/1758/655 1271/1751/650 1064/1332/382 1263/1739/642 +f 509/1759/656 514/1760/657 513/1761/658 510/1762/527 +f 512/1763/531 543/1764/659 542/1765/660 481/1766/533 +f 1277/1767/661 1268/1747/647 1273/1753/652 1272/1752/651 +f 508/1768/662 515/1769/663 514/1760/657 509/1759/656 +f 1278/1770/664 1276/1758/655 1263/1739/642 1264/1741/643 +f 481/1766/533 542/1765/660 541/1771/665 482/1772/535 +f 1279/1773/666 1269/1748/648 1268/1747/647 1277/1767/661 +f 507/1774/667 516/1775/668 515/1769/663 508/1768/662 +f 913/1776/186 903/1777/171 1280/1778/669 1281/1779/670 +f 1070/1780/388 1069/1781/387 1282/1782/671 1283/1783/672 +f 1284/1784/673 1278/1770/664 1264/1741/643 1270/1750/649 +f 506/1785/519 517/1786/674 516/1775/668 507/1774/667 +f 1285/1787/675 1274/1755/653 1269/1748/648 1279/1773/666 +f 504/1788/676 519/1789/677 518/1790/678 505/1791/679 +f 1286/1792/680 1284/1784/673 1270/1750/649 1275/1757/654 +f 482/1772/535 541/1771/665 540/1793/536 483/1794/537 +f 1287/1795/681 1280/1796/669 1274/1755/653 1285/1787/675 +f 503/1797/511 520/1798/682 519/1789/677 504/1788/676 +f 925/1799/198 914/1800/187 1288/1801/683 1289/1802/684 +f 1068/1803/386 1093/1804/411 1290/1805/685 1291/1806/686 +f 1292/1807/687 1286/1792/680 1275/1757/654 1283/1783/672 +f 483/1794/537 540/1793/536 539/1808/538 484/1809/688 +f 1293/1810/689 1281/1779/670 1280/1778/669 1287/1811/681 +f 448/1596/513 469/1595/512 468/1812/690 417/1813/691 +f 502/1814/692 521/1815/693 520/1798/682 503/1797/511 +f 926/1816/199 925/1799/198 1289/1802/684 1294/1817/694 +f 1290/1805/685 1093/1804/411 1092/1818/410 1295/1819/695 1296/1820/696 +f 1297/1821/697 1292/1807/687 1283/1783/672 1282/1782/671 +f 484/1809/688 539/1808/538 538/1822/540 485/1823/541 +f 1298/1824/698 1288/1801/683 1281/1779/670 1293/1810/689 +f 501/1825/699 522/1826/700 521/1815/693 502/1814/692 +f 1299/1827/701 1297/1821/697 1282/1782/671 1291/1806/686 +f 485/1823/541 538/1822/540 537/1828/542 486/1829/543 +f 1300/1830/702 1289/1802/684 1288/1801/683 1298/1824/698 +f 500/1831/703 523/1832/704 522/1826/700 501/1825/699 +f 1301/1833/705 1299/1827/701 1291/1806/686 1290/1805/685 +f 487/1834/706 536/1835/707 535/1836/546 488/1837/547 +f 1300/1830/702 1302/1838/708 1294/1817/694 1289/1802/684 +f 486/1829/543 537/1828/542 536/1839/707 487/1840/706 +f 1303/1841/709 1304/1842/710 1305/1843/711 1306/1844/712 +f 1307/1845/713 1308/1846/714 1309/1847/715 1310/1848/716 +f 1311/1849/717 1301/1833/705 1290/1805/685 1296/1820/696 +f 488/1837/547 535/1836/546 534/1850/548 489/1851/549 +f 510/1762/527 513/1761/658 544/1852/528 511/1853/529 +f 1312/1854/718 1313/1855/719 1294/1817/694 1302/1838/708 +f 499/1856/569 524/1857/568 523/1832/704 500/1831/703 +f 1314/1858/720 1303/1841/709 1306/1844/712 1315/1859/721 +f 1309/1847/715 1308/1846/714 1314/1858/720 1315/1859/721 +f 1316/1860/722 1311/1849/717 1296/1820/696 1317/1861/723 +f 489/1851/549 534/1850/548 533/1862/550 490/1863/724 +f 1312/1854/718 1318/1864/725 1305/1843/711 1313/1855/719 +f 498/1865/726 525/1866/727 524/1857/568 499/1856/569 +f 1319/1867/728 1316/1860/722 1317/1861/723 1310/1848/716 +f 490/1863/724 533/1868/550 532/1869/729 491/1870/730 +f 1318/1864/725 1320/1871/731 1306/1844/712 1305/1843/711 +f 497/1872/566 526/1873/567 525/1866/727 498/1865/726 +f 505/1791/679 518/1790/678 517/1786/674 506/1785/519 +f 1321/1874/732 1319/1867/728 1310/1848/716 1309/1847/715 +f 491/1870/730 532/1869/729 531/1875/733 492/1876/734 +f 1320/1871/731 1322/1877/735 1315/1859/721 1306/1844/712 +f 496/1878/563 527/1879/562 526/1873/567 497/1872/566 +f 1322/1877/735 1321/1874/732 1309/1847/715 1315/1859/721 +f 511/1853/529 544/1852/528 543/1764/659 512/1763/531 +f 495/1880/561 528/1881/560 527/1879/562 496/1878/563 +f 492/1876/734 531/1875/733 530/1882/736 493/1883/737 +f 494/1884/559 529/1885/558 528/1881/560 495/1880/561 +f 493/1883/737 530/1882/736 529/1885/558 494/1884/559 +f 321/1886/738 1323/1887/739 1324/1888/740 322/1889/741 +f 326/1890/742 1325/1891/743 1323/1887/739 321/1886/738 +f 322/1889/741 1324/1888/740 1326/1892/744 323/1893/745 +f 323/1893/745 1326/1892/744 1327/1894/746 324/1895/747 +f 324/1896/747 1327/1897/746 1328/1898/748 325/1899/749 +f 325/1899/749 1328/1898/748 1325/1891/743 326/1890/742 +f 327/1900/750 1329/1901/751 1330/1902/752 328/1903/753 +f 332/1904/754 1331/1905/755 1329/1901/751 327/1900/750 +f 328/1903/753 1330/1902/752 1332/1906/756 329/1907/757 +f 329/1907/757 1332/1906/756 1333/1908/739 330/1909/758 +f 330/1910/758 1333/1911/739 1334/1912/743 331/1913/759 +f 331/1913/759 1334/1912/743 1331/1905/755 332/1904/754 +f 333/1914/760 1335/1915/761 1336/1916/762 334/1917/763 +f 338/1918/764 1337/1919/765 1335/1915/761 333/1914/760 +f 334/1917/763 1336/1916/762 1338/1920/766 335/1921/767 +f 335/1921/767 1338/1920/766 1339/1922/768 336/1923/769 +f 336/1924/769 1339/1925/768 1340/1926/770 337/1927/771 +f 337/1927/771 1340/1926/770 1337/1919/765 338/1918/764 +f 339/1928/772 1341/1929/768 1342/1930/766 340/1931/773 +f 344/1932/774 1343/1933/775 1341/1929/768 339/1928/772 +f 340/1931/773 1342/1930/766 1344/1934/762 341/1935/776 +f 341/1935/776 1344/1934/762 1345/1936/761 342/1937/777 +f 342/1938/777 1345/1939/761 1346/1940/778 343/1941/779 +f 343/1941/779 1346/1940/778 1343/1933/775 344/1932/774 +f 345/1942/780 1347/1943/781 1348/1944/782 346/1945/783 +f 350/1946/784 1349/1947/785 1347/1943/781 345/1942/780 +f 346/1945/783 1348/1944/782 1350/1948/786 347/1949/787 +f 347/1949/787 1350/1948/786 1351/1950/788 348/1951/789 +f 348/1952/789 1351/1953/788 1352/1954/790 349/1955/791 +f 349/1955/791 1352/1954/790 1349/1947/785 350/1946/784 +f 351/1956/792 1353/1957/788 1354/1958/786 352/1959/793 +f 356/1960/794 1355/1961/790 1353/1957/788 351/1956/792 +f 352/1959/793 1354/1958/786 1356/1962/795 353/1963/796 +f 353/1963/796 1356/1962/795 1357/1964/781 354/1965/797 +f 354/1966/797 1357/1967/781 1358/1968/785 355/1969/798 +f 355/1969/798 1358/1968/785 1355/1961/790 356/1960/794 +f 357/1970/799 1359/1971/800 1360/1972/801 358/1973/802 +f 362/1974/803 1361/1975/804 1359/1971/800 357/1970/799 +f 358/1973/802 1360/1972/801 1362/1976/805 359/1977/806 +f 359/1977/806 1362/1976/805 1363/1978/807 360/1979/808 +f 360/1980/808 1363/1981/807 1364/1982/809 361/1983/810 +f 361/1983/810 1364/1982/809 1361/1975/804 362/1974/803 +f 363/1984/811 1365/1985/807 1366/1986/805 364/1987/812 +f 368/1988/813 1367/1989/814 1365/1985/807 363/1984/811 +f 364/1987/812 1366/1986/805 1368/1990/801 365/1991/815 +f 365/1991/815 1368/1990/801 1369/1992/800 366/1993/816 +f 366/1994/816 1369/1995/800 1370/1996/817 367/1997/818 +f 367/1997/818 1370/1996/817 1367/1989/814 368/1988/813 +f 369/1998/747 1371/1999/746 1372/2000/748 370/2001/819 +f 374/2002/820 1373/2003/752 1371/1999/746 369/1998/747 +f 370/2001/819 1372/2000/748 1374/2004/743 371/2005/821 +f 371/2005/821 1374/2004/743 1375/2006/739 372/2007/822 +f 372/2008/822 1375/2009/739 1376/2010/756 373/2011/741 +f 373/2011/741 1376/2010/756 1373/2003/752 374/2002/820 +f 375/2012/758 1377/2013/739 1378/2014/743 376/2015/759 +f 380/2016/823 1379/2017/756 1377/2013/739 375/2012/758 +f 376/2015/759 1378/2014/743 1380/2018/748 377/2019/824 +f 377/2019/824 1380/2018/748 1381/2020/746 378/2021/825 +f 378/2022/825 1381/2023/746 1382/2024/752 379/2025/753 +f 379/2025/753 1382/2024/752 1379/2017/756 380/2016/823 +f 381/2026/769 1383/2027/768 1384/2028/775 382/2029/826 +f 386/2030/767 1385/2031/827 1383/2027/768 381/2026/769 +f 382/2029/826 1384/2028/775 1386/2032/778 383/2033/764 +f 383/2033/764 1386/2032/778 1387/2034/761 384/2035/760 +f 384/2036/760 1387/2037/761 1388/2038/828 385/2039/763 +f 385/2039/763 1388/2038/828 1385/2031/827 386/2030/767 +f 387/2040/829 1389/2041/761 1390/2042/765 388/2043/830 +f 392/2044/776 1391/2045/762 1389/2041/761 387/2040/829 +f 388/2043/830 1390/2042/765 1392/2046/770 389/2047/831 +f 389/2047/831 1392/2046/770 1393/2048/768 390/2049/832 +f 390/2050/832 1393/2051/768 1394/2052/766 391/2053/833 +f 391/2053/833 1394/2052/766 1391/2045/762 392/2044/776 +f 393/2054/834 1395/2055/788 1396/2056/835 394/2057/836 +f 398/2058/837 1397/2059/786 1395/2055/788 393/2054/834 +f 394/2057/836 1396/2056/835 1398/2060/838 395/2061/784 +f 395/2061/784 1398/2060/838 1399/2062/781 396/2063/780 +f 396/2064/780 1399/2065/781 1400/2066/795 397/2067/783 +f 397/2067/783 1400/2066/795 1397/2059/786 398/2058/837 +f 399/2068/797 1401/2069/781 1402/2070/785 400/2071/839 +f 404/2072/840 1403/2073/782 1401/2069/781 399/2068/797 +f 400/2071/839 1402/2070/785 1404/2074/790 401/2075/841 +f 401/2075/841 1404/2074/790 1405/2076/788 402/2077/842 +f 402/2078/842 1405/2079/788 1406/2080/843 403/2081/844 +f 403/2081/844 1406/2080/843 1403/2073/782 404/2072/840 +f 405/2082/808 1407/2083/845 1408/2084/809 406/2085/810 +f 410/2086/846 1409/2087/847 1407/2083/845 405/2082/808 +f 406/2085/810 1408/2084/809 1410/2088/804 407/2089/803 +f 407/2089/803 1410/2088/804 1411/2090/800 408/2091/848 +f 408/2092/848 1411/2093/800 1412/2094/801 409/2095/849 +f 409/2095/849 1412/2094/801 1409/2087/847 410/2086/846 +f 411/2096/850 1413/2097/800 1414/2098/817 412/2099/851 +f 416/2100/815 1415/2101/801 1413/2097/800 411/2096/850 +f 412/2099/851 1414/2098/817 1416/2102/814 413/2103/813 +f 413/2103/813 1416/2102/814 1417/2104/807 414/2105/811 +f 414/2106/811 1417/2107/807 1418/2108/805 415/2109/812 +f 415/2109/812 1418/2108/805 1415/2101/801 416/2100/815 +f 1267/1744/646 1074/2110/392 1075/2111/393 1262/1737/641 +f 883/2112/151 1074/2110/392 1267/1744/646 1273/1753/652 +f 1060/1326/378 900/967/168 894/961/162 893/960/161 +f 883/2112/151 1273/1753/652 1268/1747/647 884/1746/152 +f 417/1813/691 468/1812/690 467/1657/571 418/1656/570 +f 1081/2113/399 1080/2114/398 1195/1660/574 1194/1659/573 +f 1080/2114/398 1079/2115/397 1198/1663/577 1195/1660/574 +f 1079/2115/397 1078/2116/396 1200/1665/579 1198/1663/577 +f 1078/2116/396 1077/2117/395 1202/1667/581 1200/1665/579 +f 1077/2117/395 1076/2118/394 1204/1669/583 1202/1667/581 +f 1076/2118/394 1061/1327/379 1063/1330/381 1204/1669/583 +f 869/1334/137 1065/1333/383 1257/1732/636 866/2119/134 +f 866/2119/134 1257/1732/636 1256/1731/635 865/2120/133 +f 1067/2121/385 865/2120/133 1256/1731/635 1260/1735/639 +f 1262/1737/641 1075/2111/393 1067/2121/385 1260/1735/639 +f 893/1729/161 892/2122/160 1224/1689/603 1221/1686/600 +f 892/2122/160 901/2123/169 1225/1690/604 1224/1689/603 +f 901/2123/169 910/2124/183 1228/1693/607 1225/1690/604 +f 910/2125/183 909/2126/182 1229/1696/608 1228/1695/607 +f 909/2126/182 922/2127/195 1232/1699/611 1229/1696/608 +f 922/2127/195 921/2128/194 1233/1700/612 1232/1699/611 +f 921/2128/194 931/2129/210 1235/1702/614 1233/1700/612 +f 931/2129/210 1095/2130/413 1419/2131/852 1237/1704/616 1235/1702/614 +f 1419/2131/852 1420/2132/853 1239/1706/618 1237/1704/616 +f 1420/2132/853 1421/2133/854 1241/1708/620 1239/1706/618 +f 1421/2133/854 1422/2134/855 1243/1710/622 1241/1708/620 +f 1423/2135/856 1424/2136/857 1248/1715/627 1247/1714/626 +f 1422/2134/855 1423/2135/856 1247/1714/626 1243/1710/622 +f 1425/2137/858 1426/2138/859 1252/1719/631 1251/1718/630 +f 1424/2136/857 1425/2137/858 1251/1718/630 1248/1715/627 +f 1426/2138/859 1083/2139/401 1082/2140/400 1254/1721/633 1252/1719/631 +f 1254/1721/633 1082/2140/400 1081/2113/399 1194/1659/573 +f 903/2141/171 896/1754/164 1274/1755/653 1280/1796/669 +f 1071/1756/389 1070/1780/388 1283/1783/672 1275/1757/654 +f 914/1800/187 913/1776/186 1281/1779/670 1288/1801/683 +f 1069/1781/387 1068/1803/386 1291/1806/686 1282/1782/671 +f 1427/2142/860 933/2143/212 926/1816/199 1294/1817/694 1313/1855/719 +f 1295/1819/695 1428/2144/861 1317/1861/723 1296/1820/696 +f 1304/1842/710 1427/2142/860 1313/1855/719 1305/1843/711 +f 1428/2144/861 1307/1845/713 1310/1848/716 1317/1861/723 +f 545/2145/862 1429/2146/863 1430/2147/864 546/2148/865 +f 550/2149/866 1431/2150/867 1429/2146/863 545/2145/862 +f 546/2148/865 1430/2147/864 1432/2151/868 547/2152/869 +f 547/2152/869 1432/2151/868 1433/2153/870 548/2154/871 +f 548/2155/871 1433/2156/870 1434/2157/872 549/2158/873 +f 549/2158/873 1434/2157/872 1431/2150/867 550/2149/866 +f 551/2159/874 1435/2160/870 1436/2161/868 552/2162/875 +f 556/2163/876 1437/2164/872 1435/2160/870 551/2159/874 +f 552/2162/875 1436/2161/868 1438/2165/864 553/2166/877 +f 553/2166/877 1438/2165/864 1439/2167/863 554/2168/878 +f 554/2169/878 1439/2170/863 1440/2171/867 555/2172/879 +f 555/2172/879 1440/2171/867 1437/2164/872 556/2163/876 +f 557/2173/880 1441/2174/2 1442/2175/881 558/2176/882 +f 562/2177/883 1443/2178/884 1441/2174/2 557/2173/880 +f 558/2176/882 1442/2175/881 1444/2179/885 559/2180/886 +f 559/2180/886 1444/2179/885 1445/2181/1 560/2182/887 +f 560/2183/887 1445/2184/1 1446/2185/888 561/2186/889 +f 561/2186/889 1446/2185/888 1443/2178/884 562/2177/883 +f 563/2187/890 1447/2188/1 1448/2189/885 564/2190/891 +f 568/2191/892 1449/2192/888 1447/2188/1 563/2187/890 +f 564/2190/891 1448/2189/885 1450/2193/881 565/2194/893 +f 565/2194/893 1450/2193/881 1451/2195/2 566/2196/894 +f 566/2197/894 1451/2198/2 1452/2199/884 567/2200/895 +f 567/2200/895 1452/2199/884 1449/2192/888 568/2191/892 +f 569/2201/896 1453/2202/897 1454/2203/898 570/2204/899 +f 574/2205/900 1455/2206/901 1453/2202/897 569/2201/896 +f 570/2204/899 1454/2203/898 1456/2207/902 571/2208/903 +f 571/2208/903 1456/2207/902 1457/2209/904 572/2210/905 +f 572/2211/905 1457/2212/904 1458/2213/906 573/2214/907 +f 573/2214/907 1458/2213/906 1455/2206/901 574/2205/900 +f 575/2215/908 1459/2216/904 1460/2217/902 576/2218/909 +f 580/2219/910 1461/2220/906 1459/2216/904 575/2215/908 +f 576/2218/909 1460/2217/902 1462/2221/898 577/2222/911 +f 577/2222/911 1462/2221/898 1463/2223/897 578/2224/912 +f 578/2225/912 1463/2226/897 1464/2227/901 579/2228/913 +f 579/2228/913 1464/2227/901 1461/2220/906 580/2219/910 +f 581/2229/914 1465/2230/5 1466/2231/915 582/2232/916 +f 586/2233/917 1467/2234/918 1465/2230/5 581/2229/914 +f 582/2232/916 1466/2231/915 1468/2235/919 583/2236/920 +f 583/2236/920 1468/2235/919 1469/2237/6 584/2238/921 +f 584/2239/921 1469/2240/6 1470/2241/922 585/2242/923 +f 585/2242/923 1470/2241/922 1467/2234/918 586/2233/917 +f 587/2243/924 1471/2244/6 1472/2245/919 588/2246/925 +f 592/2247/926 1473/2248/922 1471/2244/6 587/2243/924 +f 588/2246/925 1472/2245/919 1474/2249/915 589/2250/927 +f 589/2250/927 1474/2249/915 1475/2251/5 590/2252/928 +f 590/2253/928 1475/2254/5 1476/2255/918 591/2256/929 +f 591/2256/929 1476/2255/918 1473/2248/922 592/2247/926 +f 593/2257/871 1477/2258/870 1478/2259/872 594/2260/930 +f 598/2261/869 1479/2262/868 1477/2258/870 593/2257/871 +f 594/2260/930 1478/2259/872 1480/2263/867 595/2264/866 +f 595/2264/866 1480/2263/867 1481/2265/863 596/2266/862 +f 596/2267/862 1481/2268/863 1482/2269/864 597/2270/931 +f 597/2270/931 1482/2269/864 1479/2262/868 598/2261/869 +f 599/2271/932 1483/2272/863 1484/2273/867 600/2274/933 +f 604/2275/877 1485/2276/864 1483/2272/863 599/2271/932 +f 600/2274/933 1484/2273/867 1486/2277/872 601/2278/876 +f 601/2278/876 1486/2277/872 1487/2279/870 602/2280/934 +f 602/2281/934 1487/2282/870 1488/2283/868 603/2284/935 +f 603/2284/935 1488/2283/868 1485/2276/864 604/2275/877 +f 605/2285/887 1489/2286/1 1490/2287/888 606/2288/936 +f 610/2289/937 1491/2290/885 1489/2286/1 605/2285/887 +f 606/2288/936 1490/2287/888 1492/2291/884 607/2292/938 +f 607/2292/938 1492/2291/884 1493/2293/2 608/2294/880 +f 608/2295/880 1493/2296/2 1494/2297/881 609/2298/939 +f 609/2298/939 1494/2297/881 1491/2290/885 610/2289/937 +f 611/2299/940 1495/2300/2 1496/2301/884 612/2302/941 +f 616/2303/942 1497/2304/881 1495/2300/2 611/2299/940 +f 612/2302/941 1496/2301/884 1498/2305/888 613/2306/943 +f 613/2306/943 1498/2305/888 1499/2307/1 614/2308/944 +f 614/2309/944 1499/2310/1 1500/2311/885 615/2312/945 +f 615/2312/945 1500/2311/885 1497/2304/881 616/2303/942 +f 617/2313/905 1501/2314/904 1502/2315/906 618/2316/946 +f 622/2317/947 1503/2318/902 1501/2314/904 617/2313/905 +f 618/2316/946 1502/2315/906 1504/2319/901 619/2320/948 +f 619/2320/948 1504/2319/901 1505/2321/897 620/2322/896 +f 620/2323/896 1505/2324/897 1506/2325/898 621/2326/949 +f 621/2326/949 1506/2325/898 1503/2318/902 622/2317/947 +f 623/2327/912 1507/2328/897 1508/2329/901 624/2330/913 +f 628/2331/911 1509/2332/898 1507/2328/897 623/2327/912 +f 624/2330/913 1508/2329/901 1510/2333/906 625/2334/950 +f 625/2334/950 1510/2333/906 1511/2335/904 626/2336/951 +f 626/2337/951 1511/2338/904 1512/2339/902 627/2340/952 +f 627/2340/952 1512/2339/902 1509/2332/898 628/2331/911 +f 629/2341/953 1513/2342/6 1514/2343/922 630/2344/923 +f 634/2345/954 1515/2346/919 1513/2342/6 629/2341/953 +f 630/2344/923 1514/2343/922 1516/2347/918 631/2348/917 +f 631/2348/917 1516/2347/918 1517/2349/5 632/2350/955 +f 632/2351/955 1517/2352/5 1518/2353/915 633/2354/956 +f 633/2354/956 1518/2353/915 1515/2346/919 634/2345/954 +f 635/2355/957 1519/2356/5 1520/2357/918 636/2358/958 +f 640/2359/959 1521/2360/915 1519/2356/5 635/2355/957 +f 636/2358/958 1520/2357/918 1522/2361/922 637/2362/960 +f 637/2362/960 1522/2361/922 1523/2363/6 638/2364/961 +f 638/2365/961 1523/2366/6 1524/2367/919 639/2368/925 +f 639/2368/925 1524/2367/919 1521/2360/915 640/2359/959 +f 719/2369/962 742/2370/963 741/2371/964 720/2372/965 +f 718/2373/966 743/2374/967 742/2370/963 719/2369/962 +f 717/2375/968 744/2376/969 743/2374/967 718/2373/966 +f 716/2377/970 745/2378/971 744/2376/969 717/2375/968 +f 715/2379/972 746/2380/973 745/2378/971 716/2377/970 +f 714/2381/974 747/2382/975 746/2380/973 715/2379/972 +f 713/2383/976 748/2384/977 747/2382/975 714/2381/974 +f 712/2385/978 749/2386/979 748/2384/977 713/2383/976 +f 711/2387/980 750/2388/981 749/2386/979 712/2385/978 +f 710/2389/982 751/2390/983 750/2388/981 711/2387/980 +f 709/2391/984 752/2392/985 751/2390/983 710/2389/982 +f 708/2393/986 721/2394/987 752/2392/985 709/2391/984 +f 707/2395/988 722/2396/989 721/2394/987 708/2393/986 +f 706/2397/990 723/2398/991 722/2399/989 707/2395/988 +f 705/2400/992 724/2401/993 723/2398/991 706/2397/990 +f 704/2402/994 725/2403/995 724/2401/993 705/2400/992 +f 703/2404/996 726/2405/997 725/2406/995 704/2407/994 +f 702/2408/998 727/2409/999 726/2405/997 703/2404/996 +f 701/2410/1000 728/2411/1001 727/2409/999 702/2408/998 +f 700/2412/1002 729/2413/1003 728/2411/1001 701/2410/1000 +f 698/2414/1004 731/2415/1005 730/2416/1006 699/2417/1007 +f 699/2417/1007 730/2416/1006 729/2413/1003 700/2412/1002 +f 697/2418/1008 732/2419/1009 731/2415/1005 698/2414/1004 +f 696/2420/1010 733/2421/1011 732/2419/1009 697/2418/1008 +f 695/2422/1012 734/2423/1013 733/2421/1011 696/2420/1010 +f 694/2424/1014 735/2425/1015 734/2423/1013 695/2422/1012 +f 692/2426/1016 737/2427/1017 736/2428/1018 693/2429/1019 +f 693/2429/1019 736/2428/1018 735/2425/1015 694/2424/1014 +f 691/2430/1020 738/2431/1021 737/2427/1017 692/2426/1016 +f 690/2432/1022 739/2433/1023 738/2431/1021 691/2430/1020 +f 1525/2434/1024 1526/2435/1025 1527/2436/1026 1528/2437/1027 +f 1529/2438/1028 1528/2437/1027 1527/2436/1026 1530/2439/1029 +f 1531/2440/1030 1529/2438/1028 1530/2439/1029 1532/2441/1031 +f 1533/2442/1032 1531/2440/1030 1532/2441/1031 1534/2443/1033 +f 1535/2444/1034 1533/2442/1032 1534/2443/1033 1536/2445/1035 +f 1537/2446/1036 1535/2444/1034 1536/2445/1035 1538/2447/1037 +f 1537/2446/1036 1538/2447/1037 1539/2448/1038 1540/2449/1039 +f 1541/2450/1040 1540/2449/1039 1539/2448/1038 1542/2451/1041 +f 1543/2452/1042 1541/2450/1040 1542/2451/1041 1544/2453/1043 +f 1545/2454/1044 1543/2452/1042 1544/2453/1043 1546/2455/1045 +f 1545/2454/1044 1546/2455/1045 1547/2456/1046 1548/2457/1047 +f 1548/2457/1047 1547/2456/1046 1549/2458/1048 1550/2459/1049 +f 1551/2460/1050 1552/2461/1051 1553/2462/1052 1554/2463/1053 +f 1550/2459/1049 1549/2458/1048 1552/2461/1051 1551/2460/1050 +f 1554/2463/1053 1553/2462/1052 1555/2464/1054 1556/2465/1055 +f 1557/2466/1056 1556/2465/1055 1555/2464/1054 1558/2467/1057 +f 1557/2466/1056 1558/2467/1057 1559/2468/1058 1560/2469/1059 +f 1561/2470/1060 1560/2469/1059 1559/2468/1058 1562/2471/1061 +f 1561/2472/1060 1562/2473/1061 1563/2474/1062 1564/2475/1063 +f 1565/2476/1064 1564/2475/1063 1563/2474/1062 1566/2477/1065 +f 1565/2476/1064 1566/2477/1065 1567/2478/1066 1568/2479/1067 +f 1568/2479/1067 1567/2478/1066 1569/2480/1068 1570/2481/1069 +f 1570/2481/1069 1569/2480/1068 1571/2482/1070 1572/2483/1071 +f 1572/2483/1071 1571/2482/1070 1573/2484/1072 1574/2485/1073 +f 1574/2485/1073 1573/2484/1072 1575/2486/1074 1576/2487/1075 +f 1576/2487/1075 1575/2486/1074 1577/2488/1076 1578/2489/1077 +f 1579/2490/1078 1580/2491/1079 1581/2492/1080 1582/2493/1081 +f 1580/2491/1079 1578/2489/1077 1577/2488/1076 1581/2492/1080 +f 1583/2494/1082 1584/2495/1083 1585/2496/1084 1586/2497/1085 +f 1579/2490/1078 1582/2493/1081 1585/2496/1084 1584/2495/1083 +f 1587/2498/1086 1583/2494/1082 1586/2497/1085 1588/2499/1087 +f 1587/2498/1086 1588/2499/1087 1526/2435/1025 1525/2434/1024 +f 720/2372/965 741/2371/964 740/2500/1088 689/2501/1089 +f 641/2502/1090 1589/2503/1091 1590/2504/1092 642/2505/1093 +f 646/2506/1094 1591/2507/1095 1589/2503/1091 641/2502/1090 +f 642/2505/1093 1590/2504/1092 1592/2508/1096 643/2509/1097 +f 643/2509/1097 1592/2508/1096 1593/2510/1098 644/2511/1099 +f 644/2512/1099 1593/2513/1098 1594/2514/1100 645/2515/1101 +f 645/2515/1101 1594/2514/1100 1591/2507/1095 646/2506/1094 +f 647/2516/1102 1595/2517/1103 1596/2518/1104 648/2519/1105 +f 652/2520/1106 1597/2521/1107 1595/2517/1103 647/2516/1102 +f 648/2519/1105 1596/2518/1104 1598/2522/1108 649/2523/1109 +f 649/2523/1109 1598/2522/1108 1599/2524/1110 650/2525/1111 +f 650/2526/1111 1599/2527/1110 1600/2528/1112 651/2529/1113 +f 651/2529/1113 1600/2528/1112 1597/2521/1107 652/2520/1106 +f 653/2530/1114 1601/2531/1115 1602/2532/1116 654/2533/1117 +f 658/2534/1118 1603/2535/1119 1601/2531/1115 653/2530/1114 +f 654/2533/1117 1602/2532/1116 1604/2536/1120 655/2537/1121 +f 655/2537/1121 1604/2536/1120 1605/2538/1122 656/2539/1123 +f 656/2540/1123 1605/2541/1122 1606/2542/1124 657/2543/1125 +f 657/2543/1125 1606/2542/1124 1603/2535/1119 658/2534/1118 +f 659/2544/1126 1607/2545/1127 1608/2546/1128 660/2547/1129 +f 664/2548/1130 1609/2549/1131 1607/2545/1127 659/2544/1126 +f 660/2547/1129 1608/2546/1128 1610/2550/1132 661/2551/1133 +f 661/2551/1133 1610/2550/1132 1611/2552/1134 662/2553/1135 +f 662/2554/1135 1611/2555/1134 1612/2556/1136 663/2557/1137 +f 663/2557/1137 1612/2556/1136 1609/2549/1131 664/2548/1130 +f 665/2558/1138 1613/2559/1098 1614/2560/1100 666/2561/1101 +f 670/2562/1097 1615/2563/1096 1613/2559/1098 665/2558/1138 +f 666/2561/1101 1614/2560/1100 1616/2564/1139 667/2565/1140 +f 667/2565/1140 1616/2564/1139 1617/2566/1141 668/2567/1142 +f 668/2568/1142 1617/2569/1141 1618/2570/1092 669/2571/1093 +f 669/2571/1093 1618/2570/1092 1615/2563/1096 670/2562/1097 +f 671/2572/1143 1619/2573/1110 1620/2574/1144 672/2575/1145 +f 676/2576/1146 1621/2577/1108 1619/2573/1110 671/2572/1143 +f 672/2575/1145 1620/2574/1144 1622/2578/1147 673/2579/1148 +f 673/2579/1148 1622/2578/1147 1623/2580/1103 674/2581/1149 +f 674/2582/1149 1623/2583/1103 1624/2584/1104 675/2585/1150 +f 675/2585/1150 1624/2584/1104 1621/2577/1108 676/2576/1146 +f 677/2586/1151 1625/2587/1122 1626/2588/1124 678/2589/1125 +f 682/2590/1152 1627/2591/1153 1625/2587/1122 677/2586/1151 +f 678/2589/1125 1626/2588/1124 1628/2592/1119 679/2593/1154 +f 679/2593/1154 1628/2592/1119 1629/2594/1115 680/2595/1114 +f 680/2596/1114 1629/2597/1115 1630/2598/1155 681/2599/1156 +f 681/2599/1156 1630/2598/1155 1627/2591/1153 682/2590/1152 +f 683/2600/1157 1631/2601/1134 1632/2602/1136 684/2603/1158 +f 688/2604/1133 1633/2605/1132 1631/2601/1134 683/2600/1157 +f 684/2603/1158 1632/2602/1136 1634/2606/1131 685/2607/1159 +f 685/2607/1159 1634/2606/1131 1635/2608/1127 686/2609/1126 +f 686/2610/1126 1635/2611/1127 1636/2612/1128 687/2613/1129 +f 687/2613/1129 1636/2612/1128 1633/2605/1132 688/2604/1133 +f 689/2501/1089 740/2500/1088 739/2433/1023 690/2432/1022 +f 1090/2614/408 1089/2615/407 1527/2436/1026 1526/2435/1025 +f 1089/2615/407 1088/2616/406 1530/2439/1029 1527/2436/1026 +f 1088/2616/406 1087/2617/405 1532/2441/1031 1530/2439/1029 +f 1087/2617/405 1086/2618/404 1534/2443/1033 1532/2441/1031 +f 1086/2618/404 1085/2619/403 1536/2445/1035 1534/2443/1033 +f 1085/2619/403 1084/2620/402 1538/2447/1037 1536/2445/1035 +f 1084/2620/402 1083/2621/401 1426/2622/859 1539/2448/1038 1538/2447/1037 +f 1426/2622/859 1425/2623/858 1542/2451/1041 1539/2448/1038 +f 1425/2623/858 1424/2624/857 1544/2453/1043 1542/2451/1041 +f 1424/2624/857 1423/2625/856 1546/2455/1045 1544/2453/1043 +f 1423/2625/856 1422/2626/855 1547/2456/1046 1546/2455/1045 +f 1422/2626/855 1421/2627/854 1549/2458/1048 1547/2456/1046 +f 1420/2628/853 1419/2629/852 1553/2462/1052 1552/2461/1051 +f 1421/2627/854 1420/2628/853 1552/2461/1051 1549/2458/1048 +f 1419/2629/852 1095/2630/413 1094/2631/412 1555/2464/1054 1553/2462/1052 +f 1094/2631/412 943/2632/226 1558/2467/1057 1555/2464/1054 +f 943/2632/226 942/2633/225 1559/2468/1058 1558/2467/1057 +f 942/2633/225 953/2634/240 1562/2471/1061 1559/2468/1058 +f 953/2635/240 947/2636/230 1563/2474/1062 1562/2473/1061 +f 947/2636/230 946/2637/229 1566/2477/1065 1563/2474/1062 +f 946/2637/229 1096/2638/414 1567/2478/1066 1566/2477/1065 +f 1096/2638/414 934/2639/213 1569/2480/1068 1567/2478/1066 +f 934/2639/213 933/2640/212 1427/2641/860 1571/2482/1070 1569/2480/1068 +f 1427/2641/860 1304/2642/710 1573/2484/1072 1571/2482/1070 +f 1304/2642/710 1303/2643/709 1575/2486/1074 1573/2484/1072 +f 1303/2643/709 1314/2644/720 1577/2488/1076 1575/2486/1074 +f 1308/2645/714 1307/2646/713 1582/2493/1081 1581/2492/1080 +f 1314/2644/720 1308/2645/714 1581/2492/1080 1577/2488/1076 +f 1428/2647/861 1295/2648/695 1586/2497/1085 1585/2496/1084 +f 1307/2646/713 1428/2647/861 1585/2496/1084 1582/2493/1081 +f 1295/2648/695 1092/1363/410 1091/2649/409 1588/2499/1087 1586/2497/1085 +f 1588/2499/1087 1091/2649/409 1090/2614/408 1526/2435/1025 +f 753/2650/1160 1637/2651/1161 1638/2652/1162 754/2653/1163 +f 758/2654/1164 1639/2655/1165 1637/2651/1161 753/2650/1160 +f 754/2653/1163 1638/2652/1162 1640/2656/1166 755/2657/1167 +f 755/2657/1167 1640/2656/1166 1641/2658/1168 756/2659/1169 +f 756/2660/1169 1641/2661/1168 1642/2662/1170 757/2663/1171 +f 757/2663/1171 1642/2662/1170 1639/2655/1165 758/2654/1164 +f 759/2664/1172 1643/2665/1 1644/2666/1173 760/2667/1174 +f 764/2668/1175 1645/2669/1176 1643/2665/1 759/2664/1172 +f 760/2667/1174 1644/2666/1173 1646/2670/1177 761/2671/1178 +f 761/2671/1178 1646/2670/1177 1647/2672/2 762/2673/1179 +f 762/2674/1179 1647/2675/2 1648/2676/1180 763/2677/1181 +f 763/2677/1181 1648/2676/1180 1645/2669/1176 764/2668/1175 +f 765/2678/1182 1649/2679/1183 1650/2680/1184 766/2681/1185 +f 770/2682/1186 1651/2683/1187 1649/2679/1183 765/2678/1182 +f 766/2681/1185 1650/2680/1184 1652/2684/1188 767/2685/1189 +f 767/2685/1189 1652/2684/1188 1653/2686/1190 768/2687/1191 +f 768/2688/1191 1653/2689/1190 1654/2690/1192 769/2691/1193 +f 769/2691/1193 1654/2690/1192 1651/2683/1187 770/2682/1186 +f 771/2692/1194 1655/2693/4 1656/2694/1195 772/2695/1196 +f 776/2696/1197 1657/2697/1198 1655/2693/4 771/2692/1194 +f 772/2695/1196 1656/2694/1195 1658/2698/1199 773/2699/1200 +f 773/2699/1200 1658/2698/1199 1659/2700/3 774/2701/1201 +f 774/2702/1201 1659/2703/3 1660/2704/1202 775/2705/1203 +f 775/2705/1203 1660/2704/1202 1657/2697/1198 776/2696/1197 +f 777/2706/1204 1661/2707/1168 1662/2708/1170 778/2709/1171 +f 782/2710/1205 1663/2711/1166 1661/2707/1168 777/2706/1204 +f 778/2709/1171 1662/2708/1170 1664/2712/1165 779/2713/1206 +f 779/2713/1206 1664/2712/1165 1665/2714/1161 780/2715/1207 +f 780/2716/1207 1665/2717/1161 1666/2718/1162 781/2719/1163 +f 781/2719/1163 1666/2718/1162 1663/2711/1166 782/2710/1205 +f 783/2720/1179 1667/2721/2 1668/2722/1180 784/2723/1208 +f 788/2724/1209 1669/2725/1177 1667/2721/2 783/2720/1179 +f 784/2723/1208 1668/2722/1180 1670/2726/1176 785/2727/1210 +f 785/2727/1210 1670/2726/1176 1671/2728/1 786/2729/1172 +f 786/2730/1172 1671/2731/1 1672/2732/1173 787/2733/1211 +f 787/2733/1211 1672/2732/1173 1669/2725/1177 788/2724/1209 +f 789/2734/1212 1673/2735/1190 1674/2736/1192 790/2737/1213 +f 794/2738/1214 1675/2739/1188 1673/2735/1190 789/2734/1212 +f 790/2737/1213 1674/2736/1192 1676/2740/1187 791/2741/1215 +f 791/2741/1215 1676/2740/1187 1677/2742/1183 792/2743/1216 +f 792/2744/1216 1677/2745/1183 1678/2746/1184 793/2747/1217 +f 793/2747/1217 1678/2746/1184 1675/2739/1188 794/2738/1214 +f 795/2748/1201 1679/2749/3 1680/2750/1202 796/2751/1218 +f 800/2752/1219 1681/2753/1199 1679/2749/3 795/2748/1201 +f 796/2751/1218 1680/2750/1202 1682/2754/1198 797/2755/1220 +f 797/2755/1220 1682/2754/1198 1683/2756/4 798/2757/1194 +f 798/2758/1194 1683/2759/4 1684/2760/1195 799/2761/1221 +f 799/2761/1221 1684/2760/1195 1681/2753/1199 800/2752/1219 +f 883/950/151 882/949/150 888/955/156 1074/1344/392 diff --git a/mods/pipeworks/models/pipeworks_pipe_9_lowpoly.obj b/mods/pipeworks/models/pipeworks_pipe_9_lowpoly.obj new file mode 100755 index 0000000..a136916 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pipe_9_lowpoly.obj @@ -0,0 +1,682 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +o Cylinder.002_Cylinder.006_None.004_Cylinder.002_Cylinder.006_No +v -0.468750 -0.156250 -0.064721 +v -0.468750 -0.064721 -0.156250 +v -0.468750 0.064721 -0.156250 +v -0.468750 0.156250 -0.064721 +v -0.468750 0.156250 0.064721 +v -0.468750 0.064721 0.156250 +v -0.468750 -0.064721 0.156250 +v -0.468750 -0.156250 0.064721 +v -0.500000 -0.064721 -0.156250 +v -0.500000 -0.156250 -0.064721 +v -0.500000 -0.156250 0.064721 +v -0.500000 -0.064721 0.156250 +v -0.500000 0.064721 0.156250 +v -0.500000 0.156250 0.064721 +v -0.500000 0.156250 -0.064721 +v -0.500000 0.064721 -0.156250 +v 0.500000 -0.156250 -0.064721 +v 0.500000 -0.064721 -0.156250 +v 0.500000 0.064721 -0.156250 +v 0.500000 0.156250 -0.064721 +v 0.500000 0.156250 0.064721 +v 0.500000 0.064721 0.156250 +v 0.500000 -0.064721 0.156250 +v 0.500000 -0.156250 0.064721 +v 0.468750 -0.064721 -0.156250 +v 0.468750 -0.156250 -0.064721 +v 0.468750 -0.156250 0.064721 +v 0.468750 -0.064721 0.156250 +v 0.468750 0.064721 0.156250 +v 0.468750 0.156250 0.064721 +v 0.468750 0.156250 -0.064721 +v 0.468750 0.064721 -0.156250 +v -0.156250 0.468750 -0.064721 +v -0.064721 0.468750 -0.156250 +v 0.064721 0.468750 -0.156250 +v 0.156250 0.468750 -0.064721 +v 0.156250 0.468750 0.064721 +v 0.064721 0.468750 0.156250 +v -0.064721 0.468750 0.156250 +v -0.156250 0.468750 0.064721 +v -0.064721 0.500000 -0.156250 +v -0.156250 0.500000 -0.064721 +v -0.156250 0.500000 0.064721 +v -0.064721 0.500000 0.156250 +v 0.064721 0.500000 0.156250 +v 0.156250 0.500000 0.064721 +v 0.156250 0.500000 -0.064721 +v 0.064721 0.500000 -0.156250 +v -0.156250 -0.500000 -0.064721 +v -0.064721 -0.500000 -0.156250 +v 0.064721 -0.500000 -0.156250 +v 0.156250 -0.500000 -0.064721 +v 0.156250 -0.500000 0.064721 +v 0.064721 -0.500000 0.156250 +v -0.064721 -0.500000 0.156250 +v -0.156250 -0.500000 0.064721 +v -0.064721 -0.468750 -0.156250 +v -0.156250 -0.468750 -0.064721 +v -0.156250 -0.468750 0.064721 +v -0.064721 -0.468750 0.156250 +v 0.064721 -0.468750 0.156250 +v 0.156250 -0.468750 0.064721 +v 0.156250 -0.468750 -0.064721 +v 0.064721 -0.468750 -0.156250 +v -0.156250 -0.064721 -0.468750 +v -0.064721 -0.156250 -0.468750 +v 0.064721 -0.156250 -0.468750 +v 0.156250 -0.064721 -0.468750 +v 0.156250 0.064721 -0.468750 +v 0.064721 0.156250 -0.468750 +v -0.064721 0.156250 -0.468750 +v -0.156250 0.064721 -0.468750 +v -0.064721 -0.156250 -0.500000 +v -0.156250 -0.064721 -0.500000 +v -0.156250 0.064721 -0.500000 +v -0.064721 0.156250 -0.500000 +v 0.064721 0.156250 -0.500000 +v 0.156250 0.064721 -0.500000 +v 0.156250 -0.064721 -0.500000 +v 0.064721 -0.156250 -0.500000 +v -0.468750 -0.051777 -0.125000 +v -0.468750 -0.125000 -0.051777 +v -0.468750 -0.125000 0.051777 +v -0.468750 -0.051777 0.125000 +v -0.468750 0.051777 0.125000 +v -0.468750 0.125000 0.051777 +v -0.468750 0.125000 -0.051777 +v -0.468750 0.051777 -0.125000 +v 0.468750 -0.125000 -0.051777 +v 0.468750 -0.051777 -0.125000 +v 0.468750 0.051777 -0.125000 +v 0.468750 0.125000 -0.051777 +v 0.468750 0.125000 0.051777 +v 0.468750 0.051777 0.125000 +v 0.468750 -0.051777 0.125000 +v 0.468750 -0.125000 0.051777 +v -0.051777 0.051777 0.125000 +v -0.125000 0.125000 0.051777 +v 0.125000 0.125000 -0.051777 +v 0.125000 0.125000 0.051777 +v -0.051777 -0.051777 0.125000 +v -0.125000 -0.125000 0.051777 +v 0.125000 -0.125000 0.051777 +v 0.125000 -0.125000 -0.051777 +v 0.088388 -0.088388 -0.088388 +v 0.125000 -0.051777 -0.125000 +v 0.125000 0.051777 -0.125000 +v 0.088388 0.088388 -0.088388 +v 0.051777 -0.051777 0.125000 +v 0.051777 -0.468750 0.125000 +v 0.125000 -0.468750 0.051777 +v -0.051777 0.468750 0.125000 +v -0.051777 -0.468750 0.125000 +v 0.051777 0.051777 0.125000 +v 0.051777 0.468750 0.125000 +v -0.125000 0.125000 -0.051777 +v -0.088388 0.088388 -0.088388 +v -0.125000 0.051777 -0.125000 +v -0.125000 -0.051777 -0.125000 +v -0.088388 -0.088388 -0.088388 +v -0.125000 -0.125000 -0.051777 +v -0.051777 0.468750 -0.125000 +v -0.125000 0.468750 -0.051777 +v -0.125000 0.468750 0.051777 +v 0.125000 0.468750 0.051777 +v 0.125000 0.468750 -0.051777 +v 0.051777 0.468750 -0.125000 +v -0.125000 -0.468750 -0.051777 +v -0.051777 -0.468750 -0.125000 +v 0.051777 -0.468750 -0.125000 +v 0.125000 -0.468750 -0.051777 +v -0.125000 -0.468750 0.051777 +v -0.051777 -0.125000 -0.125000 +v 0.051777 -0.125000 -0.125000 +v 0.051777 0.125000 -0.125000 +v -0.051777 0.125000 -0.125000 +v -0.051777 -0.125000 -0.468750 +v -0.125000 -0.051777 -0.468750 +v -0.125000 0.051777 -0.468750 +v -0.051777 0.125000 -0.468750 +v 0.051777 0.125000 -0.468750 +v 0.125000 0.051777 -0.468750 +v 0.125000 -0.051777 -0.468750 +v 0.051777 -0.125000 -0.468750 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.7500 0.2344 +vt 0.6250 0.2031 +vt 0.6250 0.0156 +vt 0.7500 0.0156 +vt 0.6250 0.5156 +vt 0.5000 0.5156 +vt 0.5000 0.3281 +vt 0.6250 0.3281 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.1250 0.5156 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.1875 0.3125 +vt 0.2500 0.3281 +vt 0.2500 0.5156 +vt 0.3750 0.3281 +vt 0.3750 0.5156 +vt 0.4375 0.3125 +vt 0.7500 0.2969 +vt 0.7500 0.5156 +vt 0.6250 0.5156 +vt 0.6250 0.3281 +vt 0.5000 0.2031 +vt 0.5000 0.0156 +vt 0.4375 0.2188 +vt 0.3750 0.2031 +vt 0.3750 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2031 +vt 0.1250 0.0156 +vt 0.1875 0.2188 +vt 0.1250 0.2031 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt 0.8750 0.2969 +vt 1.0000 0.3281 +vt 1.0000 0.5156 +vt 0.8750 0.5156 +vt 0.5000 0.5156 +vt 0.5000 0.3281 +vt 0.8750 0.2969 +vt 1.0000 0.3281 +vt 1.0000 0.5156 +vt 0.8750 0.5156 +vt 0.7500 0.0156 +vt 0.7500 0.2344 +vt 0.6250 0.2031 +vt 0.6250 0.0156 +vt 0.1250 0.5156 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.1875 0.3125 +vt 0.2500 0.3281 +vt 0.2500 0.5156 +vt 0.3750 0.3281 +vt 0.3750 0.5156 +vt 0.4375 0.3125 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.5000 0.2031 +vt 0.5000 0.0156 +vt 0.4375 0.2188 +vt 0.3750 0.2031 +vt 0.3750 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2031 +vt 0.1250 0.0156 +vt 0.1875 0.2188 +vt 0.1250 0.2031 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.7500 0.2969 +vt 0.7500 0.5156 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.9375 0.2188 +vt 0.8750 0.2031 +vt 0.8750 0.0156 +vt 0.7500 0.2031 +vt 0.7500 0.0156 +vt 0.6250 0.0156 +vt 0.6875 0.2188 +vt 0.6250 0.2031 +vt 0.5000 0.2031 +vt 0.5000 0.0156 +vt 0.4375 0.2188 +vt 0.3750 0.2031 +vt 0.3750 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2031 +vt 0.1250 0.0156 +vt 0.1250 0.2031 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vn 1.0000 0.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.0000 0.0000 -1.0000 +vn -0.6302 -0.2972 -0.7173 +vn 0.6302 -0.2970 -0.7174 +vn 0.6302 -0.7173 -0.2971 +vn -0.6302 -0.7173 -0.2971 +vn 0.6302 -0.7173 0.2971 +vn -0.6302 -0.7173 0.2971 +vn 0.6302 -0.2971 0.7173 +vn -0.6302 -0.2971 0.7173 +vn 0.6302 0.2971 0.7173 +vn -0.6302 0.2971 0.7173 +vn 0.6302 0.7173 0.2971 +vn -0.6302 0.7173 0.2971 +vn 0.6302 0.7173 -0.2971 +vn -0.6302 0.7173 -0.2971 +vn 0.6302 0.2972 -0.7173 +vn -0.6302 0.2970 -0.7174 +vn -0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2971 -0.7173 +vn 0.6302 -0.2972 0.7173 +vn -0.6302 -0.2970 0.7174 +vn 0.6302 0.2970 0.7174 +vn -0.6302 0.2972 0.7173 +vn 0.6302 0.2971 -0.7173 +vn -0.6302 0.2971 -0.7173 +vn -0.6303 -0.2971 -0.7173 +vn -0.6303 -0.7173 -0.2971 +vn -0.6303 -0.7173 0.2971 +vn -0.6303 -0.2971 0.7173 +vn -0.6303 0.2971 0.7173 +vn -0.6303 0.7173 0.2971 +vn -0.6303 0.7173 -0.2971 +vn -0.6303 0.2971 -0.7173 +vn 0.6303 -0.7173 -0.2971 +vn 0.6303 -0.2971 -0.7173 +vn 0.6303 0.2971 -0.7173 +vn 0.6303 0.7173 -0.2971 +vn 0.6303 0.7173 0.2971 +vn 0.6303 0.2971 0.7173 +vn 0.6303 -0.2971 0.7173 +vn 0.6303 -0.7173 0.2971 +vn -0.1100 0.1101 0.9878 +vn -0.5789 0.5789 0.5743 +vn 0.5789 0.5789 -0.5743 +vn 0.5789 0.5789 0.5743 +vn -0.1100 -0.1101 0.9878 +vn -0.5789 -0.5789 0.5743 +vn 0.5789 -0.5789 0.5743 +vn 0.5789 -0.5789 -0.5743 +vn 0.5774 -0.5774 -0.5774 +vn 0.5789 -0.5743 -0.5789 +vn 0.5789 0.5743 -0.5789 +vn 0.5774 0.5774 -0.5774 +vn 0.1101 -0.1101 0.9878 +vn 0.2971 -0.6303 0.7173 +vn 0.7173 -0.6303 0.2971 +vn -0.5789 0.5789 -0.5743 +vn -0.5774 0.5774 -0.5774 +vn -0.5789 0.5743 -0.5789 +vn -0.5789 -0.5743 -0.5789 +vn -0.5774 -0.5774 -0.5774 +vn -0.5789 -0.5789 -0.5743 +vn -0.2972 0.6302 -0.7173 +vn -0.2970 -0.6302 -0.7174 +vn -0.7173 -0.6302 -0.2972 +vn -0.7174 0.6302 -0.2970 +vn -0.7173 -0.6302 0.2971 +vn -0.7173 0.6302 0.2971 +vn -0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn 0.2970 -0.6302 0.7174 +vn 0.2972 0.6302 0.7173 +vn 0.7173 -0.6302 0.2972 +vn 0.7174 0.6302 0.2970 +vn 0.7173 -0.6302 -0.2971 +vn 0.7173 0.6302 -0.2971 +vn 0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 -0.7173 +vn -0.2971 0.6303 -0.7173 +vn -0.7173 0.6303 -0.2971 +vn -0.7173 0.6303 0.2971 +vn -0.2971 0.6303 0.7173 +vn 0.2971 0.6303 0.7173 +vn 0.7173 0.6303 0.2971 +vn 0.7173 0.6303 -0.2971 +vn 0.2971 0.6303 -0.7173 +vn -0.7173 -0.6303 -0.2971 +vn -0.2971 -0.6303 -0.7173 +vn 0.2971 -0.6303 -0.7173 +vn 0.7173 -0.6303 -0.2971 +vn -0.2971 -0.6303 0.7173 +vn -0.7173 -0.6303 0.2971 +vn 0.1101 0.1101 0.9878 +vn -0.5743 -0.5789 -0.5789 +vn 0.5743 -0.5789 -0.5789 +vn 0.5743 0.5789 -0.5789 +vn -0.5743 0.5789 -0.5789 +vn -0.2971 -0.7173 -0.6302 +vn -0.2972 -0.7173 0.6302 +vn -0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 -0.6302 +vn -0.7173 0.2971 0.6302 +vn -0.7173 0.2971 -0.6302 +vn -0.2970 0.7174 0.6302 +vn -0.2971 0.7173 -0.6302 +vn 0.2971 0.7173 0.6302 +vn 0.2971 0.7173 -0.6302 +vn 0.7173 0.2971 0.6302 +vn 0.7173 0.2971 -0.6302 +vn 0.7173 -0.2971 0.6302 +vn 0.7173 -0.2971 -0.6302 +vn 0.2971 -0.7173 0.6302 +vn 0.2971 -0.7173 -0.6302 +vn -0.2971 -0.7173 -0.6303 +vn -0.7173 -0.2971 -0.6303 +vn -0.7173 0.2971 -0.6303 +vn -0.2971 0.7173 -0.6303 +vn 0.2971 0.7173 -0.6303 +vn 0.7173 0.2971 -0.6303 +vn 0.7173 -0.2971 -0.6303 +vn 0.2971 -0.7173 -0.6303 +g Cylinder.002_Cylinder.006_None.004_Cylinder.002_Cylinder.006_No_Cylinder.002_Cylinder.006_None.004_Cylinder.002_Cylinder.006_No_None +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2 +f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 +f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2 +f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3 +f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4 +f 49/49/3 50/50/3 51/51/3 52/52/3 53/53/3 54/54/3 55/55/3 56/56/3 +f 57/57/4 58/58/4 59/59/4 60/60/4 61/61/4 62/62/4 63/63/4 64/64/4 +f 65/65/5 66/66/5 67/67/5 68/68/5 69/69/5 70/70/5 71/71/5 72/72/5 +f 73/73/6 74/74/6 75/75/6 76/76/6 77/77/6 78/78/6 79/79/6 80/80/6 +f 9/81/7 2/82/8 1/83/9 10/84/10 +f 10/84/10 1/83/9 8/85/11 11/86/12 +f 11/86/12 8/85/11 7/87/13 12/88/14 +f 12/89/14 7/90/13 6/91/15 13/92/16 +f 13/92/16 6/91/15 5/93/17 14/94/18 +f 14/94/18 5/93/17 4/95/19 15/96/20 +f 15/96/20 4/95/19 3/97/21 16/98/22 +f 16/98/22 3/97/21 2/82/8 9/81/7 +f 26/99/10 17/100/9 24/101/11 27/102/12 +f 25/103/23 18/104/24 17/100/9 26/99/10 +f 27/102/12 24/101/11 23/105/25 28/106/26 +f 28/107/26 23/108/25 22/109/27 29/110/28 +f 29/110/28 22/109/27 21/111/17 30/112/18 +f 30/112/18 21/111/17 20/113/19 31/114/20 +f 31/114/20 20/113/19 19/115/29 32/116/30 +f 32/116/30 19/115/29 18/104/24 25/103/23 +f 81/117/31 82/118/32 83/119/33 84/120/34 85/121/35 86/122/36 87/123/37 88/124/38 +f 89/125/39 90/126/40 91/127/41 92/128/42 93/129/43 94/130/44 95/131/45 96/132/46 +f 97/133/47 98/134/48 86/135/36 85/136/35 +f 93/137/43 92/138/42 99/139/49 100/140/50 +f 101/141/51 84/142/34 83/143/33 102/144/52 +f 89/145/39 96/146/46 103/147/53 104/148/54 +f 89/145/39 104/148/54 105/149/55 106/150/56 90/151/40 +f 90/151/40 106/150/56 107/152/57 91/153/41 +f 91/153/41 107/152/57 108/154/58 99/139/49 92/138/42 +f 109/155/59 110/156/60 111/157/61 103/158/53 +f 86/135/36 98/134/48 116/159/62 87/160/37 +f 87/160/37 116/159/62 117/161/63 118/162/64 88/163/38 +f 81/164/31 88/163/38 118/162/64 119/165/65 +f 82/166/32 81/164/31 119/165/65 120/167/66 121/168/67 +f 82/166/32 121/168/67 102/169/52 83/170/33 +f 41/171/68 34/172/69 33/173/70 42/174/71 +f 42/174/71 33/173/70 40/175/72 43/176/73 +f 43/176/73 40/175/72 39/177/74 44/178/75 +f 44/179/75 39/180/74 38/181/76 45/182/77 +f 45/182/77 38/181/76 37/183/78 46/184/79 +f 46/184/79 37/183/78 36/185/80 47/186/81 +f 47/186/81 36/185/80 35/187/82 48/188/83 +f 48/188/83 35/187/82 34/172/69 41/171/68 +f 58/189/71 49/190/70 56/191/72 59/192/73 +f 57/193/68 50/194/69 49/190/70 58/189/71 +f 59/192/73 56/191/72 55/195/74 60/196/75 +f 60/197/75 55/198/74 54/199/76 61/200/77 +f 61/200/77 54/199/76 53/201/78 62/202/79 +f 62/202/79 53/201/78 52/203/80 63/204/81 +f 63/204/81 52/203/80 51/205/82 64/206/83 +f 64/206/83 51/205/82 50/194/69 57/193/68 +f 122/207/84 123/208/85 124/209/86 112/210/87 115/211/88 125/212/89 126/213/90 127/214/91 +f 128/215/92 129/216/93 130/217/94 131/218/95 111/219/61 110/220/60 113/221/96 132/222/97 +f 109/223/59 103/224/53 96/225/46 95/226/45 +f 111/157/61 131/227/95 104/228/54 103/158/53 +f 101/229/51 102/230/52 132/231/97 113/232/96 +f 115/233/88 114/234/98 100/235/50 125/236/89 +f 128/237/92 132/238/97 102/239/52 121/240/67 +f 128/237/92 121/240/67 120/241/66 133/242/99 129/243/93 +f 129/243/93 133/242/99 134/244/100 130/245/94 +f 130/245/94 134/244/100 105/246/55 104/228/54 131/227/95 +f 97/247/47 112/248/87 124/249/86 98/250/48 +f 125/236/89 100/235/50 99/251/49 126/252/90 +f 126/252/90 99/251/49 108/253/58 135/254/101 127/255/91 +f 122/256/84 127/255/91 135/254/101 136/257/102 +f 123/258/85 122/256/84 136/257/102 117/259/63 116/260/62 +f 123/258/85 116/260/62 98/261/48 124/262/86 +f 73/263/103 66/264/104 65/265/105 74/266/106 +f 74/266/106 65/265/105 72/267/107 75/268/108 +f 75/268/108 72/267/107 71/269/109 76/270/110 +f 76/271/110 71/272/109 70/273/111 77/274/112 +f 77/274/112 70/273/111 69/275/113 78/276/114 +f 78/276/114 69/275/113 68/277/115 79/278/116 +f 79/278/116 68/277/115 67/279/117 80/280/118 +f 80/280/118 67/279/117 66/264/104 73/263/103 +f 137/281/119 138/282/120 139/283/121 140/284/122 141/285/123 142/286/124 143/287/125 144/288/126 +f 93/137/43 100/140/50 114/289/98 94/290/44 +f 139/291/121 118/292/64 117/293/63 136/294/102 140/295/122 +f 140/295/122 136/294/102 135/296/101 141/297/123 +f 142/298/124 141/297/123 135/296/101 108/299/58 107/300/57 +f 142/298/124 107/300/57 106/301/56 143/302/125 +f 143/302/125 106/301/56 105/303/55 134/304/100 144/305/126 +f 137/306/119 144/305/126 134/304/100 133/307/99 +f 138/308/120 137/306/119 133/307/99 120/167/66 119/309/65 +f 138/308/120 119/309/65 118/310/64 139/311/121 +f 84/142/34 101/229/51 97/133/47 85/136/35 +f 110/156/60 109/223/59 101/229/51 113/232/96 +f 109/223/59 95/226/45 94/290/44 114/234/98 +f 101/229/51 109/223/59 114/234/98 97/133/47 +f 114/234/98 115/233/88 112/248/87 97/133/47 diff --git a/mods/pipeworks/models/pipeworks_pressure_gauge.obj b/mods/pipeworks/models/pipeworks_pressure_gauge.obj new file mode 100755 index 0000000..0dbb4c3 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pressure_gauge.obj @@ -0,0 +1,7690 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-pressure-gauge.blend' +# www.blender.org +o Pipe_Cylinder.002 +v 0.059507 0.306046 -0.132052 +v 0.059507 0.332313 -0.134639 +v 0.059507 0.358580 -0.132052 +v 0.059507 0.383837 -0.124391 +v 0.059507 0.407115 -0.111949 +v 0.059507 0.427517 -0.095205 +v 0.059507 0.444262 -0.074802 +v 0.059508 0.456704 -0.051524 +v 0.059507 0.464365 -0.026267 +v 0.059507 0.466953 -0.000000 +v 0.059508 0.464366 0.026267 +v 0.059507 0.456704 0.051524 +v 0.059507 0.444262 0.074801 +v 0.059507 0.427518 0.095204 +v 0.059507 0.407115 0.111948 +v 0.059508 0.383838 0.124390 +v 0.059508 0.358580 0.132052 +v 0.059508 0.332313 0.134639 +v 0.059508 0.306046 0.132052 +v 0.059508 0.280789 0.124390 +v 0.059507 0.257512 0.111948 +v 0.059507 0.237109 0.095204 +v 0.059507 0.220365 0.074802 +v 0.059507 0.207923 0.051524 +v 0.059508 0.200261 0.026267 +v 0.059507 0.197674 -0.000000 +v 0.059507 0.200261 -0.026267 +v 0.059508 0.207923 -0.051524 +v 0.059507 0.220365 -0.074802 +v 0.059507 0.237109 -0.095204 +v 0.059507 0.257512 -0.111949 +v 0.059507 0.280789 -0.124391 +v -0.038455 0.126770 -0.468750 +v -0.012985 0.131837 -0.468750 +v 0.012984 0.131837 -0.468750 +v 0.038455 0.126770 -0.468750 +v 0.062448 0.116832 -0.468750 +v 0.084041 0.102404 -0.468750 +v 0.102404 0.084041 -0.468750 +v 0.116832 0.062448 -0.468750 +v 0.126770 0.038455 -0.468750 +v 0.131837 0.012985 -0.468750 +v 0.131837 -0.012985 -0.468750 +v 0.116832 -0.062448 -0.468750 +v 0.102404 -0.084041 -0.468750 +v 0.084041 -0.102404 -0.468750 +v 0.062448 -0.116832 -0.468750 +v 0.038455 -0.126770 -0.468750 +v 0.012985 -0.131836 -0.468750 +v -0.012985 -0.131836 -0.468750 +v -0.038455 -0.126770 -0.468750 +v -0.062448 -0.116832 -0.468750 +v -0.102404 -0.084041 -0.468750 +v -0.084041 -0.102404 -0.468750 +v -0.116832 -0.062448 -0.468750 +v -0.126770 -0.038455 -0.468750 +v -0.131836 0.012985 -0.468750 +v -0.116832 0.062448 -0.468750 +v -0.126770 0.038455 -0.468750 +v -0.102404 0.084041 -0.468750 +v -0.084041 0.102404 -0.468750 +v -0.062448 0.116832 -0.468750 +v 0.126770 -0.038455 -0.468750 +v -0.131836 -0.012985 -0.468750 +v -0.059210 0.110774 -0.437501 +v -0.036461 0.120197 -0.437501 +v -0.012312 0.125000 -0.437501 +v 0.012311 0.125001 -0.437501 +v 0.036461 0.120197 -0.437501 +v 0.059210 0.110774 -0.437501 +v 0.079683 0.097094 -0.437501 +v 0.097094 0.079683 -0.437501 +v 0.110774 0.059210 -0.437501 +v 0.120197 0.036461 -0.437501 +v 0.125001 0.012312 -0.437501 +v 0.125000 -0.012311 -0.437501 +v 0.120197 -0.036461 -0.437501 +v 0.110774 -0.059210 -0.437501 +v 0.097094 -0.079683 -0.437501 +v 0.079683 -0.097094 -0.437501 +v 0.059210 -0.110774 -0.437501 +v 0.036461 -0.120197 -0.437501 +v 0.012311 -0.125000 -0.437501 +v -0.012311 -0.125000 -0.437501 +v -0.036461 -0.120197 -0.437501 +v -0.059210 -0.110774 -0.437501 +v -0.079683 -0.097094 -0.437501 +v -0.097094 -0.079683 -0.437501 +v -0.110774 -0.059210 -0.437501 +v -0.120197 -0.036461 -0.437501 +v -0.125000 -0.012311 -0.437501 +v -0.125000 0.012311 -0.437501 +v -0.120197 0.036461 -0.437501 +v -0.110774 0.059210 -0.437501 +v -0.097094 0.079683 -0.437501 +v -0.079683 0.097094 -0.437501 +v 0.120197 0.036461 0.437501 +v 0.125001 0.012312 0.437501 +v 0.125001 -0.012311 0.437501 +v 0.120197 -0.036461 0.437501 +v 0.110774 0.059210 0.437501 +v 0.131837 0.012985 0.468750 +v 0.126770 0.038455 0.468750 +v 0.131837 -0.012985 0.468750 +v 0.110774 -0.059210 0.437501 +v 0.126770 -0.038455 0.468750 +v 0.097094 0.079683 0.437501 +v 0.116832 0.062448 0.468750 +v 0.097094 -0.079683 0.437501 +v 0.116832 -0.062448 0.468750 +v 0.079683 0.097094 0.437501 +v 0.102404 0.084041 0.468750 +v 0.079683 -0.097094 0.437501 +v 0.102404 -0.084041 0.468750 +v 0.059210 0.110774 0.437501 +v 0.084041 0.102404 0.468750 +v 0.059210 -0.110774 0.437501 +v 0.084041 -0.102404 0.468750 +v 0.036461 0.120197 0.437501 +v 0.062448 0.116832 0.468750 +v 0.036461 -0.120197 0.437501 +v 0.062448 -0.116832 0.468750 +v 0.012311 0.125000 0.437501 +v 0.038455 0.126770 0.468750 +v 0.012312 -0.125001 0.437501 +v 0.038455 -0.126770 0.468750 +v -0.012311 0.125000 0.437501 +v 0.012985 0.131836 0.468750 +v -0.012311 -0.125001 0.437501 +v 0.012985 -0.131837 0.468750 +v -0.036461 0.120197 0.437501 +v -0.012985 0.131836 0.468750 +v -0.036461 -0.120197 0.437501 +v -0.012985 -0.131837 0.468750 +v -0.059210 0.110774 0.437501 +v -0.038455 0.126770 0.468750 +v -0.059210 -0.110774 0.437501 +v -0.038455 -0.126770 0.468750 +v -0.079683 0.097094 0.437501 +v -0.062448 0.116832 0.468750 +v -0.079683 -0.097094 0.437501 +v -0.062448 -0.116832 0.468750 +v -0.097094 0.079683 0.437501 +v -0.084041 0.102404 0.468750 +v -0.097094 -0.079683 0.437501 +v -0.084041 -0.102404 0.468750 +v -0.110774 0.059210 0.437501 +v -0.102404 0.084041 0.468750 +v -0.110774 -0.059210 0.437501 +v -0.102404 -0.084041 0.468750 +v -0.120197 0.036461 0.437501 +v -0.116832 0.062448 0.468750 +v -0.120197 -0.036461 0.437501 +v -0.116832 -0.062448 0.468750 +v -0.125000 0.012311 0.437501 +v -0.126770 0.038455 0.468750 +v -0.125000 -0.012311 0.437501 +v -0.126770 -0.038455 0.468750 +v -0.131836 0.012985 0.468750 +v -0.131836 -0.012985 0.468750 +v -0.063644 0.130078 0.460912 +v -0.063644 0.130078 0.468749 +v -0.062466 0.139022 0.468749 +v -0.062466 0.139022 0.460912 +v -0.054132 0.142474 0.460912 +v -0.046976 0.136982 0.460912 +v -0.048153 0.128039 0.460912 +v -0.056487 0.124587 0.460912 +v -0.056487 0.124587 0.468749 +v -0.054132 0.142474 0.468749 +v -0.046976 0.136982 0.468749 +v -0.048153 0.128039 0.468749 +v -0.046976 0.136982 -0.460914 +v -0.046976 0.136982 -0.468751 +v -0.054133 0.142474 -0.468751 +v -0.054133 0.142474 -0.460914 +v -0.062467 0.139022 -0.460914 +v -0.063644 0.130078 -0.460914 +v -0.056487 0.124587 -0.460914 +v -0.048153 0.128039 -0.460914 +v -0.048153 0.128039 -0.468751 +v -0.062467 0.139022 -0.468751 +v -0.063644 0.130078 -0.468751 +v -0.056487 0.124587 -0.468751 +v -0.136982 0.046976 0.460912 +v -0.136982 0.046976 0.468749 +v -0.142474 0.054133 0.468749 +v -0.142474 0.054133 0.460912 +v -0.139022 0.062467 0.460912 +v -0.130078 0.063644 0.460912 +v -0.124587 0.056488 0.460912 +v -0.128039 0.048154 0.460912 +v -0.128039 0.048154 0.468749 +v -0.139022 0.062467 0.468749 +v -0.130078 0.063644 0.468749 +v -0.124587 0.056488 0.468749 +v -0.130078 0.063644 -0.460914 +v -0.130078 0.063644 -0.468751 +v -0.139022 0.062467 -0.468751 +v -0.139022 0.062467 -0.460914 +v -0.142474 0.054133 -0.460914 +v -0.136982 0.046976 -0.460914 +v -0.128039 0.048153 -0.460914 +v -0.124587 0.056487 -0.460914 +v -0.124587 0.056487 -0.468751 +v -0.142474 0.054133 -0.468751 +v -0.136982 0.046976 -0.468751 +v -0.128039 0.048153 -0.468751 +v -0.130078 -0.063644 0.460912 +v -0.130078 -0.063644 0.468749 +v -0.139022 -0.062467 0.468749 +v -0.139022 -0.062467 0.460912 +v -0.142474 -0.054132 0.460912 +v -0.136982 -0.046976 0.460912 +v -0.128039 -0.048153 0.460912 +v -0.124587 -0.056487 0.460912 +v -0.124587 -0.056487 0.468749 +v -0.142474 -0.054132 0.468749 +v -0.136982 -0.046976 0.468749 +v -0.128039 -0.048153 0.468749 +v -0.136982 -0.046976 -0.460914 +v -0.136982 -0.046976 -0.468751 +v -0.142474 -0.054133 -0.468751 +v -0.142474 -0.054133 -0.460914 +v -0.139022 -0.062467 -0.460914 +v -0.130078 -0.063644 -0.460914 +v -0.124587 -0.056488 -0.460914 +v -0.128039 -0.048153 -0.460914 +v -0.128039 -0.048153 -0.468751 +v -0.139022 -0.062467 -0.468751 +v -0.130078 -0.063644 -0.468751 +v -0.124587 -0.056488 -0.468751 +v -0.046976 -0.136982 0.460912 +v -0.046976 -0.136982 0.468749 +v -0.054133 -0.142474 0.468749 +v -0.054133 -0.142474 0.460912 +v -0.062467 -0.139022 0.460912 +v -0.063644 -0.130078 0.460912 +v -0.056487 -0.124587 0.460912 +v -0.048153 -0.128039 0.460912 +v -0.048153 -0.128039 0.468749 +v -0.062467 -0.139022 0.468749 +v -0.063644 -0.130078 0.468749 +v -0.056487 -0.124587 0.468749 +v -0.063644 -0.130078 -0.460914 +v -0.063644 -0.130078 -0.468751 +v -0.062467 -0.139022 -0.468751 +v -0.062467 -0.139022 -0.460914 +v -0.054133 -0.142474 -0.460914 +v -0.046976 -0.136982 -0.460914 +v -0.048153 -0.128039 -0.460914 +v -0.056487 -0.124587 -0.460914 +v -0.056487 -0.124587 -0.468751 +v -0.054133 -0.142474 -0.468751 +v -0.046976 -0.136982 -0.468751 +v -0.048153 -0.128039 -0.468751 +v 0.063644 -0.130078 0.460912 +v 0.063644 -0.130078 0.468749 +v 0.062467 -0.139022 0.468749 +v 0.062467 -0.139022 0.460912 +v 0.054133 -0.142474 0.460912 +v 0.046976 -0.136982 0.460912 +v 0.048153 -0.128039 0.460912 +v 0.056487 -0.124587 0.460912 +v 0.056487 -0.124587 0.468749 +v 0.054133 -0.142474 0.468749 +v 0.046976 -0.136982 0.468749 +v 0.048153 -0.128039 0.468749 +v 0.046976 -0.136982 -0.460914 +v 0.046976 -0.136982 -0.468751 +v 0.054133 -0.142474 -0.468751 +v 0.054133 -0.142474 -0.460914 +v 0.062467 -0.139022 -0.460914 +v 0.063644 -0.130078 -0.460914 +v 0.056488 -0.124587 -0.460914 +v 0.048153 -0.128039 -0.460914 +v 0.048153 -0.128039 -0.468751 +v 0.062467 -0.139022 -0.468751 +v 0.063644 -0.130078 -0.468751 +v 0.056488 -0.124587 -0.468751 +v 0.136982 -0.046976 0.460912 +v 0.136982 -0.046976 0.468749 +v 0.142474 -0.054133 0.468749 +v 0.142474 -0.054133 0.460912 +v 0.139022 -0.062467 0.460912 +v 0.130078 -0.063644 0.460912 +v 0.124587 -0.056488 0.460912 +v 0.128039 -0.048153 0.460912 +v 0.128039 -0.048153 0.468749 +v 0.139022 -0.062467 0.468749 +v 0.130078 -0.063644 0.468749 +v 0.124587 -0.056488 0.468749 +v 0.130078 -0.063644 -0.460914 +v 0.130078 -0.063644 -0.468751 +v 0.139022 -0.062467 -0.468751 +v 0.139022 -0.062467 -0.460914 +v 0.142474 -0.054132 -0.460914 +v 0.136982 -0.046976 -0.460914 +v 0.128039 -0.048153 -0.460914 +v 0.124587 -0.056487 -0.460914 +v 0.124587 -0.056487 -0.468751 +v 0.142474 -0.054132 -0.468751 +v 0.136982 -0.046976 -0.468751 +v 0.128039 -0.048153 -0.468751 +v 0.130078 0.063644 0.460912 +v 0.130078 0.063644 0.468749 +v 0.139022 0.062467 0.468749 +v 0.139022 0.062467 0.460912 +v 0.142474 0.054132 0.460912 +v 0.136982 0.046976 0.460912 +v 0.128039 0.048153 0.460912 +v 0.124587 0.056487 0.460912 +v 0.124587 0.056487 0.468749 +v 0.142474 0.054132 0.468749 +v 0.136982 0.046976 0.468749 +v 0.128039 0.048153 0.468749 +v 0.136982 0.046976 -0.460914 +v 0.136982 0.046976 -0.468751 +v 0.142474 0.054133 -0.468751 +v 0.142474 0.054133 -0.460914 +v 0.139022 0.062467 -0.460914 +v 0.130078 0.063644 -0.460914 +v 0.124587 0.056487 -0.460914 +v 0.128039 0.048153 -0.460914 +v 0.128039 0.048153 -0.468751 +v 0.139022 0.062467 -0.468751 +v 0.130078 0.063644 -0.468751 +v 0.124587 0.056487 -0.468751 +v 0.046976 0.136982 0.460912 +v 0.046976 0.136982 0.468749 +v 0.054133 0.142474 0.468749 +v 0.054133 0.142474 0.460912 +v 0.062467 0.139022 0.460912 +v 0.063644 0.130078 0.460912 +v 0.056488 0.124587 0.460912 +v 0.048154 0.128039 0.460912 +v 0.048154 0.128039 0.468749 +v 0.062467 0.139022 0.468749 +v 0.063644 0.130078 0.468749 +v 0.056488 0.124587 0.468749 +v 0.063644 0.130078 -0.460914 +v 0.063644 0.130078 -0.468751 +v 0.062467 0.139022 -0.468751 +v 0.062467 0.139022 -0.460914 +v 0.054133 0.142474 -0.460914 +v 0.046976 0.136982 -0.460914 +v 0.048153 0.128039 -0.460914 +v 0.056487 0.124587 -0.460914 +v 0.056487 0.124587 -0.468751 +v 0.054133 0.142474 -0.468751 +v 0.046976 0.136982 -0.468751 +v 0.048153 0.128039 -0.468751 +v 0.121367 0.099603 -0.500000 +v 0.138467 0.074012 -0.500000 +v 0.150245 0.045577 -0.500000 +v 0.156250 0.015390 -0.500000 +v 0.156250 -0.015389 -0.500000 +v 0.150245 -0.045576 -0.500000 +v 0.138467 -0.074012 -0.500000 +v 0.121367 -0.099603 -0.500000 +v 0.099603 -0.121367 -0.500000 +v 0.045576 -0.150245 -0.500000 +v -0.015389 -0.156250 -0.500000 +v -0.045576 -0.150245 -0.500000 +v -0.099603 -0.121367 -0.500000 +v -0.121367 -0.099603 -0.500000 +v -0.138467 -0.074012 -0.500000 +v -0.150245 -0.045576 -0.500000 +v -0.156250 -0.015389 -0.500000 +v -0.150245 0.045576 -0.500000 +v -0.138467 0.074012 -0.500000 +v -0.121367 0.099603 -0.500000 +v -0.074012 0.138467 -0.500000 +v -0.015389 0.156250 -0.500000 +v 0.015389 0.156250 -0.500000 +v 0.045576 0.150245 -0.500000 +v 0.074012 0.138467 -0.500000 +v 0.099603 0.121367 -0.500000 +v 0.074012 -0.138466 -0.500000 +v 0.015389 -0.156250 -0.500000 +v -0.074012 -0.138467 -0.500000 +v -0.156250 0.015389 -0.500000 +v -0.099603 0.121367 -0.500000 +v -0.045576 0.150245 -0.500000 +v 0.121367 0.099603 -0.468750 +v 0.099603 0.121367 -0.468750 +v 0.138467 0.074012 -0.468750 +v 0.150245 0.045577 -0.468750 +v 0.156250 0.015390 -0.468750 +v 0.156250 -0.015389 -0.468750 +v 0.150245 -0.045576 -0.468750 +v 0.138467 -0.074012 -0.468750 +v 0.121367 -0.099603 -0.468750 +v 0.099603 -0.121367 -0.468750 +v 0.074012 -0.138466 -0.468750 +v 0.045576 -0.150245 -0.468750 +v 0.015389 -0.156250 -0.468750 +v -0.015389 -0.156250 -0.468750 +v -0.045576 -0.150245 -0.468750 +v -0.074012 -0.138467 -0.468750 +v -0.099603 -0.121367 -0.468750 +v -0.121367 -0.099603 -0.468750 +v -0.138467 -0.074012 -0.468750 +v -0.150245 -0.045576 -0.468750 +v -0.156250 -0.015389 -0.468750 +v -0.156250 0.015389 -0.468750 +v -0.138467 0.074012 -0.468750 +v -0.150245 0.045576 -0.468750 +v -0.121367 0.099603 -0.468750 +v -0.099603 0.121367 -0.468750 +v -0.074012 0.138467 -0.468750 +v -0.045576 0.150245 -0.468750 +v 0.015389 0.156250 -0.468750 +v -0.015389 0.156250 -0.468750 +v 0.045576 0.150245 -0.468750 +v 0.074012 0.138467 -0.468750 +v 0.074012 -0.138466 0.468750 +v 0.045576 -0.150245 0.468750 +v 0.015389 -0.156250 0.468750 +v 0.099603 -0.121367 0.468750 +v -0.015389 -0.156250 0.468750 +v 0.138467 -0.074012 0.468750 +v 0.121367 -0.099603 0.468750 +v 0.099603 -0.121367 0.500000 +v 0.074012 -0.138467 0.500000 +v 0.045576 -0.150245 0.500000 +v 0.015389 -0.156250 0.500000 +v -0.015389 -0.156250 0.500000 +v 0.150245 -0.045576 0.468750 +v 0.121367 -0.099603 0.500000 +v -0.045576 -0.150245 0.468750 +v -0.045576 -0.150245 0.500000 +v 0.156250 -0.015389 0.468750 +v 0.150245 -0.045576 0.500000 +v 0.138467 -0.074012 0.500000 +v -0.074012 -0.138467 0.468750 +v -0.074012 -0.138467 0.500000 +v 0.156250 0.015389 0.468750 +v 0.156250 -0.015389 0.500000 +v -0.099603 -0.121367 0.468750 +v -0.099603 -0.121367 0.500000 +v 0.150245 0.045576 0.468750 +v 0.156250 0.015389 0.500000 +v -0.121367 -0.099603 0.468750 +v -0.121367 -0.099603 0.500000 +v 0.138467 0.074012 0.468750 +v 0.150245 0.045576 0.500000 +v -0.150245 -0.045576 0.468750 +v -0.138467 -0.074012 0.468750 +v -0.138467 -0.074012 0.500000 +v 0.121367 0.099603 0.468750 +v 0.138467 0.074012 0.500000 +v -0.156250 -0.015389 0.468750 +v -0.150245 -0.045576 0.500000 +v 0.099604 0.121367 0.468750 +v 0.121367 0.099603 0.500000 +v -0.156250 0.015389 0.468750 +v -0.156250 -0.015389 0.500000 +v 0.074012 0.138466 0.468750 +v 0.099604 0.121367 0.500000 +v -0.150245 0.045576 0.468750 +v -0.156250 0.015389 0.500000 +v 0.045577 0.150245 0.468750 +v 0.074012 0.138466 0.500000 +v -0.138467 0.074012 0.468750 +v -0.150245 0.045576 0.500000 +v 0.015390 0.156249 0.468750 +v 0.045577 0.150245 0.500000 +v -0.015389 0.156250 0.500000 +v -0.121367 0.099603 0.468750 +v -0.138466 0.074012 0.500000 +v -0.015389 0.156250 0.468750 +v 0.015390 0.156250 0.500000 +v -0.074012 0.138467 0.500000 +v -0.045576 0.150245 0.500000 +v -0.099603 0.121367 0.500000 +v -0.121367 0.099603 0.500000 +v -0.045576 0.150245 0.468750 +v -0.099603 0.121367 0.468750 +v -0.074012 0.138467 0.468750 +v -0.108578 0.095821 0.460912 +v -0.108578 0.095821 0.468749 +v -0.110913 0.104534 0.468749 +v -0.110913 0.104534 0.460912 +v -0.104534 0.110913 0.460912 +v -0.095821 0.108578 0.460912 +v -0.093486 0.099865 0.460912 +v -0.099865 0.093486 0.460912 +v -0.099865 0.093486 0.468749 +v -0.104534 0.110913 0.468749 +v -0.095821 0.108578 0.468749 +v -0.093486 0.099865 0.468749 +v -0.095821 0.108578 -0.460914 +v -0.095821 0.108578 -0.468751 +v -0.104534 0.110913 -0.468751 +v -0.104534 0.110913 -0.460914 +v -0.110913 0.104534 -0.460914 +v -0.108578 0.095821 -0.460914 +v -0.099865 0.093486 -0.460914 +v -0.093486 0.099865 -0.460914 +v -0.093486 0.099865 -0.468751 +v -0.110913 0.104534 -0.468751 +v -0.108578 0.095821 -0.468751 +v -0.099865 0.093486 -0.468751 +v -0.144532 -0.009021 0.460912 +v -0.144532 -0.009021 0.468749 +v -0.152344 -0.004510 0.468749 +v -0.152344 -0.004510 0.460912 +v -0.152344 0.004510 0.460912 +v -0.144532 0.009021 0.460912 +v -0.136720 0.004510 0.460912 +v -0.136720 -0.004510 0.460912 +v -0.136720 -0.004510 0.468749 +v -0.152344 0.004510 0.468749 +v -0.144532 0.009021 0.468749 +v -0.136720 0.004510 0.468749 +v -0.144532 0.009021 -0.460914 +v -0.144532 0.009021 -0.468751 +v -0.152344 0.004510 -0.468751 +v -0.152344 0.004510 -0.460914 +v -0.152344 -0.004510 -0.460914 +v -0.144532 -0.009021 -0.460914 +v -0.136720 -0.004510 -0.460914 +v -0.136720 0.004510 -0.460914 +v -0.136720 0.004510 -0.468751 +v -0.152344 -0.004510 -0.468751 +v -0.144532 -0.009021 -0.468751 +v -0.136720 -0.004510 -0.468751 +v -0.095821 -0.108578 0.460912 +v -0.095821 -0.108578 0.468749 +v -0.104534 -0.110913 0.468749 +v -0.104534 -0.110913 0.460912 +v -0.110913 -0.104534 0.460912 +v -0.108578 -0.095821 0.460912 +v -0.099865 -0.093486 0.460912 +v -0.093486 -0.099865 0.460912 +v -0.093486 -0.099865 0.468749 +v -0.110913 -0.104534 0.468749 +v -0.108578 -0.095821 0.468749 +v -0.099865 -0.093486 0.468749 +v -0.108578 -0.095821 -0.460914 +v -0.108578 -0.095821 -0.468751 +v -0.110913 -0.104534 -0.468751 +v -0.110913 -0.104534 -0.460914 +v -0.104534 -0.110913 -0.460914 +v -0.095821 -0.108578 -0.460914 +v -0.093486 -0.099865 -0.460914 +v -0.099865 -0.093486 -0.460914 +v -0.099865 -0.093486 -0.468751 +v -0.104534 -0.110913 -0.468751 +v -0.095821 -0.108578 -0.468751 +v -0.093486 -0.099865 -0.468751 +v 0.009021 -0.144532 0.460912 +v 0.009021 -0.144532 0.468749 +v 0.004510 -0.152344 0.468749 +v 0.004510 -0.152344 0.460912 +v -0.004510 -0.152344 0.460912 +v -0.009021 -0.144532 0.460912 +v -0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.468749 +v -0.004510 -0.152344 0.468749 +v -0.009021 -0.144532 0.468749 +v -0.004510 -0.136720 0.468749 +v -0.009021 -0.144532 -0.460914 +v -0.009021 -0.144532 -0.468751 +v -0.004510 -0.152344 -0.468751 +v -0.004510 -0.152344 -0.460914 +v 0.004510 -0.152344 -0.460914 +v 0.009021 -0.144532 -0.460914 +v 0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.468751 +v 0.004510 -0.152344 -0.468751 +v 0.009021 -0.144532 -0.468751 +v 0.004510 -0.136720 -0.468751 +v 0.108578 -0.095821 0.460912 +v 0.108578 -0.095821 0.468749 +v 0.110913 -0.104534 0.468749 +v 0.110913 -0.104534 0.460912 +v 0.104534 -0.110913 0.460912 +v 0.095821 -0.108578 0.460912 +v 0.093486 -0.099865 0.460912 +v 0.099865 -0.093486 0.460912 +v 0.099865 -0.093486 0.468749 +v 0.104534 -0.110913 0.468749 +v 0.095821 -0.108578 0.468749 +v 0.093486 -0.099865 0.468749 +v 0.095821 -0.108578 -0.460914 +v 0.095821 -0.108578 -0.468751 +v 0.104534 -0.110913 -0.468751 +v 0.104534 -0.110913 -0.460914 +v 0.110913 -0.104534 -0.460914 +v 0.108578 -0.095821 -0.460914 +v 0.099865 -0.093486 -0.460914 +v 0.093486 -0.099865 -0.460914 +v 0.093486 -0.099865 -0.468751 +v 0.110913 -0.104534 -0.468751 +v 0.108578 -0.095821 -0.468751 +v 0.099865 -0.093486 -0.468751 +v 0.144532 0.009021 0.460912 +v 0.144532 0.009021 0.468749 +v 0.152344 0.004510 0.468749 +v 0.152344 0.004510 0.460912 +v 0.152344 -0.004510 0.460912 +v 0.144532 -0.009021 0.460912 +v 0.136720 -0.004510 0.460912 +v 0.136720 0.004510 0.460912 +v 0.136720 0.004510 0.468749 +v 0.152344 -0.004510 0.468749 +v 0.144532 -0.009021 0.468749 +v 0.136720 -0.004510 0.468749 +v 0.144532 -0.009021 -0.460914 +v 0.144532 -0.009021 -0.468751 +v 0.152344 -0.004510 -0.468751 +v 0.152344 -0.004510 -0.460914 +v 0.152344 0.004510 -0.460914 +v 0.144532 0.009021 -0.460914 +v 0.136720 0.004510 -0.460914 +v 0.136720 -0.004510 -0.460914 +v 0.136720 -0.004510 -0.468751 +v 0.152344 0.004510 -0.468751 +v 0.144532 0.009021 -0.468751 +v 0.136720 0.004510 -0.468751 +v 0.095821 0.108578 0.460912 +v 0.095821 0.108578 0.468749 +v 0.104535 0.110913 0.468749 +v 0.104534 0.110913 0.460912 +v 0.110913 0.104534 0.460912 +v 0.108578 0.095821 0.460912 +v 0.099865 0.093486 0.460912 +v 0.093486 0.099865 0.460912 +v 0.093486 0.099865 0.468749 +v 0.110913 0.104534 0.468749 +v 0.108578 0.095821 0.468749 +v 0.099865 0.093486 0.468749 +v 0.108578 0.095821 -0.460914 +v 0.108578 0.095821 -0.468751 +v 0.110913 0.104534 -0.468751 +v 0.110913 0.104534 -0.460914 +v 0.104534 0.110913 -0.460914 +v 0.095821 0.108578 -0.460914 +v 0.093486 0.099865 -0.460914 +v 0.099865 0.093486 -0.460914 +v 0.099865 0.093486 -0.468751 +v 0.104534 0.110913 -0.468751 +v 0.095821 0.108578 -0.468751 +v 0.093486 0.099865 -0.468751 +v -0.009021 0.144532 0.460912 +v -0.009021 0.144532 0.468749 +v -0.004510 0.152344 0.468749 +v -0.004510 0.152344 0.460912 +v 0.004511 0.152344 0.460912 +v 0.009021 0.144532 0.460912 +v 0.004511 0.136720 0.460912 +v -0.004510 0.136720 0.460912 +v -0.004510 0.136720 0.468749 +v 0.004511 0.152344 0.468749 +v 0.009021 0.144532 0.468749 +v 0.004511 0.136720 0.468749 +v 0.009021 0.144532 -0.460914 +v 0.009021 0.144532 -0.468751 +v 0.004510 0.152344 -0.468751 +v 0.004510 0.152344 -0.460914 +v -0.004510 0.152344 -0.460914 +v -0.009021 0.144532 -0.460914 +v -0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.468751 +v -0.004510 0.152344 -0.468751 +v -0.009021 0.144532 -0.468751 +v -0.004510 0.136720 -0.468751 +v -0.067320 0.462058 -0.086693 +v -0.067320 0.442651 -0.110339 +v -0.067320 0.301871 -0.153043 +v -0.067320 0.272599 -0.144164 +v -0.067320 0.221975 0.110338 +v -0.067320 0.245622 0.129743 +v -0.067320 0.442652 0.110338 +v -0.067320 0.485357 0.030442 +v -0.067320 0.488356 0.000000 +v -0.067320 0.188150 0.059714 +v -0.067320 0.188150 -0.059714 +v -0.067320 0.362755 0.153043 +v -0.067320 0.419006 0.129743 +v -0.067320 0.419006 -0.129745 +v -0.067320 0.179270 0.030442 +v -0.067320 0.202570 -0.086693 +v -0.067320 0.476477 -0.059714 +v -0.067320 0.202570 0.086693 +v -0.067320 0.392027 -0.144164 +v -0.067320 0.362755 -0.153043 +v -0.067320 0.179270 -0.030442 +v -0.067320 0.245622 -0.129745 +v -0.067320 0.301871 0.153043 +v -0.067320 0.332313 0.156041 +v -0.067320 0.476477 0.059714 +v -0.067320 0.392028 0.144163 +v -0.067320 0.176272 0.000000 +v -0.067320 0.221975 -0.110338 +v -0.067320 0.272599 0.144164 +v -0.067320 0.332313 -0.156041 +v -0.067320 0.485357 -0.030442 +v -0.067320 0.462058 0.086693 +v 0.054059 0.221975 0.110338 +v 0.068130 0.233973 0.098340 +v 0.059213 0.222562 0.109751 +v 0.063558 0.224267 0.108046 +v 0.066671 0.226921 0.105392 +v 0.068246 0.230265 0.102048 +v 0.068130 0.255048 0.115636 +v 0.054059 0.245622 0.129743 +v 0.068246 0.252135 0.119995 +v 0.066671 0.249507 0.123928 +v 0.063558 0.247422 0.127049 +v 0.059213 0.246083 0.129053 +v 0.054059 0.188150 0.059714 +v 0.068130 0.203825 0.053221 +v 0.059213 0.188917 0.059397 +v 0.063558 0.191144 0.058474 +v 0.066671 0.194611 0.057038 +v 0.068246 0.198981 0.055228 +v 0.068130 0.216677 0.077266 +v 0.054059 0.202570 0.086693 +v 0.068246 0.212318 0.080179 +v 0.066671 0.208385 0.082807 +v 0.063558 0.205264 0.084892 +v 0.059213 0.203260 0.086231 +v 0.054059 0.179270 -0.030442 +v 0.068130 0.195911 -0.027132 +v 0.059213 0.180084 -0.030280 +v 0.063558 0.182448 -0.029810 +v 0.066671 0.186129 -0.029078 +v 0.068246 0.190768 -0.028155 +v 0.068130 0.193239 -0.000000 +v 0.054059 0.176272 0.000000 +v 0.068246 0.187996 0.000000 +v 0.066671 0.183266 0.000000 +v 0.063558 0.179512 0.000000 +v 0.059213 0.177102 0.000000 +v 0.054059 0.332313 0.156041 +v 0.068130 0.332313 0.139074 +v 0.059213 0.332313 0.155211 +v 0.063558 0.332313 0.152801 +v 0.066671 0.332313 0.149047 +v 0.068246 0.332313 0.144317 +v 0.068130 0.359445 0.136402 +v 0.054059 0.362755 0.153043 +v 0.068246 0.360468 0.141544 +v 0.066671 0.361391 0.146183 +v 0.063558 0.362123 0.149865 +v 0.059213 0.362593 0.152229 +v 0.054059 0.442651 -0.110339 +v 0.068130 0.430653 -0.098341 +v 0.059213 0.442063 -0.109752 +v 0.063558 0.440359 -0.108048 +v 0.066671 0.437705 -0.105393 +v 0.068246 0.434361 -0.102049 +v 0.068130 0.409579 -0.115637 +v 0.054059 0.419006 -0.129745 +v 0.068246 0.412492 -0.119996 +v 0.066671 0.415120 -0.123929 +v 0.063558 0.417205 -0.127050 +v 0.059213 0.418544 -0.129054 +v 0.054059 0.245622 -0.129745 +v 0.068130 0.255048 -0.115637 +v 0.059213 0.246083 -0.129054 +v 0.063558 0.247422 -0.127050 +v 0.066671 0.249507 -0.123929 +v 0.068246 0.252135 -0.119996 +v 0.068130 0.233973 -0.098340 +v 0.054059 0.221975 -0.110338 +v 0.068246 0.230265 -0.102048 +v 0.066671 0.226921 -0.105392 +v 0.063558 0.224267 -0.108046 +v 0.059213 0.222562 -0.109751 +v 0.054059 0.485356 -0.030442 +v 0.068130 0.468715 -0.027132 +v 0.059213 0.484542 -0.030280 +v 0.063558 0.482178 -0.029810 +v 0.066671 0.478496 -0.029078 +v 0.068246 0.473858 -0.028155 +v 0.068130 0.460802 -0.053221 +v 0.054059 0.476477 -0.059714 +v 0.068246 0.465646 -0.055228 +v 0.066671 0.470016 -0.057038 +v 0.063558 0.473484 -0.058474 +v 0.059213 0.475710 -0.059397 +v 0.068130 0.430654 0.098340 +v 0.054059 0.442652 0.110338 +v 0.068246 0.434362 0.102048 +v 0.066671 0.437706 0.105392 +v 0.063558 0.440361 0.108046 +v 0.059213 0.442065 0.109751 +v 0.054059 0.462058 0.086692 +v 0.068130 0.447950 0.077265 +v 0.059213 0.461367 0.086230 +v 0.063558 0.459363 0.084891 +v 0.066671 0.456242 0.082806 +v 0.068246 0.452309 0.080178 +v 0.068130 0.460802 0.053221 +v 0.054059 0.476477 0.059714 +v 0.068246 0.465646 0.055228 +v 0.066671 0.470016 0.057038 +v 0.063558 0.473484 0.058474 +v 0.059213 0.475710 0.059397 +v 0.068130 0.471388 -0.000000 +v 0.054059 0.488356 0.000000 +v 0.068246 0.476632 -0.000000 +v 0.066671 0.481361 -0.000000 +v 0.063558 0.485115 0.000000 +v 0.059213 0.487525 0.000000 +v 0.068130 0.385535 0.128488 +v 0.054059 0.392028 0.144163 +v 0.068246 0.387542 0.133332 +v 0.066671 0.389352 0.137702 +v 0.063558 0.390788 0.141169 +v 0.059213 0.391711 0.143396 +v 0.054059 0.188150 -0.059714 +v 0.068130 0.203825 -0.053221 +v 0.059213 0.188917 -0.059397 +v 0.063558 0.191144 -0.058474 +v 0.066671 0.194611 -0.057038 +v 0.068246 0.198981 -0.055228 +v 0.068130 0.332313 -0.139074 +v 0.054059 0.332313 -0.156041 +v 0.068246 0.332313 -0.144317 +v 0.066671 0.332313 -0.149047 +v 0.063558 0.332313 -0.152801 +v 0.059213 0.332313 -0.155211 +v 0.054059 0.362755 -0.153043 +v 0.068130 0.359445 -0.136402 +v 0.059213 0.362593 -0.152229 +v 0.063558 0.362123 -0.149865 +v 0.066671 0.361391 -0.146183 +v 0.068246 0.360468 -0.141544 +v 0.068130 0.279092 0.128488 +v 0.054059 0.272599 0.144163 +v 0.068246 0.277085 0.133332 +v 0.066671 0.275275 0.137702 +v 0.063558 0.273839 0.141170 +v 0.059213 0.272916 0.143396 +v 0.068130 0.468716 0.027132 +v 0.054059 0.485357 0.030442 +v 0.068246 0.473859 0.028155 +v 0.066671 0.478498 0.029078 +v 0.063558 0.482179 0.029810 +v 0.059213 0.484543 0.030280 +v 0.054059 0.272599 -0.144164 +v 0.068130 0.279092 -0.128489 +v 0.059213 0.272916 -0.143397 +v 0.063558 0.273839 -0.141171 +v 0.066671 0.275275 -0.137703 +v 0.068246 0.277085 -0.133333 +v 0.068130 0.385534 -0.128489 +v 0.054059 0.392027 -0.144164 +v 0.068246 0.387541 -0.133333 +v 0.066671 0.389351 -0.137703 +v 0.063558 0.390787 -0.141171 +v 0.059213 0.391710 -0.143397 +v 0.068130 0.409579 0.115636 +v 0.054059 0.419006 0.129743 +v 0.068246 0.412492 0.119995 +v 0.066671 0.415120 0.123928 +v 0.063558 0.417205 0.127049 +v 0.059213 0.418544 0.129053 +v 0.054059 0.301871 -0.153043 +v 0.068130 0.305181 -0.136402 +v 0.059213 0.302033 -0.152229 +v 0.063558 0.302503 -0.149865 +v 0.066671 0.303235 -0.146183 +v 0.068246 0.304158 -0.141544 +v 0.068130 0.305181 0.136402 +v 0.054059 0.301871 0.153043 +v 0.068246 0.304158 0.141544 +v 0.066671 0.303235 0.146183 +v 0.063558 0.302503 0.149865 +v 0.059213 0.302033 0.152229 +v 0.054059 0.179270 0.030442 +v 0.068130 0.195911 0.027132 +v 0.059213 0.180084 0.030280 +v 0.063558 0.182448 0.029810 +v 0.066671 0.186129 0.029078 +v 0.068246 0.190768 0.028155 +v 0.054059 0.202570 -0.086693 +v 0.068130 0.216677 -0.077266 +v 0.059213 0.203260 -0.086231 +v 0.063558 0.205264 -0.084892 +v 0.066671 0.208385 -0.082807 +v 0.068246 0.212318 -0.080179 +v 0.068130 0.447950 -0.077266 +v 0.054059 0.462058 -0.086693 +v 0.068246 0.452309 -0.080179 +v 0.066671 0.456242 -0.082807 +v 0.063558 0.459363 -0.084892 +v 0.059213 0.461367 -0.086231 +v -0.006370 0.145781 0.043789 +v -0.025121 0.145781 0.036022 +v -0.036022 0.145781 0.025121 +v -0.043789 0.145781 0.006370 +v 0.043789 0.145781 0.006370 +v 0.036022 0.145781 0.025121 +v 0.025121 0.145781 0.036022 +v 0.006370 0.145781 0.043789 +v 0.006370 0.145781 -0.043789 +v 0.025121 0.145781 -0.036022 +v 0.036022 0.145781 -0.025121 +v 0.043789 0.145781 -0.006370 +v -0.043789 0.145781 -0.006370 +v -0.036022 0.145781 -0.025121 +v -0.025121 0.145781 -0.036022 +v -0.006370 0.145781 -0.043789 +v 0.006370 0.205781 0.043789 +v 0.025121 0.205781 0.036022 +v 0.036022 0.205781 0.025121 +v 0.043789 0.205781 0.006370 +v -0.043789 0.205781 0.006370 +v -0.036022 0.205781 0.025121 +v -0.025121 0.205781 0.036022 +v -0.006370 0.205781 0.043789 +v -0.006370 0.205781 -0.043789 +v -0.025121 0.205781 -0.036022 +v -0.036022 0.205781 -0.025121 +v -0.043789 0.205781 -0.006370 +v 0.043789 0.205781 -0.006370 +v 0.036022 0.205781 -0.025121 +v 0.025121 0.205781 -0.036022 +v 0.006370 0.205781 -0.043789 +v -0.008343 0.156250 0.064591 +v -0.007057 0.110420 0.143970 +v -0.007425 0.123508 0.134806 +v -0.007742 0.134806 0.123508 +v -0.007999 0.143970 0.110420 +v -0.008188 0.150722 0.095940 +v -0.008304 0.154857 0.080507 +v -0.156250 0.008343 0.064591 +v -0.110420 0.007057 0.143970 +v -0.123508 0.007425 0.134806 +v -0.134806 0.007742 0.123508 +v -0.143970 0.007999 0.110420 +v -0.150722 0.008188 0.095940 +v -0.154857 0.008304 0.080507 +v -0.024904 0.155320 0.064591 +v -0.019764 0.109707 0.143970 +v -0.021232 0.122733 0.134806 +v -0.022499 0.133977 0.123508 +v -0.023526 0.143098 0.110420 +v -0.024284 0.149818 0.095940 +v -0.024747 0.153934 0.080507 +v -0.041256 0.152542 0.064591 +v -0.031042 0.107791 0.143970 +v -0.033958 0.120571 0.134806 +v -0.036476 0.131602 0.123508 +v -0.038519 0.140551 0.110420 +v -0.040024 0.147144 0.095940 +v -0.040945 0.151182 0.080507 +v -0.057194 0.147950 0.064591 +v -0.042033 0.104624 0.143970 +v -0.046363 0.116997 0.134806 +v -0.050100 0.127677 0.123508 +v -0.053132 0.136341 0.110420 +v -0.055365 0.142724 0.095940 +v -0.056733 0.146634 0.080507 +v -0.072518 0.141603 0.064591 +v -0.052602 0.100247 0.143970 +v -0.058289 0.112057 0.134806 +v -0.063199 0.122252 0.123508 +v -0.067181 0.130521 0.110420 +v -0.070115 0.136614 0.095940 +v -0.071912 0.140346 0.080507 +v -0.087034 0.133579 0.064591 +v -0.062613 0.094713 0.143970 +v -0.069587 0.105813 0.134806 +v -0.075607 0.115394 0.123508 +v -0.080491 0.123165 0.110420 +v -0.084089 0.128892 0.095940 +v -0.086292 0.132399 0.080507 +v -0.100562 0.123981 0.064591 +v -0.071942 0.088094 0.143970 +v -0.080115 0.098343 0.134806 +v -0.087170 0.107189 0.123508 +v -0.092893 0.114365 0.110420 +v -0.097110 0.119653 0.095940 +v -0.099692 0.122891 0.080507 +v -0.112929 0.112929 0.064591 +v -0.080472 0.080472 0.143970 +v -0.089741 0.089741 0.134806 +v -0.097742 0.097742 0.123508 +v -0.104232 0.104232 0.110420 +v -0.109014 0.109014 0.095940 +v -0.111943 0.111943 0.080507 +v -0.123981 0.100562 0.064591 +v -0.088094 0.071942 0.143970 +v -0.098343 0.080115 0.134806 +v -0.107189 0.087170 0.123508 +v -0.114365 0.092893 0.110420 +v -0.119653 0.097110 0.095940 +v -0.122891 0.099692 0.080507 +v -0.133579 0.087034 0.064591 +v -0.094713 0.062613 0.143970 +v -0.105813 0.069587 0.134806 +v -0.115394 0.075607 0.123508 +v -0.123165 0.080491 0.110420 +v -0.128892 0.084089 0.095940 +v -0.132399 0.086292 0.080507 +v -0.141603 0.072518 0.064591 +v -0.100247 0.052602 0.143970 +v -0.112057 0.058289 0.134806 +v -0.122252 0.063199 0.123508 +v -0.130521 0.067181 0.110420 +v -0.136614 0.070115 0.095940 +v -0.140346 0.071912 0.080507 +v -0.147950 0.057194 0.064591 +v -0.104624 0.042033 0.143970 +v -0.116997 0.046363 0.134806 +v -0.127677 0.050100 0.123508 +v -0.136341 0.053132 0.110420 +v -0.142724 0.055365 0.095940 +v -0.146634 0.056733 0.080507 +v -0.152542 0.041256 0.064591 +v -0.107791 0.031041 0.143970 +v -0.120571 0.033958 0.134806 +v -0.131602 0.036476 0.123508 +v -0.140551 0.038519 0.110420 +v -0.147144 0.040024 0.095940 +v -0.151182 0.040945 0.080507 +v -0.155320 0.024904 0.064591 +v -0.109707 0.019764 0.143970 +v -0.122733 0.021232 0.134806 +v -0.133977 0.022499 0.123508 +v -0.143098 0.023526 0.110420 +v -0.149818 0.024284 0.095940 +v -0.153934 0.024747 0.080507 +v -0.156250 0.008343 -0.064591 +v -0.110420 0.007057 -0.143970 +v -0.123508 0.007425 -0.134806 +v -0.134806 0.007742 -0.123508 +v -0.143970 0.007999 -0.110420 +v -0.150722 0.008188 -0.095940 +v -0.154858 0.008304 -0.080507 +v -0.008343 0.156250 -0.064591 +v -0.007057 0.110420 -0.143970 +v -0.007425 0.123508 -0.134806 +v -0.007742 0.134806 -0.123508 +v -0.007999 0.143970 -0.110420 +v -0.008188 0.150722 -0.095940 +v -0.008304 0.154857 -0.080507 +v -0.155320 0.024904 -0.064591 +v -0.109707 0.019764 -0.143970 +v -0.122733 0.021232 -0.134806 +v -0.133977 0.022499 -0.123508 +v -0.143098 0.023526 -0.110420 +v -0.149818 0.024284 -0.095940 +v -0.153934 0.024747 -0.080507 +v -0.152542 0.041256 -0.064591 +v -0.107791 0.031042 -0.143970 +v -0.120571 0.033958 -0.134806 +v -0.131602 0.036476 -0.123508 +v -0.140551 0.038519 -0.110420 +v -0.147144 0.040024 -0.095940 +v -0.151182 0.040945 -0.080507 +v -0.147950 0.057194 -0.064591 +v -0.104624 0.042033 -0.143970 +v -0.116997 0.046363 -0.134806 +v -0.127677 0.050100 -0.123508 +v -0.136341 0.053132 -0.110420 +v -0.142724 0.055365 -0.095940 +v -0.146634 0.056733 -0.080507 +v -0.141603 0.072518 -0.064591 +v -0.100247 0.052602 -0.143970 +v -0.112057 0.058289 -0.134806 +v -0.122252 0.063199 -0.123508 +v -0.130521 0.067181 -0.110420 +v -0.136614 0.070115 -0.095940 +v -0.140346 0.071912 -0.080507 +v -0.133579 0.087034 -0.064591 +v -0.094713 0.062613 -0.143970 +v -0.105813 0.069587 -0.134806 +v -0.115394 0.075607 -0.123508 +v -0.123165 0.080491 -0.110420 +v -0.128892 0.084089 -0.095940 +v -0.132399 0.086292 -0.080507 +v -0.123981 0.100562 -0.064591 +v -0.088094 0.071942 -0.143970 +v -0.098343 0.080115 -0.134806 +v -0.107189 0.087170 -0.123508 +v -0.114365 0.092893 -0.110420 +v -0.119653 0.097110 -0.095940 +v -0.122891 0.099692 -0.080507 +v -0.112929 0.112929 -0.064591 +v -0.080472 0.080472 -0.143970 +v -0.089741 0.089741 -0.134806 +v -0.097742 0.097742 -0.123508 +v -0.104232 0.104232 -0.110420 +v -0.109014 0.109014 -0.095940 +v -0.111943 0.111943 -0.080507 +v -0.100562 0.123981 -0.064591 +v -0.071942 0.088094 -0.143970 +v -0.080115 0.098343 -0.134806 +v -0.087170 0.107189 -0.123508 +v -0.092893 0.114365 -0.110420 +v -0.097110 0.119653 -0.095940 +v -0.099692 0.122891 -0.080507 +v -0.087034 0.133579 -0.064591 +v -0.062613 0.094713 -0.143970 +v -0.069587 0.105813 -0.134806 +v -0.075607 0.115394 -0.123508 +v -0.080491 0.123165 -0.110420 +v -0.084089 0.128892 -0.095940 +v -0.086292 0.132399 -0.080507 +v -0.072518 0.141603 -0.064591 +v -0.052602 0.100247 -0.143970 +v -0.058289 0.112057 -0.134806 +v -0.063199 0.122252 -0.123508 +v -0.067181 0.130521 -0.110420 +v -0.070115 0.136614 -0.095940 +v -0.071912 0.140346 -0.080507 +v -0.057194 0.147950 -0.064591 +v -0.042033 0.104624 -0.143970 +v -0.046363 0.116997 -0.134806 +v -0.050100 0.127677 -0.123508 +v -0.053132 0.136341 -0.110420 +v -0.055365 0.142724 -0.095940 +v -0.056733 0.146634 -0.080507 +v -0.041256 0.152542 -0.064591 +v -0.031041 0.107791 -0.143970 +v -0.033958 0.120570 -0.134806 +v -0.036476 0.131602 -0.123508 +v -0.038519 0.140551 -0.110420 +v -0.040024 0.147144 -0.095940 +v -0.040945 0.151182 -0.080507 +v -0.024904 0.155320 -0.064591 +v -0.019764 0.109707 -0.143970 +v -0.021232 0.122733 -0.134806 +v -0.022499 0.133977 -0.123508 +v -0.023526 0.143098 -0.110420 +v -0.024284 0.149818 -0.095940 +v -0.024747 0.153934 -0.080507 +v -0.008343 -0.156250 -0.064591 +v -0.007057 -0.110420 -0.143970 +v -0.007425 -0.123508 -0.134806 +v -0.007742 -0.134806 -0.123508 +v -0.007999 -0.143970 -0.110420 +v -0.008188 -0.150722 -0.095940 +v -0.008304 -0.154857 -0.080507 +v -0.156250 -0.008343 -0.064591 +v -0.110420 -0.007057 -0.143970 +v -0.123508 -0.007425 -0.134806 +v -0.134806 -0.007742 -0.123508 +v -0.143970 -0.007999 -0.110420 +v -0.150722 -0.008188 -0.095940 +v -0.154857 -0.008304 -0.080507 +v -0.024904 -0.155320 -0.064591 +v -0.019764 -0.109707 -0.143970 +v -0.021232 -0.122733 -0.134806 +v -0.022499 -0.133977 -0.123508 +v -0.023526 -0.143098 -0.110420 +v -0.024284 -0.149818 -0.095940 +v -0.024747 -0.153934 -0.080507 +v -0.041256 -0.152542 -0.064591 +v -0.031042 -0.107791 -0.143970 +v -0.033958 -0.120571 -0.134806 +v -0.036476 -0.131602 -0.123508 +v -0.038519 -0.140551 -0.110420 +v -0.040024 -0.147144 -0.095940 +v -0.040945 -0.151182 -0.080507 +v -0.057194 -0.147950 -0.064591 +v -0.042033 -0.104624 -0.143970 +v -0.046363 -0.116997 -0.134806 +v -0.050100 -0.127677 -0.123508 +v -0.053132 -0.136341 -0.110420 +v -0.055365 -0.142724 -0.095940 +v -0.056733 -0.146634 -0.080507 +v -0.072518 -0.141603 -0.064591 +v -0.052602 -0.100247 -0.143970 +v -0.058289 -0.112057 -0.134806 +v -0.063199 -0.122252 -0.123508 +v -0.067181 -0.130521 -0.110420 +v -0.070115 -0.136614 -0.095940 +v -0.071912 -0.140346 -0.080507 +v -0.087034 -0.133579 -0.064591 +v -0.062613 -0.094713 -0.143970 +v -0.069587 -0.105813 -0.134806 +v -0.075607 -0.115394 -0.123508 +v -0.080491 -0.123165 -0.110420 +v -0.084089 -0.128892 -0.095940 +v -0.086292 -0.132399 -0.080507 +v -0.100562 -0.123981 -0.064591 +v -0.071942 -0.088094 -0.143970 +v -0.080115 -0.098343 -0.134806 +v -0.087170 -0.107189 -0.123508 +v -0.092893 -0.114365 -0.110420 +v -0.097110 -0.119653 -0.095940 +v -0.099692 -0.122891 -0.080507 +v -0.112929 -0.112929 -0.064591 +v -0.080472 -0.080472 -0.143970 +v -0.089741 -0.089741 -0.134806 +v -0.097742 -0.097742 -0.123508 +v -0.104232 -0.104232 -0.110420 +v -0.109014 -0.109014 -0.095940 +v -0.111943 -0.111943 -0.080507 +v -0.123981 -0.100562 -0.064591 +v -0.088094 -0.071942 -0.143970 +v -0.098343 -0.080115 -0.134806 +v -0.107189 -0.087170 -0.123508 +v -0.114365 -0.092893 -0.110420 +v -0.119653 -0.097110 -0.095940 +v -0.122891 -0.099692 -0.080507 +v -0.133579 -0.087034 -0.064591 +v -0.094713 -0.062613 -0.143970 +v -0.105813 -0.069587 -0.134806 +v -0.115394 -0.075607 -0.123508 +v -0.123165 -0.080491 -0.110420 +v -0.128892 -0.084089 -0.095940 +v -0.132399 -0.086292 -0.080507 +v -0.141603 -0.072518 -0.064591 +v -0.100247 -0.052602 -0.143970 +v -0.112057 -0.058289 -0.134806 +v -0.122252 -0.063199 -0.123508 +v -0.130521 -0.067181 -0.110420 +v -0.136614 -0.070115 -0.095940 +v -0.140346 -0.071912 -0.080507 +v -0.147950 -0.057194 -0.064591 +v -0.104624 -0.042033 -0.143970 +v -0.116997 -0.046363 -0.134806 +v -0.127677 -0.050100 -0.123508 +v -0.136341 -0.053132 -0.110420 +v -0.142724 -0.055365 -0.095940 +v -0.146634 -0.056733 -0.080507 +v -0.152542 -0.041256 -0.064591 +v -0.107791 -0.031041 -0.143970 +v -0.120571 -0.033958 -0.134806 +v -0.131602 -0.036476 -0.123508 +v -0.140551 -0.038519 -0.110420 +v -0.147144 -0.040024 -0.095940 +v -0.151182 -0.040945 -0.080507 +v -0.155320 -0.024904 -0.064591 +v -0.109707 -0.019764 -0.143970 +v -0.122733 -0.021232 -0.134806 +v -0.133977 -0.022499 -0.123508 +v -0.143098 -0.023526 -0.110420 +v -0.149818 -0.024284 -0.095940 +v -0.153934 -0.024747 -0.080507 +v -0.156250 -0.008343 0.064591 +v -0.110420 -0.007057 0.143970 +v -0.123508 -0.007425 0.134806 +v -0.134806 -0.007742 0.123508 +v -0.143970 -0.007999 0.110420 +v -0.150722 -0.008188 0.095940 +v -0.154858 -0.008304 0.080507 +v -0.008343 -0.156250 0.064591 +v -0.007057 -0.110420 0.143970 +v -0.007425 -0.123508 0.134806 +v -0.007742 -0.134806 0.123508 +v -0.007999 -0.143970 0.110420 +v -0.008188 -0.150722 0.095940 +v -0.008304 -0.154857 0.080507 +v -0.155320 -0.024904 0.064591 +v -0.109707 -0.019764 0.143970 +v -0.122733 -0.021232 0.134806 +v -0.133977 -0.022499 0.123508 +v -0.143098 -0.023526 0.110420 +v -0.149818 -0.024284 0.095940 +v -0.153934 -0.024747 0.080507 +v -0.152542 -0.041256 0.064591 +v -0.107791 -0.031042 0.143970 +v -0.120571 -0.033958 0.134806 +v -0.131602 -0.036476 0.123508 +v -0.140551 -0.038519 0.110420 +v -0.147144 -0.040024 0.095940 +v -0.151182 -0.040945 0.080507 +v -0.147950 -0.057194 0.064591 +v -0.104624 -0.042033 0.143970 +v -0.116997 -0.046363 0.134806 +v -0.127677 -0.050100 0.123508 +v -0.136341 -0.053132 0.110420 +v -0.142724 -0.055365 0.095940 +v -0.146634 -0.056733 0.080507 +v -0.141603 -0.072518 0.064591 +v -0.100247 -0.052602 0.143970 +v -0.112057 -0.058289 0.134806 +v -0.122252 -0.063199 0.123508 +v -0.130521 -0.067181 0.110420 +v -0.136614 -0.070115 0.095940 +v -0.140346 -0.071912 0.080507 +v -0.133579 -0.087034 0.064591 +v -0.094713 -0.062613 0.143970 +v -0.105813 -0.069587 0.134806 +v -0.115394 -0.075607 0.123508 +v -0.123165 -0.080491 0.110420 +v -0.128892 -0.084089 0.095940 +v -0.132399 -0.086292 0.080507 +v -0.123981 -0.100562 0.064591 +v -0.088094 -0.071942 0.143970 +v -0.098343 -0.080115 0.134806 +v -0.107189 -0.087170 0.123508 +v -0.114365 -0.092893 0.110420 +v -0.119653 -0.097110 0.095940 +v -0.122891 -0.099692 0.080507 +v -0.112929 -0.112929 0.064591 +v -0.080472 -0.080472 0.143970 +v -0.089741 -0.089741 0.134806 +v -0.097742 -0.097742 0.123508 +v -0.104232 -0.104232 0.110420 +v -0.109014 -0.109014 0.095940 +v -0.111943 -0.111943 0.080507 +v -0.100562 -0.123981 0.064591 +v -0.071942 -0.088094 0.143970 +v -0.080115 -0.098343 0.134806 +v -0.087170 -0.107189 0.123508 +v -0.092893 -0.114365 0.110420 +v -0.097110 -0.119653 0.095940 +v -0.099692 -0.122891 0.080507 +v -0.087034 -0.133579 0.064591 +v -0.062613 -0.094713 0.143970 +v -0.069587 -0.105813 0.134806 +v -0.075607 -0.115394 0.123508 +v -0.080491 -0.123165 0.110420 +v -0.084089 -0.128892 0.095940 +v -0.086292 -0.132399 0.080507 +v -0.072518 -0.141603 0.064591 +v -0.052602 -0.100247 0.143970 +v -0.058289 -0.112057 0.134806 +v -0.063199 -0.122252 0.123508 +v -0.067181 -0.130521 0.110420 +v -0.070115 -0.136614 0.095940 +v -0.071912 -0.140346 0.080507 +v -0.057194 -0.147950 0.064591 +v -0.042033 -0.104624 0.143970 +v -0.046363 -0.116997 0.134806 +v -0.050100 -0.127677 0.123508 +v -0.053132 -0.136341 0.110420 +v -0.055365 -0.142724 0.095940 +v -0.056733 -0.146634 0.080507 +v -0.041256 -0.152542 0.064591 +v -0.031041 -0.107791 0.143970 +v -0.033958 -0.120571 0.134806 +v -0.036476 -0.131602 0.123508 +v -0.038519 -0.140551 0.110420 +v -0.040024 -0.147144 0.095940 +v -0.040945 -0.151182 0.080507 +v -0.024904 -0.155320 0.064591 +v -0.019764 -0.109707 0.143970 +v -0.021232 -0.122733 0.134806 +v -0.022499 -0.133977 0.123508 +v -0.023526 -0.143098 0.110420 +v -0.024284 -0.149818 0.095940 +v -0.024747 -0.153934 0.080507 +v 0.008343 0.156250 -0.064591 +v 0.007057 0.110420 -0.143970 +v 0.007425 0.123508 -0.134806 +v 0.007742 0.134806 -0.123508 +v 0.007999 0.143970 -0.110420 +v 0.008188 0.150722 -0.095940 +v 0.008304 0.154857 -0.080507 +v 0.156250 0.008343 -0.064591 +v 0.110420 0.007057 -0.143970 +v 0.123508 0.007425 -0.134806 +v 0.134806 0.007742 -0.123508 +v 0.143970 0.007999 -0.110420 +v 0.150722 0.008188 -0.095940 +v 0.154857 0.008304 -0.080507 +v 0.024904 0.155320 -0.064591 +v 0.019764 0.109707 -0.143970 +v 0.021232 0.122733 -0.134806 +v 0.022499 0.133977 -0.123508 +v 0.023526 0.143098 -0.110420 +v 0.024284 0.149818 -0.095940 +v 0.024747 0.153934 -0.080507 +v 0.041256 0.152542 -0.064591 +v 0.031042 0.107791 -0.143970 +v 0.033958 0.120571 -0.134806 +v 0.036476 0.131602 -0.123508 +v 0.038519 0.140551 -0.110420 +v 0.040024 0.147144 -0.095940 +v 0.040945 0.151182 -0.080507 +v 0.057194 0.147950 -0.064591 +v 0.042033 0.104624 -0.143970 +v 0.046363 0.116997 -0.134806 +v 0.050100 0.127677 -0.123508 +v 0.053132 0.136341 -0.110420 +v 0.055365 0.142724 -0.095940 +v 0.056733 0.146634 -0.080507 +v 0.072518 0.141603 -0.064591 +v 0.052602 0.100247 -0.143970 +v 0.058289 0.112057 -0.134806 +v 0.063199 0.122252 -0.123508 +v 0.067181 0.130521 -0.110420 +v 0.070115 0.136614 -0.095940 +v 0.071912 0.140346 -0.080507 +v 0.087034 0.133579 -0.064591 +v 0.062613 0.094713 -0.143970 +v 0.069587 0.105813 -0.134806 +v 0.075607 0.115394 -0.123508 +v 0.080491 0.123165 -0.110420 +v 0.084089 0.128892 -0.095940 +v 0.086292 0.132399 -0.080507 +v 0.100562 0.123981 -0.064591 +v 0.071942 0.088094 -0.143970 +v 0.080115 0.098343 -0.134806 +v 0.087170 0.107189 -0.123508 +v 0.092893 0.114365 -0.110420 +v 0.097110 0.119653 -0.095940 +v 0.099692 0.122891 -0.080507 +v 0.112929 0.112929 -0.064591 +v 0.080472 0.080472 -0.143970 +v 0.089741 0.089741 -0.134806 +v 0.097742 0.097742 -0.123508 +v 0.104232 0.104232 -0.110420 +v 0.109014 0.109014 -0.095940 +v 0.111943 0.111943 -0.080507 +v 0.123981 0.100562 -0.064591 +v 0.088094 0.071942 -0.143970 +v 0.098343 0.080115 -0.134806 +v 0.107189 0.087170 -0.123508 +v 0.114365 0.092893 -0.110420 +v 0.119653 0.097110 -0.095940 +v 0.122891 0.099692 -0.080507 +v 0.133579 0.087034 -0.064591 +v 0.094713 0.062613 -0.143970 +v 0.105813 0.069587 -0.134806 +v 0.115394 0.075607 -0.123508 +v 0.123165 0.080491 -0.110420 +v 0.128892 0.084089 -0.095940 +v 0.132399 0.086292 -0.080507 +v 0.141603 0.072518 -0.064591 +v 0.100247 0.052602 -0.143970 +v 0.112057 0.058289 -0.134806 +v 0.122252 0.063199 -0.123508 +v 0.130521 0.067181 -0.110420 +v 0.136614 0.070115 -0.095940 +v 0.140346 0.071912 -0.080507 +v 0.147950 0.057194 -0.064591 +v 0.104624 0.042033 -0.143970 +v 0.116997 0.046363 -0.134806 +v 0.127677 0.050100 -0.123508 +v 0.136341 0.053132 -0.110420 +v 0.142724 0.055365 -0.095940 +v 0.146634 0.056733 -0.080507 +v 0.152542 0.041256 -0.064591 +v 0.107791 0.031041 -0.143970 +v 0.120571 0.033958 -0.134806 +v 0.131602 0.036476 -0.123508 +v 0.140551 0.038519 -0.110420 +v 0.147144 0.040024 -0.095940 +v 0.151182 0.040945 -0.080507 +v 0.155320 0.024904 -0.064591 +v 0.109707 0.019764 -0.143970 +v 0.122733 0.021232 -0.134806 +v 0.133977 0.022499 -0.123508 +v 0.143098 0.023526 -0.110420 +v 0.149818 0.024284 -0.095940 +v 0.153934 0.024747 -0.080507 +v 0.156250 -0.008343 -0.064591 +v 0.110420 -0.007057 -0.143970 +v 0.123508 -0.007425 -0.134806 +v 0.134806 -0.007742 -0.123508 +v 0.143970 -0.007999 -0.110420 +v 0.150722 -0.008188 -0.095940 +v 0.154858 -0.008304 -0.080507 +v 0.008343 -0.156250 -0.064591 +v 0.007057 -0.110420 -0.143970 +v 0.007425 -0.123508 -0.134806 +v 0.007742 -0.134806 -0.123508 +v 0.007999 -0.143970 -0.110420 +v 0.008188 -0.150722 -0.095940 +v 0.008304 -0.154857 -0.080507 +v 0.155320 -0.024904 -0.064591 +v 0.109707 -0.019764 -0.143970 +v 0.122733 -0.021232 -0.134806 +v 0.133977 -0.022499 -0.123508 +v 0.143098 -0.023526 -0.110420 +v 0.149818 -0.024284 -0.095940 +v 0.153934 -0.024747 -0.080507 +v 0.152542 -0.041256 -0.064591 +v 0.107791 -0.031042 -0.143970 +v 0.120571 -0.033958 -0.134806 +v 0.131602 -0.036476 -0.123508 +v 0.140551 -0.038519 -0.110420 +v 0.147144 -0.040024 -0.095940 +v 0.151182 -0.040945 -0.080507 +v 0.147950 -0.057194 -0.064591 +v 0.104624 -0.042033 -0.143970 +v 0.116997 -0.046363 -0.134806 +v 0.127677 -0.050100 -0.123508 +v 0.136341 -0.053132 -0.110420 +v 0.142724 -0.055365 -0.095940 +v 0.146634 -0.056733 -0.080507 +v 0.141603 -0.072518 -0.064591 +v 0.100247 -0.052602 -0.143970 +v 0.112057 -0.058289 -0.134806 +v 0.122252 -0.063199 -0.123508 +v 0.130521 -0.067181 -0.110420 +v 0.136614 -0.070115 -0.095940 +v 0.140346 -0.071912 -0.080507 +v 0.133579 -0.087034 -0.064591 +v 0.094713 -0.062613 -0.143970 +v 0.105813 -0.069587 -0.134806 +v 0.115394 -0.075607 -0.123508 +v 0.123165 -0.080491 -0.110420 +v 0.128892 -0.084089 -0.095940 +v 0.132399 -0.086292 -0.080507 +v 0.123981 -0.100562 -0.064591 +v 0.088094 -0.071942 -0.143970 +v 0.098343 -0.080115 -0.134806 +v 0.107189 -0.087170 -0.123508 +v 0.114365 -0.092893 -0.110420 +v 0.119653 -0.097110 -0.095940 +v 0.122891 -0.099692 -0.080507 +v 0.112929 -0.112929 -0.064591 +v 0.080472 -0.080472 -0.143970 +v 0.089741 -0.089741 -0.134806 +v 0.097742 -0.097742 -0.123508 +v 0.104232 -0.104232 -0.110420 +v 0.109014 -0.109014 -0.095940 +v 0.111943 -0.111943 -0.080507 +v 0.100562 -0.123981 -0.064591 +v 0.071942 -0.088094 -0.143970 +v 0.080115 -0.098343 -0.134806 +v 0.087170 -0.107189 -0.123508 +v 0.092893 -0.114365 -0.110420 +v 0.097110 -0.119653 -0.095940 +v 0.099692 -0.122891 -0.080507 +v 0.087034 -0.133579 -0.064591 +v 0.062613 -0.094713 -0.143970 +v 0.069587 -0.105813 -0.134806 +v 0.075607 -0.115394 -0.123508 +v 0.080491 -0.123165 -0.110420 +v 0.084089 -0.128892 -0.095940 +v 0.086292 -0.132399 -0.080507 +v 0.072518 -0.141603 -0.064591 +v 0.052602 -0.100247 -0.143970 +v 0.058289 -0.112057 -0.134806 +v 0.063199 -0.122252 -0.123508 +v 0.067181 -0.130521 -0.110420 +v 0.070115 -0.136614 -0.095940 +v 0.071912 -0.140346 -0.080507 +v 0.057194 -0.147950 -0.064591 +v 0.042033 -0.104624 -0.143970 +v 0.046363 -0.116997 -0.134806 +v 0.050100 -0.127677 -0.123508 +v 0.053132 -0.136341 -0.110420 +v 0.055365 -0.142724 -0.095940 +v 0.056733 -0.146634 -0.080507 +v 0.041256 -0.152542 -0.064591 +v 0.031041 -0.107791 -0.143970 +v 0.033958 -0.120571 -0.134806 +v 0.036476 -0.131602 -0.123508 +v 0.038519 -0.140551 -0.110420 +v 0.040024 -0.147144 -0.095940 +v 0.040945 -0.151182 -0.080507 +v 0.024904 -0.155320 -0.064591 +v 0.019764 -0.109707 -0.143970 +v 0.021232 -0.122733 -0.134806 +v 0.022499 -0.133977 -0.123508 +v 0.023526 -0.143098 -0.110420 +v 0.024284 -0.149818 -0.095940 +v 0.024747 -0.153934 -0.080507 +v 0.156250 0.008343 0.064591 +v 0.110420 0.007057 0.143970 +v 0.123508 0.007425 0.134806 +v 0.134806 0.007742 0.123508 +v 0.143970 0.007999 0.110420 +v 0.150722 0.008188 0.095940 +v 0.154858 0.008304 0.080507 +v 0.008343 0.156250 0.064591 +v 0.007057 0.110420 0.143970 +v 0.007425 0.123508 0.134806 +v 0.007742 0.134806 0.123508 +v 0.007999 0.143970 0.110420 +v 0.008188 0.150722 0.095940 +v 0.008304 0.154857 0.080507 +v 0.155320 0.024904 0.064591 +v 0.109707 0.019764 0.143970 +v 0.122733 0.021232 0.134806 +v 0.133977 0.022499 0.123508 +v 0.143098 0.023526 0.110420 +v 0.149818 0.024284 0.095940 +v 0.153934 0.024747 0.080507 +v 0.152542 0.041256 0.064591 +v 0.107791 0.031042 0.143970 +v 0.120571 0.033958 0.134806 +v 0.131602 0.036476 0.123508 +v 0.140551 0.038519 0.110420 +v 0.147144 0.040024 0.095940 +v 0.151182 0.040945 0.080507 +v 0.147950 0.057194 0.064591 +v 0.104624 0.042033 0.143970 +v 0.116997 0.046363 0.134806 +v 0.127677 0.050100 0.123508 +v 0.136341 0.053132 0.110420 +v 0.142724 0.055365 0.095940 +v 0.146634 0.056733 0.080507 +v 0.141603 0.072518 0.064591 +v 0.100247 0.052602 0.143970 +v 0.112057 0.058289 0.134806 +v 0.122252 0.063199 0.123508 +v 0.130521 0.067181 0.110420 +v 0.136614 0.070115 0.095940 +v 0.140346 0.071912 0.080507 +v 0.133579 0.087034 0.064591 +v 0.094713 0.062613 0.143970 +v 0.105813 0.069587 0.134806 +v 0.115394 0.075607 0.123508 +v 0.123165 0.080491 0.110420 +v 0.128892 0.084089 0.095940 +v 0.132399 0.086292 0.080507 +v 0.123981 0.100562 0.064591 +v 0.088094 0.071942 0.143970 +v 0.098343 0.080115 0.134806 +v 0.107189 0.087170 0.123508 +v 0.114365 0.092893 0.110420 +v 0.119653 0.097110 0.095940 +v 0.122891 0.099692 0.080507 +v 0.112929 0.112929 0.064591 +v 0.080472 0.080472 0.143970 +v 0.089741 0.089741 0.134806 +v 0.097742 0.097742 0.123508 +v 0.104232 0.104232 0.110420 +v 0.109014 0.109014 0.095940 +v 0.111943 0.111943 0.080507 +v 0.100562 0.123981 0.064591 +v 0.071942 0.088094 0.143970 +v 0.080115 0.098343 0.134806 +v 0.087170 0.107189 0.123508 +v 0.092893 0.114365 0.110420 +v 0.097110 0.119653 0.095940 +v 0.099692 0.122891 0.080507 +v 0.087034 0.133579 0.064591 +v 0.062613 0.094713 0.143970 +v 0.069587 0.105813 0.134806 +v 0.075607 0.115394 0.123508 +v 0.080491 0.123165 0.110420 +v 0.084089 0.128892 0.095940 +v 0.086292 0.132399 0.080507 +v 0.072518 0.141603 0.064591 +v 0.052602 0.100247 0.143970 +v 0.058289 0.112057 0.134806 +v 0.063199 0.122252 0.123508 +v 0.067181 0.130521 0.110420 +v 0.070115 0.136614 0.095940 +v 0.071912 0.140346 0.080507 +v 0.057194 0.147950 0.064591 +v 0.042033 0.104624 0.143970 +v 0.046363 0.116997 0.134806 +v 0.050100 0.127677 0.123508 +v 0.053132 0.136341 0.110420 +v 0.055365 0.142724 0.095940 +v 0.056733 0.146634 0.080507 +v 0.041256 0.152542 0.064591 +v 0.031041 0.107791 0.143970 +v 0.033958 0.120571 0.134806 +v 0.036476 0.131602 0.123508 +v 0.038519 0.140551 0.110420 +v 0.040024 0.147144 0.095940 +v 0.040945 0.151182 0.080507 +v 0.024904 0.155320 0.064591 +v 0.019764 0.109707 0.143970 +v 0.021232 0.122733 0.134806 +v 0.022499 0.133977 0.123508 +v 0.023526 0.143098 0.110420 +v 0.024284 0.149818 0.095940 +v 0.024747 0.153934 0.080507 +v 0.008343 -0.156250 0.064591 +v 0.007057 -0.110420 0.143970 +v 0.007425 -0.123508 0.134806 +v 0.007742 -0.134806 0.123508 +v 0.007999 -0.143970 0.110420 +v 0.008188 -0.150722 0.095940 +v 0.008304 -0.154857 0.080507 +v 0.156250 -0.008343 0.064591 +v 0.110420 -0.007057 0.143970 +v 0.123508 -0.007425 0.134806 +v 0.134806 -0.007742 0.123508 +v 0.143970 -0.007999 0.110420 +v 0.150722 -0.008188 0.095940 +v 0.154857 -0.008304 0.080507 +v 0.024904 -0.155320 0.064591 +v 0.019764 -0.109707 0.143970 +v 0.021232 -0.122733 0.134806 +v 0.022499 -0.133977 0.123508 +v 0.023526 -0.143098 0.110420 +v 0.024284 -0.149818 0.095940 +v 0.024747 -0.153934 0.080507 +v 0.041256 -0.152542 0.064591 +v 0.031042 -0.107791 0.143970 +v 0.033958 -0.120571 0.134806 +v 0.036476 -0.131602 0.123508 +v 0.038519 -0.140551 0.110420 +v 0.040024 -0.147144 0.095940 +v 0.040945 -0.151182 0.080507 +v 0.057194 -0.147950 0.064591 +v 0.042033 -0.104624 0.143970 +v 0.046363 -0.116997 0.134806 +v 0.050100 -0.127677 0.123508 +v 0.053132 -0.136341 0.110420 +v 0.055365 -0.142724 0.095940 +v 0.056733 -0.146634 0.080507 +v 0.072518 -0.141603 0.064591 +v 0.052602 -0.100247 0.143970 +v 0.058289 -0.112057 0.134806 +v 0.063199 -0.122252 0.123508 +v 0.067181 -0.130521 0.110420 +v 0.070115 -0.136614 0.095940 +v 0.071912 -0.140346 0.080507 +v 0.087034 -0.133579 0.064591 +v 0.062613 -0.094713 0.143970 +v 0.069587 -0.105813 0.134806 +v 0.075607 -0.115394 0.123508 +v 0.080491 -0.123165 0.110420 +v 0.084089 -0.128892 0.095940 +v 0.086292 -0.132399 0.080507 +v 0.100562 -0.123981 0.064591 +v 0.071942 -0.088094 0.143970 +v 0.080115 -0.098343 0.134806 +v 0.087170 -0.107189 0.123508 +v 0.092893 -0.114365 0.110420 +v 0.097110 -0.119653 0.095940 +v 0.099692 -0.122891 0.080507 +v 0.112929 -0.112929 0.064591 +v 0.080472 -0.080472 0.143970 +v 0.089741 -0.089741 0.134806 +v 0.097742 -0.097742 0.123508 +v 0.104232 -0.104232 0.110420 +v 0.109014 -0.109014 0.095940 +v 0.111943 -0.111943 0.080507 +v 0.123981 -0.100562 0.064591 +v 0.088094 -0.071942 0.143970 +v 0.098343 -0.080115 0.134806 +v 0.107189 -0.087170 0.123508 +v 0.114365 -0.092893 0.110420 +v 0.119653 -0.097110 0.095940 +v 0.122891 -0.099692 0.080507 +v 0.133579 -0.087034 0.064591 +v 0.094713 -0.062613 0.143970 +v 0.105813 -0.069587 0.134806 +v 0.115394 -0.075607 0.123508 +v 0.123165 -0.080491 0.110420 +v 0.128892 -0.084089 0.095940 +v 0.132399 -0.086292 0.080507 +v 0.141603 -0.072518 0.064591 +v 0.100247 -0.052602 0.143970 +v 0.112057 -0.058289 0.134806 +v 0.122252 -0.063199 0.123508 +v 0.130521 -0.067181 0.110420 +v 0.136614 -0.070115 0.095940 +v 0.140346 -0.071912 0.080507 +v 0.147950 -0.057194 0.064591 +v 0.104624 -0.042033 0.143970 +v 0.116997 -0.046363 0.134806 +v 0.127677 -0.050100 0.123508 +v 0.136341 -0.053132 0.110420 +v 0.142724 -0.055365 0.095940 +v 0.146634 -0.056733 0.080507 +v 0.152542 -0.041256 0.064591 +v 0.107791 -0.031041 0.143970 +v 0.120571 -0.033958 0.134806 +v 0.131602 -0.036476 0.123508 +v 0.140551 -0.038519 0.110420 +v 0.147144 -0.040024 0.095940 +v 0.151182 -0.040945 0.080507 +v 0.155320 -0.024904 0.064591 +v 0.109707 -0.019764 0.143970 +v 0.122733 -0.021232 0.134806 +v 0.133977 -0.022499 0.123508 +v 0.143098 -0.023526 0.110420 +v 0.149818 -0.024284 0.095940 +v 0.153934 -0.024747 0.080507 +vt 0.8476 0.4227 +vt 0.8547 0.5168 +vt 0.8476 0.6109 +vt 0.8266 0.7015 +vt 0.7925 0.7849 +vt 0.7466 0.8580 +vt 0.6907 0.9180 +vt 0.6269 0.9626 +vt 0.5577 0.9901 +vt 0.4857 0.9993 +vt 0.4137 0.9901 +vt 0.3445 0.9626 +vt 0.2807 0.9180 +vt 0.2248 0.8580 +vt 0.1789 0.7849 +vt 0.1448 0.7015 +vt 0.1238 0.6109 +vt 0.1167 0.5168 +vt 0.1238 0.4227 +vt 0.1448 0.3321 +vt 0.1789 0.2487 +vt 0.2248 0.1756 +vt 0.2807 0.1156 +vt 0.3445 0.0710 +vt 0.4137 0.0435 +vt 0.4857 0.0343 +vt 0.5577 0.0435 +vt 0.6269 0.0710 +vt 0.6907 0.1156 +vt 0.7466 0.1756 +vt 0.7925 0.2487 +vt 0.8266 0.3321 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 0.0000 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.6203 0.6995 +vt 0.6339 0.7131 +vt 0.6499 0.7238 +vt 0.6677 0.7312 +vt 0.6865 0.7349 +vt 0.7057 0.7349 +vt 0.7246 0.7312 +vt 0.7423 0.7238 +vt 0.7583 0.7131 +vt 0.7719 0.6995 +vt 0.7825 0.6836 +vt 0.7899 0.6658 +vt 0.7936 0.6470 +vt 0.7936 0.6278 +vt 0.7899 0.6089 +vt 0.7825 0.5912 +vt 0.7719 0.5752 +vt 0.7583 0.5616 +vt 0.7423 0.5509 +vt 0.7246 0.5436 +vt 0.7057 0.5398 +vt 0.6865 0.5398 +vt 0.6677 0.5436 +vt 0.6499 0.5509 +vt 0.6339 0.5616 +vt 0.6203 0.5752 +vt 0.6097 0.5912 +vt 0.6023 0.6089 +vt 0.5986 0.6278 +vt 0.5986 0.6470 +vt 0.6023 0.6658 +vt 0.6097 0.6836 +vt 0.4894 0.5435 +vt 0.5072 0.5508 +vt 0.5232 0.5615 +vt 0.5368 0.5751 +vt 0.5474 0.5911 +vt 0.5548 0.6088 +vt 0.5585 0.6277 +vt 0.5585 0.6469 +vt 0.5548 0.6657 +vt 0.5474 0.6835 +vt 0.5368 0.6994 +vt 0.5232 0.7130 +vt 0.5072 0.7237 +vt 0.4894 0.7311 +vt 0.4706 0.7348 +vt 0.4514 0.7348 +vt 0.4325 0.7311 +vt 0.4148 0.7237 +vt 0.3988 0.7130 +vt 0.3852 0.6994 +vt 0.3746 0.6835 +vt 0.3672 0.6657 +vt 0.3635 0.6469 +vt 0.3635 0.6277 +vt 0.3672 0.6088 +vt 0.3746 0.5911 +vt 0.3852 0.5751 +vt 0.3988 0.5615 +vt 0.4148 0.5508 +vt 0.4325 0.5435 +vt 0.4514 0.5397 +vt 0.4706 0.5397 +vt 0.7057 0.5398 +vt 0.7246 0.5436 +vt 0.7423 0.5509 +vt 0.7583 0.5616 +vt 0.7719 0.5752 +vt 0.7825 0.5912 +vt 0.7899 0.6089 +vt 0.7936 0.6278 +vt 0.7936 0.6470 +vt 0.7899 0.6658 +vt 0.7825 0.6836 +vt 0.7719 0.6995 +vt 0.7583 0.7131 +vt 0.7423 0.7238 +vt 0.7246 0.7312 +vt 0.7057 0.7349 +vt 0.6865 0.7349 +vt 0.6677 0.7312 +vt 0.6499 0.7238 +vt 0.6339 0.7131 +vt 0.6203 0.6995 +vt 0.6097 0.6836 +vt 0.6023 0.6658 +vt 0.5986 0.6470 +vt 0.5986 0.6278 +vt 0.6023 0.6089 +vt 0.6097 0.5912 +vt 0.6203 0.5752 +vt 0.6339 0.5616 +vt 0.6499 0.5509 +vt 0.6677 0.5436 +vt 0.6865 0.5398 +vt 0.4148 0.5508 +vt 0.3988 0.5615 +vt 0.3852 0.5751 +vt 0.3746 0.5911 +vt 0.3672 0.6088 +vt 0.3635 0.6277 +vt 0.3635 0.6469 +vt 0.3672 0.6657 +vt 0.3746 0.6835 +vt 0.3852 0.6994 +vt 0.3988 0.7130 +vt 0.4148 0.7237 +vt 0.4325 0.7311 +vt 0.4514 0.7348 +vt 0.4706 0.7348 +vt 0.4894 0.7311 +vt 0.5072 0.7237 +vt 0.5232 0.7130 +vt 0.5368 0.6994 +vt 0.5474 0.6835 +vt 0.5548 0.6657 +vt 0.5585 0.6469 +vt 0.5585 0.6277 +vt 0.5548 0.6088 +vt 0.5474 0.5911 +vt 0.5368 0.5751 +vt 0.5232 0.5615 +vt 0.5072 0.5508 +vt 0.4894 0.5435 +vt 0.4706 0.5397 +vt 0.4514 0.5397 +vt 0.4325 0.5435 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.7740 0.5691 +vt 0.7824 0.5642 +vt 0.7824 0.5546 +vt 0.7740 0.5497 +vt 0.7657 0.5546 +vt 0.7657 0.5642 +vt 0.5795 0.3964 +vt 0.5591 0.3796 +vt 0.5423 0.3592 +vt 0.5298 0.3359 +vt 0.5221 0.3106 +vt 0.5196 0.2843 +vt 0.5221 0.2580 +vt 0.5298 0.2327 +vt 0.5423 0.2093 +vt 0.5591 0.1889 +vt 0.5795 0.1721 +vt 0.6028 0.1597 +vt 0.6281 0.1520 +vt 0.6544 0.1494 +vt 0.6807 0.1520 +vt 0.7060 0.1597 +vt 0.7294 0.1721 +vt 0.7498 0.1889 +vt 0.7666 0.2093 +vt 0.7790 0.2327 +vt 0.7867 0.2580 +vt 0.7893 0.2843 +vt 0.7867 0.3106 +vt 0.7790 0.3359 +vt 0.7666 0.3592 +vt 0.7498 0.3796 +vt 0.7294 0.3964 +vt 0.7060 0.4089 +vt 0.6807 0.4166 +vt 0.6544 0.4191 +vt 0.6281 0.4166 +vt 0.6028 0.4089 +vt 0.1018 0.1337 +vt 0.2315 0.1337 +vt 0.2315 0.1462 +vt 0.1018 0.1462 +vt 0.2193 0.6363 +vt 0.1140 0.6363 +vt 0.1140 0.6239 +vt 0.2193 0.6239 +vt 0.1140 0.5988 +vt 0.2193 0.5988 +vt 0.2193 0.6113 +vt 0.1140 0.6113 +vt 0.2315 0.3538 +vt 0.1018 0.3538 +vt 0.1018 0.3415 +vt 0.2315 0.3415 +vt 0.1018 0.3913 +vt 0.2315 0.3913 +vt 0.2315 0.4036 +vt 0.1018 0.4036 +vt 0.4216 0.2732 +vt 0.4216 0.2660 +vt 0.3725 0.2660 +vt 0.3725 0.2732 +vt 0.3725 0.2065 +vt 0.4216 0.2065 +vt 0.4216 0.2004 +vt 0.3725 0.2004 +vt 0.3725 0.2512 +vt 0.4216 0.2512 +vt 0.4216 0.2390 +vt 0.3725 0.2390 +vt 0.9510 0.3431 +vt 0.9510 0.2401 +vt 0.9706 0.2401 +vt 0.9706 0.3431 +vt 0.8922 0.3431 +vt 0.8922 0.2401 +vt 0.9118 0.2401 +vt 0.9118 0.3431 +vt 0.6961 0.3431 +vt 0.6961 0.2401 +vt 0.7157 0.2401 +vt 0.7157 0.3431 +vt 0.6569 0.3431 +vt 0.6569 0.2401 +vt 0.6765 0.2401 +vt 0.6765 0.3431 +vt 0.7745 0.3431 +vt 0.7745 0.2401 +vt 0.7941 0.2401 +vt 0.7941 0.3431 +vt 0.4608 0.3431 +vt 0.4608 0.2401 +vt 0.4804 0.2401 +vt 0.4804 0.3431 +vt 0.6373 0.3431 +vt 0.6373 0.2401 +vt 0.8725 0.3431 +vt 0.8725 0.2401 +vt 0.7353 0.2401 +vt 0.7353 0.3431 +vt 0.5588 0.3431 +vt 0.5588 0.2401 +vt 0.5784 0.2401 +vt 0.5784 0.3431 +vt 0.3431 0.3431 +vt 0.3431 0.2401 +vt 0.3627 0.2401 +vt 0.3627 0.3431 +vt 0.6373 0.4902 +vt 0.6373 0.4706 +vt 0.6569 0.4706 +vt 0.6569 0.4902 +vt 0.6176 0.4902 +vt 0.6176 0.4706 +vt 0.5980 0.4902 +vt 0.5980 0.4706 +vt 0.5784 0.4902 +vt 0.5784 0.4706 +vt 0.5588 0.4902 +vt 0.5588 0.4706 +vt 0.5392 0.4902 +vt 0.5392 0.4706 +vt 0.5196 0.4902 +vt 0.5196 0.4706 +vt 0.5000 0.4902 +vt 0.5000 0.4706 +vt 0.4804 0.4902 +vt 0.4804 0.4706 +vt 0.4608 0.4902 +vt 0.4608 0.4706 +vt 0.4412 0.4902 +vt 0.4412 0.4706 +vt 0.4216 0.4902 +vt 0.4216 0.4706 +vt 0.4020 0.4902 +vt 0.4020 0.4706 +vt 0.3824 0.4902 +vt 0.3824 0.4706 +vt 0.3627 0.4902 +vt 0.3627 0.4706 +vt 0.3431 0.4902 +vt 0.3431 0.4706 +vt 0.9510 0.4902 +vt 0.9510 0.4706 +vt 0.9706 0.4706 +vt 0.9706 0.4902 +vt 0.9314 0.4902 +vt 0.9314 0.4706 +vt 0.9118 0.4902 +vt 0.9118 0.4706 +vt 0.8922 0.4902 +vt 0.8922 0.4706 +vt 0.8529 0.4902 +vt 0.8529 0.4706 +vt 0.8725 0.4706 +vt 0.8725 0.4902 +vt 0.8333 0.4902 +vt 0.8333 0.4706 +vt 0.8137 0.4902 +vt 0.8137 0.4706 +vt 0.7941 0.4902 +vt 0.7941 0.4706 +vt 0.7745 0.4902 +vt 0.7745 0.4706 +vt 0.7353 0.4902 +vt 0.7353 0.4706 +vt 0.7549 0.4706 +vt 0.7549 0.4902 +vt 0.7157 0.4902 +vt 0.7157 0.4706 +vt 0.6961 0.4902 +vt 0.6961 0.4706 +vt 0.7373 0.4468 +vt 0.7373 0.4373 +vt 0.7577 0.4372 +vt 0.7577 0.4467 +vt 0.7782 0.4468 +vt 0.7782 0.4373 +vt 0.7986 0.4467 +vt 0.7986 0.4373 +vt 0.8190 0.4467 +vt 0.8191 0.4373 +vt 0.8394 0.4468 +vt 0.8395 0.4373 +vt 0.8599 0.4468 +vt 0.8599 0.4373 +vt 0.8804 0.4373 +vt 0.8803 0.4468 +vt 0.9007 0.4469 +vt 0.9008 0.4374 +vt 0.9212 0.4469 +vt 0.9213 0.4374 +vt 0.9417 0.4470 +vt 0.9418 0.4375 +vt 0.9623 0.4375 +vt 0.9622 0.4470 +vt 0.9829 0.4375 +vt 0.9827 0.4471 +vt 1.0033 0.4471 +vt 1.0033 0.4375 +vt 1.0238 0.4375 +vt 1.0238 0.4471 +vt 1.0443 0.4375 +vt 1.0444 0.4471 +vt 1.0651 0.4471 +vt 1.0648 0.4375 +vt 1.0852 0.4374 +vt 1.0859 0.4469 +vt 1.1068 0.4466 +vt 1.1054 0.4371 +vt 0.4495 0.4465 +vt 0.4509 0.4371 +vt 0.4711 0.4373 +vt 0.4704 0.4469 +vt 0.4914 0.4471 +vt 0.4916 0.4374 +vt 0.5123 0.4375 +vt 0.5122 0.4471 +vt 0.5328 0.4374 +vt 0.5328 0.4470 +vt 0.5532 0.4374 +vt 0.5533 0.4469 +vt 0.5737 0.4374 +vt 0.5738 0.4469 +vt 0.5941 0.4374 +vt 0.5942 0.4468 +vt 0.6145 0.4373 +vt 0.6146 0.4468 +vt 0.6555 0.4468 +vt 0.6350 0.4468 +vt 0.6350 0.4373 +vt 0.6554 0.4373 +vt 0.6963 0.4468 +vt 0.6759 0.4468 +vt 0.6759 0.4373 +vt 0.6963 0.4373 +vt 0.7168 0.4468 +vt 0.7168 0.4373 +vt 0.9637 0.1307 +vt 0.9433 0.1307 +vt 0.9433 0.1212 +vt 0.9230 0.1307 +vt 0.9230 0.1213 +vt 0.9637 0.1212 +vt 0.9841 0.1212 +vt 0.9840 0.1307 +vt 0.9027 0.1307 +vt 0.8824 0.1307 +vt 0.9027 0.1213 +vt 1.0045 0.1212 +vt 1.0044 0.1307 +vt 0.8824 0.1212 +vt 1.0249 0.1212 +vt 1.0248 0.1307 +vt 0.8621 0.1212 +vt 0.8620 0.1306 +vt 0.7745 0.4902 +vt 0.7745 0.4706 +vt 0.7941 0.4706 +vt 0.7941 0.4902 +vt 0.8333 0.4902 +vt 0.8333 0.4706 +vt 0.8529 0.4706 +vt 0.8529 0.4902 +vt 1.0454 0.1213 +vt 1.0451 0.1308 +vt 0.7549 0.4902 +vt 0.7549 0.4706 +vt 0.8418 0.1211 +vt 0.8417 0.1306 +vt 0.8725 0.4706 +vt 0.8725 0.4902 +vt 1.0659 0.1214 +vt 1.0654 0.1309 +vt 0.7353 0.4902 +vt 0.7353 0.4706 +vt 0.8214 0.1210 +vt 0.8213 0.1305 +vt 0.7157 0.4902 +vt 0.7157 0.4706 +vt 1.0864 0.1216 +vt 1.0854 0.1310 +vt 0.6765 0.4902 +vt 0.6765 0.4706 +vt 0.6961 0.4706 +vt 0.6961 0.4902 +vt 0.8010 0.1210 +vt 0.8009 0.1304 +vt 0.8922 0.4706 +vt 0.8922 0.4902 +vt 1.1069 0.1221 +vt 1.1051 0.1313 +vt 0.6569 0.4902 +vt 0.6569 0.4706 +vt 0.7806 0.1209 +vt 0.7805 0.1304 +vt 0.9118 0.4706 +vt 0.9118 0.4902 +vt 0.4718 0.1196 +vt 0.4722 0.1293 +vt 0.4516 0.1295 +vt 0.4504 0.1199 +vt 0.6765 0.4706 +vt 0.6765 0.4902 +vt 0.6373 0.4902 +vt 0.6373 0.4706 +vt 0.5756 0.1295 +vt 0.5550 0.1294 +vt 0.7602 0.1208 +vt 0.7601 0.1303 +vt 0.9314 0.4706 +vt 0.9314 0.4902 +vt 0.4930 0.1195 +vt 0.4930 0.1293 +vt 0.6176 0.4902 +vt 0.6176 0.4706 +vt 0.7398 0.1208 +vt 0.7397 0.1302 +vt 0.9510 0.4706 +vt 0.9510 0.4902 +vt 0.5139 0.1196 +vt 0.5137 0.1293 +vt 0.5980 0.4902 +vt 0.5980 0.4706 +vt 0.7194 0.1207 +vt 0.7192 0.1302 +vt 0.3431 0.4902 +vt 0.3431 0.4706 +vt 0.3627 0.4706 +vt 0.3627 0.4902 +vt 0.5346 0.1198 +vt 0.5344 0.1293 +vt 0.9706 0.4706 +vt 0.9706 0.4902 +vt 0.6989 0.1206 +vt 0.6988 0.1301 +vt 0.3824 0.4706 +vt 0.3824 0.4902 +vt 0.8137 0.4706 +vt 0.8137 0.4902 +vt 0.5552 0.1198 +vt 0.5784 0.4902 +vt 0.5784 0.4706 +vt 0.6578 0.1299 +vt 0.6783 0.1300 +vt 0.6785 0.1205 +vt 0.4020 0.4706 +vt 0.4020 0.4902 +vt 0.5758 0.1199 +vt 0.5588 0.4902 +vt 0.5588 0.4706 +vt 0.6581 0.1204 +vt 0.4216 0.4706 +vt 0.4216 0.4902 +vt 0.5965 0.1200 +vt 0.5962 0.1296 +vt 0.5392 0.4902 +vt 0.5392 0.4706 +vt 0.6376 0.1203 +vt 0.6373 0.1298 +vt 0.4412 0.4706 +vt 0.4412 0.4902 +vt 0.6170 0.1201 +vt 0.6168 0.1297 +vt 0.5196 0.4902 +vt 0.5196 0.4706 +vt 0.5000 0.4902 +vt 0.5000 0.4706 +vt 0.4608 0.4706 +vt 0.4608 0.4902 +vt 0.4804 0.4902 +vt 0.4804 0.4706 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.7745 0.5392 +vt 0.7745 0.5294 +vt 0.7843 0.5294 +vt 0.7843 0.5392 +vt 0.7647 0.5392 +vt 0.7647 0.5294 +vt 0.7941 0.5294 +vt 0.7941 0.5392 +vt 0.8039 0.5294 +vt 0.8039 0.5392 +vt 0.7451 0.5392 +vt 0.7451 0.5294 +vt 0.7549 0.5294 +vt 0.7549 0.5392 +vt 0.3824 0.3431 +vt 0.3824 0.2401 +vt 0.4020 0.2401 +vt 0.4020 0.3431 +vt 0.5000 0.2401 +vt 0.5000 0.3431 +vt 0.5196 0.3431 +vt 0.5196 0.2401 +vt 0.5392 0.2401 +vt 0.5392 0.3431 +vt 0.5980 0.3431 +vt 0.5980 0.2401 +vt 0.6176 0.2401 +vt 0.6176 0.3431 +vt 0.8529 0.3431 +vt 0.8529 0.2401 +vt 0.4216 0.2401 +vt 0.4216 0.3431 +vt 0.7549 0.3431 +vt 0.7549 0.2401 +vt 0.8137 0.3431 +vt 0.8137 0.2401 +vt 0.8333 0.2401 +vt 0.8333 0.3431 +vt 0.9314 0.3431 +vt 0.9314 0.2401 +vt 0.4412 0.3431 +vt 0.4412 0.2401 +vt 0.5394 0.2320 +vt 0.5586 0.2320 +vt 0.5587 0.2357 +vt 0.5393 0.2357 +vt 0.5002 0.2320 +vt 0.5194 0.2320 +vt 0.5195 0.2357 +vt 0.5001 0.2357 +vt 0.4414 0.2320 +vt 0.4606 0.2320 +vt 0.4607 0.2357 +vt 0.4413 0.2357 +vt 0.6178 0.2320 +vt 0.6371 0.2320 +vt 0.6372 0.2357 +vt 0.6177 0.2357 +vt 0.8531 0.2320 +vt 0.8723 0.2320 +vt 0.8724 0.2357 +vt 0.8530 0.2357 +vt 0.3629 0.2320 +vt 0.3822 0.2320 +vt 0.3823 0.2357 +vt 0.3628 0.2357 +vt 0.7943 0.2320 +vt 0.8135 0.2320 +vt 0.8136 0.2357 +vt 0.7942 0.2357 +vt 0.7159 0.2320 +vt 0.7351 0.2320 +vt 0.7352 0.2357 +vt 0.7158 0.2357 +vt 0.6375 0.2320 +vt 0.6567 0.2320 +vt 0.6568 0.2357 +vt 0.6374 0.2357 +vt 0.9119 0.2357 +vt 0.9313 0.2357 +vt 0.9120 0.2320 +vt 0.9312 0.2320 +vt 0.9122 0.2255 +vt 0.9310 0.2255 +vt 0.5590 0.2320 +vt 0.5782 0.2320 +vt 0.5783 0.2357 +vt 0.5589 0.2357 +vt 0.4218 0.2320 +vt 0.4410 0.2320 +vt 0.4411 0.2357 +vt 0.4217 0.2357 +vt 0.7355 0.2320 +vt 0.7547 0.2320 +vt 0.7548 0.2357 +vt 0.7354 0.2357 +vt 0.3433 0.2320 +vt 0.3625 0.2320 +vt 0.3626 0.2357 +vt 0.3432 0.2357 +vt 0.8727 0.2320 +vt 0.8920 0.2320 +vt 0.8921 0.2357 +vt 0.8726 0.2357 +vt 0.6571 0.2320 +vt 0.6763 0.2320 +vt 0.6764 0.2357 +vt 0.6570 0.2357 +vt 0.9512 0.2320 +vt 0.9704 0.2320 +vt 0.9705 0.2357 +vt 0.9511 0.2357 +vt 0.5786 0.2320 +vt 0.5978 0.2320 +vt 0.5979 0.2357 +vt 0.5785 0.2357 +vt 0.4806 0.2320 +vt 0.4998 0.2320 +vt 0.4999 0.2357 +vt 0.4805 0.2357 +vt 0.7551 0.2320 +vt 0.7743 0.2320 +vt 0.7744 0.2357 +vt 0.7550 0.2357 +vt 0.4022 0.2320 +vt 0.4214 0.2320 +vt 0.4215 0.2357 +vt 0.4021 0.2357 +vt 0.8139 0.2320 +vt 0.8331 0.2320 +vt 0.8332 0.2357 +vt 0.8138 0.2357 +vt 0.6767 0.2320 +vt 0.6959 0.2320 +vt 0.6960 0.2357 +vt 0.6766 0.2357 +vt 0.8924 0.2320 +vt 0.9116 0.2320 +vt 0.9117 0.2357 +vt 0.8923 0.2357 +vt 0.9316 0.2320 +vt 0.9508 0.2320 +vt 0.9509 0.2357 +vt 0.9315 0.2357 +vt 0.5198 0.2320 +vt 0.5390 0.2320 +vt 0.5391 0.2357 +vt 0.5197 0.2357 +vt 0.5982 0.2320 +vt 0.6174 0.2320 +vt 0.6175 0.2357 +vt 0.5981 0.2357 +vt 0.4610 0.2320 +vt 0.4802 0.2320 +vt 0.4803 0.2357 +vt 0.4609 0.2357 +vt 0.7747 0.2320 +vt 0.7939 0.2320 +vt 0.7940 0.2357 +vt 0.7746 0.2357 +vt 0.3826 0.2320 +vt 0.4018 0.2320 +vt 0.4019 0.2357 +vt 0.3825 0.2357 +vt 0.6963 0.2320 +vt 0.7155 0.2320 +vt 0.7156 0.2357 +vt 0.6962 0.2357 +vt 0.8335 0.2320 +vt 0.8527 0.2320 +vt 0.8528 0.2357 +vt 0.8334 0.2357 +vt 0.4216 0.2242 +vt 0.4216 0.2170 +vt 0.3725 0.2170 +vt 0.3725 0.2242 +vt 0.4216 0.3712 +vt 0.4216 0.3641 +vt 0.3725 0.3641 +vt 0.3725 0.3712 +vt 0.4216 0.3222 +vt 0.4216 0.3150 +vt 0.3725 0.3150 +vt 0.3725 0.3222 +vt 0.3725 0.3492 +vt 0.4216 0.3492 +vt 0.4216 0.3370 +vt 0.3725 0.3370 +vt 0.1018 0.1212 +vt 0.2315 0.1212 +vt 0.1018 0.1585 +vt 0.2315 0.1585 +vt 0.2315 0.1705 +vt 0.1018 0.1705 +vt 0.2315 0.1821 +vt 0.1018 0.1821 +vt 0.2315 0.1930 +vt 0.1018 0.1930 +vt 0.2315 0.2032 +vt 0.1018 0.2032 +vt 0.2315 0.2451 +vt 0.1018 0.2451 +vt 0.2193 0.7352 +vt 0.1140 0.7352 +vt 0.1140 0.6933 +vt 0.2193 0.6933 +vt 0.1140 0.6831 +vt 0.2193 0.6831 +vt 0.1140 0.6722 +vt 0.2193 0.6722 +vt 0.1140 0.6606 +vt 0.2193 0.6606 +vt 0.1140 0.6486 +vt 0.2193 0.6486 +vt 0.2315 0.3663 +vt 0.1018 0.3663 +vt 0.6246 0.8538 +vt 0.7284 0.8538 +vt 0.7284 0.8663 +vt 0.6246 0.8663 +vt 0.1018 0.3295 +vt 0.2315 0.3295 +vt 0.1018 0.3179 +vt 0.2315 0.3179 +vt 0.1018 0.3070 +vt 0.2315 0.3070 +vt 0.1018 0.2968 +vt 0.2315 0.2968 +vt 0.1018 0.2549 +vt 0.2315 0.2549 +vt 0.6246 0.7549 +vt 0.7284 0.7549 +vt 0.7284 0.7968 +vt 0.6246 0.7968 +vt 0.7284 0.8070 +vt 0.6246 0.8070 +vt 0.7284 0.8179 +vt 0.6246 0.8179 +vt 0.7284 0.8295 +vt 0.6246 0.8295 +vt 0.7284 0.8415 +vt 0.6246 0.8415 +vt 0.6246 0.8788 +vt 0.7284 0.8788 +vt 0.7284 0.8913 +vt 0.6246 0.8913 +vt 0.1018 0.1087 +vt 0.2315 0.1087 +vt 0.6246 0.9036 +vt 0.7284 0.9036 +vt 0.7284 0.9156 +vt 0.6246 0.9156 +vt 0.7284 0.9272 +vt 0.6246 0.9272 +vt 0.7284 0.9381 +vt 0.6246 0.9381 +vt 0.7284 0.9483 +vt 0.6246 0.9483 +vt 0.7284 0.9902 +vt 0.6246 0.9902 +vt 0.1018 0.0098 +vt 0.2315 0.0098 +vt 0.2315 0.0517 +vt 0.1018 0.0517 +vt 0.2315 0.0619 +vt 0.1018 0.0619 +vt 0.2315 0.0728 +vt 0.1018 0.0728 +vt 0.2315 0.0844 +vt 0.1018 0.0844 +vt 0.2315 0.0964 +vt 0.1018 0.0964 +vt 0.2315 0.3788 +vt 0.1018 0.3788 +vt 0.2315 0.4156 +vt 0.1018 0.4156 +vt 0.2315 0.4272 +vt 0.1018 0.4272 +vt 0.2315 0.4381 +vt 0.1018 0.4381 +vt 0.2315 0.4483 +vt 0.1018 0.4483 +vt 0.2315 0.4902 +vt 0.1018 0.4902 +vt 0.1140 0.4999 +vt 0.2193 0.4999 +vt 0.2193 0.5419 +vt 0.1140 0.5419 +vt 0.2193 0.5520 +vt 0.1140 0.5520 +vt 0.2193 0.5630 +vt 0.1140 0.5630 +vt 0.2193 0.5745 +vt 0.1140 0.5745 +vt 0.2193 0.5865 +vt 0.1140 0.5865 +vt 0.3725 0.3774 +vt 0.4216 0.3774 +vt 0.4216 0.3002 +vt 0.3725 0.3002 +vt 0.3725 0.2880 +vt 0.4216 0.2880 +vt 0.4650 0.8874 +vt 0.4655 0.8779 +vt 0.4753 0.8781 +vt 0.4748 0.8885 +vt 0.5000 0.8793 +vt 0.4994 0.8904 +vt 0.0427 0.1453 +vt 0.0427 0.1342 +vt 0.0558 0.1340 +vt 0.0558 0.1457 +vt 0.0703 0.1338 +vt 0.0703 0.1460 +vt 0.0858 0.1338 +vt 0.0858 0.1461 +vt 0.0443 0.8779 +vt 0.0448 0.8874 +vt 0.0350 0.8885 +vt 0.0345 0.8781 +vt 0.0104 0.8904 +vt 0.0098 0.8793 +vt 0.2906 0.1342 +vt 0.2906 0.1453 +vt 0.2775 0.1457 +vt 0.2775 0.1340 +vt 0.2630 0.1460 +vt 0.2630 0.1338 +vt 0.2475 0.1461 +vt 0.2475 0.1338 +vt 0.4635 0.8959 +vt 0.4731 0.8981 +vt 0.4991 0.8922 +vt 0.4974 0.9027 +vt 0.0427 0.1576 +vt 0.0427 0.1471 +vt 0.0558 0.1467 +vt 0.0558 0.1580 +vt 0.0703 0.1464 +vt 0.0703 0.1583 +vt 0.0858 0.1463 +vt 0.0858 0.1585 +vt 0.0463 0.8959 +vt 0.0367 0.8981 +vt 0.0124 0.9027 +vt 0.0107 0.8922 +vt 0.2906 0.1471 +vt 0.2906 0.1576 +vt 0.2775 0.1580 +vt 0.2775 0.1467 +vt 0.2630 0.1583 +vt 0.2630 0.1464 +vt 0.2475 0.1585 +vt 0.2475 0.1463 +vt 0.4611 0.9042 +vt 0.4704 0.9075 +vt 0.4970 0.9045 +vt 0.4940 0.9147 +vt 0.0427 0.1696 +vt 0.0427 0.1594 +vt 0.0558 0.1590 +vt 0.0558 0.1700 +vt 0.0703 0.1587 +vt 0.0703 0.1703 +vt 0.0858 0.1586 +vt 0.0858 0.1705 +vt 0.0487 0.9042 +vt 0.0394 0.9075 +vt 0.0158 0.9147 +vt 0.0128 0.9045 +vt 0.2906 0.1594 +vt 0.2906 0.1696 +vt 0.2775 0.1700 +vt 0.2775 0.1590 +vt 0.2630 0.1703 +vt 0.2630 0.1587 +vt 0.2475 0.1705 +vt 0.2475 0.1586 +vt 0.4578 0.9122 +vt 0.4667 0.9164 +vt 0.4934 0.9165 +vt 0.4893 0.9263 +vt 0.0427 0.1812 +vt 0.0427 0.1714 +vt 0.0558 0.1710 +vt 0.0558 0.1816 +vt 0.0703 0.1707 +vt 0.0703 0.1818 +vt 0.0858 0.1706 +vt 0.0858 0.1820 +vt 0.0520 0.9122 +vt 0.0431 0.9164 +vt 0.0205 0.9263 +vt 0.0164 0.9165 +vt 0.2906 0.1714 +vt 0.2906 0.1812 +vt 0.2775 0.1816 +vt 0.2775 0.1710 +vt 0.2630 0.1818 +vt 0.2630 0.1707 +vt 0.2475 0.1820 +vt 0.2475 0.1706 +vt 0.4537 0.9197 +vt 0.4620 0.9249 +vt 0.4885 0.9279 +vt 0.4834 0.9373 +vt 0.0427 0.1922 +vt 0.0427 0.1828 +vt 0.0558 0.1825 +vt 0.0558 0.1925 +vt 0.0703 0.1823 +vt 0.0703 0.1928 +vt 0.0858 0.1821 +vt 0.0858 0.1929 +vt 0.0561 0.9197 +vt 0.0478 0.9249 +vt 0.0264 0.9373 +vt 0.0213 0.9279 +vt 0.2906 0.1828 +vt 0.2906 0.1922 +vt 0.2775 0.1925 +vt 0.2775 0.1825 +vt 0.2630 0.1928 +vt 0.2630 0.1823 +vt 0.2475 0.1929 +vt 0.2475 0.1821 +vt 0.4487 0.9267 +vt 0.4564 0.9329 +vt 0.4824 0.9388 +vt 0.4762 0.9475 +vt 0.0427 0.2024 +vt 0.0427 0.1937 +vt 0.0558 0.1934 +vt 0.0558 0.2027 +vt 0.0703 0.1932 +vt 0.0703 0.2030 +vt 0.0858 0.1930 +vt 0.0858 0.2031 +vt 0.0611 0.9267 +vt 0.0534 0.9329 +vt 0.0336 0.9475 +vt 0.0274 0.9388 +vt 0.2906 0.1937 +vt 0.2906 0.2024 +vt 0.2775 0.2027 +vt 0.2775 0.1934 +vt 0.2630 0.2030 +vt 0.2630 0.1932 +vt 0.2475 0.2031 +vt 0.2475 0.1930 +vt 0.4429 0.9331 +vt 0.4499 0.9401 +vt 0.4751 0.9489 +vt 0.4680 0.9569 +vt 0.0427 0.2421 +vt 0.0427 0.2062 +vt 0.0558 0.2049 +vt 0.0558 0.2434 +vt 0.0703 0.2040 +vt 0.0703 0.2443 +vt 0.0858 0.2034 +vt 0.0858 0.2449 +vt 0.0669 0.9331 +vt 0.0599 0.9401 +vt 0.0418 0.9569 +vt 0.0347 0.9489 +vt 0.2906 0.2062 +vt 0.2906 0.2421 +vt 0.2775 0.2434 +vt 0.2775 0.2049 +vt 0.2630 0.2443 +vt 0.2630 0.2040 +vt 0.2475 0.2449 +vt 0.2475 0.2034 +vt 0.4365 0.9389 +vt 0.4427 0.9466 +vt 0.4667 0.9582 +vt 0.4587 0.9653 +vt 0.2674 0.6963 +vt 0.2674 0.7322 +vt 0.2567 0.7335 +vt 0.2567 0.6950 +vt 0.2449 0.7344 +vt 0.2449 0.6941 +vt 0.2323 0.7350 +vt 0.2323 0.6935 +vt 0.0733 0.9389 +vt 0.0671 0.9466 +vt 0.0511 0.9653 +vt 0.0431 0.9582 +vt 0.0659 0.7322 +vt 0.0659 0.6963 +vt 0.0766 0.6950 +vt 0.0766 0.7335 +vt 0.0884 0.6941 +vt 0.0884 0.7344 +vt 0.1010 0.6935 +vt 0.1010 0.7350 +vt 0.4295 0.9439 +vt 0.4347 0.9522 +vt 0.4573 0.9664 +vt 0.4486 0.9726 +vt 0.2674 0.6838 +vt 0.2674 0.6925 +vt 0.2567 0.6929 +vt 0.2567 0.6835 +vt 0.2449 0.6931 +vt 0.2449 0.6833 +vt 0.2323 0.6932 +vt 0.2323 0.6832 +vt 0.0803 0.9439 +vt 0.0751 0.9522 +vt 0.0612 0.9726 +vt 0.0525 0.9664 +vt 0.0659 0.6925 +vt 0.0659 0.6838 +vt 0.0766 0.6835 +vt 0.0766 0.6929 +vt 0.0884 0.6833 +vt 0.0884 0.6931 +vt 0.1010 0.6832 +vt 0.1010 0.6932 +vt 0.4220 0.9480 +vt 0.4262 0.9569 +vt 0.4471 0.9736 +vt 0.4377 0.9787 +vt 0.2674 0.6730 +vt 0.2674 0.6823 +vt 0.2567 0.6826 +vt 0.2567 0.6726 +vt 0.2449 0.6829 +vt 0.2449 0.6724 +vt 0.2323 0.6831 +vt 0.2323 0.6722 +vt 0.0878 0.9480 +vt 0.0836 0.9569 +vt 0.0721 0.9787 +vt 0.0627 0.9736 +vt 0.0659 0.6823 +vt 0.0659 0.6730 +vt 0.0766 0.6726 +vt 0.0766 0.6826 +vt 0.0884 0.6724 +vt 0.0884 0.6829 +vt 0.1010 0.6722 +vt 0.1010 0.6831 +vt 0.4140 0.9513 +vt 0.4173 0.9606 +vt 0.4361 0.9795 +vt 0.4263 0.9836 +vt 0.2674 0.6615 +vt 0.2674 0.6713 +vt 0.2567 0.6717 +vt 0.2567 0.6611 +vt 0.2449 0.6720 +vt 0.2449 0.6609 +vt 0.2323 0.6721 +vt 0.2323 0.6607 +vt 0.0958 0.9513 +vt 0.0925 0.9606 +vt 0.0835 0.9836 +vt 0.0737 0.9795 +vt 0.0659 0.6713 +vt 0.0659 0.6615 +vt 0.0766 0.6611 +vt 0.0766 0.6717 +vt 0.0884 0.6609 +vt 0.0884 0.6720 +vt 0.1010 0.6607 +vt 0.1010 0.6721 +vt 0.4057 0.9537 +vt 0.4079 0.9633 +vt 0.4245 0.9842 +vt 0.4143 0.9872 +vt 0.2674 0.6495 +vt 0.2674 0.6598 +vt 0.2567 0.6601 +vt 0.2567 0.6491 +vt 0.2449 0.6604 +vt 0.2449 0.6489 +vt 0.2323 0.6606 +vt 0.2323 0.6487 +vt 0.1041 0.9537 +vt 0.1019 0.9633 +vt 0.0955 0.9872 +vt 0.0853 0.9842 +vt 0.0659 0.6598 +vt 0.0659 0.6495 +vt 0.0766 0.6491 +vt 0.0766 0.6601 +vt 0.0884 0.6489 +vt 0.0884 0.6604 +vt 0.1010 0.6487 +vt 0.1010 0.6606 +vt 0.3972 0.9552 +vt 0.3983 0.9650 +vt 0.4125 0.9876 +vt 0.4020 0.9893 +vt 0.2674 0.6372 +vt 0.2674 0.6477 +vt 0.2567 0.6481 +vt 0.2567 0.6368 +vt 0.2449 0.6484 +vt 0.2449 0.6366 +vt 0.2323 0.6486 +vt 0.2323 0.6364 +vt 0.1126 0.9552 +vt 0.1115 0.9650 +vt 0.1078 0.9893 +vt 0.0973 0.9876 +vt 0.0659 0.6477 +vt 0.0659 0.6372 +vt 0.0766 0.6368 +vt 0.0766 0.6481 +vt 0.0884 0.6366 +vt 0.0884 0.6484 +vt 0.1010 0.6364 +vt 0.1010 0.6486 +vt 0.3877 0.9557 +vt 0.3879 0.9655 +vt 0.4002 0.9896 +vt 0.3891 0.9902 +vt 0.2674 0.6243 +vt 0.2674 0.6354 +vt 0.2567 0.6358 +vt 0.2567 0.6241 +vt 0.2449 0.6361 +vt 0.2449 0.6240 +vt 0.2323 0.6363 +vt 0.2323 0.6239 +vt 0.1221 0.9557 +vt 0.1219 0.9655 +vt 0.1207 0.9902 +vt 0.1096 0.9896 +vt 0.0659 0.6354 +vt 0.0659 0.6243 +vt 0.0766 0.6241 +vt 0.0766 0.6358 +vt 0.0884 0.6240 +vt 0.0884 0.6361 +vt 0.1010 0.6239 +vt 0.1010 0.6363 +vt 0.2997 0.8577 +vt 0.2992 0.8672 +vt 0.2894 0.8670 +vt 0.2899 0.8566 +vt 0.2647 0.8658 +vt 0.2653 0.8547 +vt 0.2906 0.3547 +vt 0.2906 0.3658 +vt 0.2775 0.3660 +vt 0.2775 0.3543 +vt 0.2630 0.3662 +vt 0.2630 0.3540 +vt 0.2475 0.3662 +vt 0.2475 0.3539 +vt 0.2106 0.8672 +vt 0.2101 0.8577 +vt 0.2199 0.8566 +vt 0.2204 0.8670 +vt 0.2445 0.8547 +vt 0.2451 0.8658 +vt 0.0427 0.3658 +vt 0.0427 0.3547 +vt 0.0558 0.3543 +vt 0.0558 0.3660 +vt 0.0703 0.3540 +vt 0.0703 0.3662 +vt 0.0858 0.3539 +vt 0.0858 0.3662 +vt 0.3012 0.8492 +vt 0.2916 0.8470 +vt 0.2656 0.8529 +vt 0.2673 0.8424 +vt 0.2906 0.3424 +vt 0.2906 0.3529 +vt 0.2775 0.3533 +vt 0.2775 0.3420 +vt 0.2630 0.3536 +vt 0.2630 0.3417 +vt 0.2475 0.3537 +vt 0.2475 0.3415 +vt 0.2086 0.8492 +vt 0.2182 0.8470 +vt 0.2425 0.8424 +vt 0.2442 0.8529 +vt 0.0427 0.3529 +vt 0.0427 0.3424 +vt 0.0558 0.3420 +vt 0.0558 0.3533 +vt 0.0703 0.3417 +vt 0.0703 0.3536 +vt 0.0858 0.3415 +vt 0.0858 0.3537 +vt 0.3036 0.8409 +vt 0.2943 0.8376 +vt 0.2677 0.8406 +vt 0.2707 0.8304 +vt 0.2906 0.3304 +vt 0.2906 0.3406 +vt 0.2775 0.3410 +vt 0.2775 0.3300 +vt 0.2630 0.3413 +vt 0.2630 0.3297 +vt 0.2475 0.3414 +vt 0.2475 0.3295 +vt 0.2062 0.8409 +vt 0.2155 0.8376 +vt 0.2391 0.8304 +vt 0.2421 0.8406 +vt 0.0427 0.3406 +vt 0.0427 0.3304 +vt 0.0558 0.3300 +vt 0.0558 0.3410 +vt 0.0703 0.3297 +vt 0.0703 0.3413 +vt 0.0858 0.3295 +vt 0.0858 0.3414 +vt 0.3069 0.8329 +vt 0.2980 0.8287 +vt 0.2713 0.8286 +vt 0.2754 0.8188 +vt 0.2906 0.3188 +vt 0.2906 0.3286 +vt 0.2775 0.3290 +vt 0.2775 0.3184 +vt 0.2630 0.3293 +vt 0.2630 0.3182 +vt 0.2475 0.3294 +vt 0.2475 0.3180 +vt 0.2029 0.8329 +vt 0.2118 0.8287 +vt 0.2344 0.8188 +vt 0.2385 0.8286 +vt 0.0427 0.3286 +vt 0.0427 0.3188 +vt 0.0558 0.3184 +vt 0.0558 0.3290 +vt 0.0703 0.3182 +vt 0.0703 0.3293 +vt 0.0858 0.3180 +vt 0.0858 0.3294 +vt 0.3110 0.8254 +vt 0.3027 0.8202 +vt 0.2762 0.8172 +vt 0.2813 0.8078 +vt 0.2906 0.3078 +vt 0.2906 0.3172 +vt 0.2775 0.3175 +vt 0.2775 0.3075 +vt 0.2630 0.3177 +vt 0.2630 0.3072 +vt 0.2475 0.3179 +vt 0.2475 0.3071 +vt 0.1988 0.8254 +vt 0.2071 0.8202 +vt 0.2285 0.8078 +vt 0.2336 0.8172 +vt 0.0427 0.3172 +vt 0.0427 0.3078 +vt 0.0558 0.3075 +vt 0.0558 0.3175 +vt 0.0703 0.3072 +vt 0.0703 0.3177 +vt 0.0858 0.3071 +vt 0.0858 0.3179 +vt 0.3160 0.8184 +vt 0.3083 0.8122 +vt 0.2823 0.8063 +vt 0.2885 0.7976 +vt 0.2906 0.2976 +vt 0.2906 0.3063 +vt 0.2775 0.3066 +vt 0.2775 0.2973 +vt 0.2630 0.3068 +vt 0.2630 0.2970 +vt 0.2475 0.3070 +vt 0.2475 0.2969 +vt 0.1938 0.8184 +vt 0.2015 0.8122 +vt 0.2213 0.7976 +vt 0.2275 0.8063 +vt 0.0427 0.3063 +vt 0.0427 0.2976 +vt 0.0558 0.2973 +vt 0.0558 0.3066 +vt 0.0703 0.2970 +vt 0.0703 0.3068 +vt 0.0858 0.2969 +vt 0.0858 0.3070 +vt 0.3218 0.8120 +vt 0.3148 0.8050 +vt 0.2896 0.7962 +vt 0.2967 0.7882 +vt 0.2906 0.2579 +vt 0.2906 0.2938 +vt 0.2775 0.2951 +vt 0.2775 0.2566 +vt 0.2630 0.2960 +vt 0.2630 0.2557 +vt 0.2475 0.2966 +vt 0.2475 0.2551 +vt 0.1880 0.8120 +vt 0.1950 0.8050 +vt 0.2131 0.7882 +vt 0.2202 0.7962 +vt 0.0427 0.2938 +vt 0.0427 0.2579 +vt 0.0558 0.2566 +vt 0.0558 0.2951 +vt 0.0703 0.2557 +vt 0.0703 0.2960 +vt 0.0858 0.2551 +vt 0.0858 0.2966 +vt 0.3282 0.8062 +vt 0.3220 0.7985 +vt 0.2980 0.7869 +vt 0.3060 0.7798 +vt 0.5773 0.7938 +vt 0.5773 0.7579 +vt 0.5878 0.7566 +vt 0.5878 0.7951 +vt 0.5994 0.7557 +vt 0.5994 0.7960 +vt 0.6118 0.7551 +vt 0.6118 0.7966 +vt 0.1816 0.8062 +vt 0.1878 0.7985 +vt 0.2038 0.7798 +vt 0.2118 0.7869 +vt 0.7757 0.7579 +vt 0.7757 0.7938 +vt 0.7652 0.7951 +vt 0.7652 0.7566 +vt 0.7536 0.7960 +vt 0.7536 0.7557 +vt 0.7412 0.7966 +vt 0.7412 0.7551 +vt 0.3352 0.8012 +vt 0.3300 0.7929 +vt 0.3074 0.7787 +vt 0.3161 0.7725 +vt 0.5773 0.8063 +vt 0.5773 0.7976 +vt 0.5878 0.7973 +vt 0.5878 0.8066 +vt 0.5994 0.7970 +vt 0.5994 0.8068 +vt 0.6118 0.7969 +vt 0.6118 0.8070 +vt 0.1746 0.8012 +vt 0.1798 0.7929 +vt 0.1937 0.7725 +vt 0.2024 0.7787 +vt 0.7757 0.7976 +vt 0.7757 0.8063 +vt 0.7652 0.8066 +vt 0.7652 0.7973 +vt 0.7536 0.8068 +vt 0.7536 0.7970 +vt 0.7412 0.8070 +vt 0.7412 0.7969 +vt 0.3427 0.7971 +vt 0.3385 0.7882 +vt 0.3176 0.7715 +vt 0.3270 0.7664 +vt 0.5773 0.8172 +vt 0.5773 0.8078 +vt 0.5878 0.8075 +vt 0.5878 0.8175 +vt 0.5994 0.8072 +vt 0.5994 0.8177 +vt 0.6118 0.8071 +vt 0.6118 0.8179 +vt 0.1671 0.7971 +vt 0.1713 0.7882 +vt 0.1828 0.7664 +vt 0.1922 0.7715 +vt 0.7757 0.8078 +vt 0.7757 0.8172 +vt 0.7652 0.8175 +vt 0.7652 0.8075 +vt 0.7536 0.8177 +vt 0.7536 0.8072 +vt 0.7412 0.8179 +vt 0.7412 0.8071 +vt 0.3507 0.7938 +vt 0.3474 0.7845 +vt 0.3286 0.7656 +vt 0.3384 0.7615 +vt 0.5773 0.8286 +vt 0.5773 0.8188 +vt 0.5878 0.8184 +vt 0.5878 0.8290 +vt 0.5994 0.8182 +vt 0.5994 0.8293 +vt 0.6118 0.8180 +vt 0.6118 0.8294 +vt 0.1591 0.7938 +vt 0.1624 0.7845 +vt 0.1714 0.7615 +vt 0.1812 0.7656 +vt 0.7757 0.8188 +vt 0.7757 0.8286 +vt 0.7652 0.8290 +vt 0.7652 0.8184 +vt 0.7536 0.8293 +vt 0.7536 0.8182 +vt 0.7412 0.8294 +vt 0.7412 0.8180 +vt 0.3590 0.7914 +vt 0.3568 0.7818 +vt 0.3402 0.7609 +vt 0.3504 0.7579 +vt 0.5773 0.8406 +vt 0.5773 0.8304 +vt 0.5878 0.8300 +vt 0.5878 0.8410 +vt 0.5994 0.8297 +vt 0.5994 0.8413 +vt 0.6118 0.8295 +vt 0.6118 0.8414 +vt 0.1508 0.7914 +vt 0.1530 0.7818 +vt 0.1594 0.7579 +vt 0.1696 0.7609 +vt 0.7757 0.8304 +vt 0.7757 0.8406 +vt 0.7652 0.8410 +vt 0.7652 0.8300 +vt 0.7536 0.8413 +vt 0.7536 0.8297 +vt 0.7412 0.8414 +vt 0.7412 0.8295 +vt 0.3675 0.7899 +vt 0.3664 0.7801 +vt 0.3522 0.7575 +vt 0.3627 0.7558 +vt 0.5773 0.8529 +vt 0.5773 0.8424 +vt 0.5878 0.8420 +vt 0.5878 0.8533 +vt 0.5994 0.8417 +vt 0.5994 0.8536 +vt 0.6118 0.8415 +vt 0.6118 0.8537 +vt 0.1423 0.7899 +vt 0.1434 0.7801 +vt 0.1471 0.7558 +vt 0.1576 0.7575 +vt 0.7757 0.8424 +vt 0.7757 0.8529 +vt 0.7652 0.8533 +vt 0.7652 0.8420 +vt 0.7536 0.8536 +vt 0.7536 0.8417 +vt 0.7412 0.8537 +vt 0.7412 0.8415 +vt 0.3770 0.7894 +vt 0.3768 0.7796 +vt 0.3645 0.7555 +vt 0.3756 0.7549 +vt 0.5773 0.8658 +vt 0.5773 0.8547 +vt 0.5878 0.8543 +vt 0.5878 0.8660 +vt 0.5994 0.8540 +vt 0.5994 0.8662 +vt 0.6118 0.8539 +vt 0.6118 0.8662 +vt 0.1328 0.7894 +vt 0.1330 0.7796 +vt 0.1342 0.7549 +vt 0.1453 0.7555 +vt 0.7757 0.8547 +vt 0.7757 0.8658 +vt 0.7652 0.8660 +vt 0.7652 0.8543 +vt 0.7536 0.8662 +vt 0.7536 0.8540 +vt 0.7412 0.8662 +vt 0.7412 0.8539 +vt 0.3972 0.7899 +vt 0.3877 0.7894 +vt 0.3879 0.7796 +vt 0.3983 0.7801 +vt 0.3891 0.7549 +vt 0.4002 0.7555 +vt 0.5773 0.8904 +vt 0.5773 0.8793 +vt 0.5878 0.8791 +vt 0.5878 0.8908 +vt 0.5994 0.8789 +vt 0.5994 0.8911 +vt 0.6118 0.8789 +vt 0.6118 0.8912 +vt 0.1221 0.7894 +vt 0.1126 0.7899 +vt 0.1115 0.7801 +vt 0.1219 0.7796 +vt 0.1096 0.7555 +vt 0.1207 0.7549 +vt 0.7757 0.8793 +vt 0.7757 0.8904 +vt 0.7652 0.8908 +vt 0.7652 0.8791 +vt 0.7536 0.8911 +vt 0.7536 0.8789 +vt 0.7412 0.8912 +vt 0.7412 0.8789 +vt 0.4057 0.7914 +vt 0.4079 0.7818 +vt 0.4020 0.7558 +vt 0.4125 0.7575 +vt 0.5773 0.9027 +vt 0.5773 0.8922 +vt 0.5878 0.8918 +vt 0.5878 0.9031 +vt 0.5994 0.8915 +vt 0.5994 0.9034 +vt 0.6118 0.8914 +vt 0.6118 0.9036 +vt 0.1041 0.7914 +vt 0.1019 0.7818 +vt 0.0973 0.7575 +vt 0.1078 0.7558 +vt 0.7757 0.8922 +vt 0.7757 0.9027 +vt 0.7652 0.9031 +vt 0.7652 0.8918 +vt 0.7536 0.9034 +vt 0.7536 0.8915 +vt 0.7412 0.9036 +vt 0.7412 0.8914 +vt 0.4140 0.7938 +vt 0.4173 0.7845 +vt 0.4143 0.7579 +vt 0.4245 0.7609 +vt 0.5773 0.9147 +vt 0.5773 0.9045 +vt 0.5878 0.9041 +vt 0.5878 0.9151 +vt 0.5994 0.9038 +vt 0.5994 0.9154 +vt 0.6118 0.9037 +vt 0.6118 0.9156 +vt 0.0958 0.7938 +vt 0.0925 0.7845 +vt 0.0853 0.7609 +vt 0.0955 0.7579 +vt 0.7757 0.9045 +vt 0.7757 0.9147 +vt 0.7652 0.9151 +vt 0.7652 0.9041 +vt 0.7536 0.9154 +vt 0.7536 0.9038 +vt 0.7412 0.9156 +vt 0.7412 0.9037 +vt 0.4220 0.7971 +vt 0.4262 0.7882 +vt 0.4263 0.7615 +vt 0.4361 0.7656 +vt 0.5773 0.9263 +vt 0.5773 0.9165 +vt 0.5878 0.9161 +vt 0.5878 0.9267 +vt 0.5994 0.9158 +vt 0.5994 0.9269 +vt 0.6118 0.9157 +vt 0.6118 0.9271 +vt 0.0878 0.7971 +vt 0.0836 0.7882 +vt 0.0737 0.7656 +vt 0.0835 0.7615 +vt 0.7757 0.9165 +vt 0.7757 0.9263 +vt 0.7652 0.9267 +vt 0.7652 0.9161 +vt 0.7536 0.9269 +vt 0.7536 0.9158 +vt 0.7412 0.9271 +vt 0.7412 0.9157 +vt 0.4295 0.8012 +vt 0.4347 0.7929 +vt 0.4377 0.7664 +vt 0.4471 0.7715 +vt 0.5773 0.9373 +vt 0.5773 0.9279 +vt 0.5878 0.9276 +vt 0.5878 0.9376 +vt 0.5994 0.9274 +vt 0.5994 0.9379 +vt 0.6118 0.9272 +vt 0.6118 0.9380 +vt 0.0803 0.8012 +vt 0.0751 0.7929 +vt 0.0627 0.7715 +vt 0.0721 0.7664 +vt 0.7757 0.9279 +vt 0.7757 0.9373 +vt 0.7652 0.9376 +vt 0.7652 0.9276 +vt 0.7536 0.9379 +vt 0.7536 0.9274 +vt 0.7412 0.9380 +vt 0.7412 0.9272 +vt 0.4365 0.8062 +vt 0.4427 0.7985 +vt 0.4486 0.7725 +vt 0.4573 0.7787 +vt 0.5773 0.9475 +vt 0.5773 0.9388 +vt 0.5878 0.9385 +vt 0.5878 0.9478 +vt 0.5994 0.9383 +vt 0.5994 0.9481 +vt 0.6118 0.9381 +vt 0.6118 0.9482 +vt 0.0733 0.8062 +vt 0.0671 0.7985 +vt 0.0525 0.7787 +vt 0.0612 0.7725 +vt 0.7757 0.9388 +vt 0.7757 0.9475 +vt 0.7652 0.9478 +vt 0.7652 0.9385 +vt 0.7536 0.9481 +vt 0.7536 0.9383 +vt 0.7412 0.9482 +vt 0.7412 0.9381 +vt 0.4429 0.8120 +vt 0.4499 0.8050 +vt 0.4587 0.7798 +vt 0.4667 0.7869 +vt 0.5773 0.9872 +vt 0.5773 0.9513 +vt 0.5878 0.9500 +vt 0.5878 0.9885 +vt 0.5994 0.9491 +vt 0.5994 0.9894 +vt 0.6118 0.9485 +vt 0.6118 0.9900 +vt 0.0669 0.8120 +vt 0.0599 0.8050 +vt 0.0431 0.7869 +vt 0.0511 0.7798 +vt 0.7757 0.9513 +vt 0.7757 0.9872 +vt 0.7652 0.9885 +vt 0.7652 0.9500 +vt 0.7536 0.9894 +vt 0.7536 0.9491 +vt 0.7412 0.9900 +vt 0.7412 0.9485 +vt 0.4487 0.8184 +vt 0.4564 0.8122 +vt 0.4680 0.7882 +vt 0.4751 0.7962 +vt 0.0427 0.0487 +vt 0.0427 0.0128 +vt 0.0558 0.0115 +vt 0.0558 0.0500 +vt 0.0703 0.0106 +vt 0.0703 0.0509 +vt 0.0858 0.0100 +vt 0.0858 0.0515 +vt 0.0611 0.8184 +vt 0.0534 0.8122 +vt 0.0347 0.7962 +vt 0.0418 0.7882 +vt 0.2906 0.0128 +vt 0.2906 0.0487 +vt 0.2775 0.0500 +vt 0.2775 0.0115 +vt 0.2630 0.0509 +vt 0.2630 0.0106 +vt 0.2475 0.0515 +vt 0.2475 0.0100 +vt 0.4537 0.8254 +vt 0.4620 0.8202 +vt 0.4762 0.7976 +vt 0.4824 0.8063 +vt 0.0427 0.0612 +vt 0.0427 0.0525 +vt 0.0558 0.0522 +vt 0.0558 0.0615 +vt 0.0703 0.0519 +vt 0.0703 0.0617 +vt 0.0858 0.0518 +vt 0.0858 0.0619 +vt 0.0561 0.8254 +vt 0.0478 0.8202 +vt 0.0274 0.8063 +vt 0.0336 0.7976 +vt 0.2906 0.0525 +vt 0.2906 0.0612 +vt 0.2775 0.0615 +vt 0.2775 0.0522 +vt 0.2630 0.0617 +vt 0.2630 0.0519 +vt 0.2475 0.0619 +vt 0.2475 0.0518 +vt 0.4578 0.8329 +vt 0.4667 0.8287 +vt 0.4834 0.8078 +vt 0.4885 0.8172 +vt 0.0427 0.0721 +vt 0.0427 0.0627 +vt 0.0558 0.0624 +vt 0.0558 0.0724 +vt 0.0703 0.0621 +vt 0.0703 0.0726 +vt 0.0858 0.0620 +vt 0.0858 0.0728 +vt 0.0520 0.8329 +vt 0.0431 0.8287 +vt 0.0213 0.8172 +vt 0.0264 0.8078 +vt 0.2906 0.0627 +vt 0.2906 0.0721 +vt 0.2775 0.0724 +vt 0.2775 0.0624 +vt 0.2630 0.0726 +vt 0.2630 0.0621 +vt 0.2475 0.0728 +vt 0.2475 0.0620 +vt 0.4611 0.8409 +vt 0.4704 0.8376 +vt 0.4893 0.8188 +vt 0.4934 0.8286 +vt 0.0427 0.0835 +vt 0.0427 0.0737 +vt 0.0558 0.0733 +vt 0.0558 0.0839 +vt 0.0703 0.0731 +vt 0.0703 0.0842 +vt 0.0858 0.0729 +vt 0.0858 0.0843 +vt 0.0487 0.8409 +vt 0.0394 0.8376 +vt 0.0164 0.8286 +vt 0.0205 0.8188 +vt 0.2906 0.0737 +vt 0.2906 0.0835 +vt 0.2775 0.0839 +vt 0.2775 0.0733 +vt 0.2630 0.0842 +vt 0.2630 0.0731 +vt 0.2475 0.0843 +vt 0.2475 0.0729 +vt 0.4635 0.8492 +vt 0.4731 0.8470 +vt 0.4940 0.8304 +vt 0.4970 0.8406 +vt 0.0427 0.0955 +vt 0.0427 0.0853 +vt 0.0558 0.0849 +vt 0.0558 0.0959 +vt 0.0703 0.0846 +vt 0.0703 0.0962 +vt 0.0858 0.0844 +vt 0.0858 0.0963 +vt 0.0463 0.8492 +vt 0.0367 0.8470 +vt 0.0128 0.8406 +vt 0.0158 0.8304 +vt 0.2906 0.0853 +vt 0.2906 0.0955 +vt 0.2775 0.0959 +vt 0.2775 0.0849 +vt 0.2630 0.0962 +vt 0.2630 0.0846 +vt 0.2475 0.0963 +vt 0.2475 0.0844 +vt 0.4650 0.8577 +vt 0.4748 0.8566 +vt 0.4974 0.8424 +vt 0.4991 0.8529 +vt 0.0427 0.1078 +vt 0.0427 0.0973 +vt 0.0558 0.0969 +vt 0.0558 0.1082 +vt 0.0703 0.0966 +vt 0.0703 0.1085 +vt 0.0858 0.0964 +vt 0.0858 0.1086 +vt 0.0448 0.8577 +vt 0.0350 0.8566 +vt 0.0107 0.8529 +vt 0.0124 0.8424 +vt 0.2906 0.0973 +vt 0.2906 0.1078 +vt 0.2775 0.1082 +vt 0.2775 0.0969 +vt 0.2630 0.1085 +vt 0.2630 0.0966 +vt 0.2475 0.1086 +vt 0.2475 0.0964 +vt 0.4655 0.8672 +vt 0.4753 0.8670 +vt 0.4994 0.8547 +vt 0.5000 0.8658 +vt 0.0427 0.1207 +vt 0.0427 0.1096 +vt 0.0558 0.1092 +vt 0.0558 0.1209 +vt 0.0703 0.1089 +vt 0.0703 0.1211 +vt 0.0858 0.1088 +vt 0.0858 0.1211 +vt 0.0443 0.8672 +vt 0.0345 0.8670 +vt 0.0098 0.8658 +vt 0.0104 0.8547 +vt 0.2906 0.1096 +vt 0.2906 0.1207 +vt 0.2775 0.1209 +vt 0.2775 0.1092 +vt 0.2630 0.1211 +vt 0.2630 0.1089 +vt 0.2475 0.1211 +vt 0.2475 0.1088 +vt 0.2101 0.8874 +vt 0.2106 0.8779 +vt 0.2204 0.8781 +vt 0.2199 0.8885 +vt 0.2451 0.8793 +vt 0.2445 0.8904 +vt 0.0427 0.3904 +vt 0.0427 0.3793 +vt 0.0558 0.3791 +vt 0.0558 0.3908 +vt 0.0703 0.3789 +vt 0.0703 0.3911 +vt 0.0858 0.3789 +vt 0.0858 0.3912 +vt 0.2992 0.8779 +vt 0.2997 0.8874 +vt 0.2899 0.8885 +vt 0.2894 0.8781 +vt 0.2653 0.8904 +vt 0.2647 0.8793 +vt 0.2906 0.3793 +vt 0.2906 0.3904 +vt 0.2775 0.3908 +vt 0.2775 0.3791 +vt 0.2630 0.3911 +vt 0.2630 0.3789 +vt 0.2475 0.3912 +vt 0.2475 0.3789 +vt 0.2086 0.8959 +vt 0.2182 0.8981 +vt 0.2442 0.8922 +vt 0.2425 0.9027 +vt 0.0427 0.4027 +vt 0.0427 0.3922 +vt 0.0558 0.3918 +vt 0.0558 0.4031 +vt 0.0703 0.3915 +vt 0.0703 0.4034 +vt 0.0858 0.3914 +vt 0.0858 0.4036 +vt 0.3012 0.8959 +vt 0.2916 0.8981 +vt 0.2673 0.9027 +vt 0.2656 0.8922 +vt 0.2906 0.3922 +vt 0.2906 0.4027 +vt 0.2775 0.4031 +vt 0.2775 0.3918 +vt 0.2630 0.4034 +vt 0.2630 0.3915 +vt 0.2475 0.4036 +vt 0.2475 0.3914 +vt 0.2062 0.9042 +vt 0.2155 0.9075 +vt 0.2421 0.9045 +vt 0.2391 0.9147 +vt 0.0427 0.4147 +vt 0.0427 0.4045 +vt 0.0558 0.4041 +vt 0.0558 0.4151 +vt 0.0703 0.4038 +vt 0.0703 0.4154 +vt 0.0858 0.4037 +vt 0.0858 0.4156 +vt 0.3036 0.9042 +vt 0.2943 0.9075 +vt 0.2707 0.9147 +vt 0.2677 0.9045 +vt 0.2906 0.4045 +vt 0.2906 0.4147 +vt 0.2775 0.4151 +vt 0.2775 0.4041 +vt 0.2630 0.4154 +vt 0.2630 0.4038 +vt 0.2475 0.4156 +vt 0.2475 0.4037 +vt 0.2029 0.9122 +vt 0.2118 0.9164 +vt 0.2385 0.9165 +vt 0.2344 0.9263 +vt 0.0427 0.4263 +vt 0.0427 0.4165 +vt 0.0558 0.4161 +vt 0.0558 0.4267 +vt 0.0703 0.4158 +vt 0.0703 0.4269 +vt 0.0858 0.4157 +vt 0.0858 0.4271 +vt 0.3069 0.9122 +vt 0.2980 0.9164 +vt 0.2754 0.9263 +vt 0.2713 0.9165 +vt 0.2906 0.4165 +vt 0.2906 0.4263 +vt 0.2775 0.4267 +vt 0.2775 0.4161 +vt 0.2630 0.4269 +vt 0.2630 0.4158 +vt 0.2475 0.4271 +vt 0.2475 0.4157 +vt 0.1988 0.9197 +vt 0.2071 0.9249 +vt 0.2336 0.9279 +vt 0.2285 0.9373 +vt 0.0427 0.4373 +vt 0.0427 0.4279 +vt 0.0558 0.4276 +vt 0.0558 0.4376 +vt 0.0703 0.4274 +vt 0.0703 0.4379 +vt 0.0858 0.4272 +vt 0.0858 0.4380 +vt 0.3110 0.9197 +vt 0.3027 0.9249 +vt 0.2813 0.9373 +vt 0.2762 0.9279 +vt 0.2906 0.4279 +vt 0.2906 0.4373 +vt 0.2775 0.4376 +vt 0.2775 0.4276 +vt 0.2630 0.4379 +vt 0.2630 0.4274 +vt 0.2475 0.4380 +vt 0.2475 0.4272 +vt 0.1938 0.9267 +vt 0.2015 0.9329 +vt 0.2275 0.9388 +vt 0.2213 0.9475 +vt 0.0427 0.4475 +vt 0.0427 0.4388 +vt 0.0558 0.4385 +vt 0.0558 0.4478 +vt 0.0703 0.4383 +vt 0.0703 0.4481 +vt 0.0858 0.4381 +vt 0.0858 0.4482 +vt 0.3160 0.9267 +vt 0.3083 0.9329 +vt 0.2885 0.9475 +vt 0.2823 0.9388 +vt 0.2906 0.4388 +vt 0.2906 0.4475 +vt 0.2775 0.4478 +vt 0.2775 0.4385 +vt 0.2630 0.4481 +vt 0.2630 0.4383 +vt 0.2475 0.4482 +vt 0.2475 0.4381 +vt 0.1880 0.9331 +vt 0.1950 0.9401 +vt 0.2202 0.9489 +vt 0.2131 0.9569 +vt 0.0427 0.4872 +vt 0.0427 0.4513 +vt 0.0558 0.4500 +vt 0.0558 0.4885 +vt 0.0703 0.4491 +vt 0.0703 0.4894 +vt 0.0858 0.4485 +vt 0.0858 0.4900 +vt 0.3218 0.9331 +vt 0.3148 0.9401 +vt 0.2967 0.9569 +vt 0.2896 0.9489 +vt 0.2906 0.4513 +vt 0.2906 0.4872 +vt 0.2775 0.4885 +vt 0.2775 0.4500 +vt 0.2630 0.4894 +vt 0.2630 0.4491 +vt 0.2475 0.4900 +vt 0.2475 0.4485 +vt 0.1816 0.9389 +vt 0.1878 0.9466 +vt 0.2118 0.9582 +vt 0.2038 0.9653 +vt 0.0659 0.5388 +vt 0.0659 0.5030 +vt 0.0766 0.5017 +vt 0.0766 0.5401 +vt 0.0884 0.5007 +vt 0.0884 0.5411 +vt 0.1010 0.5001 +vt 0.1010 0.5417 +vt 0.3282 0.9389 +vt 0.3220 0.9466 +vt 0.3060 0.9653 +vt 0.2980 0.9582 +vt 0.2674 0.5030 +vt 0.2674 0.5388 +vt 0.2567 0.5401 +vt 0.2567 0.5017 +vt 0.2449 0.5411 +vt 0.2449 0.5007 +vt 0.2323 0.5417 +vt 0.2323 0.5001 +vt 0.1746 0.9439 +vt 0.1798 0.9522 +vt 0.2024 0.9664 +vt 0.1937 0.9726 +vt 0.0659 0.5513 +vt 0.0659 0.5426 +vt 0.0766 0.5423 +vt 0.0766 0.5516 +vt 0.0884 0.5420 +vt 0.0884 0.5518 +vt 0.1010 0.5419 +vt 0.1010 0.5520 +vt 0.3352 0.9439 +vt 0.3300 0.9522 +vt 0.3161 0.9726 +vt 0.3074 0.9664 +vt 0.2674 0.5426 +vt 0.2674 0.5513 +vt 0.2567 0.5516 +vt 0.2567 0.5423 +vt 0.2449 0.5518 +vt 0.2449 0.5420 +vt 0.2323 0.5520 +vt 0.2323 0.5419 +vt 0.1671 0.9480 +vt 0.1713 0.9569 +vt 0.1922 0.9736 +vt 0.1828 0.9787 +vt 0.0659 0.5622 +vt 0.0659 0.5528 +vt 0.0766 0.5525 +vt 0.0766 0.5625 +vt 0.0884 0.5522 +vt 0.0884 0.5628 +vt 0.1010 0.5521 +vt 0.1010 0.5629 +vt 0.3427 0.9480 +vt 0.3385 0.9569 +vt 0.3270 0.9787 +vt 0.3176 0.9736 +vt 0.2674 0.5528 +vt 0.2674 0.5622 +vt 0.2567 0.5625 +vt 0.2567 0.5525 +vt 0.2449 0.5628 +vt 0.2449 0.5522 +vt 0.2323 0.5629 +vt 0.2323 0.5521 +vt 0.1591 0.9513 +vt 0.1624 0.9606 +vt 0.1812 0.9795 +vt 0.1714 0.9836 +vt 0.0659 0.5737 +vt 0.0659 0.5638 +vt 0.0766 0.5634 +vt 0.0766 0.5740 +vt 0.0884 0.5632 +vt 0.0884 0.5743 +vt 0.1010 0.5630 +vt 0.1010 0.5745 +vt 0.3507 0.9513 +vt 0.3474 0.9606 +vt 0.3384 0.9836 +vt 0.3286 0.9795 +vt 0.2674 0.5638 +vt 0.2674 0.5737 +vt 0.2567 0.5740 +vt 0.2567 0.5634 +vt 0.2449 0.5743 +vt 0.2449 0.5632 +vt 0.2323 0.5745 +vt 0.2323 0.5630 +vt 0.1508 0.9537 +vt 0.1530 0.9633 +vt 0.1696 0.9842 +vt 0.1594 0.9872 +vt 0.0659 0.5856 +vt 0.0659 0.5754 +vt 0.0766 0.5750 +vt 0.0766 0.5860 +vt 0.0884 0.5747 +vt 0.0884 0.5863 +vt 0.1010 0.5746 +vt 0.1010 0.5865 +vt 0.3590 0.9537 +vt 0.3568 0.9633 +vt 0.3504 0.9872 +vt 0.3402 0.9842 +vt 0.2674 0.5754 +vt 0.2674 0.5856 +vt 0.2567 0.5860 +vt 0.2567 0.5750 +vt 0.2449 0.5863 +vt 0.2449 0.5747 +vt 0.2323 0.5865 +vt 0.2323 0.5746 +vt 0.1423 0.9552 +vt 0.1434 0.9650 +vt 0.1576 0.9876 +vt 0.1471 0.9893 +vt 0.0659 0.5979 +vt 0.0659 0.5874 +vt 0.0766 0.5870 +vt 0.0766 0.5983 +vt 0.0884 0.5867 +vt 0.0884 0.5986 +vt 0.1010 0.5866 +vt 0.1010 0.5988 +vt 0.3675 0.9552 +vt 0.3664 0.9650 +vt 0.3627 0.9893 +vt 0.3522 0.9876 +vt 0.2674 0.5874 +vt 0.2674 0.5979 +vt 0.2567 0.5983 +vt 0.2567 0.5870 +vt 0.2449 0.5986 +vt 0.2449 0.5867 +vt 0.2323 0.5988 +vt 0.2323 0.5866 +vt 0.1328 0.9557 +vt 0.1330 0.9655 +vt 0.1453 0.9896 +vt 0.1342 0.9902 +vt 0.0659 0.6108 +vt 0.0659 0.5997 +vt 0.0766 0.5993 +vt 0.0766 0.6110 +vt 0.0884 0.5991 +vt 0.0884 0.6112 +vt 0.1010 0.5989 +vt 0.1010 0.6113 +vt 0.3770 0.9557 +vt 0.3768 0.9655 +vt 0.3756 0.9902 +vt 0.3645 0.9896 +vt 0.2674 0.5997 +vt 0.2674 0.6108 +vt 0.2567 0.6110 +vt 0.2567 0.5993 +vt 0.2449 0.6112 +vt 0.2449 0.5991 +vt 0.2323 0.6113 +vt 0.2323 0.5989 +vt 0.7412 0.8663 +vt 0.7412 0.8788 +vt 0.7536 0.8664 +vt 0.7536 0.8787 +vt 0.7652 0.8665 +vt 0.7652 0.8786 +vt 0.7757 0.8667 +vt 0.7757 0.8784 +vt 0.8020 0.8670 +vt 0.8020 0.8781 +vt 0.0858 0.3788 +vt 0.0858 0.3663 +vt 0.0703 0.3787 +vt 0.0703 0.3664 +vt 0.0558 0.3786 +vt 0.0558 0.3665 +vt 0.0427 0.3784 +vt 0.0427 0.3667 +vt 0.0098 0.3781 +vt 0.0098 0.3670 +vt 0.1010 0.6238 +vt 0.0884 0.6237 +vt 0.0884 0.6114 +vt 0.0766 0.6236 +vt 0.0766 0.6115 +vt 0.0659 0.6234 +vt 0.0659 0.6117 +vt 0.0392 0.6232 +vt 0.0392 0.6120 +vt 0.2475 0.1212 +vt 0.2475 0.1337 +vt 0.2630 0.1213 +vt 0.2630 0.1336 +vt 0.2775 0.1214 +vt 0.2775 0.1335 +vt 0.2906 0.1216 +vt 0.2906 0.1333 +vt 0.3235 0.1219 +vt 0.3235 0.1330 +vt 0.2647 0.8784 +vt 0.2647 0.8667 +vt 0.2906 0.3667 +vt 0.2906 0.3784 +vt 0.2775 0.3786 +vt 0.2775 0.3665 +vt 0.2630 0.3787 +vt 0.2630 0.3664 +vt 0.2475 0.3788 +vt 0.2475 0.3663 +vt 0.3882 0.9902 +vt 0.3765 0.9902 +vt 0.2674 0.6117 +vt 0.2674 0.6234 +vt 0.2567 0.6236 +vt 0.2567 0.6115 +vt 0.2449 0.6237 +vt 0.2449 0.6114 +vt 0.2323 0.6238 +vt 0.6118 0.8788 +vt 0.6118 0.8663 +vt 0.5994 0.8787 +vt 0.5994 0.8664 +vt 0.5878 0.8786 +vt 0.5878 0.8665 +vt 0.5773 0.8784 +vt 0.5773 0.8667 +vt 0.5510 0.8781 +vt 0.5510 0.8670 +vt 0.0858 0.1337 +vt 0.0858 0.1212 +vt 0.0703 0.1336 +vt 0.0703 0.1213 +vt 0.0558 0.1335 +vt 0.0558 0.1214 +vt 0.0427 0.1333 +vt 0.0427 0.1216 +vt 0.0098 0.1330 +vt 0.0098 0.1219 +vn 1.0000 -0.0000 -0.0000 +vn 0.8392 -0.3845 0.3845 +vn 0.8392 -0.3021 0.4521 +vn 0.8622 -0.2814 0.4212 +vn 0.8622 -0.3582 0.3582 +vn 0.8392 -0.4521 -0.3021 +vn 0.8392 -0.5024 -0.2081 +vn 0.8622 -0.4680 -0.1939 +vn 0.8622 -0.4212 -0.2814 +vn 0.8392 -0.5333 0.1061 +vn 0.8392 -0.5024 0.2081 +vn 0.8622 -0.4680 0.1938 +vn 0.8622 -0.4968 0.0988 +vn 0.8392 -0.1061 0.5333 +vn 0.8392 0.0000 0.5437 +vn 0.8622 0.0000 0.5066 +vn 0.8622 -0.0988 0.4968 +vn 0.8392 -0.1061 -0.5333 +vn 0.8392 -0.2081 -0.5024 +vn 0.8622 -0.1939 -0.4680 +vn 0.8622 -0.0988 -0.4968 +vn 0.8392 -0.3021 -0.4521 +vn 0.8622 -0.2814 -0.4212 +vn 0.8392 0.1061 0.5333 +vn 0.8622 0.0988 0.4968 +vn 0.8392 0.2081 0.5024 +vn 0.8392 0.3021 0.4521 +vn 0.8622 0.2814 0.4212 +vn 0.8622 0.1938 0.4680 +vn 0.8392 0.3845 0.3845 +vn 0.8392 0.4521 0.3021 +vn 0.8622 0.4212 0.2814 +vn 0.8622 0.3582 0.3582 +vn 0.8392 0.5024 0.2081 +vn 0.8622 0.4680 0.1939 +vn 0.8392 0.5333 0.1061 +vn 0.8392 0.5437 0.0000 +vn 0.8622 0.5066 0.0000 +vn 0.8622 0.4968 0.0988 +vn 0.8392 0.0000 -0.5437 +vn 0.8622 0.0000 -0.5066 +vn 0.8392 0.5333 -0.1061 +vn 0.8392 0.5024 -0.2081 +vn 0.8622 0.4680 -0.1939 +vn 0.8622 0.4968 -0.0988 +vn 0.8392 0.4521 -0.3021 +vn 0.8392 0.3845 -0.3845 +vn 0.8622 0.3582 -0.3582 +vn 0.8622 0.4212 -0.2814 +vn 0.8392 0.3021 -0.4521 +vn 0.8392 0.2081 -0.5024 +vn 0.8622 0.1939 -0.4680 +vn 0.8622 0.2814 -0.4212 +vn 0.8392 0.1061 -0.5333 +vn 0.8622 0.0988 -0.4968 +vn 0.8392 -0.3845 -0.3845 +vn 0.8622 -0.3582 -0.3582 +vn 0.8392 -0.5333 -0.1061 +vn 0.8622 -0.4968 -0.0988 +vn 0.8392 -0.5437 0.0000 +vn 0.8622 -0.5065 0.0000 +vn 0.8392 -0.4521 0.3021 +vn 0.8622 -0.4212 0.2814 +vn 0.8392 -0.2081 0.5024 +vn 0.8622 -0.1938 0.4680 +vn 0.9872 -0.0886 0.1326 +vn 0.9872 -0.1127 0.1127 +vn 0.8694 -0.2745 0.4109 +vn 0.8694 -0.3494 0.3494 +vn 0.6327 -0.4302 0.6438 +vn 0.6327 -0.5475 0.5475 +vn 0.9872 -0.1326 0.0886 +vn 0.9872 -0.1473 0.0610 +vn 0.8694 -0.4109 0.2745 +vn 0.8694 -0.4566 0.1891 +vn 0.6327 -0.6438 0.4302 +vn 0.6327 -0.7154 0.2963 +vn 0.9872 -0.1595 0.0000 +vn 0.9872 -0.1564 -0.0311 +vn 0.8694 -0.4942 0.0000 +vn 0.8694 -0.4847 -0.0964 +vn 0.6327 -0.7743 0.0000 +vn 0.6327 -0.7595 -0.1511 +vn 0.9872 0.0311 0.1564 +vn 0.9872 0.0000 0.1595 +vn 0.8694 0.0964 0.4847 +vn 0.8694 0.0000 0.4942 +vn 0.6327 0.1510 0.7595 +vn 0.6327 0.0000 0.7743 +vn 0.9872 0.0886 -0.1326 +vn 0.9872 0.1127 -0.1127 +vn 0.8694 0.2745 -0.4109 +vn 0.8694 0.3494 -0.3494 +vn 0.6327 0.4302 -0.6438 +vn 0.6327 0.5475 -0.5475 +vn 0.9872 -0.1127 -0.1127 +vn 0.9872 -0.0886 -0.1326 +vn 0.8694 -0.3494 -0.3494 +vn 0.8694 -0.2745 -0.4109 +vn 0.6327 -0.5475 -0.5475 +vn 0.6327 -0.4302 -0.6438 +vn 0.9872 0.1473 -0.0610 +vn 0.9872 0.1564 -0.0311 +vn 0.8694 0.4566 -0.1891 +vn 0.8694 0.4847 -0.0964 +vn 0.6327 0.7154 -0.2963 +vn 0.6327 0.7595 -0.1511 +vn 0.9872 0.1473 0.0610 +vn 0.9872 0.1326 0.0886 +vn 0.8694 0.4566 0.1891 +vn 0.8694 0.4109 0.2745 +vn 0.6327 0.7154 0.2963 +vn 0.6327 0.6438 0.4302 +vn 0.9872 0.0610 0.1473 +vn 0.8694 0.1891 0.4566 +vn 0.6327 0.2963 0.7154 +vn 0.8694 0.0000 -0.4942 +vn 0.8694 0.0964 -0.4847 +vn 0.9872 0.0311 -0.1564 +vn 0.9872 0.0000 -0.1595 +vn 0.9872 -0.0610 0.1473 +vn 0.8694 -0.1891 0.4565 +vn 0.6328 -0.2963 0.7154 +vn 0.9872 -0.1473 -0.0610 +vn 0.8694 -0.4566 -0.1891 +vn 0.6327 -0.7154 -0.2963 +vn 0.9872 0.1564 0.0311 +vn 0.8694 0.4847 0.0964 +vn 0.6327 0.7595 0.1511 +vn 0.9872 -0.0610 -0.1473 +vn 0.8694 -0.1891 -0.4566 +vn 0.6327 -0.2963 -0.7154 +vn 0.9872 0.0610 -0.1473 +vn 0.8694 0.1891 -0.4566 +vn 0.6327 0.2963 -0.7154 +vn 0.9872 0.0886 0.1326 +vn 0.8694 0.2745 0.4109 +vn 0.6327 0.4302 0.6438 +vn 0.9872 -0.0311 -0.1564 +vn 0.8694 -0.0964 -0.4847 +vn 0.6327 -0.1510 -0.7595 +vn 0.9872 -0.0311 0.1564 +vn 0.8694 -0.0964 0.4847 +vn 0.6327 -0.1511 0.7595 +vn 0.9872 -0.1564 0.0311 +vn 0.8694 -0.4847 0.0964 +vn 0.6327 -0.7595 0.1511 +vn 0.9872 0.1595 0.0000 +vn 0.8694 0.4942 0.0000 +vn 0.6327 0.7743 0.0000 +vn 0.9872 -0.1326 -0.0886 +vn 0.8694 -0.4109 -0.2745 +vn 0.6327 -0.6438 -0.4302 +vn 0.9872 0.1326 -0.0886 +vn 0.8694 0.4109 -0.2745 +vn 0.6327 0.6438 -0.4302 +vn 0.9872 0.1127 0.1127 +vn 0.8694 0.3494 0.3494 +vn 0.6327 0.5475 0.5475 +vn 0.6327 0.1510 -0.7595 +vn 0.6327 0.0000 -0.7743 +vn 0.0000 0.0000 -1.0000 +vn -0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0280 -0.9986 -0.0436 +vn -0.0280 -0.9986 0.0436 +vn -0.1119 -0.9927 0.0436 +vn -0.1119 -0.9927 -0.0436 +vn -0.9927 -0.1119 -0.0436 +vn -0.9927 -0.1119 0.0436 +vn -0.9986 -0.0280 0.0436 +vn -0.9986 -0.0280 -0.0436 +vn -0.9927 0.1119 0.0436 +vn -0.9927 0.1119 -0.0436 +vn -0.9986 0.0280 -0.0436 +vn -0.9986 0.0280 0.0436 +vn 0.1119 0.9927 -0.0436 +vn 0.1119 0.9927 0.0436 +vn 0.2223 0.9740 0.0436 +vn 0.2223 0.9740 -0.0436 +vn -0.1119 0.9927 0.0436 +vn -0.1119 0.9927 -0.0436 +vn -0.2223 0.9740 -0.0436 +vn -0.2223 0.9740 0.0436 +vn -0.9808 0.0000 0.1951 +vn -0.9808 0.0000 -0.1951 +vn 0.5556 0.0000 -0.8314 +vn 0.8314 0.0000 -0.5556 +vn -0.8314 0.0000 -0.5556 +vn -0.5556 0.0000 -0.8314 +vn -0.6857 -0.1420 -0.7139 +vn 0.0794 -0.1944 -0.9777 +vn 0.0794 -0.3815 -0.9210 +vn -0.6857 -0.2785 -0.6725 +vn -0.6857 0.2785 -0.6725 +vn 0.0794 0.3815 -0.9210 +vn 0.0794 0.1944 -0.9777 +vn -0.6857 0.1420 -0.7139 +vn -0.6857 0.5147 0.5147 +vn 0.0794 0.7049 0.7049 +vn 0.0794 0.8288 0.5538 +vn -0.6857 0.6052 0.4044 +vn -0.6857 0.2785 0.6725 +vn 0.0794 0.3815 0.9210 +vn 0.0794 0.5538 0.8288 +vn -0.6857 0.4044 0.6052 +vn -0.6857 0.7279 0.0000 +vn 0.0794 0.9968 0.0000 +vn 0.0794 0.9777 -0.1945 +vn -0.6857 0.7139 -0.1420 +vn -0.6857 -0.7279 0.0000 +vn 0.0794 -0.9968 0.0000 +vn 0.0794 -0.9777 0.1945 +vn -0.6857 -0.7139 0.1420 +vn -0.6857 0.1420 0.7139 +vn 0.0794 0.1945 0.9777 +vn -0.6857 0.4044 -0.6052 +vn 0.0794 0.5538 -0.8288 +vn 0.0794 0.9210 0.3815 +vn -0.6857 0.6725 0.2785 +vn -0.6857 -0.4044 0.6052 +vn 0.0794 -0.5538 0.8288 +vn 0.0794 -0.3815 0.9210 +vn -0.6857 -0.2785 0.6725 +vn 0.0794 -0.5538 -0.8288 +vn -0.6857 -0.4044 -0.6052 +vn 0.6965 0.2113 0.6857 +vn 0.6965 0.2113 -0.6857 +vn 0.6419 0.3431 -0.6857 +vn 0.6419 0.3431 0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.6965 -0.2113 0.6857 +vn 0.6965 -0.2113 -0.6857 +vn 0.6419 -0.3431 0.6857 +vn 0.6419 -0.3431 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.5626 -0.4617 -0.6857 +vn 0.4617 -0.5626 0.6857 +vn 0.4617 -0.5626 -0.6857 +vn 0.3431 -0.6419 0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn 0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn -0.2113 -0.6965 0.6857 +vn -0.2113 -0.6965 -0.6857 +vn -0.3431 -0.6419 0.6857 +vn -0.3431 -0.6419 -0.6857 +vn -0.4617 -0.5626 0.6857 +vn -0.4617 -0.5626 -0.6857 +vn -0.5626 -0.4617 0.6857 +vn -0.5626 -0.4617 -0.6857 +vn -0.6419 -0.3431 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.7244 0.0713 0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.6965 0.2113 -0.6857 +vn -0.5626 0.4617 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.6419 0.3431 0.6857 +vn -0.4617 0.5626 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.2113 0.6965 -0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn 0.2113 0.6965 0.6857 +vn 0.2113 0.6965 -0.6857 +vn 0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn 0.3431 0.6419 0.6857 +vn 0.3431 0.6419 -0.6857 +vn 0.4617 0.5626 0.6857 +vn 0.4617 0.5626 -0.6857 +vn -0.4604 0.8614 0.2147 +vn -0.4686 0.8767 0.1087 +vn -0.2886 0.9513 0.1087 +vn -0.2835 0.9346 0.2147 +vn -0.0957 0.9720 0.2147 +vn -0.0974 0.9893 0.1087 +vn 0.0957 0.9720 0.2147 +vn 0.0974 0.9893 0.1087 +vn 0.2835 0.9346 0.2147 +vn 0.2886 0.9513 0.1087 +vn 0.4604 0.8614 0.2147 +vn 0.4686 0.8767 0.1087 +vn 0.6196 0.7550 0.2147 +vn 0.6306 0.7684 0.1087 +vn 0.7684 0.6306 0.1087 +vn 0.7550 0.6196 0.2147 +vn 0.8614 0.4604 0.2147 +vn 0.8767 0.4686 0.1087 +vn 0.9346 0.2835 0.2147 +vn 0.9513 0.2886 0.1087 +vn 0.9720 0.0957 0.2147 +vn 0.9893 0.0974 0.1087 +vn 0.9893 -0.0974 0.1087 +vn 0.9720 -0.0957 0.2147 +vn 0.9513 -0.2886 0.1087 +vn 0.9346 -0.2835 0.2147 +vn 0.8614 -0.4604 0.2147 +vn 0.8767 -0.4686 0.1087 +vn 0.7684 -0.6306 0.1087 +vn 0.7550 -0.6196 0.2147 +vn 0.6306 -0.7684 0.1087 +vn 0.6196 -0.7550 0.2147 +vn 0.4604 -0.8614 0.2147 +vn 0.4686 -0.8767 0.1087 +vn 0.2886 -0.9513 0.1087 +vn 0.2835 -0.9346 0.2147 +vn 0.0957 -0.9720 0.2147 +vn 0.0974 -0.9893 0.1087 +vn -0.0974 -0.9893 0.1087 +vn -0.0957 -0.9720 0.2147 +vn -0.2835 -0.9346 0.2147 +vn -0.2886 -0.9513 0.1087 +vn -0.4686 -0.8767 0.1087 +vn -0.4604 -0.8614 0.2147 +vn -0.6306 -0.7684 0.1087 +vn -0.6196 -0.7550 0.2147 +vn -0.7684 -0.6306 0.1087 +vn -0.7550 -0.6196 0.2147 +vn -0.8767 -0.4686 0.1087 +vn -0.8614 -0.4604 0.2147 +vn -0.9513 -0.2886 0.1087 +vn -0.9346 -0.2835 0.2147 +vn -0.9893 -0.0974 0.1087 +vn -0.9720 -0.0957 0.2147 +vn -0.9346 0.2835 0.2147 +vn -0.9720 0.0957 0.2147 +vn -0.9893 0.0974 0.1087 +vn -0.9513 0.2886 0.1087 +vn -0.7550 0.6196 0.2147 +vn -0.8614 0.4604 0.2147 +vn -0.8767 0.4686 0.1087 +vn -0.7684 0.6306 0.1087 +vn -0.6196 0.7550 0.2147 +vn -0.6306 0.7684 0.1087 +vn 0.9893 -0.0974 -0.1087 +vn 0.9893 0.0974 -0.1087 +vn 0.9720 0.0957 -0.2147 +vn 0.9513 0.2886 -0.1087 +vn 0.9346 0.2835 -0.2147 +vn 0.9720 -0.0957 -0.2147 +vn 0.9346 -0.2835 -0.2147 +vn 0.9513 -0.2886 -0.1087 +vn 0.8767 0.4686 -0.1087 +vn 0.7684 0.6306 -0.1087 +vn 0.8614 0.4604 -0.2147 +vn 0.8614 -0.4604 -0.2147 +vn 0.8767 -0.4686 -0.1087 +vn 0.7550 0.6196 -0.2147 +vn 0.7550 -0.6196 -0.2147 +vn 0.7684 -0.6306 -0.1087 +vn 0.6196 0.7550 -0.2147 +vn 0.6306 0.7684 -0.1087 +vn 0.6196 -0.7550 -0.2147 +vn 0.6306 -0.7684 -0.1087 +vn 0.4604 0.8614 -0.2147 +vn 0.4686 0.8767 -0.1087 +vn 0.4604 -0.8614 -0.2147 +vn 0.4686 -0.8767 -0.1087 +vn 0.2835 0.9346 -0.2147 +vn 0.2886 0.9513 -0.1087 +vn 0.2835 -0.9346 -0.2147 +vn 0.2886 -0.9513 -0.1087 +vn 0.0957 0.9720 -0.2147 +vn 0.0974 0.9893 -0.1087 +vn 0.0957 -0.9720 -0.2147 +vn 0.0974 -0.9893 -0.1087 +vn -0.0957 0.9720 -0.2147 +vn -0.0974 0.9893 -0.1087 +vn -0.0957 -0.9720 -0.2147 +vn -0.0974 -0.9893 -0.1087 +vn 0.5626 0.4617 -0.6857 +vn 0.5626 0.4617 0.6857 +vn -0.8767 -0.4686 -0.1087 +vn -0.7684 -0.6306 -0.1087 +vn -0.2835 0.9346 -0.2147 +vn -0.2886 0.9513 -0.1087 +vn -0.2835 -0.9346 -0.2147 +vn -0.2886 -0.9513 -0.1087 +vn -0.4604 0.8614 -0.2147 +vn -0.4686 0.8767 -0.1087 +vn -0.4604 -0.8614 -0.2147 +vn -0.4686 -0.8767 -0.1087 +vn -0.6196 0.7550 -0.2147 +vn -0.6306 0.7684 -0.1087 +vn -0.6196 -0.7550 -0.2147 +vn -0.6306 -0.7684 -0.1087 +vn -0.7550 0.6196 -0.2147 +vn -0.7684 0.6306 -0.1087 +vn -0.7550 -0.6196 -0.2147 +vn -0.9513 0.2886 -0.1087 +vn -0.8767 0.4686 -0.1087 +vn -0.8614 0.4604 -0.2147 +vn -0.8614 -0.4604 -0.2147 +vn -0.9346 0.2835 -0.2147 +vn -0.9346 -0.2835 -0.2147 +vn -0.9513 -0.2886 -0.1087 +vn -0.9720 0.0957 -0.2147 +vn -0.9893 0.0974 -0.1087 +vn -0.9720 -0.0957 -0.2147 +vn -0.9893 -0.0974 -0.1087 +vn -0.7321 -0.3032 -0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.7933 0.6088 0.0000 +vn -0.6287 0.4824 -0.6100 +vn -0.1034 -0.7856 -0.6100 +vn -0.1305 -0.9914 0.0000 +vn 0.1305 0.9914 0.0000 +vn 0.1034 0.7856 -0.6100 +vn 0.9239 0.3827 0.0000 +vn 0.7321 0.3032 -0.6100 +vn 0.7933 -0.6088 0.0000 +vn 0.6287 -0.4824 -0.6100 +vn 0.7321 0.3032 0.6100 +vn 0.1034 0.7856 0.6100 +vn 0.6287 -0.4824 0.6100 +vn -0.6287 0.4824 0.6100 +vn -0.7321 -0.3032 0.6100 +vn -0.1034 -0.7856 0.6100 +vn -0.3032 -0.7321 -0.6100 +vn -0.3827 -0.9239 0.0000 +vn -0.9914 -0.1305 0.0000 +vn -0.7856 -0.1034 -0.6100 +vn 0.4824 -0.6287 -0.6100 +vn 0.6088 -0.7933 0.0000 +vn -0.6088 0.7933 0.0000 +vn -0.4824 0.6287 -0.6100 +vn 0.3827 0.9239 0.0000 +vn 0.3032 0.7321 -0.6100 +vn 0.9914 0.1305 0.0000 +vn 0.7856 0.1034 -0.6100 +vn 0.3032 0.7321 0.6100 +vn -0.4824 0.6287 0.6100 +vn 0.7856 0.1034 0.6100 +vn -0.7856 -0.1034 0.6100 +vn -0.3032 -0.7321 0.6100 +vn 0.4824 -0.6287 0.6100 +vn 0.3032 -0.7321 -0.6100 +vn 0.3827 -0.9239 0.0000 +vn -0.6088 -0.7933 0.0000 +vn -0.4824 -0.6287 -0.6100 +vn 0.7856 -0.1034 -0.6100 +vn 0.9914 -0.1305 0.0000 +vn -0.9914 0.1305 0.0000 +vn -0.7856 0.1034 -0.6100 +vn -0.3827 0.9239 0.0000 +vn -0.3032 0.7321 -0.6100 +vn 0.6088 0.7933 0.0000 +vn 0.4824 0.6287 -0.6100 +vn -0.3032 0.7321 0.6100 +vn -0.7856 0.1034 0.6100 +vn 0.4824 0.6287 0.6100 +vn -0.4824 -0.6287 0.6100 +vn 0.3032 -0.7321 0.6100 +vn 0.7856 -0.1034 0.6100 +vn 0.7321 -0.3032 -0.6100 +vn 0.9239 -0.3827 0.0000 +vn 0.1305 -0.9914 0.0000 +vn 0.1034 -0.7856 -0.6100 +vn 0.6287 0.4824 -0.6100 +vn 0.7933 0.6088 0.0000 +vn -0.7933 -0.6088 0.0000 +vn -0.6287 -0.4824 -0.6100 +vn -0.9239 0.3827 0.0000 +vn -0.7321 0.3032 -0.6100 +vn -0.1305 0.9914 0.0000 +vn -0.1034 0.7856 -0.6100 +vn -0.7321 0.3032 0.6100 +vn -0.6287 -0.4824 0.6100 +vn -0.1034 0.7856 0.6100 +vn 0.1034 -0.7856 0.6100 +vn 0.7321 -0.3032 0.6100 +vn 0.6287 0.4824 0.6100 +vn -0.5603 -0.5603 -0.6100 +vn -0.7071 -0.7071 0.0000 +vn -0.9659 0.2588 0.0000 +vn -0.7654 0.2051 -0.6100 +vn 0.2051 -0.7654 -0.6100 +vn 0.2588 -0.9659 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 -0.6100 +vn 0.7071 0.7071 0.0000 +vn 0.5603 0.5603 -0.6100 +vn 0.9659 -0.2588 0.0000 +vn 0.7654 -0.2051 -0.6100 +vn 0.5603 0.5603 0.6100 +vn -0.2051 0.7654 0.6100 +vn 0.7654 -0.2051 0.6100 +vn -0.7654 0.2051 0.6100 +vn -0.5603 -0.5603 0.6100 +vn 0.2051 -0.7654 0.6100 +vn 0.0000 -0.7924 -0.6100 +vn 0.0000 -1.0000 0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.6862 -0.3962 -0.6100 +vn 0.6862 -0.3962 -0.6100 +vn 0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.6862 0.3962 -0.6100 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7924 -0.6100 +vn 0.8660 0.5000 0.0000 +vn 0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 0.6100 +vn -0.6862 0.3962 0.6100 +vn 0.6862 0.3962 0.6100 +vn -0.6862 -0.3962 0.6100 +vn 0.0000 -0.7924 0.6100 +vn 0.6862 -0.3962 0.6100 +vn 0.5603 -0.5603 -0.6100 +vn 0.7071 -0.7071 0.0000 +vn -0.2588 -0.9659 0.0000 +vn -0.2051 -0.7654 -0.6100 +vn 0.7654 0.2051 -0.6100 +vn 0.9659 0.2588 0.0000 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 -0.6100 +vn -0.7071 0.7071 0.0000 +vn -0.5603 0.5603 -0.6100 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 -0.6100 +vn -0.5603 0.5603 0.6100 +vn -0.7654 -0.2051 0.6100 +vn 0.2051 0.7654 0.6100 +vn -0.2051 -0.7654 0.6100 +vn 0.5603 -0.5603 0.6100 +vn 0.7654 0.2051 0.6100 +vn 0.7924 0.0000 -0.6100 +vn 0.5000 -0.8660 0.0000 +vn 0.3962 -0.6862 -0.6100 +vn 0.3962 0.6862 -0.6100 +vn 0.5000 0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 -0.6100 +vn -0.7924 0.0000 -0.6100 +vn -0.5000 0.8660 0.0000 +vn -0.3962 0.6862 -0.6100 +vn -0.7924 0.0000 0.6100 +vn -0.3962 -0.6862 0.6100 +vn -0.3962 0.6862 0.6100 +vn 0.3962 -0.6862 0.6100 +vn 0.7924 0.0000 0.6100 +vn 0.3962 0.6862 0.6100 +vn -0.6857 -0.5147 -0.5147 +vn 0.0794 -0.7049 -0.7049 +vn 0.0794 -0.8288 -0.5538 +vn -0.6857 -0.6052 -0.4044 +vn 0.0794 -0.9210 0.3815 +vn -0.6857 -0.6725 0.2785 +vn -0.6857 -0.6052 0.4044 +vn 0.0794 -0.8288 0.5538 +vn 0.0794 -0.7049 0.7049 +vn -0.6857 -0.5147 0.5147 +vn -0.6857 -0.1420 0.7139 +vn 0.0794 -0.1945 0.9777 +vn 0.0794 0.0000 0.9968 +vn -0.6857 0.0000 0.7279 +vn -0.6857 0.5147 -0.5147 +vn 0.0794 0.7049 -0.7049 +vn 0.0794 -0.9210 -0.3815 +vn -0.6857 -0.6725 -0.2785 +vn -0.6857 0.7139 0.1420 +vn 0.0794 0.9777 0.1945 +vn -0.6857 0.6725 -0.2785 +vn 0.0794 0.9210 -0.3815 +vn 0.0794 0.8288 -0.5538 +vn -0.6857 0.6052 -0.4044 +vn -0.6857 0.0000 -0.7279 +vn 0.0794 0.0000 -0.9968 +vn -0.6857 -0.7139 -0.1420 +vn 0.0794 -0.9777 -0.1945 +vn 0.3236 -0.5257 0.7867 +vn 0.3236 -0.6690 0.6690 +vn 0.3236 -0.7867 0.5257 +vn 0.3236 -0.8741 0.3621 +vn 0.3236 -0.9462 0.0000 +vn 0.3236 -0.9280 -0.1846 +vn 0.3236 0.1846 0.9280 +vn 0.3236 0.0000 0.9462 +vn 0.3236 0.5257 -0.7867 +vn 0.3236 0.6690 -0.6690 +vn 0.3236 -0.6690 -0.6690 +vn 0.3236 -0.5257 -0.7867 +vn 0.3236 0.8741 -0.3621 +vn 0.3236 0.9280 -0.1846 +vn 0.3236 0.8741 0.3621 +vn 0.3236 0.7867 0.5257 +vn 0.3236 0.3621 0.8741 +vn 0.3236 0.1846 -0.9280 +vn 0.3236 0.0000 -0.9462 +vn 0.3236 -0.3621 0.8741 +vn 0.3236 -0.8741 -0.3621 +vn 0.3236 0.9280 0.1846 +vn 0.3236 -0.3621 -0.8741 +vn 0.3236 0.3620 -0.8741 +vn 0.3236 0.5257 0.7867 +vn 0.3236 -0.1846 -0.9280 +vn 0.3236 -0.1846 0.9280 +vn 0.3236 -0.9280 0.1846 +vn 0.3236 0.9462 0.0000 +vn 0.3236 -0.7867 -0.5257 +vn 0.3236 0.7867 -0.5257 +vn 0.3236 0.6690 0.6690 +vn -0.1951 0.0000 -0.9808 +vn 0.1951 0.0000 -0.9808 +vn 0.9808 0.0000 -0.1951 +vn 0.9808 0.0000 0.1951 +vn 0.1951 0.0000 0.9808 +vn -0.1951 0.0000 0.9808 +vn 0.8314 0.0000 0.5556 +vn 0.5556 0.0000 0.8314 +vn 0.0280 -0.9986 -0.0436 +vn 0.0280 -0.9986 0.0436 +vn -0.2223 -0.9740 -0.0436 +vn -0.2223 -0.9740 0.0436 +vn -0.3299 -0.9430 0.0436 +vn -0.3299 -0.9430 -0.0436 +vn -0.4335 -0.9001 0.0436 +vn -0.4335 -0.9001 -0.0436 +vn -0.5315 -0.8459 0.0436 +vn -0.5315 -0.8459 -0.0436 +vn -0.6229 -0.7811 0.0436 +vn -0.6229 -0.7811 -0.0436 +vn -0.7064 -0.7064 0.0436 +vn -0.7064 -0.7064 -0.0436 +vn -0.7811 -0.6229 0.0436 +vn -0.7811 -0.6229 -0.0436 +vn -0.8459 -0.5315 0.0436 +vn -0.8459 -0.5315 -0.0436 +vn -0.9001 -0.4335 0.0436 +vn -0.9001 -0.4335 -0.0436 +vn -0.9430 -0.3299 0.0436 +vn -0.9430 -0.3299 -0.0436 +vn -0.9740 -0.2223 0.0436 +vn -0.9740 -0.2223 -0.0436 +vn 0.0280 0.9986 -0.0436 +vn 0.0280 0.9986 0.0436 +vn 0.9927 0.1119 -0.0436 +vn 0.9927 0.1119 0.0436 +vn 0.9986 0.0280 0.0436 +vn 0.9986 0.0280 -0.0436 +vn 0.3299 0.9430 0.0436 +vn 0.3299 0.9430 -0.0436 +vn 0.4335 0.9001 0.0436 +vn 0.4335 0.9001 -0.0436 +vn 0.5315 0.8459 0.0436 +vn 0.5315 0.8459 -0.0436 +vn 0.6229 0.7811 0.0436 +vn 0.6229 0.7811 -0.0436 +vn 0.7064 0.7064 0.0436 +vn 0.7064 0.7064 -0.0436 +vn 0.7811 0.6229 0.0436 +vn 0.7811 0.6229 -0.0436 +vn 0.8459 0.5315 0.0436 +vn 0.8459 0.5315 -0.0436 +vn 0.9001 0.4335 0.0436 +vn 0.9001 0.4335 -0.0436 +vn 0.9430 0.3299 0.0436 +vn 0.9430 0.3299 -0.0436 +vn 0.9740 0.2223 0.0436 +vn 0.9740 0.2223 -0.0436 +vn 0.9986 -0.0280 -0.0436 +vn 0.9986 -0.0280 0.0436 +vn 0.9927 -0.1119 0.0436 +vn 0.9927 -0.1119 -0.0436 +vn 0.1119 -0.9927 -0.0436 +vn 0.1119 -0.9927 0.0436 +vn 0.9740 -0.2223 -0.0436 +vn 0.9740 -0.2223 0.0436 +vn 0.9430 -0.3299 0.0436 +vn 0.9430 -0.3299 -0.0436 +vn 0.9001 -0.4335 0.0436 +vn 0.9001 -0.4335 -0.0436 +vn 0.8459 -0.5315 0.0436 +vn 0.8459 -0.5315 -0.0436 +vn 0.7811 -0.6229 0.0436 +vn 0.7811 -0.6229 -0.0436 +vn 0.7064 -0.7064 0.0436 +vn 0.7064 -0.7064 -0.0436 +vn 0.6229 -0.7811 0.0436 +vn 0.6229 -0.7811 -0.0436 +vn 0.5315 -0.8459 0.0436 +vn 0.5315 -0.8459 -0.0436 +vn 0.4335 -0.9001 0.0436 +vn 0.4335 -0.9001 -0.0436 +vn 0.3299 -0.9430 0.0436 +vn 0.3299 -0.9430 -0.0436 +vn 0.2223 -0.9740 0.0436 +vn 0.2223 -0.9740 -0.0436 +vn -0.0280 0.9986 -0.0436 +vn -0.0280 0.9986 0.0436 +vn -0.3299 0.9430 -0.0436 +vn -0.3299 0.9430 0.0436 +vn -0.4335 0.9001 -0.0436 +vn -0.4335 0.9001 0.0436 +vn -0.5315 0.8459 -0.0436 +vn -0.5315 0.8459 0.0436 +vn -0.6229 0.7811 -0.0436 +vn -0.6229 0.7811 0.0436 +vn -0.7064 0.7064 -0.0436 +vn -0.7064 0.7064 0.0436 +vn -0.7811 0.6229 -0.0436 +vn -0.7811 0.6229 0.0436 +vn -0.8459 0.5315 -0.0436 +vn -0.8459 0.5315 0.0436 +vn -0.9001 0.4335 -0.0436 +vn -0.9001 0.4335 0.0436 +vn -0.9430 0.3299 -0.0436 +vn -0.9430 0.3299 0.0436 +vn -0.9740 0.2223 -0.0436 +vn -0.9740 0.2223 0.0436 +vn -0.5556 0.0000 0.8314 +vn -0.8314 0.0000 0.5556 +vn -0.0641 -0.5694 -0.8196 +vn -0.0161 -0.5732 -0.8192 +vn -0.0180 -0.6433 -0.7654 +vn -0.0721 -0.6400 -0.7650 +vn -0.0215 -0.7663 -0.6421 +vn -0.0858 -0.7620 -0.6418 +vn -0.0243 -0.8660 -0.4995 +vn -0.0970 -0.8610 -0.4992 +vn -0.0263 -0.9395 -0.3416 +vn -0.1052 -0.9340 -0.3415 +vn -0.0276 -0.9844 -0.1734 +vn -0.1103 -0.9786 -0.1734 +vn -0.0161 -0.5732 0.8192 +vn -0.0641 -0.5694 0.8196 +vn -0.0721 -0.6400 0.7650 +vn -0.0180 -0.6433 0.7654 +vn -0.0858 -0.7620 0.6418 +vn -0.0215 -0.7663 0.6421 +vn -0.0970 -0.8610 0.4992 +vn -0.0243 -0.8660 0.4995 +vn -0.1052 -0.9340 0.3415 +vn -0.0263 -0.9395 0.3416 +vn -0.1103 -0.9786 0.1734 +vn -0.0276 -0.9844 0.1734 +vn -0.1275 -0.5586 -0.8196 +vn -0.1433 -0.6279 -0.7650 +vn -0.1706 -0.7476 -0.6418 +vn -0.1928 -0.8447 -0.4992 +vn -0.2091 -0.9163 -0.3415 +vn -0.2191 -0.9601 -0.1734 +vn -0.1275 -0.5586 0.8196 +vn -0.1433 -0.6279 0.7650 +vn -0.1706 -0.7476 0.6418 +vn -0.1928 -0.8447 0.4992 +vn -0.2091 -0.9163 0.3415 +vn -0.2191 -0.9601 0.1734 +vn -0.1892 -0.5408 -0.8196 +vn -0.2127 -0.6079 -0.7650 +vn -0.2532 -0.7238 -0.6418 +vn -0.2862 -0.8178 -0.4992 +vn -0.3104 -0.8871 -0.3415 +vn -0.3253 -0.9296 -0.1734 +vn -0.1892 -0.5408 0.8196 +vn -0.2127 -0.6079 0.7650 +vn -0.2532 -0.7238 0.6418 +vn -0.2862 -0.8178 0.4992 +vn -0.3104 -0.8871 0.3415 +vn -0.3253 -0.9296 0.1734 +vn -0.2486 -0.5162 -0.8196 +vn -0.2794 -0.5802 -0.7650 +vn -0.3327 -0.6909 -0.6418 +vn -0.3759 -0.7806 -0.4992 +vn -0.4078 -0.8468 -0.3415 +vn -0.4273 -0.8873 -0.1734 +vn -0.2486 -0.5162 0.8196 +vn -0.2794 -0.5802 0.7650 +vn -0.3327 -0.6909 0.6418 +vn -0.3759 -0.7806 0.4992 +vn -0.4078 -0.8468 0.3415 +vn -0.4273 -0.8873 0.1734 +vn -0.3048 -0.4851 -0.8196 +vn -0.3426 -0.5453 -0.7650 +vn -0.4080 -0.6493 -0.6418 +vn -0.4610 -0.7336 -0.4992 +vn -0.5000 -0.7958 -0.3415 +vn -0.5240 -0.8339 -0.1734 +vn -0.3048 -0.4851 0.8196 +vn -0.3426 -0.5453 0.7650 +vn -0.4080 -0.6493 0.6418 +vn -0.4610 -0.7336 0.4992 +vn -0.5000 -0.7958 0.3415 +vn -0.5240 -0.8339 0.1734 +vn -0.3572 -0.4480 -0.8196 +vn -0.4015 -0.5035 -0.7650 +vn -0.4781 -0.5995 -0.6418 +vn -0.5402 -0.6774 -0.4992 +vn -0.5860 -0.7348 -0.3415 +vn -0.6140 -0.7700 -0.1734 +vn -0.3572 -0.4480 0.8196 +vn -0.4015 -0.5035 0.7650 +vn -0.4781 -0.5995 0.6418 +vn -0.5402 -0.6774 0.4992 +vn -0.5860 -0.7348 0.3415 +vn -0.6140 -0.7700 0.1734 +vn -0.4051 -0.4051 -0.8196 +vn -0.4554 -0.4554 -0.7650 +vn -0.5422 -0.5422 -0.6418 +vn -0.6127 -0.6127 -0.4992 +vn -0.6646 -0.6646 -0.3415 +vn -0.6964 -0.6964 -0.1734 +vn -0.4051 -0.4051 0.8196 +vn -0.4554 -0.4554 0.7650 +vn -0.5422 -0.5422 0.6418 +vn -0.6127 -0.6127 0.4992 +vn -0.6646 -0.6646 0.3415 +vn -0.6964 -0.6964 0.1734 +vn -0.4480 -0.3572 -0.8196 +vn -0.5035 -0.4015 -0.7650 +vn -0.5995 -0.4781 -0.6418 +vn -0.6774 -0.5402 -0.4992 +vn -0.7348 -0.5860 -0.3415 +vn -0.7700 -0.6140 -0.1734 +vn -0.4480 -0.3572 0.8196 +vn -0.5035 -0.4015 0.7650 +vn -0.5995 -0.4781 0.6418 +vn -0.6774 -0.5402 0.4992 +vn -0.7348 -0.5860 0.3415 +vn -0.7700 -0.6140 0.1734 +vn -0.4851 -0.3048 -0.8196 +vn -0.5453 -0.3426 -0.7650 +vn -0.6493 -0.4080 -0.6418 +vn -0.7336 -0.4610 -0.4992 +vn -0.7958 -0.5000 -0.3415 +vn -0.8339 -0.5240 -0.1734 +vn -0.4851 -0.3048 0.8196 +vn -0.5453 -0.3426 0.7650 +vn -0.6493 -0.4080 0.6418 +vn -0.7336 -0.4610 0.4992 +vn -0.7958 -0.5000 0.3415 +vn -0.8339 -0.5240 0.1734 +vn -0.5162 -0.2486 -0.8196 +vn -0.5802 -0.2794 -0.7650 +vn -0.6909 -0.3327 -0.6418 +vn -0.7806 -0.3759 -0.4992 +vn -0.8468 -0.4078 -0.3415 +vn -0.8873 -0.4273 -0.1734 +vn -0.5162 -0.2486 0.8196 +vn -0.5802 -0.2794 0.7650 +vn -0.6909 -0.3327 0.6418 +vn -0.7806 -0.3759 0.4992 +vn -0.8468 -0.4078 0.3415 +vn -0.8873 -0.4273 0.1734 +vn -0.5408 -0.1892 -0.8196 +vn -0.6079 -0.2127 -0.7650 +vn -0.7238 -0.2532 -0.6418 +vn -0.8178 -0.2862 -0.4992 +vn -0.8871 -0.3104 -0.3415 +vn -0.9296 -0.3253 -0.1734 +vn -0.5408 -0.1892 0.8196 +vn -0.6079 -0.2127 0.7650 +vn -0.7238 -0.2532 0.6418 +vn -0.8178 -0.2862 0.4992 +vn -0.8871 -0.3104 0.3415 +vn -0.9296 -0.3253 0.1734 +vn -0.5586 -0.1275 -0.8196 +vn -0.6279 -0.1433 -0.7650 +vn -0.7476 -0.1706 -0.6418 +vn -0.8447 -0.1928 -0.4992 +vn -0.9163 -0.2091 -0.3415 +vn -0.9601 -0.2191 -0.1734 +vn -0.5586 -0.1275 0.8196 +vn -0.6279 -0.1433 0.7650 +vn -0.7476 -0.1706 0.6418 +vn -0.8447 -0.1928 0.4992 +vn -0.9163 -0.2091 0.3415 +vn -0.9601 -0.2191 0.1734 +vn -0.5694 -0.0641 -0.8196 +vn -0.6400 -0.0721 -0.7650 +vn -0.7620 -0.0858 -0.6418 +vn -0.8610 -0.0970 -0.4992 +vn -0.9340 -0.1052 -0.3415 +vn -0.9786 -0.1103 -0.1734 +vn -0.5694 -0.0641 0.8196 +vn -0.6400 -0.0721 0.7650 +vn -0.7620 -0.0858 0.6418 +vn -0.8610 -0.0970 0.4992 +vn -0.9340 -0.1052 0.3415 +vn -0.9786 -0.1103 0.1734 +vn -0.5732 -0.0161 -0.8192 +vn -0.6433 -0.0180 -0.7654 +vn -0.7663 -0.0215 -0.6421 +vn -0.8660 -0.0243 -0.4995 +vn -0.9395 -0.0263 -0.3416 +vn -0.9844 -0.0276 -0.1734 +vn -0.5732 -0.0161 0.8192 +vn -0.6433 -0.0180 0.7654 +vn -0.7663 -0.0215 0.6421 +vn -0.8660 -0.0243 0.4995 +vn -0.9395 -0.0263 0.3416 +vn -0.9844 -0.0276 0.1734 +vn 0.0641 0.5694 -0.8196 +vn 0.0161 0.5732 -0.8192 +vn 0.0180 0.6433 -0.7654 +vn 0.0721 0.6400 -0.7650 +vn 0.0215 0.7663 -0.6421 +vn 0.0858 0.7620 -0.6418 +vn 0.0243 0.8660 -0.4995 +vn 0.0970 0.8610 -0.4992 +vn 0.0263 0.9395 -0.3416 +vn 0.1052 0.9340 -0.3415 +vn 0.0276 0.9844 -0.1734 +vn 0.1103 0.9786 -0.1734 +vn 0.0161 0.5732 0.8192 +vn 0.0641 0.5694 0.8196 +vn 0.0721 0.6400 0.7650 +vn 0.0180 0.6433 0.7654 +vn 0.0858 0.7620 0.6418 +vn 0.0215 0.7663 0.6421 +vn 0.0970 0.8610 0.4992 +vn 0.0243 0.8660 0.4995 +vn 0.1052 0.9340 0.3415 +vn 0.0263 0.9395 0.3416 +vn 0.1103 0.9786 0.1734 +vn 0.0276 0.9844 0.1734 +vn 0.1275 0.5586 -0.8196 +vn 0.1433 0.6279 -0.7650 +vn 0.1706 0.7476 -0.6418 +vn 0.1928 0.8447 -0.4992 +vn 0.2091 0.9163 -0.3415 +vn 0.2191 0.9601 -0.1734 +vn 0.1275 0.5586 0.8196 +vn 0.1433 0.6279 0.7650 +vn 0.1706 0.7476 0.6418 +vn 0.1928 0.8447 0.4992 +vn 0.2091 0.9163 0.3415 +vn 0.2191 0.9601 0.1734 +vn 0.1892 0.5408 -0.8196 +vn 0.2127 0.6079 -0.7650 +vn 0.2532 0.7238 -0.6418 +vn 0.2862 0.8178 -0.4992 +vn 0.3104 0.8871 -0.3415 +vn 0.3253 0.9296 -0.1734 +vn 0.1892 0.5408 0.8196 +vn 0.2127 0.6079 0.7650 +vn 0.2532 0.7238 0.6418 +vn 0.2862 0.8178 0.4992 +vn 0.3104 0.8871 0.3415 +vn 0.3253 0.9296 0.1734 +vn 0.2486 0.5162 -0.8196 +vn 0.2794 0.5802 -0.7650 +vn 0.3327 0.6909 -0.6418 +vn 0.3759 0.7806 -0.4992 +vn 0.4078 0.8468 -0.3415 +vn 0.4273 0.8873 -0.1734 +vn 0.2486 0.5162 0.8196 +vn 0.2794 0.5802 0.7650 +vn 0.3327 0.6909 0.6418 +vn 0.3759 0.7806 0.4992 +vn 0.4078 0.8468 0.3415 +vn 0.4273 0.8873 0.1734 +vn 0.3048 0.4851 -0.8196 +vn 0.3426 0.5453 -0.7650 +vn 0.4080 0.6493 -0.6418 +vn 0.4610 0.7336 -0.4992 +vn 0.5000 0.7958 -0.3415 +vn 0.5240 0.8339 -0.1734 +vn 0.3048 0.4851 0.8196 +vn 0.3426 0.5453 0.7650 +vn 0.4080 0.6493 0.6418 +vn 0.4610 0.7336 0.4992 +vn 0.5000 0.7958 0.3415 +vn 0.5240 0.8339 0.1734 +vn 0.3572 0.4480 -0.8196 +vn 0.4015 0.5035 -0.7650 +vn 0.4781 0.5995 -0.6418 +vn 0.5402 0.6774 -0.4992 +vn 0.5860 0.7348 -0.3415 +vn 0.6140 0.7700 -0.1734 +vn 0.3572 0.4480 0.8196 +vn 0.4015 0.5035 0.7650 +vn 0.4781 0.5995 0.6418 +vn 0.5402 0.6774 0.4992 +vn 0.5860 0.7348 0.3415 +vn 0.6140 0.7700 0.1734 +vn 0.4051 0.4051 -0.8196 +vn 0.4554 0.4554 -0.7650 +vn 0.5422 0.5422 -0.6418 +vn 0.6127 0.6127 -0.4992 +vn 0.6646 0.6646 -0.3415 +vn 0.6964 0.6964 -0.1734 +vn 0.4051 0.4051 0.8196 +vn 0.4554 0.4554 0.7650 +vn 0.5422 0.5422 0.6418 +vn 0.6127 0.6127 0.4992 +vn 0.6646 0.6646 0.3415 +vn 0.6964 0.6964 0.1734 +vn 0.4480 0.3572 -0.8196 +vn 0.5035 0.4015 -0.7650 +vn 0.5995 0.4781 -0.6418 +vn 0.6774 0.5402 -0.4992 +vn 0.7348 0.5860 -0.3415 +vn 0.7700 0.6140 -0.1734 +vn 0.4480 0.3572 0.8196 +vn 0.5035 0.4015 0.7650 +vn 0.5995 0.4781 0.6418 +vn 0.6774 0.5402 0.4992 +vn 0.7348 0.5860 0.3415 +vn 0.7700 0.6140 0.1734 +vn 0.4851 0.3048 -0.8196 +vn 0.5453 0.3426 -0.7650 +vn 0.6493 0.4080 -0.6418 +vn 0.7336 0.4610 -0.4992 +vn 0.7958 0.5000 -0.3415 +vn 0.8339 0.5240 -0.1734 +vn 0.4851 0.3048 0.8196 +vn 0.5453 0.3426 0.7650 +vn 0.6493 0.4080 0.6418 +vn 0.7336 0.4610 0.4992 +vn 0.7958 0.5000 0.3415 +vn 0.8339 0.5240 0.1734 +vn 0.5162 0.2486 -0.8196 +vn 0.5802 0.2794 -0.7650 +vn 0.6909 0.3327 -0.6418 +vn 0.7806 0.3759 -0.4992 +vn 0.8468 0.4078 -0.3415 +vn 0.8873 0.4273 -0.1734 +vn 0.5162 0.2486 0.8196 +vn 0.5802 0.2794 0.7650 +vn 0.6909 0.3327 0.6418 +vn 0.7806 0.3759 0.4992 +vn 0.8468 0.4078 0.3415 +vn 0.8873 0.4273 0.1734 +vn 0.5408 0.1892 -0.8196 +vn 0.6079 0.2127 -0.7650 +vn 0.7238 0.2532 -0.6418 +vn 0.8178 0.2862 -0.4992 +vn 0.8871 0.3104 -0.3415 +vn 0.9296 0.3253 -0.1734 +vn 0.5408 0.1892 0.8196 +vn 0.6079 0.2127 0.7650 +vn 0.7238 0.2532 0.6418 +vn 0.8178 0.2862 0.4992 +vn 0.8871 0.3104 0.3415 +vn 0.9296 0.3253 0.1734 +vn 0.5586 0.1275 -0.8196 +vn 0.6279 0.1433 -0.7650 +vn 0.7476 0.1706 -0.6418 +vn 0.8447 0.1928 -0.4992 +vn 0.9163 0.2091 -0.3415 +vn 0.9601 0.2191 -0.1734 +vn 0.5586 0.1275 0.8196 +vn 0.6279 0.1433 0.7650 +vn 0.7476 0.1706 0.6418 +vn 0.8447 0.1928 0.4992 +vn 0.9163 0.2091 0.3415 +vn 0.9601 0.2191 0.1734 +vn 0.5694 0.0641 -0.8196 +vn 0.6400 0.0721 -0.7650 +vn 0.7620 0.0858 -0.6418 +vn 0.8610 0.0970 -0.4992 +vn 0.9340 0.1052 -0.3415 +vn 0.9786 0.1103 -0.1734 +vn 0.5694 0.0641 0.8196 +vn 0.6400 0.0721 0.7650 +vn 0.7620 0.0858 0.6418 +vn 0.8610 0.0970 0.4992 +vn 0.9340 0.1052 0.3415 +vn 0.9786 0.1103 0.1734 +vn 0.5732 0.0161 -0.8192 +vn 0.6433 0.0180 -0.7654 +vn 0.7663 0.0215 -0.6421 +vn 0.8660 0.0243 -0.4995 +vn 0.9395 0.0263 -0.3416 +vn 0.9844 0.0276 -0.1734 +vn 0.5732 0.0161 0.8192 +vn 0.6433 0.0180 0.7654 +vn 0.7663 0.0215 0.6421 +vn 0.8660 0.0243 0.4995 +vn 0.9395 0.0263 0.3416 +vn 0.9844 0.0276 0.1734 +vn 0.5694 -0.0641 -0.8196 +vn 0.5732 -0.0161 -0.8192 +vn 0.6433 -0.0180 -0.7654 +vn 0.6400 -0.0721 -0.7650 +vn 0.7663 -0.0215 -0.6421 +vn 0.7620 -0.0858 -0.6418 +vn 0.8660 -0.0243 -0.4995 +vn 0.8610 -0.0970 -0.4992 +vn 0.9395 -0.0263 -0.3416 +vn 0.9340 -0.1052 -0.3415 +vn 0.9844 -0.0276 -0.1734 +vn 0.9786 -0.1103 -0.1734 +vn 0.5732 -0.0161 0.8192 +vn 0.5694 -0.0641 0.8196 +vn 0.6400 -0.0721 0.7650 +vn 0.6433 -0.0180 0.7654 +vn 0.7620 -0.0858 0.6418 +vn 0.7663 -0.0215 0.6421 +vn 0.8610 -0.0970 0.4992 +vn 0.8660 -0.0243 0.4995 +vn 0.9340 -0.1052 0.3415 +vn 0.9395 -0.0263 0.3416 +vn 0.9786 -0.1103 0.1734 +vn 0.9844 -0.0276 0.1734 +vn 0.5586 -0.1275 -0.8196 +vn 0.6279 -0.1433 -0.7650 +vn 0.7476 -0.1706 -0.6418 +vn 0.8447 -0.1928 -0.4992 +vn 0.9163 -0.2091 -0.3415 +vn 0.9601 -0.2191 -0.1734 +vn 0.5586 -0.1275 0.8196 +vn 0.6279 -0.1433 0.7650 +vn 0.7476 -0.1706 0.6418 +vn 0.8447 -0.1928 0.4992 +vn 0.9163 -0.2091 0.3415 +vn 0.9601 -0.2191 0.1734 +vn 0.5408 -0.1892 -0.8196 +vn 0.6079 -0.2127 -0.7650 +vn 0.7238 -0.2532 -0.6418 +vn 0.8178 -0.2862 -0.4992 +vn 0.8871 -0.3104 -0.3415 +vn 0.9296 -0.3253 -0.1734 +vn 0.5408 -0.1892 0.8196 +vn 0.6079 -0.2127 0.7650 +vn 0.7238 -0.2532 0.6418 +vn 0.8178 -0.2862 0.4992 +vn 0.8871 -0.3104 0.3415 +vn 0.9296 -0.3253 0.1734 +vn 0.5162 -0.2486 -0.8196 +vn 0.5802 -0.2794 -0.7650 +vn 0.6909 -0.3327 -0.6418 +vn 0.7806 -0.3759 -0.4992 +vn 0.8468 -0.4078 -0.3415 +vn 0.8873 -0.4273 -0.1734 +vn 0.5162 -0.2486 0.8196 +vn 0.5802 -0.2794 0.7650 +vn 0.6909 -0.3327 0.6418 +vn 0.7806 -0.3759 0.4992 +vn 0.8468 -0.4078 0.3415 +vn 0.8873 -0.4273 0.1734 +vn 0.4851 -0.3048 -0.8196 +vn 0.5453 -0.3426 -0.7650 +vn 0.6493 -0.4080 -0.6418 +vn 0.7336 -0.4610 -0.4992 +vn 0.7958 -0.5000 -0.3415 +vn 0.8339 -0.5240 -0.1734 +vn 0.4851 -0.3048 0.8196 +vn 0.5453 -0.3426 0.7650 +vn 0.6493 -0.4080 0.6418 +vn 0.7336 -0.4610 0.4992 +vn 0.7958 -0.5000 0.3415 +vn 0.8339 -0.5240 0.1734 +vn 0.4480 -0.3572 -0.8196 +vn 0.5035 -0.4015 -0.7650 +vn 0.5995 -0.4781 -0.6418 +vn 0.6774 -0.5402 -0.4992 +vn 0.7348 -0.5860 -0.3415 +vn 0.7700 -0.6140 -0.1734 +vn 0.4480 -0.3572 0.8196 +vn 0.5035 -0.4015 0.7650 +vn 0.5995 -0.4781 0.6418 +vn 0.6774 -0.5402 0.4992 +vn 0.7348 -0.5860 0.3415 +vn 0.7700 -0.6140 0.1734 +vn 0.4051 -0.4051 -0.8196 +vn 0.4554 -0.4554 -0.7650 +vn 0.5422 -0.5422 -0.6418 +vn 0.6127 -0.6127 -0.4992 +vn 0.6646 -0.6646 -0.3415 +vn 0.6964 -0.6964 -0.1734 +vn 0.4051 -0.4051 0.8196 +vn 0.4554 -0.4554 0.7650 +vn 0.5422 -0.5422 0.6418 +vn 0.6127 -0.6127 0.4992 +vn 0.6646 -0.6646 0.3415 +vn 0.6964 -0.6964 0.1734 +vn 0.3572 -0.4480 -0.8196 +vn 0.4015 -0.5035 -0.7650 +vn 0.4781 -0.5995 -0.6418 +vn 0.5402 -0.6774 -0.4992 +vn 0.5860 -0.7348 -0.3415 +vn 0.6140 -0.7700 -0.1734 +vn 0.3572 -0.4480 0.8196 +vn 0.4015 -0.5035 0.7650 +vn 0.4781 -0.5995 0.6418 +vn 0.5402 -0.6774 0.4992 +vn 0.5860 -0.7348 0.3415 +vn 0.6140 -0.7700 0.1734 +vn 0.3048 -0.4851 -0.8196 +vn 0.3426 -0.5453 -0.7650 +vn 0.4080 -0.6493 -0.6418 +vn 0.4610 -0.7336 -0.4992 +vn 0.5000 -0.7958 -0.3415 +vn 0.5240 -0.8339 -0.1734 +vn 0.3048 -0.4851 0.8196 +vn 0.3426 -0.5453 0.7650 +vn 0.4080 -0.6493 0.6418 +vn 0.4610 -0.7336 0.4992 +vn 0.5000 -0.7958 0.3415 +vn 0.5240 -0.8339 0.1734 +vn 0.2486 -0.5162 -0.8196 +vn 0.2794 -0.5802 -0.7650 +vn 0.3327 -0.6909 -0.6418 +vn 0.3759 -0.7806 -0.4992 +vn 0.4078 -0.8468 -0.3415 +vn 0.4273 -0.8873 -0.1734 +vn 0.2486 -0.5162 0.8196 +vn 0.2794 -0.5802 0.7650 +vn 0.3327 -0.6909 0.6418 +vn 0.3759 -0.7806 0.4992 +vn 0.4078 -0.8468 0.3415 +vn 0.4273 -0.8873 0.1734 +vn 0.1892 -0.5408 -0.8196 +vn 0.2127 -0.6079 -0.7650 +vn 0.2532 -0.7238 -0.6418 +vn 0.2862 -0.8178 -0.4992 +vn 0.3104 -0.8871 -0.3415 +vn 0.3253 -0.9296 -0.1734 +vn 0.1892 -0.5408 0.8196 +vn 0.2127 -0.6079 0.7650 +vn 0.2532 -0.7238 0.6418 +vn 0.2862 -0.8178 0.4992 +vn 0.3104 -0.8871 0.3415 +vn 0.3253 -0.9296 0.1734 +vn 0.1275 -0.5586 -0.8196 +vn 0.1433 -0.6279 -0.7650 +vn 0.1706 -0.7476 -0.6418 +vn 0.1928 -0.8447 -0.4992 +vn 0.2091 -0.9163 -0.3415 +vn 0.2191 -0.9601 -0.1734 +vn 0.1275 -0.5586 0.8196 +vn 0.1433 -0.6279 0.7650 +vn 0.1706 -0.7476 0.6418 +vn 0.1928 -0.8447 0.4992 +vn 0.2091 -0.9163 0.3415 +vn 0.2191 -0.9601 0.1734 +vn 0.0641 -0.5694 -0.8196 +vn 0.0721 -0.6400 -0.7650 +vn 0.0858 -0.7620 -0.6418 +vn 0.0970 -0.8610 -0.4992 +vn 0.1052 -0.9340 -0.3415 +vn 0.1103 -0.9786 -0.1734 +vn 0.0641 -0.5694 0.8196 +vn 0.0721 -0.6400 0.7650 +vn 0.0858 -0.7620 0.6418 +vn 0.0970 -0.8610 0.4992 +vn 0.1052 -0.9340 0.3415 +vn 0.1103 -0.9786 0.1734 +vn 0.0161 -0.5732 -0.8192 +vn 0.0180 -0.6433 -0.7654 +vn 0.0215 -0.7663 -0.6421 +vn 0.0243 -0.8660 -0.4995 +vn 0.0263 -0.9395 -0.3416 +vn 0.0276 -0.9844 -0.1734 +vn 0.0161 -0.5732 0.8192 +vn 0.0180 -0.6433 0.7654 +vn 0.0215 -0.7663 0.6421 +vn 0.0243 -0.8660 0.4995 +vn 0.0263 -0.9395 0.3416 +vn 0.0276 -0.9844 0.1734 +vn -0.0641 0.5694 0.8196 +vn -0.0161 0.5732 0.8192 +vn -0.0180 0.6433 0.7654 +vn -0.0721 0.6400 0.7650 +vn -0.0215 0.7663 0.6421 +vn -0.0858 0.7620 0.6418 +vn -0.0243 0.8660 0.4995 +vn -0.0970 0.8610 0.4992 +vn -0.0263 0.9395 0.3416 +vn -0.1052 0.9340 0.3415 +vn -0.0276 0.9844 0.1734 +vn -0.1103 0.9786 0.1734 +vn -0.0161 0.5732 -0.8192 +vn -0.0641 0.5694 -0.8196 +vn -0.0721 0.6400 -0.7650 +vn -0.0180 0.6433 -0.7654 +vn -0.0858 0.7620 -0.6418 +vn -0.0215 0.7663 -0.6421 +vn -0.0970 0.8610 -0.4992 +vn -0.0243 0.8660 -0.4995 +vn -0.1052 0.9340 -0.3415 +vn -0.0263 0.9395 -0.3416 +vn -0.1103 0.9786 -0.1734 +vn -0.0276 0.9844 -0.1734 +vn -0.1275 0.5586 0.8196 +vn -0.1433 0.6279 0.7650 +vn -0.1706 0.7476 0.6418 +vn -0.1928 0.8447 0.4992 +vn -0.2091 0.9163 0.3415 +vn -0.2191 0.9601 0.1734 +vn -0.1275 0.5586 -0.8196 +vn -0.1433 0.6279 -0.7650 +vn -0.1706 0.7476 -0.6418 +vn -0.1928 0.8447 -0.4992 +vn -0.2091 0.9163 -0.3415 +vn -0.2191 0.9601 -0.1734 +vn -0.1892 0.5408 0.8196 +vn -0.2127 0.6079 0.7650 +vn -0.2532 0.7238 0.6418 +vn -0.2862 0.8178 0.4992 +vn -0.3104 0.8871 0.3415 +vn -0.3253 0.9296 0.1734 +vn -0.1892 0.5408 -0.8196 +vn -0.2127 0.6079 -0.7650 +vn -0.2532 0.7238 -0.6418 +vn -0.2862 0.8178 -0.4992 +vn -0.3104 0.8871 -0.3415 +vn -0.3253 0.9296 -0.1734 +vn -0.2486 0.5162 0.8196 +vn -0.2794 0.5802 0.7650 +vn -0.3327 0.6909 0.6418 +vn -0.3759 0.7806 0.4992 +vn -0.4078 0.8468 0.3415 +vn -0.4273 0.8873 0.1734 +vn -0.2486 0.5162 -0.8196 +vn -0.2794 0.5802 -0.7650 +vn -0.3327 0.6909 -0.6418 +vn -0.3759 0.7806 -0.4992 +vn -0.4078 0.8468 -0.3415 +vn -0.4273 0.8873 -0.1734 +vn -0.3048 0.4851 0.8196 +vn -0.3426 0.5453 0.7650 +vn -0.4080 0.6493 0.6418 +vn -0.4610 0.7336 0.4992 +vn -0.5000 0.7958 0.3415 +vn -0.5240 0.8339 0.1734 +vn -0.3048 0.4851 -0.8196 +vn -0.3426 0.5453 -0.7650 +vn -0.4080 0.6493 -0.6418 +vn -0.4610 0.7336 -0.4992 +vn -0.5000 0.7958 -0.3415 +vn -0.5240 0.8339 -0.1734 +vn -0.3572 0.4480 0.8196 +vn -0.4015 0.5035 0.7650 +vn -0.4781 0.5995 0.6418 +vn -0.5402 0.6774 0.4992 +vn -0.5860 0.7348 0.3415 +vn -0.6140 0.7700 0.1734 +vn -0.3572 0.4480 -0.8196 +vn -0.4015 0.5035 -0.7650 +vn -0.4781 0.5995 -0.6418 +vn -0.5402 0.6774 -0.4992 +vn -0.5860 0.7348 -0.3415 +vn -0.6140 0.7700 -0.1734 +vn -0.4051 0.4051 0.8196 +vn -0.4554 0.4554 0.7650 +vn -0.5422 0.5422 0.6418 +vn -0.6127 0.6127 0.4992 +vn -0.6646 0.6646 0.3415 +vn -0.6964 0.6964 0.1734 +vn -0.4051 0.4051 -0.8196 +vn -0.4554 0.4554 -0.7650 +vn -0.5422 0.5422 -0.6418 +vn -0.6127 0.6127 -0.4992 +vn -0.6646 0.6646 -0.3415 +vn -0.6964 0.6964 -0.1734 +vn -0.4480 0.3572 0.8196 +vn -0.5035 0.4015 0.7650 +vn -0.5995 0.4781 0.6418 +vn -0.6774 0.5402 0.4992 +vn -0.7348 0.5860 0.3415 +vn -0.7700 0.6140 0.1734 +vn -0.4480 0.3572 -0.8196 +vn -0.5035 0.4015 -0.7650 +vn -0.5995 0.4781 -0.6418 +vn -0.6774 0.5402 -0.4992 +vn -0.7348 0.5860 -0.3415 +vn -0.7700 0.6140 -0.1734 +vn -0.4851 0.3048 0.8196 +vn -0.5453 0.3426 0.7650 +vn -0.6493 0.4080 0.6418 +vn -0.7336 0.4610 0.4992 +vn -0.7958 0.5000 0.3415 +vn -0.8339 0.5240 0.1734 +vn -0.4851 0.3048 -0.8196 +vn -0.5453 0.3426 -0.7650 +vn -0.6493 0.4080 -0.6418 +vn -0.7336 0.4610 -0.4992 +vn -0.7958 0.5000 -0.3415 +vn -0.8339 0.5240 -0.1734 +vn -0.5162 0.2486 0.8196 +vn -0.5802 0.2794 0.7650 +vn -0.6909 0.3327 0.6418 +vn -0.7806 0.3759 0.4992 +vn -0.8468 0.4078 0.3415 +vn -0.8873 0.4273 0.1734 +vn -0.5162 0.2486 -0.8196 +vn -0.5802 0.2794 -0.7650 +vn -0.6909 0.3327 -0.6418 +vn -0.7806 0.3759 -0.4992 +vn -0.8468 0.4078 -0.3415 +vn -0.8873 0.4273 -0.1734 +vn -0.5408 0.1892 0.8196 +vn -0.6079 0.2127 0.7650 +vn -0.7238 0.2532 0.6418 +vn -0.8178 0.2862 0.4992 +vn -0.8871 0.3104 0.3415 +vn -0.9296 0.3253 0.1734 +vn -0.5408 0.1892 -0.8196 +vn -0.6079 0.2127 -0.7650 +vn -0.7238 0.2532 -0.6418 +vn -0.8178 0.2862 -0.4992 +vn -0.8871 0.3104 -0.3415 +vn -0.9296 0.3253 -0.1734 +vn -0.5586 0.1275 0.8196 +vn -0.6279 0.1433 0.7650 +vn -0.7476 0.1706 0.6418 +vn -0.8447 0.1928 0.4992 +vn -0.9163 0.2091 0.3415 +vn -0.9601 0.2191 0.1734 +vn -0.5586 0.1275 -0.8196 +vn -0.6279 0.1433 -0.7650 +vn -0.7476 0.1706 -0.6418 +vn -0.8447 0.1928 -0.4992 +vn -0.9163 0.2091 -0.3415 +vn -0.9601 0.2191 -0.1734 +vn -0.5694 0.0641 0.8196 +vn -0.6400 0.0721 0.7650 +vn -0.7620 0.0858 0.6418 +vn -0.8610 0.0970 0.4992 +vn -0.9340 0.1052 0.3415 +vn -0.9786 0.1103 0.1734 +vn -0.5694 0.0641 -0.8196 +vn -0.6400 0.0721 -0.7650 +vn -0.7620 0.0858 -0.6418 +vn -0.8610 0.0970 -0.4992 +vn -0.9340 0.1052 -0.3415 +vn -0.9786 0.1103 -0.1734 +vn -0.5732 0.0161 0.8192 +vn -0.6433 0.0180 0.7654 +vn -0.7663 0.0215 0.6421 +vn -0.8660 0.0243 0.4995 +vn -0.9395 0.0263 0.3416 +vn -0.9844 0.0276 0.1734 +vn -0.5732 0.0161 -0.8192 +vn -0.6433 0.0180 -0.7654 +vn -0.7663 0.0215 -0.6421 +vn -0.8660 0.0243 -0.4995 +vn -0.9395 0.0263 -0.3416 +vn -0.9844 0.0276 -0.1734 +g Pipe_Cylinder.002_gauge_face +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 9/9/1 10/10/1 11/11/1 12/12/1 13/13/1 14/14/1 15/15/1 16/16/1 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 25/25/1 26/26/1 27/27/1 28/28/1 29/29/1 30/30/1 31/31/1 32/32/1 +g Pipe_Cylinder.002_gauge_face_NONE +s 1 +f 6/33/2 5/34/3 759/35/4 754/36/5 +f 13/37/6 12/38/7 801/39/8 796/40/9 +f 9/41/10 8/42/11 783/43/12 778/44/13 +f 3/45/14 2/46/15 825/47/16 832/48/17 +f 17/49/18 16/50/19 813/51/20 747/52/21 +f 16/50/19 15/53/22 861/54/23 813/51/20 +f 2/46/15 1/55/24 868/56/25 825/47/16 +f 32/57/26 31/58/27 766/59/28 850/60/29 +f 30/61/30 29/62/31 886/63/32 771/64/33 +f 29/62/31 28/65/34 820/66/35 886/63/32 +f 27/67/36 26/68/37 735/69/38 730/70/39 +f 28/65/34 27/67/36 730/70/39 820/66/35 +f 18/71/40 17/49/18 747/52/21 742/72/41 +f 25/73/42 24/74/43 718/75/44 880/76/45 +f 23/77/46 22/78/47 706/79/48 723/80/49 +f 21/81/50 20/82/51 837/83/52 711/84/53 +f 20/82/51 19/85/54 873/86/55 837/83/52 +f 19/85/54 18/71/40 742/72/41 873/86/55 +f 15/53/22 14/87/56 789/88/57 861/54/23 +f 14/87/56 13/37/6 796/40/9 789/88/57 +f 12/38/7 11/89/58 843/90/59 801/39/8 +f 11/89/58 10/91/60 807/92/61 843/90/59 +f 10/91/60 9/41/10 778/44/13 807/92/61 +f 8/42/11 7/93/62 891/94/63 783/43/12 +f 7/93/62 6/33/2 754/36/5 891/94/63 +f 31/58/27 30/61/30 771/64/33 766/59/28 +f 4/95/64 3/45/14 832/48/17 855/96/65 +f 26/68/37 25/73/42 880/76/45 735/69/38 +f 5/34/3 4/95/64 855/96/65 759/35/4 +f 1/55/24 32/57/26 850/60/29 868/56/25 +f 24/74/43 23/77/46 723/80/49 718/75/44 +f 706/79/48 711/84/53 713/97/66 710/98/67 +f 710/98/67 713/97/66 714/99/68 709/100/69 +f 709/100/69 714/99/68 715/101/70 708/102/71 +f 718/75/44 723/80/49 725/103/72 722/104/73 +f 722/104/73 725/103/72 726/105/74 721/106/75 +f 721/106/75 726/105/74 727/107/76 720/108/77 +f 730/70/39 735/69/38 737/109/78 734/110/79 +f 734/110/79 737/109/78 738/111/80 733/112/81 +f 733/112/81 738/111/80 739/113/82 732/114/83 +f 742/72/41 747/52/21 749/115/84 746/116/85 +f 746/116/85 749/115/84 750/117/86 745/118/87 +f 745/118/87 750/117/86 751/119/88 744/120/89 +f 754/36/5 759/35/4 761/121/90 758/122/91 +f 758/122/91 761/121/90 762/123/92 757/124/93 +f 757/124/93 762/123/92 763/125/94 756/126/95 +f 766/59/28 771/64/33 773/127/96 770/128/97 +f 770/128/97 773/127/96 774/129/98 769/130/99 +f 769/130/99 774/129/98 775/131/100 768/132/101 +f 778/44/13 783/43/12 785/133/102 782/134/103 +f 782/134/103 785/133/102 786/135/104 781/136/105 +f 781/136/105 786/135/104 787/137/106 780/138/107 +f 796/40/9 801/39/8 803/139/108 800/140/109 +f 800/140/109 803/139/108 804/141/110 799/142/111 +f 799/142/111 804/141/110 805/143/112 798/144/113 +f 747/52/21 813/51/20 815/145/114 749/115/84 +f 749/115/84 815/145/114 816/146/115 750/117/86 +f 750/117/86 816/146/115 817/147/116 751/119/88 +f 828/148/117 835/149/118 836/150/119 827/151/120 +f 827/151/120 836/150/119 832/48/17 825/47/16 +f 711/84/53 837/83/52 839/152/121 713/97/66 +f 713/97/66 839/152/121 840/153/122 714/99/68 +f 714/99/68 840/153/122 841/154/123 715/101/70 +f 820/66/35 730/70/39 734/110/79 824/155/124 +f 824/155/124 734/110/79 733/112/81 823/156/125 +f 823/156/125 733/112/81 732/114/83 822/157/126 +f 801/39/8 843/90/59 845/158/127 803/139/108 +f 803/139/108 845/158/127 846/159/128 804/141/110 +f 804/141/110 846/159/128 847/160/129 805/143/112 +f 850/60/29 766/59/28 770/128/97 854/161/130 +f 854/161/130 770/128/97 769/130/99 853/162/131 +f 853/162/131 769/130/99 768/132/101 852/163/132 +f 759/35/4 855/96/65 857/164/133 761/121/90 +f 761/121/90 857/164/133 858/165/134 762/123/92 +f 762/123/92 858/165/134 859/166/135 763/125/94 +f 813/51/20 861/54/23 863/167/136 815/145/114 +f 815/145/114 863/167/136 864/168/137 816/146/115 +f 816/146/115 864/168/137 865/169/138 817/147/116 +f 868/56/25 850/60/29 854/161/130 872/170/139 +f 872/170/139 854/161/130 853/162/131 871/171/140 +f 871/171/140 853/162/131 852/163/132 870/172/141 +f 837/83/52 873/86/55 875/173/142 839/152/121 +f 839/152/121 875/173/142 876/174/143 840/153/122 +f 840/153/122 876/174/143 877/175/144 841/154/123 +f 880/76/45 718/75/44 722/104/73 884/176/145 +f 884/176/145 722/104/73 721/106/75 883/177/146 +f 883/177/146 721/106/75 720/108/77 882/178/147 +f 843/90/59 807/92/61 809/179/148 845/158/127 +f 845/158/127 809/179/148 810/180/149 846/159/128 +f 846/159/128 810/180/149 811/181/150 847/160/129 +f 886/63/32 820/66/35 824/155/124 890/182/151 +f 890/182/151 824/155/124 823/156/125 889/183/152 +f 889/183/152 823/156/125 822/157/126 888/184/153 +f 783/43/12 891/94/63 893/185/154 785/133/102 +f 785/133/102 893/185/154 894/186/155 786/135/104 +f 786/135/104 894/186/155 895/187/156 787/137/106 +f 861/54/23 789/88/57 791/188/157 863/167/136 +f 863/167/136 791/188/157 792/189/158 864/168/137 +f 864/168/137 792/189/158 793/190/159 865/169/138 +f 855/96/65 832/48/17 836/150/119 857/164/133 +f 857/164/133 836/150/119 835/149/118 858/165/134 +f 858/165/134 835/149/118 834/191/160 859/166/135 +f 825/47/16 868/56/25 872/170/139 827/151/120 +f 827/151/120 872/170/139 871/171/140 828/148/117 +f 828/148/117 871/171/140 870/172/141 829/192/161 +f 723/80/49 706/79/48 710/98/67 725/103/72 +f 725/103/72 710/98/67 709/100/69 726/105/74 +f 726/105/74 709/100/69 708/102/71 727/107/76 +f 873/86/55 742/72/41 746/116/85 875/173/142 +f 875/173/142 746/116/85 745/118/87 876/174/143 +f 876/174/143 745/118/87 744/120/89 877/175/144 +f 735/69/38 880/76/45 884/176/145 737/109/78 +f 737/109/78 884/176/145 883/177/146 738/111/80 +f 738/111/80 883/177/146 882/178/147 739/113/82 +f 807/92/61 778/44/13 782/134/103 809/179/148 +f 809/179/148 782/134/103 781/136/105 810/180/149 +f 810/180/149 781/136/105 780/138/107 811/181/150 +f 771/64/33 886/63/32 890/182/151 773/127/96 +f 773/127/96 890/182/151 889/183/152 774/129/98 +f 774/129/98 889/183/152 888/184/153 775/131/100 +f 789/88/57 796/40/9 800/140/109 791/188/157 +f 791/188/157 800/140/109 799/142/111 792/189/158 +f 792/189/158 799/142/111 798/144/113 793/190/159 +f 891/94/63 754/36/5 758/122/91 893/185/154 +f 893/185/154 758/122/91 757/124/93 894/186/155 +f 894/186/155 757/124/93 756/126/95 895/187/156 +f 22/78/47 21/81/50 711/84/53 706/79/48 +g Pipe_Cylinder.002_pipe_and_gauge_body +s off +f 161/193/162 164/194/162 165/195/162 166/196/162 167/197/162 168/198/162 +f 173/199/163 176/200/163 177/201/163 178/202/163 179/203/163 180/204/163 +f 185/205/162 188/206/162 189/207/162 190/208/162 191/209/162 192/210/162 +f 197/211/163 200/212/163 201/213/163 202/214/163 203/215/163 204/216/163 +f 209/217/162 212/218/162 213/219/162 214/220/162 215/221/162 216/222/162 +f 221/223/163 224/224/163 225/225/163 226/226/163 227/227/163 228/228/163 +f 233/229/162 236/230/162 237/231/162 238/232/162 239/233/162 240/234/162 +f 245/235/163 248/236/163 249/237/163 250/238/163 251/239/163 252/240/163 +f 257/241/162 260/242/162 261/243/162 262/244/162 263/245/162 264/246/162 +f 269/247/163 272/248/163 273/249/163 274/250/163 275/251/163 276/252/163 +f 281/253/162 284/254/162 285/255/162 286/256/162 287/257/162 288/258/162 +f 293/259/163 296/260/163 297/261/163 298/262/163 299/263/163 300/264/163 +f 305/265/162 308/266/162 309/267/162 310/268/162 311/269/162 312/270/162 +f 317/271/163 320/272/163 321/273/163 322/274/163 323/275/163 324/276/163 +f 329/277/162 332/278/162 333/279/162 334/280/162 335/281/162 336/282/162 +f 341/283/163 344/284/163 345/285/163 346/286/163 347/287/163 348/288/163 +f 385/289/163 386/290/163 416/291/163 415/292/163 413/293/163 414/294/163 412/295/163 411/296/163 410/297/163 409/298/163 407/299/163 408/300/163 406/301/163 405/302/163 404/303/163 403/304/163 402/305/163 401/306/163 400/307/163 399/308/163 398/309/163 397/310/163 396/311/163 395/312/163 394/313/163 393/314/163 392/315/163 391/316/163 390/317/163 389/318/163 388/319/163 387/320/163 +f 364/321/162 381/322/162 365/323/162 366/324/162 367/325/162 368/326/162 369/327/162 382/328/162 370/329/162 371/330/162 372/331/162 383/332/162 373/333/162 384/334/162 374/335/162 375/336/162 376/337/162 377/338/162 378/339/162 353/340/162 354/341/162 355/342/162 356/343/162 357/344/162 358/345/162 359/346/162 360/347/162 361/348/162 379/349/162 362/350/162 380/351/162 363/352/162 +f 421/353/162 431/354/162 436/355/162 440/356/162 444/357/162 449/358/162 448/359/162 453/360/162 457/361/162 461/362/162 465/363/162 470/364/162 479/365/162 480/366/162 478/367/162 472/368/162 467/369/162 463/370/162 459/371/162 455/372/162 451/373/162 446/374/162 442/375/162 438/376/162 433/377/162 429/378/162 422/379/162 423/380/162 420/381/162 417/382/162 418/383/162 419/384/162 +f 425/385/163 424/386/163 430/387/163 435/388/163 434/389/163 439/390/163 443/391/163 447/392/163 452/393/163 456/394/163 460/395/163 464/396/163 468/397/163 473/398/163 469/399/163 475/400/163 474/401/163 476/402/163 477/403/163 471/404/163 466/405/163 462/406/163 458/407/163 454/408/163 450/409/163 445/410/163 441/411/163 437/412/163 432/413/163 428/414/163 427/415/163 426/416/163 +f 481/417/162 484/418/162 485/419/162 486/420/162 487/421/162 488/422/162 +f 493/423/163 496/424/163 497/425/163 498/426/163 499/427/163 500/428/163 +f 505/429/162 508/430/162 509/431/162 510/432/162 511/433/162 512/434/162 +f 517/435/163 520/436/163 521/437/163 522/438/163 523/439/163 524/440/163 +f 529/441/162 532/442/162 533/443/162 534/444/162 535/445/162 536/446/162 +f 541/447/163 544/448/163 545/449/163 546/450/163 547/451/163 548/452/163 +f 553/453/162 556/454/162 557/455/162 558/456/162 559/457/162 560/458/162 +f 565/459/163 568/460/163 569/461/163 570/462/163 571/463/163 572/464/163 +f 577/465/162 580/466/162 581/467/162 582/468/162 583/469/162 584/470/162 +f 589/471/163 592/472/163 593/473/163 594/474/163 595/475/163 596/476/163 +f 601/477/162 604/478/162 605/479/162 606/480/162 607/481/162 608/482/162 +f 613/483/163 616/484/163 617/485/163 618/486/163 619/487/163 620/488/163 +f 625/489/162 628/490/162 629/491/162 630/492/162 631/493/162 632/494/162 +f 637/495/163 640/496/163 641/497/163 642/498/163 643/499/163 644/500/163 +f 649/501/162 652/502/162 653/503/162 654/504/162 655/505/162 656/506/162 +f 661/507/163 664/508/163 665/509/163 666/510/163 667/511/163 668/512/163 +f 673/513/164 674/514/164 686/515/164 691/516/164 692/517/164 702/518/164 675/519/164 676/520/164 694/521/164 700/522/164 688/523/164 683/524/164 693/525/164 699/526/164 687/527/164 682/528/164 690/529/164 677/530/164 678/531/164 701/532/164 695/533/164 696/534/164 684/535/164 698/536/164 685/537/164 679/538/164 704/539/164 697/540/164 680/541/164 681/542/164 703/543/164 689/544/164 +s 1 +f 1139/545/165 1251/546/166 1342/547/167 1153/548/168 +f 1237/549/169 1258/550/170 1244/551/171 1146/552/172 +f 1027/553/173 1048/554/174 1034/555/175 936/556/176 +f 1363/557/177 1657/558/178 1650/559/179 1370/560/180 +f 943/561/181 1132/562/182 1125/563/183 950/564/184 +f 917/565/185 924/566/186 909/567/186 900/568/185 +f 906/569/187 927/570/187 926/571/188 907/572/188 +f 910/573/189 923/574/189 922/575/190 911/576/190 +f 675/577/191 867/578/192 849/579/193 676/580/194 +f 691/581/195 856/582/196 831/583/197 692/584/198 +f 679/585/199 790/586/200 795/587/201 704/588/202 +f 698/589/203 814/590/204 862/591/205 685/592/206 +f 685/592/206 862/591/205 790/586/200 679/585/199 +f 681/593/207 808/594/208 777/595/209 703/596/210 +f 699/597/211 736/598/212 879/599/213 687/600/214 +f 684/601/215 748/602/216 814/590/204 698/589/203 +f 686/603/217 760/604/218 856/582/196 691/581/195 +f 704/588/202 795/587/201 802/605/219 697/606/220 +f 678/607/221 712/608/222 838/609/223 701/610/224 +f 676/611/194 849/612/193 765/613/225 694/614/226 +f 388/615/227 355/616/228 354/617/229 387/618/230 +f 389/619/231 356/620/232 355/616/228 388/615/227 +f 390/621/233 357/622/234 356/620/232 389/619/231 +f 391/623/235 358/624/236 357/622/234 390/621/233 +f 392/625/237 359/626/238 358/624/236 391/623/235 +f 393/627/239 360/628/240 359/626/238 392/625/237 +f 394/629/241 361/630/242 360/628/240 393/627/239 +f 395/631/243 379/632/244 361/630/242 394/629/241 +f 396/633/245 362/634/246 379/632/244 395/631/243 +f 397/635/247 380/636/248 362/634/246 396/633/245 +f 398/637/249 363/638/250 380/636/248 397/635/247 +f 399/639/251 364/640/252 363/638/250 398/637/249 +f 400/641/253 381/642/254 364/640/252 399/639/251 +f 401/643/255 365/644/256 381/642/254 400/641/253 +f 402/645/257 366/646/258 365/644/256 401/643/255 +f 403/647/259 367/648/260 366/646/258 402/645/257 +f 404/649/261 368/650/262 367/651/260 403/652/259 +f 405/653/263 369/654/264 368/650/262 404/649/261 +f 406/655/265 382/656/266 369/654/264 405/653/263 +f 408/657/267 370/658/268 382/656/266 406/655/265 +f 409/659/269 372/660/270 371/661/271 407/662/272 +f 407/662/272 371/661/271 370/658/268 408/657/267 +f 410/663/273 383/664/274 372/660/270 409/659/269 +f 411/665/275 373/666/276 383/664/274 410/663/273 +f 412/667/277 384/668/278 373/666/276 411/665/275 +f 414/669/279 374/670/280 384/668/278 412/667/277 +f 415/671/281 376/672/282 375/673/283 413/674/284 +f 413/674/284 375/673/283 374/670/280 414/669/279 +f 416/675/285 377/676/286 376/672/282 415/671/281 +f 386/677/287 378/678/288 377/676/286 416/675/285 +f 62/679/289 65/680/290 66/681/291 33/682/292 +f 34/683/293 33/682/292 66/681/291 67/684/294 +f 35/685/295 34/683/293 67/684/294 68/686/296 +f 36/687/297 35/685/295 68/686/296 69/688/298 +f 37/689/299 36/687/297 69/688/298 70/690/300 +f 38/691/301 37/689/299 70/690/300 71/692/302 +f 38/691/301 71/692/302 72/693/303 39/694/304 +f 40/695/305 39/694/304 72/693/303 73/696/306 +f 41/697/307 40/695/305 73/696/306 74/698/308 +f 42/699/309 41/697/307 74/698/308 75/700/310 +f 42/699/309 75/700/310 76/701/311 43/702/312 +f 43/702/312 76/701/311 77/703/313 63/704/314 +f 44/705/315 78/706/316 79/707/317 45/708/318 +f 63/704/314 77/703/313 78/706/316 44/705/315 +f 45/708/318 79/707/317 80/709/319 46/710/320 +f 47/711/321 46/710/320 80/709/319 81/712/322 +f 47/711/321 81/712/322 82/713/323 48/714/324 +f 49/715/325 48/714/324 82/713/323 83/716/326 +f 49/717/325 83/718/326 84/719/327 50/720/328 +f 51/721/329 50/720/328 84/719/327 85/722/330 +f 51/721/329 85/722/330 86/723/331 52/724/332 +f 52/724/332 86/723/331 87/725/333 54/726/334 +f 54/726/334 87/725/333 88/727/335 53/728/336 +f 53/728/336 88/727/335 89/729/337 55/730/338 +f 55/730/338 89/729/337 90/731/339 56/732/340 +f 56/732/340 90/731/339 91/733/341 64/734/342 +f 59/735/343 57/736/344 92/737/345 93/738/346 +f 57/736/344 64/734/342 91/733/341 92/737/345 +f 60/739/347 58/740/348 94/741/349 95/742/350 +f 59/735/343 93/738/346 94/741/349 58/740/348 +f 61/743/351 60/739/347 95/742/350 96/744/352 +f 61/743/351 96/744/352 65/680/290 62/679/289 +f 99/745/353 76/701/311 75/700/310 98/746/354 +f 102/747/355 98/746/354 97/748/356 103/749/357 +f 104/750/358 99/745/353 98/746/354 102/747/355 +f 106/751/359 100/752/360 99/745/353 104/750/358 +f 101/753/361 73/696/306 72/693/303 107/754/362 +f 103/749/357 97/748/356 101/753/361 108/755/363 +f 110/756/364 105/757/365 100/752/360 106/751/359 +f 112/758/366 108/755/363 101/753/361 107/754/362 +f 114/759/367 109/760/368 105/757/365 110/756/364 +f 116/761/369 112/758/366 107/754/362 111/762/370 +f 420/763/242 424/764/241 425/765/243 417/766/244 +f 419/767/248 427/768/247 428/769/249 421/770/250 +f 118/771/371 113/772/372 109/760/368 114/759/367 +f 423/773/240 430/774/239 424/764/241 420/763/242 +f 120/775/373 116/761/369 111/762/370 115/776/374 +f 421/770/250 428/769/249 432/777/251 431/778/252 +f 122/779/375 117/780/376 113/772/372 118/771/371 +f 422/781/238 435/782/237 430/774/239 423/773/240 +f 124/783/377 120/775/373 115/776/374 119/784/378 +f 429/785/236 434/786/235 435/782/237 422/781/238 +f 126/787/379 121/788/380 117/780/376 122/779/375 +f 438/789/232 443/790/231 439/791/233 433/792/234 +f 128/793/381 124/783/377 119/784/378 123/794/382 +f 431/778/252 432/777/251 437/795/253 436/796/254 +f 130/797/383 125/798/384 121/788/380 126/787/379 +f 442/799/228 447/800/227 443/790/231 438/789/232 +f 132/801/385 128/793/381 123/794/382 127/802/386 +f 436/796/254 437/795/253 441/803/255 440/804/256 +f 134/805/387 129/806/388 125/807/384 130/808/383 +f 387/618/230 354/617/229 353/809/389 385/810/390 +f 446/811/229 452/812/230 447/800/227 442/799/228 +f 68/686/296 123/794/382 119/784/378 69/688/298 +f 149/813/391 89/729/337 88/727/335 145/814/392 +f 136/815/393 132/801/385 127/802/386 131/816/394 +f 440/804/256 441/803/255 445/817/257 444/818/258 +f 138/819/395 133/820/396 129/806/388 134/805/387 +f 451/821/389 456/822/390 452/812/230 446/811/229 +f 140/823/397 136/815/393 131/816/394 135/824/398 +f 444/818/258 445/817/257 450/825/259 449/826/260 +f 142/827/399 137/828/400 133/820/396 138/819/395 +f 455/829/288 460/830/287 456/822/390 451/821/389 +f 144/831/401 140/823/397 135/824/398 139/832/402 +f 448/833/262 454/834/261 458/835/263 453/836/264 +f 142/827/399 146/837/403 141/838/404 137/828/400 +f 449/826/260 450/825/259 454/839/261 448/840/262 +f 148/841/405 144/831/401 139/832/402 143/842/406 +f 453/836/264 458/835/263 462/843/265 457/844/266 +f 417/766/244 425/765/243 426/845/245 418/846/246 +f 150/847/407 145/814/392 141/838/404 146/837/403 +f 459/848/286 464/849/285 460/830/287 455/829/288 +f 93/738/346 151/850/408 147/851/409 94/741/349 +f 152/852/410 148/841/405 143/842/406 147/851/409 +f 457/844/266 462/843/265 466/853/267 461/854/268 +f 150/847/407 154/855/411 149/813/391 145/814/392 +f 463/856/282 468/857/281 464/849/285 459/848/286 +f 156/858/412 152/852/410 147/851/409 151/850/408 +f 461/854/268 466/853/267 471/859/272 465/860/271 +f 154/855/411 158/861/413 153/862/414 149/813/391 +f 467/863/283 473/864/284 468/857/281 463/856/282 +f 433/792/234 439/791/233 434/786/235 429/785/236 +f 159/865/415 156/858/412 151/850/408 155/866/416 +f 465/860/271 471/859/272 477/867/269 470/868/270 +f 158/861/413 160/869/417 157/870/418 153/862/414 +f 472/871/280 469/872/279 473/864/284 467/863/283 +f 160/869/417 159/865/415 155/866/416 157/870/418 +f 418/846/246 426/845/245 427/768/247 419/767/248 +f 478/873/278 475/874/277 469/872/279 472/871/280 +f 470/868/270 477/867/269 476/875/273 479/876/274 +f 480/877/276 474/878/275 475/874/277 478/873/278 +f 479/876/274 476/875/273 474/878/275 480/877/276 +f 161/879/419 162/880/420 163/881/421 164/882/422 +f 168/883/423 169/884/424 162/880/420 161/879/419 +f 164/882/422 163/881/421 170/885/425 165/886/426 +f 165/886/426 170/885/425 171/887/427 166/888/428 +f 166/889/428 171/890/427 172/891/429 167/892/430 +f 167/892/430 172/891/429 169/884/424 168/883/423 +f 173/893/431 174/894/427 175/895/425 176/896/432 +f 180/897/433 181/898/429 174/894/427 173/893/431 +f 176/896/432 175/895/425 182/899/421 177/900/434 +f 177/900/434 182/899/421 183/901/420 178/902/435 +f 178/903/435 183/904/420 184/905/424 179/906/436 +f 179/906/436 184/905/424 181/898/429 180/897/433 +f 185/907/437 186/908/438 187/909/439 188/910/440 +f 192/911/441 193/912/442 186/908/438 185/907/437 +f 188/910/440 187/909/439 194/913/443 189/914/444 +f 189/914/444 194/913/443 195/915/445 190/916/446 +f 190/917/446 195/918/445 196/919/447 191/920/448 +f 191/920/448 196/919/447 193/912/442 192/911/441 +f 197/921/449 198/922/445 199/923/443 200/924/450 +f 204/925/451 205/926/447 198/922/445 197/921/449 +f 200/924/450 199/923/443 206/927/439 201/928/452 +f 201/928/452 206/927/439 207/929/438 202/930/453 +f 202/931/453 207/932/438 208/933/442 203/934/454 +f 203/934/454 208/933/442 205/926/447 204/925/451 +f 209/935/455 210/936/456 211/937/457 212/938/458 +f 216/939/459 217/940/460 210/936/456 209/935/455 +f 212/938/458 211/937/457 218/941/461 213/942/462 +f 213/942/462 218/941/461 219/943/463 214/944/464 +f 214/945/464 219/946/463 220/947/465 215/948/466 +f 215/948/466 220/947/465 217/940/460 216/939/459 +f 221/949/467 222/950/463 223/951/461 224/952/468 +f 228/953/469 229/954/465 222/950/463 221/949/467 +f 224/952/468 223/951/461 230/955/457 225/956/470 +f 225/956/470 230/955/457 231/957/456 226/958/471 +f 226/959/471 231/960/456 232/961/460 227/962/472 +f 227/962/472 232/961/460 229/954/465 228/953/469 +f 233/963/473 234/964/474 235/965/475 236/966/476 +f 240/967/477 241/968/478 234/964/474 233/963/473 +f 236/966/476 235/965/475 242/969/479 237/970/480 +f 237/970/480 242/969/479 243/971/481 238/972/482 +f 238/973/482 243/974/481 244/975/483 239/976/484 +f 239/976/484 244/975/483 241/968/478 240/967/477 +f 245/977/485 246/978/481 247/979/479 248/980/486 +f 252/981/487 253/982/483 246/978/481 245/977/485 +f 248/980/486 247/979/479 254/983/475 249/984/488 +f 249/984/488 254/983/475 255/985/474 250/986/489 +f 250/987/489 255/988/474 256/989/478 251/990/490 +f 251/990/490 256/989/478 253/982/483 252/981/487 +f 257/991/428 258/992/427 259/993/429 260/994/430 +f 264/995/426 265/996/425 258/992/427 257/991/428 +f 260/994/430 259/993/429 266/997/424 261/998/423 +f 261/998/423 266/997/424 267/999/420 262/1000/419 +f 262/1001/419 267/1002/420 268/1003/421 263/1004/422 +f 263/1004/422 268/1003/421 265/996/425 264/995/426 +f 269/1005/435 270/1006/420 271/1007/424 272/1008/436 +f 276/1009/434 277/1010/421 270/1006/420 269/1005/435 +f 272/1008/436 271/1007/424 278/1011/429 273/1012/433 +f 273/1012/433 278/1011/429 279/1013/427 274/1014/431 +f 274/1015/431 279/1016/427 280/1017/425 275/1018/432 +f 275/1018/432 280/1017/425 277/1010/421 276/1009/434 +f 281/1019/446 282/1020/445 283/1021/447 284/1022/448 +f 288/1023/444 289/1024/443 282/1020/445 281/1019/446 +f 284/1022/448 283/1021/447 290/1025/442 285/1026/441 +f 285/1026/441 290/1025/442 291/1027/438 286/1028/437 +f 286/1029/437 291/1030/438 292/1031/439 287/1032/440 +f 287/1032/440 292/1031/439 289/1024/443 288/1023/444 +f 293/1033/453 294/1034/438 295/1035/442 296/1036/454 +f 300/1037/452 301/1038/439 294/1034/438 293/1033/453 +f 296/1036/454 295/1035/442 302/1039/447 297/1040/451 +f 297/1040/451 302/1039/447 303/1041/445 298/1042/449 +f 298/1043/449 303/1044/445 304/1045/443 299/1046/450 +f 299/1046/450 304/1045/443 301/1038/439 300/1037/452 +f 305/1047/464 306/1048/463 307/1049/465 308/1050/466 +f 312/1051/462 313/1052/461 306/1048/463 305/1047/464 +f 308/1050/466 307/1049/465 314/1053/460 309/1054/459 +f 309/1054/459 314/1053/460 315/1055/456 310/1056/455 +f 310/1057/455 315/1058/456 316/1059/457 311/1060/458 +f 311/1060/458 316/1059/457 313/1052/461 312/1051/462 +f 317/1061/471 318/1062/456 319/1063/460 320/1064/472 +f 324/1065/470 325/1066/457 318/1062/456 317/1061/471 +f 320/1064/472 319/1063/460 326/1067/465 321/1068/469 +f 321/1068/469 326/1067/465 327/1069/463 322/1070/467 +f 322/1071/467 327/1072/463 328/1073/461 323/1074/468 +f 323/1074/468 328/1073/461 325/1066/457 324/1065/470 +f 329/1075/482 330/1076/481 331/1077/483 332/1078/484 +f 336/1079/480 337/1080/479 330/1076/481 329/1075/482 +f 332/1078/484 331/1077/483 338/1081/478 333/1082/477 +f 333/1082/477 338/1081/478 339/1083/474 334/1084/473 +f 334/1085/473 339/1086/474 340/1087/475 335/1088/476 +f 335/1088/476 340/1087/475 337/1080/479 336/1079/480 +f 341/1089/489 342/1090/474 343/1091/478 344/1092/490 +f 348/1093/488 349/1094/475 342/1090/474 341/1089/489 +f 344/1092/490 343/1091/478 350/1095/483 345/1096/487 +f 345/1096/487 350/1095/483 351/1097/481 346/1098/485 +f 346/1099/485 351/1100/481 352/1101/479 347/1102/486 +f 347/1102/486 352/1101/479 349/1094/475 348/1093/488 +f 86/723/331 85/722/330 133/820/396 137/828/400 +f 96/744/352 139/832/402 135/824/398 65/680/290 +f 157/870/418 91/733/341 90/731/339 153/862/414 +f 97/748/356 74/698/308 73/696/306 101/753/361 +f 94/741/349 147/851/409 143/842/406 95/742/350 +f 121/788/380 125/798/384 83/716/326 82/713/323 +f 70/690/300 69/688/298 119/784/378 115/776/374 +f 153/862/414 90/731/339 89/729/337 149/813/391 +f 93/738/346 92/737/345 155/866/416 151/850/408 +f 96/744/352 95/742/350 143/842/406 139/832/402 +f 157/870/418 155/866/416 92/737/345 91/733/341 +f 71/692/302 111/762/370 107/754/362 72/693/303 +f 67/684/294 66/681/291 131/816/394 127/802/386 +f 87/725/333 141/838/404 145/814/392 88/727/335 +f 87/725/333 86/723/331 137/828/400 141/838/404 +f 81/712/322 80/709/319 113/772/372 117/780/376 +f 385/810/390 353/809/389 378/678/288 386/677/287 +f 68/686/296 67/684/294 127/802/386 123/794/382 +f 75/700/310 74/698/308 97/748/356 98/746/354 +f 77/703/313 100/752/360 105/757/365 78/706/316 +f 78/706/316 105/757/365 109/760/368 79/707/317 +f 76/701/311 99/745/353 100/752/360 77/703/313 +f 84/719/327 129/806/388 133/820/396 85/722/330 +f 66/681/291 65/680/290 135/824/398 131/816/394 +f 121/788/380 82/713/323 81/712/322 117/780/376 +f 481/1103/491 482/1104/492 483/1105/493 484/1106/494 +f 488/1107/495 489/1108/496 482/1104/492 481/1103/491 +f 484/1106/494 483/1105/493 490/1109/497 485/1110/498 +f 485/1110/498 490/1109/497 491/1111/499 486/1112/500 +f 486/1113/500 491/1114/499 492/1115/501 487/1116/502 +f 487/1116/502 492/1115/501 489/1108/496 488/1107/495 +f 493/1117/503 494/1118/499 495/1119/497 496/1120/504 +f 500/1121/505 501/1122/501 494/1118/499 493/1117/503 +f 496/1120/504 495/1119/497 502/1123/493 497/1124/506 +f 497/1124/506 502/1123/493 503/1125/492 498/1126/507 +f 498/1127/507 503/1128/492 504/1129/496 499/1130/508 +f 499/1130/508 504/1129/496 501/1122/501 500/1121/505 +f 505/1131/509 506/1132/510 507/1133/511 508/1134/512 +f 512/1135/513 513/1136/514 506/1132/510 505/1131/509 +f 508/1134/512 507/1133/511 514/1137/515 509/1138/516 +f 509/1138/516 514/1137/515 515/1139/517 510/1140/518 +f 510/1141/518 515/1142/517 516/1143/519 511/1144/520 +f 511/1144/520 516/1143/519 513/1136/514 512/1135/513 +f 517/1145/521 518/1146/517 519/1147/515 520/1148/522 +f 524/1149/523 525/1150/519 518/1146/517 517/1145/521 +f 520/1148/522 519/1147/515 526/1151/511 521/1152/524 +f 521/1152/524 526/1151/511 527/1153/510 522/1154/525 +f 522/1155/525 527/1156/510 528/1157/514 523/1158/526 +f 523/1158/526 528/1157/514 525/1150/519 524/1149/523 +f 529/1159/527 530/1160/528 531/1161/529 532/1162/530 +f 536/1163/531 537/1164/532 530/1160/528 529/1159/527 +f 532/1162/530 531/1161/529 538/1165/533 533/1166/534 +f 533/1166/534 538/1165/533 539/1167/535 534/1168/536 +f 534/1169/536 539/1170/535 540/1171/537 535/1172/538 +f 535/1172/538 540/1171/537 537/1164/532 536/1163/531 +f 541/1173/539 542/1174/535 543/1175/533 544/1176/540 +f 548/1177/541 549/1178/537 542/1174/535 541/1173/539 +f 544/1176/540 543/1175/533 550/1179/529 545/1180/542 +f 545/1180/542 550/1179/529 551/1181/528 546/1182/543 +f 546/1183/543 551/1184/528 552/1185/532 547/1186/544 +f 547/1186/544 552/1185/532 549/1178/537 548/1177/541 +f 553/1187/545 554/1188/1 555/1189/546 556/1190/547 +f 560/1191/548 561/1192/549 554/1188/1 553/1187/545 +f 556/1190/547 555/1189/546 562/1193/550 557/1194/551 +f 557/1194/551 562/1193/550 563/1195/164 558/1196/552 +f 558/1197/552 563/1198/164 564/1199/553 559/1200/554 +f 559/1200/554 564/1199/553 561/1192/549 560/1191/548 +f 565/1201/555 566/1202/164 567/1203/550 568/1204/556 +f 572/1205/557 573/1206/553 566/1202/164 565/1201/555 +f 568/1204/556 567/1203/550 574/1207/546 569/1208/558 +f 569/1208/558 574/1207/546 575/1209/1 570/1210/559 +f 570/1211/559 575/1212/1 576/1213/549 571/1214/560 +f 571/1214/560 576/1213/549 573/1206/553 572/1205/557 +f 577/1215/500 578/1216/499 579/1217/501 580/1218/502 +f 584/1219/498 585/1220/497 578/1216/499 577/1215/500 +f 580/1218/502 579/1217/501 586/1221/496 581/1222/495 +f 581/1222/495 586/1221/496 587/1223/492 582/1224/491 +f 582/1225/491 587/1226/492 588/1227/493 583/1228/494 +f 583/1228/494 588/1227/493 585/1220/497 584/1219/498 +f 589/1229/507 590/1230/492 591/1231/496 592/1232/508 +f 596/1233/506 597/1234/493 590/1230/492 589/1229/507 +f 592/1232/508 591/1231/496 598/1235/501 593/1236/505 +f 593/1236/505 598/1235/501 599/1237/499 594/1238/503 +f 594/1239/503 599/1240/499 600/1241/497 595/1242/504 +f 595/1242/504 600/1241/497 597/1234/493 596/1233/506 +f 601/1243/518 602/1244/517 603/1245/519 604/1246/520 +f 608/1247/516 609/1248/515 602/1244/517 601/1243/518 +f 604/1246/520 603/1245/519 610/1249/514 605/1250/513 +f 605/1250/513 610/1249/514 611/1251/510 606/1252/509 +f 606/1253/509 611/1254/510 612/1255/511 607/1256/512 +f 607/1256/512 612/1255/511 609/1248/515 608/1247/516 +f 613/1257/525 614/1258/510 615/1259/514 616/1260/526 +f 620/1261/524 621/1262/511 614/1258/510 613/1257/525 +f 616/1260/526 615/1259/514 622/1263/519 617/1264/523 +f 617/1264/523 622/1263/519 623/1265/517 618/1266/521 +f 618/1267/521 623/1268/517 624/1269/515 619/1270/522 +f 619/1270/522 624/1269/515 621/1262/511 620/1261/524 +f 625/1271/536 626/1272/535 627/1273/537 628/1274/538 +f 632/1275/534 633/1276/533 626/1272/535 625/1271/536 +f 628/1274/538 627/1273/537 634/1277/532 629/1278/531 +f 629/1278/531 634/1277/532 635/1279/528 630/1280/527 +f 630/1281/527 635/1282/528 636/1283/529 631/1284/530 +f 631/1284/530 636/1283/529 633/1276/533 632/1275/534 +f 637/1285/543 638/1286/528 639/1287/532 640/1288/544 +f 644/1289/542 645/1290/529 638/1286/528 637/1285/543 +f 640/1288/544 639/1287/532 646/1291/537 641/1292/541 +f 641/1292/541 646/1291/537 647/1293/535 642/1294/539 +f 642/1295/539 647/1296/535 648/1297/533 643/1298/540 +f 643/1298/540 648/1297/533 645/1290/529 644/1289/542 +f 649/1299/552 650/1300/164 651/1301/553 652/1302/554 +f 656/1303/551 657/1304/550 650/1300/164 649/1299/552 +f 652/1302/554 651/1301/553 658/1305/549 653/1306/548 +f 653/1306/548 658/1305/549 659/1307/1 654/1308/545 +f 654/1309/545 659/1310/1 660/1311/546 655/1312/547 +f 655/1312/547 660/1311/546 657/1304/550 656/1303/551 +f 661/1313/559 662/1314/1 663/1315/549 664/1316/560 +f 668/1317/558 669/1318/546 662/1314/1 661/1313/559 +f 664/1316/560 663/1315/549 670/1319/553 665/1320/557 +f 665/1320/557 670/1319/553 671/1321/164 666/1322/555 +f 666/1323/555 671/1324/164 672/1325/550 667/1326/556 +f 667/1326/556 672/1325/550 669/1318/546 668/1317/558 +f 70/690/300 115/776/374 111/762/370 71/692/302 +f 113/772/372 80/709/319 79/707/317 109/760/368 +f 83/718/326 125/807/384 129/806/388 84/719/327 +f 700/1327/561 772/1328/562 885/1329/563 688/1330/564 +f 687/600/214 879/599/213 717/1331/565 682/1332/566 +f 690/1333/567 724/1334/568 705/1335/569 677/1336/570 +f 695/1337/571 874/1338/572 741/1339/573 696/1340/574 +f 674/1341/575 753/1342/576 760/604/218 686/603/217 +f 688/1330/564 885/1329/563 819/1343/577 683/1344/578 +f 680/1345/579 844/1346/580 808/594/208 681/593/207 +f 689/1347/581 784/1348/582 892/1349/583 673/1350/584 +f 673/1350/584 892/1349/583 753/1342/576 674/1341/575 +f 701/610/224 838/609/223 874/1338/572 695/1337/571 +f 702/1351/585 826/1352/586 867/578/192 675/577/191 +f 677/1336/570 705/1335/569 712/608/222 678/607/221 +f 692/584/198 831/583/197 826/1352/586 702/1351/585 +f 693/1353/587 729/1354/588 736/598/212 699/597/211 +f 696/1340/574 741/1339/573 748/602/216 684/601/215 +f 682/1332/566 717/1331/565 724/1334/568 690/1333/567 +f 683/1344/578 819/1343/577 729/1354/588 693/1353/587 +f 694/614/226 765/613/225 772/1328/562 700/1327/561 +f 703/596/210 777/595/209 784/1348/582 689/1347/581 +f 697/606/220 802/605/219 844/1346/580 680/1345/579 +f 708/1355/71 715/1356/70 716/1357/589 707/1358/590 +f 707/1358/590 716/1357/589 712/608/222 705/1335/569 +f 720/1359/77 727/1360/76 728/1361/591 719/1362/592 +f 719/1362/592 728/1361/591 724/1334/568 717/1331/565 +f 732/1363/83 739/1364/82 740/1365/593 731/1366/594 +f 731/1366/594 740/1365/593 736/598/212 729/1354/588 +f 744/1367/89 751/1368/88 752/1369/595 743/1370/596 +f 743/1370/596 752/1369/595 748/602/216 741/1339/573 +f 756/1371/95 763/1372/94 764/1373/597 755/1374/598 +f 755/1374/598 764/1373/597 760/604/218 753/1342/576 +f 768/1375/101 775/1376/100 776/1377/599 767/1378/600 +f 767/1378/600 776/1377/599 772/1328/562 765/613/225 +f 780/1379/107 787/1380/106 788/1381/601 779/1382/602 +f 779/1382/602 788/1381/601 784/1348/582 777/595/209 +f 798/1383/113 805/1384/112 806/1385/603 797/1386/604 +f 797/1386/604 806/1385/603 802/605/219 795/587/201 +f 751/1387/88 817/1388/116 818/1389/605 752/1390/595 +f 752/1390/595 818/1389/605 814/590/204 748/602/216 +f 826/1352/586 831/583/197 833/1391/606 830/1392/607 +f 830/1392/607 833/1391/606 834/1393/160 829/1394/161 +f 829/1394/161 834/1393/160 835/1395/118 828/1396/117 +f 715/1397/70 841/1398/123 842/1399/608 716/1400/589 +f 716/1400/589 842/1399/608 838/609/223 712/608/222 +f 822/1401/126 732/1402/83 731/1403/594 821/1404/609 +f 821/1404/609 731/1403/594 729/1354/588 819/1343/577 +f 805/1405/112 847/1406/129 848/1407/610 806/1408/603 +f 806/1408/603 848/1407/610 844/1346/580 802/605/219 +f 852/1409/132 768/1410/101 767/1411/600 851/1412/611 +f 851/1412/611 767/1411/600 765/613/225 849/612/193 +f 763/1413/94 859/1414/135 860/1415/612 764/1416/597 +f 764/1416/597 860/1415/612 856/582/196 760/604/218 +f 817/1417/116 865/1418/138 866/1419/613 818/1420/605 +f 818/1420/605 866/1419/613 862/591/205 814/590/204 +f 870/1421/141 852/1422/132 851/1423/611 869/1424/614 +f 869/1424/614 851/1423/611 849/579/193 867/578/192 +f 841/1425/123 877/1426/144 878/1427/615 842/1428/608 +f 842/1428/608 878/1427/615 874/1338/572 838/609/223 +f 882/1429/147 720/1430/77 719/1431/592 881/1432/616 +f 881/1432/616 719/1431/592 717/1331/565 879/599/213 +f 847/1433/129 811/1434/150 812/1435/617 848/1436/610 +f 848/1436/610 812/1435/617 808/594/208 844/1346/580 +f 888/1437/153 822/1438/126 821/1439/609 887/1440/618 +f 887/1440/618 821/1439/609 819/1343/577 885/1329/563 +f 787/1441/106 895/1442/156 896/1443/619 788/1444/601 +f 788/1444/601 896/1443/619 892/1349/583 784/1348/582 +f 865/1445/138 793/1446/159 794/1447/620 866/1448/613 +f 866/1448/613 794/1447/620 790/586/200 862/591/205 +f 859/1449/135 834/1450/160 833/1451/606 860/1452/612 +f 860/1452/612 833/1451/606 831/583/197 856/582/196 +f 829/1453/161 870/1454/141 869/1455/614 830/1456/607 +f 830/1456/607 869/1455/614 867/578/192 826/1352/586 +f 727/1457/76 708/1458/71 707/1459/590 728/1460/591 +f 728/1460/591 707/1459/590 705/1335/569 724/1334/568 +f 877/1461/144 744/1462/89 743/1463/596 878/1464/615 +f 878/1464/615 743/1463/596 741/1339/573 874/1338/572 +f 739/1465/82 882/1466/147 881/1467/616 740/1468/593 +f 740/1468/593 881/1467/616 879/599/213 736/598/212 +f 811/1469/150 780/1470/107 779/1471/602 812/1472/617 +f 812/1472/617 779/1471/602 777/595/209 808/594/208 +f 775/1473/100 888/1474/153 887/1475/618 776/1476/599 +f 776/1476/599 887/1475/618 885/1329/563 772/1328/562 +f 793/1477/159 798/1478/113 797/1479/604 794/1480/620 +f 794/1480/620 797/1479/604 795/587/201 790/586/200 +f 895/1481/156 756/1482/95 755/1483/598 896/1484/619 +f 896/1484/619 755/1483/598 753/1342/576 892/1349/583 +f 921/1485/621 928/1486/622 905/1487/622 912/1488/621 +f 925/1489/623 916/1490/624 901/1491/624 908/1492/623 +f 913/1493/625 920/1494/626 897/1495/626 904/1496/625 +f 902/1497/627 915/1498/627 914/1499/628 903/1500/628 +f 1251/546/166 1139/545/165 1461/1501/629 1664/1502/630 +f 1160/1503/631 1335/1504/632 1328/1505/633 1167/1506/634 +f 1167/1506/634 1328/1505/633 1321/1507/635 1174/1508/636 +f 1174/1508/636 1321/1507/635 1314/1509/637 1181/1510/638 +f 1181/1510/638 1314/1509/637 1307/1511/639 1188/1512/640 +f 1188/1512/640 1307/1511/639 1300/1513/641 1195/1514/642 +f 1195/1515/642 1300/1516/641 1293/1517/643 1202/1518/644 +f 1202/1518/644 1293/1517/643 1286/1519/645 1209/1520/646 +f 1209/1520/646 1286/1519/645 1279/1521/647 1216/1522/648 +f 1216/1522/648 1279/1521/647 1272/1523/649 1223/1524/650 +f 1223/1524/650 1272/1523/649 1265/1525/651 1230/1526/652 +f 1230/1526/652 1265/1525/651 1258/550/170 1237/549/169 +f 1349/1527/653 1566/1528/654 1657/558/178 1363/557/177 +f 1153/548/168 1342/547/167 1335/1504/632 1160/1503/631 +f 1447/1529/655 1573/1530/656 1559/1531/657 1356/1532/658 +f 1370/560/180 1650/559/179 1643/1533/659 1377/1534/660 +f 1377/1534/660 1643/1533/659 1636/1535/661 1384/1536/662 +f 1384/1536/662 1636/1535/661 1629/1537/663 1391/1538/664 +f 1391/1538/664 1629/1537/663 1622/1539/665 1398/1540/666 +f 1398/1540/666 1622/1539/665 1615/1541/667 1405/1542/668 +f 1405/1543/668 1615/1544/667 1608/1545/669 1412/1546/670 +f 1412/1546/670 1608/1545/669 1601/1547/671 1419/1548/672 +f 1419/1548/672 1601/1547/671 1594/1549/673 1426/1550/674 +f 1426/1550/674 1594/1549/673 1587/1551/675 1433/1552/676 +f 1433/1552/676 1587/1551/675 1580/1553/677 1440/1554/678 +f 1440/1554/678 1580/1553/677 1573/1530/656 1447/1529/655 +f 1454/1555/679 1671/1556/680 1762/1557/681 1468/1558/682 +f 1356/1532/658 1559/1531/657 1671/1556/680 1454/1555/679 +f 1552/1559/683 1678/1560/684 1664/1502/630 1461/1501/629 +f 1475/1561/685 1755/1562/686 1748/1563/687 1482/1564/688 +f 1482/1564/688 1748/1563/687 1741/1565/689 1489/1566/690 +f 1489/1566/690 1741/1565/689 1734/1567/691 1496/1568/692 +f 1496/1568/692 1734/1567/691 1727/1569/693 1503/1570/694 +f 1503/1570/694 1727/1569/693 1720/1571/695 1510/1572/696 +f 1510/1573/696 1720/1574/695 1713/1575/697 1517/1576/698 +f 1517/1576/698 1713/1575/697 1706/1577/699 1524/1578/700 +f 1524/1578/700 1706/1577/699 1699/1579/701 1531/1580/702 +f 1531/1580/702 1699/1579/701 1692/1581/703 1538/1582/704 +f 1538/1582/704 1692/1581/703 1685/1583/705 1545/1584/706 +f 1545/1584/706 1685/1583/705 1678/1560/684 1552/1559/683 +f 1468/1558/682 1762/1557/681 1755/1562/686 1475/1561/685 +f 1566/1528/654 1349/1527/653 1041/1585/707 929/1586/708 +f 950/564/184 1125/563/183 1118/1587/709 957/1588/710 +f 957/1588/710 1118/1587/709 1111/1589/711 964/1590/712 +f 964/1590/712 1111/1589/711 1104/1591/713 971/1592/714 +f 971/1592/714 1104/1591/713 1097/1593/715 978/1594/716 +f 978/1594/716 1097/1593/715 1090/1595/717 985/1596/718 +f 985/1597/718 1090/1598/717 1083/1599/719 992/1600/720 +f 992/1600/720 1083/1599/719 1076/1601/721 999/1602/722 +f 999/1602/722 1076/1601/721 1069/1603/723 1006/1604/724 +f 1006/1604/724 1069/1603/723 1062/1605/725 1013/1606/726 +f 1013/1606/726 1062/1605/725 1055/1607/727 1020/1608/728 +f 1020/1608/728 1055/1607/727 1048/554/174 1027/553/173 +f 936/556/176 1034/555/175 1146/552/172 1244/551/171 +f 929/1586/708 1041/1585/707 1132/562/182 943/561/181 +f 905/1487/622 928/1486/622 927/570/187 906/569/187 +f 925/1489/623 908/1492/623 907/1609/188 926/1610/188 +f 901/1491/624 916/1490/624 915/1498/627 902/1497/627 +f 913/1493/625 904/1496/625 903/1500/628 914/1499/628 +f 897/1495/626 920/1494/626 919/1611/729 898/1612/729 +f 917/565/185 900/568/185 899/1613/730 918/1614/730 +f 909/567/186 924/566/186 923/574/189 910/573/189 +f 921/1485/621 912/1488/621 911/576/190 922/575/190 +f 898/1612/729 919/1611/729 918/1614/730 899/1613/730 +f 1154/1615/731 1140/1616/732 1141/1617/733 1155/1618/734 +f 1155/1618/734 1141/1617/733 1142/1619/735 1156/1620/736 +f 1156/1621/736 1142/1622/735 1143/1623/737 1157/1624/738 +f 1157/1624/738 1143/1623/737 1144/1625/739 1158/1626/740 +f 1158/1626/740 1144/1625/739 1145/1627/741 1159/1628/742 +f 1159/1628/742 1145/1627/741 1139/545/165 1153/548/168 +f 1252/1629/743 1343/1630/744 1344/1631/745 1253/1632/746 +f 1253/1632/746 1344/1631/745 1345/1633/747 1254/1634/748 +f 1254/1635/748 1345/1636/747 1346/1637/749 1255/1638/750 +f 1255/1638/750 1346/1637/749 1347/1639/751 1256/1640/752 +f 1256/1640/752 1347/1639/751 1348/1641/753 1257/1642/754 +f 1257/1642/754 1348/1641/753 1342/547/167 1251/546/166 +f 1161/1643/755 1154/1615/731 1155/1618/734 1162/1644/756 +f 1162/1644/756 1155/1618/734 1156/1645/736 1163/1646/757 +f 1163/1647/757 1156/1648/736 1157/1649/738 1164/1650/758 +f 1164/1650/758 1157/1649/738 1158/1651/740 1165/1652/759 +f 1165/1652/759 1158/1651/740 1159/1653/742 1166/1654/760 +f 1166/1654/760 1159/1653/742 1153/548/168 1160/1503/631 +f 1343/1630/744 1336/1655/761 1337/1656/762 1344/1631/745 +f 1344/1631/745 1337/1656/762 1338/1657/763 1345/1658/747 +f 1345/1659/747 1338/1660/763 1339/1661/764 1346/1662/749 +f 1346/1662/749 1339/1661/764 1340/1663/765 1347/1664/751 +f 1347/1664/751 1340/1663/765 1341/1665/766 1348/1666/753 +f 1348/1666/753 1341/1665/766 1335/1504/632 1342/547/167 +f 1168/1667/767 1161/1643/755 1162/1644/756 1169/1668/768 +f 1169/1668/768 1162/1644/756 1163/1669/757 1170/1670/769 +f 1170/1671/769 1163/1672/757 1164/1673/758 1171/1674/770 +f 1171/1674/770 1164/1673/758 1165/1675/759 1172/1676/771 +f 1172/1676/771 1165/1675/759 1166/1677/760 1173/1678/772 +f 1173/1678/772 1166/1677/760 1160/1503/631 1167/1506/634 +f 1336/1655/761 1329/1679/773 1330/1680/774 1337/1656/762 +f 1337/1656/762 1330/1680/774 1331/1681/775 1338/1682/763 +f 1338/1683/763 1331/1684/775 1332/1685/776 1339/1686/764 +f 1339/1686/764 1332/1685/776 1333/1687/777 1340/1688/765 +f 1340/1688/765 1333/1687/777 1334/1689/778 1341/1690/766 +f 1341/1690/766 1334/1689/778 1328/1505/633 1335/1504/632 +f 1175/1691/779 1168/1667/767 1169/1668/768 1176/1692/780 +f 1176/1692/780 1169/1668/768 1170/1693/769 1177/1694/781 +f 1177/1695/781 1170/1696/769 1171/1697/770 1178/1698/782 +f 1178/1698/782 1171/1697/770 1172/1699/771 1179/1700/783 +f 1179/1700/783 1172/1699/771 1173/1701/772 1180/1702/784 +f 1180/1702/784 1173/1701/772 1167/1506/634 1174/1508/636 +f 1329/1679/773 1322/1703/785 1323/1704/786 1330/1680/774 +f 1330/1680/774 1323/1704/786 1324/1705/787 1331/1706/775 +f 1331/1707/775 1324/1708/787 1325/1709/788 1332/1710/776 +f 1332/1710/776 1325/1709/788 1326/1711/789 1333/1712/777 +f 1333/1712/777 1326/1711/789 1327/1713/790 1334/1714/778 +f 1334/1714/778 1327/1713/790 1321/1507/635 1328/1505/633 +f 1182/1715/791 1175/1691/779 1176/1692/780 1183/1716/792 +f 1183/1716/792 1176/1692/780 1177/1717/781 1184/1718/793 +f 1184/1719/793 1177/1720/781 1178/1721/782 1185/1722/794 +f 1185/1722/794 1178/1721/782 1179/1723/783 1186/1724/795 +f 1186/1724/795 1179/1723/783 1180/1725/784 1187/1726/796 +f 1187/1726/796 1180/1725/784 1174/1508/636 1181/1510/638 +f 1322/1703/785 1315/1727/797 1316/1728/798 1323/1704/786 +f 1323/1704/786 1316/1728/798 1317/1729/799 1324/1730/787 +f 1324/1731/787 1317/1732/799 1318/1733/800 1325/1734/788 +f 1325/1734/788 1318/1733/800 1319/1735/801 1326/1736/789 +f 1326/1736/789 1319/1735/801 1320/1737/802 1327/1738/790 +f 1327/1738/790 1320/1737/802 1314/1509/637 1321/1507/635 +f 1189/1739/803 1182/1715/791 1183/1716/792 1190/1740/804 +f 1190/1740/804 1183/1716/792 1184/1741/793 1191/1742/805 +f 1191/1743/805 1184/1744/793 1185/1745/794 1192/1746/806 +f 1192/1746/806 1185/1745/794 1186/1747/795 1193/1748/807 +f 1193/1748/807 1186/1747/795 1187/1749/796 1194/1750/808 +f 1194/1750/808 1187/1749/796 1181/1510/638 1188/1512/640 +f 1315/1727/797 1308/1751/809 1309/1752/810 1316/1728/798 +f 1316/1728/798 1309/1752/810 1310/1753/811 1317/1754/799 +f 1317/1755/799 1310/1756/811 1311/1757/812 1318/1758/800 +f 1318/1758/800 1311/1757/812 1312/1759/813 1319/1760/801 +f 1319/1760/801 1312/1759/813 1313/1761/814 1320/1762/802 +f 1320/1762/802 1313/1761/814 1307/1511/639 1314/1509/637 +f 1196/1763/815 1189/1739/803 1190/1740/804 1197/1764/816 +f 1197/1764/816 1190/1740/804 1191/1765/805 1198/1766/817 +f 1198/1767/817 1191/1768/805 1192/1769/806 1199/1770/818 +f 1199/1770/818 1192/1769/806 1193/1771/807 1200/1772/819 +f 1200/1772/819 1193/1771/807 1194/1773/808 1201/1774/820 +f 1201/1774/820 1194/1773/808 1188/1512/640 1195/1514/642 +f 1308/1751/809 1301/1775/821 1302/1776/822 1309/1752/810 +f 1309/1752/810 1302/1776/822 1303/1777/823 1310/1778/811 +f 1310/1779/811 1303/1780/823 1304/1781/824 1311/1782/812 +f 1311/1782/812 1304/1781/824 1305/1783/825 1312/1784/813 +f 1312/1784/813 1305/1783/825 1306/1785/826 1313/1786/814 +f 1313/1786/814 1306/1785/826 1300/1513/641 1307/1511/639 +f 1203/1787/827 1196/1763/815 1197/1764/816 1204/1788/828 +f 1204/1788/828 1197/1764/816 1198/1789/817 1205/1790/829 +f 1205/1791/829 1198/1792/817 1199/1793/818 1206/1794/830 +f 1206/1794/830 1199/1793/818 1200/1795/819 1207/1796/831 +f 1207/1796/831 1200/1795/819 1201/1797/820 1208/1798/832 +f 1208/1798/832 1201/1797/820 1195/1515/642 1202/1518/644 +f 1301/1775/821 1294/1799/833 1295/1800/834 1302/1776/822 +f 1302/1776/822 1295/1800/834 1296/1801/835 1303/1802/823 +f 1303/1803/823 1296/1804/835 1297/1805/836 1304/1806/824 +f 1304/1806/824 1297/1805/836 1298/1807/837 1305/1808/825 +f 1305/1808/825 1298/1807/837 1299/1809/838 1306/1810/826 +f 1306/1810/826 1299/1809/838 1293/1517/643 1300/1516/641 +f 1210/1811/839 1203/1787/827 1204/1788/828 1211/1812/840 +f 1211/1812/840 1204/1788/828 1205/1813/829 1212/1814/841 +f 1212/1815/841 1205/1816/829 1206/1817/830 1213/1818/842 +f 1213/1818/842 1206/1817/830 1207/1819/831 1214/1820/843 +f 1214/1820/843 1207/1819/831 1208/1821/832 1215/1822/844 +f 1215/1822/844 1208/1821/832 1202/1518/644 1209/1520/646 +f 1294/1799/833 1287/1823/845 1288/1824/846 1295/1800/834 +f 1295/1800/834 1288/1824/846 1289/1825/847 1296/1826/835 +f 1296/1827/835 1289/1828/847 1290/1829/848 1297/1830/836 +f 1297/1830/836 1290/1829/848 1291/1831/849 1298/1832/837 +f 1298/1832/837 1291/1831/849 1292/1833/850 1299/1834/838 +f 1299/1834/838 1292/1833/850 1286/1519/645 1293/1517/643 +f 1217/1835/851 1210/1811/839 1211/1812/840 1218/1836/852 +f 1218/1836/852 1211/1812/840 1212/1837/841 1219/1838/853 +f 1219/1839/853 1212/1840/841 1213/1841/842 1220/1842/854 +f 1220/1842/854 1213/1841/842 1214/1843/843 1221/1844/855 +f 1221/1844/855 1214/1843/843 1215/1845/844 1222/1846/856 +f 1222/1846/856 1215/1845/844 1209/1520/646 1216/1522/648 +f 1287/1823/845 1280/1847/857 1281/1848/858 1288/1824/846 +f 1288/1824/846 1281/1848/858 1282/1849/859 1289/1850/847 +f 1289/1851/847 1282/1852/859 1283/1853/860 1290/1854/848 +f 1290/1854/848 1283/1853/860 1284/1855/861 1291/1856/849 +f 1291/1856/849 1284/1855/861 1285/1857/862 1292/1858/850 +f 1292/1858/850 1285/1857/862 1279/1521/647 1286/1519/645 +f 1224/1859/863 1217/1835/851 1218/1836/852 1225/1860/864 +f 1225/1860/864 1218/1836/852 1219/1861/853 1226/1862/865 +f 1226/1863/865 1219/1864/853 1220/1865/854 1227/1866/866 +f 1227/1866/866 1220/1865/854 1221/1867/855 1228/1868/867 +f 1228/1868/867 1221/1867/855 1222/1869/856 1229/1870/868 +f 1229/1870/868 1222/1869/856 1216/1522/648 1223/1524/650 +f 1280/1847/857 1273/1871/869 1274/1872/870 1281/1848/858 +f 1281/1848/858 1274/1872/870 1275/1873/871 1282/1874/859 +f 1282/1875/859 1275/1876/871 1276/1877/872 1283/1878/860 +f 1283/1878/860 1276/1877/872 1277/1879/873 1284/1880/861 +f 1284/1880/861 1277/1879/873 1278/1881/874 1285/1882/862 +f 1285/1882/862 1278/1881/874 1272/1523/649 1279/1521/647 +f 1231/1883/875 1224/1859/863 1225/1860/864 1232/1884/876 +f 1232/1884/876 1225/1860/864 1226/1885/865 1233/1886/877 +f 1233/1887/877 1226/1888/865 1227/1889/866 1234/1890/878 +f 1234/1890/878 1227/1889/866 1228/1891/867 1235/1892/879 +f 1235/1892/879 1228/1891/867 1229/1893/868 1236/1894/880 +f 1236/1894/880 1229/1893/868 1223/1524/650 1230/1526/652 +f 1273/1871/869 1266/1895/881 1267/1896/882 1274/1872/870 +f 1274/1872/870 1267/1896/882 1268/1897/883 1275/1898/871 +f 1275/1899/871 1268/1900/883 1269/1901/884 1276/1902/872 +f 1276/1902/872 1269/1901/884 1270/1903/885 1277/1904/873 +f 1277/1904/873 1270/1903/885 1271/1905/886 1278/1906/874 +f 1278/1906/874 1271/1905/886 1265/1525/651 1272/1523/649 +f 1238/1907/887 1231/1883/875 1232/1884/876 1239/1908/888 +f 1239/1908/888 1232/1884/876 1233/1909/877 1240/1910/889 +f 1240/1911/889 1233/1912/877 1234/1913/878 1241/1914/890 +f 1241/1914/890 1234/1913/878 1235/1915/879 1242/1916/891 +f 1242/1916/891 1235/1915/879 1236/1917/880 1243/1918/892 +f 1243/1918/892 1236/1917/880 1230/1526/652 1237/549/169 +f 1266/1895/881 1259/1919/893 1260/1920/894 1267/1896/882 +f 1267/1896/882 1260/1920/894 1261/1921/895 1268/1922/883 +f 1268/1923/883 1261/1924/895 1262/1925/896 1269/1926/884 +f 1269/1926/884 1262/1925/896 1263/1927/897 1270/1928/885 +f 1270/1928/885 1263/1927/897 1264/1929/898 1271/1930/886 +f 1271/1930/886 1264/1929/898 1258/550/170 1265/1525/651 +f 1147/1931/899 1238/1907/887 1239/1908/888 1148/1932/900 +f 1148/1932/900 1239/1908/888 1240/1933/889 1149/1934/901 +f 1149/1935/901 1240/1936/889 1241/1937/890 1150/1938/902 +f 1150/1938/902 1241/1937/890 1242/1939/891 1151/1940/903 +f 1151/1940/903 1242/1939/891 1243/1941/892 1152/1942/904 +f 1152/1942/904 1243/1941/892 1237/549/169 1146/552/172 +f 1259/1919/893 1245/1943/905 1246/1944/906 1260/1920/894 +f 1260/1920/894 1246/1944/906 1247/1945/907 1261/1946/895 +f 1261/1947/895 1247/1948/907 1248/1949/908 1262/1950/896 +f 1262/1950/896 1248/1949/908 1249/1951/909 1263/1952/897 +f 1263/1952/897 1249/1951/909 1250/1953/910 1264/1954/898 +f 1264/1954/898 1250/1953/910 1244/551/171 1258/550/170 +f 1364/1955/911 1350/1956/912 1351/1957/913 1365/1958/914 +f 1365/1958/914 1351/1957/913 1352/1959/915 1366/1960/916 +f 1366/1961/916 1352/1962/915 1353/1963/917 1367/1964/918 +f 1367/1964/918 1353/1963/917 1354/1965/919 1368/1966/920 +f 1368/1966/920 1354/1965/919 1355/1967/921 1369/1968/922 +f 1369/1968/922 1355/1967/921 1349/1527/653 1363/557/177 +f 1567/1969/923 1658/1970/924 1659/1971/925 1568/1972/926 +f 1568/1972/926 1659/1971/925 1660/1973/927 1569/1974/928 +f 1569/1975/928 1660/1976/927 1661/1977/929 1570/1978/930 +f 1570/1978/930 1661/1977/929 1662/1979/931 1571/1980/932 +f 1571/1980/932 1662/1979/931 1663/1981/933 1572/1982/934 +f 1572/1982/934 1663/1981/933 1657/558/178 1566/1528/654 +f 1371/1983/935 1364/1955/911 1365/1958/914 1372/1984/936 +f 1372/1984/936 1365/1958/914 1366/1985/916 1373/1986/937 +f 1373/1987/937 1366/1988/916 1367/1989/918 1374/1990/938 +f 1374/1990/938 1367/1989/918 1368/1991/920 1375/1992/939 +f 1375/1992/939 1368/1991/920 1369/1993/922 1376/1994/940 +f 1376/1994/940 1369/1993/922 1363/557/177 1370/560/180 +f 1658/1970/924 1651/1995/941 1652/1996/942 1659/1971/925 +f 1659/1971/925 1652/1996/942 1653/1997/943 1660/1998/927 +f 1660/1999/927 1653/2000/943 1654/2001/944 1661/2002/929 +f 1661/2002/929 1654/2001/944 1655/2003/945 1662/2004/931 +f 1662/2004/931 1655/2003/945 1656/2005/946 1663/2006/933 +f 1663/2006/933 1656/2005/946 1650/559/179 1657/558/178 +f 1378/2007/947 1371/1983/935 1372/1984/936 1379/2008/948 +f 1379/2008/948 1372/1984/936 1373/2009/937 1380/2010/949 +f 1380/2011/949 1373/2012/937 1374/2013/938 1381/2014/950 +f 1381/2014/950 1374/2013/938 1375/2015/939 1382/2016/951 +f 1382/2016/951 1375/2015/939 1376/2017/940 1383/2018/952 +f 1383/2018/952 1376/2017/940 1370/560/180 1377/1534/660 +f 1651/1995/941 1644/2019/953 1645/2020/954 1652/1996/942 +f 1652/1996/942 1645/2020/954 1646/2021/955 1653/2022/943 +f 1653/2023/943 1646/2024/955 1647/2025/956 1654/2026/944 +f 1654/2026/944 1647/2025/956 1648/2027/957 1655/2028/945 +f 1655/2028/945 1648/2027/957 1649/2029/958 1656/2030/946 +f 1656/2030/946 1649/2029/958 1643/1533/659 1650/559/179 +f 1385/2031/959 1378/2007/947 1379/2008/948 1386/2032/960 +f 1386/2032/960 1379/2008/948 1380/2033/949 1387/2034/961 +f 1387/2035/961 1380/2036/949 1381/2037/950 1388/2038/962 +f 1388/2038/962 1381/2037/950 1382/2039/951 1389/2040/963 +f 1389/2040/963 1382/2039/951 1383/2041/952 1390/2042/964 +f 1390/2042/964 1383/2041/952 1377/1534/660 1384/1536/662 +f 1644/2019/953 1637/2043/965 1638/2044/966 1645/2020/954 +f 1645/2020/954 1638/2044/966 1639/2045/967 1646/2046/955 +f 1646/2047/955 1639/2048/967 1640/2049/968 1647/2050/956 +f 1647/2050/956 1640/2049/968 1641/2051/969 1648/2052/957 +f 1648/2052/957 1641/2051/969 1642/2053/970 1649/2054/958 +f 1649/2054/958 1642/2053/970 1636/1535/661 1643/1533/659 +f 1392/2055/971 1385/2031/959 1386/2032/960 1393/2056/972 +f 1393/2056/972 1386/2032/960 1387/2057/961 1394/2058/973 +f 1394/2059/973 1387/2060/961 1388/2061/962 1395/2062/974 +f 1395/2062/974 1388/2061/962 1389/2063/963 1396/2064/975 +f 1396/2064/975 1389/2063/963 1390/2065/964 1397/2066/976 +f 1397/2066/976 1390/2065/964 1384/1536/662 1391/1538/664 +f 1637/2043/965 1630/2067/977 1631/2068/978 1638/2044/966 +f 1638/2044/966 1631/2068/978 1632/2069/979 1639/2070/967 +f 1639/2071/967 1632/2072/979 1633/2073/980 1640/2074/968 +f 1640/2074/968 1633/2073/980 1634/2075/981 1641/2076/969 +f 1641/2076/969 1634/2075/981 1635/2077/982 1642/2078/970 +f 1642/2078/970 1635/2077/982 1629/1537/663 1636/1535/661 +f 1399/2079/983 1392/2055/971 1393/2056/972 1400/2080/984 +f 1400/2080/984 1393/2056/972 1394/2081/973 1401/2082/985 +f 1401/2083/985 1394/2084/973 1395/2085/974 1402/2086/986 +f 1402/2086/986 1395/2085/974 1396/2087/975 1403/2088/987 +f 1403/2088/987 1396/2087/975 1397/2089/976 1404/2090/988 +f 1404/2090/988 1397/2089/976 1391/1538/664 1398/1540/666 +f 1630/2067/977 1623/2091/989 1624/2092/990 1631/2068/978 +f 1631/2068/978 1624/2092/990 1625/2093/991 1632/2094/979 +f 1632/2095/979 1625/2096/991 1626/2097/992 1633/2098/980 +f 1633/2098/980 1626/2097/992 1627/2099/993 1634/2100/981 +f 1634/2100/981 1627/2099/993 1628/2101/994 1635/2102/982 +f 1635/2102/982 1628/2101/994 1622/1539/665 1629/1537/663 +f 1406/2103/995 1399/2079/983 1400/2080/984 1407/2104/996 +f 1407/2104/996 1400/2080/984 1401/2105/985 1408/2106/997 +f 1408/2107/997 1401/2108/985 1402/2109/986 1409/2110/998 +f 1409/2110/998 1402/2109/986 1403/2111/987 1410/2112/999 +f 1410/2112/999 1403/2111/987 1404/2113/988 1411/2114/1000 +f 1411/2114/1000 1404/2113/988 1398/1540/666 1405/1542/668 +f 1623/2091/989 1616/2115/1001 1617/2116/1002 1624/2092/990 +f 1624/2092/990 1617/2116/1002 1618/2117/1003 1625/2118/991 +f 1625/2119/991 1618/2120/1003 1619/2121/1004 1626/2122/992 +f 1626/2122/992 1619/2121/1004 1620/2123/1005 1627/2124/993 +f 1627/2124/993 1620/2123/1005 1621/2125/1006 1628/2126/994 +f 1628/2126/994 1621/2125/1006 1615/1541/667 1622/1539/665 +f 1413/2127/1007 1406/2103/995 1407/2104/996 1414/2128/1008 +f 1414/2128/1008 1407/2104/996 1408/2129/997 1415/2130/1009 +f 1415/2131/1009 1408/2132/997 1409/2133/998 1416/2134/1010 +f 1416/2134/1010 1409/2133/998 1410/2135/999 1417/2136/1011 +f 1417/2136/1011 1410/2135/999 1411/2137/1000 1418/2138/1012 +f 1418/2138/1012 1411/2137/1000 1405/1543/668 1412/1546/670 +f 1616/2115/1001 1609/2139/1013 1610/2140/1014 1617/2116/1002 +f 1617/2116/1002 1610/2140/1014 1611/2141/1015 1618/2142/1003 +f 1618/2143/1003 1611/2144/1015 1612/2145/1016 1619/2146/1004 +f 1619/2146/1004 1612/2145/1016 1613/2147/1017 1620/2148/1005 +f 1620/2148/1005 1613/2147/1017 1614/2149/1018 1621/2150/1006 +f 1621/2150/1006 1614/2149/1018 1608/1545/669 1615/1544/667 +f 1420/2151/1019 1413/2127/1007 1414/2128/1008 1421/2152/1020 +f 1421/2152/1020 1414/2128/1008 1415/2153/1009 1422/2154/1021 +f 1422/2155/1021 1415/2156/1009 1416/2157/1010 1423/2158/1022 +f 1423/2158/1022 1416/2157/1010 1417/2159/1011 1424/2160/1023 +f 1424/2160/1023 1417/2159/1011 1418/2161/1012 1425/2162/1024 +f 1425/2162/1024 1418/2161/1012 1412/1546/670 1419/1548/672 +f 1609/2139/1013 1602/2163/1025 1603/2164/1026 1610/2140/1014 +f 1610/2140/1014 1603/2164/1026 1604/2165/1027 1611/2166/1015 +f 1611/2167/1015 1604/2168/1027 1605/2169/1028 1612/2170/1016 +f 1612/2170/1016 1605/2169/1028 1606/2171/1029 1613/2172/1017 +f 1613/2172/1017 1606/2171/1029 1607/2173/1030 1614/2174/1018 +f 1614/2174/1018 1607/2173/1030 1601/1547/671 1608/1545/669 +f 1427/2175/1031 1420/2151/1019 1421/2152/1020 1428/2176/1032 +f 1428/2176/1032 1421/2152/1020 1422/2177/1021 1429/2178/1033 +f 1429/2179/1033 1422/2180/1021 1423/2181/1022 1430/2182/1034 +f 1430/2182/1034 1423/2181/1022 1424/2183/1023 1431/2184/1035 +f 1431/2184/1035 1424/2183/1023 1425/2185/1024 1432/2186/1036 +f 1432/2186/1036 1425/2185/1024 1419/1548/672 1426/1550/674 +f 1602/2163/1025 1595/2187/1037 1596/2188/1038 1603/2164/1026 +f 1603/2164/1026 1596/2188/1038 1597/2189/1039 1604/2190/1027 +f 1604/2191/1027 1597/2192/1039 1598/2193/1040 1605/2194/1028 +f 1605/2194/1028 1598/2193/1040 1599/2195/1041 1606/2196/1029 +f 1606/2196/1029 1599/2195/1041 1600/2197/1042 1607/2198/1030 +f 1607/2198/1030 1600/2197/1042 1594/1549/673 1601/1547/671 +f 1434/2199/1043 1427/2175/1031 1428/2176/1032 1435/2200/1044 +f 1435/2200/1044 1428/2176/1032 1429/2201/1033 1436/2202/1045 +f 1436/2203/1045 1429/2204/1033 1430/2205/1034 1437/2206/1046 +f 1437/2206/1046 1430/2205/1034 1431/2207/1035 1438/2208/1047 +f 1438/2208/1047 1431/2207/1035 1432/2209/1036 1439/2210/1048 +f 1439/2210/1048 1432/2209/1036 1426/1550/674 1433/1552/676 +f 1595/2187/1037 1588/2211/1049 1589/2212/1050 1596/2188/1038 +f 1596/2188/1038 1589/2212/1050 1590/2213/1051 1597/2214/1039 +f 1597/2215/1039 1590/2216/1051 1591/2217/1052 1598/2218/1040 +f 1598/2218/1040 1591/2217/1052 1592/2219/1053 1599/2220/1041 +f 1599/2220/1041 1592/2219/1053 1593/2221/1054 1600/2222/1042 +f 1600/2222/1042 1593/2221/1054 1587/1551/675 1594/1549/673 +f 1441/2223/1055 1434/2199/1043 1435/2200/1044 1442/2224/1056 +f 1442/2224/1056 1435/2200/1044 1436/2225/1045 1443/2226/1057 +f 1443/2227/1057 1436/2228/1045 1437/2229/1046 1444/2230/1058 +f 1444/2230/1058 1437/2229/1046 1438/2231/1047 1445/2232/1059 +f 1445/2232/1059 1438/2231/1047 1439/2233/1048 1446/2234/1060 +f 1446/2234/1060 1439/2233/1048 1433/1552/676 1440/1554/678 +f 1588/2211/1049 1581/2235/1061 1582/2236/1062 1589/2212/1050 +f 1589/2212/1050 1582/2236/1062 1583/2237/1063 1590/2238/1051 +f 1590/2239/1051 1583/2240/1063 1584/2241/1064 1591/2242/1052 +f 1591/2242/1052 1584/2241/1064 1585/2243/1065 1592/2244/1053 +f 1592/2244/1053 1585/2243/1065 1586/2245/1066 1593/2246/1054 +f 1593/2246/1054 1586/2245/1066 1580/1553/677 1587/1551/675 +f 1448/2247/1067 1441/2223/1055 1442/2224/1056 1449/2248/1068 +f 1449/2248/1068 1442/2224/1056 1443/2249/1057 1450/2250/1069 +f 1450/2251/1069 1443/2252/1057 1444/2253/1058 1451/2254/1070 +f 1451/2254/1070 1444/2253/1058 1445/2255/1059 1452/2256/1071 +f 1452/2256/1071 1445/2255/1059 1446/2257/1060 1453/2258/1072 +f 1453/2258/1072 1446/2257/1060 1440/1554/678 1447/1529/655 +f 1581/2235/1061 1574/2259/1073 1575/2260/1074 1582/2236/1062 +f 1582/2236/1062 1575/2260/1074 1576/2261/1075 1583/2262/1063 +f 1583/2263/1063 1576/2264/1075 1577/2265/1076 1584/2266/1064 +f 1584/2266/1064 1577/2265/1076 1578/2267/1077 1585/2268/1065 +f 1585/2268/1065 1578/2267/1077 1579/2269/1078 1586/2270/1066 +f 1586/2270/1066 1579/2269/1078 1573/1530/656 1580/1553/677 +f 1357/2271/1079 1448/2247/1067 1449/2248/1068 1358/2272/1080 +f 1358/2272/1080 1449/2248/1068 1450/2273/1069 1359/2274/1081 +f 1359/2275/1081 1450/2276/1069 1451/2277/1070 1360/2278/1082 +f 1360/2278/1082 1451/2277/1070 1452/2279/1071 1361/2280/1083 +f 1361/2280/1083 1452/2279/1071 1453/2281/1072 1362/2282/1084 +f 1362/2282/1084 1453/2281/1072 1447/1529/655 1356/1532/658 +f 1574/2259/1073 1560/2283/1085 1561/2284/1086 1575/2260/1074 +f 1575/2260/1074 1561/2284/1086 1562/2285/1087 1576/2286/1075 +f 1576/2287/1075 1562/2288/1087 1563/2289/1088 1577/2290/1076 +f 1577/2290/1076 1563/2289/1088 1564/2291/1089 1578/2292/1077 +f 1578/2292/1077 1564/2291/1089 1565/2293/1090 1579/2294/1078 +f 1579/2294/1078 1565/2293/1090 1559/1531/657 1573/1530/656 +f 1469/2295/1091 1455/2296/1092 1456/2297/1093 1470/2298/1094 +f 1470/2298/1094 1456/2297/1093 1457/2299/1095 1471/2300/1096 +f 1471/2301/1096 1457/2302/1095 1458/2303/1097 1472/2304/1098 +f 1472/2304/1098 1458/2303/1097 1459/2305/1099 1473/2306/1100 +f 1473/2306/1100 1459/2305/1099 1460/2307/1101 1474/2308/1102 +f 1474/2308/1102 1460/2307/1101 1454/1555/679 1468/1558/682 +f 1672/2309/1103 1763/2310/1104 1764/2311/1105 1673/2312/1106 +f 1673/2312/1106 1764/2311/1105 1765/2313/1107 1674/2314/1108 +f 1674/2315/1108 1765/2316/1107 1766/2317/1109 1675/2318/1110 +f 1675/2318/1110 1766/2317/1109 1767/2319/1111 1676/2320/1112 +f 1676/2320/1112 1767/2319/1111 1768/2321/1113 1677/2322/1114 +f 1677/2322/1114 1768/2321/1113 1762/1557/681 1671/1556/680 +f 1476/2323/1115 1469/2295/1091 1470/2298/1094 1477/2324/1116 +f 1477/2324/1116 1470/2298/1094 1471/2325/1096 1478/2326/1117 +f 1478/2327/1117 1471/2328/1096 1472/2329/1098 1479/2330/1118 +f 1479/2330/1118 1472/2329/1098 1473/2331/1100 1480/2332/1119 +f 1480/2332/1119 1473/2331/1100 1474/2333/1102 1481/2334/1120 +f 1481/2334/1120 1474/2333/1102 1468/1558/682 1475/1561/685 +f 1763/2310/1104 1756/2335/1121 1757/2336/1122 1764/2311/1105 +f 1764/2311/1105 1757/2336/1122 1758/2337/1123 1765/2338/1107 +f 1765/2339/1107 1758/2340/1123 1759/2341/1124 1766/2342/1109 +f 1766/2342/1109 1759/2341/1124 1760/2343/1125 1767/2344/1111 +f 1767/2344/1111 1760/2343/1125 1761/2345/1126 1768/2346/1113 +f 1768/2346/1113 1761/2345/1126 1755/1562/686 1762/1557/681 +f 1483/2347/1127 1476/2323/1115 1477/2324/1116 1484/2348/1128 +f 1484/2348/1128 1477/2324/1116 1478/2349/1117 1485/2350/1129 +f 1485/2351/1129 1478/2352/1117 1479/2353/1118 1486/2354/1130 +f 1486/2354/1130 1479/2353/1118 1480/2355/1119 1487/2356/1131 +f 1487/2356/1131 1480/2355/1119 1481/2357/1120 1488/2358/1132 +f 1488/2358/1132 1481/2357/1120 1475/1561/685 1482/1564/688 +f 1756/2335/1121 1749/2359/1133 1750/2360/1134 1757/2336/1122 +f 1757/2336/1122 1750/2360/1134 1751/2361/1135 1758/2362/1123 +f 1758/2363/1123 1751/2364/1135 1752/2365/1136 1759/2366/1124 +f 1759/2366/1124 1752/2365/1136 1753/2367/1137 1760/2368/1125 +f 1760/2368/1125 1753/2367/1137 1754/2369/1138 1761/2370/1126 +f 1761/2370/1126 1754/2369/1138 1748/1563/687 1755/1562/686 +f 1490/2371/1139 1483/2347/1127 1484/2348/1128 1491/2372/1140 +f 1491/2372/1140 1484/2348/1128 1485/2373/1129 1492/2374/1141 +f 1492/2375/1141 1485/2376/1129 1486/2377/1130 1493/2378/1142 +f 1493/2378/1142 1486/2377/1130 1487/2379/1131 1494/2380/1143 +f 1494/2380/1143 1487/2379/1131 1488/2381/1132 1495/2382/1144 +f 1495/2382/1144 1488/2381/1132 1482/1564/688 1489/1566/690 +f 1749/2359/1133 1742/2383/1145 1743/2384/1146 1750/2360/1134 +f 1750/2360/1134 1743/2384/1146 1744/2385/1147 1751/2386/1135 +f 1751/2387/1135 1744/2388/1147 1745/2389/1148 1752/2390/1136 +f 1752/2390/1136 1745/2389/1148 1746/2391/1149 1753/2392/1137 +f 1753/2392/1137 1746/2391/1149 1747/2393/1150 1754/2394/1138 +f 1754/2394/1138 1747/2393/1150 1741/1565/689 1748/1563/687 +f 1497/2395/1151 1490/2371/1139 1491/2372/1140 1498/2396/1152 +f 1498/2396/1152 1491/2372/1140 1492/2397/1141 1499/2398/1153 +f 1499/2399/1153 1492/2400/1141 1493/2401/1142 1500/2402/1154 +f 1500/2402/1154 1493/2401/1142 1494/2403/1143 1501/2404/1155 +f 1501/2404/1155 1494/2403/1143 1495/2405/1144 1502/2406/1156 +f 1502/2406/1156 1495/2405/1144 1489/1566/690 1496/1568/692 +f 1742/2383/1145 1735/2407/1157 1736/2408/1158 1743/2384/1146 +f 1743/2384/1146 1736/2408/1158 1737/2409/1159 1744/2410/1147 +f 1744/2411/1147 1737/2412/1159 1738/2413/1160 1745/2414/1148 +f 1745/2414/1148 1738/2413/1160 1739/2415/1161 1746/2416/1149 +f 1746/2416/1149 1739/2415/1161 1740/2417/1162 1747/2418/1150 +f 1747/2418/1150 1740/2417/1162 1734/1567/691 1741/1565/689 +f 1504/2419/1163 1497/2395/1151 1498/2396/1152 1505/2420/1164 +f 1505/2420/1164 1498/2396/1152 1499/2421/1153 1506/2422/1165 +f 1506/2423/1165 1499/2424/1153 1500/2425/1154 1507/2426/1166 +f 1507/2426/1166 1500/2425/1154 1501/2427/1155 1508/2428/1167 +f 1508/2428/1167 1501/2427/1155 1502/2429/1156 1509/2430/1168 +f 1509/2430/1168 1502/2429/1156 1496/1568/692 1503/1570/694 +f 1735/2407/1157 1728/2431/1169 1729/2432/1170 1736/2408/1158 +f 1736/2408/1158 1729/2432/1170 1730/2433/1171 1737/2434/1159 +f 1737/2435/1159 1730/2436/1171 1731/2437/1172 1738/2438/1160 +f 1738/2438/1160 1731/2437/1172 1732/2439/1173 1739/2440/1161 +f 1739/2440/1161 1732/2439/1173 1733/2441/1174 1740/2442/1162 +f 1740/2442/1162 1733/2441/1174 1727/1569/693 1734/1567/691 +f 1511/2443/1175 1504/2419/1163 1505/2420/1164 1512/2444/1176 +f 1512/2444/1176 1505/2420/1164 1506/2445/1165 1513/2446/1177 +f 1513/2447/1177 1506/2448/1165 1507/2449/1166 1514/2450/1178 +f 1514/2450/1178 1507/2449/1166 1508/2451/1167 1515/2452/1179 +f 1515/2452/1179 1508/2451/1167 1509/2453/1168 1516/2454/1180 +f 1516/2454/1180 1509/2453/1168 1503/1570/694 1510/1572/696 +f 1728/2431/1169 1721/2455/1181 1722/2456/1182 1729/2432/1170 +f 1729/2432/1170 1722/2456/1182 1723/2457/1183 1730/2458/1171 +f 1730/2459/1171 1723/2460/1183 1724/2461/1184 1731/2462/1172 +f 1731/2462/1172 1724/2461/1184 1725/2463/1185 1732/2464/1173 +f 1732/2464/1173 1725/2463/1185 1726/2465/1186 1733/2466/1174 +f 1733/2466/1174 1726/2465/1186 1720/1571/695 1727/1569/693 +f 1518/2467/1187 1511/2443/1175 1512/2444/1176 1519/2468/1188 +f 1519/2468/1188 1512/2444/1176 1513/2469/1177 1520/2470/1189 +f 1520/2471/1189 1513/2472/1177 1514/2473/1178 1521/2474/1190 +f 1521/2474/1190 1514/2473/1178 1515/2475/1179 1522/2476/1191 +f 1522/2476/1191 1515/2475/1179 1516/2477/1180 1523/2478/1192 +f 1523/2478/1192 1516/2477/1180 1510/1573/696 1517/1576/698 +f 1721/2455/1181 1714/2479/1193 1715/2480/1194 1722/2456/1182 +f 1722/2456/1182 1715/2480/1194 1716/2481/1195 1723/2482/1183 +f 1723/2483/1183 1716/2484/1195 1717/2485/1196 1724/2486/1184 +f 1724/2486/1184 1717/2485/1196 1718/2487/1197 1725/2488/1185 +f 1725/2488/1185 1718/2487/1197 1719/2489/1198 1726/2490/1186 +f 1726/2490/1186 1719/2489/1198 1713/1575/697 1720/1574/695 +f 1525/2491/1199 1518/2467/1187 1519/2468/1188 1526/2492/1200 +f 1526/2492/1200 1519/2468/1188 1520/2493/1189 1527/2494/1201 +f 1527/2495/1201 1520/2496/1189 1521/2497/1190 1528/2498/1202 +f 1528/2498/1202 1521/2497/1190 1522/2499/1191 1529/2500/1203 +f 1529/2500/1203 1522/2499/1191 1523/2501/1192 1530/2502/1204 +f 1530/2502/1204 1523/2501/1192 1517/1576/698 1524/1578/700 +f 1714/2479/1193 1707/2503/1205 1708/2504/1206 1715/2480/1194 +f 1715/2480/1194 1708/2504/1206 1709/2505/1207 1716/2506/1195 +f 1716/2507/1195 1709/2508/1207 1710/2509/1208 1717/2510/1196 +f 1717/2510/1196 1710/2509/1208 1711/2511/1209 1718/2512/1197 +f 1718/2512/1197 1711/2511/1209 1712/2513/1210 1719/2514/1198 +f 1719/2514/1198 1712/2513/1210 1706/1577/699 1713/1575/697 +f 1532/2515/1211 1525/2491/1199 1526/2492/1200 1533/2516/1212 +f 1533/2516/1212 1526/2492/1200 1527/2517/1201 1534/2518/1213 +f 1534/2519/1213 1527/2520/1201 1528/2521/1202 1535/2522/1214 +f 1535/2522/1214 1528/2521/1202 1529/2523/1203 1536/2524/1215 +f 1536/2524/1215 1529/2523/1203 1530/2525/1204 1537/2526/1216 +f 1537/2526/1216 1530/2525/1204 1524/1578/700 1531/1580/702 +f 1707/2503/1205 1700/2527/1217 1701/2528/1218 1708/2504/1206 +f 1708/2504/1206 1701/2528/1218 1702/2529/1219 1709/2530/1207 +f 1709/2531/1207 1702/2532/1219 1703/2533/1220 1710/2534/1208 +f 1710/2534/1208 1703/2533/1220 1704/2535/1221 1711/2536/1209 +f 1711/2536/1209 1704/2535/1221 1705/2537/1222 1712/2538/1210 +f 1712/2538/1210 1705/2537/1222 1699/1579/701 1706/1577/699 +f 1539/2539/1223 1532/2515/1211 1533/2516/1212 1540/2540/1224 +f 1540/2540/1224 1533/2516/1212 1534/2541/1213 1541/2542/1225 +f 1541/2543/1225 1534/2544/1213 1535/2545/1214 1542/2546/1226 +f 1542/2546/1226 1535/2545/1214 1536/2547/1215 1543/2548/1227 +f 1543/2548/1227 1536/2547/1215 1537/2549/1216 1544/2550/1228 +f 1544/2550/1228 1537/2549/1216 1531/1580/702 1538/1582/704 +f 1700/2527/1217 1693/2551/1229 1694/2552/1230 1701/2528/1218 +f 1701/2528/1218 1694/2552/1230 1695/2553/1231 1702/2554/1219 +f 1702/2555/1219 1695/2556/1231 1696/2557/1232 1703/2558/1220 +f 1703/2558/1220 1696/2557/1232 1697/2559/1233 1704/2560/1221 +f 1704/2560/1221 1697/2559/1233 1698/2561/1234 1705/2562/1222 +f 1705/2562/1222 1698/2561/1234 1692/1581/703 1699/1579/701 +f 1546/2563/1235 1539/2539/1223 1540/2540/1224 1547/2564/1236 +f 1547/2564/1236 1540/2540/1224 1541/2565/1225 1548/2566/1237 +f 1548/2567/1237 1541/2568/1225 1542/2569/1226 1549/2570/1238 +f 1549/2570/1238 1542/2569/1226 1543/2571/1227 1550/2572/1239 +f 1550/2572/1239 1543/2571/1227 1544/2573/1228 1551/2574/1240 +f 1551/2574/1240 1544/2573/1228 1538/1582/704 1545/1584/706 +f 1693/2551/1229 1686/2575/1241 1687/2576/1242 1694/2552/1230 +f 1694/2552/1230 1687/2576/1242 1688/2577/1243 1695/2578/1231 +f 1695/2579/1231 1688/2580/1243 1689/2581/1244 1696/2582/1232 +f 1696/2582/1232 1689/2581/1244 1690/2583/1245 1697/2584/1233 +f 1697/2584/1233 1690/2583/1245 1691/2585/1246 1698/2586/1234 +f 1698/2586/1234 1691/2585/1246 1685/1583/705 1692/1581/703 +f 1553/2587/1247 1546/2563/1235 1547/2564/1236 1554/2588/1248 +f 1554/2588/1248 1547/2564/1236 1548/2589/1237 1555/2590/1249 +f 1555/2591/1249 1548/2592/1237 1549/2593/1238 1556/2594/1250 +f 1556/2594/1250 1549/2593/1238 1550/2595/1239 1557/2596/1251 +f 1557/2596/1251 1550/2595/1239 1551/2597/1240 1558/2598/1252 +f 1558/2598/1252 1551/2597/1240 1545/1584/706 1552/1559/683 +f 1686/2575/1241 1679/2599/1253 1680/2600/1254 1687/2576/1242 +f 1687/2576/1242 1680/2600/1254 1681/2601/1255 1688/2602/1243 +f 1688/2603/1243 1681/2604/1255 1682/2605/1256 1689/2606/1244 +f 1689/2606/1244 1682/2605/1256 1683/2607/1257 1690/2608/1245 +f 1690/2608/1245 1683/2607/1257 1684/2609/1258 1691/2610/1246 +f 1691/2610/1246 1684/2609/1258 1678/1560/684 1685/1583/705 +f 1462/2611/1259 1553/2587/1247 1554/2588/1248 1463/2612/1260 +f 1463/2612/1260 1554/2588/1248 1555/2613/1249 1464/2614/1261 +f 1464/2615/1261 1555/2616/1249 1556/2617/1250 1465/2618/1262 +f 1465/2618/1262 1556/2617/1250 1557/2619/1251 1466/2620/1263 +f 1466/2620/1263 1557/2619/1251 1558/2621/1252 1467/2622/1264 +f 1467/2622/1264 1558/2621/1252 1552/1559/683 1461/1501/629 +f 1679/2599/1253 1665/2623/1265 1666/2624/1266 1680/2600/1254 +f 1680/2600/1254 1666/2624/1266 1667/2625/1267 1681/2626/1255 +f 1681/2627/1255 1667/2628/1267 1668/2629/1268 1682/2630/1256 +f 1682/2630/1256 1668/2629/1268 1669/2631/1269 1683/2632/1257 +f 1683/2632/1257 1669/2631/1269 1670/2633/1270 1684/2634/1258 +f 1684/2634/1258 1670/2633/1270 1664/1502/630 1678/1560/684 +f 944/2635/1271 930/2636/1272 931/2637/1273 945/2638/1274 +f 945/2638/1274 931/2637/1273 932/2639/1275 946/2640/1276 +f 946/2641/1276 932/2642/1275 933/2643/1277 947/2644/1278 +f 947/2644/1278 933/2643/1277 934/2645/1279 948/2646/1280 +f 948/2646/1280 934/2645/1279 935/2647/1281 949/2648/1282 +f 949/2648/1282 935/2647/1281 929/1586/708 943/561/181 +f 1042/2649/1283 1133/2650/1284 1134/2651/1285 1043/2652/1286 +f 1043/2652/1286 1134/2651/1285 1135/2653/1287 1044/2654/1288 +f 1044/2655/1288 1135/2656/1287 1136/2657/1289 1045/2658/1290 +f 1045/2658/1290 1136/2657/1289 1137/2659/1291 1046/2660/1292 +f 1046/2660/1292 1137/2659/1291 1138/2661/1293 1047/2662/1294 +f 1047/2662/1294 1138/2661/1293 1132/562/182 1041/1585/707 +f 951/2663/1295 944/2635/1271 945/2638/1274 952/2664/1296 +f 952/2664/1296 945/2638/1274 946/2665/1276 953/2666/1297 +f 953/2667/1297 946/2668/1276 947/2669/1278 954/2670/1298 +f 954/2670/1298 947/2669/1278 948/2671/1280 955/2672/1299 +f 955/2672/1299 948/2671/1280 949/2673/1282 956/2674/1300 +f 956/2674/1300 949/2673/1282 943/561/181 950/564/184 +f 1133/2650/1284 1126/2675/1301 1127/2676/1302 1134/2651/1285 +f 1134/2651/1285 1127/2676/1302 1128/2677/1303 1135/2678/1287 +f 1135/2679/1287 1128/2680/1303 1129/2681/1304 1136/2682/1289 +f 1136/2682/1289 1129/2681/1304 1130/2683/1305 1137/2684/1291 +f 1137/2684/1291 1130/2683/1305 1131/2685/1306 1138/2686/1293 +f 1138/2686/1293 1131/2685/1306 1125/563/183 1132/562/182 +f 958/2687/1307 951/2663/1295 952/2664/1296 959/2688/1308 +f 959/2688/1308 952/2664/1296 953/2689/1297 960/2690/1309 +f 960/2691/1309 953/2692/1297 954/2693/1298 961/2694/1310 +f 961/2694/1310 954/2693/1298 955/2695/1299 962/2696/1311 +f 962/2696/1311 955/2695/1299 956/2697/1300 963/2698/1312 +f 963/2698/1312 956/2697/1300 950/564/184 957/1588/710 +f 1126/2675/1301 1119/2699/1313 1120/2700/1314 1127/2676/1302 +f 1127/2676/1302 1120/2700/1314 1121/2701/1315 1128/2702/1303 +f 1128/2703/1303 1121/2704/1315 1122/2705/1316 1129/2706/1304 +f 1129/2706/1304 1122/2705/1316 1123/2707/1317 1130/2708/1305 +f 1130/2708/1305 1123/2707/1317 1124/2709/1318 1131/2710/1306 +f 1131/2710/1306 1124/2709/1318 1118/1587/709 1125/563/183 +f 965/2711/1319 958/2687/1307 959/2688/1308 966/2712/1320 +f 966/2712/1320 959/2688/1308 960/2713/1309 967/2714/1321 +f 967/2715/1321 960/2716/1309 961/2717/1310 968/2718/1322 +f 968/2718/1322 961/2717/1310 962/2719/1311 969/2720/1323 +f 969/2720/1323 962/2719/1311 963/2721/1312 970/2722/1324 +f 970/2722/1324 963/2721/1312 957/1588/710 964/1590/712 +f 1119/2699/1313 1112/2723/1325 1113/2724/1326 1120/2700/1314 +f 1120/2700/1314 1113/2724/1326 1114/2725/1327 1121/2726/1315 +f 1121/2727/1315 1114/2728/1327 1115/2729/1328 1122/2730/1316 +f 1122/2730/1316 1115/2729/1328 1116/2731/1329 1123/2732/1317 +f 1123/2732/1317 1116/2731/1329 1117/2733/1330 1124/2734/1318 +f 1124/2734/1318 1117/2733/1330 1111/1589/711 1118/1587/709 +f 972/2735/1331 965/2711/1319 966/2712/1320 973/2736/1332 +f 973/2736/1332 966/2712/1320 967/2737/1321 974/2738/1333 +f 974/2739/1333 967/2740/1321 968/2741/1322 975/2742/1334 +f 975/2742/1334 968/2741/1322 969/2743/1323 976/2744/1335 +f 976/2744/1335 969/2743/1323 970/2745/1324 977/2746/1336 +f 977/2746/1336 970/2745/1324 964/1590/712 971/1592/714 +f 1112/2723/1325 1105/2747/1337 1106/2748/1338 1113/2724/1326 +f 1113/2724/1326 1106/2748/1338 1107/2749/1339 1114/2750/1327 +f 1114/2751/1327 1107/2752/1339 1108/2753/1340 1115/2754/1328 +f 1115/2754/1328 1108/2753/1340 1109/2755/1341 1116/2756/1329 +f 1116/2756/1329 1109/2755/1341 1110/2757/1342 1117/2758/1330 +f 1117/2758/1330 1110/2757/1342 1104/1591/713 1111/1589/711 +f 979/2759/1343 972/2735/1331 973/2736/1332 980/2760/1344 +f 980/2760/1344 973/2736/1332 974/2761/1333 981/2762/1345 +f 981/2763/1345 974/2764/1333 975/2765/1334 982/2766/1346 +f 982/2766/1346 975/2765/1334 976/2767/1335 983/2768/1347 +f 983/2768/1347 976/2767/1335 977/2769/1336 984/2770/1348 +f 984/2770/1348 977/2769/1336 971/1592/714 978/1594/716 +f 1105/2747/1337 1098/2771/1349 1099/2772/1350 1106/2748/1338 +f 1106/2748/1338 1099/2772/1350 1100/2773/1351 1107/2774/1339 +f 1107/2775/1339 1100/2776/1351 1101/2777/1352 1108/2778/1340 +f 1108/2778/1340 1101/2777/1352 1102/2779/1353 1109/2780/1341 +f 1109/2780/1341 1102/2779/1353 1103/2781/1354 1110/2782/1342 +f 1110/2782/1342 1103/2781/1354 1097/1593/715 1104/1591/713 +f 986/2783/1355 979/2759/1343 980/2760/1344 987/2784/1356 +f 987/2784/1356 980/2760/1344 981/2785/1345 988/2786/1357 +f 988/2787/1357 981/2788/1345 982/2789/1346 989/2790/1358 +f 989/2790/1358 982/2789/1346 983/2791/1347 990/2792/1359 +f 990/2792/1359 983/2791/1347 984/2793/1348 991/2794/1360 +f 991/2794/1360 984/2793/1348 978/1594/716 985/1596/718 +f 1098/2771/1349 1091/2795/1361 1092/2796/1362 1099/2772/1350 +f 1099/2772/1350 1092/2796/1362 1093/2797/1363 1100/2798/1351 +f 1100/2799/1351 1093/2800/1363 1094/2801/1364 1101/2802/1352 +f 1101/2802/1352 1094/2801/1364 1095/2803/1365 1102/2804/1353 +f 1102/2804/1353 1095/2803/1365 1096/2805/1366 1103/2806/1354 +f 1103/2806/1354 1096/2805/1366 1090/1595/717 1097/1593/715 +f 993/2807/1367 986/2783/1355 987/2784/1356 994/2808/1368 +f 994/2808/1368 987/2784/1356 988/2809/1357 995/2810/1369 +f 995/2811/1369 988/2812/1357 989/2813/1358 996/2814/1370 +f 996/2814/1370 989/2813/1358 990/2815/1359 997/2816/1371 +f 997/2816/1371 990/2815/1359 991/2817/1360 998/2818/1372 +f 998/2818/1372 991/2817/1360 985/1597/718 992/1600/720 +f 1091/2795/1361 1084/2819/1373 1085/2820/1374 1092/2796/1362 +f 1092/2796/1362 1085/2820/1374 1086/2821/1375 1093/2822/1363 +f 1093/2823/1363 1086/2824/1375 1087/2825/1376 1094/2826/1364 +f 1094/2826/1364 1087/2825/1376 1088/2827/1377 1095/2828/1365 +f 1095/2828/1365 1088/2827/1377 1089/2829/1378 1096/2830/1366 +f 1096/2830/1366 1089/2829/1378 1083/1599/719 1090/1598/717 +f 1000/2831/1379 993/2807/1367 994/2808/1368 1001/2832/1380 +f 1001/2832/1380 994/2808/1368 995/2833/1369 1002/2834/1381 +f 1002/2835/1381 995/2836/1369 996/2837/1370 1003/2838/1382 +f 1003/2838/1382 996/2837/1370 997/2839/1371 1004/2840/1383 +f 1004/2840/1383 997/2839/1371 998/2841/1372 1005/2842/1384 +f 1005/2842/1384 998/2841/1372 992/1600/720 999/1602/722 +f 1084/2819/1373 1077/2843/1385 1078/2844/1386 1085/2820/1374 +f 1085/2820/1374 1078/2844/1386 1079/2845/1387 1086/2846/1375 +f 1086/2847/1375 1079/2848/1387 1080/2849/1388 1087/2850/1376 +f 1087/2850/1376 1080/2849/1388 1081/2851/1389 1088/2852/1377 +f 1088/2852/1377 1081/2851/1389 1082/2853/1390 1089/2854/1378 +f 1089/2854/1378 1082/2853/1390 1076/1601/721 1083/1599/719 +f 1007/2855/1391 1000/2831/1379 1001/2832/1380 1008/2856/1392 +f 1008/2856/1392 1001/2832/1380 1002/2857/1381 1009/2858/1393 +f 1009/2859/1393 1002/2860/1381 1003/2861/1382 1010/2862/1394 +f 1010/2862/1394 1003/2861/1382 1004/2863/1383 1011/2864/1395 +f 1011/2864/1395 1004/2863/1383 1005/2865/1384 1012/2866/1396 +f 1012/2866/1396 1005/2865/1384 999/1602/722 1006/1604/724 +f 1077/2843/1385 1070/2867/1397 1071/2868/1398 1078/2844/1386 +f 1078/2844/1386 1071/2868/1398 1072/2869/1399 1079/2870/1387 +f 1079/2871/1387 1072/2872/1399 1073/2873/1400 1080/2874/1388 +f 1080/2874/1388 1073/2873/1400 1074/2875/1401 1081/2876/1389 +f 1081/2876/1389 1074/2875/1401 1075/2877/1402 1082/2878/1390 +f 1082/2878/1390 1075/2877/1402 1069/1603/723 1076/1601/721 +f 1014/2879/1403 1007/2855/1391 1008/2856/1392 1015/2880/1404 +f 1015/2880/1404 1008/2856/1392 1009/2881/1393 1016/2882/1405 +f 1016/2883/1405 1009/2884/1393 1010/2885/1394 1017/2886/1406 +f 1017/2886/1406 1010/2885/1394 1011/2887/1395 1018/2888/1407 +f 1018/2888/1407 1011/2887/1395 1012/2889/1396 1019/2890/1408 +f 1019/2890/1408 1012/2889/1396 1006/1604/724 1013/1606/726 +f 1070/2867/1397 1063/2891/1409 1064/2892/1410 1071/2868/1398 +f 1071/2868/1398 1064/2892/1410 1065/2893/1411 1072/2894/1399 +f 1072/2895/1399 1065/2896/1411 1066/2897/1412 1073/2898/1400 +f 1073/2898/1400 1066/2897/1412 1067/2899/1413 1074/2900/1401 +f 1074/2900/1401 1067/2899/1413 1068/2901/1414 1075/2902/1402 +f 1075/2902/1402 1068/2901/1414 1062/1605/725 1069/1603/723 +f 1021/2903/1415 1014/2879/1403 1015/2880/1404 1022/2904/1416 +f 1022/2904/1416 1015/2880/1404 1016/2905/1405 1023/2906/1417 +f 1023/2907/1417 1016/2908/1405 1017/2909/1406 1024/2910/1418 +f 1024/2910/1418 1017/2909/1406 1018/2911/1407 1025/2912/1419 +f 1025/2912/1419 1018/2911/1407 1019/2913/1408 1026/2914/1420 +f 1026/2914/1420 1019/2913/1408 1013/1606/726 1020/1608/728 +f 1063/2891/1409 1056/2915/1421 1057/2916/1422 1064/2892/1410 +f 1064/2892/1410 1057/2916/1422 1058/2917/1423 1065/2918/1411 +f 1065/2919/1411 1058/2920/1423 1059/2921/1424 1066/2922/1412 +f 1066/2922/1412 1059/2921/1424 1060/2923/1425 1067/2924/1413 +f 1067/2924/1413 1060/2923/1425 1061/2925/1426 1068/2926/1414 +f 1068/2926/1414 1061/2925/1426 1055/1607/727 1062/1605/725 +f 1028/2927/1427 1021/2903/1415 1022/2904/1416 1029/2928/1428 +f 1029/2928/1428 1022/2904/1416 1023/2929/1417 1030/2930/1429 +f 1030/2931/1429 1023/2932/1417 1024/2933/1418 1031/2934/1430 +f 1031/2934/1430 1024/2933/1418 1025/2935/1419 1032/2936/1431 +f 1032/2936/1431 1025/2935/1419 1026/2937/1420 1033/2938/1432 +f 1033/2938/1432 1026/2937/1420 1020/1608/728 1027/553/173 +f 1056/2915/1421 1049/2939/1433 1050/2940/1434 1057/2916/1422 +f 1057/2916/1422 1050/2940/1434 1051/2941/1435 1058/2942/1423 +f 1058/2943/1423 1051/2944/1435 1052/2945/1436 1059/2946/1424 +f 1059/2946/1424 1052/2945/1436 1053/2947/1437 1060/2948/1425 +f 1060/2948/1425 1053/2947/1437 1054/2949/1438 1061/2950/1426 +f 1061/2950/1426 1054/2949/1438 1048/554/174 1055/1607/727 +f 937/2951/1439 1028/2927/1427 1029/2928/1428 938/2952/1440 +f 938/2952/1440 1029/2928/1428 1030/2953/1429 939/2954/1441 +f 939/2955/1441 1030/2956/1429 1031/2957/1430 940/2958/1442 +f 940/2958/1442 1031/2957/1430 1032/2959/1431 941/2960/1443 +f 941/2960/1443 1032/2959/1431 1033/2961/1432 942/2962/1444 +f 942/2962/1444 1033/2961/1432 1027/553/173 936/556/176 +f 1049/2939/1433 1035/2963/1445 1036/2964/1446 1050/2940/1434 +f 1050/2940/1434 1036/2964/1446 1037/2965/1447 1051/2966/1435 +f 1051/2967/1435 1037/2968/1447 1038/2969/1448 1052/2970/1436 +f 1052/2970/1436 1038/2969/1448 1039/2971/1449 1053/2972/1437 +f 1053/2972/1437 1039/2971/1449 1040/2973/1450 1054/2974/1438 +f 1054/2974/1438 1040/2973/1450 1034/555/175 1048/554/174 +f 1671/1556/680 1559/1531/657 1565/2975/1090 1677/2976/1114 +f 1677/2976/1114 1565/2975/1090 1564/2977/1089 1676/2978/1112 +f 1676/2978/1112 1564/2977/1089 1563/2979/1088 1675/2980/1110 +f 1675/2980/1110 1563/2979/1088 1562/2981/1087 1674/2982/1108 +f 1674/2982/1108 1562/2981/1087 1561/2983/1086 1673/2984/1106 +f 1673/2312/1106 1561/2284/1086 1560/2283/1085 1672/2309/1103 +f 1566/1528/654 929/1586/708 935/2985/1281 1572/2986/934 +f 1572/2986/934 935/2985/1281 934/2987/1279 1571/2988/932 +f 1571/2988/932 934/2987/1279 933/2989/1277 1570/2990/930 +f 1570/2990/930 933/2989/1277 932/2991/1275 1569/2992/928 +f 1569/2992/928 932/2991/1275 931/2993/1273 1568/2994/926 +f 1568/1972/926 931/2637/1273 930/2636/1272 1567/1969/923 +f 936/556/176 1244/551/171 1250/2995/910 942/2962/1444 +f 942/2962/1444 1250/2995/910 1249/2996/909 941/2997/1443 +f 941/2997/1443 1249/2996/909 1248/2998/908 940/2999/1442 +f 940/2999/1442 1248/2998/908 1247/3000/907 939/3001/1441 +f 939/3001/1441 1247/3000/907 1246/3002/906 938/3003/1440 +f 938/2952/1440 1246/1944/906 1245/1943/905 937/2951/1439 +f 1251/546/166 1664/1502/630 1670/3004/1270 1257/3005/754 +f 1257/3005/754 1670/3004/1270 1669/3006/1269 1256/3007/752 +f 1256/3007/752 1669/3006/1269 1668/3008/1268 1255/3009/750 +f 1255/3009/750 1668/3008/1268 1667/3010/1267 1254/3011/748 +f 1254/3011/748 1667/3010/1267 1666/3012/1266 1253/3013/746 +f 1253/1632/746 1666/2624/1266 1665/2623/1265 1252/1629/743 +f 1350/1956/912 1042/2649/1283 1043/2652/1286 1351/1957/913 +f 1351/1957/913 1043/2652/1286 1044/3014/1288 1352/3015/915 +f 1352/3016/915 1044/3017/1288 1045/3018/1290 1353/3019/917 +f 1353/3019/917 1045/3018/1290 1046/3020/1292 1354/3021/919 +f 1354/3021/919 1046/3020/1292 1047/3022/1294 1355/3023/921 +f 1355/3023/921 1047/3022/1294 1041/1585/707 1349/1527/653 +f 1035/2963/1445 1147/1931/899 1148/1932/900 1036/2964/1446 +f 1036/2964/1446 1148/1932/900 1149/3024/901 1037/3025/1447 +f 1037/3026/1447 1149/3027/901 1150/3028/902 1038/3029/1448 +f 1038/3029/1448 1150/3028/902 1151/3030/903 1039/3031/1449 +f 1039/3031/1449 1151/3030/903 1152/3032/904 1040/2973/1450 +f 1040/2973/1450 1152/3032/904 1146/552/172 1034/555/175 +f 1356/1532/658 1454/1555/679 1460/3033/1101 1362/3034/1084 +f 1362/3034/1084 1460/3033/1101 1459/3035/1099 1361/3036/1083 +f 1361/3036/1083 1459/3035/1099 1458/3037/1097 1360/3038/1082 +f 1360/3038/1082 1458/3037/1097 1457/3039/1095 1359/3040/1081 +f 1359/3040/1081 1457/3039/1095 1456/3041/1093 1358/3042/1080 +f 1358/2272/1080 1456/2297/1093 1455/2296/1092 1357/2271/1079 +f 1461/1501/629 1139/545/165 1145/3043/741 1467/3044/1264 +f 1467/3044/1264 1145/3043/741 1144/3045/739 1466/3046/1263 +f 1466/3046/1263 1144/3045/739 1143/3047/737 1465/3048/1262 +f 1465/3048/1262 1143/3047/737 1142/3049/735 1464/3050/1261 +f 1464/3050/1261 1142/3049/735 1141/3051/733 1463/3052/1260 +f 1463/2612/1260 1141/1617/733 1140/1616/732 1462/2611/1259 diff --git a/mods/pipeworks/models/pipeworks_pressure_gauge_lowpoly.obj b/mods/pipeworks/models/pipeworks_pressure_gauge_lowpoly.obj new file mode 100755 index 0000000..e81fb6f --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pressure_gauge_lowpoly.obj @@ -0,0 +1,325 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-pressure-gauge.blend' +# www.blender.org +o Cylinder.000 +v 0.059508 0.267678 0.156042 +v -0.067320 0.267678 0.156042 +v 0.059508 0.176271 0.064635 +v -0.067320 0.176271 0.064635 +v 0.059508 0.176271 -0.064635 +v -0.067320 0.176271 -0.064635 +v 0.059508 0.267678 -0.156042 +v -0.067320 0.267678 -0.156042 +v 0.059508 0.396948 -0.156042 +v -0.067320 0.396948 -0.156042 +v 0.059508 0.488356 -0.064635 +v -0.067320 0.488356 -0.064635 +v 0.059508 0.488356 0.064635 +v -0.067320 0.488356 0.064635 +v 0.059508 0.396948 0.156042 +v -0.067320 0.396948 0.156042 +v 0.044062 0.150388 -0.044062 +v 0.044062 0.185121 -0.044062 +v 0.044062 0.150388 0.044062 +v 0.044062 0.185121 0.044062 +v -0.044062 0.150388 -0.044062 +v -0.044062 0.185121 -0.044062 +v -0.044062 0.150388 0.044062 +v -0.044062 0.185121 0.044062 +v -0.156122 0.156122 0.156122 +v -0.156122 -0.156122 0.156122 +v -0.156122 0.156122 -0.156122 +v -0.156122 -0.156122 -0.156122 +v 0.156123 0.156122 0.156122 +v 0.156123 -0.156122 0.156122 +v 0.156123 0.156122 -0.156122 +v 0.156123 -0.156122 -0.156122 +v 0.156250 -0.064721 -0.500000 +v 0.156250 -0.064721 -0.468750 +v 0.064721 -0.156250 -0.500000 +v 0.064721 -0.156250 -0.468750 +v -0.064721 -0.156250 -0.500000 +v -0.064721 -0.156250 -0.468750 +v -0.156250 -0.064721 -0.500000 +v -0.156250 -0.064721 -0.468750 +v -0.156250 0.064721 -0.500000 +v -0.156250 0.064721 -0.468750 +v -0.064721 0.156250 -0.500000 +v -0.064721 0.156250 -0.468750 +v 0.064721 0.156250 -0.500000 +v 0.064721 0.156250 -0.468750 +v 0.156250 0.064721 -0.500000 +v 0.156250 0.064721 -0.468750 +v 0.125000 -0.051777 -0.468750 +v 0.125000 -0.051777 0.468750 +v 0.051777 -0.125000 -0.468750 +v 0.051777 -0.125000 0.468750 +v -0.051777 -0.125000 -0.468750 +v -0.051777 -0.125000 0.468750 +v -0.125000 -0.051777 -0.468750 +v -0.125000 -0.051777 0.468750 +v -0.125000 0.051777 -0.468750 +v -0.125000 0.051777 0.468750 +v -0.051777 0.125000 -0.468750 +v -0.051777 0.125000 0.468750 +v 0.051777 0.125000 -0.468750 +v 0.051777 0.125000 0.468750 +v 0.125000 0.051777 -0.468750 +v 0.125000 0.051777 0.468750 +v 0.156250 -0.064721 0.468750 +v 0.156250 -0.064721 0.500000 +v 0.064721 -0.156250 0.468750 +v 0.064721 -0.156250 0.500000 +v -0.064721 -0.156250 0.468750 +v -0.064721 -0.156250 0.500000 +v -0.156250 -0.064721 0.468750 +v -0.156250 -0.064721 0.500000 +v -0.156250 0.064721 0.468750 +v -0.156250 0.064721 0.500000 +v -0.064721 0.156250 0.468750 +v -0.064721 0.156250 0.500000 +v 0.064721 0.156250 0.468750 +v 0.064721 0.156250 0.500000 +v 0.156250 0.064721 0.468750 +v 0.156250 0.064721 0.500000 +vt 0.1173 0.3198 +vt 0.3327 0.0381 +vt 0.6374 0.0381 +vt 0.8529 0.3198 +vt 0.8529 0.7182 +vt 0.6374 1.0000 +vt 0.3327 1.0000 +vt 0.1173 0.7182 +vt 0.6373 0.3431 +vt 0.6373 0.2451 +vt 0.7353 0.2451 +vt 0.7353 0.3431 +vt 0.3431 0.4412 +vt 0.3431 0.3431 +vt 0.4412 0.3431 +vt 0.4412 0.4412 +vt 0.5392 0.3431 +vt 0.5392 0.4412 +vt 0.6373 0.3431 +vt 0.6373 0.4412 +vt 0.7353 0.3431 +vt 0.7353 0.4412 +vt 0.3431 0.3431 +vt 0.3431 0.2451 +vt 0.4412 0.2451 +vt 0.4412 0.3431 +vt 0.5098 0.2059 +vt 0.5784 0.2745 +vt 0.5784 0.3725 +vt 0.5098 0.4412 +vt 0.4118 0.4412 +vt 0.3431 0.3725 +vt 0.3431 0.2745 +vt 0.4118 0.2059 +vt 0.5392 0.2451 +vt 0.5392 0.3431 +vt 0.7941 0.1373 +vt 0.8627 0.1373 +vt 0.8627 0.1667 +vt 0.7941 0.1667 +vt 0.7255 0.1373 +vt 0.7255 0.1667 +vt 0.6569 0.1373 +vt 0.6569 0.1667 +vt 0.5882 0.1373 +vt 0.5882 0.1667 +vt 0.2843 0.4902 +vt 0.0490 0.4902 +vt 0.0490 0.2549 +vt 0.2843 0.2549 +vt 0.0490 0.2451 +vt 0.2843 0.2451 +vt 0.2843 0.0098 +vt 0.0490 0.0098 +vt 0.5000 0.7549 +vt 0.5000 0.9902 +vt 0.2647 0.9902 +vt 0.2647 0.7549 +vt 0.0490 0.5000 +vt 0.0490 0.7353 +vt 0.2843 0.7353 +vt 0.2843 0.5000 +vt 0.0098 0.7549 +vt 0.0098 0.9902 +vt 0.2451 0.9902 +vt 0.2451 0.7549 +vt 0.7941 0.7549 +vt 0.7941 0.9902 +vt 0.5588 0.9902 +vt 0.5588 0.7549 +vt 0.7941 0.6765 +vt 0.7353 0.7353 +vt 0.6569 0.7353 +vt 0.5980 0.6765 +vt 0.5980 0.5980 +vt 0.6569 0.5392 +vt 0.7353 0.5392 +vt 0.7941 0.5980 +vt 0.5000 0.7353 +vt 0.5588 0.6765 +vt 0.5588 0.5980 +vt 0.5000 0.5392 +vt 0.4216 0.5392 +vt 0.3627 0.5980 +vt 0.3627 0.6765 +vt 0.4216 0.7353 +vt 0.5588 0.6765 +vt 0.5000 0.7353 +vt 0.4216 0.7353 +vt 0.3627 0.6765 +vt 0.3627 0.5980 +vt 0.4216 0.5392 +vt 0.5000 0.5392 +vt 0.5588 0.5980 +vt 0.7353 0.7353 +vt 0.7941 0.6765 +vt 0.7941 0.5980 +vt 0.7353 0.5392 +vt 0.6569 0.5392 +vt 0.5980 0.5980 +vt 0.5980 0.6765 +vt 0.6569 0.7353 +vt 0.8529 0.4902 +vt 0.8529 0.4706 +vt 0.8922 0.4706 +vt 0.8922 0.4902 +vt 0.9314 0.4706 +vt 0.9314 0.4902 +vt 0.9706 0.4706 +vt 0.9706 0.4902 +vt 0.6569 0.4902 +vt 0.6569 0.4706 +vt 0.6961 0.4706 +vt 0.6961 0.4902 +vt 0.7353 0.4706 +vt 0.7353 0.4902 +vt 0.7745 0.4706 +vt 0.7745 0.4902 +vt 0.8137 0.4706 +vt 0.8137 0.4902 +vt 0.5784 0.4902 +vt 0.5784 0.4706 +vt 0.6176 0.4706 +vt 0.6176 0.4902 +vt 0.5392 0.4902 +vt 0.5392 0.4706 +vt 0.6569 0.4706 +vt 0.6569 0.4902 +vt 0.3431 0.4902 +vt 0.3431 0.4706 +vt 0.3824 0.4706 +vt 0.3824 0.4902 +vt 0.4216 0.4706 +vt 0.4216 0.4902 +vt 0.4608 0.4706 +vt 0.4608 0.4902 +vt 0.5000 0.4706 +vt 0.5000 0.4902 +vt 0.3431 0.4020 +vt 0.3431 0.3627 +vt 0.9706 0.3627 +vt 0.9706 0.4020 +vt 0.3431 0.2843 +vt 0.3431 0.2451 +vt 0.9706 0.2451 +vt 0.9706 0.2843 +vt 0.3431 0.3235 +vt 0.9706 0.3235 +vt 0.9706 0.4412 +vt 0.3431 0.4412 +vt 0.9706 0.1667 +vt 0.9706 0.2059 +vt 0.3431 0.2059 +vt 0.3431 0.1667 +vt 0.9706 0.1275 +vt 0.3431 0.1275 +vn 1.0000 -0.0000 -0.0000 +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 1.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.0000 1.0000 +vn 0.7173 -0.2971 -0.6302 +vn 0.7173 -0.2971 0.6302 +vn 0.2971 -0.7173 0.6302 +vn 0.2971 -0.7173 -0.6302 +vn -0.2971 -0.7173 0.6302 +vn -0.2971 -0.7173 -0.6302 +vn -0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 -0.6302 +vn -0.7173 0.2971 0.6302 +vn -0.7173 0.2971 -0.6302 +vn -0.2971 0.7173 0.6302 +vn -0.2971 0.7173 -0.6302 +vn 0.2971 0.7173 0.6302 +vn 0.2971 0.7173 -0.6302 +vn 0.7173 0.2971 0.6302 +vn 0.7173 0.2971 -0.6302 +vn -0.9239 -0.3827 0.0000 +vn -0.9239 0.3827 0.0000 +vn 0.3827 0.9239 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.3827 -0.9239 0.0000 +vn 0.9239 -0.3827 0.0000 +g Cylinder.000_Cylinder.000_gauge_face +s off +f 1/1/1 3/2/1 5/3/1 7/4/1 9/5/1 11/6/1 13/7/1 15/8/1 +g Cylinder.000_Cylinder.000_pipe_and_gauge_body +f 1/9/2 2/10/2 4/11/2 3/12/2 +f 3/13/3 4/14/3 6/15/3 5/16/3 +f 5/16/4 6/15/4 8/17/4 7/18/4 +f 7/18/5 8/17/5 10/19/5 9/20/5 +f 9/20/6 10/19/6 12/21/6 11/22/6 +f 11/23/7 12/24/7 14/25/7 13/26/7 +f 4/27/8 2/28/8 16/29/8 14/30/8 12/31/8 10/32/8 8/33/8 6/34/8 +f 13/26/9 14/25/9 16/35/9 15/36/9 +f 15/36/10 16/35/10 2/10/10 1/9/10 +f 20/37/10 24/38/10 23/39/10 19/40/10 +f 18/41/1 20/37/1 19/40/1 17/42/1 +f 22/43/5 18/41/5 17/42/5 21/44/5 +f 24/45/8 22/43/8 21/44/8 23/46/8 +f 25/47/7 29/48/7 31/49/7 27/50/7 +f 30/51/3 26/52/3 28/53/3 32/54/3 +f 28/55/5 27/56/5 31/57/5 32/58/5 +f 26/59/8 25/60/8 27/61/8 28/62/8 +f 30/63/10 29/64/10 25/65/10 26/66/10 +f 32/67/1 31/68/1 29/69/1 30/70/1 +f 36/71/10 34/72/10 48/73/10 46/74/10 44/75/10 42/76/10 40/77/10 38/78/10 +f 33/79/5 35/80/5 37/81/5 39/82/5 41/83/5 43/84/5 45/85/5 47/86/5 +f 68/87/10 66/88/10 80/89/10 78/90/10 76/91/10 74/92/10 72/93/10 70/94/10 +f 65/95/5 67/96/5 69/97/5 71/98/5 73/99/5 75/100/5 77/101/5 79/102/5 +s 1 +f 33/103/11 34/104/12 36/105/13 35/106/14 +f 35/106/14 36/105/13 38/107/15 37/108/16 +f 37/108/16 38/107/15 40/109/17 39/110/18 +f 39/111/18 40/112/17 42/113/19 41/114/20 +f 41/114/20 42/113/19 44/115/21 43/116/22 +f 43/116/22 44/115/21 46/117/23 45/118/24 +f 45/118/24 46/117/23 48/119/25 47/120/26 +f 47/120/26 48/119/25 34/104/12 33/103/11 +f 67/121/14 68/122/13 70/123/15 69/124/16 +f 65/125/11 66/126/12 68/122/13 67/121/14 +f 69/124/16 70/123/15 72/127/17 71/128/18 +f 71/129/18 72/130/17 74/131/19 73/132/20 +f 73/132/20 74/131/19 76/133/21 75/134/22 +f 75/134/22 76/133/21 78/135/23 77/136/24 +f 77/136/24 78/135/23 80/137/25 79/138/26 +f 79/138/26 80/137/25 66/126/12 65/125/11 +f 56/139/27 58/140/28 57/141/28 55/142/27 +f 62/143/29 64/144/30 63/145/30 61/146/29 +f 58/140/28 60/147/31 59/148/31 57/141/28 +f 56/139/27 55/142/27 53/149/32 54/150/32 +f 51/151/33 49/152/34 50/153/34 52/154/33 +f 53/155/32 51/151/33 52/154/33 54/156/32 +f 62/143/29 61/146/29 59/148/31 60/147/31 +f 49/152/34 63/145/30 64/144/30 50/153/34 diff --git a/mods/pipeworks/models/pipeworks_pump.obj b/mods/pipeworks/models/pipeworks_pump.obj new file mode 100755 index 0000000..91dda7e --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pump.obj @@ -0,0 +1,2889 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-pump.blend' +# www.blender.org +o Cube +v 0.036461 0.437501 0.120197 +v 0.012311 0.437501 0.125001 +v -0.012311 0.437501 0.125001 +v -0.036461 0.437501 0.120197 +v 0.059210 0.437501 0.110774 +v 0.012985 0.468750 0.131837 +v 0.038455 0.468750 0.126770 +v -0.012985 0.468750 0.131837 +v -0.059210 0.437501 0.110774 +v -0.038455 0.468750 0.126770 +v 0.079683 0.437501 0.097094 +v 0.062448 0.468750 0.116832 +v -0.079683 0.437501 0.097094 +v -0.062448 0.468750 0.116832 +v 0.097094 0.437501 0.079683 +v 0.084041 0.468750 0.102404 +v -0.097094 0.437501 0.079683 +v -0.084041 0.468750 0.102404 +v 0.110774 0.437501 0.059210 +v 0.102404 0.468750 0.084041 +v -0.110774 0.437501 0.059210 +v -0.102404 0.468750 0.084041 +v 0.120197 0.437501 0.036461 +v 0.116832 0.468750 0.062448 +v -0.120197 0.437501 0.036461 +v -0.116832 0.468750 0.062448 +v 0.125000 0.437501 0.012311 +v 0.126770 0.468750 0.038455 +v -0.125001 0.437501 0.012312 +v -0.126770 0.468750 0.038455 +v 0.125000 0.437501 -0.012312 +v 0.131836 0.468750 0.012985 +v -0.125001 0.437501 -0.012311 +v -0.131837 0.468750 0.012985 +v 0.120197 0.437501 -0.036461 +v 0.131836 0.468750 -0.012985 +v -0.120197 0.437501 -0.036461 +v -0.131837 0.468750 -0.012985 +v 0.110774 0.437501 -0.059210 +v 0.126770 0.468750 -0.038455 +v -0.110774 0.437501 -0.059210 +v -0.126770 0.468750 -0.038455 +v 0.097094 0.437501 -0.079683 +v 0.116832 0.468750 -0.062448 +v -0.097094 0.437501 -0.079683 +v -0.116832 0.468750 -0.062448 +v 0.079683 0.437501 -0.097094 +v 0.102404 0.468750 -0.084041 +v -0.079683 0.437501 -0.097094 +v -0.102404 0.468750 -0.084041 +v 0.059210 0.437501 -0.110774 +v 0.084041 0.468750 -0.102404 +v -0.059210 0.437501 -0.110774 +v -0.084041 0.468750 -0.102404 +v 0.036461 0.437501 -0.120197 +v 0.062448 0.468750 -0.116832 +v -0.036461 0.437501 -0.120197 +v -0.062448 0.468750 -0.116832 +v 0.012311 0.437501 -0.125000 +v 0.038455 0.468750 -0.126770 +v -0.012312 0.437501 -0.125000 +v -0.038455 0.468750 -0.126770 +v 0.012985 0.468750 -0.131836 +v -0.012985 0.468750 -0.131836 +v 0.130078 0.460912 -0.063644 +v 0.130078 0.468749 -0.063644 +v 0.139022 0.468749 -0.062467 +v 0.139022 0.460912 -0.062466 +v 0.142474 0.460912 -0.054132 +v 0.136982 0.460912 -0.046976 +v 0.128039 0.460912 -0.048153 +v 0.124587 0.460912 -0.056487 +v 0.124587 0.468749 -0.056487 +v 0.142474 0.468749 -0.054132 +v 0.136982 0.468749 -0.046976 +v 0.128039 0.468749 -0.048153 +v 0.046976 0.460912 -0.136982 +v 0.046976 0.468749 -0.136982 +v 0.054133 0.468749 -0.142474 +v 0.054133 0.460912 -0.142474 +v 0.062467 0.460912 -0.139022 +v 0.063644 0.460912 -0.130078 +v 0.056488 0.460912 -0.124587 +v 0.048153 0.460912 -0.128039 +v 0.048153 0.468749 -0.128039 +v 0.062467 0.468749 -0.139022 +v 0.063644 0.468749 -0.130078 +v 0.056488 0.468749 -0.124587 +v -0.063644 0.460912 -0.130078 +v -0.063644 0.468749 -0.130078 +v -0.062467 0.468749 -0.139022 +v -0.062467 0.460912 -0.139022 +v -0.054132 0.460912 -0.142474 +v -0.046976 0.460912 -0.136982 +v -0.048153 0.460912 -0.128039 +v -0.056487 0.460912 -0.124587 +v -0.056487 0.468749 -0.124587 +v -0.054133 0.468749 -0.142474 +v -0.046976 0.468749 -0.136982 +v -0.048153 0.468749 -0.128039 +v -0.136982 0.460912 -0.046976 +v -0.136982 0.468749 -0.046976 +v -0.142474 0.468749 -0.054133 +v -0.142474 0.460912 -0.054133 +v -0.139022 0.460912 -0.062467 +v -0.130078 0.460912 -0.063644 +v -0.124587 0.460912 -0.056487 +v -0.128039 0.460912 -0.048153 +v -0.128039 0.468749 -0.048153 +v -0.139022 0.468749 -0.062467 +v -0.130078 0.468749 -0.063644 +v -0.124587 0.468749 -0.056487 +v -0.130078 0.460912 0.063644 +v -0.130078 0.468749 0.063644 +v -0.139022 0.468749 0.062467 +v -0.139022 0.460912 0.062467 +v -0.142474 0.460912 0.054133 +v -0.136982 0.460912 0.046976 +v -0.128039 0.460912 0.048153 +v -0.124587 0.460912 0.056487 +v -0.124587 0.468749 0.056487 +v -0.142474 0.468749 0.054133 +v -0.136982 0.468749 0.046976 +v -0.128039 0.468749 0.048153 +v -0.046976 0.460912 0.136982 +v -0.046976 0.468749 0.136982 +v -0.054133 0.468749 0.142474 +v -0.054133 0.460912 0.142474 +v -0.062467 0.460912 0.139022 +v -0.063644 0.460912 0.130078 +v -0.056488 0.460912 0.124587 +v -0.048154 0.460912 0.128039 +v -0.048154 0.468749 0.128039 +v -0.062467 0.468749 0.139022 +v -0.063644 0.468749 0.130078 +v -0.056488 0.468749 0.124587 +v 0.063644 0.460912 0.130078 +v 0.063644 0.468749 0.130078 +v 0.062466 0.468749 0.139022 +v 0.062467 0.460912 0.139022 +v 0.054132 0.460912 0.142474 +v 0.046976 0.460912 0.136982 +v 0.048153 0.460912 0.128039 +v 0.056487 0.460912 0.124587 +v 0.056487 0.468749 0.124587 +v 0.054132 0.468749 0.142474 +v 0.046976 0.468749 0.136982 +v 0.048153 0.468749 0.128039 +v 0.136982 0.460912 0.046976 +v 0.136982 0.468749 0.046976 +v 0.142474 0.468749 0.054133 +v 0.142474 0.460912 0.054133 +v 0.139022 0.460912 0.062467 +v 0.130078 0.460912 0.063644 +v 0.124587 0.460912 0.056488 +v 0.128039 0.460912 0.048154 +v 0.128039 0.468749 0.048154 +v 0.139022 0.468749 0.062467 +v 0.130078 0.468749 0.063644 +v 0.124587 0.468749 0.056488 +v -0.138467 0.468750 0.074012 +v -0.150245 0.468750 0.045576 +v -0.156250 0.468750 0.015389 +v -0.121367 0.468750 0.099603 +v -0.156250 0.468750 -0.015389 +v -0.074012 0.468750 0.138467 +v -0.099603 0.468750 0.121367 +v -0.121367 0.500000 0.099603 +v -0.138467 0.500000 0.074012 +v -0.150245 0.500000 0.045576 +v -0.156250 0.500000 0.015389 +v -0.156250 0.500000 -0.015389 +v -0.045576 0.468750 0.150245 +v -0.099603 0.500000 0.121367 +v -0.150245 0.468750 -0.045576 +v -0.150245 0.500000 -0.045576 +v -0.015389 0.468750 0.156250 +v -0.045576 0.500000 0.150245 +v -0.074012 0.500000 0.138467 +v -0.138467 0.468750 -0.074012 +v -0.138467 0.500000 -0.074012 +v 0.015389 0.468750 0.156250 +v -0.015389 0.500000 0.156250 +v -0.121367 0.468750 -0.099603 +v -0.121367 0.500000 -0.099603 +v 0.045576 0.468750 0.150245 +v 0.015389 0.500000 0.156250 +v -0.099603 0.468750 -0.121367 +v -0.099603 0.500000 -0.121367 +v 0.074012 0.468750 0.138467 +v 0.045576 0.500000 0.150245 +v -0.045576 0.468750 -0.150245 +v -0.074012 0.468750 -0.138467 +v -0.074012 0.500000 -0.138467 +v 0.099603 0.468750 0.121367 +v 0.074012 0.500000 0.138467 +v -0.015389 0.468750 -0.156250 +v -0.045576 0.500000 -0.150245 +v 0.121367 0.468750 0.099604 +v 0.099603 0.500000 0.121367 +v 0.015389 0.468750 -0.156250 +v -0.015389 0.500000 -0.156250 +v 0.138466 0.468750 0.074012 +v 0.121367 0.500000 0.099604 +v 0.045576 0.468750 -0.150245 +v 0.015389 0.500000 -0.156250 +v 0.150245 0.468750 0.045577 +v 0.138466 0.500000 0.074012 +v 0.074012 0.468750 -0.138467 +v 0.045576 0.500000 -0.150245 +v 0.156249 0.468750 0.015389 +v 0.150245 0.500000 0.045577 +v 0.156250 0.500000 -0.015389 +v 0.099603 0.468750 -0.121367 +v 0.074012 0.500000 -0.138467 +v 0.156249 0.468750 -0.015389 +v 0.156249 0.500000 0.015389 +v 0.138467 0.500000 -0.074012 +v 0.150245 0.500000 -0.045576 +v 0.121367 0.500000 -0.099603 +v 0.099603 0.500000 -0.121367 +v 0.150245 0.468750 -0.045576 +v 0.121367 0.468750 -0.099603 +v 0.138467 0.468750 -0.074012 +v 0.095821 0.460912 -0.108578 +v 0.095821 0.468749 -0.108578 +v 0.104534 0.468749 -0.110913 +v 0.104534 0.460912 -0.110913 +v 0.110913 0.460912 -0.104534 +v 0.108578 0.460912 -0.095821 +v 0.099865 0.460912 -0.093486 +v 0.093486 0.460912 -0.099865 +v 0.093486 0.468749 -0.099865 +v 0.110913 0.468749 -0.104534 +v 0.108578 0.468749 -0.095821 +v 0.099865 0.468749 -0.093486 +v -0.009021 0.460912 -0.144532 +v -0.009021 0.468749 -0.144532 +v -0.004510 0.468749 -0.152344 +v -0.004510 0.460912 -0.152344 +v 0.004510 0.460912 -0.152344 +v 0.009021 0.460912 -0.144532 +v 0.004510 0.460912 -0.136720 +v -0.004510 0.460912 -0.136720 +v -0.004510 0.468749 -0.136720 +v 0.004510 0.468749 -0.152344 +v 0.009021 0.468749 -0.144532 +v 0.004510 0.468749 -0.136720 +v -0.108578 0.460912 -0.095821 +v -0.108578 0.468749 -0.095821 +v -0.110913 0.468749 -0.104534 +v -0.110913 0.460912 -0.104534 +v -0.104534 0.460912 -0.110913 +v -0.095821 0.460912 -0.108578 +v -0.093486 0.460912 -0.099865 +v -0.099865 0.460912 -0.093486 +v -0.099865 0.468749 -0.093486 +v -0.104534 0.468749 -0.110913 +v -0.095821 0.468749 -0.108578 +v -0.093486 0.468749 -0.099865 +v -0.144532 0.460912 0.009021 +v -0.144532 0.468749 0.009021 +v -0.152344 0.468749 0.004510 +v -0.152344 0.460912 0.004510 +v -0.152344 0.460912 -0.004510 +v -0.144532 0.460912 -0.009021 +v -0.136720 0.460912 -0.004510 +v -0.136720 0.460912 0.004510 +v -0.136720 0.468749 0.004510 +v -0.152344 0.468749 -0.004510 +v -0.144532 0.468749 -0.009021 +v -0.136720 0.468749 -0.004510 +v -0.095821 0.460912 0.108578 +v -0.095821 0.468749 0.108578 +v -0.104534 0.468749 0.110913 +v -0.104534 0.460912 0.110913 +v -0.110913 0.460912 0.104534 +v -0.108578 0.460912 0.095821 +v -0.099865 0.460912 0.093486 +v -0.093486 0.460912 0.099865 +v -0.093486 0.468749 0.099865 +v -0.110913 0.468749 0.104534 +v -0.108578 0.468749 0.095821 +v -0.099865 0.468749 0.093486 +v 0.009021 0.460912 0.144532 +v 0.009021 0.468749 0.144532 +v 0.004510 0.468749 0.152344 +v 0.004510 0.460912 0.152344 +v -0.004511 0.460912 0.152344 +v -0.009021 0.460912 0.144532 +v -0.004511 0.460912 0.136720 +v 0.004510 0.460912 0.136720 +v 0.004510 0.468749 0.136720 +v -0.004511 0.468749 0.152344 +v -0.009021 0.468749 0.144532 +v -0.004510 0.468749 0.136720 +v 0.108578 0.460912 0.095821 +v 0.108578 0.468749 0.095821 +v 0.110913 0.468749 0.104534 +v 0.110913 0.460912 0.104534 +v 0.104534 0.460912 0.110913 +v 0.095821 0.460912 0.108578 +v 0.093486 0.460912 0.099865 +v 0.099865 0.460912 0.093486 +v 0.099865 0.468749 0.093486 +v 0.104534 0.468749 0.110913 +v 0.095821 0.468749 0.108578 +v 0.093486 0.468749 0.099865 +v 0.144532 0.460912 -0.009021 +v 0.144532 0.468749 -0.009021 +v 0.152344 0.468749 -0.004510 +v 0.152344 0.460912 -0.004510 +v 0.152344 0.460912 0.004511 +v 0.144532 0.460912 0.009021 +v 0.136720 0.460912 0.004511 +v 0.136720 0.460912 -0.004510 +v 0.136720 0.468749 -0.004510 +v 0.152344 0.468749 0.004511 +v 0.144532 0.468749 0.009021 +v 0.136720 0.468749 0.004511 +v 0.059210 0.371056 -0.110774 +v -0.110774 0.371056 -0.059210 +v 0.125000 0.371056 -0.012312 +v -0.110774 0.371056 0.059210 +v 0.079683 0.371056 0.097094 +v 0.012311 0.371056 0.125001 +v -0.059210 0.371056 -0.110774 +v 0.097094 0.371056 -0.079683 +v -0.125001 0.371056 -0.012311 +v 0.120197 0.371056 0.036461 +v -0.079683 0.371056 0.097094 +v -0.012311 0.371056 0.125001 +v 0.036461 0.371056 -0.120197 +v -0.097094 0.371056 -0.079683 +v 0.120197 0.371056 -0.036461 +v -0.120197 0.371056 0.036461 +v 0.097094 0.371056 0.079683 +v 0.059210 0.371056 0.110774 +v -0.036461 0.371056 -0.120197 +v 0.079683 0.371056 -0.097094 +v -0.120197 0.371056 -0.036461 +v 0.125000 0.371056 0.012311 +v -0.097094 0.371056 0.079683 +v -0.036461 0.371056 0.120197 +v 0.012311 0.371056 -0.125000 +v -0.079683 0.371056 -0.097094 +v 0.110774 0.371056 -0.059210 +v -0.125001 0.371056 0.012312 +v 0.110774 0.371056 0.059210 +v -0.059210 0.371056 0.110774 +v 0.036461 0.371056 0.120197 +v -0.012311 0.371056 -0.125000 +v -0.496094 -0.375000 0.496094 +v -0.496094 -0.375000 -0.496094 +v -0.496094 -0.496094 -0.496094 +v -0.496094 -0.496094 0.496094 +v 0.496094 -0.375000 -0.496094 +v 0.496094 -0.496094 -0.496094 +v 0.496094 -0.375000 0.496094 +v 0.496094 -0.496094 0.496094 +v -0.400579 0.390625 0.370218 +v -0.367241 0.375000 0.389466 +v -0.411691 0.390625 0.389466 +v -0.378353 0.375000 0.370218 +v -0.400579 0.390625 0.408713 +v -0.378353 0.375000 0.408713 +v -0.378353 0.390625 0.408713 +v -0.400579 0.375000 0.408713 +v -0.367241 0.390625 0.389466 +v -0.411691 0.375000 0.389466 +v -0.378353 0.390625 0.370218 +v -0.400579 0.375000 0.370218 +v -0.400578 0.375000 -0.408713 +v -0.378353 0.390625 -0.408713 +v -0.411691 0.375000 -0.389466 +v -0.367241 0.390625 -0.389466 +v -0.400578 0.375000 -0.370218 +v -0.378353 0.390625 -0.370218 +v -0.378353 0.375000 -0.370218 +v -0.400578 0.390625 -0.370218 +v -0.378353 0.375000 -0.408713 +v -0.411691 0.390625 -0.389466 +v -0.367241 0.375000 -0.389466 +v -0.400578 0.390625 -0.408713 +v 0.378353 0.375000 0.370218 +v 0.400578 0.390625 0.370218 +v 0.367241 0.375000 0.389466 +v 0.411691 0.390625 0.389466 +v 0.378353 0.375000 0.408713 +v 0.400578 0.390625 0.408713 +v 0.400578 0.375000 0.408713 +v 0.378353 0.390625 0.408713 +v 0.400578 0.375000 0.370218 +v 0.367241 0.390625 0.389466 +v 0.411691 0.375000 0.389466 +v 0.378353 0.390625 0.370218 +v 0.378353 0.390625 -0.408713 +v 0.411691 0.375000 -0.389466 +v 0.367241 0.390625 -0.389466 +v 0.400579 0.375000 -0.408713 +v 0.378353 0.390625 -0.370218 +v 0.400579 0.375000 -0.370218 +v 0.400579 0.390625 -0.370218 +v 0.378353 0.375000 -0.370218 +v 0.411691 0.390625 -0.389466 +v 0.367241 0.375000 -0.389466 +v 0.400579 0.390625 -0.408713 +v 0.378353 0.375000 -0.408713 +v 0.000000 -0.188051 -0.439726 +v 0.007157 0.184437 -0.446679 +v 0.014040 0.173736 -0.453365 +v 0.020382 0.156359 -0.459527 +v 0.025942 0.132972 -0.464927 +v 0.030504 0.104475 -0.469360 +v 0.033894 0.071964 -0.472653 +v 0.035982 0.036687 -0.474681 +v 0.036687 0.000000 -0.475366 +v 0.035982 -0.036687 -0.474681 +v 0.033894 -0.071964 -0.472653 +v 0.030504 -0.104475 -0.469360 +v 0.025942 -0.132972 -0.464927 +v 0.020382 -0.156359 -0.459527 +v 0.014040 -0.173736 -0.453365 +v 0.007157 -0.184437 -0.446679 +v 0.014040 0.184437 -0.446276 +v 0.027540 0.173736 -0.452574 +v 0.039981 0.156359 -0.458378 +v 0.050886 0.132972 -0.463465 +v 0.059836 0.104475 -0.467640 +v 0.066486 0.071964 -0.470743 +v 0.070581 0.036687 -0.472653 +v 0.071964 0.000000 -0.473298 +v 0.070581 -0.036687 -0.472653 +v 0.066486 -0.071964 -0.470743 +v 0.059836 -0.104475 -0.467640 +v 0.050886 -0.132972 -0.463465 +v 0.039981 -0.156359 -0.458378 +v 0.027540 -0.173736 -0.452574 +v 0.014040 -0.184437 -0.446276 +v 0.020382 0.184437 -0.445621 +v 0.039981 0.173736 -0.451289 +v 0.058044 0.156359 -0.456512 +v 0.073875 0.132972 -0.461091 +v 0.086868 0.104475 -0.464848 +v 0.096523 0.071964 -0.467640 +v 0.102468 0.036687 -0.469360 +v 0.104476 0.000000 -0.469940 +v 0.102468 -0.036687 -0.469360 +v 0.096523 -0.071964 -0.467640 +v 0.086868 -0.104475 -0.464848 +v 0.073875 -0.132972 -0.461091 +v 0.058044 -0.156359 -0.456512 +v 0.039981 -0.173736 -0.451289 +v 0.020382 -0.184437 -0.445621 +v 0.025942 0.184437 -0.444739 +v 0.050886 0.173736 -0.449559 +v 0.073875 0.156359 -0.454002 +v 0.094026 0.132972 -0.457895 +v 0.110562 0.104475 -0.461091 +v 0.122850 0.071964 -0.463465 +v 0.130417 0.036687 -0.464927 +v 0.132972 0.000000 -0.465421 +v 0.130417 -0.036687 -0.464927 +v 0.122850 -0.071964 -0.463465 +v 0.110562 -0.104475 -0.461091 +v 0.094026 -0.132972 -0.457895 +v 0.073875 -0.156359 -0.454002 +v 0.050886 -0.173736 -0.449559 +v 0.025942 -0.184437 -0.444739 +v 0.030504 0.184437 -0.443665 +v 0.059836 0.173736 -0.447452 +v 0.086868 0.156359 -0.450942 +v 0.110562 0.132972 -0.454002 +v 0.130008 0.104475 -0.456512 +v 0.144457 0.071964 -0.458378 +v 0.153354 0.036687 -0.459527 +v 0.156359 0.000000 -0.459915 +v 0.153354 -0.036687 -0.459527 +v 0.144457 -0.071964 -0.458378 +v 0.130008 -0.104475 -0.456512 +v 0.110562 -0.132972 -0.454002 +v 0.086868 -0.156359 -0.450942 +v 0.059836 -0.173736 -0.447452 +v 0.030504 -0.184437 -0.443665 +v 0.033894 0.184437 -0.442439 +v 0.066486 0.173736 -0.445048 +v 0.096523 0.156359 -0.447452 +v 0.122850 0.132972 -0.449559 +v 0.144457 0.104475 -0.451289 +v 0.160512 0.071964 -0.452574 +v 0.170398 0.036687 -0.453365 +v 0.173736 0.000000 -0.453632 +v 0.170398 -0.036687 -0.453365 +v 0.160512 -0.071964 -0.452574 +v 0.144457 -0.104475 -0.451289 +v 0.122850 -0.132972 -0.449559 +v 0.096523 -0.156359 -0.447452 +v 0.066486 -0.173736 -0.445048 +v 0.033894 -0.184437 -0.442439 +v 0.035982 0.184437 -0.441109 +v 0.070581 0.173736 -0.442439 +v 0.102468 0.156359 -0.443665 +v 0.130417 0.132972 -0.444739 +v 0.153354 0.104475 -0.445621 +v 0.170398 0.071964 -0.446276 +v 0.180894 0.036687 -0.446679 +v 0.184438 0.000000 -0.446816 +v 0.180894 -0.036687 -0.446679 +v 0.170398 -0.071964 -0.446276 +v 0.153354 -0.104475 -0.445621 +v 0.130417 -0.132972 -0.444739 +v 0.102468 -0.156359 -0.443665 +v 0.070581 -0.173736 -0.442439 +v 0.035982 -0.184437 -0.441109 +v 0.036687 0.184437 -0.439726 +v 0.071964 0.173736 -0.439726 +v 0.104476 0.156359 -0.439726 +v 0.132972 0.132972 -0.439726 +v 0.156359 0.104475 -0.439726 +v 0.173736 0.071964 -0.439726 +v 0.184438 0.036687 -0.439726 +v 0.188051 0.000000 -0.439726 +v 0.184438 -0.036687 -0.439726 +v 0.173736 -0.071964 -0.439726 +v 0.156359 -0.104475 -0.439726 +v 0.132972 -0.132972 -0.439726 +v 0.104476 -0.156359 -0.439726 +v 0.071964 -0.173736 -0.439726 +v 0.036687 -0.184437 -0.439726 +v 0.000000 0.188051 -0.439726 +v -0.036687 0.184437 -0.439726 +v -0.071964 0.173736 -0.439726 +v -0.104475 0.156359 -0.439726 +v -0.132972 0.132972 -0.439726 +v -0.156358 0.104475 -0.439726 +v -0.173736 0.071964 -0.439726 +v -0.184437 0.036687 -0.439726 +v -0.188051 0.000000 -0.439727 +v -0.184437 -0.036687 -0.439726 +v -0.173736 -0.071964 -0.439726 +v -0.156358 -0.104475 -0.439726 +v -0.132972 -0.132972 -0.439726 +v -0.104475 -0.156359 -0.439726 +v -0.071964 -0.173736 -0.439726 +v -0.036687 -0.184437 -0.439726 +v -0.035982 0.184437 -0.441109 +v -0.070581 0.173736 -0.442439 +v -0.102468 0.156359 -0.443665 +v -0.130417 0.132972 -0.444739 +v -0.153354 0.104475 -0.445621 +v -0.170398 0.071964 -0.446276 +v -0.180893 0.036687 -0.446679 +v -0.184437 0.000000 -0.446816 +v -0.180893 -0.036687 -0.446679 +v -0.170398 -0.071964 -0.446276 +v -0.153354 -0.104475 -0.445621 +v -0.130417 -0.132972 -0.444739 +v -0.102468 -0.156359 -0.443665 +v -0.070581 -0.173736 -0.442439 +v -0.035982 -0.184437 -0.441110 +v -0.033894 0.184437 -0.442439 +v -0.066486 0.173736 -0.445048 +v -0.096523 0.156359 -0.447452 +v -0.122850 0.132972 -0.449559 +v -0.144456 0.104475 -0.451289 +v -0.160511 0.071964 -0.452574 +v -0.170398 0.036687 -0.453365 +v -0.173736 0.000000 -0.453632 +v -0.170398 -0.036687 -0.453365 +v -0.160511 -0.071964 -0.452574 +v -0.144456 -0.104475 -0.451289 +v -0.122850 -0.132972 -0.449559 +v -0.096523 -0.156359 -0.447452 +v -0.066486 -0.173736 -0.445048 +v -0.033894 -0.184437 -0.442439 +v -0.030504 0.184437 -0.443665 +v -0.059836 0.173736 -0.447452 +v -0.086868 0.156359 -0.450942 +v -0.110562 0.132972 -0.454002 +v -0.130007 0.104475 -0.456512 +v -0.144456 0.071964 -0.458378 +v -0.153354 0.036687 -0.459527 +v -0.156358 0.000000 -0.459915 +v -0.153354 -0.036687 -0.459527 +v -0.144456 -0.071964 -0.458378 +v -0.130007 -0.104475 -0.456512 +v -0.110562 -0.132972 -0.454002 +v -0.086868 -0.156359 -0.450942 +v -0.059836 -0.173736 -0.447452 +v -0.030504 -0.184437 -0.443665 +v -0.025941 0.184437 -0.444739 +v -0.050886 0.173736 -0.449559 +v -0.073875 0.156359 -0.454002 +v -0.094025 0.132972 -0.457895 +v -0.110562 0.104475 -0.461091 +v -0.122850 0.071964 -0.463465 +v -0.130417 0.036687 -0.464927 +v -0.132972 0.000000 -0.465421 +v -0.130417 -0.036687 -0.464927 +v -0.122850 -0.071964 -0.463465 +v -0.110562 -0.104475 -0.461091 +v -0.094025 -0.132972 -0.457895 +v -0.073875 -0.156359 -0.454002 +v -0.050886 -0.173736 -0.449559 +v -0.025941 -0.184437 -0.444739 +v -0.020382 0.184437 -0.445621 +v -0.039981 0.173736 -0.451289 +v -0.058043 0.156359 -0.456512 +v -0.073875 0.132972 -0.461091 +v -0.086868 0.104475 -0.464848 +v -0.096523 0.071964 -0.467640 +v -0.102468 0.036687 -0.469360 +v -0.104475 0.000000 -0.469940 +v -0.102468 -0.036687 -0.469360 +v -0.096523 -0.071964 -0.467640 +v -0.086868 -0.104475 -0.464848 +v -0.073875 -0.132972 -0.461091 +v -0.058043 -0.156359 -0.456512 +v -0.039981 -0.173736 -0.451289 +v -0.020382 -0.184437 -0.445621 +v -0.014039 0.184437 -0.446276 +v -0.027539 0.173736 -0.452574 +v -0.039981 0.156359 -0.458378 +v -0.050886 0.132972 -0.463465 +v -0.059836 0.104475 -0.467640 +v -0.066486 0.071964 -0.470743 +v -0.070581 0.036687 -0.472653 +v -0.071964 0.000000 -0.473298 +v -0.070581 -0.036687 -0.472653 +v -0.066486 -0.071964 -0.470743 +v -0.059836 -0.104475 -0.467640 +v -0.050886 -0.132972 -0.463465 +v -0.039981 -0.156359 -0.458378 +v -0.027539 -0.173736 -0.452574 +v -0.014039 -0.184437 -0.446276 +v -0.007157 0.184437 -0.446679 +v -0.014039 0.173736 -0.453365 +v -0.020382 0.156359 -0.459527 +v -0.025941 0.132972 -0.464927 +v -0.030504 0.104475 -0.469360 +v -0.033894 0.071964 -0.472653 +v -0.035982 0.036687 -0.474681 +v -0.036687 0.000000 -0.475366 +v -0.035982 -0.036687 -0.474681 +v -0.033894 -0.071964 -0.472653 +v -0.030504 -0.104475 -0.469360 +v -0.025941 -0.132972 -0.464927 +v -0.020382 -0.156359 -0.459527 +v -0.014039 -0.173736 -0.453365 +v -0.007157 -0.184437 -0.446679 +v 0.000000 0.184437 -0.446816 +v 0.000000 0.173736 -0.453632 +v 0.000000 0.156359 -0.459915 +v 0.000000 0.132972 -0.465421 +v 0.000000 0.104475 -0.469940 +v 0.000000 0.071964 -0.473298 +v 0.000000 0.036687 -0.475366 +v 0.000000 0.000000 -0.476064 +v 0.000000 -0.036687 -0.475366 +v 0.000000 -0.071964 -0.473298 +v 0.000000 -0.104475 -0.469940 +v 0.000000 -0.132972 -0.465421 +v 0.000000 -0.156359 -0.459915 +v 0.000000 -0.173736 -0.453632 +v 0.000000 -0.184437 -0.446816 +v -0.413519 0.375000 0.413519 +v -0.437500 0.351019 0.413519 +v -0.413519 0.351019 0.437500 +v -0.425494 0.371796 0.413519 +v -0.413519 0.371796 0.425494 +v -0.424987 0.368684 0.424987 +v -0.434296 0.351019 0.425494 +v -0.434296 0.362994 0.413519 +v -0.431184 0.362487 0.424987 +v -0.413519 0.362994 0.434296 +v -0.425494 0.351019 0.434296 +v -0.424987 0.362487 0.431184 +v -0.437500 0.351019 -0.413519 +v -0.413519 0.375000 -0.413519 +v -0.413519 0.351019 -0.437500 +v -0.434296 0.362994 -0.413519 +v -0.434296 0.351019 -0.425494 +v -0.431184 0.362487 -0.424987 +v -0.413519 0.371796 -0.425494 +v -0.425494 0.371796 -0.413519 +v -0.424987 0.368684 -0.424987 +v -0.425494 0.351019 -0.434296 +v -0.413519 0.362994 -0.434296 +v -0.424987 0.362487 -0.431184 +v -0.437500 -0.375000 -0.413519 +v -0.413519 -0.375000 -0.437500 +v -0.434287 -0.375000 -0.425509 +v -0.425509 -0.375000 -0.434287 +v -0.413519 -0.375000 0.437500 +v -0.437500 -0.375000 0.413519 +v -0.425509 -0.375000 0.434287 +v -0.434287 -0.375000 0.425509 +v 0.437500 0.351019 -0.413519 +v 0.413519 0.351019 -0.437500 +v 0.413519 0.375000 -0.413519 +v 0.434296 0.351019 -0.425494 +v 0.434296 0.362994 -0.413519 +v 0.431184 0.362487 -0.424987 +v 0.413519 0.362994 -0.434296 +v 0.425494 0.351019 -0.434296 +v 0.424987 0.362487 -0.431184 +v 0.425494 0.371796 -0.413519 +v 0.413519 0.371796 -0.425494 +v 0.424987 0.368684 -0.424987 +v 0.413519 -0.375000 -0.437500 +v 0.437500 -0.375000 -0.413519 +v 0.425509 -0.375000 -0.434287 +v 0.434287 -0.375000 -0.425509 +v 0.437500 0.351019 0.413519 +v 0.413519 0.375000 0.413519 +v 0.413519 0.351019 0.437500 +v 0.434296 0.362994 0.413519 +v 0.434296 0.351019 0.425494 +v 0.431184 0.362487 0.424987 +v 0.413519 0.371796 0.425494 +v 0.425494 0.371796 0.413519 +v 0.424987 0.368684 0.424987 +v 0.425494 0.351019 0.434296 +v 0.413519 0.362994 0.434296 +v 0.424987 0.362487 0.431184 +v 0.437500 -0.375000 0.413519 +v 0.413519 -0.375000 0.437500 +v 0.434287 -0.375000 0.425509 +v 0.425509 -0.375000 0.434287 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1450 0.6884 +vt 0.1531 0.6900 +vt 0.1607 0.6932 +vt 0.1675 0.6977 +vt 0.1734 0.7036 +vt 0.1780 0.7104 +vt 0.1811 0.7181 +vt 0.1827 0.7262 +vt 0.1827 0.7344 +vt 0.1811 0.7425 +vt 0.1780 0.7501 +vt 0.1734 0.7570 +vt 0.1675 0.7629 +vt 0.1607 0.7674 +vt 0.1531 0.7706 +vt 0.1450 0.7722 +vt 0.1367 0.7722 +vt 0.1286 0.7706 +vt 0.1210 0.7674 +vt 0.1141 0.7628 +vt 0.1083 0.7570 +vt 0.1037 0.7501 +vt 0.1005 0.7425 +vt 0.0989 0.7344 +vt 0.0989 0.7262 +vt 0.1005 0.7181 +vt 0.1037 0.7104 +vt 0.1083 0.7036 +vt 0.1141 0.6977 +vt 0.1210 0.6932 +vt 0.1286 0.6900 +vt 0.1367 0.6884 +vt 0.0270 0.6932 +vt 0.0202 0.6977 +vt 0.0143 0.7036 +vt 0.0098 0.7104 +vt 0.0066 0.7181 +vt 0.0050 0.7262 +vt 0.0050 0.7344 +vt 0.0066 0.7425 +vt 0.0098 0.7501 +vt 0.0143 0.7570 +vt 0.0202 0.7628 +vt 0.0270 0.7674 +vt 0.0347 0.7706 +vt 0.0428 0.7722 +vt 0.0510 0.7722 +vt 0.0591 0.7706 +vt 0.0667 0.7674 +vt 0.0736 0.7629 +vt 0.0794 0.7570 +vt 0.0840 0.7501 +vt 0.0872 0.7425 +vt 0.0888 0.7344 +vt 0.0888 0.7262 +vt 0.0872 0.7181 +vt 0.0840 0.7104 +vt 0.0794 0.7036 +vt 0.0736 0.6977 +vt 0.0667 0.6932 +vt 0.0591 0.6900 +vt 0.0510 0.6884 +vt 0.0428 0.6884 +vt 0.0347 0.6900 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.1758 0.6995 +vt 0.1794 0.6974 +vt 0.1794 0.6932 +vt 0.1758 0.6911 +vt 0.1722 0.6932 +vt 0.1722 0.6974 +vt 0.7148 0.7617 +vt 0.7148 0.5117 +vt 0.7461 0.5117 +vt 0.7461 0.7617 +vt 0.6211 0.7617 +vt 0.6211 0.5117 +vt 0.6523 0.5117 +vt 0.6523 0.7617 +vt 0.6836 0.7617 +vt 0.6836 0.5117 +vt 0.7148 0.5117 +vt 0.7148 0.7617 +vt 0.6836 0.7617 +vt 0.6523 0.7617 +vt 0.6523 0.5117 +vt 0.9961 0.5117 +vt 0.9961 0.7617 +vt 0.9961 0.2617 +vt 0.9961 0.5117 +vt 0.7461 0.5117 +vt 0.7461 0.2617 +vt 0.2167 0.2484 +vt 0.0099 0.2484 +vt 0.0099 0.0820 +vt 0.2167 0.0820 +vt 0.2167 0.4281 +vt 0.0099 0.4281 +vt 0.0099 0.2617 +vt 0.2167 0.2617 +vt 0.2365 0.2672 +vt 0.4432 0.2672 +vt 0.4432 0.4336 +vt 0.2365 0.4336 +vt 0.6698 0.4281 +vt 0.4630 0.4281 +vt 0.4630 0.2617 +vt 0.6698 0.2617 +vt 0.5858 0.2422 +vt 0.5819 0.2488 +vt 0.5743 0.2488 +vt 0.5705 0.2422 +vt 0.5743 0.2356 +vt 0.5819 0.2356 +vt 0.5858 0.2422 +vt 0.5819 0.2488 +vt 0.5743 0.2488 +vt 0.5705 0.2422 +vt 0.5743 0.2356 +vt 0.5819 0.2356 +vt 0.5858 0.2422 +vt 0.5819 0.2488 +vt 0.5743 0.2488 +vt 0.5705 0.2422 +vt 0.5743 0.2356 +vt 0.5819 0.2356 +vt 0.5858 0.2422 +vt 0.5819 0.2488 +vt 0.5743 0.2488 +vt 0.5705 0.2422 +vt 0.5743 0.2356 +vt 0.5819 0.2356 +vt 0.3458 0.2440 +vt 0.3458 0.0372 +vt 0.5526 0.0372 +vt 0.5526 0.2440 +vt 0.1797 0.9531 +vt 0.1797 0.9766 +vt 0.1719 0.9766 +vt 0.1719 0.9531 +vt 0.1641 0.9766 +vt 0.1641 0.9531 +vt 0.1562 0.9766 +vt 0.1562 0.9531 +vt 0.1875 0.9453 +vt 0.1875 0.9531 +vt 0.1797 0.9453 +vt 0.1953 0.9453 +vt 0.1953 0.9531 +vt 0.2031 0.9453 +vt 0.2031 0.9531 +vt 0.1484 0.9766 +vt 0.1484 0.9531 +vt 0.1719 0.9453 +vt 0.2109 0.9453 +vt 0.2109 0.9531 +vt 0.1406 0.9766 +vt 0.1406 0.9531 +vt 0.1641 0.9453 +vt 0.2188 0.9453 +vt 0.2188 0.9531 +vt 0.1328 0.9766 +vt 0.1328 0.9531 +vt 0.1562 0.9453 +vt 0.1719 0.9883 +vt 0.1719 0.9805 +vt 0.1797 0.9805 +vt 0.1797 0.9883 +vt 0.1953 0.9883 +vt 0.1953 0.9805 +vt 0.2031 0.9805 +vt 0.2031 0.9883 +vt 0.2266 0.9453 +vt 0.2266 0.9531 +vt 0.1641 0.9883 +vt 0.1641 0.9805 +vt 0.1484 0.9453 +vt 0.2109 0.9805 +vt 0.2109 0.9883 +vt 0.2344 0.9453 +vt 0.2344 0.9531 +vt 0.1562 0.9883 +vt 0.1562 0.9805 +vt 0.1406 0.9453 +vt 0.1484 0.9883 +vt 0.1484 0.9805 +vt 0.2422 0.9453 +vt 0.2422 0.9531 +vt 0.1328 0.9883 +vt 0.1328 0.9805 +vt 0.1406 0.9805 +vt 0.1406 0.9883 +vt 0.1328 0.9453 +vt 0.2188 0.9805 +vt 0.2188 0.9883 +vt 0.2500 0.9453 +vt 0.2500 0.9531 +vt 0.1250 0.9883 +vt 0.1250 0.9805 +vt 0.1250 0.9453 +vt 0.1250 0.9531 +vt 0.2266 0.9805 +vt 0.2266 0.9883 +vt 0.0078 0.9453 +vt 0.0078 0.9531 +vt 0.0000 0.9531 +vt 0.0000 0.9453 +vt 0.1172 0.9883 +vt 0.1172 0.9805 +vt 0.1016 0.9531 +vt 0.1016 0.9766 +vt 0.0938 0.9766 +vt 0.0938 0.9531 +vt 0.1172 0.9453 +vt 0.1172 0.9531 +vt 0.2344 0.9805 +vt 0.2344 0.9883 +vt 0.0156 0.9453 +vt 0.0156 0.9531 +vt 0.1094 0.9883 +vt 0.1094 0.9805 +vt 0.1094 0.9453 +vt 0.1094 0.9531 +vt 0.2422 0.9805 +vt 0.2422 0.9883 +vt 0.0234 0.9453 +vt 0.0234 0.9531 +vt 0.1016 0.9883 +vt 0.1016 0.9805 +vt 0.1016 0.9453 +vt 0.0000 0.9883 +vt 0.0000 0.9805 +vt 0.0078 0.9805 +vt 0.0078 0.9883 +vt 0.0312 0.9453 +vt 0.0312 0.9531 +vt 0.2500 0.9805 +vt 0.2500 0.9883 +vt 0.0938 0.9453 +vt 0.0156 0.9805 +vt 0.0156 0.9883 +vt 0.1875 0.9805 +vt 0.1875 0.9883 +vt 0.0391 0.9453 +vt 0.0391 0.9531 +vt 0.0938 0.9883 +vt 0.0938 0.9805 +vt 0.0703 0.9531 +vt 0.0703 0.9766 +vt 0.0625 0.9766 +vt 0.0625 0.9531 +vt 0.0859 0.9453 +vt 0.0859 0.9531 +vt 0.0234 0.9805 +vt 0.0234 0.9883 +vt 0.0469 0.9453 +vt 0.0469 0.9531 +vt 0.0859 0.9883 +vt 0.0859 0.9805 +vt 0.0781 0.9453 +vt 0.0781 0.9531 +vt 0.0312 0.9805 +vt 0.0312 0.9883 +vt 0.0547 0.9453 +vt 0.0547 0.9531 +vt 0.0781 0.9883 +vt 0.0781 0.9805 +vt 0.0703 0.9453 +vt 0.0391 0.9805 +vt 0.0391 0.9883 +vt 0.0625 0.9453 +vt 0.0703 0.9883 +vt 0.0703 0.9805 +vt 0.0625 0.9883 +vt 0.0625 0.9805 +vt 0.0469 0.9805 +vt 0.0469 0.9883 +vt 0.0547 0.9883 +vt 0.0547 0.9805 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.1680 0.6876 +vt 0.1680 0.6837 +vt 0.1719 0.6837 +vt 0.1719 0.6876 +vt 0.1641 0.6876 +vt 0.1641 0.6837 +vt 0.1758 0.6837 +vt 0.1758 0.6876 +vt 0.1797 0.6837 +vt 0.1797 0.6876 +vt 0.1563 0.6876 +vt 0.1563 0.6837 +vt 0.1602 0.6837 +vt 0.1602 0.6876 +vt 0.2031 0.9766 +vt 0.1953 0.9766 +vt 0.0156 0.9766 +vt 0.0078 0.9766 +vt 0.0547 0.9766 +vt 0.1250 0.9766 +vt 0.2422 0.9766 +vt 0.2344 0.9766 +vt 0.1172 0.9766 +vt 0.0859 0.9766 +vt 0.0781 0.9766 +vt 0.1875 0.9766 +vt 0.2188 0.9766 +vt 0.2109 0.9766 +vt 0.2500 0.9766 +vt 0.0469 0.9766 +vt 0.0391 0.9766 +vt 0.0000 0.9766 +vt 0.2266 0.9766 +vt 0.1094 0.9766 +vt 0.0312 0.9766 +vt 0.0234 0.9766 +vt 0.6211 0.2461 +vt 0.6211 0.2500 +vt 0.6289 0.2500 +vt 0.6289 0.2461 +vt 0.6211 0.2461 +vt 0.6211 0.2500 +vt 0.6289 0.2500 +vt 0.6289 0.2461 +vt 0.6367 0.2461 +vt 0.6367 0.2500 +vt 0.6445 0.2500 +vt 0.6445 0.2461 +vt 0.6367 0.2461 +vt 0.6367 0.2500 +vt 0.6445 0.2500 +vt 0.6445 0.2461 +vt 0.6055 0.2461 +vt 0.6055 0.2500 +vt 0.6133 0.2500 +vt 0.6133 0.2461 +vt 0.6055 0.2461 +vt 0.6055 0.2500 +vt 0.6133 0.2500 +vt 0.6133 0.2461 +vt 0.5977 0.2461 +vt 0.5977 0.2500 +vt 0.5977 0.2461 +vt 0.5977 0.2500 +vt 0.6055 0.2500 +vt 0.6055 0.2461 +vt 0.6289 0.2461 +vt 0.6289 0.2500 +vt 0.6367 0.2500 +vt 0.6367 0.2461 +vt 0.6133 0.2461 +vt 0.6133 0.2500 +vt 0.6211 0.2500 +vt 0.6211 0.2461 +vt 0.6367 0.2461 +vt 0.6367 0.2500 +vt 0.6445 0.2500 +vt 0.6445 0.2461 +vt 0.6055 0.2461 +vt 0.6055 0.2500 +vt 0.6289 0.2500 +vt 0.6289 0.2461 +vt 0.6133 0.2461 +vt 0.6133 0.2500 +vt 0.6211 0.2500 +vt 0.6211 0.2461 +vt 0.6445 0.2500 +vt 0.6445 0.2461 +vt 0.5977 0.2461 +vt 0.5977 0.2500 +vt 0.2813 0.1866 +vt 0.2813 0.1947 +vt 0.2730 0.1947 +vt 0.2735 0.1866 +vt 0.2813 0.2390 +vt 0.2813 0.2430 +vt 0.2780 0.2430 +vt 0.2766 0.2390 +vt 0.2813 0.1792 +vt 0.2743 0.1792 +vt 0.2813 0.2336 +vt 0.2753 0.2336 +vt 0.2813 0.1727 +vt 0.2753 0.1727 +vt 0.2813 0.2271 +vt 0.2743 0.2271 +vt 0.2813 0.1673 +vt 0.2766 0.1673 +vt 0.2813 0.2196 +vt 0.2735 0.2196 +vt 0.2813 0.1633 +vt 0.2780 0.1633 +vt 0.2813 0.2116 +vt 0.2730 0.2116 +vt 0.2813 0.1609 +vt 0.2796 0.1609 +vt 0.2813 0.2031 +vt 0.2728 0.2031 +vt 0.2813 0.2454 +vt 0.2813 0.2463 +vt 0.2796 0.2454 +vt 0.2813 0.1600 +vt 0.2780 0.1609 +vt 0.2648 0.2031 +vt 0.2651 0.1947 +vt 0.2780 0.2454 +vt 0.2749 0.2430 +vt 0.2660 0.1866 +vt 0.2721 0.2390 +vt 0.2675 0.1792 +vt 0.2696 0.2336 +vt 0.2696 0.1727 +vt 0.2675 0.2271 +vt 0.2721 0.1673 +vt 0.2660 0.2196 +vt 0.2749 0.1633 +vt 0.2651 0.2116 +vt 0.2643 0.1727 +vt 0.2679 0.1673 +vt 0.2613 0.2271 +vt 0.2591 0.2196 +vt 0.2721 0.1633 +vt 0.2578 0.2116 +vt 0.2766 0.1609 +vt 0.2573 0.2031 +vt 0.2766 0.2454 +vt 0.2578 0.1947 +vt 0.2721 0.2430 +vt 0.2591 0.1866 +vt 0.2679 0.2390 +vt 0.2613 0.1792 +vt 0.2643 0.2336 +vt 0.2753 0.2454 +vt 0.2696 0.2430 +vt 0.2514 0.1947 +vt 0.2531 0.1866 +vt 0.2643 0.2390 +vt 0.2559 0.1792 +vt 0.2597 0.2336 +vt 0.2597 0.1727 +vt 0.2559 0.2271 +vt 0.2643 0.1673 +vt 0.2531 0.2196 +vt 0.2696 0.1633 +vt 0.2514 0.2116 +vt 0.2753 0.1609 +vt 0.2508 0.2031 +vt 0.2514 0.2271 +vt 0.2481 0.2196 +vt 0.2613 0.1673 +vt 0.2675 0.1633 +vt 0.2461 0.2116 +vt 0.2743 0.1609 +vt 0.2454 0.2031 +vt 0.2743 0.2454 +vt 0.2461 0.1947 +vt 0.2675 0.2430 +vt 0.2481 0.1866 +vt 0.2613 0.2390 +vt 0.2514 0.1792 +vt 0.2559 0.2336 +vt 0.2559 0.1727 +vt 0.2422 0.1947 +vt 0.2445 0.1866 +vt 0.2660 0.2430 +vt 0.2591 0.2390 +vt 0.2481 0.1792 +vt 0.2531 0.2336 +vt 0.2531 0.1727 +vt 0.2481 0.2271 +vt 0.2591 0.1673 +vt 0.2445 0.2196 +vt 0.2660 0.1633 +vt 0.2422 0.2116 +vt 0.2735 0.1609 +vt 0.2414 0.2031 +vt 0.2735 0.2454 +vt 0.2578 0.1673 +vt 0.2651 0.1633 +vt 0.2422 0.2196 +vt 0.2398 0.2116 +vt 0.2730 0.1609 +vt 0.2390 0.2031 +vt 0.2730 0.2454 +vt 0.2398 0.1947 +vt 0.2651 0.2430 +vt 0.2422 0.1866 +vt 0.2578 0.2390 +vt 0.2461 0.1792 +vt 0.2514 0.2336 +vt 0.2514 0.1727 +vt 0.2461 0.2271 +vt 0.2648 0.2430 +vt 0.2573 0.2390 +vt 0.2414 0.1866 +vt 0.2454 0.1792 +vt 0.2508 0.2336 +vt 0.2508 0.1727 +vt 0.2454 0.2271 +vt 0.2573 0.1673 +vt 0.2414 0.2196 +vt 0.2648 0.1633 +vt 0.2390 0.2116 +vt 0.2728 0.1609 +vt 0.2381 0.2031 +vt 0.2728 0.2454 +vt 0.2390 0.1947 +vt 0.3117 0.1727 +vt 0.3171 0.1792 +vt 0.3164 0.1792 +vt 0.3112 0.1727 +vt 0.3171 0.2271 +vt 0.3117 0.2336 +vt 0.3112 0.2336 +vt 0.3164 0.2271 +vt 0.3052 0.1673 +vt 0.3047 0.1673 +vt 0.3211 0.2196 +vt 0.3203 0.2196 +vt 0.2978 0.1633 +vt 0.2974 0.1633 +vt 0.3235 0.2116 +vt 0.3227 0.2116 +vt 0.2897 0.1609 +vt 0.2895 0.1609 +vt 0.3244 0.2031 +vt 0.3235 0.2031 +vt 0.2897 0.2454 +vt 0.2895 0.2454 +vt 0.3235 0.1947 +vt 0.3227 0.1947 +vt 0.2978 0.2430 +vt 0.2974 0.2430 +vt 0.3211 0.1866 +vt 0.3203 0.1866 +vt 0.3052 0.2390 +vt 0.3047 0.2390 +vt 0.2890 0.2454 +vt 0.2890 0.1609 +vt 0.3211 0.2031 +vt 0.3203 0.1947 +vt 0.2965 0.2430 +vt 0.3181 0.1866 +vt 0.3034 0.2390 +vt 0.3144 0.1792 +vt 0.3094 0.2336 +vt 0.3094 0.1727 +vt 0.3144 0.2271 +vt 0.3034 0.1673 +vt 0.3181 0.2196 +vt 0.2965 0.1633 +vt 0.3203 0.2116 +vt 0.3066 0.2336 +vt 0.3111 0.2271 +vt 0.3066 0.1727 +vt 0.3012 0.1673 +vt 0.3144 0.2196 +vt 0.2950 0.1633 +vt 0.3164 0.2116 +vt 0.2883 0.1609 +vt 0.3171 0.2031 +vt 0.2883 0.2454 +vt 0.3164 0.1947 +vt 0.2950 0.2430 +vt 0.3144 0.1866 +vt 0.3012 0.2390 +vt 0.3111 0.1792 +vt 0.3117 0.2031 +vt 0.3112 0.1947 +vt 0.2872 0.2454 +vt 0.2929 0.2430 +vt 0.3094 0.1866 +vt 0.2982 0.2390 +vt 0.3066 0.1792 +vt 0.3028 0.2336 +vt 0.3028 0.1727 +vt 0.3066 0.2271 +vt 0.2982 0.1673 +vt 0.3094 0.2196 +vt 0.2929 0.1633 +vt 0.3112 0.2116 +vt 0.2872 0.1609 +vt 0.2982 0.1727 +vt 0.2946 0.1673 +vt 0.3012 0.2271 +vt 0.3034 0.2196 +vt 0.2904 0.1633 +vt 0.3047 0.2116 +vt 0.2859 0.1609 +vt 0.3052 0.2031 +vt 0.2859 0.2454 +vt 0.3047 0.1947 +vt 0.2904 0.2430 +vt 0.3034 0.1866 +vt 0.2946 0.2390 +vt 0.3012 0.1792 +vt 0.2982 0.2336 +vt 0.2974 0.1947 +vt 0.2965 0.1866 +vt 0.2876 0.2430 +vt 0.2904 0.2390 +vt 0.2950 0.1792 +vt 0.2929 0.2336 +vt 0.2929 0.1727 +vt 0.2950 0.2271 +vt 0.2904 0.1673 +vt 0.2965 0.2196 +vt 0.2876 0.1633 +vt 0.2974 0.2116 +vt 0.2845 0.1609 +vt 0.2978 0.2031 +vt 0.2845 0.2454 +vt 0.2859 0.1673 +vt 0.2845 0.1633 +vt 0.2890 0.2196 +vt 0.2895 0.2116 +vt 0.2829 0.1609 +vt 0.2897 0.2031 +vt 0.2829 0.2454 +vt 0.2895 0.1947 +vt 0.2845 0.2430 +vt 0.2890 0.1866 +vt 0.2859 0.2390 +vt 0.2883 0.1792 +vt 0.2872 0.2336 +vt 0.2872 0.1727 +vt 0.2883 0.2271 +vt 0.5977 0.2461 +vt 0.5977 0.2500 +vt 0.5556 0.2440 +vt 0.5555 0.2469 +vt 0.5526 0.2470 +vt 0.5586 0.2440 +vt 0.5586 0.2469 +vt 0.2335 0.2672 +vt 0.2336 0.2646 +vt 0.2365 0.2645 +vt 0.2305 0.2672 +vt 0.2305 0.2646 +vt 0.4630 0.4308 +vt 0.4602 0.4307 +vt 0.4600 0.4281 +vt 0.4630 0.4336 +vt 0.4602 0.4336 +vt 0.5555 0.2500 +vt 0.4432 0.2645 +vt 0.4461 0.2646 +vt 0.4462 0.2672 +vt 0.4432 0.4312 +vt 0.4432 0.4284 +vt 0.4461 0.4284 +vt 0.4461 0.4313 +vt 0.5526 0.0343 +vt 0.5555 0.0344 +vt 0.5556 0.0372 +vt 0.5526 0.0312 +vt 0.5555 0.0312 +vt 0.2197 0.2484 +vt 0.2195 0.2510 +vt 0.2167 0.2511 +vt 0.2227 0.2484 +vt 0.2227 0.2510 +vt 0.4492 0.4313 +vt 0.2197 0.4281 +vt 0.2195 0.4307 +vt 0.2167 0.4308 +vt 0.2227 0.4281 +vt 0.2227 0.4307 +vt 0.0099 0.2511 +vt 0.0070 0.2510 +vt 0.0069 0.2484 +vt 0.2203 0.0844 +vt 0.2203 0.0871 +vt 0.2174 0.0871 +vt 0.2174 0.0843 +vt 0.3428 0.0372 +vt 0.3430 0.0344 +vt 0.3458 0.0343 +vt 0.3398 0.0372 +vt 0.3398 0.0344 +vt 0.2178 0.2623 +vt 0.2210 0.2623 +vt 0.2178 0.2651 +vt 0.0099 0.4308 +vt 0.0070 0.4307 +vt 0.0069 0.4281 +vt 0.0099 0.4336 +vt 0.0070 0.4336 +vt 0.3458 0.2470 +vt 0.3430 0.2469 +vt 0.3428 0.2440 +vt 0.3458 0.2500 +vt 0.3430 0.2500 +vt 0.6728 0.4281 +vt 0.6727 0.4307 +vt 0.6698 0.4308 +vt 0.6758 0.4281 +vt 0.6758 0.4307 +vt 0.0039 0.4307 +vt 0.2197 0.2617 +vt 0.2227 0.2617 +vt 0.0069 0.0820 +vt 0.6728 0.2617 +vt 0.6758 0.2617 +vt 0.0069 0.2617 +vt 0.6698 0.4336 +vt 0.2197 0.0820 +vt 0.2227 0.0820 +vt 0.4462 0.4336 +vt 0.3458 0.0312 +vt 0.3398 0.2440 +vt 0.2335 0.4336 +vt 0.2305 0.4336 +vt 0.4600 0.2617 +vt 0.5586 0.0372 +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 +vn 1.0000 0.0000 0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.2886 -0.1087 0.9513 +vn 0.2903 0.0000 0.9569 +vn 0.4714 0.0000 0.8819 +vn 0.4686 -0.1087 0.8767 +vn 0.6344 0.0000 0.7730 +vn 0.6306 -0.1087 0.7684 +vn 0.7730 0.0000 0.6344 +vn 0.7684 -0.1087 0.6306 +vn 0.0957 -0.2147 0.9720 +vn 0.0974 -0.1087 0.9893 +vn 0.2835 -0.2147 0.9346 +vn -0.0957 -0.2147 0.9720 +vn -0.0974 -0.1087 0.9893 +vn -0.2835 -0.2147 0.9346 +vn -0.2886 -0.1087 0.9513 +vn 0.8819 0.0000 0.4714 +vn 0.8767 -0.1087 0.4686 +vn 0.4604 -0.2147 0.8614 +vn -0.4604 -0.2147 0.8614 +vn -0.4686 -0.1087 0.8767 +vn 0.9569 0.0000 0.2903 +vn 0.9513 -0.1087 0.2886 +vn 0.6196 -0.2147 0.7550 +vn -0.6196 -0.2147 0.7550 +vn -0.6306 -0.1087 0.7684 +vn 0.9952 0.0000 0.0980 +vn 0.9893 -0.1087 0.0974 +vn 0.7550 -0.2147 0.6196 +vn -0.5626 -0.6857 0.4617 +vn -0.5626 0.6857 0.4617 +vn -0.6419 0.6857 0.3431 +vn -0.6419 -0.6857 0.3431 +vn -0.7244 -0.6857 0.0713 +vn -0.7244 0.6857 0.0713 +vn -0.7244 0.6857 -0.0713 +vn -0.7244 -0.6857 -0.0713 +vn -0.7550 -0.2147 0.6196 +vn -0.7684 -0.1087 0.6306 +vn -0.4617 -0.6857 0.5626 +vn -0.4617 0.6857 0.5626 +vn 0.8614 -0.2147 0.4604 +vn -0.6965 0.6857 -0.2113 +vn -0.6965 -0.6857 -0.2113 +vn -0.8614 -0.2147 0.4604 +vn -0.8767 -0.1087 0.4686 +vn -0.3431 -0.6857 0.6419 +vn -0.3431 0.6857 0.6419 +vn 0.9346 -0.2147 0.2835 +vn -0.2113 -0.6857 0.6965 +vn -0.2113 0.6857 0.6965 +vn -0.9346 -0.2147 0.2835 +vn -0.9513 -0.1087 0.2886 +vn 0.0713 -0.6857 0.7244 +vn 0.0713 0.6857 0.7244 +vn -0.0713 0.6857 0.7244 +vn -0.0713 -0.6857 0.7244 +vn 0.9720 -0.2147 0.0957 +vn -0.6419 0.6857 -0.3431 +vn -0.6419 -0.6857 -0.3431 +vn -0.9720 -0.2147 0.0957 +vn -0.9893 -0.1087 0.0974 +vn 0.2113 -0.6857 0.6965 +vn 0.2113 0.6857 0.6965 +vn 0.9720 -0.2147 -0.0957 +vn 0.9893 -0.1087 -0.0974 +vn -0.5626 0.6857 -0.4617 +vn -0.5626 -0.6857 -0.4617 +vn -0.9720 -0.2147 -0.0957 +vn -0.9893 -0.1087 -0.0974 +vn 0.3431 -0.6857 0.6419 +vn 0.3431 0.6857 0.6419 +vn 0.7684 -0.1087 -0.6306 +vn 0.7730 0.0000 -0.6344 +vn 0.6344 0.0000 -0.7730 +vn 0.6306 -0.1087 -0.7684 +vn 0.9346 -0.2147 -0.2835 +vn 0.9513 -0.1087 -0.2886 +vn -0.4617 0.6857 -0.5626 +vn -0.4617 -0.6857 -0.5626 +vn -0.9346 -0.2147 -0.2835 +vn -0.9513 -0.1087 -0.2886 +vn 0.4617 -0.6857 0.5626 +vn 0.4617 0.6857 0.5626 +vn 0.8614 -0.2147 -0.4604 +vn 0.8767 -0.1087 -0.4686 +vn -0.3431 0.6857 -0.6419 +vn -0.3431 -0.6857 -0.6419 +vn -0.8614 -0.2147 -0.4604 +vn -0.8767 -0.1087 -0.4686 +vn 0.5626 -0.6857 0.4617 +vn 0.5626 0.6857 0.4617 +vn 0.7550 -0.2147 -0.6196 +vn -0.2113 -0.6857 -0.6965 +vn -0.2113 0.6857 -0.6965 +vn -0.0713 0.6857 -0.7244 +vn -0.0713 -0.6857 -0.7244 +vn -0.7550 -0.2147 -0.6196 +vn -0.7684 -0.1087 -0.6306 +vn 0.6196 -0.2147 -0.7550 +vn 0.0713 0.6857 -0.7244 +vn 0.0713 -0.6857 -0.7244 +vn -0.6965 0.6857 0.2113 +vn -0.6965 -0.6857 0.2113 +vn -0.6196 -0.2147 -0.7550 +vn -0.6306 -0.1087 -0.7684 +vn 0.6419 -0.6857 0.3431 +vn 0.6419 0.6857 0.3431 +vn 0.0974 -0.1087 -0.9893 +vn 0.0980 0.0000 -0.9952 +vn -0.0980 0.0000 -0.9952 +vn -0.0974 -0.1087 -0.9893 +vn 0.4604 -0.2147 -0.8614 +vn 0.4686 -0.1087 -0.8767 +vn 0.2113 0.6857 -0.6965 +vn 0.2113 -0.6857 -0.6965 +vn -0.4604 -0.2147 -0.8614 +vn -0.4686 -0.1087 -0.8767 +vn 0.6965 -0.6857 0.2113 +vn 0.6965 0.6857 0.2113 +vn 0.2835 -0.2147 -0.9346 +vn 0.2886 -0.1087 -0.9513 +vn 0.3431 0.6857 -0.6419 +vn 0.3431 -0.6857 -0.6419 +vn -0.2835 -0.2147 -0.9346 +vn -0.2886 -0.1087 -0.9513 +vn 0.7244 -0.6857 0.0713 +vn 0.7244 0.6857 0.0713 +vn 0.0957 -0.2147 -0.9720 +vn 0.4617 0.6857 -0.5626 +vn 0.4617 -0.6857 -0.5626 +vn -0.0957 -0.2147 -0.9720 +vn 0.7244 -0.6857 -0.0713 +vn 0.7244 0.6857 -0.0713 +vn 0.6965 -0.6857 -0.2113 +vn 0.6965 0.6857 -0.2113 +vn 0.5626 0.6857 -0.4617 +vn 0.5626 -0.6857 -0.4617 +vn 0.6419 -0.6857 -0.3431 +vn 0.6419 0.6857 -0.3431 +vn -0.3032 -0.6100 -0.7321 +vn -0.3827 0.0000 -0.9239 +vn 0.6088 0.0000 -0.7933 +vn 0.4824 -0.6100 -0.6287 +vn -0.7856 -0.6100 -0.1034 +vn -0.9914 0.0000 -0.1305 +vn 0.9914 0.0000 0.1305 +vn 0.7856 -0.6100 0.1034 +vn 0.3827 0.0000 0.9239 +vn 0.3032 -0.6100 0.7321 +vn -0.6088 0.0000 0.7933 +vn -0.4824 -0.6100 0.6287 +vn -0.7321 -0.6100 -0.3032 +vn -0.9239 0.0000 -0.3827 +vn -0.1305 0.0000 -0.9914 +vn -0.1034 -0.6100 -0.7856 +vn -0.6287 -0.6100 0.4824 +vn -0.7933 0.0000 0.6088 +vn 0.7933 0.0000 -0.6088 +vn 0.6287 -0.6100 -0.4824 +vn 0.9239 0.0000 0.3827 +vn 0.7321 -0.6100 0.3032 +vn 0.1305 0.0000 0.9914 +vn 0.1034 -0.6100 0.7856 +vn -0.7321 -0.6100 0.3032 +vn -0.9239 0.0000 0.3827 +vn -0.7933 0.0000 -0.6088 +vn -0.6287 -0.6100 -0.4824 +vn -0.1034 -0.6100 0.7856 +vn -0.1305 0.0000 0.9914 +vn 0.1305 0.0000 -0.9914 +vn 0.1034 -0.6100 -0.7856 +vn 0.9239 0.0000 -0.3827 +vn 0.7321 -0.6100 -0.3032 +vn 0.7933 0.0000 0.6088 +vn 0.6287 -0.6100 0.4824 +vn -0.3032 -0.6100 0.7321 +vn -0.3827 0.0000 0.9239 +vn -0.9914 0.0000 0.1305 +vn -0.7856 -0.6100 0.1034 +vn 0.4824 -0.6100 0.6287 +vn 0.6088 0.0000 0.7933 +vn -0.6088 0.0000 -0.7933 +vn -0.4824 -0.6100 -0.6287 +vn 0.3827 0.0000 -0.9239 +vn 0.3032 -0.6100 -0.7321 +vn 0.9914 0.0000 -0.1305 +vn 0.7856 -0.6100 -0.1034 +vn -0.5603 -0.6100 -0.5603 +vn -0.7071 0.0000 -0.7071 +vn 0.2588 0.0000 -0.9659 +vn 0.2051 -0.6100 -0.7654 +vn -0.7654 -0.6100 0.2051 +vn -0.9659 0.0000 0.2588 +vn 0.9659 0.0000 -0.2588 +vn 0.7654 -0.6100 -0.2051 +vn 0.7071 0.0000 0.7071 +vn 0.5603 -0.6100 0.5603 +vn -0.2588 0.0000 0.9659 +vn -0.2051 -0.6100 0.7654 +vn -0.7924 -0.6100 0.0000 +vn -0.5000 0.0000 -0.8660 +vn -0.3962 -0.6100 -0.6862 +vn -0.3962 -0.6100 0.6862 +vn -0.5000 0.0000 0.8660 +vn 0.5000 0.0000 -0.8660 +vn 0.3962 -0.6100 -0.6862 +vn 0.7924 -0.6100 0.0000 +vn 0.5000 0.0000 0.8660 +vn 0.3962 -0.6100 0.6862 +vn -0.5603 -0.6100 0.5603 +vn -0.7071 0.0000 0.7071 +vn -0.9659 0.0000 -0.2588 +vn -0.7654 -0.6100 -0.2051 +vn 0.2051 -0.6100 0.7654 +vn 0.2588 0.0000 0.9659 +vn -0.2588 0.0000 -0.9659 +vn -0.2051 -0.6100 -0.7654 +vn 0.7071 0.0000 -0.7071 +vn 0.5603 -0.6100 -0.5603 +vn 0.9659 0.0000 0.2588 +vn 0.7654 -0.6100 0.2051 +vn 0.0000 -0.6100 0.7924 +vn -0.8660 0.0000 0.5000 +vn -0.6862 -0.6100 0.3962 +vn 0.6862 -0.6100 0.3962 +vn 0.8660 0.0000 0.5000 +vn -0.8660 0.0000 -0.5000 +vn -0.6862 -0.6100 -0.3962 +vn 0.0000 -0.6100 -0.7924 +vn 0.8660 0.0000 -0.5000 +vn 0.6862 -0.6100 -0.3962 +vn -0.2903 0.0000 0.9569 +vn -0.0980 0.0000 0.9952 +vn -0.9569 0.0000 -0.2903 +vn -0.9952 0.0000 -0.0980 +vn -0.2903 0.0000 -0.9569 +vn 0.9952 0.0000 -0.0980 +vn -0.9569 0.0000 0.2903 +vn -0.8819 0.0000 0.4714 +vn 0.9569 0.0000 -0.2903 +vn 0.4714 0.0000 -0.8819 +vn 0.2903 0.0000 -0.9569 +vn 0.0980 0.0000 0.9952 +vn -0.6344 0.0000 0.7730 +vn -0.4714 0.0000 0.8819 +vn -0.9952 0.0000 0.0980 +vn -0.4714 0.0000 -0.8819 +vn -0.6344 0.0000 -0.7730 +vn -0.7730 0.0000 0.6344 +vn 0.8819 0.0000 -0.4714 +vn -0.7730 0.0000 -0.6344 +vn -0.8819 0.0000 -0.4714 +vn -0.7924 0.6100 0.0000 +vn -0.3962 0.6100 0.6862 +vn 0.3962 0.6100 0.6862 +vn 0.7924 0.6100 0.0000 +vn 0.3962 0.6100 -0.6862 +vn -0.3962 0.6100 -0.6862 +vn 0.0000 -0.0806 -0.9967 +vn 0.0000 -0.0388 -0.9992 +vn 0.0390 -0.0395 -0.9984 +vn 0.0389 -0.0822 -0.9958 +vn 0.0000 0.2849 -0.9586 +vn 0.0000 0.4407 -0.8976 +vn 0.0352 0.4479 -0.8933 +vn 0.0376 0.2901 -0.9562 +vn 0.0000 -0.1297 -0.9915 +vn 0.0387 -0.1322 -0.9904 +vn 0.0000 0.1929 -0.9812 +vn 0.0384 0.1966 -0.9797 +vn 0.0000 -0.1929 -0.9812 +vn 0.0384 -0.1966 -0.9797 +vn 0.0000 0.1297 -0.9915 +vn 0.0387 0.1322 -0.9904 +vn 0.0000 -0.2849 -0.9586 +vn 0.0376 -0.2901 -0.9562 +vn 0.0000 0.0806 -0.9967 +vn 0.0389 0.0822 -0.9958 +vn 0.0000 -0.4407 -0.8976 +vn 0.0352 -0.4479 -0.8933 +vn 0.0000 0.0388 -0.9992 +vn 0.0390 0.0395 -0.9984 +vn 0.0000 -0.7385 -0.6742 +vn 0.0252 -0.7442 -0.6675 +vn 0.0390 0.0000 -0.9992 +vn 0.0000 0.7385 -0.6742 +vn 0.0000 0.9114 -0.4114 +vn 0.0252 0.7442 -0.6675 +vn 0.0000 -0.9114 -0.4114 +vn 0.0505 -0.7602 -0.6477 +vn 0.0811 0.0000 -0.9967 +vn 0.0811 -0.0419 -0.9958 +vn 0.0505 0.7602 -0.6477 +vn 0.0718 0.4696 -0.8799 +vn 0.0809 -0.0872 -0.9929 +vn 0.0776 0.3066 -0.9486 +vn 0.0805 -0.1402 -0.9868 +vn 0.0796 0.2083 -0.9748 +vn 0.0796 -0.2083 -0.9748 +vn 0.0805 0.1402 -0.9868 +vn 0.0776 -0.3066 -0.9486 +vn 0.0809 0.0872 -0.9929 +vn 0.0718 -0.4696 -0.8799 +vn 0.0811 0.0419 -0.9958 +vn 0.1273 -0.2303 -0.9647 +vn 0.1232 -0.3369 -0.9334 +vn 0.1292 0.1554 -0.9793 +vn 0.1301 0.0968 -0.9868 +vn 0.1121 -0.5075 -0.8543 +vn 0.1305 0.0466 -0.9903 +vn 0.0768 -0.7862 -0.6132 +vn 0.1306 0.0000 -0.9914 +vn 0.0768 0.7862 -0.6132 +vn 0.1305 -0.0466 -0.9903 +vn 0.1121 0.5075 -0.8543 +vn 0.1301 -0.0968 -0.9868 +vn 0.1232 0.3369 -0.9334 +vn 0.1292 -0.1554 -0.9793 +vn 0.1273 0.2303 -0.9647 +vn 0.1045 0.8216 -0.5603 +vn 0.1586 0.5650 -0.8097 +vn 0.1943 -0.0546 -0.9794 +vn 0.1933 -0.1133 -0.9745 +vn 0.1790 0.3862 -0.9048 +vn 0.1914 -0.1814 -0.9646 +vn 0.1874 0.2674 -0.9452 +vn 0.1874 -0.2674 -0.9452 +vn 0.1914 0.1814 -0.9646 +vn 0.1790 -0.3862 -0.9048 +vn 0.1933 0.1133 -0.9745 +vn 0.1586 -0.5650 -0.8097 +vn 0.1943 0.0546 -0.9794 +vn 0.1045 -0.8216 -0.5603 +vn 0.1945 0.0000 -0.9809 +vn 0.2799 0.2264 -0.9330 +vn 0.2846 0.1423 -0.9480 +vn 0.2526 -0.4641 -0.8490 +vn 0.2144 -0.6461 -0.7325 +vn 0.2870 0.0688 -0.9554 +vn 0.1338 -0.8650 -0.4834 +vn 0.2877 0.0000 -0.9577 +vn 0.1338 0.8650 -0.4834 +vn 0.2870 -0.0688 -0.9554 +vn 0.2144 0.6461 -0.7325 +vn 0.2846 -0.1423 -0.9480 +vn 0.2526 0.4641 -0.8489 +vn 0.2799 -0.2264 -0.9330 +vn 0.2708 0.3294 -0.9045 +vn 0.2708 -0.3294 -0.9045 +vn 0.4439 -0.0960 -0.8909 +vn 0.4366 -0.1967 -0.8779 +vn 0.2817 0.7502 -0.5981 +vn 0.3545 0.5826 -0.7313 +vn 0.4224 -0.3076 -0.8526 +vn 0.3974 0.4345 -0.8082 +vn 0.3974 -0.4345 -0.8082 +vn 0.4224 0.3076 -0.8526 +vn 0.3545 -0.5826 -0.7313 +vn 0.4366 0.1967 -0.8779 +vn 0.2817 -0.7502 -0.5981 +vn 0.4439 0.0960 -0.8909 +vn 0.1648 -0.9124 -0.3745 +vn 0.4462 0.0000 -0.8949 +vn 0.1648 0.9124 -0.3745 +vn 0.4871 -0.7329 -0.4748 +vn 0.3580 -0.8586 -0.3668 +vn 0.7091 0.2977 -0.6392 +vn 0.7376 0.1488 -0.6586 +vn 0.1986 -0.9549 -0.2206 +vn 0.7469 0.0000 -0.6648 +vn 0.1986 0.9549 -0.2206 +vn 0.7376 -0.1488 -0.6586 +vn 0.3580 0.8586 -0.3668 +vn 0.7091 -0.2977 -0.6392 +vn 0.4871 0.7329 -0.4748 +vn 0.6596 -0.4463 -0.6047 +vn 0.5867 0.5928 -0.5517 +vn 0.5867 -0.5928 -0.5517 +vn 0.6596 0.4463 -0.6047 +vn 0.3986 0.8943 -0.2031 +vn 0.5518 0.7851 -0.2812 +vn 0.8388 -0.3371 -0.4275 +vn 0.7721 -0.4989 -0.3935 +vn 0.6767 0.6504 -0.3449 +vn 0.6767 -0.6504 -0.3449 +vn 0.7721 0.4989 -0.3935 +vn 0.5518 -0.7851 -0.2812 +vn 0.8388 0.3371 -0.4275 +vn 0.3986 -0.8943 -0.2031 +vn 0.8780 0.1698 -0.4475 +vn 0.2215 -0.9686 -0.1129 +vn 0.8909 0.0000 -0.4541 +vn 0.2216 0.9686 -0.1129 +vn 0.8780 -0.1698 -0.4475 +vn -0.6767 -0.6504 -0.3449 +vn -0.7721 -0.4989 -0.3935 +vn -0.6596 -0.4463 -0.6047 +vn -0.5867 -0.5928 -0.5517 +vn -0.7721 0.4989 -0.3935 +vn -0.6767 0.6504 -0.3449 +vn -0.5867 0.5928 -0.5517 +vn -0.6596 0.4463 -0.6047 +vn -0.5518 -0.7851 -0.2812 +vn -0.4871 -0.7329 -0.4748 +vn -0.8388 0.3371 -0.4275 +vn -0.7091 0.2977 -0.6392 +vn -0.3986 -0.8943 -0.2031 +vn -0.3580 -0.8586 -0.3668 +vn -0.8780 0.1698 -0.4475 +vn -0.7376 0.1488 -0.6586 +vn -0.2216 -0.9686 -0.1129 +vn -0.1986 -0.9549 -0.2206 +vn -0.8909 0.0000 -0.4541 +vn -0.7469 0.0000 -0.6648 +vn -0.2216 0.9686 -0.1129 +vn -0.1986 0.9549 -0.2206 +vn -0.8780 -0.1698 -0.4475 +vn -0.7376 -0.1488 -0.6586 +vn -0.3986 0.8943 -0.2031 +vn -0.3580 0.8586 -0.3668 +vn -0.8388 -0.3371 -0.4275 +vn -0.7091 -0.2977 -0.6392 +vn -0.5518 0.7851 -0.2812 +vn -0.4871 0.7329 -0.4748 +vn -0.1648 0.9124 -0.3745 +vn -0.1648 -0.9124 -0.3745 +vn -0.4462 0.0000 -0.8949 +vn -0.4439 -0.0960 -0.8909 +vn -0.2817 0.7502 -0.5981 +vn -0.4366 -0.1967 -0.8779 +vn -0.3545 0.5826 -0.7313 +vn -0.4224 -0.3076 -0.8526 +vn -0.3974 0.4345 -0.8082 +vn -0.3974 -0.4345 -0.8082 +vn -0.4224 0.3076 -0.8526 +vn -0.3545 -0.5826 -0.7313 +vn -0.4366 0.1967 -0.8779 +vn -0.2817 -0.7502 -0.5981 +vn -0.4439 0.0960 -0.8909 +vn -0.2708 0.3294 -0.9045 +vn -0.2799 0.2264 -0.9330 +vn -0.2708 -0.3294 -0.9045 +vn -0.2526 -0.4641 -0.8489 +vn -0.2846 0.1423 -0.9480 +vn -0.2144 -0.6461 -0.7325 +vn -0.2870 0.0688 -0.9554 +vn -0.1338 -0.8650 -0.4835 +vn -0.2877 0.0000 -0.9577 +vn -0.1338 0.8650 -0.4835 +vn -0.2870 -0.0688 -0.9554 +vn -0.2144 0.6461 -0.7325 +vn -0.2846 -0.1423 -0.9480 +vn -0.2526 0.4641 -0.8489 +vn -0.2799 -0.2264 -0.9330 +vn -0.1945 0.0000 -0.9809 +vn -0.1943 -0.0546 -0.9794 +vn -0.1045 0.8216 -0.5603 +vn -0.1586 0.5650 -0.8097 +vn -0.1933 -0.1133 -0.9745 +vn -0.1790 0.3862 -0.9048 +vn -0.1914 -0.1814 -0.9646 +vn -0.1874 0.2674 -0.9452 +vn -0.1874 -0.2674 -0.9452 +vn -0.1914 0.1814 -0.9646 +vn -0.1790 -0.3862 -0.9048 +vn -0.1933 0.1133 -0.9745 +vn -0.1586 -0.5650 -0.8097 +vn -0.1943 0.0546 -0.9794 +vn -0.1045 -0.8216 -0.5603 +vn -0.1273 -0.2303 -0.9647 +vn -0.1232 -0.3369 -0.9334 +vn -0.1292 0.1554 -0.9793 +vn -0.1301 0.0968 -0.9868 +vn -0.1121 -0.5075 -0.8543 +vn -0.1305 0.0466 -0.9903 +vn -0.0768 -0.7862 -0.6132 +vn -0.1306 0.0000 -0.9914 +vn -0.0768 0.7862 -0.6132 +vn -0.1305 -0.0466 -0.9903 +vn -0.1121 0.5075 -0.8543 +vn -0.1301 -0.0968 -0.9868 +vn -0.1232 0.3369 -0.9334 +vn -0.1292 -0.1554 -0.9793 +vn -0.1273 0.2303 -0.9647 +vn -0.0811 -0.0419 -0.9958 +vn -0.0809 -0.0872 -0.9929 +vn -0.0718 0.4696 -0.8799 +vn -0.0776 0.3066 -0.9486 +vn -0.0805 -0.1402 -0.9868 +vn -0.0796 0.2083 -0.9748 +vn -0.0796 -0.2083 -0.9748 +vn -0.0805 0.1402 -0.9868 +vn -0.0776 -0.3066 -0.9486 +vn -0.0809 0.0872 -0.9929 +vn -0.0718 -0.4696 -0.8799 +vn -0.0811 0.0419 -0.9958 +vn -0.0505 -0.7602 -0.6477 +vn -0.0811 0.0000 -0.9967 +vn -0.0505 0.7602 -0.6477 +vn -0.0376 -0.2901 -0.9562 +vn -0.0352 -0.4479 -0.8933 +vn -0.0389 0.0822 -0.9958 +vn -0.0390 0.0395 -0.9984 +vn -0.0252 -0.7442 -0.6675 +vn -0.0390 0.0000 -0.9992 +vn -0.0252 0.7442 -0.6675 +vn -0.0390 -0.0395 -0.9984 +vn -0.0352 0.4479 -0.8933 +vn -0.0389 -0.0822 -0.9958 +vn -0.0376 0.2901 -0.9562 +vn -0.0387 -0.1322 -0.9904 +vn -0.0384 0.1966 -0.9797 +vn -0.0384 -0.1966 -0.9797 +vn -0.0387 0.1322 -0.9904 +vn -0.1296 0.9831 0.1296 +vn -0.4915 0.8623 0.1216 +vn -0.4473 0.7744 0.4473 +vn -0.1216 0.8623 0.4915 +vn -0.8623 0.4915 0.1216 +vn -0.7744 0.4473 0.4473 +vn -0.9830 0.1296 0.1296 +vn -0.8623 0.1216 0.4916 +vn -0.4916 0.1216 0.8623 +vn -0.4473 0.4473 0.7744 +vn -0.1296 0.1296 0.9830 +vn -0.1216 0.4915 0.8623 +vn -0.9830 0.1296 -0.1296 +vn -0.8623 0.4915 -0.1216 +vn -0.7744 0.4473 -0.4473 +vn -0.8623 0.1216 -0.4916 +vn -0.4915 0.8623 -0.1216 +vn -0.4473 0.7744 -0.4473 +vn -0.1296 0.9831 -0.1296 +vn -0.1216 0.8623 -0.4915 +vn -0.1216 0.4915 -0.8623 +vn -0.4473 0.4473 -0.7744 +vn -0.1296 0.1296 -0.9830 +vn -0.4916 0.1216 -0.8623 +vn 0.9830 0.1296 -0.1296 +vn 0.8623 0.1216 -0.4916 +vn 0.7744 0.4473 -0.4473 +vn 0.8623 0.4915 -0.1216 +vn 0.4916 0.1216 -0.8623 +vn 0.4473 0.4473 -0.7744 +vn 0.1296 0.1296 -0.9830 +vn 0.1216 0.4915 -0.8623 +vn 0.1216 0.8623 -0.4915 +vn 0.4473 0.7744 -0.4473 +vn 0.1296 0.9831 -0.1296 +vn 0.4915 0.8623 -0.1216 +vn 0.9830 0.1296 0.1296 +vn 0.8623 0.4915 0.1216 +vn 0.7744 0.4473 0.4473 +vn 0.8623 0.1216 0.4916 +vn 0.4915 0.8623 0.1216 +vn 0.4473 0.7744 0.4473 +vn 0.1296 0.9831 0.1296 +vn 0.1216 0.8623 0.4915 +vn 0.1216 0.4915 0.8623 +vn 0.4473 0.4473 0.7744 +vn 0.1296 0.1296 0.9830 +vn 0.4916 0.1216 0.8623 +vn 0.9915 0.0000 -0.1304 +vn 0.8661 0.0000 -0.4999 +vn 0.4999 0.0000 -0.8661 +vn 0.1304 0.0000 -0.9915 +vn 0.1304 0.0000 0.9915 +vn 0.4999 0.0000 0.8661 +vn 0.8661 0.0000 0.4999 +vn 0.9915 0.0000 0.1304 +vn -0.1304 0.0000 -0.9915 +vn -0.4999 0.0000 -0.8661 +vn -0.8661 0.0000 -0.4999 +vn -0.9915 0.0000 -0.1304 +vn -0.9915 0.0000 0.1304 +vn -0.8661 0.0000 0.4999 +vn -0.4999 0.0000 0.8661 +vn -0.1304 0.0000 0.9915 +g Cube_Cube_None +s off +f 65/1/1 68/2/1 69/3/1 70/4/1 71/5/1 72/6/1 +f 77/7/1 80/8/1 81/9/1 82/10/1 83/11/1 84/12/1 +f 89/13/1 92/14/1 93/15/1 94/16/1 95/17/1 96/18/1 +f 101/19/1 104/20/1 105/21/1 106/22/1 107/23/1 108/24/1 +f 113/25/1 116/26/1 117/27/1 118/28/1 119/29/1 120/30/1 +f 125/31/1 128/32/1 129/33/1 130/34/1 131/35/1 132/36/1 +f 137/37/1 140/38/1 141/39/1 142/40/1 143/41/1 144/42/1 +f 149/43/1 152/44/1 153/45/1 154/46/1 155/47/1 156/48/1 +f 165/49/1 175/50/1 180/51/1 184/52/1 188/53/1 193/54/1 192/55/1 197/56/1 201/57/1 205/58/1 209/59/1 214/60/1 223/61/1 224/62/1 222/63/1 216/64/1 211/65/1 207/66/1 203/67/1 199/68/1 195/69/1 190/70/1 186/71/1 182/72/1 177/73/1 173/74/1 166/75/1 167/76/1 164/77/1 161/78/1 162/79/1 163/80/1 +f 169/81/2 168/82/2 174/83/2 179/84/2 178/85/2 183/86/2 187/87/2 191/88/2 196/89/2 200/90/2 204/91/2 208/92/2 212/93/2 217/94/2 213/95/2 219/96/2 218/97/2 220/98/2 221/99/2 215/100/2 210/101/2 206/102/2 202/103/2 198/104/2 194/105/2 189/106/2 185/107/2 181/108/2 176/109/2 172/110/2 171/111/2 170/112/2 +f 225/113/1 228/114/1 229/115/1 230/116/1 231/117/1 232/118/1 +f 237/119/1 240/120/1 241/121/1 242/122/1 243/123/1 244/124/1 +f 249/125/1 252/126/1 253/127/1 254/128/1 255/129/1 256/130/1 +f 261/131/1 264/132/1 265/133/1 266/134/1 267/135/1 268/136/1 +f 273/137/1 276/138/1 277/139/1 278/140/1 279/141/1 280/142/1 +f 285/143/1 288/144/1 289/145/1 290/146/1 291/147/1 292/148/1 +f 297/149/1 300/150/1 301/151/1 302/152/1 303/153/1 304/154/1 +f 309/155/1 312/156/1 313/157/1 314/158/1 315/159/1 316/160/1 +f 353/161/3 354/162/3 355/163/3 356/164/3 +f 354/165/4 357/166/4 358/167/4 355/168/4 +f 357/169/5 359/170/5 360/171/5 358/172/5 +f 359/170/6 353/173/6 356/174/6 360/175/6 +f 356/164/1 355/163/1 358/176/1 360/177/1 +f 359/178/2 357/179/2 354/180/2 353/181/2 +f 680/182/4 699/183/4 710/184/4 691/185/4 +f 698/186/5 714/187/5 726/188/5 711/189/5 +f 667/190/3 678/191/3 690/192/3 695/193/3 +f 716/194/6 668/195/6 694/196/6 727/197/6 +f 369/198/2 371/199/2 361/200/2 363/201/2 365/202/2 367/203/2 +f 376/204/2 374/205/2 384/206/2 382/207/2 380/208/2 378/209/2 +f 388/210/2 386/211/2 396/212/2 394/213/2 392/214/2 390/215/2 +f 405/216/2 407/217/2 397/218/2 399/219/2 401/220/2 403/221/2 +f 715/222/2 700/223/2 679/224/2 666/225/2 +s 1 +f 1/226/7 351/227/8 338/228/9 5/229/10 +f 5/229/10 338/228/9 325/230/11 11/231/12 +f 11/231/12 325/230/11 337/232/13 15/233/14 +f 6/234/15 2/235/16 1/226/7 7/236/17 +f 8/237/18 3/238/19 2/235/16 6/234/15 +f 10/239/20 4/240/21 3/238/19 8/237/18 +f 15/233/14 337/232/13 349/241/22 19/242/23 +f 7/236/17 1/226/7 5/229/10 12/243/24 +f 14/244/25 9/245/26 4/240/21 10/239/20 +f 19/242/23 349/241/22 330/246/27 23/247/28 +f 16/248/29 12/243/24 5/229/10 11/231/12 +f 18/249/30 13/250/31 9/245/26 14/244/25 +f 23/247/28 330/246/27 342/251/32 27/252/33 +f 20/253/34 16/248/29 11/231/12 15/233/14 +f 164/254/35 168/255/36 169/256/37 161/257/38 +f 163/258/39 171/259/40 172/260/41 165/261/42 +f 22/262/43 17/263/44 13/250/31 18/249/30 +f 167/264/45 174/265/46 168/255/36 164/254/35 +f 24/266/47 20/253/34 15/233/14 19/242/23 +f 165/261/42 172/260/41 176/267/48 175/268/49 +f 26/269/50 21/270/51 17/263/44 22/262/43 +f 166/271/52 179/272/53 174/265/46 167/264/45 +f 28/273/54 24/266/47 19/242/23 23/247/28 +f 173/274/55 178/275/56 179/272/53 166/271/52 +f 30/276/57 25/277/58 21/270/51 26/269/50 +f 182/278/59 187/279/60 183/280/61 177/281/62 +f 32/282/63 28/273/54 23/247/28 27/252/33 +f 175/268/49 176/267/48 181/283/64 180/284/65 +f 34/285/66 29/286/67 25/277/58 30/276/57 +f 186/287/68 191/288/69 187/279/60 182/278/59 +f 36/289/70 32/282/63 27/252/33 31/290/71 +f 180/284/65 181/283/64 185/291/72 184/292/73 +f 38/293/74 33/294/75 29/295/67 34/296/66 +f 190/297/76 196/298/77 191/288/69 186/287/68 +f 43/299/78 328/300/79 340/301/80 47/302/81 +f 40/303/82 36/289/70 31/290/71 35/304/83 +f 184/292/73 185/291/72 189/305/84 188/306/85 +f 42/307/86 37/308/87 33/294/75 38/293/74 +f 195/309/88 200/310/89 196/298/77 190/297/76 +f 44/311/90 40/303/82 35/304/83 39/312/91 +f 188/306/85 189/305/84 194/313/92 193/314/93 +f 46/315/94 41/316/95 37/308/87 42/307/86 +f 199/317/96 204/318/97 200/310/89 195/309/88 +f 48/319/98 44/311/90 39/312/91 43/299/78 +f 192/320/99 198/321/100 202/322/101 197/323/102 +f 46/315/94 50/324/103 45/325/104 41/316/95 +f 193/314/93 194/313/92 198/326/100 192/327/99 +f 52/328/105 48/319/98 43/299/78 47/302/81 +f 197/323/102 202/322/101 206/329/106 201/330/107 +f 161/257/38 169/256/37 170/331/108 162/332/109 +f 54/333/110 49/334/111 45/325/104 50/324/103 +f 203/335/112 208/336/113 204/318/97 199/317/96 +f 59/337/114 345/338/115 352/339/116 61/340/117 +f 56/341/118 52/328/105 47/302/81 51/342/119 +f 201/330/107 206/329/106 210/343/120 205/344/121 +f 54/333/110 58/345/122 53/346/123 49/334/111 +f 207/347/124 212/348/125 208/336/113 203/335/112 +f 60/349/126 56/341/118 51/342/119 55/350/127 +f 205/344/121 210/343/120 215/351/128 209/352/129 +f 58/345/122 62/353/130 57/354/131 53/346/123 +f 211/355/132 217/356/133 212/348/125 207/347/124 +f 177/281/62 183/280/61 178/275/56 173/274/55 +f 63/357/134 60/349/126 55/350/127 59/337/114 +f 209/352/129 215/351/128 221/358/135 214/359/136 +f 62/353/130 64/360/137 61/340/117 57/354/131 +f 216/361/138 213/362/139 217/356/133 211/355/132 +f 64/360/137 63/357/134 59/337/114 61/340/117 +f 162/332/109 170/331/108 171/259/40 163/258/39 +f 222/363/140 219/364/141 213/362/139 216/361/138 +f 214/359/136 221/358/135 220/365/142 223/366/143 +f 224/367/144 218/368/145 219/364/141 222/363/140 +f 223/366/143 220/365/142 218/368/145 224/367/144 +f 65/369/146 66/370/147 67/371/148 68/372/149 +f 72/373/150 73/374/151 66/370/147 65/369/146 +f 68/372/149 67/371/148 74/375/152 69/376/153 +f 69/376/153 74/375/152 75/377/154 70/378/155 +f 70/379/155 75/380/154 76/381/156 71/382/157 +f 71/382/157 76/381/156 73/374/151 72/373/150 +f 77/383/158 78/384/159 79/385/160 80/386/161 +f 84/387/162 85/388/163 78/384/159 77/383/158 +f 80/386/161 79/385/160 86/389/164 81/390/165 +f 81/390/165 86/389/164 87/391/166 82/392/167 +f 82/393/167 87/394/166 88/395/168 83/396/169 +f 83/396/169 88/395/168 85/388/163 84/387/162 +f 89/397/170 90/398/171 91/399/172 92/400/173 +f 96/401/174 97/402/175 90/398/171 89/397/170 +f 92/400/173 91/399/172 98/403/176 93/404/177 +f 93/404/177 98/403/176 99/405/178 94/406/179 +f 94/407/179 99/408/178 100/409/180 95/410/181 +f 95/410/181 100/409/180 97/402/175 96/401/174 +f 101/411/182 102/412/183 103/413/184 104/414/185 +f 108/415/186 109/416/187 102/412/183 101/411/182 +f 104/414/185 103/413/184 110/417/188 105/418/189 +f 105/418/189 110/417/188 111/419/190 106/420/191 +f 106/421/191 111/422/190 112/423/192 107/424/193 +f 107/424/193 112/423/192 109/416/187 108/415/186 +f 113/425/155 114/426/154 115/427/156 116/428/157 +f 120/429/153 121/430/152 114/426/154 113/425/155 +f 116/428/157 115/427/156 122/431/151 117/432/150 +f 117/432/150 122/431/151 123/433/147 118/434/146 +f 118/435/146 123/436/147 124/437/148 119/438/149 +f 119/438/149 124/437/148 121/430/152 120/429/153 +f 125/439/167 126/440/166 127/441/168 128/442/169 +f 132/443/165 133/444/164 126/440/166 125/439/167 +f 128/442/169 127/441/168 134/445/163 129/446/162 +f 129/446/162 134/445/163 135/447/159 130/448/158 +f 130/449/158 135/450/159 136/451/160 131/452/161 +f 131/452/161 136/451/160 133/444/164 132/443/165 +f 137/453/179 138/454/178 139/455/180 140/456/181 +f 144/457/177 145/458/176 138/454/178 137/453/179 +f 140/456/181 139/455/180 146/459/175 141/460/174 +f 141/460/174 146/459/175 147/461/171 142/462/170 +f 142/463/170 147/464/171 148/465/172 143/466/173 +f 143/466/173 148/465/172 145/458/176 144/457/177 +f 149/467/191 150/468/190 151/469/192 152/470/193 +f 156/471/189 157/472/188 150/468/190 149/467/191 +f 152/470/193 151/469/192 158/473/187 153/474/186 +f 153/474/186 158/473/187 159/475/183 154/476/182 +f 154/477/182 159/478/183 160/479/184 155/480/185 +f 155/480/185 160/479/184 157/472/188 156/471/189 +f 225/481/194 226/482/195 227/483/196 228/484/197 +f 232/485/198 233/486/199 226/482/195 225/481/194 +f 228/484/197 227/483/196 234/487/200 229/488/201 +f 229/488/201 234/487/200 235/489/202 230/490/203 +f 230/491/203 235/492/202 236/493/204 231/494/205 +f 231/494/205 236/493/204 233/486/199 232/485/198 +f 237/495/206 238/496/3 239/497/207 240/498/208 +f 244/499/209 245/500/210 238/496/3 237/495/206 +f 240/498/208 239/497/207 246/501/211 241/502/212 +f 241/502/212 246/501/211 247/503/5 242/504/213 +f 242/505/213 247/506/5 248/507/214 243/508/215 +f 243/508/215 248/507/214 245/500/210 244/499/209 +f 249/509/216 250/510/217 251/511/218 252/512/219 +f 256/513/220 257/514/221 250/510/217 249/509/216 +f 252/512/219 251/511/218 258/515/222 253/516/223 +f 253/516/223 258/515/222 259/517/224 254/518/225 +f 254/519/225 259/520/224 260/521/226 255/522/227 +f 255/522/227 260/521/226 257/514/221 256/513/220 +f 261/523/228 262/524/6 263/525/229 264/526/230 +f 268/527/231 269/528/232 262/524/6 261/523/228 +f 264/526/230 263/525/229 270/529/233 265/530/234 +f 265/530/234 270/529/233 271/531/4 266/532/235 +f 266/533/235 271/534/4 272/535/236 267/536/237 +f 267/536/237 272/535/236 269/528/232 268/527/231 +f 273/537/203 274/538/202 275/539/204 276/540/205 +f 280/541/201 281/542/200 274/538/202 273/537/203 +f 276/540/205 275/539/204 282/543/199 277/544/198 +f 277/544/198 282/543/199 283/545/195 278/546/194 +f 278/547/194 283/548/195 284/549/196 279/550/197 +f 279/550/197 284/549/196 281/542/200 280/541/201 +f 285/551/213 286/552/5 287/553/214 288/554/215 +f 292/555/212 293/556/211 286/552/5 285/551/213 +f 288/554/215 287/553/214 294/557/210 289/558/209 +f 289/558/209 294/557/210 295/559/3 290/560/206 +f 290/561/206 295/562/3 296/563/207 291/564/208 +f 291/564/208 296/563/207 293/556/211 292/555/212 +f 297/565/225 298/566/224 299/567/226 300/568/227 +f 304/569/223 305/570/222 298/566/224 297/565/225 +f 300/568/227 299/567/226 306/571/221 301/572/220 +f 301/572/220 306/571/221 307/573/217 302/574/216 +f 302/575/216 307/576/217 308/577/218 303/578/219 +f 303/578/219 308/577/218 305/570/222 304/569/223 +f 309/579/235 310/580/4 311/581/236 312/582/237 +f 316/583/234 317/584/233 310/580/4 309/579/235 +f 312/582/237 311/581/236 318/585/232 313/586/231 +f 313/586/231 318/585/232 319/587/6 314/588/228 +f 314/589/228 319/590/6 320/591/229 315/592/230 +f 315/592/230 320/591/229 317/584/233 316/583/234 +f 344/593/238 332/594/239 3/238/19 4/240/21 +f 341/595/240 329/596/241 33/294/75 37/308/87 +f 352/339/116 339/597/242 57/354/131 61/340/117 +f 342/251/32 323/598/243 31/290/71 27/252/33 +f 336/599/244 324/600/245 21/270/51 25/277/58 +f 323/598/243 335/601/246 35/304/83 31/290/71 +f 321/602/247 333/603/248 55/350/127 51/342/119 +f 333/603/248 345/338/115 59/337/114 55/350/127 +f 326/604/249 351/227/8 1/226/7 2/235/16 +f 331/605/250 350/606/251 9/245/26 13/250/31 +f 348/607/252 336/599/244 25/277/58 29/286/67 +f 327/608/253 346/609/254 49/334/111 53/346/123 +f 329/596/241 348/610/252 29/295/67 33/294/75 +f 339/597/242 327/608/253 53/346/123 57/354/131 +f 343/611/255 331/605/250 13/250/31 17/263/44 +f 340/301/80 321/602/247 51/342/119 47/302/81 +f 347/612/256 328/300/79 43/299/78 39/312/91 +f 350/606/251 344/593/238 4/240/21 9/245/26 +f 346/609/254 334/613/257 45/325/104 49/334/111 +f 322/614/258 341/595/240 37/308/87 41/316/95 +f 334/613/257 322/614/258 41/316/95 45/325/104 +f 335/601/246 347/612/256 39/312/91 35/304/83 +f 324/600/245 343/611/255 17/263/44 21/270/51 +f 332/594/239 326/604/249 2/235/16 3/238/19 +f 363/615/259 370/616/3 368/617/210 365/618/260 +f 382/619/259 375/620/3 377/621/210 380/622/260 +f 378/623/261 379/624/214 383/625/5 376/626/262 +f 367/627/261 366/628/214 362/629/5 369/630/262 +f 374/631/263 381/632/211 373/633/207 384/634/264 +f 371/635/263 364/636/211 372/637/207 361/638/264 +f 380/622/260 377/621/210 379/624/214 378/623/261 +f 376/639/262 383/640/5 381/632/211 374/631/263 +f 405/641/262 398/642/5 400/643/211 407/644/263 +f 384/634/264 373/633/207 375/620/3 382/619/259 +f 401/645/260 404/646/210 402/647/214 403/648/261 +f 396/649/264 385/650/207 387/651/3 394/652/259 +f 390/653/261 391/654/214 395/655/5 388/656/262 +f 386/657/263 393/658/211 385/650/207 396/649/264 +f 394/652/259 387/651/3 389/659/210 392/660/260 +f 397/661/264 408/662/207 406/663/3 399/664/259 +f 407/644/263 400/643/211 408/662/207 397/661/264 +f 403/648/261 402/647/214 398/665/5 405/666/262 +f 392/660/260 389/659/210 391/654/214 390/653/261 +f 399/664/259 406/663/3 404/646/210 401/645/260 +f 388/667/262 395/668/5 393/658/211 386/657/263 +f 660/669/265 659/670/266 418/671/267 419/672/268 +f 653/673/269 652/674/270 411/675/271 412/676/272 +f 661/677/273 660/669/265 419/672/268 420/678/274 +f 654/679/275 653/673/269 412/676/272 413/680/276 +f 662/681/277 661/677/273 420/678/274 421/682/278 +f 655/683/279 654/679/275 413/680/276 414/684/280 +f 663/685/281 662/681/277 421/682/278 422/686/282 +f 656/687/283 655/683/279 414/684/280 415/688/284 +f 664/689/285 663/685/281 422/686/282 423/690/286 +f 657/691/287 656/687/283 415/688/284 416/692/288 +f 665/693/289 664/689/285 423/690/286 424/694/290 +f 658/695/4 657/691/287 416/692/288 417/696/291 +f 651/697/292 530/698/293 410/699/294 +f 409/700/295 665/693/289 424/694/290 +f 659/670/266 658/695/4 417/696/291 418/671/267 +f 652/674/270 651/697/292 410/699/294 411/675/271 +f 409/700/295 424/694/290 439/701/296 +f 418/671/267 417/696/291 432/702/297 433/703/298 +f 411/675/271 410/699/294 425/704/299 426/705/300 +f 419/672/268 418/671/267 433/703/298 434/706/301 +f 412/676/272 411/675/271 426/705/300 427/707/302 +f 420/678/274 419/672/268 434/706/301 435/708/303 +f 413/680/276 412/676/272 427/707/302 428/709/304 +f 421/682/278 420/678/274 435/708/303 436/710/305 +f 414/684/280 413/680/276 428/709/304 429/711/306 +f 422/686/282 421/682/278 436/710/305 437/712/307 +f 415/688/284 414/684/280 429/711/306 430/713/308 +f 423/690/286 422/686/282 437/712/307 438/714/309 +f 416/692/288 415/688/284 430/713/308 431/715/310 +f 424/694/290 423/690/286 438/714/309 439/701/296 +f 417/696/291 416/692/288 431/715/310 432/702/297 +f 410/699/294 530/698/293 425/704/299 +f 437/712/307 436/710/305 451/716/311 452/717/312 +f 430/713/308 429/711/306 444/718/313 445/719/314 +f 438/714/309 437/712/307 452/717/312 453/720/315 +f 431/715/310 430/713/308 445/719/314 446/721/316 +f 439/701/296 438/714/309 453/720/315 454/722/317 +f 432/702/297 431/715/310 446/721/316 447/723/318 +f 425/704/299 530/698/293 440/724/319 +f 409/700/295 439/701/296 454/722/317 +f 433/703/298 432/702/297 447/723/318 448/725/320 +f 426/705/300 425/704/299 440/724/319 441/726/321 +f 434/706/301 433/703/298 448/725/320 449/727/322 +f 427/707/302 426/705/300 441/726/321 442/728/323 +f 435/708/303 434/706/301 449/727/322 450/729/324 +f 428/709/304 427/707/302 442/728/323 443/730/325 +f 436/710/305 435/708/303 450/729/324 451/716/311 +f 429/711/306 428/709/304 443/730/325 444/718/313 +f 441/726/321 440/724/319 455/731/326 456/732/327 +f 449/727/322 448/725/320 463/733/328 464/734/329 +f 442/728/323 441/726/321 456/732/327 457/735/330 +f 450/729/324 449/727/322 464/734/329 465/736/331 +f 443/730/325 442/728/323 457/735/330 458/737/332 +f 451/716/311 450/729/324 465/736/331 466/738/333 +f 444/718/313 443/730/325 458/737/332 459/739/334 +f 452/717/312 451/716/311 466/738/333 467/740/335 +f 445/719/314 444/718/313 459/739/334 460/741/336 +f 453/720/315 452/717/312 467/740/335 468/742/337 +f 446/721/316 445/719/314 460/741/336 461/743/338 +f 454/722/317 453/720/315 468/742/337 469/744/339 +f 447/723/318 446/721/316 461/743/338 462/745/340 +f 440/724/319 530/698/293 455/731/326 +f 409/700/295 454/722/317 469/744/339 +f 448/725/320 447/723/318 462/745/340 463/733/328 +f 460/741/336 459/739/334 474/746/341 475/747/342 +f 468/742/337 467/740/335 482/748/343 483/749/344 +f 461/743/338 460/741/336 475/747/342 476/750/345 +f 469/744/339 468/742/337 483/749/344 484/751/346 +f 462/745/340 461/743/338 476/750/345 477/752/347 +f 455/731/326 530/698/293 470/753/348 +f 409/700/295 469/744/339 484/751/346 +f 463/733/328 462/745/340 477/752/347 478/754/349 +f 456/732/327 455/731/326 470/753/348 471/755/350 +f 464/734/329 463/733/328 478/754/349 479/756/351 +f 457/735/330 456/732/327 471/755/350 472/757/352 +f 465/736/331 464/734/329 479/756/351 480/758/353 +f 458/737/332 457/735/330 472/757/352 473/759/354 +f 466/738/333 465/736/331 480/758/353 481/760/355 +f 459/739/334 458/737/332 473/759/354 474/746/341 +f 467/740/335 466/738/333 481/760/355 482/748/343 +f 479/756/351 478/754/349 493/761/356 494/762/357 +f 472/757/352 471/755/350 486/763/358 487/764/359 +f 480/758/353 479/756/351 494/762/357 495/765/360 +f 473/759/354 472/757/352 487/764/359 488/766/361 +f 481/760/355 480/758/353 495/765/360 496/767/362 +f 474/746/341 473/759/354 488/766/361 489/768/363 +f 482/748/343 481/760/355 496/767/362 497/769/364 +f 475/747/342 474/746/341 489/768/363 490/770/365 +f 483/749/344 482/748/343 497/769/364 498/771/366 +f 476/750/345 475/747/342 490/770/365 491/772/367 +f 484/751/346 483/749/344 498/771/366 499/773/368 +f 477/752/347 476/750/345 491/772/367 492/774/369 +f 470/753/348 530/698/293 485/775/370 +f 409/700/295 484/751/346 499/773/368 +f 478/754/349 477/752/347 492/774/369 493/761/356 +f 471/755/350 470/753/348 485/775/370 486/763/358 +f 498/771/366 497/769/364 512/776/371 513/777/372 +f 491/772/367 490/770/365 505/778/373 506/779/374 +f 499/773/368 498/771/366 513/777/372 514/780/375 +f 492/774/369 491/772/367 506/779/374 507/781/376 +f 485/775/370 530/698/293 500/782/377 +f 409/700/295 499/773/368 514/780/375 +f 493/761/356 492/774/369 507/781/376 508/783/378 +f 486/763/358 485/775/370 500/782/377 501/784/379 +f 494/762/357 493/761/356 508/783/378 509/785/380 +f 487/764/359 486/763/358 501/784/379 502/786/381 +f 495/765/360 494/762/357 509/785/380 510/787/382 +f 488/766/361 487/764/359 502/786/381 503/788/383 +f 496/767/362 495/765/360 510/787/382 511/789/384 +f 489/768/363 488/766/361 503/788/383 504/790/385 +f 497/769/364 496/767/362 511/789/384 512/776/371 +f 490/770/365 489/768/363 504/790/385 505/778/373 +f 502/786/381 501/784/379 516/791/386 517/792/387 +f 510/787/382 509/785/380 524/793/388 525/794/389 +f 503/788/383 502/786/381 517/792/387 518/795/390 +f 511/789/384 510/787/382 525/794/389 526/796/391 +f 504/790/385 503/788/383 518/795/390 519/797/392 +f 512/776/371 511/789/384 526/796/391 527/798/393 +f 505/778/373 504/790/385 519/797/392 520/799/394 +f 513/777/372 512/776/371 527/798/393 528/800/395 +f 506/779/374 505/778/373 520/799/394 521/801/396 +f 514/780/375 513/777/372 528/800/395 529/802/397 +f 507/781/376 506/779/374 521/801/396 522/803/398 +f 500/782/377 530/698/293 515/804/399 +f 409/700/295 514/780/375 529/802/397 +f 508/783/378 507/781/376 522/803/398 523/805/400 +f 501/784/379 500/782/377 515/804/399 516/791/386 +f 509/785/380 508/783/378 523/805/400 524/793/388 +f 542/806/401 541/807/402 556/808/403 557/809/404 +f 535/810/405 534/811/406 549/812/407 550/813/408 +f 543/814/409 542/806/401 557/809/404 558/815/410 +f 536/816/411 535/810/405 550/813/408 551/817/412 +f 544/818/413 543/814/409 558/815/410 559/819/414 +f 537/820/415 536/816/411 551/817/412 552/821/416 +f 545/822/417 544/818/413 559/819/414 560/823/418 +f 538/824/419 537/820/415 552/821/416 553/825/420 +f 531/826/421 530/698/293 546/827/422 +f 409/700/295 545/822/417 560/823/418 +f 539/828/423 538/824/419 553/825/420 554/829/424 +f 532/830/425 531/826/421 546/827/422 547/831/426 +f 540/832/427 539/828/423 554/829/424 555/833/428 +f 533/834/429 532/830/425 547/831/426 548/835/430 +f 541/807/402 540/832/427 555/833/428 556/808/403 +f 534/811/406 533/834/429 548/835/430 549/812/407 +f 546/827/422 530/698/293 561/836/431 +f 409/700/295 560/823/418 575/837/432 +f 554/829/424 553/825/420 568/838/433 569/839/434 +f 547/831/426 546/827/422 561/836/431 562/840/435 +f 555/833/428 554/829/424 569/839/434 570/841/436 +f 548/835/430 547/831/426 562/840/435 563/842/437 +f 556/808/403 555/833/428 570/841/436 571/843/438 +f 549/812/407 548/835/430 563/842/437 564/844/439 +f 557/809/404 556/808/403 571/843/438 572/845/440 +f 550/813/408 549/812/407 564/844/439 565/846/441 +f 558/815/410 557/809/404 572/845/440 573/847/442 +f 551/817/412 550/813/408 565/846/441 566/848/443 +f 559/819/414 558/815/410 573/847/442 574/849/444 +f 552/821/416 551/817/412 566/848/443 567/850/445 +f 560/823/418 559/819/414 574/849/444 575/837/432 +f 553/825/420 552/821/416 567/850/445 568/838/433 +f 565/846/441 564/844/439 579/851/446 580/852/447 +f 573/847/442 572/845/440 587/853/448 588/854/449 +f 566/848/443 565/846/441 580/852/447 581/855/450 +f 574/849/444 573/847/442 588/854/449 589/856/451 +f 567/850/445 566/848/443 581/855/450 582/857/452 +f 575/837/432 574/849/444 589/856/451 590/858/453 +f 568/838/433 567/850/445 582/857/452 583/859/454 +f 561/836/431 530/698/293 576/860/455 +f 409/700/295 575/837/432 590/858/453 +f 569/839/434 568/838/433 583/859/454 584/861/456 +f 562/840/435 561/836/431 576/860/455 577/862/457 +f 570/841/436 569/839/434 584/861/456 585/863/458 +f 563/842/437 562/840/435 577/862/457 578/864/459 +f 571/843/438 570/841/436 585/863/458 586/865/460 +f 564/844/439 563/842/437 578/864/459 579/851/446 +f 572/845/440 571/843/438 586/865/460 587/853/448 +f 584/861/456 583/859/454 598/866/461 599/867/462 +f 577/862/457 576/860/455 591/868/463 592/869/464 +f 585/863/458 584/861/456 599/867/462 600/870/465 +f 578/864/459 577/862/457 592/869/464 593/871/466 +f 586/865/460 585/863/458 600/870/465 601/872/467 +f 579/851/446 578/864/459 593/871/466 594/873/468 +f 587/853/448 586/865/460 601/872/467 602/874/469 +f 580/852/447 579/851/446 594/873/468 595/875/470 +f 588/854/449 587/853/448 602/874/469 603/876/471 +f 581/855/450 580/852/447 595/875/470 596/877/472 +f 589/856/451 588/854/449 603/876/471 604/878/473 +f 582/857/452 581/855/450 596/877/472 597/879/474 +f 590/858/453 589/856/451 604/878/473 605/880/475 +f 583/859/454 582/857/452 597/879/474 598/866/461 +f 576/860/455 530/698/293 591/868/463 +f 409/700/295 590/858/453 605/880/475 +f 603/876/471 602/874/469 617/881/476 618/882/477 +f 596/877/472 595/875/470 610/883/478 611/884/479 +f 604/878/473 603/876/471 618/882/477 619/885/480 +f 597/879/474 596/877/472 611/884/479 612/886/481 +f 605/880/475 604/878/473 619/885/480 620/887/482 +f 598/866/461 597/879/474 612/886/481 613/888/483 +f 591/868/463 530/698/293 606/889/484 +f 409/700/295 605/880/475 620/887/482 +f 599/867/462 598/866/461 613/888/483 614/890/485 +f 592/869/464 591/868/463 606/889/484 607/891/486 +f 600/870/465 599/867/462 614/890/485 615/892/487 +f 593/871/466 592/869/464 607/891/486 608/893/488 +f 601/872/467 600/870/465 615/892/487 616/894/489 +f 594/873/468 593/871/466 608/893/488 609/895/490 +f 602/874/469 601/872/467 616/894/489 617/881/476 +f 595/875/470 594/873/468 609/895/490 610/883/478 +f 615/892/487 614/890/485 629/896/491 630/897/492 +f 608/893/488 607/891/486 622/898/493 623/899/494 +f 616/894/489 615/892/487 630/897/492 631/900/495 +f 609/895/490 608/893/488 623/899/494 624/901/496 +f 617/881/476 616/894/489 631/900/495 632/902/497 +f 610/883/478 609/895/490 624/901/496 625/903/498 +f 618/882/477 617/881/476 632/902/497 633/904/499 +f 611/884/479 610/883/478 625/903/498 626/905/500 +f 619/885/480 618/882/477 633/904/499 634/906/501 +f 612/886/481 611/884/479 626/905/500 627/907/502 +f 620/887/482 619/885/480 634/906/501 635/908/503 +f 613/888/483 612/886/481 627/907/502 628/909/504 +f 606/889/484 530/698/293 621/910/505 +f 409/700/295 620/887/482 635/908/503 +f 614/890/485 613/888/483 628/909/504 629/896/491 +f 607/891/486 606/889/484 621/910/505 622/898/493 +f 634/906/501 633/904/499 648/911/506 649/912/507 +f 627/907/502 626/905/500 641/913/508 642/914/509 +f 635/908/503 634/906/501 649/912/507 650/915/510 +f 628/909/504 627/907/502 642/914/509 643/916/511 +f 621/910/505 530/698/293 636/917/512 +f 409/700/295 635/908/503 650/915/510 +f 629/896/491 628/909/504 643/916/511 644/918/513 +f 622/898/493 621/910/505 636/917/512 637/919/514 +f 630/897/492 629/896/491 644/918/513 645/920/515 +f 623/899/494 622/898/493 637/919/514 638/921/516 +f 631/900/495 630/897/492 645/920/515 646/922/517 +f 624/901/496 623/899/494 638/921/516 639/923/518 +f 632/902/497 631/900/495 646/922/517 647/924/519 +f 625/903/498 624/901/496 639/923/518 640/925/520 +f 633/904/499 632/902/497 647/924/519 648/911/506 +f 626/905/500 625/903/498 640/925/520 641/913/508 +f 643/916/511 642/914/509 657/691/287 658/695/4 +f 636/917/512 530/698/293 651/697/292 +f 409/700/295 650/915/510 665/693/289 +f 644/918/513 643/916/511 658/695/4 659/670/266 +f 637/919/514 636/917/512 651/697/292 652/674/270 +f 645/920/515 644/918/513 659/670/266 660/669/265 +f 638/921/516 637/919/514 652/674/270 653/673/269 +f 646/922/517 645/920/515 660/669/265 661/677/273 +f 639/923/518 638/921/516 653/673/269 654/679/275 +f 647/924/519 646/922/517 661/677/273 662/681/277 +f 640/925/520 639/923/518 654/679/275 655/683/279 +f 648/911/506 647/924/519 662/681/277 663/685/281 +f 641/913/508 640/925/520 655/683/279 656/687/283 +f 649/912/507 648/911/506 663/685/281 664/689/285 +f 642/914/509 641/913/508 656/687/283 657/691/287 +f 650/915/510 649/912/507 664/689/285 665/693/289 +f 365/618/260 368/617/210 366/628/214 367/627/261 +f 369/926/262 362/927/5 364/636/211 371/635/263 +f 361/638/264 372/637/207 370/616/3 363/615/259 +f 666/225/521 669/928/522 671/929/523 670/930/524 +f 669/928/522 673/931/525 674/932/526 671/929/523 +f 667/190/527 672/933/528 674/934/526 673/935/525 +f 672/933/528 676/936/529 677/937/530 674/934/526 +f 668/195/531 675/938/532 677/939/530 676/940/529 +f 675/938/532 670/941/524 671/942/523 677/939/530 +f 671/929/523 674/932/526 677/943/530 +f 678/191/533 681/944/534 683/945/535 682/946/536 +f 681/947/534 685/948/537 686/949/538 683/950/535 +f 679/224/539 684/951/540 686/952/538 685/953/537 +f 684/951/540 688/954/541 689/955/542 686/952/538 +f 680/182/543 687/956/544 689/957/542 688/958/541 +f 687/956/544 682/959/536 683/960/535 689/957/542 +f 683/950/535 686/949/538 689/961/542 +f 698/186/545 701/962/546 703/963/547 702/964/548 +f 701/962/546 705/965/549 706/966/550 703/963/547 +f 699/183/551 704/967/552 706/968/550 705/969/549 +f 704/970/552 708/971/553 709/972/554 706/973/550 +f 700/223/555 707/974/556 709/975/554 708/976/553 +f 707/974/556 702/977/548 703/978/547 709/975/554 +f 703/979/547 706/980/550 709/981/554 +f 714/187/557 717/982/558 719/983/559 718/984/560 +f 717/982/558 721/985/561 722/986/562 719/983/559 +f 715/222/563 720/987/564 722/988/562 721/989/561 +f 720/987/564 724/990/565 725/991/566 722/988/562 +f 716/194/567 723/992/568 725/993/566 724/994/565 +f 723/992/568 718/995/560 719/996/559 725/993/566 +f 719/983/559 722/986/562 725/997/566 +f 698/186/545 711/189/569 713/998/570 701/962/546 +f 701/962/546 713/998/570 712/999/571 705/965/549 +f 705/969/549 712/1000/571 710/184/572 699/183/551 +f 716/194/567 727/197/573 729/1001/574 723/992/568 +f 723/992/568 729/1001/574 728/1002/575 718/995/560 +f 718/984/560 728/1003/575 726/188/576 714/187/557 +f 668/195/531 716/194/567 724/994/565 675/938/532 +f 675/938/532 724/994/565 720/1004/564 670/941/524 +f 670/930/524 720/987/564 715/222/563 666/225/521 +f 680/182/543 691/185/577 693/1005/578 687/956/544 +f 687/956/544 693/1005/578 692/1006/579 682/959/536 +f 682/946/536 692/1007/579 690/192/580 678/191/533 +f 679/224/539 700/223/555 708/976/553 684/951/540 +f 684/951/540 708/976/553 704/1008/552 688/954/541 +f 688/958/541 704/967/552 699/183/551 680/182/543 +f 700/223/555 715/222/563 721/989/561 707/974/556 +f 707/974/556 721/989/561 717/1009/558 702/977/548 +f 702/964/548 717/982/558 714/187/557 698/186/545 +f 667/190/527 695/193/581 697/1010/582 672/933/528 +f 672/933/528 697/1010/582 696/1011/583 676/936/529 +f 676/940/529 696/1012/583 694/196/584 668/195/531 +f 666/225/521 679/224/539 685/953/537 669/928/522 +f 669/928/522 685/953/537 681/1013/534 673/931/525 +f 673/935/525 681/944/534 678/191/533 667/190/527 diff --git a/mods/pipeworks/models/pipeworks_pump_lowpoly.obj b/mods/pipeworks/models/pipeworks_pump_lowpoly.obj new file mode 100755 index 0000000..537fc34 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_pump_lowpoly.obj @@ -0,0 +1,214 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-pump-lowpoly.blend' +# www.blender.org +o Cube +v 0.153397 0.500000 -0.063525 +v 0.063558 0.500000 -0.153364 +v -0.063492 0.500000 -0.153364 +v -0.153331 0.500000 -0.063525 +v -0.153331 0.500000 0.063526 +v -0.063492 0.500000 0.153364 +v 0.063558 0.500000 0.153364 +v 0.153397 0.500000 0.063526 +v 0.063558 0.468700 -0.153364 +v 0.153397 0.468700 -0.063525 +v 0.153397 0.468700 0.063526 +v 0.063558 0.468700 0.153364 +v -0.063492 0.468700 0.153364 +v -0.153331 0.468700 0.063526 +v -0.153331 0.468700 -0.063525 +v -0.063492 0.468700 -0.153364 +v -0.122656 0.374847 0.050803 +v -0.050827 0.374847 0.122608 +v -0.050728 0.468750 0.122608 +v -0.122557 0.468750 0.050804 +v -0.050771 0.468750 -0.122590 +v -0.050870 0.374847 -0.122590 +v -0.122674 0.374847 -0.050761 +v -0.122575 0.468750 -0.050760 +v 0.050794 0.468750 -0.122607 +v 0.050695 0.374847 -0.122608 +v 0.122623 0.468750 -0.050803 +v 0.122524 0.374847 -0.050804 +v 0.050837 0.468750 0.122590 +v 0.050738 0.374847 0.122590 +v 0.122542 0.374847 0.050761 +v 0.122641 0.468750 0.050761 +v -0.496061 -0.496094 0.496094 +v -0.496061 -0.496094 -0.496094 +v 0.496127 -0.496094 -0.496094 +v 0.496127 -0.496094 0.496094 +v -0.496061 -0.375000 0.496094 +v -0.496061 -0.375000 -0.496094 +v 0.496127 -0.375000 -0.496094 +v 0.496127 -0.375000 0.496094 +v -0.437467 -0.375000 0.437500 +v -0.437467 -0.375000 -0.437500 +v 0.437533 -0.375000 -0.437500 +v 0.437533 -0.375000 0.437500 +v -0.437467 0.375000 0.437500 +v -0.437467 0.375000 -0.437500 +v 0.437533 0.375000 -0.437500 +v 0.437533 0.375000 0.437500 +vt 0.0312 0.7695 +vt 0.0078 0.7461 +vt 0.0078 0.7148 +vt 0.0312 0.6914 +vt 0.0625 0.6914 +vt 0.0859 0.7148 +vt 0.0859 0.7461 +vt 0.0625 0.7695 +vt 0.1016 0.7461 +vt 0.1250 0.7695 +vt 0.1562 0.7695 +vt 0.1797 0.7461 +vt 0.1797 0.7148 +vt 0.1562 0.6914 +vt 0.1250 0.6914 +vt 0.1016 0.7148 +vt 0.7148 0.7617 +vt 0.7148 0.5117 +vt 0.7461 0.5117 +vt 0.7461 0.7617 +vt 0.6211 0.7617 +vt 0.6211 0.5117 +vt 0.6523 0.5117 +vt 0.6523 0.7617 +vt 0.6836 0.7617 +vt 0.6836 0.5117 +vt 0.7148 0.5117 +vt 0.7148 0.7617 +vt 0.6836 0.7617 +vt 0.6523 0.7617 +vt 0.6523 0.5117 +vt 0.9961 0.5117 +vt 0.9961 0.7617 +vt 0.9961 0.2617 +vt 0.9961 0.5117 +vt 0.7461 0.5117 +vt 0.7461 0.2617 +vt 0.2305 0.2617 +vt 0.4492 0.2617 +vt 0.4492 0.4336 +vt 0.2305 0.4336 +vt 0.2227 0.6133 +vt 0.0039 0.6133 +vt 0.0039 0.4414 +vt 0.2227 0.4414 +vt 0.2227 0.4336 +vt 0.0039 0.4336 +vt 0.0039 0.2617 +vt 0.2227 0.2617 +vt 0.6758 0.4336 +vt 0.4570 0.4336 +vt 0.4570 0.2617 +vt 0.6758 0.2617 +vt 0.2305 0.6602 +vt 0.2305 0.4414 +vt 0.4492 0.4414 +vt 0.4492 0.6602 +vt 0.0547 0.9727 +vt 0.0547 0.9648 +vt 0.0625 0.9648 +vt 0.0625 0.9727 +vt 0.0781 0.9727 +vt 0.0781 0.9648 +vt 0.0859 0.9648 +vt 0.0859 0.9727 +vt 0.0469 0.9727 +vt 0.0469 0.9648 +vt 0.0938 0.9648 +vt 0.0938 0.9727 +vt 0.0391 0.9727 +vt 0.0391 0.9648 +vt 0.0703 0.9727 +vt 0.0703 0.9648 +vt 0.0312 0.9727 +vt 0.0312 0.9648 +vt 0.0508 0.9766 +vt 0.0664 0.9766 +vt 0.0664 0.9922 +vt 0.0508 0.9922 +vt 0.0195 0.9922 +vt 0.0195 0.9766 +vt 0.0352 0.9766 +vt 0.0352 0.9922 +vt 0.0039 0.9922 +vt 0.0039 0.9766 +vt 0.1133 0.9922 +vt 0.1133 0.9766 +vt 0.1289 0.9766 +vt 0.1289 0.9922 +vt 0.0820 0.9922 +vt 0.0820 0.9766 +vt 0.0977 0.9766 +vt 0.0977 0.9922 +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 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.7173 0.6302 0.2971 +vn -0.7173 -0.6302 0.2971 +vn -0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn 0.7173 0.6302 0.2971 +vn 0.7173 -0.6302 0.2971 +vn 0.7173 -0.6302 -0.2971 +vn 0.7173 0.6302 -0.2971 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 -0.6302 -0.2971 +vn 0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 -0.7173 +vn -0.2971 0.6302 -0.7173 +vn -0.2971 -0.6302 -0.7173 +vn 0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn -0.9238 0.0009 0.3827 +vn -0.3827 0.0004 0.9238 +vn -0.3823 0.0004 0.9240 +vn -0.9238 0.0009 0.3829 +vn -0.3826 0.0004 -0.9239 +vn -0.3830 0.0004 -0.9237 +vn -0.9240 0.0009 -0.3824 +vn -0.9239 0.0009 -0.3826 +vn 0.3827 -0.0004 -0.9238 +vn 0.3823 -0.0004 -0.9240 +vn 0.9238 -0.0009 -0.3827 +vn 0.9238 -0.0009 -0.3829 +vn 0.3830 -0.0004 0.9237 +vn 0.3826 -0.0004 0.9239 +vn 0.9239 -0.0009 0.3826 +vn 0.9240 -0.0009 0.3824 +g Cube_Cube_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2 +f 37/17/3 38/18/3 34/19/3 33/20/3 +f 38/21/4 39/22/4 35/23/4 34/24/4 +f 39/25/5 40/26/5 36/27/5 35/28/5 +f 40/26/6 37/29/6 33/30/6 36/31/6 +f 33/20/2 34/19/2 35/32/2 36/33/2 +f 40/34/1 39/35/1 38/36/1 37/37/1 +f 45/38/3 46/39/3 42/40/3 41/41/3 +f 46/42/4 47/43/4 43/44/4 42/45/4 +f 47/46/5 48/47/5 44/48/5 43/49/5 +f 48/50/6 45/51/6 41/52/6 44/53/6 +f 48/54/1 47/55/1 46/56/1 45/57/1 +s 1 +f 5/58/7 14/59/8 13/60/9 6/61/10 +f 8/62/11 11/63/12 10/64/13 1/65/14 +f 4/66/15 15/67/16 14/59/8 5/58/7 +f 1/65/14 10/64/13 9/68/17 2/69/18 +f 3/70/19 16/71/20 15/67/16 4/66/15 +f 7/72/21 12/73/22 11/63/12 8/62/11 +f 6/61/10 13/60/9 12/73/22 7/72/21 +f 2/74/18 9/75/17 16/71/20 3/70/19 +f 17/76/23 18/77/24 19/78/25 20/79/26 +f 21/80/27 22/81/28 23/82/29 24/83/30 +f 25/84/31 26/85/32 22/81/28 21/80/27 +f 27/86/33 28/87/34 26/88/32 25/89/31 +f 29/90/35 30/91/36 31/92/37 32/93/38 +f 19/78/25 18/77/24 30/91/36 29/90/35 +f 24/83/30 23/82/29 17/76/23 20/79/26 +f 31/92/37 28/87/34 27/86/33 32/93/38 diff --git a/mods/pipeworks/models/pipeworks_spigot.obj b/mods/pipeworks/models/pipeworks_spigot.obj new file mode 100755 index 0000000..17dd23f --- /dev/null +++ b/mods/pipeworks/models/pipeworks_spigot.obj @@ -0,0 +1,2549 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-spigot-pouring.blend' +# www.blender.org +o Pipe_Cylinder.002 +v 0.120197 0.036461 0.437501 +v 0.125000 0.012312 0.437501 +v 0.125000 -0.012311 0.437501 +v 0.120197 -0.036461 0.437501 +v 0.110774 0.059210 0.437501 +v 0.131836 0.012985 0.468750 +v 0.126770 0.038455 0.468750 +v 0.131836 -0.012985 0.468750 +v 0.110774 -0.059210 0.437501 +v 0.126770 -0.038455 0.468750 +v 0.097094 0.079683 0.437501 +v 0.116832 0.062448 0.468750 +v 0.097094 -0.079683 0.437501 +v 0.116832 -0.062448 0.468750 +v 0.079683 0.097094 0.437501 +v 0.102404 0.084041 0.468750 +v 0.079683 -0.097094 0.437501 +v 0.102404 -0.084041 0.468750 +v 0.059210 0.110774 0.437501 +v 0.084041 0.102404 0.468750 +v 0.059210 -0.110774 0.437501 +v 0.084041 -0.102404 0.468750 +v 0.036461 0.120197 0.437501 +v 0.062448 0.116832 0.468750 +v 0.036461 -0.120197 0.437501 +v 0.062448 -0.116832 0.468750 +v 0.012311 0.125000 0.437501 +v 0.038455 0.126770 0.468750 +v 0.012311 -0.125001 0.437501 +v 0.038455 -0.126770 0.468750 +v -0.012312 0.125000 0.437501 +v 0.012985 0.131836 0.468750 +v -0.012312 -0.125001 0.437501 +v 0.012985 -0.131837 0.468750 +v -0.036461 0.120197 0.437501 +v -0.012985 0.131836 0.468750 +v -0.036461 -0.120197 0.437501 +v -0.012985 -0.131837 0.468750 +v -0.059210 0.110774 0.437501 +v -0.038455 0.126770 0.468750 +v -0.059210 -0.110774 0.437501 +v -0.038455 -0.126770 0.468750 +v -0.079683 0.097094 0.437501 +v -0.062448 0.116832 0.468750 +v -0.079683 -0.097094 0.437501 +v -0.062448 -0.116832 0.468750 +v -0.097094 0.079683 0.437501 +v -0.084041 0.102404 0.468750 +v -0.097094 -0.079683 0.437501 +v -0.084041 -0.102404 0.468750 +v -0.110774 0.059210 0.437501 +v -0.102404 0.084041 0.468750 +v -0.110774 -0.059210 0.437501 +v -0.102404 -0.084041 0.468750 +v -0.120197 0.036461 0.437501 +v -0.116832 0.062448 0.468750 +v -0.120197 -0.036461 0.437501 +v -0.116832 -0.062448 0.468750 +v -0.125001 0.012311 0.437501 +v -0.126770 0.038455 0.468750 +v -0.125001 -0.012311 0.437501 +v -0.126770 -0.038455 0.468750 +v -0.131837 0.012985 0.468750 +v -0.131837 -0.012985 0.468750 +v -0.063644 0.130078 0.460912 +v -0.063644 0.130078 0.468749 +v -0.062467 0.139022 0.468749 +v -0.062467 0.139022 0.460912 +v -0.054133 0.142474 0.460912 +v -0.046976 0.136982 0.460912 +v -0.048153 0.128039 0.460912 +v -0.056487 0.124587 0.460912 +v -0.056487 0.124587 0.468749 +v -0.054133 0.142474 0.468749 +v -0.046976 0.136982 0.468749 +v -0.048153 0.128039 0.468749 +v -0.136982 0.046976 0.460912 +v -0.136982 0.046976 0.468749 +v -0.142474 0.054133 0.468749 +v -0.142474 0.054133 0.460912 +v -0.139022 0.062467 0.460912 +v -0.130078 0.063644 0.460912 +v -0.124587 0.056488 0.460912 +v -0.128039 0.048154 0.460912 +v -0.128039 0.048154 0.468749 +v -0.139022 0.062467 0.468749 +v -0.130078 0.063644 0.468749 +v -0.124587 0.056488 0.468749 +v -0.130078 -0.063644 0.460912 +v -0.130078 -0.063644 0.468749 +v -0.139022 -0.062467 0.468749 +v -0.139022 -0.062467 0.460912 +v -0.142474 -0.054132 0.460912 +v -0.136982 -0.046976 0.460912 +v -0.128039 -0.048153 0.460912 +v -0.124587 -0.056487 0.460912 +v -0.124587 -0.056487 0.468749 +v -0.142474 -0.054132 0.468749 +v -0.136982 -0.046976 0.468749 +v -0.128039 -0.048153 0.468749 +v -0.046976 -0.136982 0.460912 +v -0.046976 -0.136982 0.468749 +v -0.054133 -0.142474 0.468749 +v -0.054133 -0.142474 0.460912 +v -0.062467 -0.139022 0.460912 +v -0.063644 -0.130078 0.460912 +v -0.056488 -0.124587 0.460912 +v -0.048154 -0.128039 0.460912 +v -0.048154 -0.128039 0.468749 +v -0.062467 -0.139022 0.468749 +v -0.063644 -0.130078 0.468749 +v -0.056488 -0.124587 0.468749 +v 0.063644 -0.130078 0.460912 +v 0.063644 -0.130078 0.468749 +v 0.062466 -0.139022 0.468749 +v 0.062466 -0.139022 0.460912 +v 0.054132 -0.142474 0.460912 +v 0.046976 -0.136982 0.460912 +v 0.048153 -0.128039 0.460912 +v 0.056487 -0.124587 0.460912 +v 0.056487 -0.124587 0.468749 +v 0.054132 -0.142474 0.468749 +v 0.046976 -0.136982 0.468749 +v 0.048153 -0.128039 0.468749 +v 0.136982 -0.046976 0.460912 +v 0.136982 -0.046976 0.468749 +v 0.142474 -0.054133 0.468749 +v 0.142474 -0.054133 0.460912 +v 0.139022 -0.062467 0.460912 +v 0.130078 -0.063644 0.460912 +v 0.124586 -0.056488 0.460912 +v 0.128039 -0.048153 0.460912 +v 0.128039 -0.048153 0.468749 +v 0.139022 -0.062467 0.468749 +v 0.130078 -0.063644 0.468749 +v 0.124586 -0.056488 0.468749 +v 0.130078 0.063644 0.460912 +v 0.130078 0.063644 0.468749 +v 0.139022 0.062467 0.468749 +v 0.139022 0.062467 0.460912 +v 0.142474 0.054132 0.460912 +v 0.136982 0.046976 0.460912 +v 0.128039 0.048153 0.460912 +v 0.124587 0.056487 0.460912 +v 0.124587 0.056487 0.468749 +v 0.142474 0.054132 0.468749 +v 0.136982 0.046976 0.468749 +v 0.128039 0.048153 0.468749 +v 0.046976 0.136982 0.460912 +v 0.046976 0.136982 0.468749 +v 0.054133 0.142474 0.468749 +v 0.054133 0.142474 0.460912 +v 0.062467 0.139022 0.460912 +v 0.063644 0.130078 0.460912 +v 0.056488 0.124587 0.460912 +v 0.048153 0.128039 0.460912 +v 0.048153 0.128039 0.468749 +v 0.062467 0.139022 0.468749 +v 0.063644 0.130078 0.468749 +v 0.056487 0.124587 0.468749 +v 0.125000 0.012312 0.012311 +v 0.012311 -0.125001 0.125000 +v -0.059210 -0.110774 0.110774 +v -0.079683 -0.097094 0.097094 +v -0.097094 -0.079683 0.079683 +v -0.120197 -0.036461 0.036461 +v 0.125000 -0.012312 0.012312 +v 0.120197 -0.036461 0.036461 +v 0.110774 -0.059210 0.059210 +v 0.097094 -0.079683 0.079683 +v 0.079683 -0.097094 0.097094 +v 0.059210 -0.110774 0.110774 +v 0.036461 -0.120197 0.120197 +v -0.012311 -0.125000 0.125000 +v -0.036461 -0.120197 0.120197 +v -0.110774 -0.059210 0.059210 +v -0.125000 -0.012311 0.012311 +v -0.125000 0.012312 0.012312 +v 0.074012 -0.138466 0.468750 +v 0.045576 -0.150245 0.468750 +v 0.015389 -0.156250 0.468750 +v 0.099603 -0.121367 0.468750 +v -0.015389 -0.156250 0.468750 +v 0.138467 -0.074012 0.468750 +v 0.121367 -0.099603 0.468750 +v 0.099603 -0.121367 0.500000 +v 0.074012 -0.138467 0.500000 +v 0.045576 -0.150245 0.500000 +v 0.015389 -0.156250 0.500000 +v -0.015389 -0.156250 0.500000 +v 0.150245 -0.045576 0.468750 +v 0.121367 -0.099603 0.500000 +v -0.045576 -0.150245 0.468750 +v -0.045576 -0.150245 0.500000 +v 0.156250 -0.015389 0.468750 +v 0.150245 -0.045576 0.500000 +v 0.138466 -0.074012 0.500000 +v -0.074012 -0.138467 0.468750 +v -0.074012 -0.138467 0.500000 +v 0.156249 0.015389 0.468750 +v 0.156250 -0.015389 0.500000 +v -0.099603 -0.121367 0.468750 +v -0.099603 -0.121367 0.500000 +v 0.150245 0.045576 0.468750 +v 0.156250 0.015389 0.500000 +v -0.121367 -0.099603 0.468750 +v -0.121367 -0.099603 0.500000 +v 0.138467 0.074012 0.468750 +v 0.150245 0.045576 0.500000 +v -0.150245 -0.045576 0.468750 +v -0.138467 -0.074012 0.468750 +v -0.138467 -0.074012 0.500000 +v 0.121367 0.099603 0.468750 +v 0.138467 0.074012 0.500000 +v -0.156250 -0.015389 0.468750 +v -0.150245 -0.045576 0.500000 +v 0.099603 0.121367 0.468750 +v 0.121367 0.099603 0.500000 +v -0.156250 0.015389 0.468750 +v -0.156250 -0.015389 0.500000 +v 0.074012 0.138466 0.468750 +v 0.099603 0.121367 0.500000 +v -0.150245 0.045576 0.468750 +v -0.156250 0.015389 0.500000 +v 0.045576 0.150245 0.468750 +v 0.074012 0.138466 0.500000 +v -0.138467 0.074012 0.468750 +v -0.150245 0.045576 0.500000 +v 0.015389 0.156249 0.468750 +v 0.045576 0.150245 0.500000 +v -0.015389 0.156250 0.500000 +v -0.121367 0.099603 0.468750 +v -0.138467 0.074012 0.500000 +v -0.015389 0.156250 0.468750 +v 0.015389 0.156250 0.500000 +v -0.074012 0.138467 0.500000 +v -0.045576 0.150245 0.500000 +v -0.099603 0.121367 0.500000 +v -0.121367 0.099603 0.500000 +v -0.045576 0.150245 0.468750 +v -0.099603 0.121367 0.468750 +v -0.074012 0.138467 0.468750 +v -0.108578 0.095821 0.460912 +v -0.108578 0.095821 0.468749 +v -0.110913 0.104534 0.468749 +v -0.110913 0.104534 0.460912 +v -0.104534 0.110913 0.460912 +v -0.095821 0.108578 0.460912 +v -0.093486 0.099865 0.460912 +v -0.099865 0.093486 0.460912 +v -0.099865 0.093486 0.468749 +v -0.104534 0.110913 0.468749 +v -0.095821 0.108578 0.468749 +v -0.093486 0.099865 0.468749 +v -0.144532 -0.009021 0.460912 +v -0.144532 -0.009021 0.468749 +v -0.152344 -0.004510 0.468749 +v -0.152344 -0.004510 0.460912 +v -0.152344 0.004510 0.460912 +v -0.144532 0.009021 0.460912 +v -0.136720 0.004510 0.460912 +v -0.136720 -0.004510 0.460912 +v -0.136720 -0.004510 0.468749 +v -0.152344 0.004510 0.468749 +v -0.144532 0.009021 0.468749 +v -0.136720 0.004510 0.468749 +v -0.095821 -0.108578 0.460912 +v -0.095821 -0.108578 0.468749 +v -0.104535 -0.110913 0.468749 +v -0.104535 -0.110913 0.460912 +v -0.110913 -0.104534 0.460912 +v -0.108578 -0.095821 0.460912 +v -0.099865 -0.093486 0.460912 +v -0.093486 -0.099865 0.460912 +v -0.093486 -0.099865 0.468749 +v -0.110913 -0.104534 0.468749 +v -0.108578 -0.095821 0.468749 +v -0.099865 -0.093486 0.468749 +v 0.009021 -0.144532 0.460912 +v 0.009021 -0.144532 0.468749 +v 0.004510 -0.152344 0.468749 +v 0.004510 -0.152344 0.460912 +v -0.004511 -0.152344 0.460912 +v -0.009021 -0.144532 0.460912 +v -0.004511 -0.136720 0.460912 +v 0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.468749 +v -0.004511 -0.152344 0.468749 +v -0.009021 -0.144532 0.468749 +v -0.004511 -0.136720 0.468749 +v 0.108578 -0.095821 0.460912 +v 0.108578 -0.095821 0.468749 +v 0.110913 -0.104534 0.468749 +v 0.110913 -0.104534 0.460912 +v 0.104534 -0.110913 0.460912 +v 0.095821 -0.108578 0.460912 +v 0.093486 -0.099865 0.460912 +v 0.099865 -0.093486 0.460912 +v 0.099865 -0.093486 0.468749 +v 0.104534 -0.110913 0.468749 +v 0.095821 -0.108578 0.468749 +v 0.093486 -0.099865 0.468749 +v 0.144532 0.009021 0.460912 +v 0.144532 0.009021 0.468749 +v 0.152344 0.004510 0.468749 +v 0.152344 0.004510 0.460912 +v 0.152344 -0.004510 0.460912 +v 0.144532 -0.009021 0.460912 +v 0.136720 -0.004510 0.460912 +v 0.136720 0.004510 0.460912 +v 0.136720 0.004510 0.468749 +v 0.152344 -0.004510 0.468749 +v 0.144532 -0.009021 0.468749 +v 0.136720 -0.004510 0.468749 +v 0.095821 0.108578 0.460912 +v 0.095821 0.108578 0.468749 +v 0.104534 0.110913 0.468749 +v 0.104534 0.110913 0.460912 +v 0.110913 0.104534 0.460912 +v 0.108578 0.095821 0.460912 +v 0.099865 0.093486 0.460912 +v 0.093486 0.099865 0.460912 +v 0.093486 0.099865 0.468749 +v 0.110913 0.104534 0.468749 +v 0.108578 0.095821 0.468749 +v 0.099865 0.093486 0.468749 +v -0.009021 0.144532 0.460912 +v -0.009021 0.144532 0.468749 +v -0.004510 0.152344 0.468749 +v -0.004510 0.152344 0.460912 +v 0.004510 0.152344 0.460912 +v 0.009021 0.144532 0.460912 +v 0.004510 0.136720 0.460912 +v -0.004510 0.136720 0.460912 +v -0.004510 0.136720 0.468749 +v 0.004510 0.152344 0.468749 +v 0.009021 0.144532 0.468749 +v 0.004510 0.136720 0.468749 +v 0.125000 0.012312 -0.000000 +v -0.120197 0.036461 0.000000 +v -0.110774 0.059210 -0.000000 +v -0.097094 0.079683 -0.000000 +v -0.036461 0.120197 -0.000000 +v -0.059210 0.110774 -0.000000 +v -0.079683 0.097094 -0.000000 +v 0.036461 0.120197 -0.000000 +v -0.125000 -0.012311 0.000000 +v 0.059210 0.110774 -0.000000 +v 0.079683 0.097094 -0.000000 +v 0.097094 0.079683 -0.000000 +v 0.110774 0.059210 -0.000000 +v 0.120197 0.036461 0.000000 +v -0.125000 0.012312 0.000000 +v -0.012311 0.125000 -0.000000 +v 0.012312 0.125000 -0.000000 +v 0.125000 -0.012312 0.000000 +v 0.000000 0.125000 -0.000000 +v 0.125000 0.000000 0.000000 +v -0.125000 0.000000 0.012312 +v -0.038455 -0.187500 -0.126770 +v -0.012985 -0.187500 -0.131837 +v 0.012984 -0.187500 -0.131837 +v 0.038455 -0.187500 -0.126770 +v 0.062448 -0.187500 -0.116832 +v 0.084041 -0.187500 -0.102404 +v 0.102404 -0.187500 -0.084041 +v 0.116832 -0.187500 -0.062448 +v 0.126770 -0.187500 -0.038455 +v 0.131837 -0.187500 -0.012985 +v 0.131837 -0.187500 0.012985 +v 0.116832 -0.187500 0.062448 +v 0.102404 -0.187500 0.084041 +v 0.084041 -0.187500 0.102404 +v 0.062448 -0.187500 0.116832 +v 0.038455 -0.187500 0.126770 +v 0.012985 -0.187500 0.131836 +v -0.012985 -0.187500 0.131836 +v -0.038455 -0.187500 0.126770 +v -0.062448 -0.187500 0.116832 +v -0.102404 -0.187500 0.084041 +v -0.084041 -0.187500 0.102404 +v -0.116832 -0.187500 0.062448 +v -0.126770 -0.187500 0.038455 +v -0.131837 -0.187500 -0.012985 +v -0.116832 -0.187500 -0.062448 +v -0.126770 -0.187500 -0.038455 +v -0.102404 -0.187500 -0.084041 +v -0.084041 -0.187500 -0.102404 +v -0.062448 -0.187500 -0.116832 +v 0.126770 -0.187500 0.038455 +v -0.131836 -0.187500 0.012985 +v -0.059210 -0.156251 -0.110774 +v -0.036461 -0.156251 -0.120197 +v -0.012312 -0.156251 -0.125001 +v 0.012311 -0.156251 -0.125001 +v 0.036461 -0.156251 -0.120197 +v 0.059210 -0.156251 -0.110774 +v 0.079683 -0.156251 -0.097094 +v 0.097094 -0.156251 -0.079683 +v 0.110774 -0.156251 -0.059210 +v 0.120197 -0.156251 -0.036461 +v 0.125001 -0.156251 -0.012312 +v 0.125000 -0.156251 0.012311 +v 0.120197 -0.156251 0.036461 +v 0.110774 -0.156251 0.059210 +v 0.097094 -0.156251 0.079683 +v 0.079683 -0.156251 0.097094 +v 0.059210 -0.156251 0.110774 +v 0.036461 -0.156251 0.120197 +v 0.012311 -0.156251 0.125000 +v -0.012311 -0.156251 0.125000 +v -0.036461 -0.156251 0.120197 +v -0.059210 -0.156251 0.110774 +v -0.079683 -0.156251 0.097094 +v -0.097094 -0.156251 0.079683 +v -0.110774 -0.156251 0.059210 +v -0.120197 -0.156251 0.036461 +v -0.125000 -0.156251 0.012311 +v -0.125000 -0.156251 -0.012311 +v -0.120197 -0.156251 -0.036461 +v -0.110774 -0.156251 -0.059210 +v -0.097094 -0.156251 -0.079683 +v -0.079683 -0.156251 -0.097094 +v 0.125000 -0.012312 -0.012312 +v -0.125000 -0.012312 -0.012312 +v 0.121367 -0.312500 -0.099603 +v 0.138467 -0.312500 -0.074012 +v 0.150245 -0.312500 -0.045577 +v 0.156250 -0.312500 -0.015390 +v 0.156250 -0.312500 0.015389 +v 0.150245 -0.312500 0.045576 +v 0.138467 -0.312500 0.074012 +v 0.121367 -0.312500 0.099603 +v 0.099603 -0.312500 0.121367 +v 0.045576 -0.312500 0.150245 +v -0.015389 -0.312500 0.156249 +v -0.045576 -0.312500 0.150245 +v -0.099603 -0.312500 0.121367 +v -0.121367 -0.312500 0.099603 +v -0.138467 -0.312500 0.074012 +v -0.150245 -0.312500 0.045576 +v -0.156250 -0.312500 0.015389 +v -0.150245 -0.312500 -0.045576 +v -0.138467 -0.312500 -0.074012 +v -0.121367 -0.312500 -0.099603 +v -0.074012 -0.312500 -0.138467 +v -0.015389 -0.312500 -0.156250 +v 0.015389 -0.312500 -0.156250 +v 0.045576 -0.312500 -0.150245 +v 0.074012 -0.312500 -0.138467 +v 0.099603 -0.312500 -0.121367 +v 0.074012 -0.312500 0.138466 +v 0.015389 -0.312500 0.156249 +v -0.074012 -0.312500 0.138467 +v -0.156250 -0.312500 -0.015389 +v -0.099603 -0.312500 -0.121367 +v -0.045576 -0.312500 -0.150245 +v 0.121367 -0.187500 -0.099603 +v 0.099603 -0.187500 -0.121367 +v 0.138467 -0.187500 -0.074012 +v 0.150245 -0.187500 -0.045577 +v 0.156250 -0.187500 -0.015390 +v 0.156250 -0.187500 0.015389 +v 0.150245 -0.187500 0.045576 +v 0.138467 -0.187500 0.074012 +v 0.121367 -0.187500 0.099603 +v 0.099603 -0.187500 0.121367 +v 0.074012 -0.187500 0.138466 +v 0.045576 -0.187500 0.150245 +v 0.015389 -0.187500 0.156249 +v -0.015389 -0.187500 0.156249 +v -0.045576 -0.187500 0.150245 +v -0.074012 -0.187500 0.138467 +v -0.099603 -0.187500 0.121367 +v -0.121367 -0.187500 0.099603 +v -0.138467 -0.187500 0.074012 +v -0.150245 -0.187500 0.045576 +v -0.156250 -0.187500 0.015389 +v -0.156250 -0.187500 -0.015389 +v -0.138467 -0.187500 -0.074012 +v -0.150245 -0.187500 -0.045576 +v -0.121367 -0.187500 -0.099604 +v -0.099603 -0.187500 -0.121367 +v -0.074012 -0.187500 -0.138467 +v -0.045576 -0.187500 -0.150245 +v 0.015389 -0.187500 -0.156250 +v -0.015389 -0.187500 -0.156250 +v 0.045576 -0.187500 -0.150245 +v 0.074012 -0.187500 -0.138467 +v 0.125000 -0.000000 -0.012312 +v -0.120197 0.000000 -0.036461 +v -0.110774 -0.000000 -0.059210 +v -0.097094 0.000000 -0.079683 +v -0.036461 -0.000000 -0.120197 +v -0.059210 -0.000000 -0.110774 +v -0.079683 -0.000000 -0.097094 +v 0.036461 -0.000000 -0.120197 +v 0.059210 -0.000000 -0.110774 +v 0.079683 -0.000000 -0.097094 +v 0.097094 -0.000000 -0.079683 +v 0.110774 -0.000000 -0.059210 +v 0.120197 0.000000 -0.036461 +v -0.125000 0.000000 -0.012312 +v -0.012311 -0.000000 -0.125000 +v 0.012312 -0.000000 -0.125000 +v 0.125000 0.000000 0.012312 +v 0.000000 -0.000000 -0.125000 +v 0.125000 0.002402 -0.012075 +v -0.120197 0.007113 -0.035761 +v -0.110774 0.011551 -0.058072 +v -0.097094 0.015545 -0.078152 +v -0.036461 0.023449 -0.117887 +v -0.059210 0.021611 -0.108646 +v -0.079683 0.018942 -0.095229 +v 0.036461 0.023449 -0.117887 +v 0.059210 0.021611 -0.108645 +v 0.079683 0.018942 -0.095228 +v 0.097094 0.015545 -0.078152 +v 0.110774 0.011551 -0.058072 +v 0.120197 0.007113 -0.035761 +v -0.125000 0.002402 -0.012075 +v -0.012311 0.024386 -0.122599 +v 0.012312 0.024386 -0.122599 +v 0.000000 0.024386 -0.122599 +v 0.125000 0.004711 -0.011375 +v -0.120197 0.013953 -0.033686 +v -0.110774 0.022659 -0.054703 +v -0.097094 0.030493 -0.073618 +v -0.036461 0.045997 -0.111047 +v -0.059210 0.042391 -0.102342 +v -0.079683 0.037156 -0.089703 +v 0.036461 0.045997 -0.111047 +v 0.059210 0.042391 -0.102342 +v 0.079683 0.037156 -0.089703 +v 0.097094 0.030493 -0.073618 +v 0.110774 0.022659 -0.054703 +v 0.120197 0.013953 -0.033686 +v -0.125000 0.004711 -0.011374 +v -0.012311 0.047836 -0.115485 +v 0.012312 0.047835 -0.115485 +v 0.000000 0.047836 -0.115485 +v 0.125000 0.006840 -0.010237 +v -0.120197 0.020257 -0.030317 +v -0.110774 0.032895 -0.049231 +v -0.097094 0.044270 -0.066254 +v -0.036461 0.066778 -0.099940 +v -0.059210 0.061543 -0.092105 +v -0.079683 0.053943 -0.080731 +v 0.036461 0.066778 -0.099940 +v 0.059210 0.061543 -0.092105 +v 0.079683 0.053943 -0.080731 +v 0.097094 0.044270 -0.066254 +v 0.110774 0.032895 -0.049231 +v 0.120197 0.020257 -0.030317 +v -0.125000 0.006840 -0.010237 +v -0.012311 0.069446 -0.103934 +v 0.012312 0.069446 -0.103934 +v 0.000000 0.069446 -0.103934 +v 0.125000 0.008706 -0.008706 +v -0.120197 0.025782 -0.025782 +v -0.110774 0.041868 -0.041868 +v -0.097094 0.056345 -0.056345 +v -0.036461 0.084992 -0.084992 +v -0.059210 0.078329 -0.078329 +v -0.079683 0.068656 -0.068656 +v 0.036461 0.084992 -0.084992 +v 0.059210 0.078329 -0.078329 +v 0.079683 0.068656 -0.068656 +v 0.097094 0.056345 -0.056345 +v 0.110774 0.041868 -0.041868 +v 0.120197 0.025782 -0.025782 +v -0.125000 0.008706 -0.008706 +v -0.012311 0.088389 -0.088389 +v 0.012312 0.088389 -0.088389 +v 0.000000 0.088389 -0.088389 +v -0.125000 0.000000 0.000000 +v 0.125000 0.010237 -0.006840 +v -0.120197 0.030317 -0.020257 +v -0.110774 0.049231 -0.032895 +v -0.097094 0.066254 -0.044270 +v -0.036461 0.099940 -0.066778 +v -0.059210 0.092105 -0.061543 +v -0.079683 0.080731 -0.053943 +v 0.036461 0.099940 -0.066778 +v 0.059210 0.092105 -0.061543 +v 0.079683 0.080731 -0.053943 +v 0.097094 0.066254 -0.044270 +v 0.110774 0.049231 -0.032895 +v 0.120197 0.030317 -0.020257 +v -0.125000 0.010237 -0.006840 +v -0.012311 0.103934 -0.069447 +v 0.012312 0.103934 -0.069447 +v 0.000000 0.103934 -0.069447 +v 0.125000 0.011375 -0.004712 +v -0.120197 0.033686 -0.013953 +v -0.110774 0.054703 -0.022659 +v -0.097094 0.073618 -0.030493 +v -0.036461 0.111047 -0.045997 +v -0.059210 0.102342 -0.042391 +v -0.079683 0.089703 -0.037156 +v 0.036461 0.111047 -0.045997 +v 0.059210 0.102342 -0.042391 +v 0.079683 0.089703 -0.037156 +v 0.097094 0.073618 -0.030493 +v 0.110774 0.054703 -0.022659 +v 0.120197 0.033686 -0.013953 +v -0.125000 0.011374 -0.004711 +v -0.012311 0.115485 -0.047836 +v 0.012312 0.115485 -0.047836 +v 0.000000 0.115485 -0.047836 +v 0.125000 0.012075 -0.002402 +v -0.120197 0.035761 -0.007113 +v -0.110774 0.058072 -0.011551 +v -0.097094 0.078152 -0.015545 +v -0.036461 0.117887 -0.023449 +v -0.059210 0.108646 -0.021611 +v -0.079683 0.095229 -0.018942 +v 0.036461 0.117887 -0.023449 +v 0.059210 0.108645 -0.021611 +v 0.079683 0.095229 -0.018942 +v 0.097094 0.078152 -0.015545 +v 0.110774 0.058072 -0.011551 +v 0.120197 0.035761 -0.007113 +v -0.125000 0.012075 -0.002402 +v -0.012311 0.122599 -0.024387 +v 0.012312 0.122599 -0.024387 +v 0.000000 0.122599 -0.024387 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.5936 0.6717 +vt 0.6238 0.6777 +vt 0.6523 0.6895 +vt 0.6779 0.7066 +vt 0.6996 0.7283 +vt 0.7167 0.7539 +vt 0.7285 0.7824 +vt 0.7345 0.8126 +vt 0.7345 0.8434 +vt 0.7285 0.8735 +vt 0.7167 0.9020 +vt 0.6996 0.9276 +vt 0.6779 0.9493 +vt 0.6523 0.9664 +vt 0.6238 0.9782 +vt 0.5936 0.9842 +vt 0.5629 0.9842 +vt 0.5327 0.9782 +vt 0.5042 0.9664 +vt 0.4786 0.9493 +vt 0.4569 0.9276 +vt 0.4398 0.9020 +vt 0.4280 0.8735 +vt 0.4220 0.8434 +vt 0.4220 0.8126 +vt 0.4280 0.7824 +vt 0.4398 0.7539 +vt 0.4569 0.7283 +vt 0.4786 0.7066 +vt 0.5042 0.6895 +vt 0.5327 0.6777 +vt 0.5629 0.6717 +vt 0.1605 0.6895 +vt 0.1349 0.7066 +vt 0.1131 0.7283 +vt 0.0960 0.7539 +vt 0.0842 0.7824 +vt 0.0782 0.8126 +vt 0.0782 0.8434 +vt 0.0842 0.8735 +vt 0.0960 0.9020 +vt 0.1131 0.9276 +vt 0.1349 0.9493 +vt 0.1605 0.9664 +vt 0.1889 0.9782 +vt 0.2191 0.9842 +vt 0.2499 0.9842 +vt 0.2801 0.9782 +vt 0.3085 0.9664 +vt 0.3341 0.9493 +vt 0.3559 0.9276 +vt 0.3730 0.9020 +vt 0.3848 0.8735 +vt 0.3908 0.8434 +vt 0.3908 0.8126 +vt 0.3848 0.7824 +vt 0.3730 0.7539 +vt 0.3559 0.7283 +vt 0.3341 0.7066 +vt 0.3085 0.6895 +vt 0.2801 0.6777 +vt 0.2499 0.6717 +vt 0.2191 0.6717 +vt 0.1889 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4569 0.9276 +vt 0.4786 0.9493 +vt 0.5042 0.9664 +vt 0.5327 0.9782 +vt 0.5629 0.9842 +vt 0.5936 0.9842 +vt 0.6238 0.9782 +vt 0.6523 0.9664 +vt 0.6779 0.9493 +vt 0.6996 0.9276 +vt 0.7167 0.9020 +vt 0.7285 0.8735 +vt 0.7345 0.8434 +vt 0.7345 0.8126 +vt 0.7285 0.7824 +vt 0.7167 0.7539 +vt 0.6996 0.7283 +vt 0.6779 0.7066 +vt 0.6523 0.6895 +vt 0.6238 0.6777 +vt 0.5936 0.6717 +vt 0.5629 0.6717 +vt 0.5327 0.6777 +vt 0.5042 0.6895 +vt 0.4786 0.7066 +vt 0.4569 0.7283 +vt 0.4398 0.7539 +vt 0.4280 0.7824 +vt 0.4220 0.8126 +vt 0.4220 0.8434 +vt 0.4280 0.8735 +vt 0.4398 0.9020 +vt 0.2801 0.6777 +vt 0.3085 0.6895 +vt 0.3341 0.7066 +vt 0.3559 0.7283 +vt 0.3730 0.7539 +vt 0.3848 0.7824 +vt 0.3908 0.8126 +vt 0.3908 0.8434 +vt 0.3848 0.8735 +vt 0.3730 0.9020 +vt 0.3559 0.9276 +vt 0.3341 0.9493 +vt 0.3085 0.9664 +vt 0.2801 0.9782 +vt 0.2499 0.9842 +vt 0.2191 0.9842 +vt 0.1889 0.9782 +vt 0.1605 0.9664 +vt 0.1349 0.9493 +vt 0.1131 0.9276 +vt 0.0960 0.9020 +vt 0.0842 0.8735 +vt 0.0782 0.8434 +vt 0.0782 0.8126 +vt 0.0842 0.7824 +vt 0.0960 0.7539 +vt 0.1131 0.7283 +vt 0.1349 0.7066 +vt 0.1605 0.6895 +vt 0.1889 0.6777 +vt 0.2191 0.6717 +vt 0.2499 0.6717 +vt 0.7799 0.2569 +vt 0.7643 0.2569 +vt 0.7487 0.2569 +vt 0.7488 0.0330 +vt 0.7796 0.0330 +vt 0.8111 0.2442 +vt 0.8104 0.0330 +vt 0.8423 0.2323 +vt 0.8412 0.0331 +vt 0.7487 0.2633 +vt 0.7175 0.2633 +vt 0.7180 0.0330 +vt 0.8735 0.2215 +vt 0.8721 0.0331 +vt 0.6863 0.2633 +vt 0.6872 0.0330 +vt 0.9028 0.0332 +vt 0.9046 0.2124 +vt 0.7488 0.0188 +vt 0.7180 0.0189 +vt 0.7796 0.0188 +vt 0.8105 0.0188 +vt 0.1560 0.2211 +vt 0.1247 0.2118 +vt 0.1297 0.0310 +vt 0.1609 0.0312 +vt 0.6873 0.0189 +vt 0.8414 0.0188 +vt 0.9358 0.2051 +vt 0.9335 0.0333 +vt 0.6566 0.0188 +vt 0.6565 0.0330 +vt 0.8723 0.0188 +vt 0.9669 0.2001 +vt 0.9639 0.0336 +vt 0.6240 0.2633 +vt 0.6257 0.0329 +vt 0.6551 0.2633 +vt 0.6258 0.0187 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 0.9033 0.0189 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.5950 0.0186 +vt 0.5949 0.0328 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.9343 0.0191 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.0309 0.1970 +vt -0.0002 0.1968 +vt 0.0044 0.0313 +vt 0.0356 0.0310 +vt 0.5305 0.2632 +vt 0.5332 0.0327 +vt 0.5640 0.0328 +vt 0.5617 0.2632 +vt 0.5642 0.0185 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.9653 0.0194 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.5333 0.0184 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 0.9963 0.0201 +vt 0.9937 0.0340 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.0935 0.2046 +vt 0.0622 0.1996 +vt 0.0671 0.0309 +vt 0.0985 0.0309 +vt 0.4993 0.2632 +vt 0.4682 0.2632 +vt 0.4714 0.0325 +vt 0.5023 0.0326 +vt 0.5024 0.0183 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.0349 0.0164 +vt 0.0026 0.0168 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.4058 0.2631 +vt 0.3746 0.2631 +vt 0.3786 0.0321 +vt 0.4095 0.0323 +vt 0.4716 0.0182 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.0670 0.0163 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4407 0.0181 +vt 0.4405 0.0324 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.0987 0.0163 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.4098 0.0180 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.1301 0.0166 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.2497 0.2566 +vt 0.2545 0.0315 +vt 0.2856 0.0317 +vt 0.2809 0.2566 +vt 0.2653 0.2566 +vt 0.3788 0.0179 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.1612 0.0167 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.1921 0.0312 +vt 0.1873 0.2319 +vt 0.3122 0.2631 +vt 0.2809 0.2630 +vt 0.3166 0.0319 +vt 0.3479 0.0177 +vt 0.3476 0.0320 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.1924 0.0168 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3169 0.0175 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.2237 0.0170 +vt 0.2233 0.0314 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2859 0.0174 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.2548 0.0172 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.7643 0.2633 +vt 0.5928 0.2633 +vt 0.4370 0.2632 +vt 0.2185 0.2439 +vt 0.5149 0.2632 +vt 0.9981 0.1975 +vt 0.3434 0.2631 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.2653 0.2630 +vt 0.7799 0.2633 +vt 0.2497 0.2630 +vt 0.4688 0.6406 +vt 0.4688 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.6406 +vt 0.4375 0.6406 +vt 0.4375 0.5625 +vt 0.4062 0.6406 +vt 0.4062 0.5625 +vt 0.3750 0.6406 +vt 0.3750 0.5625 +vt 0.3438 0.6406 +vt 0.3438 0.5625 +vt 0.3125 0.6406 +vt 0.3125 0.5625 +vt 0.2812 0.6406 +vt 0.2812 0.5625 +vt 0.2500 0.6406 +vt 0.2500 0.5625 +vt 0.2188 0.6406 +vt 0.2188 0.5625 +vt 0.1875 0.6406 +vt 0.1875 0.5625 +vt 0.1562 0.6406 +vt 0.1562 0.5625 +vt 0.1250 0.6406 +vt 0.1250 0.5625 +vt 0.0938 0.6406 +vt 0.0938 0.5625 +vt 0.0625 0.6406 +vt 0.0625 0.5625 +vt 0.0312 0.6406 +vt 0.0312 0.5625 +vt 0.0000 0.6406 +vt 0.0000 0.5625 +vt 0.9688 0.6406 +vt 0.9688 0.5625 +vt 1.0000 0.5625 +vt 1.0000 0.6406 +vt 0.9375 0.6406 +vt 0.9375 0.5625 +vt 0.9062 0.6406 +vt 0.9062 0.5625 +vt 0.8750 0.6406 +vt 0.8750 0.5625 +vt 0.8125 0.6406 +vt 0.8125 0.5625 +vt 0.8438 0.5625 +vt 0.8438 0.6406 +vt 0.7812 0.6406 +vt 0.7812 0.5625 +vt 0.7500 0.6406 +vt 0.7500 0.5625 +vt 0.7188 0.6406 +vt 0.7188 0.5625 +vt 0.6875 0.6406 +vt 0.6875 0.5625 +vt 0.6250 0.6406 +vt 0.6250 0.5625 +vt 0.6562 0.5625 +vt 0.6562 0.6406 +vt 0.5938 0.6406 +vt 0.5938 0.5625 +vt 0.5625 0.6406 +vt 0.5625 0.5625 +vt 0.4358 0.5179 +vt 0.4358 0.5107 +vt 0.4668 0.5107 +vt 0.4668 0.5179 +vt 0.4977 0.5179 +vt 0.4977 0.5107 +vt 0.5287 0.5179 +vt 0.5287 0.5107 +vt 0.5596 0.5178 +vt 0.5596 0.5107 +vt 0.5904 0.5179 +vt 0.5905 0.5107 +vt 0.6214 0.5179 +vt 0.6215 0.5107 +vt 0.6524 0.5107 +vt 0.6523 0.5179 +vt 0.6832 0.5180 +vt 0.6834 0.5108 +vt 0.7142 0.5180 +vt 0.7144 0.5108 +vt 0.7452 0.5181 +vt 0.7454 0.5108 +vt 0.7765 0.5109 +vt 0.7763 0.5181 +vt 0.8076 0.5109 +vt 0.8074 0.5181 +vt 0.8384 0.5181 +vt 0.8386 0.5109 +vt 0.8696 0.5109 +vt 0.8695 0.5181 +vt 0.9006 0.5109 +vt 0.9007 0.5181 +vt 0.9320 0.5181 +vt 0.9316 0.5109 +vt 0.9625 0.5108 +vt 0.9635 0.5180 +vt 0.9952 0.5178 +vt 0.9930 0.5106 +vt 0.0001 0.5177 +vt 0.0023 0.5106 +vt 0.0329 0.5107 +vt 0.0319 0.5180 +vt 0.0635 0.5181 +vt 0.0639 0.5108 +vt 0.0952 0.5109 +vt 0.0951 0.5181 +vt 0.1263 0.5108 +vt 0.1263 0.5181 +vt 0.1572 0.5108 +vt 0.1573 0.5180 +vt 0.1881 0.5108 +vt 0.1882 0.5180 +vt 0.2191 0.5108 +vt 0.2192 0.5179 +vt 0.2500 0.5107 +vt 0.2501 0.5179 +vt 0.3119 0.5179 +vt 0.2809 0.5179 +vt 0.2809 0.5107 +vt 0.3118 0.5107 +vt 0.3738 0.5179 +vt 0.3429 0.5179 +vt 0.3428 0.5107 +vt 0.3738 0.5107 +vt 0.4048 0.5179 +vt 0.4048 0.5107 +vt 0.5312 0.5625 +vt 0.5312 0.6406 +vt 0.8100 0.4042 +vt 0.8412 0.4103 +vt 0.8724 0.4157 +vt 0.5294 0.3946 +vt 0.4982 0.3945 +vt 0.5138 0.3945 +vt 0.2798 0.3977 +vt 0.2486 0.3977 +vt 0.2642 0.3977 +vt 0.2642 0.3945 +vt 0.2798 0.3945 +vt 0.7788 0.3979 +vt 0.6541 0.3946 +vt 0.6852 0.3946 +vt 0.1860 0.4101 +vt 0.2173 0.4041 +vt 0.3111 0.3945 +vt 0.3423 0.3945 +vt 0.4047 0.3945 +vt 0.3735 0.3945 +vt 0.5606 0.3946 +vt 0.9036 0.4203 +vt 0.1547 0.4155 +vt 0.4359 0.3945 +vt 0.6229 0.3946 +vt 0.7164 0.3946 +vt 0.7476 0.3946 +vt 0.7476 0.3979 +vt 0.7632 0.3979 +vt 0.9348 0.4240 +vt 0.9660 0.4265 +vt 0.9973 0.4278 +vt -0.0018 0.4276 +vt 0.0296 0.4276 +vt 0.0609 0.4263 +vt 0.0922 0.4238 +vt 0.1234 0.4201 +vt 0.4671 0.3945 +vt 0.5917 0.3946 +vt 0.7632 0.3946 +vt 0.3423 0.3945 +vt 0.3735 0.3945 +vt 0.6541 0.3946 +vt 0.6852 0.3946 +vt 0.7476 0.3946 +vt 0.4671 0.3945 +vt 0.4982 0.3945 +vt 0.7164 0.3946 +vt 0.2798 0.3945 +vt 0.4359 0.3945 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.5606 0.3946 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +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 0.9994 -0.0247 0.0247 +vn 1.0000 0.0000 0.0000 +vn 0.9952 0.0980 0.0000 +vn 0.9893 0.0974 -0.1087 +vn 0.9893 -0.0974 -0.1087 +vn 0.9844 -0.1243 0.1243 +vn 0.9513 -0.2886 -0.1087 +vn 0.9472 -0.2267 0.2267 +vn 0.8767 -0.4686 -0.1087 +vn 0.9948 0.1010 -0.0051 +vn 0.9560 0.2930 -0.0145 +vn 0.9513 0.2886 -0.1087 +vn 0.8819 -0.3333 0.3333 +vn 0.7684 -0.6306 -0.1087 +vn 0.8804 0.4736 -0.0234 +vn 0.8767 0.4686 -0.1087 +vn 0.6306 -0.7684 -0.1087 +vn 0.7793 -0.4431 0.4431 +vn 0.9720 0.0957 -0.2147 +vn 0.9346 0.2835 -0.2147 +vn 0.9720 -0.0957 -0.2147 +vn 0.9346 -0.2835 -0.2147 +vn -0.8819 -0.3333 0.3333 +vn -0.7793 -0.4431 0.4431 +vn -0.6306 -0.7684 -0.1087 +vn -0.7684 -0.6306 -0.1087 +vn 0.8614 0.4604 -0.2147 +vn 0.8614 -0.4604 -0.2147 +vn 0.6267 -0.5510 0.5510 +vn 0.4686 -0.8767 -0.1087 +vn 0.7550 0.6196 -0.2147 +vn 0.7684 0.6306 -0.1087 +vn 0.7550 -0.6196 -0.2147 +vn 0.4139 -0.6437 0.6437 +vn 0.2886 -0.9513 -0.1087 +vn 0.6324 0.7736 -0.0380 +vn 0.6306 0.7684 -0.1087 +vn 0.7711 0.6359 -0.0313 +vn 0.6196 0.7550 -0.2147 +vn 0.4617 -0.5626 -0.6857 +vn 0.4617 -0.5626 0.6857 +vn 0.3431 -0.6419 0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.0713 -0.7244 -0.6857 +vn 0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn 0.6196 -0.7550 -0.2147 +vn 0.5626 -0.4617 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.4604 0.8614 -0.2147 +vn 0.4686 0.8767 -0.1087 +vn -0.2113 -0.6965 0.6857 +vn -0.2113 -0.6965 -0.6857 +vn 0.4604 -0.8614 -0.2147 +vn 0.6419 -0.3431 -0.6857 +vn 0.6419 -0.3431 0.6857 +vn -0.1458 -0.6995 0.6995 +vn 0.1458 -0.6995 0.6995 +vn 0.0974 -0.9893 -0.1087 +vn -0.0974 -0.9893 -0.1087 +vn 0.0976 0.9940 -0.0487 +vn 0.0974 0.9893 -0.1087 +vn 0.2886 0.9513 -0.1087 +vn 0.2891 0.9561 -0.0468 +vn 0.2835 0.9346 -0.2147 +vn 0.6965 -0.2113 -0.6857 +vn 0.6965 -0.2113 0.6857 +vn 0.2835 -0.9346 -0.2147 +vn 0.7244 0.0713 -0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.0957 0.9720 -0.2147 +vn -0.3431 -0.6419 0.6857 +vn -0.3431 -0.6419 -0.6857 +vn 0.0957 -0.9720 -0.2147 +vn 0.6965 0.2113 -0.6857 +vn 0.6965 0.2113 0.6857 +vn -0.6267 -0.5510 0.5510 +vn -0.4139 -0.6437 0.6437 +vn -0.2886 -0.9513 -0.1087 +vn -0.4686 -0.8767 -0.1087 +vn -0.0976 0.9940 -0.0487 +vn -0.2891 0.9561 -0.0468 +vn -0.2886 0.9513 -0.1087 +vn -0.0974 0.9893 -0.1087 +vn -0.0957 0.9720 -0.2147 +vn -0.4617 -0.5626 0.6857 +vn -0.4617 -0.5626 -0.6857 +vn -0.0957 -0.9720 -0.2147 +vn 0.6419 0.3431 -0.6857 +vn 0.6419 0.3431 0.6857 +vn -0.6324 0.7736 -0.0380 +vn -0.7711 0.6359 -0.0313 +vn -0.7684 0.6306 -0.1087 +vn -0.6306 0.7684 -0.1087 +vn -0.2835 0.9346 -0.2147 +vn -0.5626 -0.4617 0.6857 +vn -0.5626 -0.4617 -0.6857 +vn -0.2835 -0.9346 -0.2147 +vn 0.5626 0.4617 -0.6857 +vn 0.5626 0.4617 0.6857 +vn -0.4604 0.8614 -0.2147 +vn -0.4686 0.8767 -0.1087 +vn -0.6419 -0.3431 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.4604 -0.8614 -0.2147 +vn 0.4617 0.5626 -0.6857 +vn 0.4617 0.5626 0.6857 +vn -0.6196 0.7550 -0.2147 +vn -0.6965 -0.2113 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.6196 -0.7550 -0.2147 +vn -0.9994 -0.0247 0.0247 +vn -0.9893 -0.0974 -0.1087 +vn -0.9893 0.0974 -0.1087 +vn -0.9952 0.0980 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7550 0.6196 -0.2147 +vn -0.7244 0.0713 0.6857 +vn -0.7244 0.0713 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn -0.7550 -0.6196 -0.2147 +vn 0.3431 0.6419 -0.6857 +vn 0.3431 0.6419 0.6857 +vn -0.8767 -0.4686 -0.1087 +vn -0.9472 -0.2267 0.2267 +vn -0.9560 0.2930 -0.0145 +vn -0.9948 0.1010 -0.0051 +vn -0.9513 0.2886 -0.1087 +vn -0.8614 0.4604 -0.2147 +vn -0.8767 0.4686 -0.1087 +vn -0.6965 0.2113 0.6857 +vn -0.6965 0.2113 -0.6857 +vn -0.8614 -0.4604 -0.2147 +vn 0.2113 0.6965 -0.6857 +vn 0.2113 0.6965 0.6857 +vn -0.9346 0.2835 -0.2147 +vn -0.6419 0.3431 0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.9346 -0.2835 -0.2147 +vn -0.9513 -0.2886 -0.1087 +vn 0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn -0.9720 0.0957 -0.2147 +vn -0.5626 0.4617 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.9720 -0.0957 -0.2147 +vn -0.0713 0.7244 -0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.2113 0.6965 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.4617 0.5626 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.7321 -0.3032 -0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.7933 0.6088 0.0000 +vn -0.6287 0.4824 -0.6100 +vn -0.1034 -0.7856 -0.6100 +vn -0.1305 -0.9914 0.0000 +vn 0.1305 0.9914 0.0000 +vn 0.1034 0.7856 -0.6100 +vn 0.9239 0.3827 0.0000 +vn 0.7321 0.3032 -0.6100 +vn 0.7933 -0.6088 0.0000 +vn 0.6287 -0.4824 -0.6100 +vn -0.3032 -0.7321 -0.6100 +vn -0.3827 -0.9239 0.0000 +vn -0.9914 -0.1305 0.0000 +vn -0.7856 -0.1034 -0.6100 +vn 0.4824 -0.6287 -0.6100 +vn 0.6088 -0.7933 0.0000 +vn -0.6088 0.7933 0.0000 +vn -0.4824 0.6287 -0.6100 +vn 0.3827 0.9239 0.0000 +vn 0.3032 0.7321 -0.6100 +vn 0.9914 0.1305 0.0000 +vn 0.7856 0.1034 -0.6100 +vn 0.3032 -0.7321 -0.6100 +vn 0.3827 -0.9239 0.0000 +vn -0.6088 -0.7933 0.0000 +vn -0.4824 -0.6287 -0.6100 +vn 0.7856 -0.1034 -0.6100 +vn 0.9914 -0.1305 0.0000 +vn -0.9914 0.1305 0.0000 +vn -0.7856 0.1034 -0.6100 +vn -0.3827 0.9239 0.0000 +vn -0.3032 0.7321 -0.6100 +vn 0.6088 0.7933 0.0000 +vn 0.4824 0.6287 -0.6100 +vn 0.7321 -0.3032 -0.6100 +vn 0.9239 -0.3827 0.0000 +vn 0.1305 -0.9914 0.0000 +vn 0.1034 -0.7856 -0.6100 +vn 0.6287 0.4824 -0.6100 +vn 0.7933 0.6088 0.0000 +vn -0.7933 -0.6088 0.0000 +vn -0.6287 -0.4824 -0.6100 +vn -0.9239 0.3827 0.0000 +vn -0.7321 0.3032 -0.6100 +vn -0.1305 0.9914 0.0000 +vn -0.1034 0.7856 -0.6100 +vn 0.4697 0.8817 -0.0432 +vn -0.4697 0.8817 -0.0432 +vn -0.9844 -0.1243 0.1243 +vn 0.0000 0.9988 -0.0490 +vn -0.8804 0.4736 -0.0234 +vn -0.5603 -0.5603 -0.6100 +vn -0.7071 -0.7071 0.0000 +vn -0.9659 0.2588 0.0000 +vn -0.7654 0.2051 -0.6100 +vn 0.2051 -0.7654 -0.6100 +vn 0.2588 -0.9659 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 -0.6100 +vn 0.7071 0.7071 0.0000 +vn 0.5603 0.5603 -0.6100 +vn 0.9659 -0.2588 0.0000 +vn 0.7654 -0.2051 -0.6100 +vn 0.0000 -0.7924 -0.6100 +vn -0.8660 -0.5000 0.0000 +vn -0.6862 -0.3962 -0.6100 +vn 0.6862 -0.3962 -0.6100 +vn 0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 -0.6100 +vn 0.8660 0.5000 0.0000 +vn 0.6862 0.3962 -0.6100 +vn 0.5603 -0.5603 -0.6100 +vn 0.7071 -0.7071 0.0000 +vn -0.2588 -0.9659 0.0000 +vn -0.2051 -0.7654 -0.6100 +vn 0.7654 0.2051 -0.6100 +vn 0.9659 0.2588 0.0000 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 -0.6100 +vn -0.7071 0.7071 0.0000 +vn -0.5603 0.5603 -0.6100 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 -0.6100 +vn 0.7924 0.0000 -0.6100 +vn 0.5000 -0.8660 0.0000 +vn 0.3962 -0.6862 -0.6100 +vn 0.3962 0.6862 -0.6100 +vn 0.5000 0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 -0.6100 +vn -0.7924 0.0000 -0.6100 +vn -0.5000 0.8660 0.0000 +vn -0.3962 0.6862 -0.6100 +vn 0.6965 0.6857 -0.2113 +vn 0.6965 -0.6857 -0.2113 +vn 0.6419 -0.6857 -0.3431 +vn 0.6419 0.6857 -0.3431 +vn 0.7244 0.6857 -0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.7244 0.6857 0.0713 +vn 0.7244 -0.6857 0.0713 +vn 0.6965 0.6857 0.2113 +vn 0.6965 -0.6857 0.2113 +vn 0.6419 0.6857 0.3431 +vn 0.6419 -0.6857 0.3431 +vn 0.5626 0.6857 0.4617 +vn 0.5626 -0.6857 0.4617 +vn 0.4617 0.6857 0.5626 +vn 0.4617 -0.6857 0.5626 +vn 0.3431 0.6857 0.6419 +vn 0.3431 -0.6857 0.6419 +vn 0.2113 0.6857 0.6965 +vn 0.2113 -0.6857 0.6965 +vn 0.0713 0.6857 0.7244 +vn 0.0713 -0.6857 0.7244 +vn -0.0713 0.6857 0.7244 +vn -0.0713 -0.6857 0.7244 +vn -0.2113 0.6857 0.6965 +vn -0.2113 -0.6857 0.6965 +vn -0.3431 0.6857 0.6419 +vn -0.3431 -0.6857 0.6419 +vn -0.4617 0.6857 0.5626 +vn -0.4617 -0.6857 0.5626 +vn -0.5626 0.6857 0.4617 +vn -0.5626 -0.6857 0.4617 +vn -0.6419 0.6857 0.3431 +vn -0.6419 -0.6857 0.3431 +vn -0.6965 0.6857 0.2113 +vn -0.6965 -0.6857 0.2113 +vn -0.7244 0.6857 0.0713 +vn -0.7244 -0.6857 0.0713 +vn -0.7244 0.6857 -0.0713 +vn -0.7244 -0.6857 -0.0713 +vn -0.6965 0.6857 -0.2113 +vn -0.6965 -0.6857 -0.2113 +vn -0.5626 0.6857 -0.4617 +vn -0.5626 -0.6857 -0.4617 +vn -0.6419 -0.6857 -0.3431 +vn -0.6419 0.6857 -0.3431 +vn -0.4617 0.6857 -0.5626 +vn -0.4617 -0.6857 -0.5626 +vn -0.3431 0.6857 -0.6419 +vn -0.3431 -0.6857 -0.6419 +vn -0.2113 0.6857 -0.6965 +vn -0.2113 -0.6857 -0.6965 +vn -0.0713 0.6857 -0.7244 +vn -0.0713 -0.6857 -0.7244 +vn 0.2113 0.6857 -0.6965 +vn 0.2113 -0.6857 -0.6965 +vn 0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn 0.3431 0.6857 -0.6419 +vn 0.3431 -0.6857 -0.6419 +vn 0.4617 0.6857 -0.5626 +vn 0.4617 -0.6857 -0.5626 +vn -0.4604 0.2147 -0.8614 +vn -0.4686 0.1087 -0.8767 +vn -0.2886 0.1087 -0.9513 +vn -0.2835 0.2147 -0.9346 +vn -0.0957 0.2147 -0.9720 +vn -0.0974 0.1087 -0.9893 +vn 0.0957 0.2147 -0.9720 +vn 0.0974 0.1087 -0.9893 +vn 0.2835 0.2147 -0.9346 +vn 0.2886 0.1087 -0.9513 +vn 0.4604 0.2147 -0.8614 +vn 0.4686 0.1087 -0.8767 +vn 0.6196 0.2147 -0.7550 +vn 0.6306 0.1087 -0.7684 +vn 0.7684 0.1087 -0.6306 +vn 0.7550 0.2147 -0.6196 +vn 0.8614 0.2147 -0.4604 +vn 0.8767 0.1087 -0.4686 +vn 0.9346 0.2147 -0.2835 +vn 0.9513 0.1087 -0.2886 +vn 0.9720 0.2147 -0.0957 +vn 0.9893 0.1087 -0.0974 +vn 0.9893 0.1087 0.0974 +vn 0.9720 0.2147 0.0957 +vn 0.9513 0.1087 0.2886 +vn 0.9346 0.2147 0.2835 +vn 0.8614 0.2147 0.4604 +vn 0.8767 0.1087 0.4686 +vn 0.7684 0.1087 0.6306 +vn 0.7550 0.2147 0.6196 +vn 0.6306 0.1087 0.7684 +vn 0.6196 0.2147 0.7550 +vn 0.4604 0.2147 0.8614 +vn 0.4686 0.1087 0.8767 +vn 0.2886 0.1087 0.9513 +vn 0.2835 0.2147 0.9346 +vn 0.0957 0.2147 0.9720 +vn 0.0974 0.1087 0.9893 +vn -0.0974 0.1087 0.9893 +vn -0.0957 0.2147 0.9720 +vn -0.2835 0.2147 0.9346 +vn -0.2886 0.1087 0.9513 +vn -0.4686 0.1087 0.8767 +vn -0.4604 0.2147 0.8614 +vn -0.6306 0.1087 0.7684 +vn -0.6196 0.2147 0.7550 +vn -0.7684 0.1087 0.6306 +vn -0.7550 0.2147 0.6196 +vn -0.8767 0.1087 0.4686 +vn -0.8614 0.2147 0.4604 +vn -0.9513 0.1087 0.2886 +vn -0.9346 0.2147 0.2835 +vn -0.9893 0.1087 0.0974 +vn -0.9720 0.2147 0.0957 +vn -0.9346 0.2147 -0.2835 +vn -0.9720 0.2147 -0.0957 +vn -0.9893 0.1087 -0.0974 +vn -0.9513 0.1087 -0.2886 +vn -0.7550 0.2147 -0.6196 +vn -0.8614 0.2147 -0.4604 +vn -0.8767 0.1087 -0.4686 +vn -0.7684 0.1087 -0.6306 +vn -0.6196 0.2147 -0.7550 +vn -0.6306 0.1087 -0.7684 +vn 0.5626 -0.6857 -0.4617 +vn 0.5626 0.6857 -0.4617 +vn 0.0976 0.0487 -0.9940 +vn -0.0976 0.0487 -0.9940 +vn 0.0000 0.0490 -0.9988 +vn -0.9952 0.0000 -0.0980 +vn -0.9948 0.0051 -0.1010 +vn 0.7711 0.0313 -0.6359 +vn 0.8804 0.0234 -0.4736 +vn -0.9560 0.0145 -0.2930 +vn -0.8804 0.0234 -0.4736 +vn -0.6324 0.0380 -0.7736 +vn -0.7711 0.0313 -0.6359 +vn 0.2891 0.0468 -0.9561 +vn -0.4697 0.0432 -0.8817 +vn 0.6324 0.0380 -0.7736 +vn 0.9560 0.0145 -0.2930 +vn 0.9948 0.0051 -0.1010 +vn 0.9952 0.0000 -0.0980 +vn -0.2891 0.0468 -0.9561 +vn 0.4697 0.0432 -0.8817 +vn -0.8794 0.0929 -0.4670 +vn -0.7700 0.1245 -0.6258 +vn 0.7700 0.1245 -0.6258 +vn 0.8794 0.0929 -0.4670 +vn 0.9946 0.0203 -0.1021 +vn -0.2886 0.1868 -0.9390 +vn -0.0974 0.1942 -0.9761 +vn 0.9552 0.0577 -0.2902 +vn -0.9946 0.0203 -0.1021 +vn -0.4689 0.1723 -0.8663 +vn -0.6314 0.1513 -0.7605 +vn 0.0000 0.1951 -0.9808 +vn 0.0974 0.1942 -0.9761 +vn 0.6314 0.1513 -0.7605 +vn 0.2886 0.1868 -0.9390 +vn -0.9552 0.0577 -0.2902 +vn 0.4689 0.1723 -0.8663 +vn 0.8794 0.1822 -0.4399 +vn 0.9552 0.1132 -0.2733 +vn -0.4689 0.3380 -0.8160 +vn -0.2886 0.3664 -0.8845 +vn 0.9946 0.0398 -0.0961 +vn -0.6314 0.2967 -0.7164 +vn 0.0000 0.3827 -0.9239 +vn 0.0974 0.3808 -0.9195 +vn 0.6314 0.2967 -0.7164 +vn 0.7700 0.2441 -0.5894 +vn -0.7700 0.2441 -0.5894 +vn -0.0974 0.3808 -0.9195 +vn 0.2886 0.3664 -0.8845 +vn -0.9946 0.0398 -0.0961 +vn -0.9552 0.1132 -0.2733 +vn 0.4689 0.3380 -0.8160 +vn -0.8794 0.1822 -0.4399 +vn 0.8794 0.2645 -0.3959 +vn 0.9552 0.1644 -0.2460 +vn -0.4689 0.4907 -0.7344 +vn -0.2886 0.5319 -0.7961 +vn 0.9946 0.0578 -0.0865 +vn -0.6314 0.4308 -0.6448 +vn 0.0000 0.5556 -0.8314 +vn 0.0974 0.5529 -0.8275 +vn 0.6314 0.4308 -0.6447 +vn 0.7700 0.3544 -0.5305 +vn -0.7700 0.3544 -0.5305 +vn -0.0974 0.5529 -0.8275 +vn 0.2886 0.5319 -0.7961 +vn -0.9946 0.0578 -0.0865 +vn -0.9552 0.1644 -0.2460 +vn 0.4689 0.4907 -0.7344 +vn -0.8794 0.2645 -0.3959 +vn 0.8794 0.3366 -0.3366 +vn 0.9552 0.2092 -0.2092 +vn -0.4689 0.6246 -0.6246 +vn -0.2886 0.6770 -0.6770 +vn 0.9946 0.0736 -0.0736 +vn -0.6314 0.5483 -0.5483 +vn 0.0000 0.7071 -0.7071 +vn 0.0974 0.7037 -0.7037 +vn 0.6314 0.5483 -0.5483 +vn 0.7700 0.4511 -0.4511 +vn -0.7700 0.4511 -0.4511 +vn -0.0974 0.7037 -0.7037 +vn 0.2886 0.6770 -0.6770 +vn -0.9946 0.0736 -0.0736 +vn -0.9552 0.2092 -0.2092 +vn 0.4689 0.6246 -0.6246 +vn -0.8794 0.3366 -0.3366 +vn 0.8794 0.3959 -0.2645 +vn 0.9552 0.2460 -0.1644 +vn -0.4689 0.7344 -0.4907 +vn -0.2886 0.7961 -0.5319 +vn 0.9946 0.0865 -0.0578 +vn -0.6314 0.6447 -0.4308 +vn 0.0000 0.8314 -0.5556 +vn 0.0974 0.8275 -0.5529 +vn 0.6314 0.6447 -0.4308 +vn 0.7700 0.5305 -0.3544 +vn -0.7700 0.5305 -0.3544 +vn -0.0974 0.8275 -0.5529 +vn 0.2886 0.7961 -0.5319 +vn -0.9946 0.0865 -0.0578 +vn -0.9552 0.2460 -0.1644 +vn 0.4689 0.7344 -0.4907 +vn -0.8794 0.3959 -0.2645 +vn 0.8794 0.4399 -0.1822 +vn 0.9552 0.2733 -0.1132 +vn -0.4689 0.8160 -0.3380 +vn -0.2886 0.8845 -0.3664 +vn 0.9946 0.0961 -0.0398 +vn -0.6314 0.7164 -0.2967 +vn 0.0000 0.9239 -0.3827 +vn 0.0974 0.9195 -0.3808 +vn 0.6314 0.7164 -0.2967 +vn 0.7700 0.5894 -0.2441 +vn -0.7700 0.5894 -0.2441 +vn -0.0974 0.9195 -0.3808 +vn 0.2886 0.8845 -0.3664 +vn -0.9946 0.0961 -0.0398 +vn -0.9552 0.2733 -0.1132 +vn 0.4689 0.8160 -0.3380 +vn -0.8794 0.4399 -0.1822 +vn 0.8794 0.4670 -0.0929 +vn 0.9552 0.2902 -0.0577 +vn -0.4689 0.8663 -0.1723 +vn -0.2886 0.9390 -0.1868 +vn 0.9946 0.1021 -0.0203 +vn -0.6314 0.7605 -0.1513 +vn 0.0000 0.9808 -0.1951 +vn 0.0974 0.9761 -0.1942 +vn 0.6314 0.7605 -0.1513 +vn 0.7700 0.6258 -0.1245 +vn -0.7700 0.6258 -0.1245 +vn -0.0974 0.9761 -0.1942 +vn 0.2886 0.9390 -0.1868 +vn -0.9946 0.1021 -0.0203 +vn -0.9552 0.2902 -0.0577 +vn 0.4689 0.8663 -0.1723 +vn -0.8794 0.4670 -0.0929 +g Pipe_Cylinder.002_pipe +s off +f 65/1/1 68/2/1 69/3/1 70/4/1 71/5/1 72/6/1 +f 77/7/1 80/8/1 81/9/1 82/10/1 83/11/1 84/12/1 +f 89/13/1 92/14/1 93/15/1 94/16/1 95/17/1 96/18/1 +f 101/19/1 104/20/1 105/21/1 106/22/1 107/23/1 108/24/1 +f 113/25/1 116/26/1 117/27/1 118/28/1 119/29/1 120/30/1 +f 125/31/1 128/32/1 129/33/1 130/34/1 131/35/1 132/36/1 +f 137/37/1 140/38/1 141/39/1 142/40/1 143/41/1 144/42/1 +f 149/43/1 152/44/1 153/45/1 154/46/1 155/47/1 156/48/1 +f 183/49/1 193/50/1 198/51/1 202/52/1 206/53/1 211/54/1 210/55/1 215/56/1 219/57/1 223/58/1 227/59/1 232/60/1 241/61/1 242/62/1 240/63/1 234/64/1 229/65/1 225/66/1 221/67/1 217/68/1 213/69/1 208/70/1 204/71/1 200/72/1 195/73/1 191/74/1 184/75/1 185/76/1 182/77/1 179/78/1 180/79/1 181/80/1 +f 187/81/2 186/82/2 192/83/2 197/84/2 196/85/2 201/86/2 205/87/2 209/88/2 214/89/2 218/90/2 222/91/2 226/92/2 230/93/2 235/94/2 231/95/2 237/96/2 236/97/2 238/98/2 239/99/2 233/100/2 228/101/2 224/102/2 220/103/2 216/104/2 212/105/2 207/106/2 203/107/2 199/108/2 194/109/2 190/110/2 189/111/2 188/112/2 +f 243/113/1 246/114/1 247/115/1 248/116/1 249/117/1 250/118/1 +f 255/119/1 258/120/1 259/121/1 260/122/1 261/123/1 262/124/1 +f 267/125/1 270/126/1 271/127/1 272/128/1 273/129/1 274/130/1 +f 279/131/1 282/132/1 283/133/1 284/134/1 285/135/1 286/136/1 +f 291/137/1 294/138/1 295/139/1 296/140/1 297/141/1 298/142/1 +f 303/143/1 306/144/1 307/145/1 308/146/1 309/147/1 310/148/1 +f 315/149/1 318/150/1 319/151/1 320/152/1 321/153/1 322/154/1 +f 327/155/1 330/156/1 331/157/1 332/158/1 333/159/1 334/160/1 +f 458/161/3 459/162/3 489/163/3 488/164/3 486/165/3 487/166/3 485/167/3 484/168/3 483/169/3 482/170/3 480/171/3 481/172/3 479/173/3 478/174/3 477/175/3 476/176/3 475/177/3 474/178/3 473/179/3 472/180/3 471/181/3 470/182/3 469/183/3 468/184/3 467/185/3 466/186/3 465/187/3 464/188/3 463/189/3 462/190/3 461/191/3 460/192/3 +f 437/193/4 454/194/4 438/195/4 439/196/4 440/197/4 441/198/4 442/199/4 455/200/4 443/201/4 444/202/4 445/203/4 456/204/4 446/205/4 457/206/4 447/207/4 448/208/4 449/209/4 450/210/4 451/211/4 426/212/4 427/213/4 428/214/4 429/215/4 430/216/4 431/217/4 432/218/4 433/219/4 434/220/4 452/221/4 435/222/4 453/223/4 436/224/4 +s 1 +f 167/225/5 506/226/6 161/227/7 2/228/8 3/229/9 +f 168/230/10 167/225/5 3/229/9 4/231/11 +f 169/232/12 168/230/10 4/231/11 9/233/13 +f 161/227/7 339/234/14 352/235/15 1/236/16 2/228/8 +f 170/237/17 169/232/12 9/233/13 13/238/18 +f 1/236/16 352/235/15 351/239/19 5/240/20 +f 170/237/17 13/238/18 17/241/21 171/242/22 +f 6/243/23 2/228/8 1/236/16 7/244/24 +f 8/245/25 3/229/9 2/228/8 6/243/23 +f 10/246/26 4/231/11 3/229/9 8/245/25 +f 165/247/27 164/248/28 45/249/29 49/250/30 +f 7/244/24 1/236/16 5/240/20 12/251/31 +f 14/252/32 9/233/13 4/231/11 10/246/26 +f 172/253/33 171/242/22 17/241/21 21/254/34 +f 16/255/35 12/251/31 5/240/20 11/256/36 +f 18/257/37 13/238/18 9/233/13 14/252/32 +f 173/258/38 172/253/33 21/254/34 25/259/39 +f 349/260/40 15/261/41 11/256/36 350/262/42 +f 20/263/43 16/255/35 11/256/36 15/261/41 +f 182/264/44 186/265/45 187/266/46 179/267/47 +f 181/268/48 189/269/49 190/270/50 183/271/51 +f 22/272/52 17/241/21 13/238/18 18/257/37 +f 185/273/53 192/274/54 186/265/45 182/264/44 +f 24/275/55 20/263/43 15/261/41 19/276/56 +f 183/271/51 190/270/50 194/277/57 193/278/58 +f 26/279/59 21/254/34 17/241/21 22/272/52 +f 184/280/60 197/281/61 192/274/54 185/273/53 +f 174/282/62 162/283/63 29/284/64 33/285/65 +f 355/286/66 27/287/67 23/288/68 346/289/69 +f 28/290/70 24/275/55 19/276/56 23/288/68 +f 191/291/71 196/292/72 197/281/61 184/280/60 +f 30/293/73 25/259/39 21/254/34 26/279/59 +f 200/294/74 205/295/75 201/296/76 195/297/77 +f 32/298/78 28/290/70 23/288/68 27/287/67 +f 193/278/58 194/277/57 199/299/79 198/300/80 +f 34/301/81 29/302/64 25/259/39 30/293/73 +f 204/303/82 209/304/83 205/295/75 200/294/74 +f 163/305/84 175/306/85 37/307/86 41/308/87 +f 354/309/88 343/310/89 35/311/90 31/312/91 +f 36/313/92 32/298/78 27/287/67 31/312/91 +f 198/300/80 199/299/79 203/314/93 202/315/94 +f 38/316/95 33/285/65 29/284/64 34/317/81 +f 208/318/96 214/319/97 209/304/83 204/303/82 +f 164/248/28 163/305/84 41/308/87 45/249/29 +f 345/320/98 342/321/99 47/322/100 43/323/101 +f 40/324/102 36/313/92 31/312/91 35/311/90 +f 202/315/94 203/314/93 207/325/103 206/326/104 +f 42/327/105 37/307/86 33/285/65 38/316/95 +f 213/328/106 218/329/107 214/319/97 208/318/96 +f 44/330/108 40/324/102 35/311/90 39/331/109 +f 206/326/104 207/325/103 212/332/110 211/333/111 +f 46/334/112 41/308/87 37/307/86 42/327/105 +f 217/335/113 222/336/114 218/329/107 213/328/106 +f 48/337/115 44/330/108 39/331/109 43/323/101 +f 210/338/116 216/339/117 220/340/118 215/341/119 +f 46/334/112 50/342/120 45/249/29 41/308/87 +f 211/333/111 212/332/110 216/343/117 210/344/116 +f 177/345/121 61/346/122 59/347/123 178/348/124 359/349/125 +f 52/350/126 48/337/115 43/323/101 47/322/100 +f 215/341/119 220/340/118 224/351/127 219/352/128 +f 179/267/47 187/266/46 188/353/129 180/354/130 +f 54/355/131 49/250/30 45/249/29 50/342/120 +f 221/356/132 226/357/133 222/336/114 217/335/113 +f 165/247/27 49/250/30 53/358/134 176/359/135 +f 340/360/136 353/361/137 178/348/124 59/347/123 55/362/138 +f 56/363/139 52/350/126 47/322/100 51/364/140 +f 219/352/128 224/351/127 228/365/141 223/366/142 +f 54/355/131 58/367/143 53/358/134 49/250/30 +f 225/368/144 230/369/145 226/357/133 221/356/132 +f 60/370/146 56/363/139 51/364/140 55/362/138 +f 223/366/142 228/371/141 233/372/147 227/373/148 +f 58/367/143 62/374/149 57/375/150 53/358/134 +f 229/376/151 235/377/152 230/369/145 225/368/144 +f 195/297/77 201/296/76 196/292/72 191/291/71 +f 63/378/153 60/370/146 55/362/138 59/347/123 +f 227/373/148 233/372/147 239/379/154 232/380/155 +f 62/374/149 64/381/156 61/346/122 57/375/150 +f 234/382/157 231/383/158 235/377/152 229/376/151 +f 64/381/156 63/378/153 59/347/123 61/346/122 +f 180/354/130 188/353/129 189/269/49 181/268/48 +f 240/384/159 237/385/160 231/383/158 234/382/157 +f 232/380/155 239/379/154 238/386/161 241/387/162 +f 242/388/163 236/389/164 237/385/160 240/384/159 +f 241/387/162 238/386/161 236/389/164 242/388/163 +f 65/390/165 66/391/166 67/392/167 68/393/168 +f 72/394/169 73/395/170 66/391/166 65/390/165 +f 68/393/168 67/392/167 74/396/171 69/397/172 +f 69/397/172 74/396/171 75/398/173 70/399/174 +f 70/400/174 75/401/173 76/402/175 71/403/176 +f 71/403/176 76/402/175 73/395/170 72/394/169 +f 77/404/177 78/405/178 79/406/179 80/407/180 +f 84/408/181 85/409/182 78/405/178 77/404/177 +f 80/407/180 79/406/179 86/410/183 81/411/184 +f 81/411/184 86/410/183 87/412/185 82/413/186 +f 82/414/186 87/415/185 88/416/187 83/417/188 +f 83/417/188 88/416/187 85/409/182 84/408/181 +f 89/418/189 90/419/190 91/420/191 92/421/192 +f 96/422/193 97/423/194 90/419/190 89/418/189 +f 92/421/192 91/420/191 98/424/195 93/425/196 +f 93/425/196 98/424/195 99/426/197 94/427/198 +f 94/428/198 99/429/197 100/430/199 95/431/200 +f 95/431/200 100/430/199 97/423/194 96/422/193 +f 101/432/201 102/433/202 103/434/203 104/435/204 +f 108/436/205 109/437/206 102/433/202 101/432/201 +f 104/435/204 103/434/203 110/438/207 105/439/208 +f 105/439/208 110/438/207 111/440/209 106/441/210 +f 106/442/210 111/443/209 112/444/211 107/445/212 +f 107/445/212 112/444/211 109/437/206 108/436/205 +f 113/446/174 114/447/173 115/448/175 116/449/176 +f 120/450/172 121/451/171 114/447/173 113/446/174 +f 116/449/176 115/448/175 122/452/170 117/453/169 +f 117/453/169 122/452/170 123/454/166 118/455/165 +f 118/456/165 123/457/166 124/458/167 119/459/168 +f 119/459/168 124/458/167 121/451/171 120/450/172 +f 125/460/186 126/461/185 127/462/187 128/463/188 +f 132/464/184 133/465/183 126/461/185 125/460/186 +f 128/463/188 127/462/187 134/466/182 129/467/181 +f 129/467/181 134/466/182 135/468/178 130/469/177 +f 130/470/177 135/471/178 136/472/179 131/473/180 +f 131/473/180 136/472/179 133/465/183 132/464/184 +f 137/474/198 138/475/197 139/476/199 140/477/200 +f 144/478/196 145/479/195 138/475/197 137/474/198 +f 140/477/200 139/476/199 146/480/194 141/481/193 +f 141/481/193 146/480/194 147/482/190 142/483/189 +f 142/484/189 147/485/190 148/486/191 143/487/192 +f 143/487/192 148/486/191 145/479/195 144/478/196 +f 149/488/210 150/489/209 151/490/211 152/491/212 +f 156/492/208 157/493/207 150/489/209 149/488/210 +f 152/491/212 151/490/211 158/494/206 153/495/205 +f 153/495/205 158/494/206 159/496/202 154/497/201 +f 154/498/201 159/499/202 160/500/203 155/501/204 +f 155/501/204 160/500/203 157/493/207 156/492/208 +f 358/502/6 339/234/14 161/227/7 506/226/6 +f 5/240/20 351/239/19 350/262/42 11/256/36 +f 349/260/40 348/503/213 19/276/56 15/261/41 +f 348/503/213 346/289/69 23/288/68 19/276/56 +f 343/310/89 344/504/214 39/331/109 35/311/90 +f 344/504/214 345/320/98 43/323/101 39/331/109 +f 166/505/215 176/359/135 53/358/134 57/375/150 +f 355/286/66 357/506/216 354/309/88 31/312/91 27/287/67 +f 162/507/63 173/258/38 25/259/39 29/302/64 +f 177/345/121 166/505/215 57/375/150 61/346/122 +f 175/306/85 174/282/62 33/285/65 37/307/86 +f 340/360/136 55/362/138 51/364/140 341/508/217 +f 243/509/218 244/510/219 245/511/220 246/512/221 +f 250/513/222 251/514/223 244/510/219 243/509/218 +f 246/512/221 245/511/220 252/515/224 247/516/225 +f 247/516/225 252/515/224 253/517/226 248/518/227 +f 248/519/227 253/520/226 254/521/228 249/522/229 +f 249/522/229 254/521/228 251/514/223 250/513/222 +f 255/523/230 256/524/4 257/525/231 258/526/232 +f 262/527/233 263/528/234 256/524/4 255/523/230 +f 258/526/232 257/525/231 264/529/235 259/530/236 +f 259/530/236 264/529/235 265/531/3 260/532/237 +f 260/533/237 265/534/3 266/535/238 261/536/239 +f 261/536/239 266/535/238 263/528/234 262/527/233 +f 267/537/240 268/538/241 269/539/242 270/540/243 +f 274/541/244 275/542/245 268/538/241 267/537/240 +f 270/540/243 269/539/242 276/543/246 271/544/247 +f 271/544/247 276/543/246 277/545/248 272/546/249 +f 272/547/249 277/548/248 278/549/250 273/550/251 +f 273/550/251 278/549/250 275/542/245 274/541/244 +f 279/551/252 280/552/6 281/553/253 282/554/254 +f 286/555/255 287/556/256 280/552/6 279/551/252 +f 282/554/254 281/553/253 288/557/257 283/558/258 +f 283/558/258 288/557/257 289/559/125 284/560/259 +f 284/561/259 289/562/125 290/563/260 285/564/261 +f 285/564/261 290/563/260 287/556/256 286/555/255 +f 291/565/227 292/566/226 293/567/228 294/568/229 +f 298/569/225 299/570/224 292/566/226 291/565/227 +f 294/568/229 293/567/228 300/571/223 295/572/222 +f 295/572/222 300/571/223 301/573/219 296/574/218 +f 296/575/218 301/576/219 302/577/220 297/578/221 +f 297/578/221 302/577/220 299/570/224 298/569/225 +f 303/579/237 304/580/3 305/581/238 306/582/239 +f 310/583/236 311/584/235 304/580/3 303/579/237 +f 306/582/239 305/581/238 312/585/234 307/586/233 +f 307/586/233 312/585/234 313/587/4 308/588/230 +f 308/589/230 313/590/4 314/591/231 309/592/232 +f 309/592/232 314/591/231 311/584/235 310/583/236 +f 315/593/249 316/594/248 317/595/250 318/596/251 +f 322/597/247 323/598/246 316/594/248 315/593/249 +f 318/596/251 317/595/250 324/599/245 319/600/244 +f 319/600/244 324/599/245 325/601/241 320/602/240 +f 320/603/240 325/604/241 326/605/242 321/606/243 +f 321/606/243 326/605/242 323/598/246 322/597/247 +f 327/607/259 328/608/125 329/609/260 330/610/261 +f 334/611/258 335/612/257 328/608/125 327/607/259 +f 330/610/261 329/609/260 336/613/256 331/614/255 +f 331/614/255 336/613/256 337/615/6 332/616/252 +f 332/617/252 337/618/6 338/619/253 333/620/254 +f 333/620/254 338/619/253 335/612/257 334/611/258 +f 341/508/217 51/364/140 47/322/100 342/321/99 +f 359/349/125 178/348/124 353/361/137 576/621/125 +f 356/622/6 358/502/6 506/226/6 167/225/5 +f 177/345/121 359/349/125 576/621/125 347/623/125 +f 461/624/262 428/625/263 427/626/264 460/627/265 +f 462/628/266 429/629/267 428/625/263 461/624/262 +f 463/630/268 430/631/269 429/629/267 462/628/266 +f 464/632/270 431/633/271 430/631/269 463/630/268 +f 465/634/272 432/635/273 431/633/271 464/632/270 +f 466/636/274 433/637/275 432/635/273 465/634/272 +f 467/638/276 434/639/277 433/637/275 466/636/274 +f 468/640/278 452/641/279 434/639/277 467/638/276 +f 469/642/280 435/643/281 452/641/279 468/640/278 +f 470/644/282 453/645/283 435/643/281 469/642/280 +f 471/646/284 436/647/285 453/645/283 470/644/282 +f 472/648/286 437/649/287 436/647/285 471/646/284 +f 473/650/288 454/651/289 437/649/287 472/648/286 +f 474/652/290 438/653/291 454/651/289 473/650/288 +f 475/654/292 439/655/293 438/653/291 474/652/290 +f 476/656/294 440/657/295 439/655/293 475/654/292 +f 477/658/296 441/659/297 440/660/295 476/661/294 +f 478/662/298 442/663/299 441/659/297 477/658/296 +f 479/664/300 455/665/301 442/663/299 478/662/298 +f 481/666/302 443/667/303 455/665/301 479/664/300 +f 482/668/304 445/669/305 444/670/306 480/671/307 +f 480/671/307 444/670/306 443/667/303 481/666/302 +f 483/672/308 456/673/309 445/669/305 482/668/304 +f 484/674/310 446/675/311 456/673/309 483/672/308 +f 485/676/312 457/677/313 446/675/311 484/674/310 +f 487/678/314 447/679/315 457/677/313 485/676/312 +f 488/680/316 449/681/317 448/682/318 486/683/319 +f 486/683/319 448/682/318 447/679/315 487/678/314 +f 489/684/320 450/685/321 449/681/317 488/680/316 +f 459/686/322 451/687/323 450/685/321 489/684/320 +f 389/688/324 392/689/325 393/690/326 360/691/327 +f 361/692/328 360/691/327 393/690/326 394/693/329 +f 362/694/330 361/692/328 394/693/329 395/695/331 +f 363/696/332 362/694/330 395/695/331 396/697/333 +f 364/698/334 363/696/332 396/697/333 397/699/335 +f 365/700/336 364/698/334 397/699/335 398/701/337 +f 365/700/336 398/701/337 399/702/338 366/703/339 +f 367/704/340 366/703/339 399/702/338 400/705/341 +f 368/706/342 367/704/340 400/705/341 401/707/343 +f 369/708/344 368/706/342 401/707/343 402/709/345 +f 369/708/344 402/709/345 403/710/346 370/711/347 +f 370/711/347 403/710/346 404/712/348 390/713/349 +f 371/714/350 405/715/351 406/716/352 372/717/353 +f 390/713/349 404/712/348 405/715/351 371/714/350 +f 372/717/353 406/716/352 407/718/354 373/719/355 +f 374/720/356 373/719/355 407/718/354 408/721/357 +f 374/720/356 408/721/357 409/722/358 375/723/359 +f 376/724/360 375/723/359 409/722/358 410/725/361 +f 376/726/360 410/727/361 411/728/362 377/729/363 +f 378/730/364 377/729/363 411/728/362 412/731/365 +f 378/730/364 412/731/365 413/732/366 379/733/367 +f 379/733/367 413/732/366 414/734/368 381/735/369 +f 381/735/369 414/734/368 415/736/370 380/737/371 +f 380/737/371 415/736/370 416/738/372 382/739/373 +f 382/739/373 416/738/372 417/740/374 383/741/375 +f 383/741/375 417/740/374 418/742/376 391/743/377 +f 386/744/378 384/745/379 419/746/380 420/747/381 +f 384/745/379 391/743/377 418/742/376 419/746/380 +f 387/748/382 385/749/383 421/750/384 422/751/385 +f 386/744/378 420/747/381 421/750/384 385/749/383 +f 388/752/386 387/748/382 422/751/385 423/753/387 +f 388/752/386 423/753/387 392/689/325 389/688/324 +f 460/627/265 427/626/264 426/754/388 458/755/389 +f 405/715/351 404/712/348 168/756/10 169/757/12 +f 406/716/352 405/715/351 169/757/12 170/758/17 +f 505/759/390 395/695/331 394/693/329 504/760/391 507/761/392 +f 425/762/393 419/746/380 418/742/376 177/763/121 347/764/125 +f 576/765/125 503/766/394 425/762/393 347/764/125 +f 404/712/348 403/710/346 167/767/5 168/756/10 +f 500/768/395 501/769/396 400/705/341 399/702/338 +f 417/740/374 416/738/372 176/770/135 166/771/215 +f 421/750/384 420/747/381 491/772/397 492/773/398 +f 496/774/399 423/753/387 422/751/385 493/775/400 +f 497/776/401 396/697/333 395/695/331 505/759/390 +f 170/758/17 171/777/22 407/718/354 406/716/352 +f 418/742/376 417/740/374 166/771/215 177/763/121 +f 416/738/372 415/736/370 165/778/27 176/770/135 +f 420/747/381 419/746/380 425/762/393 503/766/394 491/772/397 +f 496/774/399 495/779/402 392/689/325 423/753/387 +f 458/755/389 426/754/388 451/687/323 459/686/322 +f 499/780/403 500/768/395 399/702/338 398/701/337 +f 501/769/396 502/781/404 401/707/343 400/705/341 +f 502/781/404 490/782/405 424/783/406 402/709/345 401/707/343 +f 403/710/346 402/709/345 424/783/406 356/784/6 167/767/5 +f 171/777/22 172/785/33 408/721/357 407/718/354 +f 172/785/33 173/786/38 409/722/358 408/721/357 +f 173/786/38 162/787/63 410/725/361 409/722/358 +f 162/788/63 174/789/62 411/728/362 410/727/361 +f 174/789/62 175/790/85 412/731/365 411/728/362 +f 175/790/85 163/791/84 413/732/366 412/731/365 +f 163/791/84 164/792/28 414/734/368 413/732/366 +f 421/750/384 492/773/398 493/775/400 422/751/385 +f 494/793/407 393/690/326 392/689/325 495/779/402 +f 494/793/407 504/760/391 394/693/329 393/690/326 +f 498/794/408 397/699/335 396/697/333 497/776/401 +f 498/794/408 499/780/403 398/701/337 397/699/335 +f 356/784/6 424/783/406 490/782/405 358/795/6 +f 164/792/28 165/778/27 415/736/370 414/734/368 +f 493/775/400 492/773/398 510/796/409 511/797/410 +f 501/769/396 500/768/395 518/798/411 519/799/412 +f 358/795/6 490/782/405 508/800/413 +f 504/760/391 494/793/407 512/801/414 522/802/415 +f 502/781/404 501/769/396 519/799/412 520/803/416 +f 503/766/394 576/765/125 521/804/417 +f 494/793/407 495/779/402 513/805/418 512/801/414 +f 490/782/405 502/781/404 520/803/416 508/800/413 +f 495/779/402 496/774/399 514/806/419 513/805/418 +f 505/759/390 507/761/392 524/807/420 523/808/421 +f 500/768/395 499/780/403 517/809/422 518/798/411 +f 496/774/399 493/775/400 511/797/410 514/806/419 +f 497/776/401 505/759/390 523/808/421 515/810/423 +f 491/772/397 503/766/394 521/804/417 509/811/424 +f 507/761/392 504/760/391 522/802/415 524/807/420 +f 498/794/408 497/776/401 515/810/423 516/812/425 +f 492/773/398 491/772/397 509/811/424 510/796/409 +f 499/780/403 498/794/408 516/812/425 517/809/422 +f 520/803/416 519/799/412 536/813/426 537/814/427 +f 512/801/414 513/805/418 530/815/428 529/816/429 +f 508/800/413 520/803/416 537/814/427 525/817/430 +f 513/805/418 514/806/419 531/818/431 530/815/428 +f 523/808/421 524/807/420 541/819/432 540/820/433 +f 518/798/411 517/809/422 534/821/434 535/822/435 +f 514/806/419 511/797/410 528/823/436 531/818/431 +f 524/807/420 522/802/415 539/824/437 541/819/432 +f 515/810/423 523/808/421 540/820/433 532/825/438 +f 509/811/424 521/804/417 538/826/439 526/827/440 +f 358/795/6 508/800/413 525/817/430 +f 516/812/425 515/810/423 532/825/438 533/828/441 +f 510/796/409 509/811/424 526/827/440 527/829/442 +f 521/804/417 576/765/125 538/826/439 +f 517/809/422 516/812/425 533/828/441 534/821/434 +f 511/797/410 510/796/409 527/829/442 528/823/436 +f 519/799/412 518/798/411 535/822/435 536/813/426 +f 522/802/415 512/801/414 529/816/429 539/824/437 +f 537/814/427 536/813/426 553/830/443 554/831/444 +f 529/816/429 530/815/428 547/832/445 546/833/446 +f 525/817/430 537/814/427 554/831/444 542/834/447 +f 530/815/428 531/818/431 548/835/448 547/832/445 +f 540/820/433 541/819/432 558/836/449 557/837/450 +f 535/822/435 534/821/434 551/838/451 552/839/452 +f 531/818/431 528/823/436 545/840/453 548/835/448 +f 541/819/432 539/824/437 556/841/454 558/836/449 +f 532/825/438 540/820/433 557/837/450 549/842/455 +f 526/827/440 538/826/439 555/843/456 543/844/457 +f 358/795/6 525/817/430 542/834/447 +f 533/828/441 532/825/438 549/842/455 550/845/458 +f 527/829/442 526/827/440 543/844/457 544/846/459 +f 538/826/439 576/765/125 555/843/456 +f 534/821/434 533/828/441 550/845/458 551/838/451 +f 528/823/436 527/829/442 544/846/459 545/840/453 +f 536/813/426 535/822/435 552/839/452 553/830/443 +f 539/824/437 529/816/429 546/833/446 556/841/454 +f 554/831/444 553/830/443 570/847/460 571/848/461 +f 546/833/446 547/832/445 564/849/462 563/850/463 +f 542/834/447 554/831/444 571/848/461 559/851/464 +f 547/832/445 548/835/448 565/852/465 564/849/462 +f 557/837/450 558/836/449 575/853/466 574/854/467 +f 552/839/452 551/838/451 568/855/468 569/856/469 +f 548/835/448 545/840/453 562/857/470 565/852/465 +f 558/836/449 556/841/454 573/858/471 575/853/466 +f 549/842/455 557/837/450 574/854/467 566/859/472 +f 543/844/457 555/843/456 572/860/473 560/861/474 +f 358/795/6 542/834/447 559/851/464 +f 550/845/458 549/842/455 566/859/472 567/862/475 +f 544/846/459 543/844/457 560/861/474 561/863/476 +f 555/843/456 576/765/125 572/860/473 +f 551/838/451 550/845/458 567/862/475 568/855/468 +f 545/840/453 544/846/459 561/863/476 562/857/470 +f 553/830/443 552/839/452 569/856/469 570/847/460 +f 556/841/454 546/833/446 563/850/463 573/858/471 +f 571/848/461 570/847/460 588/864/477 589/865/478 +f 563/850/463 564/849/462 582/866/479 581/867/480 +f 559/851/464 571/848/461 589/865/478 577/868/481 +f 564/849/462 565/852/465 583/869/482 582/866/479 +f 574/854/467 575/853/466 593/870/483 592/871/484 +f 569/856/469 568/855/468 586/872/485 587/873/486 +f 565/852/465 562/857/470 580/874/487 583/869/482 +f 575/853/466 573/858/471 591/875/488 593/870/483 +f 566/859/472 574/854/467 592/871/484 584/876/489 +f 560/861/474 572/860/473 590/877/490 578/878/491 +f 358/795/6 559/851/464 577/868/481 +f 567/862/475 566/859/472 584/876/489 585/879/492 +f 561/863/476 560/861/474 578/878/491 579/880/493 +f 572/860/473 576/765/125 590/877/490 +f 568/855/468 567/862/475 585/879/492 586/872/485 +f 562/857/470 561/863/476 579/880/493 580/874/487 +f 570/847/460 569/856/469 587/873/486 588/864/477 +f 573/858/471 563/850/463 581/867/480 591/875/488 +f 589/865/478 588/864/477 605/881/494 606/882/495 +f 581/867/480 582/866/479 599/883/496 598/884/497 +f 577/868/481 589/865/478 606/882/495 594/885/498 +f 582/866/479 583/869/482 600/886/499 599/883/496 +f 592/871/484 593/870/483 610/887/500 609/888/501 +f 587/873/486 586/872/485 603/889/502 604/890/503 +f 583/869/482 580/874/487 597/891/504 600/886/499 +f 593/870/483 591/875/488 608/892/505 610/887/500 +f 584/876/489 592/871/484 609/888/501 601/893/506 +f 578/878/491 590/877/490 607/894/507 595/895/508 +f 358/795/6 577/868/481 594/885/498 +f 585/879/492 584/876/489 601/893/506 602/896/509 +f 579/880/493 578/878/491 595/895/508 596/897/510 +f 590/877/490 576/765/125 607/894/507 +f 586/872/485 585/879/492 602/896/509 603/889/502 +f 580/874/487 579/880/493 596/897/510 597/891/504 +f 588/864/477 587/873/486 604/890/503 605/881/494 +f 591/875/488 581/867/480 598/884/497 608/892/505 +f 606/882/495 605/881/494 622/898/511 623/899/512 +f 598/884/497 599/883/496 616/900/513 615/901/514 +f 594/885/498 606/882/495 623/899/512 611/902/515 +f 599/883/496 600/886/499 617/903/516 616/900/513 +f 609/888/501 610/887/500 627/904/517 626/905/518 +f 604/890/503 603/889/502 620/906/519 621/907/520 +f 600/886/499 597/891/504 614/908/521 617/903/516 +f 610/887/500 608/892/505 625/909/522 627/904/517 +f 601/893/506 609/888/501 626/905/518 618/910/523 +f 595/895/508 607/894/507 624/911/524 612/912/525 +f 358/795/6 594/885/498 611/902/515 +f 602/896/509 601/893/506 618/910/523 619/913/526 +f 596/897/510 595/895/508 612/912/525 613/914/527 +f 607/894/507 576/765/125 624/911/524 +f 603/889/502 602/896/509 619/913/526 620/906/519 +f 597/891/504 596/897/510 613/914/527 614/908/521 +f 605/881/494 604/890/503 621/907/520 622/898/511 +f 608/892/505 598/884/497 615/901/514 625/909/522 +f 623/899/512 622/898/511 351/915/19 352/916/15 +f 615/901/514 616/900/513 344/917/214 343/918/89 +f 611/902/515 623/899/512 352/916/15 339/919/14 +f 616/900/513 617/903/516 345/920/98 344/917/214 +f 626/905/518 627/904/517 357/921/216 355/922/66 +f 621/907/520 620/906/519 349/923/40 350/924/42 +f 617/903/516 614/908/521 342/925/99 345/920/98 +f 627/904/517 625/909/522 354/926/88 357/921/216 +f 618/910/523 626/905/518 355/922/66 346/927/69 +f 612/912/525 624/911/524 353/928/137 340/929/136 +f 358/795/6 611/902/515 339/919/14 +f 619/913/526 618/910/523 346/927/69 348/930/213 +f 613/914/527 612/912/525 340/929/136 341/931/217 +f 624/911/524 576/765/125 353/928/137 +f 620/906/519 619/913/526 348/930/213 349/923/40 +f 614/908/521 613/914/527 341/931/217 342/925/99 +f 622/898/511 621/907/520 350/924/42 351/915/19 +f 625/909/522 615/901/514 343/918/89 354/926/88 diff --git a/mods/pipeworks/models/pipeworks_spigot_lowpoly.obj b/mods/pipeworks/models/pipeworks_spigot_lowpoly.obj new file mode 100755 index 0000000..67403c8 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_spigot_lowpoly.obj @@ -0,0 +1,336 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend' +# www.blender.org +o Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004 +v 0.064721 -0.156250 0.500000 +v 0.156250 -0.064721 0.500000 +v 0.156250 0.064721 0.500000 +v 0.064721 0.156250 0.500000 +v -0.064721 0.156250 0.500000 +v -0.156250 0.064721 0.500000 +v -0.156250 -0.064721 0.500000 +v -0.064721 -0.156250 0.500000 +v 0.156250 -0.064721 0.468750 +v 0.064721 -0.156250 0.468750 +v -0.064721 -0.156250 0.468750 +v -0.156250 -0.064721 0.468750 +v -0.156250 0.064721 0.468750 +v -0.064721 0.156250 0.468750 +v 0.064721 0.156250 0.468750 +v 0.156250 0.064721 0.468750 +v 0.064721 -0.187500 0.156250 +v 0.156250 -0.187500 0.064721 +v 0.156250 -0.187500 -0.064721 +v 0.064721 -0.187500 -0.156250 +v -0.064721 -0.187500 -0.156250 +v -0.156250 -0.187500 -0.064721 +v -0.156250 -0.187500 0.064721 +v -0.064721 -0.187500 0.156250 +v 0.156250 -0.250000 0.064721 +v 0.064721 -0.250000 0.156250 +v -0.064721 -0.250000 0.156250 +v -0.156250 -0.250000 0.064721 +v -0.156250 -0.250000 -0.064721 +v -0.064721 -0.250000 -0.156250 +v 0.064721 -0.250000 -0.156250 +v 0.156250 -0.250000 -0.064721 +v -0.051777 -0.000000 -0.125000 +v -0.125000 -0.000000 -0.051777 +v -0.125000 0.051777 -0.051777 +v -0.088388 0.088388 -0.088388 +v -0.051777 0.051777 -0.125000 +v 0.051777 -0.000000 -0.125000 +v 0.051777 0.051777 -0.125000 +v 0.088388 0.088389 -0.088388 +v 0.125000 0.051777 -0.051777 +v 0.125000 -0.000000 -0.051777 +v 0.125000 0.051777 -0.000000 +v 0.125000 0.000000 0.000000 +v -0.125000 0.000000 0.000000 +v -0.125000 0.051777 -0.000000 +v 0.000000 -0.000000 -0.125000 +v 0.000000 0.051777 -0.125000 +v -0.051777 0.125000 -0.051777 +v 0.051777 0.125000 -0.051777 +v -0.051777 -0.187500 0.125000 +v -0.051777 -0.125000 0.125000 +v -0.125000 -0.051777 0.051777 +v -0.125000 -0.187500 0.051777 +v 0.051777 -0.187500 0.125000 +v 0.125000 -0.187500 0.051777 +v 0.125000 -0.051777 0.051777 +v 0.051777 -0.125000 0.125000 +v -0.125000 -0.051777 0.468750 +v -0.125000 0.051777 0.468750 +v -0.125000 -0.051777 0.000000 +v -0.051777 -0.125000 0.468750 +v 0.125000 -0.051777 0.000000 +v 0.125000 0.051777 0.468750 +v 0.125000 -0.051777 0.468750 +v -0.051777 0.125000 0.468750 +v 0.051777 -0.125000 0.468750 +v 0.051777 0.125000 0.468750 +v 0.125000 -0.051777 -0.051777 +v 0.125000 -0.187500 -0.051777 +v 0.051777 -0.187500 -0.125000 +v -0.125000 -0.051777 -0.051777 +v -0.051777 -0.187500 -0.125000 +v -0.125000 -0.187500 -0.051777 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 1.0000 0.2656 +vt 0.8750 0.2656 +vt 0.8750 0.2344 +vt 0.9375 0.2188 +vt 1.0000 0.2344 +vt 0.1250 0.2656 +vt 0.1250 0.2344 +vt 0.1875 0.2188 +vt 0.2500 0.2344 +vt 0.2500 0.2656 +vt 0.3125 0.2344 +vt 0.3125 0.2656 +vt 0.7500 0.2344 +vt 0.8125 0.2344 +vt 0.8125 0.2656 +vt 0.7500 0.2656 +vt -0.0000 0.2344 +vt 0.0625 0.2344 +vt 0.0625 0.2656 +vt -0.0000 0.2656 +vt -0.0000 0.2969 +vt 0.0625 0.2969 +vt 0.9375 0.3125 +vt 0.8750 0.2969 +vt 0.8750 0.2344 +vt 0.9375 0.2188 +vt 1.0000 0.2344 +vt 1.0000 0.2656 +vt 1.0000 0.2969 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 0.1250 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2344 +vt 0.1250 0.2031 +vt 0.8750 0.5156 +vt 0.7500 0.5156 +vt 0.8750 0.2656 +vt 0.8750 0.2969 +vt 1.0000 0.5156 +vt 1.0000 0.3281 +vt 0.2500 0.2969 +vt 0.2500 0.2656 +vt 0.3750 0.2656 +vt 0.3750 0.5156 +vt 0.2500 0.5156 +vt 0.6250 0.5156 +vt 0.6250 0.2344 +vt 0.6875 0.2188 +vt 0.1250 0.5156 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.5000 0.5156 +vt 0.5000 0.2344 +vt 0.8125 0.6094 +vt 0.8125 0.5469 +vt 0.8750 0.5469 +vt 0.8750 0.6094 +vt 0.9375 0.5469 +vt 0.9375 0.6094 +vt 1.0000 0.5469 +vt 1.0000 0.6094 +vt 0.5000 0.6094 +vt 0.5000 0.5469 +vt 0.5625 0.5469 +vt 0.5625 0.6094 +vt 0.6250 0.5469 +vt 0.6250 0.6094 +vt 0.6875 0.5469 +vt 0.6875 0.6094 +vt 0.7500 0.5469 +vt 0.7500 0.6094 +vt 0.5000 0.2656 +vt 0.3750 0.2656 +vt 0.3750 0.2344 +vt 0.3750 0.0156 +vt 0.5000 0.0156 +vt 0.7500 0.2344 +vt 0.7500 0.2656 +vt 0.6250 0.2656 +vt 0.6250 0.0156 +vt 0.7500 0.0156 +vt 0.5625 0.2656 +vt 0.8125 0.2344 +vt 0.3125 0.2344 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vt 0.3750 0.2344 +vt 0.4375 0.2188 +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 -0.3827 0.0000 -0.9239 +vn -0.9239 0.0000 -0.3827 +vn -0.6387 0.5441 -0.5441 +vn -0.3251 0.3251 -0.8881 +vn -0.3002 0.3002 -0.9054 +vn 0.3827 0.0000 -0.9239 +vn 0.3002 0.3002 -0.9054 +vn 0.8881 0.3251 -0.3251 +vn 0.9406 -0.1343 -0.3119 +vn 0.9239 0.0000 -0.3827 +vn 0.8171 0.5712 -0.0783 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.8994 0.3725 -0.2288 +vn -0.0000 0.3827 -0.9239 +vn 0.1343 0.9406 -0.3119 +vn 0.5441 0.6386 -0.5441 +vn 0.2971 -0.7173 -0.6302 +vn 0.2971 -0.7173 0.6302 +vn -0.2971 -0.7173 0.6302 +vn -0.2970 -0.7174 -0.6302 +vn 0.7173 -0.2971 -0.6302 +vn 0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 -0.6302 +vn -0.7173 0.2971 0.6302 +vn -0.7173 0.2971 -0.6302 +vn -0.2971 0.7173 0.6302 +vn -0.2972 0.7173 -0.6302 +vn 0.2971 0.7173 0.6302 +vn 0.2971 0.7173 -0.6302 +vn 0.7173 0.2971 0.6302 +vn 0.7173 0.2971 -0.6302 +vn -0.3827 0.0000 0.9239 +vn -0.5743 -0.5789 0.5789 +vn -0.9878 -0.1101 0.1101 +vn -0.9239 0.0000 0.3827 +vn 0.3827 0.0000 0.9239 +vn 0.9239 0.0000 0.3827 +vn 0.9878 -0.1101 0.1101 +vn 0.5743 -0.5789 0.5789 +vn -0.9239 -0.3827 0.0000 +vn -0.9239 0.3827 -0.0000 +vn -0.3827 -0.9239 0.0000 +vn 0.9239 0.3827 -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.3827 0.9239 -0.0000 +vn 0.7173 -0.6302 0.2971 +vn 0.7173 0.6302 0.2971 +vn 0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn -0.2971 -0.6302 0.7173 +vn -0.7173 0.6302 0.2972 +vn -0.7174 -0.6302 0.2970 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 -0.6302 -0.2971 +vn -0.2971 0.6302 -0.7173 +vn -0.2970 -0.6302 -0.7174 +vn 0.2971 0.6302 -0.7173 +vn 0.2971 -0.6302 -0.7173 +vn 0.7172 0.6302 -0.2973 +vn 0.7174 -0.6302 -0.2969 +g Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_pipe +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2 +f 17/17/3 18/18/3 19/19/3 20/20/3 21/21/3 22/22/3 23/23/3 24/24/3 +f 25/25/4 26/26/4 27/27/4 28/28/4 29/29/4 30/30/4 31/31/4 32/32/4 +s 1 +f 33/33/5 34/34/6 35/35/7 36/36/8 37/37/9 +f 38/38/10 39/39/11 40/40/12 41/41/13 42/42/14 +f 41/41/13 43/43/15 44/44/16 42/42/14 +f 35/45/7 34/46/6 45/47/17 46/48/18 +f 39/49/11 38/50/10 47/51/2 48/52/19 +f 37/53/9 48/52/19 47/51/2 33/54/5 +f 36/55/8 49/56/20 50/57/21 40/58/12 39/59/11 48/60/19 37/61/9 +f 10/62/22 1/63/23 8/64/24 11/65/25 +f 9/66/26 2/67/27 1/63/23 10/62/22 +f 11/65/25 8/64/24 7/68/28 12/69/29 +f 12/70/29 7/71/28 6/72/30 13/73/31 +f 13/73/31 6/72/30 5/74/32 14/75/33 +f 14/75/33 5/74/32 4/76/34 15/77/35 +f 15/77/35 4/76/34 3/78/36 16/79/37 +f 16/79/37 3/78/36 2/67/27 9/66/26 +f 51/80/38 52/81/39 53/82/40 54/83/41 +f 55/84/42 56/85/43 57/86/44 58/87/45 +f 59/88/46 60/89/47 46/48/18 45/47/17 61/90/17 53/91/40 +f 62/92/48 59/88/46 53/91/40 52/93/39 +f 57/94/44 63/95/16 44/44/16 43/96/15 64/97/49 65/98/50 +f 60/89/47 66/99/51 49/100/20 36/101/8 35/45/7 46/48/18 +f 67/102/52 62/103/48 52/104/39 58/105/45 +f 66/99/51 68/106/53 50/107/21 49/100/20 +f 25/108/54 18/109/55 17/110/56 26/111/57 +f 26/111/57 17/110/56 24/112/58 27/113/59 +f 27/113/59 24/112/58 23/114/60 28/115/61 +f 28/116/61 23/117/60 22/118/62 29/119/63 +f 29/119/63 22/118/62 21/120/64 30/121/65 +f 30/121/65 21/120/64 20/122/66 31/123/67 +f 31/123/67 20/122/66 19/124/68 32/125/69 +f 32/125/69 19/124/68 18/109/55 25/108/54 +f 38/126/10 42/127/14 69/128/14 70/129/14 71/130/10 +f 72/131/6 34/132/6 33/133/5 73/134/5 74/135/6 +f 67/102/52 58/105/45 57/94/44 65/98/50 +f 73/134/5 33/133/5 47/136/2 38/126/10 71/130/10 +f 54/83/41 53/82/40 61/137/17 72/131/6 74/135/6 +f 56/85/43 70/129/14 69/128/14 63/138/16 57/86/44 +f 55/84/42 58/87/45 52/139/39 51/140/38 +f 42/127/14 44/44/16 63/138/16 69/128/14 +f 72/131/6 61/137/17 45/47/17 34/132/6 +f 64/97/49 43/96/15 41/141/13 40/142/12 50/107/21 68/106/53 diff --git a/mods/pipeworks/models/pipeworks_spigot_pouring.obj b/mods/pipeworks/models/pipeworks_spigot_pouring.obj new file mode 100755 index 0000000..8b72f18 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_spigot_pouring.obj @@ -0,0 +1,3652 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-spigot-pouring.blend' +# www.blender.org +o Pipe_Cylinder.002 +v 0.063954 -0.562500 -0.052486 +v 0.072965 -0.562500 -0.039001 +v 0.079172 -0.562500 -0.024017 +v 0.087512 -0.562500 -0.008619 +v 0.082336 -0.562500 0.008109 +v 0.079172 -0.562500 0.024016 +v 0.081939 -0.562500 0.043797 +v 0.070944 -0.562500 0.058222 +v 0.055844 -0.562500 0.068045 +v 0.024947 -0.562500 0.082240 +v -0.008806 -0.562500 0.089411 +v -0.025118 -0.562500 0.082803 +v -0.056049 -0.562500 0.068296 +v -0.063954 -0.562500 0.052486 +v -0.072965 -0.562500 0.039001 +v -0.079172 -0.562500 0.024016 +v -0.082336 -0.562500 0.008109 +v -0.082896 -0.562500 -0.025146 +v -0.081517 -0.562500 -0.043572 +v -0.063954 -0.562500 -0.052486 +v -0.039001 -0.562500 -0.072965 +v -0.009011 -0.562500 -0.091488 +v 0.008706 -0.562500 -0.088396 +v 0.024016 -0.562500 -0.079172 +v 0.039001 -0.562500 -0.072965 +v 0.052486 -0.562500 -0.063955 +v 0.043282 -0.562500 0.080974 +v 0.008594 -0.562500 0.087260 +v -0.043405 -0.562500 0.081205 +v -0.090830 -0.562500 -0.008946 +v -0.052486 -0.562500 -0.063955 +v -0.024017 -0.562500 -0.079172 +v -0.024017 -0.312500 0.079172 +v -0.041525 -0.312500 0.077688 +v -0.056656 -0.312500 0.069035 +v -0.063954 -0.312500 0.052486 +v -0.072965 -0.312500 0.039001 +v 0.079213 -0.312500 -0.042340 +v 0.082257 -0.312500 -0.024953 +v 0.082336 -0.312500 -0.008110 +v 0.082336 -0.312500 0.008109 +v 0.084638 -0.312500 0.025675 +v 0.072965 -0.312500 0.039001 +v 0.063954 -0.312500 0.052486 +v 0.052486 -0.312500 0.063954 +v 0.042510 -0.312500 0.079530 +v 0.027039 -0.312500 0.089135 +v 0.008281 -0.312500 0.084079 +v -0.008109 -0.312500 0.082336 +v -0.039001 -0.312500 -0.072965 +v -0.026378 -0.312500 -0.086958 +v -0.009219 -0.312500 -0.093599 +v 0.008559 -0.312500 -0.086898 +v 0.025408 -0.312500 -0.083759 +v 0.039001 -0.312500 -0.072965 +v 0.052486 -0.312500 -0.063955 +v 0.070496 -0.312500 -0.057855 +v -0.086647 -0.312500 0.026284 +v -0.087023 -0.312500 0.008571 +v -0.082336 -0.312500 -0.008109 +v -0.079172 -0.312500 -0.024017 +v -0.082584 -0.312500 -0.044142 +v -0.070392 -0.312500 -0.057769 +v -0.052486 -0.312500 -0.063955 +v -0.079172 -0.437500 0.024016 +v -0.072965 -0.437500 0.039001 +v 0.039001 -0.437500 0.072965 +v 0.052486 -0.437500 0.063954 +v -0.082336 -0.437500 0.008109 +v 0.024017 -0.437500 0.079172 +v -0.091771 -0.437500 -0.009039 +v 0.008109 -0.437500 0.082336 +v -0.042869 -0.437500 0.080202 +v -0.024910 -0.437500 0.082118 +v -0.079172 -0.437500 -0.024017 +v -0.008109 -0.437500 0.082336 +v -0.056091 -0.437500 0.068348 +v -0.072965 -0.437500 -0.039001 +v -0.063954 -0.437500 0.052486 +v -0.063954 -0.437500 -0.052486 +v -0.024017 -0.437500 -0.079172 +v -0.042431 -0.437500 -0.079382 +v -0.052486 -0.437500 -0.063955 +v -0.008109 -0.437500 -0.082336 +v 0.089481 -0.437500 -0.027144 +v 0.072965 -0.437500 -0.039001 +v 0.008109 -0.437500 -0.082336 +v 0.082336 -0.437500 -0.008110 +v 0.024016 -0.437500 -0.079172 +v 0.082336 -0.437500 0.008109 +v 0.039001 -0.437500 -0.072965 +v 0.086331 -0.437500 0.026188 +v 0.052486 -0.437500 -0.063955 +v 0.072965 -0.437500 0.039001 +v 0.063954 -0.437500 -0.052486 +v 0.063955 -0.437500 0.052486 +v -0.089559 -0.375000 0.027167 +v -0.072965 -0.500000 0.039001 +v 0.041658 -0.375000 0.077937 +v 0.052486 -0.500000 0.063954 +v -0.091009 -0.375000 0.008964 +v 0.025856 -0.375000 0.085236 +v -0.084890 -0.375000 -0.008361 +v 0.008109 -0.375000 0.082336 +v -0.039001 -0.375000 0.072965 +v -0.024016 -0.500000 0.079172 +v -0.079172 -0.375000 -0.024017 +v -0.008109 -0.375000 0.082336 +v -0.052486 -0.375000 0.063954 +v -0.072965 -0.375000 -0.039001 +v -0.072054 -0.375000 0.059133 +v -0.063954 -0.375000 -0.052486 +v -0.024017 -0.375000 -0.079172 +v -0.039001 -0.500000 -0.072965 +v -0.055379 -0.375000 -0.067479 +v -0.008705 -0.375000 -0.088388 +v 0.079172 -0.375000 -0.024017 +v 0.072965 -0.500000 -0.039001 +v 0.008545 -0.375000 -0.086764 +v 0.088919 -0.375000 -0.008758 +v 0.025709 -0.375000 -0.084751 +v 0.082336 -0.375000 0.008109 +v 0.039001 -0.375000 -0.072965 +v 0.079172 -0.375000 0.024016 +v 0.052486 -0.375000 -0.063955 +v 0.072965 -0.375000 0.039001 +v 0.072446 -0.375000 -0.059455 +v 0.063955 -0.375000 0.052486 +v -0.079172 -0.500000 0.024016 +v -0.078306 -0.375000 0.041855 +v 0.039001 -0.500000 0.072965 +v 0.052486 -0.375000 0.063954 +v -0.082336 -0.500000 0.008109 +v 0.024452 -0.500000 0.080606 +v -0.082336 -0.500000 -0.008109 +v 0.008367 -0.500000 0.084954 +v -0.042913 -0.500000 0.080284 +v -0.026708 -0.375000 0.088046 +v -0.079172 -0.500000 -0.024017 +v -0.008109 -0.500000 0.082336 +v -0.052486 -0.500000 0.063954 +v -0.075559 -0.500000 -0.040387 +v -0.063954 -0.500000 0.052486 +v -0.063954 -0.500000 -0.052486 +v -0.024017 -0.500000 -0.079172 +v -0.039001 -0.375000 -0.072965 +v -0.052486 -0.500000 -0.063955 +v -0.008109 -0.500000 -0.082336 +v 0.089623 -0.500000 -0.027187 +v 0.072965 -0.375000 -0.039001 +v 0.008109 -0.500000 -0.082336 +v 0.088138 -0.500000 -0.008681 +v 0.024016 -0.500000 -0.079172 +v 0.087274 -0.500000 0.008596 +v 0.044144 -0.500000 -0.082588 +v 0.079172 -0.500000 0.024016 +v 0.055078 -0.500000 -0.067113 +v 0.072965 -0.500000 0.039001 +v 0.063954 -0.500000 -0.052486 +v 0.063955 -0.500000 0.052486 +v -0.085890 -0.343750 0.026054 +v -0.072965 -0.531250 0.039001 +v 0.043844 -0.343750 0.082026 +v 0.052486 -0.531250 0.063954 +v -0.085566 -0.343750 0.008428 +v 0.026458 -0.343750 0.087219 +v -0.082336 -0.343750 -0.008109 +v 0.008898 -0.343750 0.090345 +v -0.039001 -0.343750 0.072965 +v -0.024016 -0.531250 0.079172 +v -0.079172 -0.343750 -0.024017 +v -0.008109 -0.343750 0.082336 +v -0.052486 -0.343750 0.063954 +v -0.072965 -0.343750 -0.039001 +v -0.063954 -0.343750 0.052486 +v -0.063954 -0.343750 -0.052486 +v -0.024017 -0.343750 -0.079172 +v -0.039001 -0.531250 -0.072965 +v -0.052486 -0.343750 -0.063955 +v -0.008859 -0.343750 -0.089948 +v 0.079172 -0.343750 -0.024017 +v 0.072965 -0.531250 -0.039001 +v 0.009078 -0.343750 -0.092166 +v 0.082336 -0.343750 -0.008110 +v 0.025304 -0.343750 -0.083417 +v 0.082336 -0.343750 0.008109 +v 0.039001 -0.343750 -0.072965 +v 0.079172 -0.343750 0.024016 +v 0.052486 -0.343750 -0.063955 +v 0.072965 -0.343750 0.039001 +v 0.069455 -0.343750 -0.057001 +v 0.063955 -0.343750 0.052486 +v -0.079172 -0.468750 0.024016 +v -0.080318 -0.406250 0.042931 +v 0.042543 -0.468750 0.079592 +v 0.052486 -0.406250 0.063954 +v -0.082336 -0.468750 0.008109 +v 0.024017 -0.468750 0.079172 +v -0.091973 -0.468750 -0.009059 +v 0.008109 -0.468750 0.082336 +v -0.041368 -0.468750 0.077395 +v -0.025282 -0.406250 0.083342 +v -0.082574 -0.468750 -0.025049 +v -0.008109 -0.468750 0.082336 +v -0.058255 -0.468750 0.070983 +v -0.072965 -0.468750 -0.039001 +v -0.063954 -0.468750 0.052486 +v -0.063954 -0.468750 -0.052486 +v -0.026990 -0.468750 -0.088976 +v -0.042373 -0.406250 -0.079273 +v -0.052486 -0.468750 -0.063955 +v -0.008109 -0.468750 -0.082336 +v 0.084698 -0.468750 -0.025693 +v 0.072965 -0.406250 -0.039001 +v 0.008109 -0.468750 -0.082336 +v 0.082336 -0.468750 -0.008110 +v 0.024016 -0.468750 -0.079172 +v 0.082336 -0.468750 0.008109 +v 0.039001 -0.468750 -0.072965 +v 0.084814 -0.468750 0.025728 +v 0.052486 -0.468750 -0.063955 +v 0.072965 -0.468750 0.039001 +v 0.063954 -0.468750 -0.052486 +v 0.063955 -0.468750 0.052486 +v -0.079172 -0.406250 0.024016 +v -0.072965 -0.468750 0.039001 +v 0.039001 -0.406250 0.072965 +v 0.059744 -0.468750 0.072798 +v -0.082336 -0.406250 0.008109 +v 0.025970 -0.406250 0.085610 +v -0.092977 -0.406250 -0.009157 +v 0.008109 -0.406250 0.082336 +v -0.041609 -0.406250 0.077846 +v -0.025075 -0.468750 0.082663 +v -0.079172 -0.406250 -0.024017 +v -0.008109 -0.406250 0.082336 +v -0.057068 -0.406250 0.069537 +v -0.072965 -0.406250 -0.039001 +v -0.068019 -0.406250 0.055822 +v -0.063954 -0.406250 -0.052486 +v -0.024017 -0.406250 -0.079172 +v -0.043742 -0.468750 -0.081836 +v -0.052486 -0.406250 -0.063955 +v -0.008109 -0.406250 -0.082336 +v 0.087000 -0.406250 -0.026391 +v 0.072965 -0.468750 -0.039001 +v 0.008451 -0.406250 -0.085809 +v 0.084423 -0.406250 -0.008315 +v 0.025125 -0.406250 -0.082826 +v 0.082336 -0.406250 0.008109 +v 0.042657 -0.406250 -0.079806 +v 0.079172 -0.406250 0.024016 +v 0.053530 -0.406250 -0.065227 +v 0.072965 -0.406250 0.039001 +v 0.063954 -0.406250 -0.052486 +v 0.063955 -0.406250 0.052486 +v -0.079172 -0.531250 0.024016 +v -0.072965 -0.343750 0.039001 +v 0.039001 -0.531250 0.072965 +v 0.052486 -0.343750 0.063954 +v -0.082336 -0.531250 0.008109 +v 0.027240 -0.531250 0.089798 +v -0.082336 -0.531250 -0.008109 +v 0.009195 -0.531250 0.093355 +v -0.041465 -0.531250 0.077575 +v -0.024017 -0.343750 0.079172 +v -0.079172 -0.531250 -0.024017 +v -0.008109 -0.531250 0.082336 +v -0.052486 -0.531250 0.063954 +v -0.082864 -0.531250 -0.044292 +v -0.063954 -0.531250 0.052486 +v -0.063954 -0.531250 -0.052486 +v -0.024017 -0.531250 -0.079172 +v -0.039001 -0.343750 -0.072965 +v -0.052486 -0.531250 -0.063955 +v -0.008109 -0.531250 -0.082336 +v 0.079172 -0.531250 -0.024017 +v 0.072965 -0.343750 -0.039001 +v 0.008109 -0.531250 -0.082336 +v 0.092902 -0.531250 -0.009150 +v 0.024016 -0.531250 -0.079172 +v 0.082336 -0.531250 0.008109 +v 0.039001 -0.531250 -0.072965 +v 0.079172 -0.531250 0.024016 +v 0.052486 -0.531250 -0.063955 +v 0.072965 -0.531250 0.039001 +v 0.063954 -0.531250 -0.052486 +v 0.065222 -0.531250 0.053526 +v 0.120197 0.036461 0.437501 +v 0.125000 0.012312 0.437501 +v 0.125000 -0.012311 0.437501 +v 0.120197 -0.036461 0.437501 +v 0.110774 0.059210 0.437501 +v 0.131836 0.012985 0.468750 +v 0.126770 0.038455 0.468750 +v 0.131836 -0.012985 0.468750 +v 0.110774 -0.059210 0.437501 +v 0.126770 -0.038455 0.468750 +v 0.097094 0.079683 0.437501 +v 0.116832 0.062448 0.468750 +v 0.097094 -0.079683 0.437501 +v 0.116832 -0.062448 0.468750 +v 0.079683 0.097094 0.437501 +v 0.102404 0.084041 0.468750 +v 0.079683 -0.097094 0.437501 +v 0.102404 -0.084041 0.468750 +v 0.059210 0.110774 0.437501 +v 0.084041 0.102404 0.468750 +v 0.059210 -0.110774 0.437501 +v 0.084041 -0.102404 0.468750 +v 0.036461 0.120197 0.437501 +v 0.062448 0.116832 0.468750 +v 0.036461 -0.120197 0.437501 +v 0.062448 -0.116832 0.468750 +v 0.012311 0.125000 0.437501 +v 0.038455 0.126770 0.468750 +v 0.012311 -0.125001 0.437501 +v 0.038455 -0.126770 0.468750 +v -0.012312 0.125000 0.437501 +v 0.012985 0.131836 0.468750 +v -0.012312 -0.125001 0.437501 +v 0.012985 -0.131837 0.468750 +v -0.036461 0.120197 0.437501 +v -0.012985 0.131836 0.468750 +v -0.036461 -0.120197 0.437501 +v -0.012985 -0.131837 0.468750 +v -0.059210 0.110774 0.437501 +v -0.038455 0.126770 0.468750 +v -0.059210 -0.110774 0.437501 +v -0.038455 -0.126770 0.468750 +v -0.079683 0.097094 0.437501 +v -0.062448 0.116832 0.468750 +v -0.079683 -0.097094 0.437501 +v -0.062448 -0.116832 0.468750 +v -0.097094 0.079683 0.437501 +v -0.084041 0.102404 0.468750 +v -0.097094 -0.079683 0.437501 +v -0.084041 -0.102404 0.468750 +v -0.110774 0.059210 0.437501 +v -0.102404 0.084041 0.468750 +v -0.110774 -0.059210 0.437501 +v -0.102404 -0.084041 0.468750 +v -0.120197 0.036461 0.437501 +v -0.116832 0.062448 0.468750 +v -0.120197 -0.036461 0.437501 +v -0.116832 -0.062448 0.468750 +v -0.125001 0.012311 0.437501 +v -0.126770 0.038455 0.468750 +v -0.125001 -0.012311 0.437501 +v -0.126770 -0.038455 0.468750 +v -0.131837 0.012985 0.468750 +v -0.131837 -0.012985 0.468750 +v -0.063644 0.130078 0.460912 +v -0.063644 0.130078 0.468749 +v -0.062467 0.139022 0.468749 +v -0.062467 0.139022 0.460912 +v -0.054133 0.142474 0.460912 +v -0.046976 0.136982 0.460912 +v -0.048153 0.128039 0.460912 +v -0.056487 0.124587 0.460912 +v -0.056487 0.124587 0.468749 +v -0.054133 0.142474 0.468749 +v -0.046976 0.136982 0.468749 +v -0.048153 0.128039 0.468749 +v -0.136982 0.046976 0.460912 +v -0.136982 0.046976 0.468749 +v -0.142474 0.054133 0.468749 +v -0.142474 0.054133 0.460912 +v -0.139022 0.062467 0.460912 +v -0.130078 0.063644 0.460912 +v -0.124587 0.056488 0.460912 +v -0.128039 0.048154 0.460912 +v -0.128039 0.048154 0.468749 +v -0.139022 0.062467 0.468749 +v -0.130078 0.063644 0.468749 +v -0.124587 0.056488 0.468749 +v -0.130078 -0.063644 0.460912 +v -0.130078 -0.063644 0.468749 +v -0.139022 -0.062467 0.468749 +v -0.139022 -0.062467 0.460912 +v -0.142474 -0.054132 0.460912 +v -0.136982 -0.046976 0.460912 +v -0.128039 -0.048153 0.460912 +v -0.124587 -0.056487 0.460912 +v -0.124587 -0.056487 0.468749 +v -0.142474 -0.054132 0.468749 +v -0.136982 -0.046976 0.468749 +v -0.128039 -0.048153 0.468749 +v -0.046976 -0.136982 0.460912 +v -0.046976 -0.136982 0.468749 +v -0.054133 -0.142474 0.468749 +v -0.054133 -0.142474 0.460912 +v -0.062467 -0.139022 0.460912 +v -0.063644 -0.130078 0.460912 +v -0.056488 -0.124587 0.460912 +v -0.048154 -0.128039 0.460912 +v -0.048154 -0.128039 0.468749 +v -0.062467 -0.139022 0.468749 +v -0.063644 -0.130078 0.468749 +v -0.056488 -0.124587 0.468749 +v 0.063644 -0.130078 0.460912 +v 0.063644 -0.130078 0.468749 +v 0.062466 -0.139022 0.468749 +v 0.062466 -0.139022 0.460912 +v 0.054132 -0.142474 0.460912 +v 0.046976 -0.136982 0.460912 +v 0.048153 -0.128039 0.460912 +v 0.056487 -0.124587 0.460912 +v 0.056487 -0.124587 0.468749 +v 0.054132 -0.142474 0.468749 +v 0.046976 -0.136982 0.468749 +v 0.048153 -0.128039 0.468749 +v 0.136982 -0.046976 0.460912 +v 0.136982 -0.046976 0.468749 +v 0.142474 -0.054133 0.468749 +v 0.142474 -0.054133 0.460912 +v 0.139022 -0.062467 0.460912 +v 0.130078 -0.063644 0.460912 +v 0.124586 -0.056488 0.460912 +v 0.128039 -0.048153 0.460912 +v 0.128039 -0.048153 0.468749 +v 0.139022 -0.062467 0.468749 +v 0.130078 -0.063644 0.468749 +v 0.124586 -0.056488 0.468749 +v 0.130078 0.063644 0.460912 +v 0.130078 0.063644 0.468749 +v 0.139022 0.062467 0.468749 +v 0.139022 0.062467 0.460912 +v 0.142474 0.054132 0.460912 +v 0.136982 0.046976 0.460912 +v 0.128039 0.048153 0.460912 +v 0.124587 0.056487 0.460912 +v 0.124587 0.056487 0.468749 +v 0.142474 0.054132 0.468749 +v 0.136982 0.046976 0.468749 +v 0.128039 0.048153 0.468749 +v 0.046976 0.136982 0.460912 +v 0.046976 0.136982 0.468749 +v 0.054133 0.142474 0.468749 +v 0.054133 0.142474 0.460912 +v 0.062467 0.139022 0.460912 +v 0.063644 0.130078 0.460912 +v 0.056488 0.124587 0.460912 +v 0.048153 0.128039 0.460912 +v 0.048153 0.128039 0.468749 +v 0.062467 0.139022 0.468749 +v 0.063644 0.130078 0.468749 +v 0.056487 0.124587 0.468749 +v 0.125000 0.012312 0.012311 +v 0.012311 -0.125001 0.125000 +v -0.059210 -0.110774 0.110774 +v -0.079683 -0.097094 0.097094 +v -0.097094 -0.079683 0.079683 +v -0.120197 -0.036461 0.036461 +v 0.125000 -0.012312 0.012312 +v 0.120197 -0.036461 0.036461 +v 0.110774 -0.059210 0.059210 +v 0.097094 -0.079683 0.079683 +v 0.079683 -0.097094 0.097094 +v 0.059210 -0.110774 0.110774 +v 0.036461 -0.120197 0.120197 +v -0.012311 -0.125000 0.125000 +v -0.036461 -0.120197 0.120197 +v -0.110774 -0.059210 0.059210 +v -0.125000 -0.012311 0.012311 +v -0.125000 0.012312 0.012312 +v 0.074012 -0.138466 0.468750 +v 0.045576 -0.150245 0.468750 +v 0.015389 -0.156250 0.468750 +v 0.099603 -0.121367 0.468750 +v -0.015389 -0.156250 0.468750 +v 0.138467 -0.074012 0.468750 +v 0.121367 -0.099603 0.468750 +v 0.099603 -0.121367 0.500000 +v 0.074012 -0.138467 0.500000 +v 0.045576 -0.150245 0.500000 +v 0.015389 -0.156250 0.500000 +v -0.015389 -0.156250 0.500000 +v 0.150245 -0.045576 0.468750 +v 0.121367 -0.099603 0.500000 +v -0.045576 -0.150245 0.468750 +v -0.045576 -0.150245 0.500000 +v 0.156250 -0.015389 0.468750 +v 0.150245 -0.045576 0.500000 +v 0.138466 -0.074012 0.500000 +v -0.074012 -0.138467 0.468750 +v -0.074012 -0.138467 0.500000 +v 0.156249 0.015389 0.468750 +v 0.156250 -0.015389 0.500000 +v -0.099603 -0.121367 0.468750 +v -0.099603 -0.121367 0.500000 +v 0.150245 0.045576 0.468750 +v 0.156250 0.015389 0.500000 +v -0.121367 -0.099603 0.468750 +v -0.121367 -0.099603 0.500000 +v 0.138467 0.074012 0.468750 +v 0.150245 0.045576 0.500000 +v -0.150245 -0.045576 0.468750 +v -0.138467 -0.074012 0.468750 +v -0.138467 -0.074012 0.500000 +v 0.121367 0.099603 0.468750 +v 0.138467 0.074012 0.500000 +v -0.156250 -0.015389 0.468750 +v -0.150245 -0.045576 0.500000 +v 0.099603 0.121367 0.468750 +v 0.121367 0.099603 0.500000 +v -0.156250 0.015389 0.468750 +v -0.156250 -0.015389 0.500000 +v 0.074012 0.138466 0.468750 +v 0.099603 0.121367 0.500000 +v -0.150245 0.045576 0.468750 +v -0.156250 0.015389 0.500000 +v 0.045576 0.150245 0.468750 +v 0.074012 0.138466 0.500000 +v -0.138467 0.074012 0.468750 +v -0.150245 0.045576 0.500000 +v 0.015389 0.156249 0.468750 +v 0.045576 0.150245 0.500000 +v -0.015389 0.156250 0.500000 +v -0.121367 0.099603 0.468750 +v -0.138467 0.074012 0.500000 +v -0.015389 0.156250 0.468750 +v 0.015389 0.156250 0.500000 +v -0.074012 0.138467 0.500000 +v -0.045576 0.150245 0.500000 +v -0.099603 0.121367 0.500000 +v -0.121367 0.099603 0.500000 +v -0.045576 0.150245 0.468750 +v -0.099603 0.121367 0.468750 +v -0.074012 0.138467 0.468750 +v -0.108578 0.095821 0.460912 +v -0.108578 0.095821 0.468749 +v -0.110913 0.104534 0.468749 +v -0.110913 0.104534 0.460912 +v -0.104534 0.110913 0.460912 +v -0.095821 0.108578 0.460912 +v -0.093486 0.099865 0.460912 +v -0.099865 0.093486 0.460912 +v -0.099865 0.093486 0.468749 +v -0.104534 0.110913 0.468749 +v -0.095821 0.108578 0.468749 +v -0.093486 0.099865 0.468749 +v -0.144532 -0.009021 0.460912 +v -0.144532 -0.009021 0.468749 +v -0.152344 -0.004510 0.468749 +v -0.152344 -0.004510 0.460912 +v -0.152344 0.004510 0.460912 +v -0.144532 0.009021 0.460912 +v -0.136720 0.004510 0.460912 +v -0.136720 -0.004510 0.460912 +v -0.136720 -0.004510 0.468749 +v -0.152344 0.004510 0.468749 +v -0.144532 0.009021 0.468749 +v -0.136720 0.004510 0.468749 +v -0.095821 -0.108578 0.460912 +v -0.095821 -0.108578 0.468749 +v -0.104535 -0.110913 0.468749 +v -0.104535 -0.110913 0.460912 +v -0.110913 -0.104534 0.460912 +v -0.108578 -0.095821 0.460912 +v -0.099865 -0.093486 0.460912 +v -0.093486 -0.099865 0.460912 +v -0.093486 -0.099865 0.468749 +v -0.110913 -0.104534 0.468749 +v -0.108578 -0.095821 0.468749 +v -0.099865 -0.093486 0.468749 +v 0.009021 -0.144532 0.460912 +v 0.009021 -0.144532 0.468749 +v 0.004510 -0.152344 0.468749 +v 0.004510 -0.152344 0.460912 +v -0.004511 -0.152344 0.460912 +v -0.009021 -0.144532 0.460912 +v -0.004511 -0.136720 0.460912 +v 0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.468749 +v -0.004511 -0.152344 0.468749 +v -0.009021 -0.144532 0.468749 +v -0.004511 -0.136720 0.468749 +v 0.108578 -0.095821 0.460912 +v 0.108578 -0.095821 0.468749 +v 0.110913 -0.104534 0.468749 +v 0.110913 -0.104534 0.460912 +v 0.104534 -0.110913 0.460912 +v 0.095821 -0.108578 0.460912 +v 0.093486 -0.099865 0.460912 +v 0.099865 -0.093486 0.460912 +v 0.099865 -0.093486 0.468749 +v 0.104534 -0.110913 0.468749 +v 0.095821 -0.108578 0.468749 +v 0.093486 -0.099865 0.468749 +v 0.144532 0.009021 0.460912 +v 0.144532 0.009021 0.468749 +v 0.152344 0.004510 0.468749 +v 0.152344 0.004510 0.460912 +v 0.152344 -0.004510 0.460912 +v 0.144532 -0.009021 0.460912 +v 0.136720 -0.004510 0.460912 +v 0.136720 0.004510 0.460912 +v 0.136720 0.004510 0.468749 +v 0.152344 -0.004510 0.468749 +v 0.144532 -0.009021 0.468749 +v 0.136720 -0.004510 0.468749 +v 0.095821 0.108578 0.460912 +v 0.095821 0.108578 0.468749 +v 0.104534 0.110913 0.468749 +v 0.104534 0.110913 0.460912 +v 0.110913 0.104534 0.460912 +v 0.108578 0.095821 0.460912 +v 0.099865 0.093486 0.460912 +v 0.093486 0.099865 0.460912 +v 0.093486 0.099865 0.468749 +v 0.110913 0.104534 0.468749 +v 0.108578 0.095821 0.468749 +v 0.099865 0.093486 0.468749 +v -0.009021 0.144532 0.460912 +v -0.009021 0.144532 0.468749 +v -0.004510 0.152344 0.468749 +v -0.004510 0.152344 0.460912 +v 0.004510 0.152344 0.460912 +v 0.009021 0.144532 0.460912 +v 0.004510 0.136720 0.460912 +v -0.004510 0.136720 0.460912 +v -0.004510 0.136720 0.468749 +v 0.004510 0.152344 0.468749 +v 0.009021 0.144532 0.468749 +v 0.004510 0.136720 0.468749 +v 0.125000 0.012312 -0.000000 +v -0.120197 0.036461 0.000000 +v -0.110774 0.059210 -0.000000 +v -0.097094 0.079683 -0.000000 +v -0.036461 0.120197 -0.000000 +v -0.059210 0.110774 -0.000000 +v -0.079683 0.097094 -0.000000 +v 0.036461 0.120197 -0.000000 +v -0.125000 -0.012311 0.000000 +v 0.059210 0.110774 -0.000000 +v 0.079683 0.097094 -0.000000 +v 0.097094 0.079683 -0.000000 +v 0.110774 0.059210 -0.000000 +v 0.120197 0.036461 0.000000 +v -0.125000 0.012312 0.000000 +v -0.012311 0.125000 -0.000000 +v 0.012312 0.125000 -0.000000 +v 0.125000 -0.012312 0.000000 +v 0.000000 0.125000 -0.000000 +v 0.125000 0.000000 0.000000 +v -0.125000 0.000000 0.012312 +v -0.038455 -0.187500 -0.126770 +v -0.012985 -0.187500 -0.131837 +v 0.012984 -0.187500 -0.131837 +v 0.038455 -0.187500 -0.126770 +v 0.062448 -0.187500 -0.116832 +v 0.084041 -0.187500 -0.102404 +v 0.102404 -0.187500 -0.084041 +v 0.116832 -0.187500 -0.062448 +v 0.126770 -0.187500 -0.038455 +v 0.131837 -0.187500 -0.012985 +v 0.131837 -0.187500 0.012985 +v 0.116832 -0.187500 0.062448 +v 0.102404 -0.187500 0.084041 +v 0.084041 -0.187500 0.102404 +v 0.062448 -0.187500 0.116832 +v 0.038455 -0.187500 0.126770 +v 0.012985 -0.187500 0.131836 +v -0.012985 -0.187500 0.131836 +v -0.038455 -0.187500 0.126770 +v -0.062448 -0.187500 0.116832 +v -0.102404 -0.187500 0.084041 +v -0.084041 -0.187500 0.102404 +v -0.116832 -0.187500 0.062448 +v -0.126770 -0.187500 0.038455 +v -0.131837 -0.187500 -0.012985 +v -0.116832 -0.187500 -0.062448 +v -0.126770 -0.187500 -0.038455 +v -0.102404 -0.187500 -0.084041 +v -0.084041 -0.187500 -0.102404 +v -0.062448 -0.187500 -0.116832 +v 0.126770 -0.187500 0.038455 +v -0.131836 -0.187500 0.012985 +v -0.059210 -0.156251 -0.110774 +v -0.036461 -0.156251 -0.120197 +v -0.012312 -0.156251 -0.125001 +v 0.012311 -0.156251 -0.125001 +v 0.036461 -0.156251 -0.120197 +v 0.059210 -0.156251 -0.110774 +v 0.079683 -0.156251 -0.097094 +v 0.097094 -0.156251 -0.079683 +v 0.110774 -0.156251 -0.059210 +v 0.120197 -0.156251 -0.036461 +v 0.125001 -0.156251 -0.012312 +v 0.125000 -0.156251 0.012311 +v 0.120197 -0.156251 0.036461 +v 0.110774 -0.156251 0.059210 +v 0.097094 -0.156251 0.079683 +v 0.079683 -0.156251 0.097094 +v 0.059210 -0.156251 0.110774 +v 0.036461 -0.156251 0.120197 +v 0.012311 -0.156251 0.125000 +v -0.012311 -0.156251 0.125000 +v -0.036461 -0.156251 0.120197 +v -0.059210 -0.156251 0.110774 +v -0.079683 -0.156251 0.097094 +v -0.097094 -0.156251 0.079683 +v -0.110774 -0.156251 0.059210 +v -0.120197 -0.156251 0.036461 +v -0.125000 -0.156251 0.012311 +v -0.125000 -0.156251 -0.012311 +v -0.120197 -0.156251 -0.036461 +v -0.110774 -0.156251 -0.059210 +v -0.097094 -0.156251 -0.079683 +v -0.079683 -0.156251 -0.097094 +v 0.125000 -0.012312 -0.012312 +v -0.125000 -0.012312 -0.012312 +v 0.121367 -0.312500 -0.099603 +v 0.138467 -0.312500 -0.074012 +v 0.150245 -0.312500 -0.045577 +v 0.156250 -0.312500 -0.015390 +v 0.156250 -0.312500 0.015389 +v 0.150245 -0.312500 0.045576 +v 0.138467 -0.312500 0.074012 +v 0.121367 -0.312500 0.099603 +v 0.099603 -0.312500 0.121367 +v 0.045576 -0.312500 0.150245 +v -0.015389 -0.312500 0.156249 +v -0.045576 -0.312500 0.150245 +v -0.099603 -0.312500 0.121367 +v -0.121367 -0.312500 0.099603 +v -0.138467 -0.312500 0.074012 +v -0.150245 -0.312500 0.045576 +v -0.156250 -0.312500 0.015389 +v -0.150245 -0.312500 -0.045576 +v -0.138467 -0.312500 -0.074012 +v -0.121367 -0.312500 -0.099603 +v -0.074012 -0.312500 -0.138467 +v -0.015389 -0.312500 -0.156250 +v 0.015389 -0.312500 -0.156250 +v 0.045576 -0.312500 -0.150245 +v 0.074012 -0.312500 -0.138467 +v 0.099603 -0.312500 -0.121367 +v 0.074012 -0.312500 0.138466 +v 0.015389 -0.312500 0.156249 +v -0.074012 -0.312500 0.138467 +v -0.156250 -0.312500 -0.015389 +v -0.099603 -0.312500 -0.121367 +v -0.045576 -0.312500 -0.150245 +v 0.121367 -0.187500 -0.099603 +v 0.099603 -0.187500 -0.121367 +v 0.138467 -0.187500 -0.074012 +v 0.150245 -0.187500 -0.045577 +v 0.156250 -0.187500 -0.015390 +v 0.156250 -0.187500 0.015389 +v 0.150245 -0.187500 0.045576 +v 0.138467 -0.187500 0.074012 +v 0.121367 -0.187500 0.099603 +v 0.099603 -0.187500 0.121367 +v 0.074012 -0.187500 0.138466 +v 0.045576 -0.187500 0.150245 +v 0.015389 -0.187500 0.156249 +v -0.015389 -0.187500 0.156249 +v -0.045576 -0.187500 0.150245 +v -0.074012 -0.187500 0.138467 +v -0.099603 -0.187500 0.121367 +v -0.121367 -0.187500 0.099603 +v -0.138467 -0.187500 0.074012 +v -0.150245 -0.187500 0.045576 +v -0.156250 -0.187500 0.015389 +v -0.156250 -0.187500 -0.015389 +v -0.138467 -0.187500 -0.074012 +v -0.150245 -0.187500 -0.045576 +v -0.121367 -0.187500 -0.099604 +v -0.099603 -0.187500 -0.121367 +v -0.074012 -0.187500 -0.138467 +v -0.045576 -0.187500 -0.150245 +v 0.015389 -0.187500 -0.156250 +v -0.015389 -0.187500 -0.156250 +v 0.045576 -0.187500 -0.150245 +v 0.074012 -0.187500 -0.138467 +v 0.125000 -0.000000 -0.012312 +v -0.120197 0.000000 -0.036461 +v -0.110774 -0.000000 -0.059210 +v -0.097094 0.000000 -0.079683 +v -0.036461 -0.000000 -0.120197 +v -0.059210 -0.000000 -0.110774 +v -0.079683 -0.000000 -0.097094 +v 0.036461 -0.000000 -0.120197 +v 0.059210 -0.000000 -0.110774 +v 0.079683 -0.000000 -0.097094 +v 0.097094 -0.000000 -0.079683 +v 0.110774 -0.000000 -0.059210 +v 0.120197 0.000000 -0.036461 +v -0.125000 0.000000 -0.012312 +v -0.012311 -0.000000 -0.125000 +v 0.012312 -0.000000 -0.125000 +v 0.125000 0.000000 0.012312 +v 0.000000 -0.000000 -0.125000 +v 0.125000 0.002402 -0.012075 +v -0.120197 0.007113 -0.035761 +v -0.110774 0.011551 -0.058072 +v -0.097094 0.015545 -0.078152 +v -0.036461 0.023449 -0.117887 +v -0.059210 0.021611 -0.108646 +v -0.079683 0.018942 -0.095229 +v 0.036461 0.023449 -0.117887 +v 0.059210 0.021611 -0.108645 +v 0.079683 0.018942 -0.095228 +v 0.097094 0.015545 -0.078152 +v 0.110774 0.011551 -0.058072 +v 0.120197 0.007113 -0.035761 +v -0.125000 0.002402 -0.012075 +v -0.012311 0.024386 -0.122599 +v 0.012312 0.024386 -0.122599 +v 0.000000 0.024386 -0.122599 +v 0.125000 0.004711 -0.011375 +v -0.120197 0.013953 -0.033686 +v -0.110774 0.022659 -0.054703 +v -0.097094 0.030493 -0.073618 +v -0.036461 0.045997 -0.111047 +v -0.059210 0.042391 -0.102342 +v -0.079683 0.037156 -0.089703 +v 0.036461 0.045997 -0.111047 +v 0.059210 0.042391 -0.102342 +v 0.079683 0.037156 -0.089703 +v 0.097094 0.030493 -0.073618 +v 0.110774 0.022659 -0.054703 +v 0.120197 0.013953 -0.033686 +v -0.125000 0.004711 -0.011374 +v -0.012311 0.047836 -0.115485 +v 0.012312 0.047835 -0.115485 +v 0.000000 0.047836 -0.115485 +v 0.125000 0.006840 -0.010237 +v -0.120197 0.020257 -0.030317 +v -0.110774 0.032895 -0.049231 +v -0.097094 0.044270 -0.066254 +v -0.036461 0.066778 -0.099940 +v -0.059210 0.061543 -0.092105 +v -0.079683 0.053943 -0.080731 +v 0.036461 0.066778 -0.099940 +v 0.059210 0.061543 -0.092105 +v 0.079683 0.053943 -0.080731 +v 0.097094 0.044270 -0.066254 +v 0.110774 0.032895 -0.049231 +v 0.120197 0.020257 -0.030317 +v -0.125000 0.006840 -0.010237 +v -0.012311 0.069446 -0.103934 +v 0.012312 0.069446 -0.103934 +v 0.000000 0.069446 -0.103934 +v 0.125000 0.008706 -0.008706 +v -0.120197 0.025782 -0.025782 +v -0.110774 0.041868 -0.041868 +v -0.097094 0.056345 -0.056345 +v -0.036461 0.084992 -0.084992 +v -0.059210 0.078329 -0.078329 +v -0.079683 0.068656 -0.068656 +v 0.036461 0.084992 -0.084992 +v 0.059210 0.078329 -0.078329 +v 0.079683 0.068656 -0.068656 +v 0.097094 0.056345 -0.056345 +v 0.110774 0.041868 -0.041868 +v 0.120197 0.025782 -0.025782 +v -0.125000 0.008706 -0.008706 +v -0.012311 0.088389 -0.088389 +v 0.012312 0.088389 -0.088389 +v 0.000000 0.088389 -0.088389 +v -0.125000 0.000000 0.000000 +v 0.125000 0.010237 -0.006840 +v -0.120197 0.030317 -0.020257 +v -0.110774 0.049231 -0.032895 +v -0.097094 0.066254 -0.044270 +v -0.036461 0.099940 -0.066778 +v -0.059210 0.092105 -0.061543 +v -0.079683 0.080731 -0.053943 +v 0.036461 0.099940 -0.066778 +v 0.059210 0.092105 -0.061543 +v 0.079683 0.080731 -0.053943 +v 0.097094 0.066254 -0.044270 +v 0.110774 0.049231 -0.032895 +v 0.120197 0.030317 -0.020257 +v -0.125000 0.010237 -0.006840 +v -0.012311 0.103934 -0.069447 +v 0.012312 0.103934 -0.069447 +v 0.000000 0.103934 -0.069447 +v 0.125000 0.011375 -0.004712 +v -0.120197 0.033686 -0.013953 +v -0.110774 0.054703 -0.022659 +v -0.097094 0.073618 -0.030493 +v -0.036461 0.111047 -0.045997 +v -0.059210 0.102342 -0.042391 +v -0.079683 0.089703 -0.037156 +v 0.036461 0.111047 -0.045997 +v 0.059210 0.102342 -0.042391 +v 0.079683 0.089703 -0.037156 +v 0.097094 0.073618 -0.030493 +v 0.110774 0.054703 -0.022659 +v 0.120197 0.033686 -0.013953 +v -0.125000 0.011374 -0.004711 +v -0.012311 0.115485 -0.047836 +v 0.012312 0.115485 -0.047836 +v 0.000000 0.115485 -0.047836 +v 0.125000 0.012075 -0.002402 +v -0.120197 0.035761 -0.007113 +v -0.110774 0.058072 -0.011551 +v -0.097094 0.078152 -0.015545 +v -0.036461 0.117887 -0.023449 +v -0.059210 0.108646 -0.021611 +v -0.079683 0.095229 -0.018942 +v 0.036461 0.117887 -0.023449 +v 0.059210 0.108645 -0.021611 +v 0.079683 0.095229 -0.018942 +v 0.097094 0.078152 -0.015545 +v 0.110774 0.058072 -0.011551 +v 0.120197 0.035761 -0.007113 +v -0.125000 0.012075 -0.002402 +v -0.012311 0.122599 -0.024387 +v 0.012312 0.122599 -0.024387 +v 0.000000 0.122599 -0.024387 +vt 0.4883 0.6268 +vt 0.4533 0.6237 +vt 0.4291 0.5990 +vt 0.4139 0.5687 +vt 0.3967 0.5429 +vt 0.3848 0.5142 +vt 0.3787 0.4837 +vt 0.3624 0.4510 +vt 0.3776 0.4200 +vt 0.3803 0.3846 +vt 0.4139 0.3676 +vt 0.4359 0.3456 +vt 0.4617 0.3283 +vt 0.4905 0.3164 +vt 0.5192 0.2928 +vt 0.5532 0.2988 +vt 0.5825 0.3164 +vt 0.6112 0.3283 +vt 0.6370 0.3456 +vt 0.6590 0.3676 +vt 0.6763 0.3934 +vt 0.6882 0.4221 +vt 0.7042 0.4516 +vt 0.6942 0.4837 +vt 0.6882 0.5142 +vt 0.6935 0.5521 +vt 0.6724 0.5797 +vt 0.6435 0.5985 +vt 0.6194 0.6233 +vt 0.5843 0.6257 +vt 0.5529 0.6353 +vt 0.5196 0.6395 +vt 0.8125 0.1562 +vt 0.8125 0.1875 +vt 0.7812 0.1875 +vt 0.7812 0.1562 +vt 0.0938 0.1562 +vt 0.0938 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.1562 +vt 0.7500 0.1875 +vt 0.7500 0.1562 +vt 0.0312 0.1875 +vt 0.0312 0.1562 +vt 0.7188 0.1875 +vt 0.7188 0.1562 +vt 0.0000 0.1875 +vt 0.0000 0.1562 +vt 0.9375 0.1562 +vt 0.9375 0.1875 +vt 0.9062 0.1875 +vt 0.9062 0.1562 +vt 0.6875 0.1875 +vt 0.6875 0.1562 +vt 1.0000 0.1562 +vt 1.0000 0.1875 +vt 0.9688 0.1875 +vt 0.9688 0.1562 +vt 0.8750 0.1875 +vt 0.8750 0.1562 +vt 0.6562 0.1875 +vt 0.6562 0.1562 +vt 0.8438 0.1875 +vt 0.8438 0.1562 +vt 0.6250 0.1875 +vt 0.6250 0.1562 +vt 0.5625 0.1562 +vt 0.5625 0.1875 +vt 0.5312 0.1875 +vt 0.5312 0.1562 +vt 0.5938 0.1875 +vt 0.5938 0.1562 +vt 0.5000 0.1875 +vt 0.5000 0.1562 +vt 0.3125 0.1562 +vt 0.3125 0.1875 +vt 0.2812 0.1875 +vt 0.2812 0.1562 +vt 0.4688 0.1875 +vt 0.4688 0.1562 +vt 0.2500 0.1875 +vt 0.2500 0.1562 +vt 0.4375 0.1875 +vt 0.4375 0.1562 +vt 0.2188 0.1875 +vt 0.2188 0.1562 +vt 0.4062 0.1875 +vt 0.4062 0.1562 +vt 0.1875 0.1875 +vt 0.1875 0.1562 +vt 0.3750 0.1875 +vt 0.3750 0.1562 +vt 0.1562 0.1875 +vt 0.1562 0.1562 +vt 0.3438 0.1875 +vt 0.3438 0.1562 +vt 0.1250 0.1875 +vt 0.1250 0.1562 +vt 0.1250 0.0312 +vt 0.1250 0.0625 +vt 0.0938 0.0625 +vt 0.0938 0.0312 +vt 0.3438 0.0312 +vt 0.3438 0.0625 +vt 0.3125 0.0625 +vt 0.3125 0.0312 +vt 0.1562 0.0312 +vt 0.1562 0.0625 +vt 0.3750 0.0312 +vt 0.3750 0.0625 +vt 0.1875 0.0312 +vt 0.1875 0.0625 +vt 0.4062 0.0312 +vt 0.4062 0.0625 +vt 0.2188 0.0312 +vt 0.2188 0.0625 +vt 0.4375 0.0312 +vt 0.4375 0.0625 +vt 0.2500 0.0312 +vt 0.2500 0.0625 +vt 0.4688 0.0312 +vt 0.4688 0.0625 +vt 0.2812 0.0312 +vt 0.2812 0.0625 +vt 0.5000 0.0312 +vt 0.5000 0.0625 +vt 0.5938 0.0312 +vt 0.5938 0.0625 +vt 0.5625 0.0625 +vt 0.5625 0.0312 +vt 0.5312 0.0312 +vt 0.5312 0.0625 +vt 0.6250 0.0312 +vt 0.6250 0.0625 +vt 0.8438 0.0312 +vt 0.8438 0.0625 +vt 0.8125 0.0625 +vt 0.8125 0.0312 +vt 0.6562 0.0312 +vt 0.6562 0.0625 +vt 0.8750 0.0312 +vt 0.8750 0.0625 +vt 0.9688 0.0312 +vt 0.9688 0.0625 +vt 0.9375 0.0625 +vt 0.9375 0.0312 +vt 0.6875 0.0312 +vt 0.6875 0.0625 +vt 0.9062 0.0312 +vt 0.9062 0.0625 +vt 1.0000 0.0312 +vt 1.0000 0.0625 +vt 0.7188 0.0312 +vt 0.7188 0.0625 +vt 0.0312 0.0312 +vt 0.0312 0.0625 +vt 0.0000 0.0625 +vt 0.0000 0.0312 +vt 0.7500 0.0312 +vt 0.7500 0.0625 +vt 0.0625 0.0312 +vt 0.0625 0.0625 +vt 0.7812 0.0312 +vt 0.7812 0.0625 +vt 0.8125 0.9688 +vt 0.8125 1.0000 +vt 0.7812 1.0000 +vt 0.7812 0.9688 +vt 0.0938 0.9688 +vt 0.0938 1.0000 +vt 0.0625 1.0000 +vt 0.0625 0.9688 +vt 0.7500 1.0000 +vt 0.7500 0.9688 +vt 0.0312 1.0000 +vt 0.0312 0.9688 +vt 0.7188 1.0000 +vt 0.7188 0.9688 +vt 0.0000 1.0000 +vt 0.0000 0.9688 +vt 0.9375 0.9688 +vt 0.9375 1.0000 +vt 0.9062 1.0000 +vt 0.9062 0.9688 +vt 0.6875 1.0000 +vt 0.6875 0.9688 +vt 1.0000 0.9688 +vt 1.0000 1.0000 +vt 0.9688 1.0000 +vt 0.9688 0.9688 +vt 0.8750 1.0000 +vt 0.8750 0.9688 +vt 0.6562 1.0000 +vt 0.6562 0.9688 +vt 0.8438 1.0000 +vt 0.8438 0.9688 +vt 0.6250 1.0000 +vt 0.6250 0.9688 +vt 0.5625 0.9688 +vt 0.5625 1.0000 +vt 0.5312 1.0000 +vt 0.5312 0.9688 +vt 0.5938 1.0000 +vt 0.5938 0.9688 +vt 0.5000 1.0000 +vt 0.5000 0.9688 +vt 0.3125 0.9688 +vt 0.3125 1.0000 +vt 0.2812 1.0000 +vt 0.2812 0.9688 +vt 0.4688 1.0000 +vt 0.4688 0.9688 +vt 0.2500 1.0000 +vt 0.2500 0.9688 +vt 0.4375 1.0000 +vt 0.4375 0.9688 +vt 0.2188 1.0000 +vt 0.2188 0.9688 +vt 0.4062 1.0000 +vt 0.4062 0.9688 +vt 0.1875 1.0000 +vt 0.1875 0.9688 +vt 0.3750 1.0000 +vt 0.3750 0.9688 +vt 0.1562 1.0000 +vt 0.1562 0.9688 +vt 0.3438 1.0000 +vt 0.3438 0.9688 +vt 0.1250 1.0000 +vt 0.1250 0.9688 +vt 0.1250 0.0938 +vt 0.1250 0.1250 +vt 0.0938 0.1250 +vt 0.0938 0.0938 +vt 0.3438 0.0938 +vt 0.3438 0.1250 +vt 0.3125 0.1250 +vt 0.3125 0.0938 +vt 0.1562 0.0938 +vt 0.1562 0.1250 +vt 0.3750 0.0938 +vt 0.3750 0.1250 +vt 0.1875 0.0938 +vt 0.1875 0.1250 +vt 0.4062 0.0938 +vt 0.4062 0.1250 +vt 0.2188 0.0938 +vt 0.2188 0.1250 +vt 0.4375 0.0938 +vt 0.4375 0.1250 +vt 0.2500 0.0938 +vt 0.2500 0.1250 +vt 0.4688 0.0938 +vt 0.4688 0.1250 +vt 0.2812 0.0938 +vt 0.2812 0.1250 +vt 0.5000 0.0938 +vt 0.5000 0.1250 +vt 0.5938 0.0938 +vt 0.5938 0.1250 +vt 0.5625 0.1250 +vt 0.5625 0.0938 +vt 0.5312 0.0938 +vt 0.5312 0.1250 +vt 0.6250 0.0938 +vt 0.6250 0.1250 +vt 0.8438 0.0938 +vt 0.8438 0.1250 +vt 0.8125 0.1250 +vt 0.8125 0.0938 +vt 0.6562 0.0938 +vt 0.6562 0.1250 +vt 0.8750 0.0938 +vt 0.8750 0.1250 +vt 0.9688 0.0938 +vt 0.9688 0.1250 +vt 0.9375 0.1250 +vt 0.9375 0.0938 +vt 0.6875 0.0938 +vt 0.6875 0.1250 +vt 0.9062 0.0938 +vt 0.9062 0.1250 +vt 1.0000 0.0938 +vt 1.0000 0.1250 +vt 0.7188 0.0938 +vt 0.7188 0.1250 +vt 0.0312 0.0938 +vt 0.0312 0.1250 +vt 0.0000 0.1250 +vt 0.0000 0.0938 +vt 0.7500 0.0938 +vt 0.7500 0.1250 +vt 0.0625 0.0938 +vt 0.0625 0.1250 +vt 0.7812 0.0938 +vt 0.7812 0.1250 +vt 0.1250 0.9375 +vt 0.0938 0.9375 +vt 0.3438 0.9375 +vt 0.3125 0.9375 +vt 0.1562 0.9375 +vt 0.3750 0.9375 +vt 0.1875 0.9375 +vt 0.4062 0.9375 +vt 0.2188 0.9375 +vt 0.4375 0.9375 +vt 0.2500 0.9375 +vt 0.4688 0.9375 +vt 0.2812 0.9375 +vt 0.5000 0.9375 +vt 0.5938 0.9375 +vt 0.5625 0.9375 +vt 0.5312 0.9375 +vt 0.6250 0.9375 +vt 0.8438 0.9375 +vt 0.8125 0.9375 +vt 0.6562 0.9375 +vt 0.8750 0.9375 +vt 0.9688 0.9375 +vt 0.9375 0.9375 +vt 0.6875 0.9375 +vt 0.9062 0.9375 +vt 1.0000 0.9375 +vt 0.7188 0.9375 +vt 0.0312 0.9375 +vt 0.0000 0.9375 +vt 0.7500 0.9375 +vt 0.0625 0.9375 +vt 0.7812 0.9375 +vt 0.8125 0.0000 +vt 0.7812 0.0000 +vt 0.0938 0.0000 +vt 0.0625 0.0000 +vt 0.7500 0.0000 +vt 0.0312 0.0000 +vt 0.7188 0.0000 +vt 0.0000 0.0000 +vt 0.9375 0.0000 +vt 0.9062 0.0000 +vt 0.6875 0.0000 +vt 1.0000 0.0000 +vt 0.9688 0.0000 +vt 0.8750 0.0000 +vt 0.6562 0.0000 +vt 0.8438 0.0000 +vt 0.6250 0.0000 +vt 0.5625 0.0000 +vt 0.5312 0.0000 +vt 0.5938 0.0000 +vt 0.5000 0.0000 +vt 0.3125 0.0000 +vt 0.2812 0.0000 +vt 0.4688 0.0000 +vt 0.2500 0.0000 +vt 0.4375 0.0000 +vt 0.2188 0.0000 +vt 0.4062 0.0000 +vt 0.1875 0.0000 +vt 0.3750 0.0000 +vt 0.1562 0.0000 +vt 0.3438 0.0000 +vt 0.1250 0.0000 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.5936 0.6717 +vt 0.6238 0.6777 +vt 0.6523 0.6895 +vt 0.6779 0.7066 +vt 0.6996 0.7283 +vt 0.7167 0.7539 +vt 0.7285 0.7824 +vt 0.7345 0.8126 +vt 0.7345 0.8434 +vt 0.7285 0.8735 +vt 0.7167 0.9020 +vt 0.6996 0.9276 +vt 0.6779 0.9493 +vt 0.6523 0.9664 +vt 0.6238 0.9782 +vt 0.5936 0.9842 +vt 0.5629 0.9842 +vt 0.5327 0.9782 +vt 0.5042 0.9664 +vt 0.4786 0.9493 +vt 0.4569 0.9276 +vt 0.4398 0.9020 +vt 0.4280 0.8735 +vt 0.4220 0.8434 +vt 0.4220 0.8126 +vt 0.4280 0.7824 +vt 0.4398 0.7539 +vt 0.4569 0.7283 +vt 0.4786 0.7066 +vt 0.5042 0.6895 +vt 0.5327 0.6777 +vt 0.5629 0.6717 +vt 0.1605 0.6895 +vt 0.1349 0.7066 +vt 0.1131 0.7283 +vt 0.0960 0.7539 +vt 0.0842 0.7824 +vt 0.0782 0.8126 +vt 0.0782 0.8434 +vt 0.0842 0.8735 +vt 0.0960 0.9020 +vt 0.1131 0.9276 +vt 0.1349 0.9493 +vt 0.1605 0.9664 +vt 0.1889 0.9782 +vt 0.2191 0.9842 +vt 0.2499 0.9842 +vt 0.2801 0.9782 +vt 0.3085 0.9664 +vt 0.3341 0.9493 +vt 0.3559 0.9276 +vt 0.3730 0.9020 +vt 0.3848 0.8735 +vt 0.3908 0.8434 +vt 0.3908 0.8126 +vt 0.3848 0.7824 +vt 0.3730 0.7539 +vt 0.3559 0.7283 +vt 0.3341 0.7066 +vt 0.3085 0.6895 +vt 0.2801 0.6777 +vt 0.2499 0.6717 +vt 0.2191 0.6717 +vt 0.1889 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4569 0.9276 +vt 0.4786 0.9493 +vt 0.5042 0.9664 +vt 0.5327 0.9782 +vt 0.5629 0.9842 +vt 0.5936 0.9842 +vt 0.6238 0.9782 +vt 0.6523 0.9664 +vt 0.6779 0.9493 +vt 0.6996 0.9276 +vt 0.7167 0.9020 +vt 0.7285 0.8735 +vt 0.7345 0.8434 +vt 0.7345 0.8126 +vt 0.7285 0.7824 +vt 0.7167 0.7539 +vt 0.6996 0.7283 +vt 0.6779 0.7066 +vt 0.6523 0.6895 +vt 0.6238 0.6777 +vt 0.5936 0.6717 +vt 0.5629 0.6717 +vt 0.5327 0.6777 +vt 0.5042 0.6895 +vt 0.4786 0.7066 +vt 0.4569 0.7283 +vt 0.4398 0.7539 +vt 0.4280 0.7824 +vt 0.4220 0.8126 +vt 0.4220 0.8434 +vt 0.4280 0.8735 +vt 0.4398 0.9020 +vt 0.2801 0.6777 +vt 0.3085 0.6895 +vt 0.3341 0.7066 +vt 0.3559 0.7283 +vt 0.3730 0.7539 +vt 0.3848 0.7824 +vt 0.3908 0.8126 +vt 0.3908 0.8434 +vt 0.3848 0.8735 +vt 0.3730 0.9020 +vt 0.3559 0.9276 +vt 0.3341 0.9493 +vt 0.3085 0.9664 +vt 0.2801 0.9782 +vt 0.2499 0.9842 +vt 0.2191 0.9842 +vt 0.1889 0.9782 +vt 0.1605 0.9664 +vt 0.1349 0.9493 +vt 0.1131 0.9276 +vt 0.0960 0.9020 +vt 0.0842 0.8735 +vt 0.0782 0.8434 +vt 0.0782 0.8126 +vt 0.0842 0.7824 +vt 0.0960 0.7539 +vt 0.1131 0.7283 +vt 0.1349 0.7066 +vt 0.1605 0.6895 +vt 0.1889 0.6777 +vt 0.2191 0.6717 +vt 0.2499 0.6717 +vt 0.7799 0.2569 +vt 0.7643 0.2569 +vt 0.7487 0.2569 +vt 0.7488 0.0330 +vt 0.7796 0.0330 +vt 0.8111 0.2442 +vt 0.8104 0.0330 +vt 0.8423 0.2323 +vt 0.8412 0.0331 +vt 0.7487 0.2633 +vt 0.7175 0.2633 +vt 0.7180 0.0330 +vt 0.8735 0.2215 +vt 0.8721 0.0331 +vt 0.6863 0.2633 +vt 0.6872 0.0330 +vt 0.9028 0.0332 +vt 0.9046 0.2124 +vt 0.7488 0.0188 +vt 0.7180 0.0189 +vt 0.7796 0.0188 +vt 0.8105 0.0188 +vt 0.1560 0.2211 +vt 0.1247 0.2118 +vt 0.1297 0.0310 +vt 0.1609 0.0312 +vt 0.6873 0.0189 +vt 0.8414 0.0188 +vt 0.9358 0.2051 +vt 0.9335 0.0333 +vt 0.6566 0.0188 +vt 0.6565 0.0330 +vt 0.8723 0.0188 +vt 0.9669 0.2001 +vt 0.9639 0.0336 +vt 0.6240 0.2633 +vt 0.6257 0.0329 +vt 0.6551 0.2633 +vt 0.6258 0.0187 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 0.9033 0.0189 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.5950 0.0186 +vt 0.5949 0.0328 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.9343 0.0191 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.0309 0.1970 +vt -0.0002 0.1968 +vt 0.0044 0.0313 +vt 0.0356 0.0310 +vt 0.5305 0.2632 +vt 0.5332 0.0327 +vt 0.5640 0.0328 +vt 0.5617 0.2632 +vt 0.5642 0.0185 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.9653 0.0194 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.5333 0.0184 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 0.9963 0.0201 +vt 0.9937 0.0340 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.0935 0.2046 +vt 0.0622 0.1996 +vt 0.0671 0.0309 +vt 0.0985 0.0309 +vt 0.4993 0.2632 +vt 0.4682 0.2632 +vt 0.4714 0.0325 +vt 0.5023 0.0326 +vt 0.5024 0.0183 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.0349 0.0164 +vt 0.0026 0.0168 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.4058 0.2631 +vt 0.3746 0.2631 +vt 0.3786 0.0321 +vt 0.4095 0.0323 +vt 0.4716 0.0182 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.0670 0.0163 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4407 0.0181 +vt 0.4405 0.0324 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.0987 0.0163 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.4098 0.0180 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.1301 0.0166 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.2497 0.2566 +vt 0.2545 0.0315 +vt 0.2856 0.0317 +vt 0.2809 0.2566 +vt 0.2653 0.2566 +vt 0.3788 0.0179 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.1612 0.0167 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.1921 0.0312 +vt 0.1873 0.2319 +vt 0.3122 0.2631 +vt 0.2809 0.2630 +vt 0.3166 0.0319 +vt 0.3479 0.0177 +vt 0.3476 0.0320 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.1924 0.0168 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3169 0.0175 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.2237 0.0170 +vt 0.2233 0.0314 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2859 0.0174 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.2548 0.0172 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.7643 0.2633 +vt 0.5928 0.2633 +vt 0.4370 0.2632 +vt 0.2185 0.2439 +vt 0.5149 0.2632 +vt 0.9981 0.1975 +vt 0.3434 0.2631 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.2653 0.2630 +vt 0.7799 0.2633 +vt 0.2497 0.2630 +vt 0.4688 0.6406 +vt 0.4688 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.6406 +vt 0.4375 0.6406 +vt 0.4375 0.5625 +vt 0.4062 0.6406 +vt 0.4062 0.5625 +vt 0.3750 0.6406 +vt 0.3750 0.5625 +vt 0.3438 0.6406 +vt 0.3438 0.5625 +vt 0.3125 0.6406 +vt 0.3125 0.5625 +vt 0.2812 0.6406 +vt 0.2812 0.5625 +vt 0.2500 0.6406 +vt 0.2500 0.5625 +vt 0.2188 0.6406 +vt 0.2188 0.5625 +vt 0.1875 0.6406 +vt 0.1875 0.5625 +vt 0.1562 0.6406 +vt 0.1562 0.5625 +vt 0.1250 0.6406 +vt 0.1250 0.5625 +vt 0.0938 0.6406 +vt 0.0938 0.5625 +vt 0.0625 0.6406 +vt 0.0625 0.5625 +vt 0.0312 0.6406 +vt 0.0312 0.5625 +vt 0.0000 0.6406 +vt 0.0000 0.5625 +vt 0.9688 0.6406 +vt 0.9688 0.5625 +vt 1.0000 0.5625 +vt 1.0000 0.6406 +vt 0.9375 0.6406 +vt 0.9375 0.5625 +vt 0.9062 0.6406 +vt 0.9062 0.5625 +vt 0.8750 0.6406 +vt 0.8750 0.5625 +vt 0.8125 0.6406 +vt 0.8125 0.5625 +vt 0.8438 0.5625 +vt 0.8438 0.6406 +vt 0.7812 0.6406 +vt 0.7812 0.5625 +vt 0.7500 0.6406 +vt 0.7500 0.5625 +vt 0.7188 0.6406 +vt 0.7188 0.5625 +vt 0.6875 0.6406 +vt 0.6875 0.5625 +vt 0.6250 0.6406 +vt 0.6250 0.5625 +vt 0.6562 0.5625 +vt 0.6562 0.6406 +vt 0.5938 0.6406 +vt 0.5938 0.5625 +vt 0.5625 0.6406 +vt 0.5625 0.5625 +vt 0.4358 0.5179 +vt 0.4358 0.5107 +vt 0.4668 0.5107 +vt 0.4668 0.5179 +vt 0.4977 0.5179 +vt 0.4977 0.5107 +vt 0.5287 0.5179 +vt 0.5287 0.5107 +vt 0.5596 0.5178 +vt 0.5596 0.5107 +vt 0.5904 0.5179 +vt 0.5905 0.5107 +vt 0.6214 0.5179 +vt 0.6215 0.5107 +vt 0.6524 0.5107 +vt 0.6523 0.5179 +vt 0.6832 0.5180 +vt 0.6834 0.5108 +vt 0.7142 0.5180 +vt 0.7144 0.5108 +vt 0.7452 0.5181 +vt 0.7454 0.5108 +vt 0.7765 0.5109 +vt 0.7763 0.5181 +vt 0.8076 0.5109 +vt 0.8074 0.5181 +vt 0.8384 0.5181 +vt 0.8386 0.5109 +vt 0.8696 0.5109 +vt 0.8695 0.5181 +vt 0.9006 0.5109 +vt 0.9007 0.5181 +vt 0.9320 0.5181 +vt 0.9316 0.5109 +vt 0.9625 0.5108 +vt 0.9635 0.5180 +vt 0.9952 0.5178 +vt 0.9930 0.5106 +vt 0.0001 0.5177 +vt 0.0023 0.5106 +vt 0.0329 0.5107 +vt 0.0319 0.5180 +vt 0.0635 0.5181 +vt 0.0639 0.5108 +vt 0.0952 0.5109 +vt 0.0951 0.5181 +vt 0.1263 0.5108 +vt 0.1263 0.5181 +vt 0.1572 0.5108 +vt 0.1573 0.5180 +vt 0.1881 0.5108 +vt 0.1882 0.5180 +vt 0.2191 0.5108 +vt 0.2192 0.5179 +vt 0.2500 0.5107 +vt 0.2501 0.5179 +vt 0.3119 0.5179 +vt 0.2809 0.5179 +vt 0.2809 0.5107 +vt 0.3118 0.5107 +vt 0.3738 0.5179 +vt 0.3429 0.5179 +vt 0.3428 0.5107 +vt 0.3738 0.5107 +vt 0.4048 0.5179 +vt 0.4048 0.5107 +vt 0.5312 0.5625 +vt 0.5312 0.6406 +vt 0.8100 0.4042 +vt 0.8412 0.4103 +vt 0.8724 0.4157 +vt 0.5294 0.3946 +vt 0.4982 0.3945 +vt 0.5138 0.3945 +vt 0.2798 0.3977 +vt 0.2486 0.3977 +vt 0.2642 0.3977 +vt 0.2642 0.3945 +vt 0.2798 0.3945 +vt 0.7788 0.3979 +vt 0.6541 0.3946 +vt 0.6852 0.3946 +vt 0.1860 0.4101 +vt 0.2173 0.4041 +vt 0.3111 0.3945 +vt 0.3423 0.3945 +vt 0.4047 0.3945 +vt 0.3735 0.3945 +vt 0.5606 0.3946 +vt 0.9036 0.4203 +vt 0.1547 0.4155 +vt 0.4359 0.3945 +vt 0.6229 0.3946 +vt 0.7164 0.3946 +vt 0.7476 0.3946 +vt 0.7476 0.3979 +vt 0.7632 0.3979 +vt 0.9348 0.4240 +vt 0.9660 0.4265 +vt 0.9973 0.4278 +vt -0.0018 0.4276 +vt 0.0296 0.4276 +vt 0.0609 0.4263 +vt 0.0922 0.4238 +vt 0.1234 0.4201 +vt 0.4671 0.3945 +vt 0.5917 0.3946 +vt 0.7632 0.3946 +vt 0.3423 0.3945 +vt 0.3735 0.3945 +vt 0.6541 0.3946 +vt 0.6852 0.3946 +vt 0.7476 0.3946 +vt 0.4671 0.3945 +vt 0.4982 0.3945 +vt 0.7164 0.3946 +vt 0.2798 0.3945 +vt 0.4359 0.3945 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.5606 0.3946 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vt 0.6852 0.3946 +vt 0.7164 0.3946 +vt 0.4359 0.3945 +vt 0.4671 0.3945 +vt 0.7476 0.3946 +vt 0.4047 0.3945 +vt 0.5138 0.3945 +vt 0.5294 0.3946 +vt 0.6229 0.3946 +vt 0.6541 0.3946 +vt 0.3735 0.3945 +vt 0.4982 0.3945 +vt 0.5606 0.3946 +vt 0.2798 0.3945 +vt 0.3111 0.3945 +vt 0.5917 0.3946 +vt 0.3423 0.3945 +vn 0.0000 -1.0000 -0.0000 +vn -0.6942 -0.0111 0.7197 +vn 0.8744 0.0380 0.4838 +vn -0.9994 -0.0354 0.0015 +vn 0.4106 0.0134 0.9117 +vn -0.9725 -0.0221 -0.2318 +vn -0.0529 0.0693 0.9962 +vn -0.2295 -0.0826 0.9698 +vn -0.9808 -0.0000 -0.1951 +vn -0.2791 0.0931 0.9557 +vn -0.5161 -0.1864 0.8360 +vn -0.9843 -0.1579 -0.0783 +vn -0.1951 -0.0000 0.9808 +vn -0.8266 -0.1002 0.5537 +vn -0.7534 -0.2918 -0.5892 +vn -0.5861 -0.1219 -0.8010 +vn -0.8315 -0.0000 0.5556 +vn -0.5111 -0.1245 -0.8504 +vn -0.4668 -0.1788 -0.8661 +vn 0.9491 -0.1603 -0.2712 +vn -0.5556 0.0000 -0.8315 +vn 0.1245 0.0274 -0.9918 +vn 0.9939 -0.0505 -0.0984 +vn 0.3372 0.0762 -0.9383 +vn 1.0000 0.0000 0.0000 +vn 0.6143 -0.0053 -0.7890 +vn 0.9958 -0.0878 0.0256 +vn 0.5556 0.0000 -0.8315 +vn 0.8422 -0.0878 0.5319 +vn 0.3496 -0.0186 -0.9367 +vn 0.8315 0.0000 0.5556 +vn 0.9313 -0.1314 -0.3398 +vn 0.7071 0.0000 0.7071 +vn 0.8846 0.1645 0.4364 +vn 0.8315 0.0000 -0.5556 +vn 0.7071 0.0000 -0.7071 +vn 0.7188 -0.0226 0.6948 +vn 0.9837 -0.0226 -0.1784 +vn 0.3827 0.0000 -0.9239 +vn 0.1951 0.0000 -0.9808 +vn 0.9657 -0.0681 0.2507 +vn -0.0000 -0.0000 -1.0000 +vn -0.8703 0.0375 -0.4912 +vn 0.6636 -0.0681 -0.7449 +vn 0.0983 0.1496 -0.9838 +vn -0.7071 0.0000 -0.7071 +vn -0.1894 0.2015 -0.9610 +vn -0.8315 0.0000 -0.5556 +vn -0.9291 0.0476 0.3667 +vn 0.0032 0.0087 1.0000 +vn -0.8761 0.0556 -0.4789 +vn -0.5187 0.0032 0.8550 +vn 0.0000 0.0000 1.0000 +vn -0.8139 0.0567 -0.5782 +vn -0.2051 -0.0398 0.9779 +vn 0.1951 0.0000 0.9808 +vn -0.8741 0.0027 0.4858 +vn 0.1691 0.1134 0.9791 +vn -0.9808 -0.0000 0.1951 +vn 0.4387 0.2866 0.8517 +vn -0.9239 0.0000 0.3827 +vn 0.5556 0.0000 0.8315 +vn 0.6747 0.1368 0.7253 +vn -1.0000 0.0000 0.0000 +vn 0.2169 0.2761 0.9363 +vn -0.0133 -0.0436 0.9990 +vn -0.3717 0.1188 0.9207 +vn -0.8232 -0.0436 0.5661 +vn -0.9933 0.1160 0.0021 +vn -0.7071 0.0000 0.7071 +vn -0.5500 0.1160 -0.8270 +vn -0.3827 0.0000 -0.9239 +vn -0.1951 -0.0000 -0.9808 +vn 0.7512 -0.1581 -0.6409 +vn 0.9341 -0.0998 -0.3428 +vn 0.9493 -0.0075 0.3142 +vn 0.0782 -0.1580 -0.9843 +vn 0.9382 -0.0768 0.3374 +vn 0.6897 -0.2260 -0.6879 +vn 0.9239 0.0000 0.3827 +vn 0.7871 -0.0637 -0.6136 +vn 0.8579 0.0259 0.5131 +vn 0.6706 0.0259 0.7413 +vn 0.9505 -0.1589 -0.2669 +vn 0.4888 -0.1368 -0.8616 +vn 0.6884 0.1441 -0.7109 +vn 0.9808 0.0000 0.1951 +vn 0.4311 0.0918 -0.8976 +vn 0.9655 -0.0677 0.2515 +vn 0.1459 -0.0471 -0.9882 +vn 0.9760 0.0585 -0.2099 +vn -0.0543 -0.1117 -0.9923 +vn -0.6172 0.0397 -0.7858 +vn 0.8002 0.1225 -0.5870 +vn -0.3670 -0.0931 -0.9255 +vn -0.7951 -0.0708 -0.6023 +vn -0.8509 -0.0463 0.5232 +vn -0.1791 0.1084 -0.9779 +vn -0.5188 0.0356 0.8542 +vn 0.1841 -0.0696 0.9804 +vn -0.9239 0.0000 -0.3827 +vn -0.5032 0.1987 0.8410 +vn -0.8368 0.1151 -0.5353 +vn -0.5837 0.0133 0.8119 +vn -0.1709 0.0056 0.9853 +vn -0.9915 -0.0127 0.1296 +vn 0.5669 -0.0834 0.8196 +vn -0.9463 -0.2968 0.1280 +vn 0.6845 -0.0867 0.7238 +vn -0.9486 -0.1366 0.2853 +vn -0.9813 -0.1247 0.1465 +vn 0.5554 -0.1024 0.8253 +vn -0.8637 -0.0157 0.5038 +vn -0.0032 -0.1024 0.9947 +vn -0.2113 0.0207 0.9772 +vn -0.7488 -0.0157 -0.6626 +vn -0.5750 0.0179 0.8179 +vn 0.0232 -0.0194 0.9995 +vn -0.8390 -0.1063 0.5337 +vn 0.0085 0.0017 -1.0000 +vn -0.7605 -0.2103 0.6144 +vn 0.6247 0.0342 -0.7801 +vn -0.8362 0.0017 -0.5485 +vn -0.1052 -0.0546 -0.9929 +vn 0.9674 0.0039 0.2534 +vn 0.1842 -0.1156 -0.9761 +vn 0.9974 -0.0331 0.0638 +vn 0.2685 -0.1794 -0.9464 +vn 0.9933 0.1129 -0.0243 +vn 0.6884 -0.1441 -0.7109 +vn 0.8124 0.1129 0.5721 +vn 0.7414 -0.0260 -0.6705 +vn 0.5770 0.1953 0.7931 +vn 0.8084 0.2696 0.5233 +vn 0.9841 0.1488 0.0974 +vn 0.9049 -0.0745 0.4191 +vn 0.3673 0.0932 -0.9254 +vn 0.8057 -0.0745 -0.5876 +vn 0.0882 0.2352 -0.9679 +vn 0.9239 -0.0000 -0.3827 +vn -0.4436 0.1361 -0.8858 +vn -0.4246 -0.0196 -0.9052 +vn -0.8122 0.0864 0.5769 +vn -0.2860 0.1698 0.9431 +vn -0.9975 0.0375 0.0596 +vn -0.7379 0.1489 0.6583 +vn -0.2475 0.0203 0.9687 +vn -0.9276 0.1914 -0.3207 +vn -0.0884 0.1192 0.9889 +vn 0.2361 -0.2178 0.9470 +vn -0.9610 0.1273 0.2453 +vn 0.5152 0.0226 0.8568 +vn 0.6283 0.2212 0.7459 +vn 0.4387 -0.2866 0.8517 +vn 0.2124 -0.0914 0.9729 +vn -0.9510 -0.1425 0.2745 +vn 0.2281 0.0655 0.9714 +vn -0.1173 -0.0087 0.9931 +vn -0.9113 -0.2015 -0.3590 +vn -0.0798 0.0414 0.9960 +vn -0.6489 -0.0939 0.7551 +vn -0.9166 -0.0096 -0.3997 +vn -0.0859 -0.0570 0.9947 +vn -0.8598 -0.1348 0.4926 +vn -0.7779 0.0462 -0.6267 +vn -0.3689 -0.3076 -0.8771 +vn 0.0983 -0.1496 -0.9838 +vn 0.6611 0.0700 -0.7471 +vn -0.7624 -0.1473 -0.6302 +vn 0.9808 0.1649 0.1045 +vn 0.9852 0.1693 0.0254 +vn 0.0782 0.1580 -0.9843 +vn 0.9857 -0.0144 0.1678 +vn 0.6897 0.2260 -0.6879 +vn 0.8392 -0.0904 0.5362 +vn 0.7871 0.0637 -0.6136 +vn 0.8846 -0.1645 0.4364 +vn 0.9932 0.0516 -0.1040 +vn 0.2958 0.0516 -0.9538 +vn 0.6358 0.0206 -0.7716 +vn 0.9758 0.1008 0.1942 +vn 0.3062 -0.0625 -0.9499 +vn 0.9192 0.1008 -0.3808 +vn -0.0168 -0.1106 -0.9937 +vn -0.4356 0.0708 -0.8974 +vn -0.5485 -0.0222 -0.8359 +vn -0.7951 0.0708 -0.6023 +vn -0.8669 0.2518 0.4301 +vn -0.4593 0.1526 0.8751 +vn 0.0729 0.1371 0.9879 +vn -0.5556 0.0000 0.8315 +vn -0.2326 -0.1207 0.9650 +vn -0.9618 0.0404 -0.2707 +vn -0.6094 0.1371 0.7809 +vn 0.0063 -0.1580 0.9874 +vn -0.9568 0.1212 -0.2642 +vn 0.3503 -0.1060 0.9306 +vn -0.9889 0.1450 0.0311 +vn 0.8530 -0.0637 0.5181 +vn -0.7442 0.1486 0.6512 +vn 0.0000 1.0000 0.0000 +vn 0.9994 -0.0247 0.0247 +vn 0.9952 0.0980 0.0000 +vn 0.9893 0.0974 -0.1087 +vn 0.9893 -0.0974 -0.1087 +vn 0.9844 -0.1243 0.1243 +vn 0.9513 -0.2886 -0.1087 +vn 0.9472 -0.2267 0.2267 +vn 0.8767 -0.4686 -0.1087 +vn 0.9948 0.1010 -0.0051 +vn 0.9560 0.2930 -0.0145 +vn 0.9513 0.2886 -0.1087 +vn 0.8819 -0.3333 0.3333 +vn 0.7684 -0.6306 -0.1087 +vn 0.8804 0.4736 -0.0234 +vn 0.8767 0.4686 -0.1087 +vn 0.6306 -0.7684 -0.1087 +vn 0.7793 -0.4431 0.4431 +vn 0.9720 0.0957 -0.2147 +vn 0.9346 0.2835 -0.2147 +vn 0.9720 -0.0957 -0.2147 +vn 0.9346 -0.2835 -0.2147 +vn -0.8819 -0.3333 0.3333 +vn -0.7793 -0.4431 0.4431 +vn -0.6306 -0.7684 -0.1087 +vn -0.7684 -0.6306 -0.1087 +vn 0.8614 0.4604 -0.2147 +vn 0.8614 -0.4604 -0.2147 +vn 0.6267 -0.5510 0.5510 +vn 0.4686 -0.8767 -0.1087 +vn 0.7550 0.6196 -0.2147 +vn 0.7684 0.6306 -0.1087 +vn 0.7550 -0.6196 -0.2147 +vn 0.4139 -0.6437 0.6437 +vn 0.2886 -0.9513 -0.1087 +vn 0.6324 0.7736 -0.0380 +vn 0.6306 0.7684 -0.1087 +vn 0.7711 0.6359 -0.0313 +vn 0.6196 0.7550 -0.2147 +vn 0.4617 -0.5626 -0.6857 +vn 0.4617 -0.5626 0.6857 +vn 0.3431 -0.6419 0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.0713 -0.7244 -0.6857 +vn 0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn 0.6196 -0.7550 -0.2147 +vn 0.5626 -0.4617 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.4604 0.8614 -0.2147 +vn 0.4686 0.8767 -0.1087 +vn -0.2113 -0.6965 0.6857 +vn -0.2113 -0.6965 -0.6857 +vn 0.4604 -0.8614 -0.2147 +vn 0.6419 -0.3431 -0.6857 +vn 0.6419 -0.3431 0.6857 +vn -0.1458 -0.6995 0.6995 +vn 0.1458 -0.6995 0.6995 +vn 0.0974 -0.9893 -0.1087 +vn -0.0974 -0.9893 -0.1087 +vn 0.0976 0.9940 -0.0487 +vn 0.0974 0.9893 -0.1087 +vn 0.2886 0.9513 -0.1087 +vn 0.2891 0.9561 -0.0468 +vn 0.2835 0.9346 -0.2147 +vn 0.6965 -0.2113 -0.6857 +vn 0.6965 -0.2113 0.6857 +vn 0.2835 -0.9346 -0.2147 +vn 0.7244 0.0713 -0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.0957 0.9720 -0.2147 +vn -0.3431 -0.6419 0.6857 +vn -0.3431 -0.6419 -0.6857 +vn 0.0957 -0.9720 -0.2147 +vn 0.6965 0.2113 -0.6857 +vn 0.6965 0.2113 0.6857 +vn -0.6267 -0.5510 0.5510 +vn -0.4139 -0.6437 0.6437 +vn -0.2886 -0.9513 -0.1087 +vn -0.4686 -0.8767 -0.1087 +vn -0.0976 0.9940 -0.0487 +vn -0.2891 0.9561 -0.0468 +vn -0.2886 0.9513 -0.1087 +vn -0.0974 0.9893 -0.1087 +vn -0.0957 0.9720 -0.2147 +vn -0.4617 -0.5626 0.6857 +vn -0.4617 -0.5626 -0.6857 +vn -0.0957 -0.9720 -0.2147 +vn 0.6419 0.3431 -0.6857 +vn 0.6419 0.3431 0.6857 +vn -0.6324 0.7736 -0.0380 +vn -0.7711 0.6359 -0.0313 +vn -0.7684 0.6306 -0.1087 +vn -0.6306 0.7684 -0.1087 +vn -0.2835 0.9346 -0.2147 +vn -0.5626 -0.4617 0.6857 +vn -0.5626 -0.4617 -0.6857 +vn -0.2835 -0.9346 -0.2147 +vn 0.5626 0.4617 -0.6857 +vn 0.5626 0.4617 0.6857 +vn -0.4604 0.8614 -0.2147 +vn -0.4686 0.8767 -0.1087 +vn -0.6419 -0.3431 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.4604 -0.8614 -0.2147 +vn 0.4617 0.5626 -0.6857 +vn 0.4617 0.5626 0.6857 +vn -0.6196 0.7550 -0.2147 +vn -0.6965 -0.2113 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.6196 -0.7550 -0.2147 +vn -0.9994 -0.0247 0.0247 +vn -0.9893 -0.0974 -0.1087 +vn -0.9893 0.0974 -0.1087 +vn -0.9952 0.0980 0.0000 +vn -0.7550 0.6196 -0.2147 +vn -0.7244 0.0713 0.6857 +vn -0.7244 0.0713 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn -0.7550 -0.6196 -0.2147 +vn 0.3431 0.6419 -0.6857 +vn 0.3431 0.6419 0.6857 +vn -0.8767 -0.4686 -0.1087 +vn -0.9472 -0.2267 0.2267 +vn -0.9560 0.2930 -0.0145 +vn -0.9948 0.1010 -0.0051 +vn -0.9513 0.2886 -0.1087 +vn -0.8614 0.4604 -0.2147 +vn -0.8767 0.4686 -0.1087 +vn -0.6965 0.2113 0.6857 +vn -0.6965 0.2113 -0.6857 +vn -0.8614 -0.4604 -0.2147 +vn 0.2113 0.6965 -0.6857 +vn 0.2113 0.6965 0.6857 +vn -0.9346 0.2835 -0.2147 +vn -0.6419 0.3431 0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.9346 -0.2835 -0.2147 +vn -0.9513 -0.2886 -0.1087 +vn 0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn -0.9720 0.0957 -0.2147 +vn -0.5626 0.4617 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.9720 -0.0957 -0.2147 +vn -0.0713 0.7244 -0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.2113 0.6965 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.4617 0.5626 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.7321 -0.3032 -0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.7933 0.6088 0.0000 +vn -0.6287 0.4824 -0.6100 +vn -0.1034 -0.7856 -0.6100 +vn -0.1305 -0.9914 0.0000 +vn 0.1305 0.9914 0.0000 +vn 0.1034 0.7856 -0.6100 +vn 0.9239 0.3827 0.0000 +vn 0.7321 0.3032 -0.6100 +vn 0.7933 -0.6088 0.0000 +vn 0.6287 -0.4824 -0.6100 +vn -0.3032 -0.7321 -0.6100 +vn -0.3827 -0.9239 0.0000 +vn -0.9914 -0.1305 0.0000 +vn -0.7856 -0.1034 -0.6100 +vn 0.4824 -0.6287 -0.6100 +vn 0.6088 -0.7933 0.0000 +vn -0.6088 0.7933 0.0000 +vn -0.4824 0.6287 -0.6100 +vn 0.3827 0.9239 0.0000 +vn 0.3032 0.7321 -0.6100 +vn 0.9914 0.1305 0.0000 +vn 0.7856 0.1034 -0.6100 +vn 0.3032 -0.7321 -0.6100 +vn 0.3827 -0.9239 0.0000 +vn -0.6088 -0.7933 0.0000 +vn -0.4824 -0.6287 -0.6100 +vn 0.7856 -0.1034 -0.6100 +vn 0.9914 -0.1305 0.0000 +vn -0.9914 0.1305 0.0000 +vn -0.7856 0.1034 -0.6100 +vn -0.3827 0.9239 0.0000 +vn -0.3032 0.7321 -0.6100 +vn 0.6088 0.7933 0.0000 +vn 0.4824 0.6287 -0.6100 +vn 0.7321 -0.3032 -0.6100 +vn 0.9239 -0.3827 0.0000 +vn 0.1305 -0.9914 0.0000 +vn 0.1034 -0.7856 -0.6100 +vn 0.6287 0.4824 -0.6100 +vn 0.7933 0.6088 0.0000 +vn -0.7933 -0.6088 0.0000 +vn -0.6287 -0.4824 -0.6100 +vn -0.9239 0.3827 0.0000 +vn -0.7321 0.3032 -0.6100 +vn -0.1305 0.9914 0.0000 +vn -0.1034 0.7856 -0.6100 +vn 0.4697 0.8817 -0.0432 +vn -0.4697 0.8817 -0.0432 +vn -0.9844 -0.1243 0.1243 +vn 0.0000 0.9988 -0.0490 +vn -0.8804 0.4736 -0.0234 +vn -0.5603 -0.5603 -0.6100 +vn -0.7071 -0.7071 0.0000 +vn -0.9659 0.2588 0.0000 +vn -0.7654 0.2051 -0.6100 +vn 0.2051 -0.7654 -0.6100 +vn 0.2588 -0.9659 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 -0.6100 +vn 0.7071 0.7071 0.0000 +vn 0.5603 0.5603 -0.6100 +vn 0.9659 -0.2588 0.0000 +vn 0.7654 -0.2051 -0.6100 +vn 0.0000 -0.7924 -0.6100 +vn -0.8660 -0.5000 0.0000 +vn -0.6862 -0.3962 -0.6100 +vn 0.6862 -0.3962 -0.6100 +vn 0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 -0.6100 +vn 0.8660 0.5000 0.0000 +vn 0.6862 0.3962 -0.6100 +vn 0.5603 -0.5603 -0.6100 +vn 0.7071 -0.7071 0.0000 +vn -0.2588 -0.9659 0.0000 +vn -0.2051 -0.7654 -0.6100 +vn 0.7654 0.2051 -0.6100 +vn 0.9659 0.2588 0.0000 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 -0.6100 +vn -0.7071 0.7071 0.0000 +vn -0.5603 0.5603 -0.6100 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 -0.6100 +vn 0.7924 0.0000 -0.6100 +vn 0.5000 -0.8660 0.0000 +vn 0.3962 -0.6862 -0.6100 +vn 0.3962 0.6862 -0.6100 +vn 0.5000 0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 -0.6100 +vn -0.7924 0.0000 -0.6100 +vn -0.5000 0.8660 0.0000 +vn -0.3962 0.6862 -0.6100 +vn 0.6965 0.6857 -0.2113 +vn 0.6965 -0.6857 -0.2113 +vn 0.6419 -0.6857 -0.3431 +vn 0.6419 0.6857 -0.3431 +vn 0.7244 0.6857 -0.0713 +vn 0.7244 -0.6857 -0.0713 +vn 0.7244 0.6857 0.0713 +vn 0.7244 -0.6857 0.0713 +vn 0.6965 0.6857 0.2113 +vn 0.6965 -0.6857 0.2113 +vn 0.6419 0.6857 0.3431 +vn 0.6419 -0.6857 0.3431 +vn 0.5626 0.6857 0.4617 +vn 0.5626 -0.6857 0.4617 +vn 0.4617 0.6857 0.5626 +vn 0.4617 -0.6857 0.5626 +vn 0.3431 0.6857 0.6419 +vn 0.3431 -0.6857 0.6419 +vn 0.2113 0.6857 0.6965 +vn 0.2113 -0.6857 0.6965 +vn 0.0713 0.6857 0.7244 +vn 0.0713 -0.6857 0.7244 +vn -0.0713 0.6857 0.7244 +vn -0.0713 -0.6857 0.7244 +vn -0.2113 0.6857 0.6965 +vn -0.2113 -0.6857 0.6965 +vn -0.3431 0.6857 0.6419 +vn -0.3431 -0.6857 0.6419 +vn -0.4617 0.6857 0.5626 +vn -0.4617 -0.6857 0.5626 +vn -0.5626 0.6857 0.4617 +vn -0.5626 -0.6857 0.4617 +vn -0.6419 0.6857 0.3431 +vn -0.6419 -0.6857 0.3431 +vn -0.6965 0.6857 0.2113 +vn -0.6965 -0.6857 0.2113 +vn -0.7244 0.6857 0.0713 +vn -0.7244 -0.6857 0.0713 +vn -0.7244 0.6857 -0.0713 +vn -0.7244 -0.6857 -0.0713 +vn -0.6965 0.6857 -0.2113 +vn -0.6965 -0.6857 -0.2113 +vn -0.5626 0.6857 -0.4617 +vn -0.5626 -0.6857 -0.4617 +vn -0.6419 -0.6857 -0.3431 +vn -0.6419 0.6857 -0.3431 +vn -0.4617 0.6857 -0.5626 +vn -0.4617 -0.6857 -0.5626 +vn -0.3431 0.6857 -0.6419 +vn -0.3431 -0.6857 -0.6419 +vn -0.2113 0.6857 -0.6965 +vn -0.2113 -0.6857 -0.6965 +vn -0.0713 0.6857 -0.7244 +vn -0.0713 -0.6857 -0.7244 +vn 0.2113 0.6857 -0.6965 +vn 0.2113 -0.6857 -0.6965 +vn 0.0713 -0.6857 -0.7244 +vn 0.0713 0.6857 -0.7244 +vn 0.3431 0.6857 -0.6419 +vn 0.3431 -0.6857 -0.6419 +vn 0.4617 0.6857 -0.5626 +vn 0.4617 -0.6857 -0.5626 +vn -0.4604 0.2147 -0.8614 +vn -0.4686 0.1087 -0.8767 +vn -0.2886 0.1087 -0.9513 +vn -0.2835 0.2147 -0.9346 +vn -0.0957 0.2147 -0.9720 +vn -0.0974 0.1087 -0.9893 +vn 0.0957 0.2147 -0.9720 +vn 0.0974 0.1087 -0.9893 +vn 0.2835 0.2147 -0.9346 +vn 0.2886 0.1087 -0.9513 +vn 0.4604 0.2147 -0.8614 +vn 0.4686 0.1087 -0.8767 +vn 0.6196 0.2147 -0.7550 +vn 0.6306 0.1087 -0.7684 +vn 0.7684 0.1087 -0.6306 +vn 0.7550 0.2147 -0.6196 +vn 0.8614 0.2147 -0.4604 +vn 0.8767 0.1087 -0.4686 +vn 0.9346 0.2147 -0.2835 +vn 0.9513 0.1087 -0.2886 +vn 0.9720 0.2147 -0.0957 +vn 0.9893 0.1087 -0.0974 +vn 0.9893 0.1087 0.0974 +vn 0.9720 0.2147 0.0957 +vn 0.9513 0.1087 0.2886 +vn 0.9346 0.2147 0.2835 +vn 0.8614 0.2147 0.4604 +vn 0.8767 0.1087 0.4686 +vn 0.7684 0.1087 0.6306 +vn 0.7550 0.2147 0.6196 +vn 0.6306 0.1087 0.7684 +vn 0.6196 0.2147 0.7550 +vn 0.4604 0.2147 0.8614 +vn 0.4686 0.1087 0.8767 +vn 0.2886 0.1087 0.9513 +vn 0.2835 0.2147 0.9346 +vn 0.0957 0.2147 0.9720 +vn 0.0974 0.1087 0.9893 +vn -0.0974 0.1087 0.9893 +vn -0.0957 0.2147 0.9720 +vn -0.2835 0.2147 0.9346 +vn -0.2886 0.1087 0.9513 +vn -0.4686 0.1087 0.8767 +vn -0.4604 0.2147 0.8614 +vn -0.6306 0.1087 0.7684 +vn -0.6196 0.2147 0.7550 +vn -0.7684 0.1087 0.6306 +vn -0.7550 0.2147 0.6196 +vn -0.8767 0.1087 0.4686 +vn -0.8614 0.2147 0.4604 +vn -0.9513 0.1087 0.2886 +vn -0.9346 0.2147 0.2835 +vn -0.9893 0.1087 0.0974 +vn -0.9720 0.2147 0.0957 +vn -0.9346 0.2147 -0.2835 +vn -0.9720 0.2147 -0.0957 +vn -0.9893 0.1087 -0.0974 +vn -0.9513 0.1087 -0.2886 +vn -0.7550 0.2147 -0.6196 +vn -0.8614 0.2147 -0.4604 +vn -0.8767 0.1087 -0.4686 +vn -0.7684 0.1087 -0.6306 +vn -0.6196 0.2147 -0.7550 +vn -0.6306 0.1087 -0.7684 +vn 0.5626 -0.6857 -0.4617 +vn 0.5626 0.6857 -0.4617 +vn 0.0976 0.0487 -0.9940 +vn -0.0976 0.0487 -0.9940 +vn 0.0000 0.0490 -0.9988 +vn -0.9952 0.0000 -0.0980 +vn -0.9948 0.0051 -0.1010 +vn 0.7711 0.0313 -0.6359 +vn 0.8804 0.0234 -0.4736 +vn -0.9560 0.0145 -0.2930 +vn -0.8804 0.0234 -0.4736 +vn -0.6324 0.0380 -0.7736 +vn -0.7711 0.0313 -0.6359 +vn 0.2891 0.0468 -0.9561 +vn -0.4697 0.0432 -0.8817 +vn 0.6324 0.0380 -0.7736 +vn 0.9560 0.0145 -0.2930 +vn 0.9948 0.0051 -0.1010 +vn 0.9952 0.0000 -0.0980 +vn -0.2891 0.0468 -0.9561 +vn 0.4697 0.0432 -0.8817 +vn -0.8794 0.0929 -0.4670 +vn -0.7700 0.1245 -0.6258 +vn 0.7700 0.1245 -0.6258 +vn 0.8794 0.0929 -0.4670 +vn 0.9946 0.0203 -0.1021 +vn -0.2886 0.1868 -0.9390 +vn -0.0974 0.1942 -0.9761 +vn 0.9552 0.0577 -0.2902 +vn -0.9946 0.0203 -0.1021 +vn -0.4689 0.1723 -0.8663 +vn -0.6314 0.1513 -0.7605 +vn 0.0000 0.1951 -0.9808 +vn 0.0974 0.1942 -0.9761 +vn 0.6314 0.1513 -0.7605 +vn 0.2886 0.1868 -0.9390 +vn -0.9552 0.0577 -0.2902 +vn 0.4689 0.1723 -0.8663 +vn 0.8794 0.1822 -0.4399 +vn 0.9552 0.1132 -0.2733 +vn -0.4689 0.3380 -0.8160 +vn -0.2886 0.3664 -0.8845 +vn 0.9946 0.0398 -0.0961 +vn -0.6314 0.2967 -0.7164 +vn 0.0000 0.3827 -0.9239 +vn 0.0974 0.3808 -0.9195 +vn 0.6314 0.2967 -0.7164 +vn 0.7700 0.2441 -0.5894 +vn -0.7700 0.2441 -0.5894 +vn -0.0974 0.3808 -0.9195 +vn 0.2886 0.3664 -0.8845 +vn -0.9946 0.0398 -0.0961 +vn -0.9552 0.1132 -0.2733 +vn 0.4689 0.3380 -0.8160 +vn -0.8794 0.1822 -0.4399 +vn 0.8794 0.2645 -0.3959 +vn 0.9552 0.1644 -0.2460 +vn -0.4689 0.4907 -0.7344 +vn -0.2886 0.5319 -0.7961 +vn 0.9946 0.0578 -0.0865 +vn -0.6314 0.4308 -0.6448 +vn 0.0000 0.5556 -0.8314 +vn 0.0974 0.5529 -0.8275 +vn 0.6314 0.4308 -0.6447 +vn 0.7700 0.3544 -0.5305 +vn -0.7700 0.3544 -0.5305 +vn -0.0974 0.5529 -0.8275 +vn 0.2886 0.5319 -0.7961 +vn -0.9946 0.0578 -0.0865 +vn -0.9552 0.1644 -0.2460 +vn 0.4689 0.4907 -0.7344 +vn -0.8794 0.2645 -0.3959 +vn 0.8794 0.3366 -0.3366 +vn 0.9552 0.2092 -0.2092 +vn -0.4689 0.6246 -0.6246 +vn -0.2886 0.6770 -0.6770 +vn 0.9946 0.0736 -0.0736 +vn -0.6314 0.5483 -0.5483 +vn 0.0000 0.7071 -0.7071 +vn 0.0974 0.7037 -0.7037 +vn 0.6314 0.5483 -0.5483 +vn 0.7700 0.4511 -0.4511 +vn -0.7700 0.4511 -0.4511 +vn -0.0974 0.7037 -0.7037 +vn 0.2886 0.6770 -0.6770 +vn -0.9946 0.0736 -0.0736 +vn -0.9552 0.2092 -0.2092 +vn 0.4689 0.6246 -0.6246 +vn -0.8794 0.3366 -0.3366 +vn 0.8794 0.3959 -0.2645 +vn 0.9552 0.2460 -0.1644 +vn -0.4689 0.7344 -0.4907 +vn -0.2886 0.7961 -0.5319 +vn 0.9946 0.0865 -0.0578 +vn -0.6314 0.6447 -0.4308 +vn 0.0000 0.8314 -0.5556 +vn 0.0974 0.8275 -0.5529 +vn 0.6314 0.6447 -0.4308 +vn 0.7700 0.5305 -0.3544 +vn -0.7700 0.5305 -0.3544 +vn -0.0974 0.8275 -0.5529 +vn 0.2886 0.7961 -0.5319 +vn -0.9946 0.0865 -0.0578 +vn -0.9552 0.2460 -0.1644 +vn 0.4689 0.7344 -0.4907 +vn -0.8794 0.3959 -0.2645 +vn 0.8794 0.4399 -0.1822 +vn 0.9552 0.2733 -0.1132 +vn -0.4689 0.8160 -0.3380 +vn -0.2886 0.8845 -0.3664 +vn 0.9946 0.0961 -0.0398 +vn -0.6314 0.7164 -0.2967 +vn 0.0000 0.9239 -0.3827 +vn 0.0974 0.9195 -0.3808 +vn 0.6314 0.7164 -0.2967 +vn 0.7700 0.5894 -0.2441 +vn -0.7700 0.5894 -0.2441 +vn -0.0974 0.9195 -0.3808 +vn 0.2886 0.8845 -0.3664 +vn -0.9946 0.0961 -0.0398 +vn -0.9552 0.2733 -0.1132 +vn 0.4689 0.8160 -0.3380 +vn -0.8794 0.4399 -0.1822 +vn 0.8794 0.4670 -0.0929 +vn 0.9552 0.2902 -0.0577 +vn -0.4689 0.8663 -0.1723 +vn -0.2886 0.9390 -0.1868 +vn 0.9946 0.1021 -0.0203 +vn -0.6314 0.7605 -0.1513 +vn 0.0000 0.9808 -0.1951 +vn 0.0974 0.9761 -0.1942 +vn 0.6314 0.7605 -0.1513 +vn 0.7700 0.6258 -0.1245 +vn -0.7700 0.6258 -0.1245 +vn -0.0974 0.9761 -0.1942 +vn 0.2886 0.9390 -0.1868 +vn -0.9946 0.1021 -0.0203 +vn -0.9552 0.2902 -0.0577 +vn 0.4689 0.8663 -0.1723 +vn -0.8794 0.4670 -0.0929 +g Pipe_Cylinder.002_water +s off +f 12/1/1 29/2/1 13/3/1 14/4/1 15/5/1 16/6/1 17/7/1 30/8/1 18/9/1 19/10/1 20/11/1 31/12/1 21/13/1 32/14/1 22/15/1 23/16/1 24/17/1 25/18/1 26/19/1 1/20/1 2/21/1 3/22/1 4/23/1 5/24/1 6/25/1 7/26/1 8/27/1 9/28/1 27/29/1 10/30/1 28/31/1 11/32/1 +f 258/33/2 37/34/2 58/35/2 161/36/2 +f 260/37/3 45/38/3 46/39/3 163/40/3 +f 161/36/4 58/35/4 59/41/4 165/42/4 +f 163/40/5 46/39/5 47/43/5 166/44/5 +f 165/42/6 59/41/6 60/45/6 167/46/6 +f 166/44/7 47/43/7 48/47/7 168/48/7 +f 266/49/8 33/50/8 34/51/8 169/52/8 +f 167/46/9 60/45/9 61/53/9 171/54/9 +f 168/55/10 48/56/10 49/57/10 172/58/10 +f 169/52/11 34/51/11 35/59/11 173/60/11 +f 171/54/12 61/53/12 62/61/12 174/62/12 +f 172/58/13 49/57/13 33/50/13 266/49/13 +f 173/60/14 35/59/14 36/63/14 175/64/14 +f 174/62/15 62/61/15 63/65/15 176/66/15 +f 274/67/16 50/68/16 51/69/16 177/70/16 +f 175/64/17 36/63/17 37/34/17 258/33/17 +f 176/66/18 63/65/18 64/71/18 179/72/18 +f 177/70/19 51/69/19 52/73/19 180/74/19 +f 278/75/20 38/76/20 39/77/20 181/78/20 +f 179/72/21 64/71/21 50/68/21 274/67/21 +f 180/74/22 52/73/22 53/79/22 183/80/22 +f 181/78/23 39/77/23 40/81/23 184/82/23 +f 183/80/24 53/79/24 54/83/24 185/84/24 +f 184/82/25 40/81/25 41/85/25 186/86/25 +f 185/84/26 54/83/26 55/87/26 187/88/26 +f 186/86/27 41/85/27 42/89/27 188/90/27 +f 187/88/28 55/87/28 56/91/28 189/92/28 +f 188/90/29 42/89/29 43/93/29 190/94/29 +f 189/92/30 56/91/30 57/95/30 191/96/30 +f 190/94/31 43/93/31 44/97/31 192/98/31 +f 191/96/32 57/95/32 38/76/32 278/75/32 +f 192/98/33 44/97/33 45/38/33 260/37/33 +f 224/99/34 96/100/34 68/101/34 228/102/34 +f 223/103/35 95/104/35 86/105/35 246/106/35 +f 222/107/31 94/108/31 96/100/31 224/99/31 +f 221/109/36 93/110/36 95/104/36 223/103/36 +f 220/111/37 92/112/37 94/108/37 222/107/37 +f 219/113/28 91/114/28 93/110/28 221/109/28 +f 218/115/38 90/116/38 92/112/38 220/111/38 +f 217/117/39 89/118/39 91/114/39 219/113/39 +f 216/119/25 88/120/25 90/116/25 218/115/25 +f 215/121/40 87/122/40 89/118/40 217/117/40 +f 213/123/41 85/124/41 88/120/41 216/119/41 +f 212/125/42 84/126/42 87/122/42 215/121/42 +f 211/127/43 83/128/43 82/129/43 242/130/43 +f 246/106/44 86/105/44 85/124/44 213/123/44 +f 209/131/45 81/132/45 84/126/45 212/125/45 +f 208/133/46 80/134/46 83/128/46 211/127/46 +f 207/135/17 79/136/17 66/137/17 226/138/17 +f 242/130/47 82/129/47 81/132/47 209/131/47 +f 206/139/48 78/140/48 80/134/48 208/133/48 +f 205/141/49 77/142/49 79/136/49 207/135/49 +f 204/143/50 76/144/50 74/145/50 234/146/50 +f 203/147/51 75/148/51 78/140/51 206/139/51 +f 201/149/52 73/150/52 77/142/52 205/141/52 +f 200/151/53 72/152/53 76/144/53 204/143/53 +f 199/153/54 71/154/54 75/148/54 203/147/54 +f 234/146/55 74/145/55 73/150/55 201/149/55 +f 198/155/56 70/156/56 72/157/56 200/158/56 +f 197/159/57 69/160/57 71/154/57 199/153/57 +f 195/161/58 67/162/58 70/156/58 198/155/58 +f 193/163/59 65/164/59 69/160/59 197/159/59 +f 228/102/60 68/101/60 67/162/60 195/161/60 +f 226/138/61 66/137/61 65/164/61 193/163/61 +f 162/165/61 98/166/61 129/167/61 257/168/61 +f 164/169/62 100/170/62 131/171/62 259/172/62 +f 257/168/59 129/167/59 133/173/59 261/174/59 +f 259/172/63 131/171/63 134/175/63 262/176/63 +f 261/174/64 133/173/64 135/177/64 263/178/64 +f 262/176/65 134/175/65 136/179/65 264/180/65 +f 170/181/66 106/182/66 137/183/66 265/184/66 +f 263/178/9 135/177/9 139/185/9 267/186/9 +f 264/187/67 136/188/67 140/189/67 268/190/67 +f 265/184/68 137/183/68 141/191/68 269/192/68 +f 267/186/69 139/185/69 142/193/69 270/194/69 +f 268/190/13 140/189/13 106/182/13 170/181/13 +f 269/192/70 141/191/70 143/195/70 271/196/70 +f 270/194/71 142/193/71 144/197/71 272/198/71 +f 178/199/72 114/200/72 145/201/72 273/202/72 +f 271/196/17 143/195/17 98/166/17 162/165/17 +f 272/198/46 144/197/46 147/203/46 275/204/46 +f 273/202/73 145/201/73 148/205/73 276/206/73 +f 182/207/74 118/208/74 149/209/74 277/210/74 +f 275/204/21 147/203/21 114/200/21 178/199/21 +f 276/206/42 148/205/42 151/211/42 279/212/42 +f 277/210/75 149/209/75 152/213/75 280/214/75 +f 279/212/40 151/211/40 153/215/40 281/216/40 +f 280/214/76 152/213/76 154/217/76 282/218/76 +f 281/216/77 153/215/77 155/219/77 283/220/77 +f 282/218/78 154/217/78 156/221/78 284/222/78 +f 283/220/79 155/219/79 157/223/79 285/224/79 +f 284/222/80 156/221/80 158/225/80 286/226/80 +f 285/224/81 157/223/81 159/227/81 287/228/81 +f 286/226/82 158/225/82 160/229/82 288/230/82 +f 287/228/35 159/227/35 118/208/35 182/207/35 +f 288/230/83 160/229/83 100/170/83 164/169/83 +f 256/231/33 128/232/33 132/233/33 196/234/33 +f 255/235/84 127/236/84 150/237/84 214/238/84 +f 254/239/31 126/240/31 128/232/31 256/231/31 +f 253/241/85 125/242/85 127/236/85 255/235/85 +f 252/243/80 124/244/80 126/240/80 254/239/80 +f 251/245/86 123/246/86 125/242/86 253/241/86 +f 250/247/87 122/248/87 124/244/87 252/243/87 +f 249/249/88 121/250/88 123/246/88 251/245/88 +f 248/251/89 120/252/89 122/248/89 250/247/89 +f 247/253/90 119/254/90 121/250/90 249/249/90 +f 245/255/91 117/256/91 120/252/91 248/251/91 +f 244/257/92 116/258/92 119/254/92 247/253/92 +f 243/259/93 115/260/93 146/261/93 210/262/93 +f 214/238/94 150/237/94 117/256/94 245/255/94 +f 241/263/95 113/264/95 116/258/95 244/257/95 +f 240/265/96 112/266/96 115/260/96 243/259/96 +f 239/267/97 111/268/97 130/269/97 194/270/97 +f 210/262/98 146/261/98 113/264/98 241/263/98 +f 238/271/48 110/272/48 112/266/48 240/265/48 +f 237/273/99 109/274/99 111/268/99 239/267/99 +f 236/275/100 108/276/100 138/277/100 202/278/100 +f 235/279/101 107/280/101 110/272/101 238/271/101 +f 233/281/102 105/282/102 109/274/102 237/273/102 +f 232/283/53 104/284/53 108/276/53 236/275/53 +f 231/285/103 103/286/103 107/280/103 235/279/103 +f 202/278/104 138/277/104 105/282/104 233/281/104 +f 230/287/105 102/288/105 104/289/105 232/290/105 +f 229/291/106 101/292/106 103/286/106 231/285/106 +f 227/293/107 99/294/107 102/288/107 230/287/107 +f 225/295/108 97/296/108 101/292/108 229/291/108 +f 196/234/109 132/233/109 99/294/109 227/293/109 +f 194/270/110 130/269/110 97/296/110 225/295/110 +f 66/137/111 194/270/111 225/295/111 65/164/111 +f 68/101/62 196/234/62 227/293/62 67/162/62 +f 65/164/59 225/295/59 229/291/59 69/160/59 +f 67/162/112 227/293/112 230/287/112 70/156/112 +f 69/160/113 229/291/113 231/285/113 71/154/113 +f 70/156/114 230/287/114 232/290/114 72/157/114 +f 74/145/115 202/278/115 233/281/115 73/150/115 +f 71/154/116 231/285/116 235/279/116 75/148/116 +f 72/152/53 232/283/53 236/275/53 76/144/53 +f 73/150/117 233/281/117 237/273/117 77/142/117 +f 75/148/101 235/279/101 238/271/101 78/140/101 +f 76/144/118 236/275/118 202/278/118 74/145/118 +f 77/142/119 237/273/119 239/267/119 79/136/119 +f 78/140/48 238/271/48 240/265/48 80/134/48 +f 82/129/120 210/262/120 241/263/120 81/132/120 +f 79/136/121 239/267/121 194/270/121 66/137/121 +f 80/134/46 240/265/46 243/259/46 83/128/46 +f 81/132/73 241/263/73 244/257/73 84/126/73 +f 86/105/122 214/238/122 245/255/122 85/124/122 +f 83/128/123 243/259/123 210/262/123 82/129/123 +f 84/126/124 244/257/124 247/253/124 87/122/124 +f 85/124/125 245/255/125 248/251/125 88/120/125 +f 87/122/126 247/253/126 249/249/126 89/118/126 +f 88/120/127 248/251/127 250/247/127 90/116/127 +f 89/118/128 249/249/128 251/245/128 91/114/128 +f 90/116/129 250/247/129 252/243/129 92/112/129 +f 91/114/130 251/245/130 253/241/130 93/110/130 +f 92/112/131 252/243/131 254/239/131 94/108/131 +f 93/110/132 253/241/132 255/235/132 95/104/132 +f 94/108/31 254/239/31 256/231/31 96/100/31 +f 95/104/35 255/235/35 214/238/35 86/105/35 +f 96/100/33 256/231/33 196/234/33 68/101/33 +f 8/297/133 288/230/133 164/169/133 9/298/133 +f 1/299/35 287/228/35 182/207/35 2/300/35 +f 7/301/134 286/226/134 288/230/134 8/297/134 +f 26/302/36 285/224/36 287/228/36 1/299/36 +f 6/303/135 284/222/135 286/226/135 7/301/135 +f 25/304/28 283/220/28 285/224/28 26/302/28 +f 5/305/87 282/218/87 284/222/87 6/303/87 +f 24/306/39 281/216/39 283/220/39 25/304/39 +f 4/307/136 280/214/136 282/218/136 5/305/136 +f 23/308/137 279/212/137 281/216/137 24/306/137 +f 3/309/138 277/210/138 280/214/138 4/307/138 +f 22/310/139 276/206/139 279/212/139 23/308/139 +f 31/311/21 275/204/21 178/199/21 21/312/21 +f 2/300/140 182/207/140 277/210/140 3/309/140 +f 32/313/141 273/202/141 276/206/141 22/310/141 +f 20/314/46 272/198/46 275/204/46 31/311/46 +f 14/315/17 271/196/17 162/165/17 15/316/17 +f 21/312/72 178/199/72 273/202/72 32/313/72 +f 19/317/142 270/194/142 272/198/142 20/314/142 +f 13/318/143 269/192/143 271/196/143 14/315/143 +f 11/319/144 268/190/144 170/181/144 12/320/144 +f 18/321/145 267/186/145 270/194/145 19/317/145 +f 29/322/146 265/184/146 269/192/146 13/318/146 +f 28/323/147 264/187/147 268/190/147 11/319/147 +f 30/324/148 263/178/148 267/186/148 18/321/148 +f 12/320/149 170/181/149 265/184/149 29/322/149 +f 10/325/150 262/176/150 264/180/150 28/326/150 +f 17/327/151 261/174/151 263/178/151 30/324/151 +f 27/328/152 259/172/152 262/176/152 10/325/152 +f 16/329/59 257/168/59 261/174/59 17/327/59 +f 9/298/153 164/169/153 259/172/153 27/328/153 +f 15/316/61 162/165/61 257/168/61 16/329/61 +f 98/330/61 226/138/61 193/163/61 129/331/61 +f 100/332/154 228/102/154 195/161/154 131/333/154 +f 129/331/59 193/163/59 197/159/59 133/334/59 +f 131/333/155 195/161/155 198/155/155 134/335/155 +f 133/334/156 197/159/156 199/153/156 135/336/156 +f 134/335/157 198/155/157 200/158/157 136/337/157 +f 106/338/158 234/146/158 201/149/158 137/339/158 +f 135/336/159 199/153/159 203/147/159 139/340/159 +f 136/341/160 200/151/160 204/143/160 140/342/160 +f 137/339/161 201/149/161 205/141/161 141/343/161 +f 139/340/162 203/147/162 206/139/162 142/344/162 +f 140/342/163 204/143/163 234/146/163 106/338/163 +f 141/343/164 205/141/164 207/135/164 143/345/164 +f 142/344/165 206/139/165 208/133/165 144/346/165 +f 114/347/166 242/130/166 209/131/166 145/348/166 +f 143/345/17 207/135/17 226/138/17 98/330/17 +f 144/346/46 208/133/46 211/127/46 147/349/46 +f 145/348/167 209/131/167 212/125/167 148/350/167 +f 118/351/168 246/106/168 213/123/168 149/352/168 +f 147/349/169 211/127/169 242/130/169 114/347/169 +f 148/350/42 212/125/42 215/121/42 151/353/42 +f 149/352/170 213/123/170 216/119/170 152/354/170 +f 151/353/40 215/121/40 217/117/40 153/355/40 +f 152/354/171 216/119/171 218/115/171 154/356/171 +f 153/355/172 217/117/172 219/113/172 155/357/172 +f 154/356/173 218/115/173 220/111/173 156/358/173 +f 155/357/174 219/113/174 221/109/174 157/359/174 +f 156/358/175 220/111/175 222/107/175 158/360/175 +f 157/359/176 221/109/176 223/103/176 159/361/176 +f 158/360/31 222/107/31 224/99/31 160/362/31 +f 159/361/35 223/103/35 246/106/35 118/351/35 +f 160/362/177 224/99/177 228/102/177 100/332/177 +f 128/232/33 192/98/33 260/37/33 132/233/33 +f 127/236/178 191/96/178 278/75/178 150/237/178 +f 126/240/31 190/94/31 192/98/31 128/232/31 +f 125/242/179 189/92/179 191/96/179 127/236/179 +f 124/244/80 188/90/80 190/94/80 126/240/80 +f 123/246/28 187/88/28 189/92/28 125/242/28 +f 122/248/87 186/86/87 188/90/87 124/244/87 +f 121/250/180 185/84/180 187/88/180 123/246/180 +f 120/252/181 184/82/181 186/86/181 122/248/181 +f 119/254/182 183/80/182 185/84/182 121/250/182 +f 117/256/183 181/78/183 184/82/183 120/252/183 +f 116/258/184 180/74/184 183/80/184 119/254/184 +f 115/260/185 179/72/185 274/67/185 146/261/185 +f 150/237/140 278/75/140 181/78/140 117/256/140 +f 113/264/186 177/70/186 180/74/186 116/258/186 +f 112/266/187 176/66/187 179/72/187 115/260/187 +f 111/268/188 175/64/188 258/33/188 130/269/188 +f 146/261/72 274/67/72 177/70/72 113/264/72 +f 110/272/48 174/62/48 176/66/48 112/266/48 +f 109/274/189 173/60/189 175/64/189 111/268/189 +f 108/276/190 172/58/190 266/49/190 138/277/190 +f 107/280/101 171/54/101 174/62/101 110/272/101 +f 105/282/191 169/52/191 173/60/191 109/274/191 +f 104/284/192 168/55/192 172/58/192 108/276/192 +f 103/286/193 167/46/193 171/54/193 107/280/193 +f 138/277/194 266/49/194 169/52/194 105/282/194 +f 102/288/195 166/44/195 168/48/195 104/289/195 +f 101/292/196 165/42/196 167/46/196 103/286/196 +f 99/294/197 163/40/197 166/44/197 102/288/197 +f 97/296/198 161/36/198 165/42/198 101/292/198 +f 132/233/199 260/37/199 163/40/199 99/294/199 +f 130/269/200 258/33/200 161/36/200 97/296/200 +g Pipe_Cylinder.002_pipe +f 353/363/42 356/364/42 357/365/42 358/366/42 359/367/42 360/368/42 +f 365/369/42 368/370/42 369/371/42 370/372/42 371/373/42 372/374/42 +f 377/375/42 380/376/42 381/377/42 382/378/42 383/379/42 384/380/42 +f 389/381/42 392/382/42 393/383/42 394/384/42 395/385/42 396/386/42 +f 401/387/42 404/388/42 405/389/42 406/390/42 407/391/42 408/392/42 +f 413/393/42 416/394/42 417/395/42 418/396/42 419/397/42 420/398/42 +f 425/399/42 428/400/42 429/401/42 430/402/42 431/403/42 432/404/42 +f 437/405/42 440/406/42 441/407/42 442/408/42 443/409/42 444/410/42 +f 471/411/42 481/412/42 486/413/42 490/414/42 494/415/42 499/416/42 498/417/42 503/418/42 507/419/42 511/420/42 515/421/42 520/422/42 529/423/42 530/424/42 528/425/42 522/426/42 517/427/42 513/428/42 509/429/42 505/430/42 501/431/42 496/432/42 492/433/42 488/434/42 483/435/42 479/436/42 472/437/42 473/438/42 470/439/42 467/440/42 468/441/42 469/442/42 +f 475/443/53 474/444/53 480/445/53 485/446/53 484/447/53 489/448/53 493/449/53 497/450/53 502/451/53 506/452/53 510/453/53 514/454/53 518/455/53 523/456/53 519/457/53 525/458/53 524/459/53 526/460/53 527/461/53 521/462/53 516/463/53 512/464/53 508/465/53 504/466/53 500/467/53 495/468/53 491/469/53 487/470/53 482/471/53 478/472/53 477/473/53 476/474/53 +f 531/475/42 534/476/42 535/477/42 536/478/42 537/479/42 538/480/42 +f 543/481/42 546/482/42 547/483/42 548/484/42 549/485/42 550/486/42 +f 555/487/42 558/488/42 559/489/42 560/490/42 561/491/42 562/492/42 +f 567/493/42 570/494/42 571/495/42 572/496/42 573/497/42 574/498/42 +f 579/499/42 582/500/42 583/501/42 584/502/42 585/503/42 586/504/42 +f 591/505/42 594/506/42 595/507/42 596/508/42 597/509/42 598/510/42 +f 603/511/42 606/512/42 607/513/42 608/514/42 609/515/42 610/516/42 +f 615/517/42 618/518/42 619/519/42 620/520/42 621/521/42 622/522/42 +f 746/523/201 747/524/201 777/525/201 776/526/201 774/527/201 775/528/201 773/529/201 772/530/201 771/531/201 770/532/201 768/533/201 769/534/201 767/535/201 766/536/201 765/537/201 764/538/201 763/539/201 762/540/201 761/541/201 760/542/201 759/543/201 758/544/201 757/545/201 756/546/201 755/547/201 754/548/201 753/549/201 752/550/201 751/551/201 750/552/201 749/553/201 748/554/201 +f 725/555/1 742/556/1 726/557/1 727/558/1 728/559/1 729/560/1 730/561/1 743/562/1 731/563/1 732/564/1 733/565/1 744/566/1 734/567/1 745/568/1 735/569/1 736/570/1 737/571/1 738/572/1 739/573/1 714/574/1 715/575/1 716/576/1 717/577/1 718/578/1 719/579/1 720/580/1 721/581/1 722/582/1 740/583/1 723/584/1 741/585/1 724/586/1 +s 1 +f 455/587/202 794/588/25 449/589/203 290/590/204 291/591/205 +f 456/592/206 455/587/202 291/591/205 292/593/207 +f 457/594/208 456/592/206 292/593/207 297/595/209 +f 449/589/203 627/596/210 640/597/211 289/598/212 290/590/204 +f 458/599/213 457/594/208 297/595/209 301/600/214 +f 289/598/212 640/597/211 639/601/215 293/602/216 +f 458/599/213 301/600/214 305/603/217 459/604/218 +f 294/605/219 290/590/204 289/598/212 295/606/220 +f 296/607/221 291/591/205 290/590/204 294/605/219 +f 298/608/222 292/593/207 291/591/205 296/607/221 +f 453/609/223 452/610/224 333/611/225 337/612/226 +f 295/606/220 289/598/212 293/602/216 300/613/227 +f 302/614/228 297/595/209 292/593/207 298/608/222 +f 460/615/229 459/604/218 305/603/217 309/616/230 +f 304/617/231 300/613/227 293/602/216 299/618/232 +f 306/619/233 301/600/214 297/595/209 302/614/228 +f 461/620/234 460/615/229 309/616/230 313/621/235 +f 637/622/236 303/623/237 299/618/232 638/624/238 +f 308/625/239 304/617/231 299/618/232 303/623/237 +f 470/626/240 474/627/241 475/628/242 467/629/243 +f 469/630/244 477/631/245 478/632/246 471/633/247 +f 310/634/248 305/603/217 301/600/214 306/619/233 +f 473/635/249 480/636/250 474/627/241 470/626/240 +f 312/637/251 308/625/239 303/623/237 307/638/252 +f 471/633/247 478/632/246 482/639/253 481/640/254 +f 314/641/255 309/616/230 305/603/217 310/634/248 +f 472/642/256 485/643/257 480/636/250 473/635/249 +f 462/644/258 450/645/259 317/646/260 321/647/261 +f 643/648/262 315/649/263 311/650/264 634/651/265 +f 316/652/266 312/637/251 307/638/252 311/650/264 +f 479/653/267 484/654/268 485/643/257 472/642/256 +f 318/655/269 313/621/235 309/616/230 314/641/255 +f 488/656/270 493/657/271 489/658/272 483/659/273 +f 320/660/274 316/652/266 311/650/264 315/649/263 +f 481/640/254 482/639/253 487/661/275 486/662/276 +f 322/663/277 317/664/260 313/621/235 318/655/269 +f 492/665/278 497/666/279 493/657/271 488/656/270 +f 451/667/280 463/668/281 325/669/282 329/670/283 +f 642/671/284 631/672/285 323/673/286 319/674/287 +f 324/675/288 320/660/274 315/649/263 319/674/287 +f 486/662/276 487/661/275 491/676/289 490/677/290 +f 326/678/291 321/647/261 317/646/260 322/679/277 +f 496/680/292 502/681/293 497/666/279 492/665/278 +f 452/610/224 451/667/280 329/670/283 333/611/225 +f 633/682/294 630/683/295 335/684/296 331/685/297 +f 328/686/298 324/675/288 319/674/287 323/673/286 +f 490/677/290 491/676/289 495/687/299 494/688/300 +f 330/689/301 325/669/282 321/647/261 326/678/291 +f 501/690/302 506/691/303 502/681/293 496/680/292 +f 332/692/304 328/686/298 323/673/286 327/693/305 +f 494/688/300 495/687/299 500/694/306 499/695/307 +f 334/696/308 329/670/283 325/669/282 330/689/301 +f 505/697/309 510/698/310 506/691/303 501/690/302 +f 336/699/311 332/692/304 327/693/305 331/685/297 +f 498/700/312 504/701/313 508/702/314 503/703/315 +f 334/696/308 338/704/316 333/611/225 329/670/283 +f 499/695/307 500/694/306 504/705/313 498/706/312 +f 465/707/317 349/708/318 347/709/319 466/710/320 647/711/64 +f 340/712/321 336/699/311 331/685/297 335/684/296 +f 503/703/315 508/702/314 512/713/322 507/714/323 +f 467/629/243 475/628/242 476/715/324 468/716/325 +f 342/717/326 337/612/226 333/611/225 338/704/316 +f 509/718/327 514/719/328 510/698/310 505/697/309 +f 453/609/223 337/612/226 341/720/329 464/721/330 +f 628/722/331 641/723/332 466/710/320 347/709/319 343/724/333 +f 344/725/334 340/712/321 335/684/296 339/726/335 +f 507/714/323 512/713/322 516/727/336 511/728/337 +f 342/717/326 346/729/338 341/720/329 337/612/226 +f 513/730/339 518/731/340 514/719/328 509/718/327 +f 348/732/341 344/725/334 339/726/335 343/724/333 +f 511/728/337 516/733/336 521/734/342 515/735/343 +f 346/729/338 350/736/344 345/737/345 341/720/329 +f 517/738/346 523/739/347 518/731/340 513/730/339 +f 483/659/273 489/658/272 484/654/268 479/653/267 +f 351/740/348 348/732/341 343/724/333 347/709/319 +f 515/735/343 521/734/342 527/741/349 520/742/350 +f 350/736/344 352/743/351 349/708/318 345/737/345 +f 522/744/352 519/745/353 523/739/347 517/738/346 +f 352/743/351 351/740/348 347/709/319 349/708/318 +f 468/716/325 476/715/324 477/631/245 469/630/244 +f 528/746/354 525/747/355 519/745/353 522/744/352 +f 520/742/350 527/741/349 526/748/356 529/749/357 +f 530/750/358 524/751/359 525/747/355 528/746/354 +f 529/749/357 526/748/356 524/751/359 530/750/358 +f 353/752/360 354/753/361 355/754/362 356/755/363 +f 360/756/364 361/757/365 354/753/361 353/752/360 +f 356/755/363 355/754/362 362/758/366 357/759/367 +f 357/759/367 362/758/366 363/760/368 358/761/369 +f 358/762/369 363/763/368 364/764/370 359/765/371 +f 359/765/371 364/764/370 361/757/365 360/756/364 +f 365/766/372 366/767/373 367/768/374 368/769/375 +f 372/770/376 373/771/377 366/767/373 365/766/372 +f 368/769/375 367/768/374 374/772/378 369/773/379 +f 369/773/379 374/772/378 375/774/380 370/775/381 +f 370/776/381 375/777/380 376/778/382 371/779/383 +f 371/779/383 376/778/382 373/771/377 372/770/376 +f 377/780/384 378/781/385 379/782/386 380/783/387 +f 384/784/388 385/785/389 378/781/385 377/780/384 +f 380/783/387 379/782/386 386/786/390 381/787/391 +f 381/787/391 386/786/390 387/788/392 382/789/393 +f 382/790/393 387/791/392 388/792/394 383/793/395 +f 383/793/395 388/792/394 385/785/389 384/784/388 +f 389/794/396 390/795/397 391/796/398 392/797/399 +f 396/798/400 397/799/401 390/795/397 389/794/396 +f 392/797/399 391/796/398 398/800/402 393/801/403 +f 393/801/403 398/800/402 399/802/404 394/803/405 +f 394/804/405 399/805/404 400/806/406 395/807/407 +f 395/807/407 400/806/406 397/799/401 396/798/400 +f 401/808/369 402/809/368 403/810/370 404/811/371 +f 408/812/367 409/813/366 402/809/368 401/808/369 +f 404/811/371 403/810/370 410/814/365 405/815/364 +f 405/815/364 410/814/365 411/816/361 406/817/360 +f 406/818/360 411/819/361 412/820/362 407/821/363 +f 407/821/363 412/820/362 409/813/366 408/812/367 +f 413/822/381 414/823/380 415/824/382 416/825/383 +f 420/826/379 421/827/378 414/823/380 413/822/381 +f 416/825/383 415/824/382 422/828/377 417/829/376 +f 417/829/376 422/828/377 423/830/373 418/831/372 +f 418/832/372 423/833/373 424/834/374 419/835/375 +f 419/835/375 424/834/374 421/827/378 420/826/379 +f 425/836/393 426/837/392 427/838/394 428/839/395 +f 432/840/391 433/841/390 426/837/392 425/836/393 +f 428/839/395 427/838/394 434/842/389 429/843/388 +f 429/843/388 434/842/389 435/844/385 430/845/384 +f 430/846/384 435/847/385 436/848/386 431/849/387 +f 431/849/387 436/848/386 433/841/390 432/840/391 +f 437/850/405 438/851/404 439/852/406 440/853/407 +f 444/854/403 445/855/402 438/851/404 437/850/405 +f 440/853/407 439/852/406 446/856/401 441/857/400 +f 441/857/400 446/856/401 447/858/397 442/859/396 +f 442/860/396 447/861/397 448/862/398 443/863/399 +f 443/863/399 448/862/398 445/855/402 444/854/403 +f 646/864/25 627/596/210 449/589/203 794/588/25 +f 293/602/216 639/601/215 638/624/238 299/618/232 +f 637/622/236 636/865/408 307/638/252 303/623/237 +f 636/865/408 634/651/265 311/650/264 307/638/252 +f 631/672/285 632/866/409 327/693/305 323/673/286 +f 632/866/409 633/682/294 331/685/297 327/693/305 +f 454/867/410 464/721/330 341/720/329 345/737/345 +f 643/648/262 645/868/411 642/671/284 319/674/287 315/649/263 +f 450/869/259 461/620/234 313/621/235 317/664/260 +f 465/707/317 454/867/410 345/737/345 349/708/318 +f 463/668/281 462/644/258 321/647/261 325/669/282 +f 628/722/331 343/724/333 339/726/335 629/870/412 +f 531/871/413 532/872/414 533/873/415 534/874/416 +f 538/875/417 539/876/418 532/872/414 531/871/413 +f 534/874/416 533/873/415 540/877/419 535/878/420 +f 535/878/420 540/877/419 541/879/421 536/880/422 +f 536/881/422 541/882/421 542/883/423 537/884/424 +f 537/884/424 542/883/423 539/876/418 538/875/417 +f 543/885/425 544/886/1 545/887/426 546/888/427 +f 550/889/428 551/890/429 544/886/1 543/885/425 +f 546/888/427 545/887/426 552/891/430 547/892/431 +f 547/892/431 552/891/430 553/893/201 548/894/432 +f 548/895/432 553/896/201 554/897/433 549/898/434 +f 549/898/434 554/897/433 551/890/429 550/889/428 +f 555/899/435 556/900/436 557/901/437 558/902/438 +f 562/903/439 563/904/440 556/900/436 555/899/435 +f 558/902/438 557/901/437 564/905/441 559/906/442 +f 559/906/442 564/905/441 565/907/443 560/908/444 +f 560/909/444 565/910/443 566/911/445 561/912/446 +f 561/912/446 566/911/445 563/904/440 562/903/439 +f 567/913/447 568/914/25 569/915/448 570/916/449 +f 574/917/450 575/918/451 568/914/25 567/913/447 +f 570/916/449 569/915/448 576/919/452 571/920/453 +f 571/920/453 576/919/452 577/921/64 572/922/454 +f 572/923/454 577/924/64 578/925/455 573/926/456 +f 573/926/456 578/925/455 575/918/451 574/917/450 +f 579/927/422 580/928/421 581/929/423 582/930/424 +f 586/931/420 587/932/419 580/928/421 579/927/422 +f 582/930/424 581/929/423 588/933/418 583/934/417 +f 583/934/417 588/933/418 589/935/414 584/936/413 +f 584/937/413 589/938/414 590/939/415 585/940/416 +f 585/940/416 590/939/415 587/932/419 586/931/420 +f 591/941/432 592/942/201 593/943/433 594/944/434 +f 598/945/431 599/946/430 592/942/201 591/941/432 +f 594/944/434 593/943/433 600/947/429 595/948/428 +f 595/948/428 600/947/429 601/949/1 596/950/425 +f 596/951/425 601/952/1 602/953/426 597/954/427 +f 597/954/427 602/953/426 599/946/430 598/945/431 +f 603/955/444 604/956/443 605/957/445 606/958/446 +f 610/959/442 611/960/441 604/956/443 603/955/444 +f 606/958/446 605/957/445 612/961/440 607/962/439 +f 607/962/439 612/961/440 613/963/436 608/964/435 +f 608/965/435 613/966/436 614/967/437 609/968/438 +f 609/968/438 614/967/437 611/960/441 610/959/442 +f 615/969/454 616/970/64 617/971/455 618/972/456 +f 622/973/453 623/974/452 616/970/64 615/969/454 +f 618/972/456 617/971/455 624/975/451 619/976/450 +f 619/976/450 624/975/451 625/977/25 620/978/447 +f 620/979/447 625/980/25 626/981/448 621/982/449 +f 621/982/449 626/981/448 623/974/452 622/973/453 +f 629/870/412 339/726/335 335/684/296 630/683/295 +f 647/711/64 466/710/320 641/723/332 864/983/64 +f 644/984/25 646/864/25 794/588/25 455/587/202 +f 465/707/317 647/711/64 864/983/64 635/985/64 +f 749/986/457 716/987/458 715/988/459 748/989/460 +f 750/990/461 717/991/462 716/987/458 749/986/457 +f 751/992/463 718/993/464 717/991/462 750/990/461 +f 752/994/465 719/995/466 718/993/464 751/992/463 +f 753/996/467 720/997/468 719/995/466 752/994/465 +f 754/998/469 721/999/470 720/997/468 753/996/467 +f 755/1000/471 722/1001/472 721/999/470 754/998/469 +f 756/1002/473 740/1003/474 722/1001/472 755/1000/471 +f 757/1004/475 723/1005/476 740/1003/474 756/1002/473 +f 758/1006/477 741/1007/478 723/1005/476 757/1004/475 +f 759/1008/479 724/1009/480 741/1007/478 758/1006/477 +f 760/1010/481 725/1011/482 724/1009/480 759/1008/479 +f 761/1012/483 742/1013/484 725/1011/482 760/1010/481 +f 762/1014/485 726/1015/486 742/1013/484 761/1012/483 +f 763/1016/487 727/1017/488 726/1015/486 762/1014/485 +f 764/1018/489 728/1019/490 727/1017/488 763/1016/487 +f 765/1020/491 729/1021/492 728/1022/490 764/1023/489 +f 766/1024/493 730/1025/494 729/1021/492 765/1020/491 +f 767/1026/495 743/1027/496 730/1025/494 766/1024/493 +f 769/1028/497 731/1029/498 743/1027/496 767/1026/495 +f 770/1030/499 733/1031/500 732/1032/501 768/1033/502 +f 768/1033/502 732/1032/501 731/1029/498 769/1028/497 +f 771/1034/503 744/1035/504 733/1031/500 770/1030/499 +f 772/1036/505 734/1037/506 744/1035/504 771/1034/503 +f 773/1038/507 745/1039/508 734/1037/506 772/1036/505 +f 775/1040/509 735/1041/510 745/1039/508 773/1038/507 +f 776/1042/511 737/1043/512 736/1044/513 774/1045/514 +f 774/1045/514 736/1044/513 735/1041/510 775/1040/509 +f 777/1046/515 738/1047/516 737/1043/512 776/1042/511 +f 747/1048/517 739/1049/518 738/1047/516 777/1046/515 +f 677/1050/519 680/1051/520 681/1052/521 648/1053/522 +f 649/1054/523 648/1053/522 681/1052/521 682/1055/524 +f 650/1056/525 649/1054/523 682/1055/524 683/1057/526 +f 651/1058/527 650/1056/525 683/1057/526 684/1059/528 +f 652/1060/529 651/1058/527 684/1059/528 685/1061/530 +f 653/1062/531 652/1060/529 685/1061/530 686/1063/532 +f 653/1062/531 686/1063/532 687/1064/533 654/1065/534 +f 655/1066/535 654/1065/534 687/1064/533 688/1067/536 +f 656/1068/537 655/1066/535 688/1067/536 689/1069/538 +f 657/1070/539 656/1068/537 689/1069/538 690/1071/540 +f 657/1070/539 690/1071/540 691/1072/541 658/1073/542 +f 658/1073/542 691/1072/541 692/1074/543 678/1075/544 +f 659/1076/545 693/1077/546 694/1078/547 660/1079/548 +f 678/1075/544 692/1074/543 693/1077/546 659/1076/545 +f 660/1079/548 694/1078/547 695/1080/549 661/1081/550 +f 662/1082/551 661/1081/550 695/1080/549 696/1083/552 +f 662/1082/551 696/1083/552 697/1084/553 663/1085/554 +f 664/1086/555 663/1085/554 697/1084/553 698/1087/556 +f 664/1088/555 698/1089/556 699/1090/557 665/1091/558 +f 666/1092/559 665/1091/558 699/1090/557 700/1093/560 +f 666/1092/559 700/1093/560 701/1094/561 667/1095/562 +f 667/1095/562 701/1094/561 702/1096/563 669/1097/564 +f 669/1097/564 702/1096/563 703/1098/565 668/1099/566 +f 668/1099/566 703/1098/565 704/1100/567 670/1101/568 +f 670/1101/568 704/1100/567 705/1102/569 671/1103/570 +f 671/1103/570 705/1102/569 706/1104/571 679/1105/572 +f 674/1106/573 672/1107/574 707/1108/575 708/1109/576 +f 672/1107/574 679/1105/572 706/1104/571 707/1108/575 +f 675/1110/577 673/1111/578 709/1112/579 710/1113/580 +f 674/1106/573 708/1109/576 709/1112/579 673/1111/578 +f 676/1114/581 675/1110/577 710/1113/580 711/1115/582 +f 676/1114/581 711/1115/582 680/1051/520 677/1050/519 +f 748/989/460 715/988/459 714/1116/583 746/1117/584 +f 693/1077/546 692/1074/543 456/1118/206 457/1119/208 +f 694/1078/547 693/1077/546 457/1119/208 458/1120/213 +f 793/1121/585 683/1057/526 682/1055/524 792/1122/586 795/1123/587 +f 713/1124/588 707/1108/575 706/1104/571 465/1125/317 635/1126/64 +f 864/1127/64 791/1128/589 713/1124/588 635/1126/64 +f 692/1074/543 691/1072/541 455/1129/202 456/1118/206 +f 788/1130/590 789/1131/591 688/1067/536 687/1064/533 +f 705/1102/569 704/1100/567 464/1132/330 454/1133/410 +f 709/1112/579 708/1109/576 779/1134/592 780/1135/593 +f 784/1136/594 711/1115/582 710/1113/580 781/1137/595 +f 785/1138/596 684/1059/528 683/1057/526 793/1121/585 +f 458/1120/213 459/1139/218 695/1080/549 694/1078/547 +f 706/1104/571 705/1102/569 454/1133/410 465/1125/317 +f 704/1100/567 703/1098/565 453/1140/223 464/1132/330 +f 708/1109/576 707/1108/575 713/1124/588 791/1128/589 779/1134/592 +f 784/1136/594 783/1141/597 680/1051/520 711/1115/582 +f 746/1117/584 714/1116/583 739/1049/518 747/1048/517 +f 787/1142/598 788/1130/590 687/1064/533 686/1063/532 +f 789/1131/591 790/1143/599 689/1069/538 688/1067/536 +f 790/1143/599 778/1144/600 712/1145/601 690/1071/540 689/1069/538 +f 691/1072/541 690/1071/540 712/1145/601 644/1146/25 455/1129/202 +f 459/1139/218 460/1147/229 696/1083/552 695/1080/549 +f 460/1147/229 461/1148/234 697/1084/553 696/1083/552 +f 461/1148/234 450/1149/259 698/1087/556 697/1084/553 +f 450/1150/259 462/1151/258 699/1090/557 698/1089/556 +f 462/1151/258 463/1152/281 700/1093/560 699/1090/557 +f 463/1152/281 451/1153/280 701/1094/561 700/1093/560 +f 451/1153/280 452/1154/224 702/1096/563 701/1094/561 +f 709/1112/579 780/1135/593 781/1137/595 710/1113/580 +f 782/1155/602 681/1052/521 680/1051/520 783/1141/597 +f 782/1155/602 792/1122/586 682/1055/524 681/1052/521 +f 786/1156/603 685/1061/530 684/1059/528 785/1138/596 +f 786/1156/603 787/1142/598 686/1063/532 685/1061/530 +f 644/1146/25 712/1145/601 778/1144/600 646/1157/25 +f 452/1154/224 453/1140/223 703/1098/565 702/1096/563 +f 781/1137/595 780/1135/593 798/1158/604 799/1159/605 +f 789/1131/591 788/1130/590 806/1160/606 807/1161/607 +f 646/1157/25 778/1144/600 796/1162/608 +f 792/1122/586 782/1155/602 800/1163/609 810/1164/610 +f 790/1143/599 789/1131/591 807/1161/607 808/1165/611 +f 791/1128/589 864/1127/64 809/1166/612 +f 782/1155/602 783/1141/597 801/1167/613 800/1163/609 +f 778/1144/600 790/1143/599 808/1165/611 796/1162/608 +f 783/1141/597 784/1136/594 802/1168/614 801/1167/613 +f 793/1121/585 795/1123/587 812/1169/615 811/1170/616 +f 788/1130/590 787/1142/598 805/1171/617 806/1160/606 +f 784/1136/594 781/1137/595 799/1159/605 802/1168/614 +f 785/1138/596 793/1121/585 811/1170/616 803/1172/618 +f 779/1134/592 791/1128/589 809/1166/612 797/1173/619 +f 795/1123/587 792/1122/586 810/1164/610 812/1169/615 +f 786/1156/603 785/1138/596 803/1172/618 804/1174/620 +f 780/1135/593 779/1134/592 797/1173/619 798/1158/604 +f 787/1142/598 786/1156/603 804/1174/620 805/1171/617 +f 808/1165/611 807/1161/607 824/1175/621 825/1176/622 +f 800/1163/609 801/1167/613 818/1177/623 817/1178/624 +f 796/1162/608 808/1165/611 825/1176/622 813/1179/625 +f 801/1167/613 802/1168/614 819/1180/626 818/1177/623 +f 811/1170/616 812/1169/615 829/1181/627 828/1182/628 +f 806/1160/606 805/1171/617 822/1183/629 823/1184/630 +f 802/1168/614 799/1159/605 816/1185/631 819/1180/626 +f 812/1169/615 810/1164/610 827/1186/632 829/1181/627 +f 803/1172/618 811/1170/616 828/1182/628 820/1187/633 +f 797/1173/619 809/1166/612 826/1188/634 814/1189/635 +f 646/1157/25 796/1162/608 813/1179/625 +f 804/1174/620 803/1172/618 820/1187/633 821/1190/636 +f 798/1158/604 797/1173/619 814/1189/635 815/1191/637 +f 809/1166/612 864/1127/64 826/1188/634 +f 805/1171/617 804/1174/620 821/1190/636 822/1183/629 +f 799/1159/605 798/1158/604 815/1191/637 816/1185/631 +f 807/1161/607 806/1160/606 823/1184/630 824/1175/621 +f 810/1164/610 800/1163/609 817/1178/624 827/1186/632 +f 825/1176/622 824/1175/621 841/1192/638 842/1193/639 +f 817/1178/624 818/1177/623 835/1194/640 834/1195/641 +f 813/1179/625 825/1176/622 842/1193/639 830/1196/642 +f 818/1177/623 819/1180/626 836/1197/643 835/1194/640 +f 828/1182/628 829/1181/627 846/1198/644 845/1199/645 +f 823/1184/630 822/1183/629 839/1200/646 840/1201/647 +f 819/1180/626 816/1185/631 833/1202/648 836/1197/643 +f 829/1181/627 827/1186/632 844/1203/649 846/1198/644 +f 820/1187/633 828/1182/628 845/1199/645 837/1204/650 +f 814/1189/635 826/1188/634 843/1205/651 831/1206/652 +f 646/1157/25 813/1179/625 830/1196/642 +f 821/1190/636 820/1187/633 837/1204/650 838/1207/653 +f 815/1191/637 814/1189/635 831/1206/652 832/1208/654 +f 826/1188/634 864/1127/64 843/1205/651 +f 822/1183/629 821/1190/636 838/1207/653 839/1200/646 +f 816/1185/631 815/1191/637 832/1208/654 833/1202/648 +f 824/1175/621 823/1184/630 840/1201/647 841/1192/638 +f 827/1186/632 817/1178/624 834/1195/641 844/1203/649 +f 842/1193/639 841/1192/638 858/1209/655 859/1210/656 +f 834/1195/641 835/1194/640 852/1211/657 851/1212/658 +f 830/1196/642 842/1193/639 859/1210/656 847/1213/659 +f 835/1194/640 836/1197/643 853/1214/660 852/1211/657 +f 845/1199/645 846/1198/644 863/1215/661 862/1216/662 +f 840/1201/647 839/1200/646 856/1217/663 857/1218/664 +f 836/1197/643 833/1202/648 850/1219/665 853/1214/660 +f 846/1198/644 844/1203/649 861/1220/666 863/1215/661 +f 837/1204/650 845/1199/645 862/1216/662 854/1221/667 +f 831/1206/652 843/1205/651 860/1222/668 848/1223/669 +f 646/1157/25 830/1196/642 847/1213/659 +f 838/1207/653 837/1204/650 854/1221/667 855/1224/670 +f 832/1208/654 831/1206/652 848/1223/669 849/1225/671 +f 843/1205/651 864/1127/64 860/1222/668 +f 839/1200/646 838/1207/653 855/1224/670 856/1217/663 +f 833/1202/648 832/1208/654 849/1225/671 850/1219/665 +f 841/1192/638 840/1201/647 857/1218/664 858/1209/655 +f 844/1203/649 834/1195/641 851/1212/658 861/1220/666 +f 859/1210/656 858/1209/655 876/1226/672 877/1227/673 +f 851/1212/658 852/1211/657 870/1228/674 869/1229/675 +f 847/1213/659 859/1210/656 877/1227/673 865/1230/676 +f 852/1211/657 853/1214/660 871/1231/677 870/1228/674 +f 862/1216/662 863/1215/661 881/1232/678 880/1233/679 +f 857/1218/664 856/1217/663 874/1234/680 875/1235/681 +f 853/1214/660 850/1219/665 868/1236/682 871/1231/677 +f 863/1215/661 861/1220/666 879/1237/683 881/1232/678 +f 854/1221/667 862/1216/662 880/1233/679 872/1238/684 +f 848/1223/669 860/1222/668 878/1239/685 866/1240/686 +f 646/1157/25 847/1213/659 865/1230/676 +f 855/1224/670 854/1221/667 872/1238/684 873/1241/687 +f 849/1225/671 848/1223/669 866/1240/686 867/1242/688 +f 860/1222/668 864/1127/64 878/1239/685 +f 856/1217/663 855/1224/670 873/1241/687 874/1234/680 +f 850/1219/665 849/1225/671 867/1242/688 868/1236/682 +f 858/1209/655 857/1218/664 875/1235/681 876/1226/672 +f 861/1220/666 851/1212/658 869/1229/675 879/1237/683 +f 877/1227/673 876/1226/672 893/1243/689 894/1244/690 +f 869/1229/675 870/1228/674 887/1245/691 886/1246/692 +f 865/1230/676 877/1227/673 894/1244/690 882/1247/693 +f 870/1228/674 871/1231/677 888/1248/694 887/1245/691 +f 880/1233/679 881/1232/678 898/1249/695 897/1250/696 +f 875/1235/681 874/1234/680 891/1251/697 892/1252/698 +f 871/1231/677 868/1236/682 885/1253/699 888/1248/694 +f 881/1232/678 879/1237/683 896/1254/700 898/1249/695 +f 872/1238/684 880/1233/679 897/1250/696 889/1255/701 +f 866/1240/686 878/1239/685 895/1256/702 883/1257/703 +f 646/1157/25 865/1230/676 882/1247/693 +f 873/1241/687 872/1238/684 889/1255/701 890/1258/704 +f 867/1242/688 866/1240/686 883/1257/703 884/1259/705 +f 878/1239/685 864/1127/64 895/1256/702 +f 874/1234/680 873/1241/687 890/1258/704 891/1251/697 +f 868/1236/682 867/1242/688 884/1259/705 885/1253/699 +f 876/1226/672 875/1235/681 892/1252/698 893/1243/689 +f 879/1237/683 869/1229/675 886/1246/692 896/1254/700 +f 894/1244/690 893/1243/689 910/1260/706 911/1261/707 +f 886/1246/692 887/1245/691 904/1262/708 903/1263/709 +f 882/1247/693 894/1244/690 911/1261/707 899/1264/710 +f 887/1245/691 888/1248/694 905/1265/711 904/1262/708 +f 897/1250/696 898/1249/695 915/1266/712 914/1267/713 +f 892/1252/698 891/1251/697 908/1268/714 909/1269/715 +f 888/1248/694 885/1253/699 902/1270/716 905/1265/711 +f 898/1249/695 896/1254/700 913/1271/717 915/1266/712 +f 889/1255/701 897/1250/696 914/1267/713 906/1272/718 +f 883/1257/703 895/1256/702 912/1273/719 900/1274/720 +f 646/1157/25 882/1247/693 899/1264/710 +f 890/1258/704 889/1255/701 906/1272/718 907/1275/721 +f 884/1259/705 883/1257/703 900/1274/720 901/1276/722 +f 895/1256/702 864/1127/64 912/1273/719 +f 891/1251/697 890/1258/704 907/1275/721 908/1268/714 +f 885/1253/699 884/1259/705 901/1276/722 902/1270/716 +f 893/1243/689 892/1252/698 909/1269/715 910/1260/706 +f 896/1254/700 886/1246/692 903/1263/709 913/1271/717 +f 911/1261/707 910/1260/706 639/1277/215 640/1278/211 +f 903/1263/709 904/1262/708 632/1279/409 631/1280/285 +f 899/1264/710 911/1261/707 640/1278/211 627/1281/210 +f 904/1262/708 905/1265/711 633/1282/294 632/1279/409 +f 914/1267/713 915/1266/712 645/1283/411 643/1284/262 +f 909/1269/715 908/1268/714 637/1285/236 638/1286/238 +f 905/1265/711 902/1270/716 630/1287/295 633/1282/294 +f 915/1266/712 913/1271/717 642/1288/284 645/1283/411 +f 906/1272/718 914/1267/713 643/1284/262 634/1289/265 +f 900/1274/720 912/1273/719 641/1290/332 628/1291/331 +f 646/1157/25 899/1264/710 627/1281/210 +f 907/1275/721 906/1272/718 634/1289/265 636/1292/408 +f 901/1276/722 900/1274/720 628/1291/331 629/1293/412 +f 912/1273/719 864/1127/64 641/1290/332 +f 908/1268/714 907/1275/721 636/1292/408 637/1285/236 +f 902/1270/716 901/1276/722 629/1293/412 630/1287/295 +f 910/1260/706 909/1269/715 638/1286/238 639/1277/215 +f 913/1271/717 903/1263/709 631/1280/285 642/1288/284 diff --git a/mods/pipeworks/models/pipeworks_spigot_pouring_lowpoly.obj b/mods/pipeworks/models/pipeworks_spigot_pouring_lowpoly.obj new file mode 100755 index 0000000..43787ec --- /dev/null +++ b/mods/pipeworks/models/pipeworks_spigot_pouring_lowpoly.obj @@ -0,0 +1,392 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend' +# www.blender.org +o Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004 +v 0.064721 -0.156250 0.500000 +v 0.156250 -0.064721 0.500000 +v 0.156250 0.064721 0.500000 +v 0.064721 0.156250 0.500000 +v -0.064721 0.156250 0.500000 +v -0.156250 0.064721 0.500000 +v -0.156250 -0.064721 0.500000 +v -0.064721 -0.156250 0.500000 +v 0.156250 -0.064721 0.468750 +v 0.064721 -0.156250 0.468750 +v -0.064721 -0.156250 0.468750 +v -0.156250 -0.064721 0.468750 +v -0.156250 0.064721 0.468750 +v -0.064721 0.156250 0.468750 +v 0.064721 0.156250 0.468750 +v 0.156250 0.064721 0.468750 +v 0.064721 -0.187500 0.156250 +v 0.156250 -0.187500 0.064721 +v 0.156250 -0.187500 -0.064721 +v 0.064721 -0.187500 -0.156250 +v -0.064721 -0.187500 -0.156250 +v -0.156250 -0.187500 -0.064721 +v -0.156250 -0.187500 0.064721 +v -0.064721 -0.187500 0.156250 +v 0.156250 -0.250000 0.064721 +v 0.064721 -0.250000 0.156250 +v -0.064721 -0.250000 0.156250 +v -0.156250 -0.250000 0.064721 +v -0.156250 -0.250000 -0.064721 +v -0.064721 -0.250000 -0.156250 +v 0.064721 -0.250000 -0.156250 +v 0.156250 -0.250000 -0.064721 +v -0.051777 -0.000000 -0.125000 +v -0.125000 -0.000000 -0.051777 +v -0.125000 0.051777 -0.051777 +v -0.088388 0.088388 -0.088388 +v -0.051777 0.051777 -0.125000 +v 0.051777 -0.000000 -0.125000 +v 0.051777 0.051777 -0.125000 +v 0.088388 0.088389 -0.088388 +v 0.125000 0.051777 -0.051777 +v 0.125000 -0.000000 -0.051777 +v 0.125000 0.051777 -0.000000 +v 0.125000 0.000000 0.000000 +v -0.125000 0.000000 0.000000 +v -0.125000 0.051777 -0.000000 +v 0.000000 -0.000000 -0.125000 +v 0.000000 0.051777 -0.125000 +v -0.051777 0.125000 -0.051777 +v 0.051777 0.125000 -0.051777 +v -0.051777 -0.187500 0.125000 +v -0.051777 -0.125000 0.125000 +v -0.125000 -0.051777 0.051777 +v -0.125000 -0.187500 0.051777 +v 0.051777 -0.187500 0.125000 +v 0.125000 -0.187500 0.051777 +v 0.125000 -0.051777 0.051777 +v 0.051777 -0.125000 0.125000 +v -0.125000 -0.051777 0.468750 +v -0.125000 0.051777 0.468750 +v -0.125000 -0.051777 0.000000 +v -0.051777 -0.125000 0.468750 +v 0.125000 -0.051777 0.000000 +v 0.125000 0.051777 0.468750 +v 0.125000 -0.051777 0.468750 +v -0.051777 0.125000 0.468750 +v 0.051777 -0.125000 0.468750 +v 0.051777 0.125000 0.468750 +v 0.125000 -0.051777 -0.051777 +v 0.125000 -0.187500 -0.051777 +v 0.051777 -0.187500 -0.125000 +v -0.125000 -0.051777 -0.051777 +v -0.051777 -0.187500 -0.125000 +v -0.125000 -0.187500 -0.051777 +v 0.091145 -0.250000 0.037754 +v 0.037754 -0.250000 0.091145 +v -0.037754 -0.250000 0.091145 +v -0.091145 -0.250000 0.037754 +v -0.091145 -0.250000 -0.037754 +v -0.037754 -0.250000 -0.091145 +v 0.037754 -0.250000 -0.091145 +v 0.091145 -0.250000 -0.037754 +v 0.037754 -0.562500 0.091145 +v -0.037754 -0.562500 0.091145 +v -0.037754 -0.562500 -0.091145 +v 0.037754 -0.562500 -0.091145 +v 0.091145 -0.562500 0.037754 +v 0.091145 -0.562500 -0.037754 +v -0.091145 -0.562500 0.037754 +v -0.091145 -0.562500 -0.037754 +vt 0.3934 0.4559 +vt 0.4559 0.3934 +vt 0.5441 0.3934 +vt 0.6066 0.4559 +vt 0.6066 0.5441 +vt 0.5441 0.6066 +vt 0.4559 0.6066 +vt 0.3934 0.5441 +vt 0.2500 0.2500 +vt 0.1250 0.2500 +vt 0.1250 -0.0625 +vt 0.2500 -0.0625 +vt 1.0000 0.2500 +vt 0.8750 0.2500 +vt 0.8750 -0.0625 +vt 1.0000 -0.0625 +vt 0.7500 0.2500 +vt 0.6250 0.2500 +vt 0.6250 -0.0625 +vt 0.7500 -0.0625 +vt 0.5000 0.2500 +vt 0.5000 -0.0625 +vt 0.3750 0.2500 +vt 0.3750 -0.0625 +vt 0.0000 0.2500 +vt 0.0000 -0.0625 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 1.0000 0.2656 +vt 0.8750 0.2656 +vt 0.8750 0.2344 +vt 0.9375 0.2188 +vt 1.0000 0.2344 +vt 0.1250 0.2656 +vt 0.1250 0.2344 +vt 0.1875 0.2188 +vt 0.2500 0.2344 +vt 0.2500 0.2656 +vt 0.3125 0.2344 +vt 0.3125 0.2656 +vt 0.7500 0.2344 +vt 0.8125 0.2344 +vt 0.8125 0.2656 +vt 0.7500 0.2656 +vt -0.0000 0.2344 +vt 0.0625 0.2344 +vt 0.0625 0.2656 +vt -0.0000 0.2656 +vt -0.0000 0.2969 +vt 0.0625 0.2969 +vt 0.9375 0.3125 +vt 0.8750 0.2969 +vt 0.8750 0.2344 +vt 0.9375 0.2188 +vt 1.0000 0.2344 +vt 1.0000 0.2656 +vt 1.0000 0.2969 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 1.0000 0.0156 +vt 1.0000 0.2031 +vt 0.8750 0.2344 +vt 0.8750 0.0156 +vt 0.1250 0.0156 +vt 0.2500 0.0156 +vt 0.2500 0.2344 +vt 0.1250 0.2031 +vt 0.8750 0.5156 +vt 0.7500 0.5156 +vt 0.8750 0.2656 +vt 0.8750 0.2969 +vt 1.0000 0.5156 +vt 1.0000 0.3281 +vt 0.2500 0.2969 +vt 0.2500 0.2656 +vt 0.3750 0.2656 +vt 0.3750 0.5156 +vt 0.2500 0.5156 +vt 0.6250 0.5156 +vt 0.6250 0.2344 +vt 0.6875 0.2188 +vt 0.1250 0.5156 +vt -0.0000 0.5156 +vt -0.0000 0.3281 +vt 0.1250 0.3281 +vt 0.5000 0.5156 +vt 0.5000 0.2344 +vt 0.8125 0.6094 +vt 0.8125 0.5469 +vt 0.8750 0.5469 +vt 0.8750 0.6094 +vt 0.9375 0.5469 +vt 0.9375 0.6094 +vt 1.0000 0.5469 +vt 1.0000 0.6094 +vt 0.5000 0.6094 +vt 0.5000 0.5469 +vt 0.5625 0.5469 +vt 0.5625 0.6094 +vt 0.6250 0.5469 +vt 0.6250 0.6094 +vt 0.6875 0.5469 +vt 0.6875 0.6094 +vt 0.7500 0.5469 +vt 0.7500 0.6094 +vt 0.5000 0.2656 +vt 0.3750 0.2656 +vt 0.3750 0.2344 +vt 0.3750 0.0156 +vt 0.5000 0.0156 +vt 0.7500 0.2344 +vt 0.7500 0.2656 +vt 0.6250 0.2656 +vt 0.6250 0.0156 +vt 0.7500 0.0156 +vt 0.5625 0.2656 +vt 0.8125 0.2344 +vt 0.3125 0.2344 +vt -0.0000 0.2031 +vt -0.0000 0.0156 +vt 0.3750 0.2344 +vt 0.4375 0.2188 +vn 0.0000 -1.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 -0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.0000 -0.0000 -1.0000 +vn 0.7071 -0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.0000 1.0000 -0.0000 +vn -0.3827 0.0000 -0.9239 +vn -0.9239 0.0000 -0.3827 +vn -0.6387 0.5441 -0.5441 +vn -0.3251 0.3251 -0.8881 +vn -0.3002 0.3002 -0.9054 +vn 0.3827 0.0000 -0.9239 +vn 0.3002 0.3002 -0.9054 +vn 0.8881 0.3251 -0.3251 +vn 0.9406 -0.1343 -0.3119 +vn 0.9239 0.0000 -0.3827 +vn 0.8171 0.5712 -0.0783 +vn -0.8994 0.3725 -0.2288 +vn -0.0000 0.3827 -0.9239 +vn 0.1343 0.9406 -0.3119 +vn 0.5441 0.6386 -0.5441 +vn 0.2971 -0.7173 -0.6302 +vn 0.2971 -0.7173 0.6302 +vn -0.2971 -0.7173 0.6302 +vn -0.2970 -0.7174 -0.6302 +vn 0.7173 -0.2971 -0.6302 +vn 0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 -0.6302 +vn -0.7173 0.2971 0.6302 +vn -0.7173 0.2971 -0.6302 +vn -0.2971 0.7173 0.6302 +vn -0.2972 0.7173 -0.6302 +vn 0.2971 0.7173 0.6302 +vn 0.2971 0.7173 -0.6302 +vn 0.7173 0.2971 0.6302 +vn 0.7173 0.2971 -0.6302 +vn -0.3827 0.0000 0.9239 +vn -0.5743 -0.5789 0.5789 +vn -0.9878 -0.1101 0.1101 +vn -0.9239 0.0000 0.3827 +vn 0.3827 0.0000 0.9239 +vn 0.9239 0.0000 0.3827 +vn 0.9878 -0.1101 0.1101 +vn 0.5743 -0.5789 0.5789 +vn -0.9239 -0.3827 0.0000 +vn -0.9239 0.3827 -0.0000 +vn -0.3827 -0.9239 0.0000 +vn 0.9239 0.3827 -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.3827 0.9239 -0.0000 +vn 0.7173 -0.6302 0.2971 +vn 0.7173 0.6302 0.2971 +vn 0.2971 0.6302 0.7173 +vn 0.2971 -0.6302 0.7173 +vn -0.2971 0.6302 0.7173 +vn -0.2971 -0.6302 0.7173 +vn -0.7173 0.6302 0.2972 +vn -0.7174 -0.6302 0.2970 +vn -0.7173 0.6302 -0.2971 +vn -0.7173 -0.6302 -0.2971 +vn -0.2971 0.6302 -0.7173 +vn -0.2970 -0.6302 -0.7174 +vn 0.2971 0.6302 -0.7173 +vn 0.2971 -0.6302 -0.7173 +vn 0.7172 0.6302 -0.2973 +vn 0.7174 -0.6302 -0.2969 +g Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_pipe +s off +f 87/1/1 83/2/1 84/3/1 89/4/1 90/5/1 85/6/1 86/7/1 88/8/1 +f 82/9/2 75/10/2 87/11/2 88/12/2 +f 76/13/3 77/14/3 84/15/3 83/16/3 +f 78/17/4 79/18/4 90/19/4 89/20/4 +f 79/18/5 80/21/5 85/22/5 90/19/5 +f 77/14/6 78/17/6 89/20/6 84/15/6 +f 80/21/7 81/23/7 86/24/7 85/22/7 +f 81/23/8 82/9/8 88/12/8 86/24/8 +f 75/10/9 76/25/9 83/26/9 87/11/9 +g Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_pipe_pipeworks_pipe_plain.png +f 1/27/3 2/28/3 3/29/3 4/30/3 5/31/3 6/32/3 7/33/3 8/34/3 +f 9/35/7 10/36/7 11/37/7 12/38/7 13/39/7 14/40/7 15/41/7 16/42/7 +f 17/43/10 18/44/10 19/45/10 20/46/10 21/47/10 22/48/10 23/49/10 24/50/10 +f 25/51/1 26/52/1 27/53/1 28/54/1 29/55/1 30/56/1 31/57/1 32/58/1 +s 1 +f 33/59/11 34/60/12 35/61/13 36/62/14 37/63/15 +f 38/64/16 39/65/17 40/66/18 41/67/19 42/68/20 +f 41/67/19 43/69/21 44/70/2 42/68/20 +f 35/71/13 34/72/12 45/73/4 46/74/22 +f 39/75/17 38/76/16 47/77/7 48/78/23 +f 37/79/15 48/78/23 47/77/7 33/80/11 +f 36/81/14 49/82/24 50/83/25 40/84/18 39/85/17 48/86/23 37/87/15 +f 10/88/26 1/89/27 8/90/28 11/91/29 +f 9/92/30 2/93/31 1/89/27 10/88/26 +f 11/91/29 8/90/28 7/94/32 12/95/33 +f 12/96/33 7/97/32 6/98/34 13/99/35 +f 13/99/35 6/98/34 5/100/36 14/101/37 +f 14/101/37 5/100/36 4/102/38 15/103/39 +f 15/103/39 4/102/38 3/104/40 16/105/41 +f 16/105/41 3/104/40 2/93/31 9/92/30 +f 51/106/42 52/107/43 53/108/44 54/109/45 +f 55/110/46 56/111/47 57/112/48 58/113/49 +f 59/114/50 60/115/51 46/74/22 45/73/4 61/116/4 53/117/44 +f 62/118/52 59/114/50 53/117/44 52/119/43 +f 57/120/48 63/121/2 44/70/2 43/122/21 64/123/53 65/124/54 +f 60/115/51 66/125/55 49/126/24 36/127/14 35/71/13 46/74/22 +f 67/128/56 62/129/52 52/130/43 58/131/49 +f 66/125/55 68/132/57 50/133/25 49/126/24 +f 25/134/58 18/135/59 17/136/60 26/137/61 +f 26/137/61 17/136/60 24/138/62 27/139/63 +f 27/139/63 24/138/62 23/140/64 28/141/65 +f 28/142/65 23/143/64 22/144/66 29/145/67 +f 29/145/67 22/144/66 21/146/68 30/147/69 +f 30/147/69 21/146/68 20/148/70 31/149/71 +f 31/149/71 20/148/70 19/150/72 32/151/73 +f 32/151/73 19/150/72 18/135/59 25/134/58 +f 38/152/16 42/153/20 69/154/20 70/155/20 71/156/16 +f 72/157/12 34/158/12 33/159/11 73/160/11 74/161/12 +f 67/128/56 58/131/49 57/120/48 65/124/54 +f 73/160/11 33/159/11 47/162/7 38/152/16 71/156/16 +f 54/109/45 53/108/44 61/163/4 72/157/12 74/161/12 +f 56/111/47 70/155/20 69/154/20 63/164/2 57/112/48 +f 55/110/46 58/113/49 52/165/43 51/166/42 +f 42/153/20 44/70/2 63/164/2 69/154/20 +f 72/157/12 61/163/4 45/73/4 34/158/12 +f 64/123/53 43/122/21 41/167/19 40/168/18 50/133/25 68/132/57 diff --git a/mods/pipeworks/models/pipeworks_straight_pipe.obj b/mods/pipeworks/models/pipeworks_straight_pipe.obj new file mode 100755 index 0000000..8235047 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_straight_pipe.obj @@ -0,0 +1,2507 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +o Pipe_Cylinder.002_None +v 0.063645 0.130078 -0.460913 +v 0.062468 0.139022 -0.460913 +v 0.054133 0.142474 -0.460913 +v 0.046977 0.136982 -0.460913 +v 0.048154 0.128039 -0.460913 +v 0.056488 0.124587 -0.460913 +v 0.046977 0.136982 0.460913 +v 0.054134 0.142474 0.460913 +v 0.062468 0.139022 0.460913 +v 0.063645 0.130078 0.460913 +v 0.056489 0.124587 0.460913 +v 0.048154 0.128039 0.460913 +v 0.136983 0.046976 -0.460913 +v 0.142475 0.054133 -0.460913 +v 0.139023 0.062467 -0.460913 +v 0.130079 0.063644 -0.460913 +v 0.124588 0.056488 -0.460913 +v 0.128040 0.048154 -0.460913 +v 0.130079 0.063644 0.460913 +v 0.139023 0.062467 0.460913 +v 0.142475 0.054133 0.460913 +v 0.136983 0.046976 0.460913 +v 0.128040 0.048153 0.460913 +v 0.124588 0.056487 0.460913 +v 0.130079 -0.063644 -0.460913 +v 0.139023 -0.062467 -0.460913 +v 0.142475 -0.054132 -0.460913 +v 0.136983 -0.046976 -0.460913 +v 0.128040 -0.048153 -0.460913 +v 0.124588 -0.056487 -0.460913 +v 0.136983 -0.046976 0.460913 +v 0.142475 -0.054133 0.460913 +v 0.139023 -0.062467 0.460913 +v 0.130079 -0.063644 0.460913 +v 0.124588 -0.056488 0.460913 +v 0.128040 -0.048153 0.460913 +v 0.046977 -0.136982 -0.460913 +v 0.054134 -0.142474 -0.460913 +v 0.062468 -0.139022 -0.460913 +v 0.063645 -0.130078 -0.460913 +v 0.056489 -0.124587 -0.460913 +v 0.048154 -0.128039 -0.460913 +v 0.063645 -0.130078 0.460913 +v 0.062468 -0.139022 0.460913 +v 0.054134 -0.142474 0.460913 +v 0.046977 -0.136982 0.460913 +v 0.048154 -0.128039 0.460913 +v 0.056488 -0.124587 0.460913 +v -0.063643 -0.130078 -0.460913 +v -0.062466 -0.139022 -0.460913 +v -0.054131 -0.142474 -0.460913 +v -0.046975 -0.136982 -0.460913 +v -0.048152 -0.128039 -0.460913 +v -0.056486 -0.124587 -0.460913 +v -0.046975 -0.136982 0.460913 +v -0.054132 -0.142474 0.460913 +v -0.062466 -0.139022 0.460913 +v -0.063643 -0.130078 0.460913 +v -0.056486 -0.124587 0.460913 +v -0.048152 -0.128039 0.460913 +v -0.136981 -0.046976 -0.460913 +v -0.142473 -0.054133 -0.460913 +v -0.139021 -0.062467 -0.460913 +v -0.130077 -0.063644 -0.460913 +v -0.124586 -0.056488 -0.460913 +v -0.128038 -0.048153 -0.460913 +v -0.130077 -0.063644 0.460913 +v -0.139021 -0.062467 0.460913 +v -0.142473 -0.054132 0.460913 +v -0.136981 -0.046976 0.460913 +v -0.128038 -0.048153 0.460913 +v -0.124586 -0.056487 0.460913 +v -0.130077 0.063644 -0.460913 +v -0.139021 0.062467 -0.460913 +v -0.142473 0.054132 -0.460913 +v -0.136981 0.046976 -0.460913 +v -0.128038 0.048153 -0.460913 +v -0.124586 0.056487 -0.460913 +v -0.136981 0.046976 0.460913 +v -0.142473 0.054133 0.460913 +v -0.139021 0.062467 0.460913 +v -0.130077 0.063644 0.460913 +v -0.124586 0.056487 0.460913 +v -0.128038 0.048153 0.460913 +v -0.046975 0.136982 -0.460913 +v -0.054132 0.142474 -0.460913 +v -0.062466 0.139022 -0.460913 +v -0.063643 0.130078 -0.460913 +v -0.056487 0.124587 -0.460913 +v -0.048152 0.128039 -0.460913 +v -0.063643 0.130078 0.460913 +v -0.062466 0.139022 0.460913 +v -0.054132 0.142474 0.460913 +v -0.046975 0.136982 0.460913 +v -0.048152 0.128039 0.460913 +v -0.056486 0.124587 0.460913 +v -0.121366 0.099603 0.468749 +v -0.099602 0.121367 0.468749 +v -0.074011 0.138467 0.468749 +v -0.045575 0.150245 0.468749 +v -0.015388 0.156250 0.468749 +v 0.015390 0.156250 0.468749 +v 0.045577 0.150245 0.468749 +v 0.074013 0.138467 0.468749 +v 0.099604 0.121367 0.468749 +v 0.121368 0.099603 0.468749 +v 0.138468 0.074012 0.468749 +v 0.150246 0.045576 0.468749 +v 0.156251 0.015389 0.468749 +v 0.156251 -0.015389 0.468749 +v 0.150246 -0.045576 0.468749 +v 0.138468 -0.074012 0.468749 +v 0.121368 -0.099603 0.468749 +v 0.099604 -0.121367 0.468749 +v 0.074013 -0.138467 0.468749 +v 0.045577 -0.150245 0.468749 +v 0.015390 -0.156250 0.468749 +v -0.015388 -0.156250 0.468749 +v -0.045575 -0.150245 0.468749 +v -0.074011 -0.138466 0.468749 +v -0.099602 -0.121367 0.468749 +v -0.121366 -0.099603 0.468749 +v -0.138466 -0.074012 0.468749 +v -0.150244 -0.045576 0.468749 +v -0.156249 -0.015389 0.468749 +v -0.156249 0.015390 0.468749 +v -0.150244 0.045577 0.468749 +v -0.138466 0.074012 0.468749 +v 0.045577 -0.150245 0.499999 +v 0.074013 -0.138467 0.499999 +v 0.099604 -0.121367 0.499999 +v 0.121368 -0.099603 0.499999 +v 0.138468 -0.074012 0.499999 +v 0.150246 -0.045576 0.499999 +v 0.156251 -0.015389 0.499999 +v 0.156251 0.015389 0.499999 +v 0.150246 0.045576 0.499999 +v 0.138468 0.074012 0.499999 +v 0.121368 0.099603 0.499999 +v 0.099604 0.121367 0.499999 +v 0.074013 0.138467 0.499999 +v 0.045577 0.150245 0.499999 +v 0.015390 0.156250 0.499999 +v -0.015388 0.156250 0.499999 +v -0.045575 0.150245 0.499999 +v -0.074011 0.138467 0.499999 +v -0.099602 0.121367 0.499999 +v -0.121366 0.099603 0.499999 +v -0.138466 0.074012 0.499999 +v -0.150244 0.045577 0.499999 +v -0.156249 0.015390 0.499999 +v -0.156249 -0.015389 0.499999 +v -0.150244 -0.045576 0.499999 +v -0.138466 -0.074012 0.499999 +v -0.121366 -0.099603 0.499999 +v -0.099602 -0.121367 0.499999 +v -0.074011 -0.138466 0.499999 +v -0.045575 -0.150245 0.499999 +v -0.015388 -0.156250 0.499999 +v 0.015390 -0.156250 0.499999 +v 0.015390 -0.156250 -0.468751 +v 0.045577 -0.150245 -0.468751 +v 0.074013 -0.138467 -0.468751 +v 0.099604 -0.121367 -0.468751 +v 0.121368 -0.099603 -0.468751 +v 0.138468 -0.074012 -0.468751 +v 0.150246 -0.045576 -0.468751 +v 0.156251 -0.015389 -0.468751 +v 0.156251 0.015389 -0.468751 +v 0.150246 0.045576 -0.468751 +v 0.138468 0.074012 -0.468751 +v 0.121368 0.099603 -0.468751 +v 0.099604 0.121367 -0.468751 +v 0.074013 0.138467 -0.468751 +v 0.045577 0.150245 -0.468751 +v 0.015390 0.156250 -0.468751 +v -0.015388 0.156249 -0.468751 +v -0.045576 0.150245 -0.468751 +v -0.074011 0.138466 -0.468751 +v -0.099602 0.121367 -0.468751 +v -0.121366 0.099603 -0.468751 +v -0.138466 0.074012 -0.468751 +v -0.150244 0.045576 -0.468751 +v -0.156249 0.015389 -0.468751 +v -0.156249 -0.015389 -0.468751 +v -0.150244 -0.045576 -0.468751 +v -0.138466 -0.074012 -0.468751 +v -0.121366 -0.099603 -0.468751 +v -0.099602 -0.121367 -0.468751 +v -0.074011 -0.138466 -0.468751 +v -0.045575 -0.150245 -0.468751 +v -0.015388 -0.156250 -0.468751 +v -0.074011 -0.138467 -0.500001 +v -0.099602 -0.121367 -0.500001 +v -0.121366 -0.099603 -0.500001 +v -0.138466 -0.074012 -0.500001 +v -0.150244 -0.045576 -0.500001 +v -0.156249 -0.015389 -0.500001 +v -0.156249 0.015389 -0.500001 +v -0.150244 0.045576 -0.500001 +v -0.138466 0.074012 -0.500001 +v -0.121366 0.099603 -0.500001 +v -0.099602 0.121367 -0.500001 +v -0.074011 0.138466 -0.500001 +v -0.045576 0.150245 -0.500001 +v -0.015388 0.156250 -0.500001 +v 0.015390 0.156250 -0.500001 +v 0.045577 0.150245 -0.500001 +v 0.074013 0.138467 -0.500001 +v 0.099604 0.121367 -0.500001 +v 0.121368 0.099603 -0.500001 +v 0.138468 0.074012 -0.500001 +v 0.150246 0.045576 -0.500001 +v 0.156251 0.015389 -0.500001 +v 0.156251 -0.015389 -0.500001 +v 0.150246 -0.045576 -0.500001 +v 0.138468 -0.074012 -0.500001 +v 0.121368 -0.099603 -0.500001 +v 0.099604 -0.121367 -0.500001 +v 0.074013 -0.138467 -0.500001 +v 0.045577 -0.150245 -0.500001 +v 0.015390 -0.156250 -0.500001 +v -0.015388 -0.156250 -0.500001 +v -0.045575 -0.150245 -0.500001 +v 0.108579 0.095821 -0.460913 +v 0.110914 0.104534 -0.460913 +v 0.104535 0.110913 -0.460913 +v 0.095822 0.108578 -0.460913 +v 0.093487 0.099865 -0.460913 +v 0.099866 0.093486 -0.460913 +v 0.095822 0.108578 0.460913 +v 0.104535 0.110913 0.460913 +v 0.110914 0.104534 0.460913 +v 0.108579 0.095821 0.460913 +v 0.099866 0.093486 0.460913 +v 0.093487 0.099865 0.460913 +v 0.144533 -0.009021 -0.460913 +v 0.152345 -0.004510 -0.460913 +v 0.152345 0.004510 -0.460913 +v 0.144533 0.009021 -0.460913 +v 0.136721 0.004510 -0.460913 +v 0.136721 -0.004510 -0.460913 +v 0.144533 0.009021 0.460913 +v 0.152345 0.004510 0.460913 +v 0.152345 -0.004510 0.460913 +v 0.144533 -0.009021 0.460913 +v 0.136721 -0.004510 0.460913 +v 0.136721 0.004510 0.460913 +v 0.095822 -0.108578 -0.460913 +v 0.104535 -0.110913 -0.460913 +v 0.110914 -0.104534 -0.460913 +v 0.108579 -0.095821 -0.460913 +v 0.099866 -0.093486 -0.460913 +v 0.093487 -0.099865 -0.460913 +v 0.108579 -0.095821 0.460913 +v 0.110914 -0.104534 0.460913 +v 0.104535 -0.110913 0.460913 +v 0.095822 -0.108578 0.460913 +v 0.093487 -0.099865 0.460913 +v 0.099866 -0.093486 0.460913 +v -0.009020 -0.144532 -0.460913 +v -0.004509 -0.152344 -0.460913 +v 0.004512 -0.152344 -0.460913 +v 0.009022 -0.144532 -0.460913 +v 0.004511 -0.136720 -0.460913 +v -0.004509 -0.136720 -0.460913 +v 0.009022 -0.144532 0.460913 +v 0.004511 -0.152344 0.460913 +v -0.004509 -0.152344 0.460913 +v -0.009020 -0.144532 0.460913 +v -0.004509 -0.136720 0.460913 +v 0.004511 -0.136720 0.460913 +v -0.108577 -0.095821 -0.460913 +v -0.110912 -0.104534 -0.460913 +v -0.104533 -0.110913 -0.460913 +v -0.095820 -0.108578 -0.460913 +v -0.093485 -0.099865 -0.460913 +v -0.099864 -0.093486 -0.460913 +v -0.095820 -0.108578 0.460913 +v -0.104533 -0.110913 0.460913 +v -0.110912 -0.104534 0.460913 +v -0.108577 -0.095821 0.460913 +v -0.099864 -0.093486 0.460913 +v -0.093485 -0.099865 0.460913 +v -0.144531 0.009021 -0.460913 +v -0.152343 0.004510 -0.460913 +v -0.152343 -0.004510 -0.460913 +v -0.144531 -0.009021 -0.460913 +v -0.136719 -0.004510 -0.460913 +v -0.136719 0.004510 -0.460913 +v -0.144531 -0.009021 0.460913 +v -0.152343 -0.004510 0.460913 +v -0.152343 0.004510 0.460913 +v -0.144531 0.009021 0.460913 +v -0.136719 0.004510 0.460913 +v -0.136719 -0.004510 0.460913 +v -0.095820 0.108578 -0.460913 +v -0.104533 0.110913 -0.460913 +v -0.110912 0.104534 -0.460913 +v -0.108577 0.095821 -0.460913 +v -0.099864 0.093486 -0.460913 +v -0.093485 0.099865 -0.460913 +v -0.108577 0.095821 0.460913 +v -0.110912 0.104534 0.460913 +v -0.104533 0.110913 0.460913 +v -0.095820 0.108578 0.460913 +v -0.093485 0.099865 0.460913 +v -0.099864 0.093486 0.460913 +v 0.009022 0.144532 -0.460913 +v 0.004511 0.152344 -0.460913 +v -0.004509 0.152344 -0.460913 +v -0.009020 0.144532 -0.460913 +v -0.004509 0.136720 -0.460913 +v 0.004511 0.136720 -0.460913 +v -0.009020 0.144532 0.460913 +v -0.004509 0.152344 0.460913 +v 0.004511 0.152344 0.460913 +v 0.009022 0.144532 0.460913 +v 0.004511 0.136720 0.460913 +v -0.004509 0.136720 0.460913 +v 0.062449 0.116832 0.468749 +v 0.059211 0.110774 0.437500 +v 0.036462 0.120197 0.437500 +v 0.038456 0.126770 0.468749 +v 0.012986 0.131837 0.468749 +v 0.012313 0.125000 0.437500 +v -0.012983 0.131837 0.468749 +v -0.012310 0.125001 0.437500 +v -0.038454 0.126770 0.468749 +v -0.036460 0.120197 0.437500 +v -0.062447 0.116832 0.468749 +v -0.059209 0.110774 0.437500 +v -0.084040 0.102404 0.468749 +v -0.079682 0.097094 0.437500 +v -0.097093 0.079683 0.437500 +v -0.102403 0.084041 0.468749 +v -0.116831 0.062448 0.468749 +v -0.110773 0.059210 0.437500 +v -0.126769 0.038455 0.468749 +v -0.120196 0.036461 0.437500 +v -0.131835 0.012985 0.468749 +v -0.124999 0.012312 0.437500 +v -0.124999 -0.012311 0.437500 +v -0.131835 -0.012985 0.468749 +v -0.120196 -0.036461 0.437500 +v -0.126769 -0.038455 0.468749 +v -0.116831 -0.062448 0.468749 +v -0.110773 -0.059210 0.437500 +v -0.097093 -0.079683 0.437500 +v -0.102403 -0.084041 0.468749 +v -0.079682 -0.097094 0.437500 +v -0.084040 -0.102404 0.468749 +v -0.062447 -0.116832 0.468749 +v -0.059209 -0.110774 0.437500 +v -0.036460 -0.120197 0.437500 +v -0.038454 -0.126770 0.468749 +v -0.012984 -0.131836 0.468749 +v -0.012310 -0.125000 0.437500 +v 0.012312 -0.125000 0.437500 +v 0.012986 -0.131836 0.468749 +v 0.038456 -0.126770 0.468749 +v 0.036462 -0.120197 0.437500 +v 0.059211 -0.110774 0.437500 +v 0.062449 -0.116832 0.468749 +v 0.079684 -0.097094 0.437500 +v 0.084042 -0.102404 0.468749 +v 0.097095 -0.079683 0.437500 +v 0.102405 -0.084041 0.468749 +v 0.110775 -0.059210 0.437500 +v 0.116833 -0.062448 0.468749 +v 0.120198 -0.036461 0.437500 +v 0.126771 -0.038455 0.468749 +v 0.125002 -0.012311 0.437500 +v 0.131837 -0.012985 0.468749 +v 0.126771 0.038455 0.468749 +v 0.131838 0.012985 0.468749 +v 0.125002 0.012311 0.437500 +v 0.120198 0.036461 0.437500 +v 0.102405 0.084041 0.468749 +v 0.116833 0.062448 0.468749 +v 0.110775 0.059210 0.437500 +v 0.097095 0.079683 0.437500 +v 0.084042 0.102404 0.468749 +v 0.079684 0.097094 0.437500 +v -0.124999 -0.012311 -0.437502 +v -0.125000 0.012312 -0.437502 +v -0.131835 0.012985 -0.468751 +v -0.120196 0.036461 -0.437502 +v -0.126769 0.038455 -0.468751 +v -0.131835 -0.012985 -0.468751 +v -0.126769 -0.038455 -0.468751 +v -0.120196 -0.036461 -0.437502 +v -0.110773 0.059210 -0.437502 +v -0.097093 0.079683 -0.437502 +v -0.116831 0.062448 -0.468751 +v -0.116831 -0.062448 -0.468751 +v -0.110773 -0.059210 -0.437502 +v -0.102403 0.084041 -0.468751 +v -0.102403 -0.084041 -0.468751 +v -0.097093 -0.079683 -0.437502 +v -0.084040 0.102404 -0.468751 +v -0.079682 0.097094 -0.437502 +v -0.084040 -0.102404 -0.468751 +v -0.079682 -0.097094 -0.437502 +v -0.062447 0.116832 -0.468751 +v -0.059209 0.110774 -0.437502 +v -0.062447 -0.116832 -0.468751 +v -0.059209 -0.110774 -0.437502 +v -0.038454 0.126770 -0.468751 +v -0.036460 0.120197 -0.437502 +v -0.038454 -0.126770 -0.468751 +v -0.036460 -0.120197 -0.437502 +v -0.012984 0.131836 -0.468751 +v -0.012310 0.125000 -0.437502 +v -0.012984 -0.131837 -0.468751 +v -0.012310 -0.125001 -0.437502 +v 0.012986 0.131836 -0.468751 +v 0.012313 0.125000 -0.437502 +v 0.012986 -0.131837 -0.468751 +v 0.012312 -0.125001 -0.437502 +v 0.110775 -0.059210 -0.437502 +v 0.097095 -0.079683 -0.437502 +v 0.038456 0.126770 -0.468751 +v 0.036462 0.120197 -0.437502 +v 0.038456 -0.126770 -0.468751 +v 0.036462 -0.120197 -0.437502 +v 0.062449 0.116832 -0.468751 +v 0.059211 0.110774 -0.437502 +v 0.062449 -0.116832 -0.468751 +v 0.059211 -0.110774 -0.437502 +v 0.084042 0.102404 -0.468751 +v 0.079684 0.097094 -0.437502 +v 0.084042 -0.102404 -0.468751 +v 0.079684 -0.097094 -0.437502 +v 0.102405 0.084041 -0.468751 +v 0.097095 0.079683 -0.437502 +v 0.102405 -0.084041 -0.468751 +v 0.120198 0.036461 -0.437502 +v 0.110775 0.059210 -0.437502 +v 0.116833 0.062448 -0.468751 +v 0.116833 -0.062448 -0.468751 +v 0.126771 0.038455 -0.468751 +v 0.126771 -0.038455 -0.468751 +v 0.120198 -0.036461 -0.437502 +v 0.131838 0.012985 -0.468751 +v 0.125001 0.012311 -0.437502 +v 0.131837 -0.012985 -0.468751 +v 0.125001 -0.012311 -0.437502 +v 0.063645 0.130078 -0.468750 +v 0.062468 0.139022 -0.468750 +v 0.056488 0.124587 -0.468750 +v 0.054133 0.142474 -0.468750 +v 0.046977 0.136982 -0.468750 +v 0.048154 0.128039 -0.468750 +v 0.046977 0.136982 0.468750 +v 0.054134 0.142474 0.468750 +v 0.048154 0.128039 0.468750 +v 0.062468 0.139022 0.468750 +v 0.063645 0.130078 0.468750 +v 0.056489 0.124587 0.468750 +v 0.136983 0.046976 -0.468750 +v 0.142475 0.054133 -0.468750 +v 0.128040 0.048154 -0.468750 +v 0.139023 0.062467 -0.468750 +v 0.130079 0.063644 -0.468750 +v 0.124588 0.056488 -0.468750 +v 0.130079 0.063644 0.468750 +v 0.139023 0.062467 0.468750 +v 0.124588 0.056487 0.468750 +v 0.142475 0.054133 0.468750 +v 0.136983 0.046976 0.468750 +v 0.128040 0.048153 0.468750 +v 0.130079 -0.063644 -0.468750 +v 0.139023 -0.062467 -0.468750 +v 0.124588 -0.056487 -0.468750 +v 0.142475 -0.054132 -0.468750 +v 0.136983 -0.046976 -0.468750 +v 0.128040 -0.048153 -0.468750 +v 0.136983 -0.046976 0.468750 +v 0.142475 -0.054133 0.468750 +v 0.128040 -0.048153 0.468750 +v 0.139023 -0.062467 0.468750 +v 0.130079 -0.063644 0.468750 +v 0.124588 -0.056488 0.468750 +v 0.046977 -0.136982 -0.468750 +v 0.054134 -0.142474 -0.468750 +v 0.048154 -0.128039 -0.468750 +v 0.062468 -0.139022 -0.468750 +v 0.063645 -0.130078 -0.468750 +v 0.056489 -0.124587 -0.468750 +v 0.063645 -0.130078 0.468750 +v 0.062468 -0.139022 0.468750 +v 0.056488 -0.124587 0.468750 +v 0.054134 -0.142474 0.468750 +v 0.046977 -0.136982 0.468750 +v 0.048154 -0.128039 0.468750 +v -0.063643 -0.130078 -0.468750 +v -0.062466 -0.139022 -0.468750 +v -0.056486 -0.124587 -0.468750 +v -0.054131 -0.142474 -0.468750 +v -0.046975 -0.136982 -0.468750 +v -0.048152 -0.128039 -0.468750 +v -0.046975 -0.136982 0.468750 +v -0.054132 -0.142474 0.468750 +v -0.048152 -0.128039 0.468750 +v -0.062466 -0.139022 0.468750 +v -0.063643 -0.130078 0.468750 +v -0.056486 -0.124587 0.468750 +v -0.136981 -0.046976 -0.468750 +v -0.142473 -0.054133 -0.468750 +v -0.128038 -0.048153 -0.468750 +v -0.139021 -0.062467 -0.468750 +v -0.130077 -0.063644 -0.468750 +v -0.124586 -0.056488 -0.468750 +v -0.130077 -0.063644 0.468750 +v -0.139021 -0.062467 0.468750 +v -0.124586 -0.056487 0.468750 +v -0.142473 -0.054132 0.468750 +v -0.136981 -0.046976 0.468750 +v -0.128038 -0.048153 0.468750 +v -0.130077 0.063644 -0.468750 +v -0.139021 0.062467 -0.468750 +v -0.124586 0.056487 -0.468750 +v -0.142473 0.054132 -0.468750 +v -0.136981 0.046976 -0.468750 +v -0.128038 0.048153 -0.468750 +v -0.136981 0.046976 0.468750 +v -0.142473 0.054133 0.468750 +v -0.128038 0.048153 0.468750 +v -0.139021 0.062467 0.468750 +v -0.130077 0.063644 0.468750 +v -0.124586 0.056487 0.468750 +v -0.046975 0.136982 -0.468750 +v -0.054132 0.142474 -0.468750 +v -0.048152 0.128039 -0.468750 +v -0.062466 0.139022 -0.468750 +v -0.063643 0.130078 -0.468750 +v -0.056487 0.124587 -0.468750 +v -0.063643 0.130078 0.468750 +v -0.062466 0.139022 0.468750 +v -0.056486 0.124587 0.468750 +v -0.054132 0.142474 0.468750 +v -0.046975 0.136982 0.468750 +v -0.048152 0.128039 0.468750 +v 0.108579 0.095821 -0.468750 +v 0.110914 0.104534 -0.468750 +v 0.099866 0.093486 -0.468750 +v 0.104535 0.110913 -0.468750 +v 0.095822 0.108578 -0.468750 +v 0.093487 0.099865 -0.468750 +v 0.095822 0.108578 0.468750 +v 0.104535 0.110913 0.468750 +v 0.093487 0.099865 0.468750 +v 0.110914 0.104534 0.468750 +v 0.108579 0.095821 0.468750 +v 0.099866 0.093486 0.468750 +v 0.144533 -0.009021 -0.468750 +v 0.152345 -0.004510 -0.468750 +v 0.136721 -0.004510 -0.468750 +v 0.152345 0.004510 -0.468750 +v 0.144533 0.009021 -0.468750 +v 0.136721 0.004510 -0.468750 +v 0.144533 0.009021 0.468750 +v 0.152345 0.004510 0.468750 +v 0.136721 0.004510 0.468750 +v 0.152345 -0.004510 0.468750 +v 0.144533 -0.009021 0.468750 +v 0.136721 -0.004510 0.468750 +v 0.095822 -0.108578 -0.468750 +v 0.104535 -0.110913 -0.468750 +v 0.093487 -0.099865 -0.468750 +v 0.110914 -0.104534 -0.468750 +v 0.108579 -0.095821 -0.468750 +v 0.099866 -0.093486 -0.468750 +v 0.108579 -0.095821 0.468750 +v 0.110914 -0.104534 0.468750 +v 0.099866 -0.093486 0.468750 +v 0.104535 -0.110913 0.468750 +v 0.095822 -0.108578 0.468750 +v 0.093487 -0.099865 0.468750 +v -0.009020 -0.144532 -0.468750 +v -0.004509 -0.152344 -0.468750 +v -0.004509 -0.136720 -0.468750 +v 0.004512 -0.152344 -0.468750 +v 0.009022 -0.144532 -0.468750 +v 0.004511 -0.136720 -0.468750 +v 0.009022 -0.144532 0.468750 +v 0.004511 -0.152344 0.468750 +v 0.004511 -0.136720 0.468750 +v -0.004509 -0.152344 0.468750 +v -0.009020 -0.144532 0.468750 +v -0.004509 -0.136720 0.468750 +v -0.108577 -0.095821 -0.468750 +v -0.110912 -0.104534 -0.468750 +v -0.099864 -0.093486 -0.468750 +v -0.104533 -0.110913 -0.468750 +v -0.095820 -0.108578 -0.468750 +v -0.093485 -0.099865 -0.468750 +v -0.095820 -0.108578 0.468750 +v -0.104533 -0.110913 0.468750 +v -0.093485 -0.099865 0.468750 +v -0.110912 -0.104534 0.468750 +v -0.108577 -0.095821 0.468750 +v -0.099864 -0.093486 0.468750 +v -0.144531 0.009021 -0.468750 +v -0.152343 0.004510 -0.468750 +v -0.136719 0.004510 -0.468750 +v -0.152343 -0.004510 -0.468750 +v -0.144531 -0.009021 -0.468750 +v -0.136719 -0.004510 -0.468750 +v -0.144531 -0.009021 0.468750 +v -0.152343 -0.004510 0.468750 +v -0.136719 -0.004510 0.468750 +v -0.152343 0.004510 0.468750 +v -0.144531 0.009021 0.468750 +v -0.136719 0.004510 0.468750 +v -0.095820 0.108578 -0.468750 +v -0.104533 0.110913 -0.468750 +v -0.093485 0.099865 -0.468750 +v -0.110912 0.104534 -0.468750 +v -0.108577 0.095821 -0.468750 +v -0.099864 0.093486 -0.468750 +v -0.108577 0.095821 0.468750 +v -0.110912 0.104534 0.468750 +v -0.099864 0.093486 0.468750 +v -0.104533 0.110913 0.468750 +v -0.095820 0.108578 0.468750 +v -0.093485 0.099865 0.468750 +v 0.009022 0.144532 -0.468750 +v 0.004511 0.152344 -0.468750 +v 0.004511 0.136720 -0.468750 +v -0.004509 0.152344 -0.468750 +v -0.009020 0.144532 -0.468750 +v -0.004509 0.136720 -0.468750 +v -0.009020 0.144532 0.468750 +v -0.004509 0.152344 0.468750 +v -0.004509 0.136720 0.468750 +v 0.004511 0.152344 0.468750 +v 0.009022 0.144532 0.468750 +v 0.004511 0.136720 0.468750 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4412 0.9276 +vt 0.4630 0.9493 +vt 0.4886 0.9664 +vt 0.5170 0.9782 +vt 0.5472 0.9842 +vt 0.5780 0.9842 +vt 0.6082 0.9782 +vt 0.6366 0.9664 +vt 0.6622 0.9493 +vt 0.6840 0.9276 +vt 0.7011 0.9020 +vt 0.7129 0.8735 +vt 0.7189 0.8434 +vt 0.7189 0.8126 +vt 0.7129 0.7824 +vt 0.7011 0.7539 +vt 0.6840 0.7283 +vt 0.6622 0.7066 +vt 0.6366 0.6895 +vt 0.6082 0.6777 +vt 0.5780 0.6717 +vt 0.5472 0.6717 +vt 0.5170 0.6777 +vt 0.4886 0.6895 +vt 0.4630 0.7066 +vt 0.4412 0.7283 +vt 0.4241 0.7539 +vt 0.4124 0.7824 +vt 0.4063 0.8126 +vt 0.4063 0.8434 +vt 0.4124 0.8735 +vt 0.4241 0.9020 +vt 0.2332 0.6777 +vt 0.2616 0.6895 +vt 0.2872 0.7066 +vt 0.3090 0.7283 +vt 0.3261 0.7539 +vt 0.3379 0.7824 +vt 0.3439 0.8126 +vt 0.3439 0.8434 +vt 0.3379 0.8735 +vt 0.3261 0.9020 +vt 0.3090 0.9276 +vt 0.2872 0.9493 +vt 0.2616 0.9664 +vt 0.2332 0.9782 +vt 0.2030 0.9842 +vt 0.1722 0.9842 +vt 0.1420 0.9782 +vt 0.1136 0.9664 +vt 0.0880 0.9493 +vt 0.0662 0.9276 +vt 0.0491 0.9020 +vt 0.0374 0.8735 +vt 0.0313 0.8434 +vt 0.0313 0.8126 +vt 0.0374 0.7824 +vt 0.0491 0.7539 +vt 0.0662 0.7283 +vt 0.0880 0.7066 +vt 0.1136 0.6895 +vt 0.1420 0.6777 +vt 0.1722 0.6717 +vt 0.2030 0.6717 +vt 0.5780 0.6717 +vt 0.6082 0.6777 +vt 0.6366 0.6895 +vt 0.6622 0.7066 +vt 0.6840 0.7283 +vt 0.7011 0.7539 +vt 0.7129 0.7824 +vt 0.7189 0.8126 +vt 0.7189 0.8434 +vt 0.7129 0.8735 +vt 0.7011 0.9020 +vt 0.6840 0.9276 +vt 0.6622 0.9493 +vt 0.6366 0.9664 +vt 0.6082 0.9782 +vt 0.5780 0.9842 +vt 0.5472 0.9842 +vt 0.5170 0.9782 +vt 0.4886 0.9664 +vt 0.4630 0.9493 +vt 0.4412 0.9276 +vt 0.4241 0.9020 +vt 0.4124 0.8735 +vt 0.4063 0.8434 +vt 0.4063 0.8126 +vt 0.4124 0.7824 +vt 0.4241 0.7539 +vt 0.4412 0.7283 +vt 0.4630 0.7066 +vt 0.4886 0.6895 +vt 0.5170 0.6777 +vt 0.5472 0.6717 +vt 0.1136 0.6895 +vt 0.0880 0.7066 +vt 0.0662 0.7283 +vt 0.0491 0.7539 +vt 0.0374 0.7824 +vt 0.0313 0.8126 +vt 0.0313 0.8434 +vt 0.0374 0.8735 +vt 0.0491 0.9020 +vt 0.0662 0.9276 +vt 0.0880 0.9493 +vt 0.1136 0.9664 +vt 0.1420 0.9782 +vt 0.1722 0.9842 +vt 0.2030 0.9842 +vt 0.2332 0.9782 +vt 0.2616 0.9664 +vt 0.2872 0.9493 +vt 0.3090 0.9276 +vt 0.3261 0.9020 +vt 0.3379 0.8735 +vt 0.3439 0.8434 +vt 0.3439 0.8126 +vt 0.3379 0.7824 +vt 0.3261 0.7539 +vt 0.3090 0.7283 +vt 0.2872 0.7066 +vt 0.2616 0.6895 +vt 0.2332 0.6777 +vt 0.2030 0.6717 +vt 0.1722 0.6717 +vt 0.1420 0.6777 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.6875 0.7186 +vt 0.7009 0.7108 +vt 0.7009 0.6953 +vt 0.6875 0.6875 +vt 0.6740 0.6953 +vt 0.6740 0.7108 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.5000 0.5664 +vt 0.5000 0.5898 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.1875 0.5898 +vt 0.1875 0.5664 +vt 0.1562 0.5898 +vt 0.1562 0.5664 +vt 0.1250 0.5898 +vt 0.1250 0.5664 +vt 0.0938 0.5898 +vt 0.0938 0.5664 +vt 0.0625 0.5898 +vt 0.0625 0.5664 +vt 0.0937 0.5664 +vt 0.0312 0.5898 +vt 0.0312 0.5664 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.9688 0.5898 +vt 0.9688 0.5664 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.9375 0.5898 +vt 0.9375 0.5664 +vt 0.9062 0.5898 +vt 0.9062 0.5664 +vt 0.8750 0.5898 +vt 0.8750 0.5664 +vt 0.8125 0.5898 +vt 0.8125 0.5664 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.7500 0.5898 +vt 0.7500 0.5664 +vt 0.7188 0.5898 +vt 0.7188 0.5664 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.6562 0.5664 +vt 0.6562 0.5898 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 0.5625 0.5898 +vt 0.5625 0.5664 +vt 0.6748 0.5124 +vt 0.6748 0.4980 +vt 0.7057 0.4980 +vt 0.7057 0.5123 +vt 0.7367 0.5124 +vt 0.7367 0.4980 +vt 0.7676 0.5123 +vt 0.7676 0.4980 +vt 0.7985 0.5123 +vt 0.7986 0.4980 +vt 0.8294 0.5124 +vt 0.8295 0.4980 +vt 0.8604 0.5125 +vt 0.8604 0.4980 +vt 0.8914 0.4981 +vt 0.8913 0.5124 +vt 0.9222 0.5125 +vt 0.9223 0.4981 +vt 0.9531 0.5126 +vt 0.9533 0.4982 +vt 0.9842 0.5128 +vt 0.9844 0.4983 +vt 1.0155 0.4983 +vt 1.0153 0.5128 +vt 1.0465 0.4984 +vt 1.0463 0.5128 +vt 1.0774 0.5128 +vt 1.0775 0.4984 +vt 1.1085 0.4984 +vt 1.1085 0.5129 +vt 1.1396 0.4984 +vt 1.1396 0.5128 +vt 1.1709 0.5129 +vt 1.1705 0.4983 +vt 1.2015 0.4982 +vt 1.2025 0.5126 +vt 1.2342 0.5121 +vt 1.2320 0.4978 +vt 0.2391 0.5120 +vt 0.2412 0.4977 +vt 0.2718 0.4981 +vt 0.2708 0.5126 +vt 0.3025 0.5129 +vt 0.3029 0.4982 +vt 0.3341 0.4983 +vt 0.3340 0.5129 +vt 0.3652 0.4982 +vt 0.3653 0.5127 +vt 0.3961 0.4982 +vt 0.3962 0.5126 +vt 0.4271 0.4982 +vt 0.4272 0.5126 +vt 0.4580 0.4981 +vt 0.4581 0.5125 +vt 0.4889 0.4981 +vt 0.4890 0.5124 +vt 0.5509 0.5125 +vt 0.5199 0.5124 +vt 0.5198 0.4981 +vt 0.5508 0.4980 +vt 0.6128 0.5124 +vt 0.5818 0.5124 +vt 0.5818 0.4980 +vt 0.6127 0.4980 +vt 0.6438 0.5125 +vt 0.6438 0.4980 +vt 1.0175 0.0339 +vt 0.9866 0.0339 +vt 0.9867 0.0196 +vt 0.9559 0.0339 +vt 0.9559 0.0196 +vt 1.0175 0.0195 +vt 1.0484 0.0195 +vt 1.0483 0.0339 +vt 0.9251 0.0339 +vt 0.8944 0.0338 +vt 0.9252 0.0196 +vt 1.0793 0.0195 +vt 1.0791 0.0339 +vt 0.8945 0.0195 +vt 1.1102 0.0196 +vt 1.1099 0.0339 +vt 0.8637 0.0194 +vt 0.8636 0.0338 +vt 0.6875 0.5898 +vt 0.6875 0.5664 +vt 0.7188 0.5664 +vt 0.7188 0.5898 +vt 0.7812 0.5898 +vt 0.7812 0.5664 +vt 0.8125 0.5664 +vt 0.8125 0.5898 +vt 1.1412 0.0197 +vt 1.1407 0.0340 +vt 0.6562 0.5898 +vt 0.6562 0.5664 +vt 0.8329 0.0194 +vt 0.8328 0.0337 +vt 0.8438 0.5664 +vt 0.8438 0.5898 +vt 1.1722 0.0198 +vt 1.1714 0.0342 +vt 0.6250 0.5898 +vt 0.6250 0.5664 +vt 0.8021 0.0193 +vt 0.8019 0.0336 +vt 0.5938 0.5898 +vt 0.5938 0.5664 +vt 1.2032 0.0202 +vt 1.2018 0.0344 +vt 0.5312 0.5898 +vt 0.5312 0.5664 +vt 0.5625 0.5664 +vt 0.5625 0.5898 +vt 0.7712 0.0192 +vt 0.7710 0.0335 +vt 0.8750 0.5664 +vt 0.8750 0.5898 +vt 1.2342 0.0209 +vt 1.2316 0.0349 +vt 0.5000 0.5898 +vt 0.5000 0.5664 +vt 0.7403 0.0191 +vt 0.7402 0.0334 +vt 0.9062 0.5664 +vt 0.9062 0.5898 +vt 0.2728 0.0171 +vt 0.2735 0.0318 +vt 0.2423 0.0321 +vt 0.2405 0.0175 +vt 0.5312 0.5664 +vt 0.5312 0.5898 +vt 0.4688 0.5898 +vt 0.4688 0.5664 +vt 0.4300 0.0320 +vt 0.3987 0.0320 +vt 0.7094 0.0189 +vt 0.7093 0.0333 +vt 0.9375 0.5664 +vt 0.9375 0.5898 +vt 0.3049 0.0170 +vt 0.3050 0.0317 +vt 0.4375 0.5898 +vt 0.4375 0.5664 +vt 0.6785 0.0188 +vt 0.6783 0.0332 +vt 0.9688 0.5664 +vt 0.9688 0.5898 +vt 0.3366 0.0171 +vt 0.3364 0.0317 +vt 0.4062 0.5898 +vt 0.4062 0.5664 +vt 0.6476 0.0187 +vt 0.6474 0.0331 +vt 0.0000 0.5898 +vt 0.0000 0.5664 +vt 0.0312 0.5664 +vt 0.0312 0.5898 +vt 0.3679 0.0173 +vt 0.3676 0.0318 +vt 1.0000 0.5664 +vt 1.0000 0.5898 +vt 0.6167 0.0186 +vt 0.6165 0.0330 +vt 0.0625 0.5664 +vt 0.0625 0.5898 +vt 0.7500 0.5664 +vt 0.7500 0.5898 +vt 0.3991 0.0174 +vt 0.3750 0.5898 +vt 0.3750 0.5664 +vt 0.5545 0.0327 +vt 0.5855 0.0328 +vt 0.5858 0.0184 +vt 0.0937 0.5664 +vt 0.0938 0.5898 +vt 0.4303 0.0175 +vt 0.3438 0.5898 +vt 0.3438 0.5664 +vt 0.5548 0.0183 +vt 0.0938 0.5664 +vt 0.1250 0.5664 +vt 0.1250 0.5898 +vt 0.4616 0.0177 +vt 0.4612 0.0322 +vt 0.3125 0.5898 +vt 0.3125 0.5664 +vt 0.5238 0.0181 +vt 0.5234 0.0325 +vt 0.1562 0.5664 +vt 0.1562 0.5898 +vt 0.4927 0.0179 +vt 0.4924 0.0324 +vt 0.2812 0.5898 +vt 0.2812 0.5664 +vt 0.2500 0.5898 +vt 0.2500 0.5664 +vt 0.1875 0.5664 +vt 0.1875 0.5898 +vt 0.2188 0.5898 +vt 0.2188 0.5664 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vt 0.6875 0.6719 +vt 0.6875 0.6562 +vt 0.7031 0.6562 +vt 0.7031 0.6719 +vt 0.6719 0.6719 +vt 0.6719 0.6562 +vt 0.7188 0.6562 +vt 0.7188 0.6719 +vt 0.7344 0.6562 +vt 0.7344 0.6719 +vt 0.6406 0.6719 +vt 0.6406 0.6562 +vt 0.6562 0.6562 +vt 0.6562 0.6719 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.6965 0.2113 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.6419 0.3431 0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.7244 0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.6965 -0.2114 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.6419 -0.3431 0.6857 +vn -0.5626 -0.4617 -0.6857 +vn -0.5626 -0.4617 0.6857 +vn -0.4617 -0.5627 -0.6857 +vn -0.4617 -0.5627 0.6857 +vn -0.3429 -0.6420 -0.6857 +vn -0.3433 -0.6418 0.6857 +vn -0.2112 -0.6966 -0.6857 +vn -0.2114 -0.6965 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn 0.0713 -0.7244 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn 0.2112 -0.6966 0.6857 +vn 0.3432 -0.6419 -0.6857 +vn 0.3430 -0.6420 0.6857 +vn 0.4617 -0.5626 -0.6857 +vn 0.4618 -0.5626 0.6857 +vn 0.5626 -0.4617 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.6419 -0.3431 -0.6857 +vn 0.6419 -0.3431 0.6857 +vn 0.6965 -0.2114 -0.6857 +vn 0.6965 -0.2114 0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.6965 0.2113 -0.6857 +vn 0.6965 0.2113 0.6857 +vn 0.5626 0.4617 -0.6857 +vn 0.5626 0.4617 0.6857 +vn 0.6419 0.3431 0.6857 +vn 0.6419 0.3431 -0.6857 +vn 0.4617 0.5626 -0.6857 +vn 0.4616 0.5628 0.6857 +vn 0.3430 0.6420 -0.6857 +vn 0.3432 0.6419 0.6857 +vn 0.2115 0.6965 -0.6857 +vn 0.2113 0.6965 0.6857 +vn 0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn -0.2112 0.6966 -0.6857 +vn -0.2114 0.6965 0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn -0.3432 0.6419 -0.6857 +vn -0.3430 0.6420 0.6857 +vn -0.4616 0.5628 -0.6857 +vn -0.4618 0.5625 0.6857 +vn 0.4604 0.8614 -0.2147 +vn 0.4686 0.8767 -0.1087 +vn 0.2886 0.9513 -0.1087 +vn 0.2835 0.9346 -0.2147 +vn 0.0957 0.9720 -0.2147 +vn 0.0974 0.9893 -0.1087 +vn -0.0957 0.9720 -0.2147 +vn -0.0974 0.9893 -0.1087 +vn -0.2835 0.9346 -0.2147 +vn -0.2886 0.9513 -0.1087 +vn -0.4604 0.8614 -0.2147 +vn -0.4686 0.8767 -0.1087 +vn -0.6196 0.7550 -0.2147 +vn -0.6306 0.7684 -0.1087 +vn -0.7684 0.6306 -0.1087 +vn -0.7550 0.6196 -0.2147 +vn -0.8614 0.4604 -0.2147 +vn -0.8767 0.4686 -0.1087 +vn -0.9346 0.2835 -0.2147 +vn -0.9513 0.2886 -0.1087 +vn -0.9720 0.0957 -0.2147 +vn -0.9893 0.0974 -0.1087 +vn -0.9893 -0.0974 -0.1087 +vn -0.9720 -0.0957 -0.2147 +vn -0.9513 -0.2886 -0.1087 +vn -0.9346 -0.2835 -0.2147 +vn -0.8614 -0.4604 -0.2147 +vn -0.8767 -0.4686 -0.1087 +vn -0.7684 -0.6306 -0.1087 +vn -0.7550 -0.6196 -0.2147 +vn -0.6306 -0.7684 -0.1087 +vn -0.6196 -0.7550 -0.2147 +vn -0.4604 -0.8614 -0.2147 +vn -0.4686 -0.8767 -0.1087 +vn -0.2886 -0.9513 -0.1087 +vn -0.2835 -0.9346 -0.2147 +vn -0.0957 -0.9720 -0.2147 +vn -0.0974 -0.9893 -0.1087 +vn 0.0974 -0.9893 -0.1087 +vn 0.0957 -0.9720 -0.2147 +vn 0.2835 -0.9346 -0.2147 +vn 0.2886 -0.9513 -0.1087 +vn 0.4686 -0.8767 -0.1087 +vn 0.4604 -0.8614 -0.2147 +vn 0.6306 -0.7684 -0.1087 +vn 0.6196 -0.7550 -0.2147 +vn 0.7684 -0.6306 -0.1087 +vn 0.7550 -0.6196 -0.2147 +vn 0.8767 -0.4686 -0.1087 +vn 0.8614 -0.4604 -0.2147 +vn 0.9513 -0.2886 -0.1087 +vn 0.9346 -0.2835 -0.2147 +vn 0.9893 -0.0974 -0.1087 +vn 0.9720 -0.0957 -0.2147 +vn 0.9346 0.2835 -0.2147 +vn 0.9720 0.0957 -0.2147 +vn 0.9893 0.0974 -0.1087 +vn 0.9513 0.2886 -0.1087 +vn 0.7550 0.6196 -0.2147 +vn 0.8614 0.4604 -0.2147 +vn 0.8767 0.4686 -0.1087 +vn 0.7684 0.6306 -0.1087 +vn 0.6196 0.7550 -0.2147 +vn 0.6306 0.7684 -0.1087 +vn -0.9893 -0.0974 0.1087 +vn -0.9893 0.0974 0.1087 +vn -0.9720 0.0957 0.2147 +vn -0.9513 0.2886 0.1087 +vn -0.9346 0.2835 0.2147 +vn -0.9720 -0.0957 0.2147 +vn -0.9346 -0.2835 0.2147 +vn -0.9513 -0.2886 0.1087 +vn -0.8767 0.4686 0.1087 +vn -0.7684 0.6306 0.1087 +vn -0.8614 0.4604 0.2147 +vn -0.8614 -0.4604 0.2147 +vn -0.8767 -0.4686 0.1087 +vn -0.7550 0.6196 0.2147 +vn -0.7550 -0.6196 0.2147 +vn -0.7684 -0.6306 0.1087 +vn -0.6196 0.7550 0.2147 +vn -0.6306 0.7684 0.1087 +vn -0.4617 -0.5627 0.6858 +vn -0.4616 -0.5627 -0.6857 +vn -0.3432 -0.6419 -0.6857 +vn -0.3430 -0.6420 0.6857 +vn -0.6196 -0.7550 0.2147 +vn -0.6306 -0.7684 0.1087 +vn -0.4604 0.8614 0.2147 +vn -0.4686 0.8767 0.1087 +vn 0.2112 -0.6966 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn -0.4604 -0.8614 0.2147 +vn -0.4686 -0.8767 0.1087 +vn -0.6420 -0.3430 -0.6857 +vn -0.2835 0.9346 0.2147 +vn -0.2886 0.9513 0.1087 +vn -0.6965 -0.2113 0.6857 +vn -0.2835 -0.9346 0.2147 +vn -0.2886 -0.9513 0.1087 +vn -0.0957 0.9720 0.2147 +vn -0.0974 0.9893 0.1087 +vn -0.0957 -0.9720 0.2147 +vn -0.0974 -0.9893 0.1087 +vn 0.0957 0.9720 0.2147 +vn 0.0974 0.9893 0.1087 +vn 0.4617 -0.5626 0.6857 +vn 0.0957 -0.9720 0.2147 +vn 0.0974 -0.9893 0.1087 +vn -0.5628 0.4616 0.6857 +vn -0.5625 0.4618 -0.6857 +vn 0.8767 -0.4686 0.1087 +vn 0.7684 -0.6306 0.1087 +vn 0.2835 0.9346 0.2147 +vn 0.2886 0.9513 0.1087 +vn 0.5625 -0.4618 -0.6857 +vn 0.5628 -0.4616 0.6857 +vn 0.2835 -0.9346 0.2147 +vn 0.2886 -0.9513 0.1087 +vn -0.5626 0.4617 -0.6857 +vn 0.4604 0.8614 0.2147 +vn 0.4686 0.8767 0.1087 +vn 0.6419 -0.3432 -0.6857 +vn 0.6420 -0.3430 0.6857 +vn 0.4604 -0.8614 0.2147 +vn 0.4686 -0.8767 0.1087 +vn -0.4617 0.5627 0.6857 +vn -0.4617 0.5627 -0.6857 +vn 0.6196 0.7550 0.2147 +vn 0.6306 0.7684 0.1087 +vn 0.6965 -0.2113 0.6857 +vn 0.6965 -0.2113 -0.6857 +vn 0.6196 -0.7550 0.2147 +vn 0.6306 -0.7684 0.1087 +vn 0.7550 0.6196 0.2147 +vn 0.7684 0.6306 0.1087 +vn -0.2113 -0.6965 -0.6857 +vn -0.2113 -0.6965 0.6857 +vn 0.7550 -0.6196 0.2147 +vn -0.3431 0.6419 0.6857 +vn -0.3434 0.6418 -0.6857 +vn 0.9513 0.2886 0.1087 +vn 0.8767 0.4686 0.1087 +vn 0.8614 0.4604 0.2147 +vn 0.8614 -0.4604 0.2147 +vn -0.2113 0.6965 0.6857 +vn -0.2113 0.6965 -0.6857 +vn 0.9346 0.2835 0.2147 +vn 0.9346 -0.2835 0.2147 +vn 0.9513 -0.2886 0.1087 +vn 0.9720 0.0957 0.2147 +vn 0.9893 0.0974 0.1087 +vn 0.5628 0.4616 -0.6857 +vn 0.5625 0.4618 0.6857 +vn 0.9720 -0.0957 0.2147 +vn 0.9893 -0.0974 0.1087 +vn 0.0712 0.7244 -0.6857 +vn 0.2112 0.6966 0.6857 +vn 0.2114 0.6965 -0.6857 +vn 0.4617 0.5626 0.6857 +vn 0.7321 -0.3031 0.6100 +vn 0.9239 -0.3827 0.0000 +vn 0.7934 0.6088 0.0000 +vn 0.6287 0.4824 0.6100 +vn 0.1033 -0.7856 0.6100 +vn 0.1305 -0.9914 0.0000 +vn -0.1306 0.9914 -0.0000 +vn -0.1035 0.7856 0.6100 +vn -0.9239 0.3827 -0.0000 +vn -0.7321 0.3032 0.6100 +vn -0.7934 -0.6087 0.0000 +vn -0.6287 -0.4824 0.6100 +vn -0.7321 0.3032 -0.6100 +vn -0.1305 0.9914 0.0000 +vn -0.1035 0.7856 -0.6100 +vn -0.6288 -0.4822 -0.6100 +vn -0.7934 -0.6088 0.0000 +vn 0.7934 0.6087 -0.0000 +vn 0.6286 0.4824 -0.6100 +vn 0.7321 -0.3032 -0.6100 +vn 0.1306 -0.9914 -0.0000 +vn 0.1033 -0.7856 -0.6100 +vn 0.3032 -0.7321 0.6100 +vn 0.3826 -0.9239 0.0000 +vn 0.9914 -0.1305 0.0000 +vn 0.7856 -0.1036 0.6100 +vn -0.4824 -0.6287 0.6100 +vn -0.6088 -0.7933 -0.0000 +vn 0.6087 0.7934 0.0000 +vn 0.4824 0.6287 0.6100 +vn -0.3827 0.9239 0.0000 +vn -0.3031 0.7321 0.6100 +vn -0.9914 0.1305 0.0000 +vn -0.7856 0.1035 0.6100 +vn -0.3033 0.7321 -0.6100 +vn 0.4823 0.6287 -0.6100 +vn -0.7856 0.1035 -0.6100 +vn 0.7856 -0.1036 -0.6100 +vn 0.3827 -0.9239 0.0000 +vn 0.3032 -0.7321 -0.6100 +vn -0.6087 -0.7934 0.0000 +vn -0.4823 -0.6288 -0.6100 +vn -0.3032 -0.7321 0.6100 +vn -0.3827 -0.9239 0.0000 +vn 0.6088 -0.7934 0.0000 +vn 0.4825 -0.6286 0.6100 +vn -0.7856 -0.1035 0.6100 +vn -0.9914 -0.1305 0.0000 +vn 0.9914 0.1306 0.0000 +vn 0.7856 0.1034 0.6100 +vn 0.3827 0.9239 0.0000 +vn 0.3032 0.7321 0.6100 +vn -0.6087 0.7934 -0.0000 +vn -0.4824 0.6287 0.6100 +vn 0.3033 0.7321 -0.6100 +vn 0.9914 0.1305 0.0000 +vn 0.7856 0.1034 -0.6100 +vn -0.4824 0.6287 -0.6100 +vn -0.6088 0.7934 -0.0000 +vn 0.6087 -0.7934 0.0000 +vn 0.4826 -0.6285 -0.6100 +vn -0.3032 -0.7321 -0.6100 +vn -0.7856 -0.1034 -0.6100 +vn -0.7321 -0.3033 0.6100 +vn -0.9239 -0.3827 0.0000 +vn -0.1305 -0.9914 0.0000 +vn -0.1033 -0.7857 0.6100 +vn -0.6287 0.4823 0.6100 +vn -0.7934 0.6088 0.0000 +vn 0.7934 -0.6087 0.0000 +vn 0.6287 -0.4824 0.6100 +vn 0.9239 0.3827 0.0000 +vn 0.7321 0.3033 0.6100 +vn 0.1305 0.9914 0.0000 +vn 0.1035 0.7856 0.6100 +vn 0.7321 0.3032 -0.6100 +vn 0.6287 -0.4823 -0.6100 +vn 0.1034 0.7856 -0.6100 +vn -0.1033 -0.7856 -0.6100 +vn -0.7322 -0.3031 -0.6100 +vn -0.7934 0.6087 0.0000 +vn -0.6286 0.4825 -0.6100 +vn -0.1033 0.7856 0.6100 +vn 0.7321 -0.3032 0.6100 +vn 0.1034 -0.7856 -0.6100 +vn 0.6287 0.4824 -0.6100 +vn -0.6286 -0.4824 -0.6100 +vn -0.1034 0.7856 -0.6100 +vn -0.3031 0.7322 0.6100 +vn -0.7856 0.1036 0.6100 +vn 0.6088 0.7934 0.0000 +vn 0.9914 -0.1306 0.0000 +vn 0.7856 -0.1034 0.6100 +vn 0.3034 -0.7320 -0.6100 +vn -0.6088 -0.7934 -0.0000 +vn -0.4824 -0.6287 -0.6100 +vn 0.7856 -0.1034 -0.6100 +vn -0.9914 0.1306 -0.0000 +vn -0.7856 0.1034 -0.6100 +vn 0.4823 0.6288 -0.6100 +vn -0.4824 0.6286 0.6100 +vn -0.9914 -0.1306 -0.0000 +vn -0.7856 -0.1034 0.6100 +vn -0.3031 -0.7322 0.6100 +vn 0.4824 -0.6287 0.6100 +vn 0.4824 -0.6286 -0.6100 +vn -0.4824 0.6286 -0.6100 +vn 0.3030 0.7322 -0.6100 +vn 0.7321 0.3032 0.6100 +vn 0.7934 -0.6088 0.0000 +vn -0.6287 0.4824 0.6100 +vn -0.7321 -0.3032 0.6100 +vn -0.1306 -0.9914 0.0000 +vn -0.1035 -0.7856 0.6100 +vn -0.7321 -0.3032 -0.6100 +vn -0.6287 0.4823 -0.6100 +vn -0.1034 -0.7856 -0.6100 +vn 0.1035 0.7856 -0.6100 +vn 0.7321 0.3031 -0.6100 +vn 0.6286 -0.4825 -0.6100 +vn 0.5603 -0.5603 0.6100 +vn 0.7071 -0.7071 0.0000 +vn 0.9659 0.2588 0.0000 +vn 0.7654 0.2051 0.6100 +vn -0.2051 -0.7654 0.6100 +vn -0.2588 -0.9659 0.0000 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 0.6100 +vn -0.7071 0.7071 0.0000 +vn -0.5603 0.5603 0.6100 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 0.6100 +vn -0.5604 0.5602 -0.6100 +vn 0.2050 0.7654 -0.6100 +vn -0.7654 -0.2051 -0.6100 +vn 0.7654 0.2051 -0.6100 +vn 0.5603 -0.5603 -0.6100 +vn -0.2051 -0.7654 -0.6100 +vn 0.0000 -0.7924 0.6100 +vn 0.0000 -1.0000 0.0000 +vn 0.8660 -0.5000 0.0000 +vn 0.6862 -0.3962 0.6100 +vn -0.6862 -0.3963 0.6100 +vn -0.8660 -0.5000 -0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.6863 0.3961 0.6100 +vn 0.0000 1.0000 -0.0000 +vn -0.0002 0.7924 0.6100 +vn -0.8660 0.5000 -0.0000 +vn -0.6862 0.3962 0.6100 +vn -0.0001 0.7924 -0.6100 +vn 0.6861 0.3963 -0.6100 +vn -0.6863 0.3961 -0.6100 +vn 0.6862 -0.3962 -0.6100 +vn -0.0000 -0.7924 -0.6100 +vn -0.6862 -0.3963 -0.6100 +vn -0.5603 -0.5603 0.6100 +vn -0.7071 -0.7071 0.0000 +vn 0.2588 -0.9659 -0.0000 +vn 0.2051 -0.7654 0.6100 +vn -0.7654 0.2051 0.6100 +vn -0.9659 0.2588 0.0000 +vn 0.9659 -0.2588 -0.0000 +vn 0.7654 -0.2050 0.6100 +vn 0.7071 0.7071 -0.0000 +vn 0.5604 0.5602 0.6100 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 0.6100 +vn 0.5603 0.5603 -0.6100 +vn 0.7654 -0.2051 -0.6100 +vn -0.2051 0.7654 -0.6100 +vn 0.2051 -0.7654 -0.6100 +vn -0.5602 -0.5604 -0.6100 +vn -0.7654 0.2051 -0.6100 +vn -0.7924 0.0001 0.6100 +vn -1.0000 0.0000 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 0.6100 +vn -0.3962 0.6862 0.6100 +vn -0.5000 0.8660 0.0000 +vn 0.5000 -0.8660 0.0000 +vn 0.3961 -0.6863 0.6100 +vn 1.0000 0.0000 0.0000 +vn 0.7924 0.0000 0.6100 +vn 0.5000 0.8660 0.0000 +vn 0.3962 0.6862 0.6100 +vn 0.7924 0.0001 -0.6100 +vn 0.3963 -0.6862 -0.6100 +vn 0.3962 0.6862 -0.6100 +vn -0.3962 -0.6862 -0.6100 +vn -0.7924 -0.0001 -0.6100 +vn -0.3962 0.6862 -0.6100 +vn -0.5602 0.5604 0.6100 +vn 0.5602 -0.5604 0.6100 +vn 0.5604 -0.5602 -0.6100 +vn -0.7653 -0.2054 -0.6100 +vn -0.5603 0.5603 -0.6100 +vn 0.2051 0.7654 -0.6100 +vn -0.0001 0.7924 0.6100 +vn 0.6862 0.3962 0.6100 +vn -0.6862 -0.3962 0.6100 +vn 0.0001 -0.7924 0.6100 +vn 0.0001 -0.7924 -0.6100 +vn -0.6863 -0.3961 -0.6100 +vn 0.6863 -0.3960 -0.6100 +vn 0.7654 -0.2051 0.6100 +vn -0.7654 0.2050 0.6100 +vn -0.5603 -0.5603 -0.6100 +vn -0.7654 0.2049 -0.6100 +vn -0.2052 0.7654 -0.6100 +vn 0.5602 0.5604 -0.6100 +vn 0.7924 -0.0001 0.6100 +vn 0.3962 -0.6862 0.6100 +vn 0.3961 0.6863 -0.6100 +vn 0.3962 -0.6862 -0.6100 +g Pipe_Cylinder.002_None_Pipe_Cylinder.002_None_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 +f 7/7/2 8/8/2 9/9/2 10/10/2 11/11/2 12/12/2 +f 13/13/1 14/14/1 15/15/1 16/16/1 17/17/1 18/18/1 +f 19/19/2 20/20/2 21/21/2 22/22/2 23/23/2 24/24/2 +f 25/25/1 26/26/1 27/27/1 28/28/1 29/29/1 30/30/1 +f 31/31/2 32/32/2 33/33/2 34/34/2 35/35/2 36/36/2 +f 37/37/1 38/38/1 39/39/1 40/40/1 41/41/1 42/42/1 +f 43/43/2 44/44/2 45/45/2 46/46/2 47/47/2 48/48/2 +f 49/49/1 50/50/1 51/51/1 52/52/1 53/53/1 54/54/1 +f 55/55/2 56/56/2 57/57/2 58/58/2 59/59/2 60/60/2 +f 61/61/1 62/62/1 63/63/1 64/64/1 65/65/1 66/66/1 +f 67/67/2 68/68/2 69/69/2 70/70/2 71/71/2 72/72/2 +f 73/73/1 74/74/1 75/75/1 76/76/1 77/77/1 78/78/1 +f 79/79/2 80/80/2 81/81/2 82/82/2 83/83/2 84/84/2 +f 85/85/1 86/86/1 87/87/1 88/88/1 89/89/1 90/90/1 +f 91/91/2 92/92/2 93/93/2 94/94/2 95/95/2 96/96/2 +f 97/97/2 98/98/2 99/99/2 100/100/2 101/101/2 102/102/2 103/103/2 104/104/2 105/105/2 106/106/2 107/107/2 108/108/2 109/109/2 110/110/2 111/111/2 112/112/2 113/113/2 114/114/2 115/115/2 116/116/2 117/117/2 118/118/2 119/119/2 120/120/2 121/121/2 122/122/2 123/123/2 124/124/2 125/125/2 126/126/2 127/127/2 128/128/2 +f 129/129/1 130/130/1 131/131/1 132/132/1 133/133/1 134/134/1 135/135/1 136/136/1 137/137/1 138/138/1 139/139/1 140/140/1 141/141/1 142/142/1 143/143/1 144/144/1 145/145/1 146/146/1 147/147/1 148/148/1 149/149/1 150/150/1 151/151/1 152/152/1 153/153/1 154/154/1 155/155/1 156/156/1 157/157/1 158/158/1 159/159/1 160/160/1 +f 161/161/1 162/162/1 163/163/1 164/164/1 165/165/1 166/166/1 167/167/1 168/168/1 169/169/1 170/170/1 171/171/1 172/172/1 173/173/1 174/174/1 175/175/1 176/176/1 177/177/1 178/178/1 179/179/1 180/180/1 181/181/1 182/182/1 183/183/1 184/184/1 185/185/1 186/186/1 187/187/1 188/188/1 189/189/1 190/190/1 191/191/1 192/192/1 +f 193/193/2 194/194/2 195/195/2 196/196/2 197/197/2 198/198/2 199/199/2 200/200/2 201/201/2 202/202/2 203/203/2 204/204/2 205/205/2 206/206/2 207/207/2 208/208/2 209/209/2 210/210/2 211/211/2 212/212/2 213/213/2 214/214/2 215/215/2 216/216/2 217/217/2 218/218/2 219/219/2 220/220/2 221/221/2 222/222/2 223/223/2 224/224/2 +f 225/225/1 226/226/1 227/227/1 228/228/1 229/229/1 230/230/1 +f 231/231/2 232/232/2 233/233/2 234/234/2 235/235/2 236/236/2 +f 237/237/1 238/238/1 239/239/1 240/240/1 241/241/1 242/242/1 +f 243/243/2 244/244/2 245/245/2 246/246/2 247/247/2 248/248/2 +f 249/249/1 250/250/1 251/251/1 252/252/1 253/253/1 254/254/1 +f 255/255/2 256/256/2 257/257/2 258/258/2 259/259/2 260/260/2 +f 261/261/1 262/262/1 263/263/1 264/264/1 265/265/1 266/266/1 +f 267/267/2 268/268/2 269/269/2 270/270/2 271/271/2 272/272/2 +f 273/273/1 274/274/1 275/275/1 276/276/1 277/277/1 278/278/1 +f 279/279/2 280/280/2 281/281/2 282/282/2 283/283/2 284/284/2 +f 285/285/1 286/286/1 287/287/1 288/288/1 289/289/1 290/290/1 +f 291/291/2 292/292/2 293/293/2 294/294/2 295/295/2 296/296/2 +f 297/297/1 298/298/1 299/299/1 300/300/1 301/301/1 302/302/1 +f 303/303/2 304/304/2 305/305/2 306/306/2 307/307/2 308/308/2 +f 309/309/1 310/310/1 311/311/1 312/312/1 313/313/1 314/314/1 +f 315/315/2 316/316/2 317/317/2 318/318/2 319/319/2 320/320/2 +s 1 +f 127/321/3 150/322/4 149/323/5 128/324/6 +f 126/325/7 151/326/8 150/322/4 127/321/3 +f 125/327/9 152/328/10 151/326/8 126/325/7 +f 124/329/11 153/330/12 152/328/10 125/327/9 +f 123/331/13 154/332/14 153/330/12 124/329/11 +f 122/333/15 155/334/16 154/332/14 123/331/13 +f 121/335/17 156/336/18 155/334/16 122/333/15 +f 120/337/19 157/338/20 156/336/18 121/335/17 +f 119/339/21 158/340/22 157/338/20 120/337/19 +f 118/341/23 159/342/24 158/340/22 119/339/21 +f 117/343/25 160/344/26 159/342/24 118/341/23 +f 116/345/27 129/346/28 160/344/26 117/343/25 +f 115/347/29 130/348/30 129/346/28 116/345/27 +f 114/349/31 131/350/32 130/351/30 115/347/29 +f 113/352/33 132/353/34 131/350/32 114/349/31 +f 112/354/35 133/355/36 132/353/34 113/352/33 +f 111/356/37 134/357/38 133/358/36 112/359/35 +f 110/360/39 135/361/40 134/357/38 111/356/37 +f 109/362/41 136/363/42 135/361/40 110/360/39 +f 108/364/43 137/365/44 136/363/42 109/362/41 +f 106/366/45 139/367/46 138/368/47 107/369/48 +f 107/369/48 138/368/47 137/365/44 108/364/43 +f 105/370/49 140/371/50 139/367/46 106/366/45 +f 104/372/51 141/373/52 140/371/50 105/370/49 +f 103/374/53 142/375/54 141/373/52 104/372/51 +f 102/376/55 143/377/56 142/375/54 103/374/53 +f 100/378/57 145/379/58 144/380/59 101/381/60 +f 101/381/60 144/380/59 143/377/56 102/376/55 +f 99/382/61 146/383/62 145/379/58 100/378/57 +f 98/384/63 147/385/64 146/383/62 99/382/61 +f 321/386/65 322/387/66 323/388/67 324/389/68 +f 325/390/69 324/389/68 323/388/67 326/391/70 +f 327/392/71 325/390/69 326/391/70 328/393/72 +f 329/394/73 327/392/71 328/393/72 330/395/74 +f 331/396/75 329/394/73 330/395/74 332/397/76 +f 333/398/77 331/396/75 332/397/76 334/399/78 +f 333/398/77 334/399/78 335/400/79 336/401/80 +f 337/402/81 336/401/80 335/400/79 338/403/82 +f 339/404/83 337/402/81 338/403/82 340/405/84 +f 341/406/85 339/404/83 340/405/84 342/407/86 +f 341/406/85 342/407/86 343/408/87 344/409/88 +f 344/409/88 343/408/87 345/410/89 346/411/90 +f 347/412/91 348/413/92 349/414/93 350/415/94 +f 346/411/90 345/410/89 348/413/92 347/412/91 +f 350/415/94 349/414/93 351/416/95 352/417/96 +f 353/418/97 352/417/96 351/416/95 354/419/98 +f 353/418/97 354/419/98 355/420/99 356/421/100 +f 357/422/101 356/421/100 355/420/99 358/423/102 +f 357/424/101 358/425/102 359/426/103 360/427/104 +f 361/428/105 360/427/104 359/426/103 362/429/106 +f 361/428/105 362/429/106 363/430/107 364/431/108 +f 364/431/108 363/430/107 365/432/109 366/433/110 +f 366/433/110 365/432/109 367/434/111 368/435/112 +f 368/435/112 367/434/111 369/436/113 370/437/114 +f 370/437/114 369/436/113 371/438/115 372/439/116 +f 372/439/116 371/438/115 373/440/117 374/441/118 +f 375/442/119 376/443/120 377/444/121 378/445/122 +f 376/443/120 374/441/118 373/440/117 377/444/121 +f 379/446/123 380/447/124 381/448/125 382/449/126 +f 375/442/119 378/445/122 381/448/125 380/447/124 +f 383/450/127 379/446/123 382/449/126 384/451/128 +f 383/450/127 384/451/128 322/387/66 321/386/65 +f 385/452/129 343/408/87 342/407/86 386/453/130 +f 387/454/131 386/453/130 388/455/132 389/456/133 +f 390/457/134 385/452/129 386/453/130 387/454/131 +f 391/458/135 392/459/136 385/452/129 390/457/134 +f 393/460/137 338/403/82 335/400/79 394/461/138 +f 389/456/133 388/455/132 393/460/137 395/462/139 +f 396/463/140 397/464/141 392/459/136 391/458/135 +f 398/465/142 395/462/139 393/460/137 394/461/138 +f 399/466/143 400/467/144 397/464/141 396/463/140 +f 401/468/145 398/465/142 394/461/138 402/469/146 +f 189/470/147 194/471/148 193/472/149 190/473/150 +f 192/474/24 223/475/23 222/476/25 161/477/26 +f 403/478/151 404/479/152 400/467/144 399/466/143 +f 188/480/16 195/481/15 194/471/148 189/470/147 +f 405/482/153 401/468/145 402/469/146 406/483/154 +f 161/477/26 222/476/25 221/484/155 162/485/156 +f 407/486/157 408/487/158 404/479/152 403/478/151 +f 187/488/14 196/489/159 195/481/15 188/480/16 +f 409/490/160 405/482/153 406/483/154 410/491/161 +f 186/492/162 197/493/11 196/489/159 187/488/14 +f 411/494/163 412/495/164 408/487/158 407/486/157 +f 184/496/8 199/497/7 198/498/9 185/499/10 +f 413/500/165 409/490/160 410/491/161 414/501/166 +f 162/485/156 221/484/155 220/502/29 163/503/30 +f 415/504/167 416/505/168 412/495/164 411/494/163 +f 183/506/4 200/507/3 199/497/7 184/496/8 +f 417/508/169 413/500/165 414/501/166 418/509/170 +f 163/503/30 220/502/29 219/510/31 164/511/171 +f 419/512/172 420/513/173 416/514/168 415/515/167 +f 128/324/6 149/323/5 148/516/174 97/517/175 +f 182/518/5 201/519/6 200/507/3 183/506/4 +f 328/393/72 414/501/166 410/491/161 330/395/74 +f 421/520/176 369/436/113 367/434/111 422/521/177 +f 423/522/178 417/508/169 418/509/170 424/523/179 +f 164/511/171 219/510/31 218/524/180 165/525/181 +f 425/526/182 426/527/183 420/513/173 419/512/172 +f 181/528/174 202/529/184 201/519/6 182/518/5 +f 427/530/185 423/522/178 424/523/179 428/531/186 +f 165/525/181 218/524/180 217/532/187 166/533/188 +f 429/534/189 430/535/190 426/527/183 425/526/182 +f 180/536/191 203/537/192 202/529/184 181/528/174 +f 431/538/193 427/530/185 428/531/186 432/539/194 +f 167/540/195 216/541/196 215/542/39 168/543/40 +f 429/534/189 433/544/197 434/545/198 430/535/190 +f 166/533/188 217/532/187 216/546/196 167/547/195 +f 435/548/199 431/538/193 432/539/194 436/549/200 +f 168/543/40 215/542/39 214/550/41 169/551/42 +f 190/473/150 193/472/149 224/552/201 191/553/202 +f 437/554/203 422/521/177 434/545/198 433/544/197 +f 179/555/204 204/556/205 203/537/192 180/536/191 +f 378/445/122 438/557/206 439/558/207 381/448/125 +f 440/559/208 435/548/199 436/549/200 439/558/207 +f 169/551/42 214/550/41 213/560/43 170/561/44 +f 437/554/203 441/562/209 421/520/176 422/521/177 +f 178/563/210 205/564/211 204/556/205 179/555/204 +f 442/565/212 440/559/208 439/558/207 438/557/206 +f 170/561/44 213/566/43 212/567/48 171/568/47 +f 441/562/209 443/569/213 444/570/214 421/520/176 +f 177/571/59 206/572/60 205/564/211 178/563/210 +f 185/499/10 198/498/9 197/493/11 186/492/162 +f 445/573/215 442/565/212 438/557/206 446/574/216 +f 171/568/47 212/567/48 211/575/217 172/576/218 +f 443/569/213 447/577/219 448/578/220 444/570/214 +f 176/579/56 207/580/221 206/572/60 177/571/59 +f 447/577/219 445/573/215 446/574/216 448/578/220 +f 191/553/202 224/552/201 223/475/23 192/474/24 +f 175/581/222 208/582/223 207/580/221 176/579/56 +f 172/576/218 211/575/217 210/583/49 173/584/224 +f 174/585/52 209/586/51 208/582/223 175/581/222 +f 173/584/224 210/583/49 209/586/51 174/585/52 +f 1/587/225 449/588/226 450/589/227 2/590/228 +f 6/591/229 451/592/230 449/588/226 1/587/225 +f 2/590/228 450/589/227 452/593/231 3/594/232 +f 3/594/232 452/593/231 453/595/233 4/596/234 +f 4/597/234 453/598/233 454/599/235 5/600/236 +f 5/600/236 454/599/235 451/592/230 6/591/229 +f 7/601/237 455/602/233 456/603/238 8/604/239 +f 12/605/240 457/606/241 455/602/233 7/601/237 +f 8/604/239 456/603/238 458/607/242 9/608/243 +f 9/608/243 458/607/242 459/609/226 10/610/244 +f 10/611/244 459/612/226 460/613/245 11/614/246 +f 11/614/246 460/613/245 457/606/241 12/605/240 +f 13/615/247 461/616/248 462/617/249 14/618/250 +f 18/619/251 463/620/252 461/616/248 13/615/247 +f 14/618/250 462/617/249 464/621/253 15/622/254 +f 15/622/254 464/621/253 465/623/255 16/624/256 +f 16/625/256 465/626/255 466/627/257 17/628/258 +f 17/628/258 466/627/257 463/620/252 18/619/251 +f 19/629/259 467/630/255 468/631/253 20/632/260 +f 24/633/261 469/634/257 467/630/255 19/629/259 +f 20/632/260 468/631/253 470/635/249 21/636/262 +f 21/636/262 470/635/249 471/637/263 22/638/264 +f 22/639/264 471/640/263 472/641/265 23/642/266 +f 23/642/266 472/641/265 469/634/257 24/633/261 +f 25/643/267 473/644/268 474/645/269 26/646/270 +f 30/647/271 475/648/272 473/644/268 25/643/267 +f 26/646/270 474/645/269 476/649/273 27/650/274 +f 27/650/274 476/649/273 477/651/275 28/652/276 +f 28/653/276 477/654/275 478/655/277 29/656/278 +f 29/656/278 478/655/277 475/648/272 30/647/271 +f 31/657/279 479/658/275 480/659/280 32/660/281 +f 36/661/282 481/662/283 479/658/275 31/657/279 +f 32/660/281 480/659/280 482/663/284 33/664/285 +f 33/664/285 482/663/284 483/665/268 34/666/286 +f 34/667/286 483/668/268 484/669/272 35/670/287 +f 35/670/287 484/669/272 481/662/283 36/661/282 +f 37/671/288 485/672/289 486/673/290 38/674/291 +f 42/675/292 487/676/293 485/672/289 37/671/288 +f 38/674/291 486/673/290 488/677/294 39/678/295 +f 39/678/295 488/677/294 489/679/296 40/680/297 +f 40/681/297 489/682/296 490/683/298 41/684/299 +f 41/684/299 490/683/298 487/676/293 42/675/292 +f 43/685/300 491/686/296 492/687/294 44/688/301 +f 48/689/302 493/690/298 491/686/296 43/685/300 +f 44/688/301 492/687/294 494/691/290 45/692/303 +f 45/692/303 494/691/290 495/693/289 46/694/304 +f 46/695/304 495/696/289 496/697/305 47/698/306 +f 47/698/306 496/697/305 493/690/298 48/689/302 +f 49/699/234 497/700/233 498/701/241 50/702/236 +f 54/703/307 499/704/238 497/700/233 49/699/234 +f 50/702/236 498/701/241 500/705/245 51/706/229 +f 51/706/229 500/705/245 501/707/226 52/708/308 +f 52/709/308 501/710/226 502/711/242 53/712/228 +f 53/712/228 502/711/242 499/704/238 54/703/307 +f 55/713/244 503/714/226 504/715/230 56/716/309 +f 60/717/310 505/718/242 503/714/226 55/713/244 +f 56/716/309 504/715/230 506/719/235 57/720/311 +f 57/720/311 506/719/235 507/721/233 58/722/237 +f 58/723/237 507/724/233 508/725/238 59/726/312 +f 59/726/312 508/725/238 505/718/242 60/717/310 +f 61/727/313 509/728/255 510/729/257 62/730/314 +f 66/731/254 511/732/315 509/728/255 61/727/313 +f 62/730/314 510/729/257 512/733/265 63/734/251 +f 63/734/251 512/733/265 513/735/263 64/736/247 +f 64/737/247 513/738/263 514/739/316 65/740/317 +f 65/740/317 514/739/316 511/732/315 66/731/254 +f 67/741/318 515/742/263 516/743/319 68/744/320 +f 72/745/321 517/746/249 515/742/263 67/741/318 +f 68/744/320 516/743/319 518/747/322 69/748/323 +f 69/748/323 518/747/322 519/749/255 70/750/259 +f 70/751/259 519/752/255 520/753/253 71/754/324 +f 71/754/324 520/753/253 517/746/249 72/745/321 +f 73/755/276 521/756/275 522/757/283 74/758/325 +f 78/759/274 523/760/280 521/756/275 73/755/276 +f 74/758/325 522/757/283 524/761/326 75/762/327 +f 75/762/327 524/761/326 525/763/268 76/764/328 +f 76/765/328 525/766/268 526/767/284 77/768/329 +f 77/768/329 526/767/284 523/760/280 78/759/274 +f 79/769/286 527/770/268 528/771/272 80/772/287 +f 84/773/330 529/774/284 527/770/268 79/769/286 +f 80/772/287 528/771/272 530/775/277 81/776/331 +f 81/776/331 530/775/277 531/777/275 82/778/332 +f 82/779/332 531/780/275 532/781/280 83/782/281 +f 83/782/281 532/781/280 529/774/284 84/773/330 +f 85/783/333 533/784/296 534/785/298 86/786/299 +f 90/787/295 535/788/334 533/784/296 85/783/333 +f 86/786/299 534/785/298 536/789/305 87/790/335 +f 87/790/335 536/789/305 537/791/289 88/792/336 +f 88/793/336 537/794/289 538/795/337 89/796/338 +f 89/796/338 538/795/337 535/788/334 90/787/295 +f 91/797/339 539/798/289 540/799/305 92/800/340 +f 96/801/341 541/802/290 539/798/289 91/797/339 +f 92/800/340 540/799/305 542/803/298 93/804/342 +f 93/804/342 542/803/298 543/805/296 94/806/343 +f 94/807/343 543/808/296 544/809/294 95/810/344 +f 95/810/344 544/809/294 541/802/290 96/801/341 +f 363/430/107 362/429/106 426/527/183 430/535/190 +f 384/451/128 432/539/194 428/531/186 322/387/66 +f 448/578/220 373/440/117 371/438/115 444/570/214 +f 388/455/132 340/405/84 338/403/82 393/460/137 +f 381/448/125 439/558/207 436/549/200 382/449/126 +f 412/495/164 416/505/168 358/423/102 355/420/99 +f 332/397/76 330/395/74 410/491/161 406/483/154 +f 444/570/214 371/438/115 369/436/113 421/520/176 +f 378/445/122 377/444/121 446/574/216 438/557/206 +f 384/451/128 382/449/126 436/549/200 432/539/194 +f 448/578/220 446/574/216 377/444/121 373/440/117 +f 334/399/78 402/469/146 394/461/138 335/400/79 +f 326/391/70 323/388/67 424/523/179 418/509/170 +f 365/432/109 434/545/198 422/521/177 367/434/111 +f 365/432/109 363/430/107 430/535/190 434/545/198 +f 354/419/98 351/416/95 404/479/152 408/487/158 +f 97/517/175 148/516/174 147/385/64 98/384/63 +f 328/393/72 326/391/70 418/509/170 414/501/166 +f 342/407/86 340/405/84 388/455/132 386/453/130 +f 345/410/89 392/459/136 397/464/141 348/413/92 +f 348/413/92 397/464/141 400/467/144 349/414/93 +f 343/408/87 385/452/129 392/459/136 345/410/89 +f 359/426/103 420/513/173 426/527/183 362/429/106 +f 323/388/67 322/387/66 428/531/186 424/523/179 +f 412/495/164 355/420/99 354/419/98 408/487/158 +f 225/811/345 545/812/346 546/813/347 226/814/348 +f 230/815/349 547/816/350 545/812/346 225/811/345 +f 226/814/348 546/813/347 548/817/351 227/818/352 +f 227/818/352 548/817/351 549/819/353 228/820/354 +f 228/821/354 549/822/353 550/823/355 229/824/356 +f 229/824/356 550/823/355 547/816/350 230/815/349 +f 231/825/357 551/826/353 552/827/351 232/828/358 +f 236/829/359 553/830/355 551/826/353 231/825/357 +f 232/828/358 552/827/351 554/831/347 233/832/360 +f 233/832/360 554/831/347 555/833/346 234/834/361 +f 234/835/361 555/836/346 556/837/350 235/838/362 +f 235/838/362 556/837/350 553/830/355 236/829/359 +f 237/839/363 557/840/364 558/841/365 238/842/366 +f 242/843/367 559/844/368 557/840/364 237/839/363 +f 238/842/366 558/841/365 560/845/369 239/846/370 +f 239/846/370 560/845/369 561/847/371 240/848/372 +f 240/849/372 561/850/371 562/851/373 241/852/374 +f 241/852/374 562/851/373 559/844/368 242/843/367 +f 243/853/375 563/854/371 564/855/369 244/856/376 +f 248/857/377 565/858/373 563/854/371 243/853/375 +f 244/856/376 564/855/369 566/859/365 245/860/378 +f 245/860/378 566/859/365 567/861/364 246/862/379 +f 246/863/379 567/864/364 568/865/368 247/866/380 +f 247/866/380 568/865/368 565/858/373 248/857/377 +f 249/867/381 569/868/382 570/869/383 250/870/384 +f 254/871/385 571/872/386 569/868/382 249/867/381 +f 250/870/384 570/869/383 572/873/387 251/874/388 +f 251/874/388 572/873/387 573/875/389 252/876/390 +f 252/877/390 573/878/389 574/879/391 253/880/392 +f 253/880/392 574/879/391 571/872/386 254/871/385 +f 255/881/393 575/882/389 576/883/387 256/884/394 +f 260/885/395 577/886/391 575/882/389 255/881/393 +f 256/884/394 576/883/387 578/887/383 257/888/396 +f 257/888/396 578/887/383 579/889/382 258/890/397 +f 258/891/397 579/892/382 580/893/386 259/894/398 +f 259/894/398 580/893/386 577/886/391 260/885/395 +f 261/895/399 581/896/400 582/897/401 262/898/402 +f 266/899/403 583/900/404 581/896/400 261/895/399 +f 262/898/402 582/897/401 584/901/405 263/902/406 +f 263/902/406 584/901/405 585/903/407 264/904/408 +f 264/905/408 585/906/407 586/907/409 265/908/410 +f 265/908/410 586/907/409 583/900/404 266/899/403 +f 267/909/411 587/910/407 588/911/405 268/912/412 +f 272/913/413 589/914/409 587/910/407 267/909/411 +f 268/912/412 588/911/405 590/915/401 269/916/414 +f 269/916/414 590/915/401 591/917/400 270/918/415 +f 270/919/415 591/920/400 592/921/404 271/922/416 +f 271/922/416 592/921/404 589/914/409 272/913/413 +f 273/923/417 593/924/353 594/925/355 274/926/356 +f 278/927/352 595/928/351 593/924/353 273/923/417 +f 274/926/356 594/925/355 596/929/350 275/930/349 +f 275/930/349 596/929/350 597/931/346 276/932/418 +f 276/933/418 597/934/346 598/935/347 277/936/348 +f 277/936/348 598/935/347 595/928/351 278/927/352 +f 279/937/419 599/938/346 600/939/350 280/940/362 +f 284/941/360 601/942/347 599/938/346 279/937/419 +f 280/940/362 600/939/350 602/943/355 281/944/420 +f 281/944/420 602/943/355 603/945/353 282/946/421 +f 282/947/421 603/948/353 604/949/351 283/950/422 +f 283/950/422 604/949/351 601/942/347 284/941/360 +f 285/951/423 605/952/371 606/953/373 286/954/374 +f 290/955/424 607/956/369 605/952/371 285/951/423 +f 286/954/374 606/953/373 608/957/368 287/958/425 +f 287/958/425 608/957/368 609/959/364 288/960/426 +f 288/961/426 609/962/364 610/963/365 289/964/366 +f 289/964/366 610/963/365 607/956/369 290/955/424 +f 291/965/427 611/966/364 612/967/368 292/968/428 +f 296/969/429 613/970/365 611/966/364 291/965/427 +f 292/968/428 612/967/368 614/971/373 293/972/377 +f 293/972/377 614/971/373 615/973/371 294/974/375 +f 294/975/375 615/976/371 616/977/369 295/978/376 +f 295/978/376 616/977/369 613/970/365 296/969/429 +f 297/979/390 617/980/389 618/981/391 298/982/392 +f 302/983/430 619/984/387 617/980/389 297/979/390 +f 298/982/392 618/981/391 620/985/386 299/986/431 +f 299/986/431 620/985/386 621/987/382 300/988/381 +f 300/989/381 621/990/382 622/991/383 301/992/384 +f 301/992/384 622/991/383 619/984/387 302/983/430 +f 303/993/432 623/994/382 624/995/386 304/996/433 +f 308/997/396 625/998/383 623/994/382 303/993/432 +f 304/996/433 624/995/386 626/999/391 305/1000/434 +f 305/1000/434 626/999/391 627/1001/389 306/1002/435 +f 306/1003/435 627/1004/389 628/1005/387 307/1006/394 +f 307/1006/394 628/1005/387 625/998/383 308/997/396 +f 309/1007/436 629/1008/407 630/1009/409 310/1010/410 +f 314/1011/437 631/1012/405 629/1008/407 309/1007/436 +f 310/1010/410 630/1009/409 632/1013/404 311/1014/403 +f 311/1014/403 632/1013/404 633/1015/400 312/1016/399 +f 312/1017/399 633/1018/400 634/1019/401 313/1020/402 +f 313/1020/402 634/1019/401 631/1012/405 314/1011/437 +f 315/1021/415 635/1022/400 636/1023/404 316/1024/416 +f 320/1025/414 637/1026/401 635/1022/400 315/1021/415 +f 316/1024/416 636/1023/404 638/1027/409 317/1028/438 +f 317/1028/438 638/1027/409 639/1029/407 318/1030/411 +f 318/1031/411 639/1032/407 640/1033/405 319/1034/439 +f 319/1034/439 640/1033/405 637/1026/401 320/1025/414 +f 332/397/76 406/483/154 402/469/146 334/399/78 +f 404/479/152 351/416/95 349/414/93 400/467/144 +f 358/425/102 416/514/168 420/513/173 359/426/103 diff --git a/mods/pipeworks/models/pipeworks_straight_pipe_lowpoly.obj b/mods/pipeworks/models/pipeworks_straight_pipe_lowpoly.obj new file mode 100755 index 0000000..8600147 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_straight_pipe_lowpoly.obj @@ -0,0 +1,194 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +o Cylinder.000_Cylinder.000_None +v 0.064721 -0.156250 -0.468750 +v 0.156250 -0.064721 -0.468750 +v 0.156250 0.064721 -0.468750 +v 0.064721 0.156250 -0.468750 +v -0.064721 0.156250 -0.468750 +v -0.156250 0.064721 -0.468750 +v -0.156250 -0.064721 -0.468750 +v -0.064721 -0.156250 -0.468750 +v 0.156250 -0.064721 -0.500000 +v 0.064721 -0.156250 -0.500000 +v -0.064721 -0.156250 -0.500000 +v -0.156250 -0.064721 -0.500000 +v -0.156250 0.064721 -0.500000 +v -0.064721 0.156250 -0.500000 +v 0.064721 0.156250 -0.500000 +v 0.156250 0.064721 -0.500000 +v 0.064721 -0.156250 0.500000 +v 0.156250 -0.064721 0.500000 +v 0.156250 0.064721 0.500000 +v 0.064721 0.156250 0.500000 +v -0.064721 0.156250 0.500000 +v -0.156250 0.064721 0.500000 +v -0.156250 -0.064721 0.500000 +v -0.064721 -0.156250 0.500000 +v 0.156250 -0.064721 0.468750 +v 0.064721 -0.156250 0.468750 +v -0.064721 -0.156250 0.468750 +v -0.156250 -0.064721 0.468750 +v -0.156250 0.064721 0.468750 +v -0.064721 0.156250 0.468750 +v 0.064721 0.156250 0.468750 +v 0.156250 0.064721 0.468750 +v -0.125000 -0.051777 0.468750 +v -0.125000 0.051777 0.468750 +v -0.125000 0.051777 -0.468750 +v -0.125000 -0.051777 -0.468750 +v 0.051777 0.125000 0.468750 +v 0.125000 0.051777 0.468750 +v 0.125000 0.051777 -0.468750 +v 0.051777 0.125000 -0.468750 +v -0.051777 0.125000 0.468750 +v -0.051777 0.125000 -0.468750 +v -0.051777 -0.125000 -0.468750 +v -0.051777 -0.125000 0.468750 +v 0.051777 -0.125000 -0.468750 +v 0.125000 -0.051777 -0.468750 +v 0.125000 -0.051777 0.468750 +v 0.051777 -0.125000 0.468750 +vt 0.7188 0.8906 +vt 0.6250 0.9844 +vt 0.5000 0.9844 +vt 0.4062 0.8906 +vt 0.4062 0.7656 +vt 0.5000 0.6719 +vt 0.6250 0.6719 +vt 0.7188 0.7656 +vt 0.2500 0.9844 +vt 0.3438 0.8906 +vt 0.3438 0.7656 +vt 0.2500 0.6719 +vt 0.1250 0.6719 +vt 0.0312 0.7656 +vt 0.0312 0.8906 +vt 0.1250 0.9844 +vt 0.3438 0.8906 +vt 0.2500 0.9844 +vt 0.1250 0.9844 +vt 0.0312 0.8906 +vt 0.0312 0.7656 +vt 0.1250 0.6719 +vt 0.2500 0.6719 +vt 0.3438 0.7656 +vt 0.6250 0.9844 +vt 0.7188 0.8906 +vt 0.7188 0.7656 +vt 0.6250 0.6719 +vt 0.5000 0.6719 +vt 0.4062 0.7656 +vt 0.4062 0.8906 +vt 0.5000 0.9844 +vt 0.8125 0.5938 +vt 0.8125 0.5625 +vt 0.8750 0.5625 +vt 0.8750 0.5938 +vt 0.9375 0.5625 +vt 0.9375 0.5938 +vt 1.0000 0.5625 +vt 1.0000 0.5938 +vt 0.5000 0.5938 +vt 0.5000 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.5938 +vt 0.6250 0.5625 +vt 0.6250 0.5938 +vt 0.6875 0.5625 +vt 0.6875 0.5938 +vt 0.7500 0.5625 +vt 0.7500 0.5938 +vt 0.3750 0.5938 +vt 0.3750 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.5000 0.5625 +vt 0.5000 0.5938 +vt 0.0000 0.5938 +vt 0.0000 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.1250 0.5625 +vt 0.1250 0.5938 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.2500 0.5625 +vt 0.2500 0.5938 +vt 1.0624 0.5135 +vt 0.9370 0.5135 +vt 0.9370 0.0130 +vt 1.0624 0.0130 +vt 0.6862 0.5135 +vt 0.5608 0.5135 +vt 0.5608 0.0130 +vt 0.6862 0.0130 +vt 0.8116 0.5135 +vt 0.8116 0.0130 +vt 1.1878 0.0130 +vt 1.1878 0.5135 +vt 0.3100 0.0130 +vt 0.4354 0.0130 +vt 0.4354 0.5135 +vt 0.3100 0.5135 +vt 0.1846 0.0130 +vt 0.1846 0.5135 +vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7173 -0.2971 -0.6302 +vn 0.7173 -0.2971 0.6302 +vn 0.2971 -0.7173 0.6302 +vn 0.2971 -0.7173 -0.6302 +vn -0.2971 -0.7173 0.6302 +vn -0.2971 -0.7173 -0.6302 +vn -0.7173 -0.2971 0.6302 +vn -0.7173 -0.2971 -0.6302 +vn -0.7173 0.2971 0.6302 +vn -0.7173 0.2971 -0.6302 +vn -0.2971 0.7173 0.6302 +vn -0.2971 0.7173 -0.6302 +vn 0.2971 0.7173 0.6302 +vn 0.2971 0.7173 -0.6302 +vn 0.7173 0.2971 0.6302 +vn 0.7173 0.2971 -0.6302 +vn -0.9239 -0.3827 -0.0000 +vn -0.9239 0.3827 -0.0000 +vn 0.3827 0.9239 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.3827 -0.9239 0.0000 +vn 0.9239 -0.3827 0.0000 +g Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_None_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2 +f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 +f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2 +s 1 +f 9/33/3 2/34/4 1/35/5 10/36/6 +f 10/36/6 1/35/5 8/37/7 11/38/8 +f 11/38/8 8/37/7 7/39/9 12/40/10 +f 12/41/10 7/42/9 6/43/11 13/44/12 +f 13/44/12 6/43/11 5/45/13 14/46/14 +f 14/46/14 5/45/13 4/47/15 15/48/16 +f 15/48/16 4/47/15 3/49/17 16/50/18 +f 16/50/18 3/49/17 2/34/4 9/33/3 +f 26/51/6 17/52/5 24/53/7 27/54/8 +f 25/55/3 18/56/4 17/52/5 26/51/6 +f 27/54/8 24/53/7 23/57/9 28/58/10 +f 28/59/10 23/60/9 22/61/11 29/62/12 +f 29/62/12 22/61/11 21/63/13 30/64/14 +f 30/64/14 21/63/13 20/65/15 31/66/16 +f 31/66/16 20/65/15 19/67/17 32/68/18 +f 32/68/18 19/67/17 18/56/4 25/55/3 +f 33/69/19 34/70/20 35/71/20 36/72/19 +f 37/73/21 38/74/22 39/75/22 40/76/21 +f 34/70/20 41/77/23 42/78/23 35/71/20 +f 33/69/19 36/72/19 43/79/24 44/80/24 +f 45/81/25 46/82/26 47/83/26 48/84/25 +f 43/85/24 45/81/25 48/84/25 44/86/24 +f 37/73/21 40/76/21 42/78/23 41/77/23 +f 46/82/26 39/75/22 38/74/22 47/83/26 diff --git a/mods/pipeworks/models/pipeworks_valve_off.obj b/mods/pipeworks/models/pipeworks_valve_off.obj new file mode 100755 index 0000000..bab74ee --- /dev/null +++ b/mods/pipeworks/models/pipeworks_valve_off.obj @@ -0,0 +1,8136 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-valve-off.blend' +# www.blender.org +o Pipe_Cylinder.002 +v -0.038455 0.126770 -0.468750 +v -0.012985 0.131837 -0.468750 +v 0.012984 0.131837 -0.468750 +v 0.038455 0.126770 -0.468750 +v 0.062448 0.116832 -0.468750 +v 0.084041 0.102404 -0.468750 +v 0.102404 0.084041 -0.468750 +v 0.116832 0.062448 -0.468750 +v 0.126770 0.038455 -0.468750 +v 0.131836 0.012985 -0.468750 +v 0.131836 -0.012985 -0.468750 +v 0.116832 -0.062448 -0.468750 +v 0.102404 -0.084041 -0.468750 +v 0.084041 -0.102404 -0.468750 +v 0.062448 -0.116832 -0.468750 +v 0.038455 -0.126770 -0.468750 +v 0.012985 -0.131836 -0.468750 +v -0.012985 -0.131836 -0.468750 +v -0.038455 -0.126770 -0.468750 +v -0.062448 -0.116832 -0.468750 +v -0.102404 -0.084041 -0.468750 +v -0.084041 -0.102404 -0.468750 +v -0.116832 -0.062448 -0.468750 +v -0.126770 -0.038455 -0.468750 +v -0.131837 0.012985 -0.468750 +v -0.116832 0.062448 -0.468750 +v -0.126770 0.038455 -0.468750 +v -0.102404 0.084041 -0.468750 +v -0.084041 0.102404 -0.468750 +v -0.062448 0.116832 -0.468750 +v 0.126770 -0.038455 -0.468750 +v -0.131837 -0.012985 -0.468750 +v -0.059210 0.110774 -0.437501 +v -0.036461 0.120197 -0.437501 +v -0.012312 0.125000 -0.437501 +v 0.012311 0.125001 -0.437501 +v 0.036461 0.120197 -0.437501 +v 0.059210 0.110774 -0.437501 +v 0.079683 0.097094 -0.437501 +v 0.097094 0.079683 -0.437501 +v 0.110774 0.059210 -0.437501 +v 0.120197 0.036461 -0.437501 +v 0.125000 0.012312 -0.437501 +v 0.125000 -0.012311 -0.437501 +v 0.120197 -0.036461 -0.437501 +v 0.110774 -0.059210 -0.437501 +v 0.097094 -0.079683 -0.437501 +v 0.079683 -0.097094 -0.437501 +v 0.059210 -0.110774 -0.437501 +v 0.036461 -0.120197 -0.437501 +v 0.012311 -0.125000 -0.437501 +v -0.012312 -0.125000 -0.437501 +v -0.036461 -0.120197 -0.437501 +v -0.059210 -0.110774 -0.437501 +v -0.079683 -0.097094 -0.437501 +v -0.097094 -0.079683 -0.437501 +v -0.110774 -0.059210 -0.437501 +v -0.120197 -0.036461 -0.437501 +v -0.125001 -0.012311 -0.437501 +v -0.125001 0.012311 -0.437501 +v -0.120197 0.036461 -0.437501 +v -0.110774 0.059210 -0.437501 +v -0.097094 0.079683 -0.437501 +v -0.079683 0.097094 -0.437501 +v 0.120197 0.036461 0.437501 +v 0.125001 0.012312 0.437501 +v 0.125001 -0.012311 0.437501 +v 0.120197 -0.036461 0.437501 +v 0.110774 0.059210 0.437501 +v 0.131837 0.012985 0.468750 +v 0.126770 0.038455 0.468750 +v 0.131837 -0.012985 0.468750 +v 0.110774 -0.059210 0.437501 +v 0.126770 -0.038455 0.468750 +v 0.097094 0.079683 0.437501 +v 0.116832 0.062448 0.468750 +v 0.097094 -0.079683 0.437501 +v 0.116832 -0.062448 0.468750 +v 0.079683 0.097094 0.437501 +v 0.102404 0.084041 0.468750 +v 0.079683 -0.097094 0.437501 +v 0.102404 -0.084041 0.468750 +v 0.059210 0.110774 0.437501 +v 0.084041 0.102404 0.468750 +v 0.059210 -0.110774 0.437501 +v 0.084041 -0.102404 0.468750 +v 0.036461 0.120197 0.437501 +v 0.062448 0.116832 0.468750 +v 0.036461 -0.120197 0.437501 +v 0.062448 -0.116832 0.468750 +v 0.012311 0.125000 0.437501 +v 0.038455 0.126770 0.468750 +v 0.012311 -0.125001 0.437501 +v 0.038455 -0.126770 0.468750 +v -0.012312 0.125000 0.437501 +v 0.012985 0.131836 0.468750 +v -0.012311 -0.125001 0.437501 +v 0.012985 -0.131837 0.468750 +v -0.036461 0.120197 0.437501 +v -0.012985 0.131836 0.468750 +v -0.036461 -0.120197 0.437501 +v -0.012985 -0.131837 0.468750 +v -0.059210 0.110774 0.437501 +v -0.038455 0.126770 0.468750 +v -0.059210 -0.110774 0.437501 +v -0.038455 -0.126770 0.468750 +v -0.079683 0.097094 0.437501 +v -0.062448 0.116832 0.468750 +v -0.079683 -0.097094 0.437501 +v -0.062448 -0.116832 0.468750 +v -0.097094 0.079683 0.437501 +v -0.084041 0.102404 0.468750 +v -0.097094 -0.079683 0.437501 +v -0.084041 -0.102404 0.468750 +v -0.110774 0.059210 0.437501 +v -0.102404 0.084041 0.468750 +v -0.110774 -0.059210 0.437501 +v -0.102404 -0.084041 0.468750 +v -0.120197 0.036461 0.437501 +v -0.116832 0.062448 0.468750 +v -0.120197 -0.036461 0.437501 +v -0.116832 -0.062448 0.468750 +v -0.125000 0.012311 0.437501 +v -0.126770 0.038455 0.468750 +v -0.125000 -0.012311 0.437501 +v -0.126770 -0.038455 0.468750 +v -0.131836 0.012985 0.468750 +v -0.131836 -0.012985 0.468750 +v -0.063644 0.130078 0.460912 +v -0.063644 0.130078 0.468749 +v -0.062467 0.139022 0.468749 +v -0.062467 0.139022 0.460912 +v -0.054132 0.142474 0.460912 +v -0.046976 0.136982 0.460912 +v -0.048153 0.128039 0.460912 +v -0.056487 0.124587 0.460912 +v -0.056487 0.124587 0.468749 +v -0.054132 0.142474 0.468749 +v -0.046976 0.136982 0.468749 +v -0.048153 0.128039 0.468749 +v -0.046976 0.136982 -0.460914 +v -0.046976 0.136982 -0.468751 +v -0.054133 0.142474 -0.468751 +v -0.054133 0.142474 -0.460914 +v -0.062467 0.139022 -0.460914 +v -0.063644 0.130078 -0.460914 +v -0.056488 0.124587 -0.460914 +v -0.048153 0.128039 -0.460914 +v -0.048153 0.128039 -0.468751 +v -0.062467 0.139022 -0.468751 +v -0.063644 0.130078 -0.468751 +v -0.056488 0.124587 -0.468751 +v -0.136982 0.046976 0.460912 +v -0.136982 0.046976 0.468749 +v -0.142474 0.054133 0.468749 +v -0.142474 0.054133 0.460912 +v -0.139022 0.062467 0.460912 +v -0.130078 0.063644 0.460912 +v -0.124587 0.056488 0.460912 +v -0.128039 0.048154 0.460912 +v -0.128039 0.048154 0.468749 +v -0.139022 0.062467 0.468749 +v -0.130078 0.063644 0.468749 +v -0.124587 0.056488 0.468749 +v -0.130078 0.063644 -0.460914 +v -0.130078 0.063644 -0.468751 +v -0.139022 0.062467 -0.468751 +v -0.139022 0.062467 -0.460914 +v -0.142474 0.054133 -0.460914 +v -0.136982 0.046976 -0.460914 +v -0.128039 0.048153 -0.460914 +v -0.124587 0.056487 -0.460914 +v -0.124587 0.056487 -0.468751 +v -0.142474 0.054133 -0.468751 +v -0.136982 0.046976 -0.468751 +v -0.128039 0.048153 -0.468751 +v -0.130078 -0.063644 0.460912 +v -0.130078 -0.063644 0.468749 +v -0.139022 -0.062467 0.468749 +v -0.139022 -0.062467 0.460912 +v -0.142474 -0.054132 0.460912 +v -0.136982 -0.046976 0.460912 +v -0.128039 -0.048153 0.460912 +v -0.124587 -0.056487 0.460912 +v -0.124587 -0.056487 0.468749 +v -0.142474 -0.054132 0.468749 +v -0.136982 -0.046976 0.468749 +v -0.128039 -0.048153 0.468749 +v -0.136982 -0.046976 -0.460914 +v -0.136982 -0.046976 -0.468751 +v -0.142474 -0.054133 -0.468751 +v -0.142474 -0.054133 -0.460914 +v -0.139022 -0.062467 -0.460914 +v -0.130078 -0.063644 -0.460914 +v -0.124587 -0.056488 -0.460914 +v -0.128039 -0.048153 -0.460914 +v -0.128039 -0.048153 -0.468751 +v -0.139022 -0.062467 -0.468751 +v -0.130078 -0.063644 -0.468751 +v -0.124587 -0.056488 -0.468751 +v -0.046976 -0.136982 0.460912 +v -0.046976 -0.136982 0.468749 +v -0.054133 -0.142474 0.468749 +v -0.054133 -0.142474 0.460912 +v -0.062467 -0.139022 0.460912 +v -0.063644 -0.130078 0.460912 +v -0.056488 -0.124587 0.460912 +v -0.048153 -0.128039 0.460912 +v -0.048153 -0.128039 0.468749 +v -0.062467 -0.139022 0.468749 +v -0.063644 -0.130078 0.468749 +v -0.056488 -0.124587 0.468749 +v -0.063644 -0.130078 -0.460914 +v -0.063644 -0.130078 -0.468751 +v -0.062467 -0.139022 -0.468751 +v -0.062467 -0.139022 -0.460914 +v -0.054133 -0.142474 -0.460914 +v -0.046976 -0.136982 -0.460914 +v -0.048153 -0.128039 -0.460914 +v -0.056487 -0.124587 -0.460914 +v -0.056487 -0.124587 -0.468751 +v -0.054133 -0.142474 -0.468751 +v -0.046976 -0.136982 -0.468751 +v -0.048153 -0.128039 -0.468751 +v 0.063644 -0.130078 0.460912 +v 0.063644 -0.130078 0.468749 +v 0.062467 -0.139022 0.468749 +v 0.062467 -0.139022 0.460912 +v 0.054132 -0.142474 0.460912 +v 0.046976 -0.136982 0.460912 +v 0.048153 -0.128039 0.460912 +v 0.056487 -0.124587 0.460912 +v 0.056487 -0.124587 0.468749 +v 0.054132 -0.142474 0.468749 +v 0.046976 -0.136982 0.468749 +v 0.048153 -0.128039 0.468749 +v 0.046976 -0.136982 -0.460914 +v 0.046976 -0.136982 -0.468751 +v 0.054133 -0.142474 -0.468751 +v 0.054133 -0.142474 -0.460914 +v 0.062467 -0.139022 -0.460914 +v 0.063644 -0.130078 -0.460914 +v 0.056487 -0.124587 -0.460914 +v 0.048153 -0.128039 -0.460914 +v 0.048153 -0.128039 -0.468751 +v 0.062467 -0.139022 -0.468751 +v 0.063644 -0.130078 -0.468751 +v 0.056487 -0.124587 -0.468751 +v 0.136982 -0.046976 0.460912 +v 0.136982 -0.046976 0.468749 +v 0.142474 -0.054133 0.468749 +v 0.142474 -0.054133 0.460912 +v 0.139022 -0.062467 0.460912 +v 0.130078 -0.063644 0.460912 +v 0.124587 -0.056488 0.460912 +v 0.128039 -0.048153 0.460912 +v 0.128039 -0.048153 0.468749 +v 0.139022 -0.062467 0.468749 +v 0.130078 -0.063644 0.468749 +v 0.124587 -0.056488 0.468749 +v 0.130078 -0.063644 -0.460914 +v 0.130078 -0.063644 -0.468751 +v 0.139022 -0.062467 -0.468751 +v 0.139022 -0.062467 -0.460914 +v 0.142474 -0.054132 -0.460914 +v 0.136982 -0.046976 -0.460914 +v 0.128039 -0.048153 -0.460914 +v 0.124587 -0.056487 -0.460914 +v 0.124587 -0.056487 -0.468751 +v 0.142474 -0.054132 -0.468751 +v 0.136982 -0.046976 -0.468751 +v 0.128039 -0.048153 -0.468751 +v 0.130078 0.063644 0.460912 +v 0.130078 0.063644 0.468749 +v 0.139022 0.062467 0.468749 +v 0.139022 0.062467 0.460912 +v 0.142474 0.054132 0.460912 +v 0.136982 0.046976 0.460912 +v 0.128039 0.048153 0.460912 +v 0.124587 0.056487 0.460912 +v 0.124587 0.056487 0.468749 +v 0.142474 0.054132 0.468749 +v 0.136982 0.046976 0.468749 +v 0.128039 0.048153 0.468749 +v 0.136982 0.046976 -0.460914 +v 0.136982 0.046976 -0.468751 +v 0.142474 0.054133 -0.468751 +v 0.142474 0.054133 -0.460914 +v 0.139022 0.062467 -0.460914 +v 0.130078 0.063644 -0.460914 +v 0.124587 0.056487 -0.460914 +v 0.128039 0.048153 -0.460914 +v 0.128039 0.048153 -0.468751 +v 0.139022 0.062467 -0.468751 +v 0.130078 0.063644 -0.468751 +v 0.124587 0.056487 -0.468751 +v 0.046976 0.136982 0.460912 +v 0.046976 0.136982 0.468749 +v 0.054133 0.142474 0.468749 +v 0.054133 0.142474 0.460912 +v 0.062467 0.139022 0.460912 +v 0.063644 0.130078 0.460912 +v 0.056488 0.124587 0.460912 +v 0.048154 0.128039 0.460912 +v 0.048154 0.128039 0.468749 +v 0.062467 0.139022 0.468749 +v 0.063644 0.130078 0.468749 +v 0.056488 0.124587 0.468749 +v 0.063644 0.130078 -0.460914 +v 0.063644 0.130078 -0.468751 +v 0.062467 0.139022 -0.468751 +v 0.062467 0.139022 -0.460914 +v 0.054132 0.142474 -0.460914 +v 0.046976 0.136982 -0.460914 +v 0.048153 0.128039 -0.460914 +v 0.056487 0.124587 -0.460914 +v 0.056487 0.124587 -0.468751 +v 0.054132 0.142474 -0.468751 +v 0.046976 0.136982 -0.468751 +v 0.048153 0.128039 -0.468751 +v 0.121367 0.099603 -0.500000 +v 0.138467 0.074012 -0.500000 +v 0.150245 0.045577 -0.500000 +v 0.156250 0.015390 -0.500000 +v 0.156250 -0.015389 -0.500000 +v 0.150245 -0.045576 -0.500000 +v 0.138467 -0.074012 -0.500000 +v 0.121367 -0.099603 -0.500000 +v 0.099603 -0.121367 -0.500000 +v 0.045576 -0.150245 -0.500000 +v -0.015389 -0.156250 -0.500000 +v -0.045576 -0.150245 -0.500000 +v -0.099603 -0.121367 -0.500000 +v -0.121367 -0.099603 -0.500000 +v -0.138467 -0.074012 -0.500000 +v -0.150245 -0.045576 -0.500000 +v -0.156250 -0.015389 -0.500000 +v -0.150245 0.045576 -0.500000 +v -0.138467 0.074012 -0.500000 +v -0.121367 0.099603 -0.500000 +v -0.074012 0.138467 -0.500000 +v -0.015389 0.156250 -0.500000 +v 0.015389 0.156250 -0.500000 +v 0.045576 0.150245 -0.500000 +v 0.074012 0.138467 -0.500000 +v 0.099603 0.121367 -0.500000 +v 0.074012 -0.138466 -0.500000 +v 0.015389 -0.156250 -0.500000 +v -0.074012 -0.138467 -0.500000 +v -0.156250 0.015389 -0.500000 +v -0.099603 0.121367 -0.500000 +v -0.045576 0.150245 -0.500000 +v 0.121367 0.099603 -0.468750 +v 0.099603 0.121367 -0.468750 +v 0.138467 0.074012 -0.468750 +v 0.150245 0.045577 -0.468750 +v 0.156250 0.015390 -0.468750 +v 0.156250 -0.015389 -0.468750 +v 0.150245 -0.045576 -0.468750 +v 0.138467 -0.074012 -0.468750 +v 0.121367 -0.099603 -0.468750 +v 0.099603 -0.121367 -0.468750 +v 0.074012 -0.138466 -0.468750 +v 0.045576 -0.150245 -0.468750 +v 0.015389 -0.156250 -0.468750 +v -0.015389 -0.156250 -0.468750 +v -0.045576 -0.150245 -0.468750 +v -0.074012 -0.138467 -0.468750 +v -0.099603 -0.121367 -0.468750 +v -0.121367 -0.099603 -0.468750 +v -0.138467 -0.074012 -0.468750 +v -0.150245 -0.045576 -0.468750 +v -0.156250 -0.015389 -0.468750 +v -0.156250 0.015389 -0.468750 +v -0.138467 0.074012 -0.468750 +v -0.150245 0.045576 -0.468750 +v -0.121367 0.099603 -0.468750 +v -0.099603 0.121367 -0.468750 +v -0.074012 0.138467 -0.468750 +v -0.045576 0.150245 -0.468750 +v 0.015389 0.156250 -0.468750 +v -0.015389 0.156250 -0.468750 +v 0.045576 0.150245 -0.468750 +v 0.074012 0.138467 -0.468750 +v 0.074012 -0.138466 0.468750 +v 0.045576 -0.150245 0.468750 +v 0.015389 -0.156250 0.468750 +v 0.099603 -0.121367 0.468750 +v -0.015389 -0.156250 0.468750 +v 0.138467 -0.074012 0.468750 +v 0.121367 -0.099603 0.468750 +v 0.099603 -0.121367 0.500000 +v 0.074012 -0.138467 0.500000 +v 0.045576 -0.150245 0.500000 +v 0.015389 -0.156250 0.500000 +v -0.015389 -0.156250 0.500000 +v 0.150245 -0.045576 0.468750 +v 0.121367 -0.099603 0.500000 +v -0.045576 -0.150245 0.468750 +v -0.045576 -0.150245 0.500000 +v 0.156250 -0.015389 0.468750 +v 0.150245 -0.045576 0.500000 +v 0.138467 -0.074012 0.500000 +v -0.074012 -0.138467 0.468750 +v -0.074012 -0.138467 0.500000 +v 0.156250 0.015389 0.468750 +v 0.156250 -0.015389 0.500000 +v -0.099603 -0.121367 0.468750 +v -0.099603 -0.121367 0.500000 +v 0.150245 0.045576 0.468750 +v 0.156250 0.015389 0.500000 +v -0.121367 -0.099603 0.468750 +v -0.121367 -0.099603 0.500000 +v 0.138467 0.074012 0.468750 +v 0.150245 0.045576 0.500000 +v -0.150245 -0.045576 0.468750 +v -0.138467 -0.074012 0.468750 +v -0.138467 -0.074012 0.500000 +v 0.121367 0.099603 0.468750 +v 0.138467 0.074012 0.500000 +v -0.156250 -0.015389 0.468750 +v -0.150245 -0.045576 0.500000 +v 0.099603 0.121367 0.468750 +v 0.121367 0.099603 0.500000 +v -0.156250 0.015389 0.468750 +v -0.156250 -0.015389 0.500000 +v 0.074012 0.138466 0.468750 +v 0.099604 0.121367 0.500000 +v -0.150245 0.045576 0.468750 +v -0.156250 0.015389 0.500000 +v 0.045577 0.150245 0.468750 +v 0.074012 0.138466 0.500000 +v -0.138467 0.074012 0.468750 +v -0.150245 0.045576 0.500000 +v 0.015389 0.156249 0.468750 +v 0.045577 0.150245 0.500000 +v -0.015389 0.156250 0.500000 +v -0.121367 0.099603 0.468750 +v -0.138467 0.074012 0.500000 +v -0.015389 0.156250 0.468750 +v 0.015389 0.156250 0.500000 +v -0.074012 0.138467 0.500000 +v -0.045576 0.150245 0.500000 +v -0.099603 0.121367 0.500000 +v -0.121367 0.099603 0.500000 +v -0.045576 0.150245 0.468750 +v -0.099603 0.121367 0.468750 +v -0.074012 0.138467 0.468750 +v -0.108578 0.095821 0.460912 +v -0.108578 0.095821 0.468749 +v -0.110913 0.104534 0.468749 +v -0.110913 0.104534 0.460912 +v -0.104534 0.110913 0.460912 +v -0.095821 0.108578 0.460912 +v -0.093486 0.099865 0.460912 +v -0.099865 0.093486 0.460912 +v -0.099865 0.093486 0.468749 +v -0.104534 0.110913 0.468749 +v -0.095821 0.108578 0.468749 +v -0.093486 0.099865 0.468749 +v -0.095821 0.108578 -0.460914 +v -0.095821 0.108578 -0.468751 +v -0.104534 0.110913 -0.468751 +v -0.104534 0.110913 -0.460914 +v -0.110913 0.104534 -0.460914 +v -0.108578 0.095821 -0.460914 +v -0.099865 0.093486 -0.460914 +v -0.093486 0.099865 -0.460914 +v -0.093486 0.099865 -0.468751 +v -0.110913 0.104534 -0.468751 +v -0.108578 0.095821 -0.468751 +v -0.099865 0.093486 -0.468751 +v -0.144532 -0.009021 0.460912 +v -0.144532 -0.009021 0.468749 +v -0.152344 -0.004510 0.468749 +v -0.152344 -0.004510 0.460912 +v -0.152344 0.004510 0.460912 +v -0.144532 0.009021 0.460912 +v -0.136720 0.004510 0.460912 +v -0.136720 -0.004510 0.460912 +v -0.136720 -0.004510 0.468749 +v -0.152344 0.004510 0.468749 +v -0.144532 0.009021 0.468749 +v -0.136720 0.004510 0.468749 +v -0.144532 0.009021 -0.460914 +v -0.144532 0.009021 -0.468751 +v -0.152344 0.004510 -0.468751 +v -0.152344 0.004510 -0.460914 +v -0.152344 -0.004510 -0.460914 +v -0.144532 -0.009021 -0.460914 +v -0.136720 -0.004510 -0.460914 +v -0.136720 0.004510 -0.460914 +v -0.136720 0.004510 -0.468751 +v -0.152344 -0.004510 -0.468751 +v -0.144532 -0.009021 -0.468751 +v -0.136720 -0.004510 -0.468751 +v -0.095821 -0.108578 0.460912 +v -0.095821 -0.108578 0.468749 +v -0.104534 -0.110913 0.468749 +v -0.104534 -0.110913 0.460912 +v -0.110913 -0.104534 0.460912 +v -0.108578 -0.095821 0.460912 +v -0.099865 -0.093486 0.460912 +v -0.093486 -0.099865 0.460912 +v -0.093486 -0.099865 0.468749 +v -0.110913 -0.104534 0.468749 +v -0.108578 -0.095821 0.468749 +v -0.099865 -0.093486 0.468749 +v -0.108578 -0.095821 -0.460914 +v -0.108578 -0.095821 -0.468751 +v -0.110913 -0.104534 -0.468751 +v -0.110913 -0.104534 -0.460914 +v -0.104534 -0.110913 -0.460914 +v -0.095821 -0.108578 -0.460914 +v -0.093486 -0.099865 -0.460914 +v -0.099865 -0.093486 -0.460914 +v -0.099865 -0.093486 -0.468751 +v -0.104534 -0.110913 -0.468751 +v -0.095821 -0.108578 -0.468751 +v -0.093486 -0.099865 -0.468751 +v 0.009021 -0.144532 0.460912 +v 0.009021 -0.144532 0.468749 +v 0.004510 -0.152344 0.468749 +v 0.004510 -0.152344 0.460912 +v -0.004510 -0.152344 0.460912 +v -0.009021 -0.144532 0.460912 +v -0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.468749 +v -0.004510 -0.152344 0.468749 +v -0.009021 -0.144532 0.468749 +v -0.004510 -0.136720 0.468749 +v -0.009021 -0.144532 -0.460914 +v -0.009021 -0.144532 -0.468751 +v -0.004510 -0.152344 -0.468751 +v -0.004510 -0.152344 -0.460914 +v 0.004510 -0.152344 -0.460914 +v 0.009021 -0.144532 -0.460914 +v 0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.468751 +v 0.004510 -0.152344 -0.468751 +v 0.009021 -0.144532 -0.468751 +v 0.004510 -0.136720 -0.468751 +v 0.108578 -0.095821 0.460912 +v 0.108578 -0.095821 0.468749 +v 0.110913 -0.104534 0.468749 +v 0.110913 -0.104534 0.460912 +v 0.104534 -0.110913 0.460912 +v 0.095821 -0.108578 0.460912 +v 0.093486 -0.099865 0.460912 +v 0.099865 -0.093486 0.460912 +v 0.099865 -0.093486 0.468749 +v 0.104534 -0.110913 0.468749 +v 0.095821 -0.108578 0.468749 +v 0.093486 -0.099865 0.468749 +v 0.095821 -0.108578 -0.460914 +v 0.095821 -0.108578 -0.468751 +v 0.104534 -0.110913 -0.468751 +v 0.104534 -0.110913 -0.460914 +v 0.110913 -0.104534 -0.460914 +v 0.108578 -0.095821 -0.460914 +v 0.099865 -0.093486 -0.460914 +v 0.093486 -0.099865 -0.460914 +v 0.093486 -0.099865 -0.468751 +v 0.110913 -0.104534 -0.468751 +v 0.108578 -0.095821 -0.468751 +v 0.099865 -0.093486 -0.468751 +v 0.144532 0.009021 0.460912 +v 0.144532 0.009021 0.468749 +v 0.152344 0.004510 0.468749 +v 0.152344 0.004510 0.460912 +v 0.152344 -0.004510 0.460912 +v 0.144532 -0.009021 0.460912 +v 0.136720 -0.004510 0.460912 +v 0.136720 0.004510 0.460912 +v 0.136720 0.004510 0.468749 +v 0.152344 -0.004510 0.468749 +v 0.144532 -0.009021 0.468749 +v 0.136720 -0.004510 0.468749 +v 0.144532 -0.009021 -0.460914 +v 0.144532 -0.009021 -0.468751 +v 0.152344 -0.004510 -0.468751 +v 0.152344 -0.004510 -0.460914 +v 0.152344 0.004510 -0.460914 +v 0.144532 0.009021 -0.460914 +v 0.136720 0.004510 -0.460914 +v 0.136720 -0.004510 -0.460914 +v 0.136720 -0.004510 -0.468751 +v 0.152344 0.004510 -0.468751 +v 0.144532 0.009021 -0.468751 +v 0.136720 0.004510 -0.468751 +v 0.095821 0.108578 0.460912 +v 0.095821 0.108578 0.468749 +v 0.104534 0.110913 0.468749 +v 0.104534 0.110913 0.460912 +v 0.110913 0.104534 0.460912 +v 0.108578 0.095821 0.460912 +v 0.099865 0.093486 0.460912 +v 0.093486 0.099865 0.460912 +v 0.093486 0.099865 0.468749 +v 0.110913 0.104534 0.468749 +v 0.108578 0.095821 0.468749 +v 0.099865 0.093486 0.468749 +v 0.108578 0.095821 -0.460914 +v 0.108578 0.095821 -0.468751 +v 0.110913 0.104534 -0.468751 +v 0.110913 0.104534 -0.460914 +v 0.104534 0.110913 -0.460914 +v 0.095821 0.108578 -0.460914 +v 0.093486 0.099865 -0.460914 +v 0.099865 0.093486 -0.460914 +v 0.099865 0.093486 -0.468751 +v 0.104534 0.110913 -0.468751 +v 0.095821 0.108578 -0.468751 +v 0.093486 0.099865 -0.468751 +v -0.009021 0.144532 0.460912 +v -0.009021 0.144532 0.468749 +v -0.004510 0.152344 0.468749 +v -0.004510 0.152344 0.460912 +v 0.004511 0.152344 0.460912 +v 0.009021 0.144532 0.460912 +v 0.004511 0.136720 0.460912 +v -0.004510 0.136720 0.460912 +v -0.004510 0.136720 0.468749 +v 0.004511 0.152344 0.468749 +v 0.009021 0.144532 0.468749 +v 0.004511 0.136720 0.468749 +v 0.009021 0.144532 -0.460914 +v 0.009021 0.144532 -0.468751 +v 0.004510 0.152344 -0.468751 +v 0.004510 0.152344 -0.460914 +v -0.004510 0.152344 -0.460914 +v -0.009021 0.144532 -0.460914 +v -0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.468751 +v -0.004510 0.152344 -0.468751 +v -0.009021 0.144532 -0.468751 +v -0.004510 0.136720 -0.468751 +v -0.008307 0.249999 0.031003 +v -0.008307 0.281249 0.031003 +v -0.022696 0.249999 0.022696 +v -0.022696 0.281249 0.022696 +v -0.031003 0.249999 0.008307 +v -0.031003 0.281249 0.008307 +v -0.031003 0.249999 -0.008307 +v -0.031003 0.281249 -0.008307 +v -0.022696 0.249999 -0.022696 +v -0.022696 0.281249 -0.022696 +v -0.008307 0.249999 -0.031003 +v -0.008307 0.281249 -0.031003 +v 0.008307 0.249999 -0.031003 +v 0.008307 0.281249 -0.031003 +v 0.022696 0.249999 -0.022696 +v 0.022696 0.281249 -0.022696 +v 0.031003 0.249999 -0.008307 +v 0.031003 0.281249 -0.008307 +v 0.031003 0.249999 0.008307 +v 0.031003 0.281249 0.008307 +v 0.022696 0.249999 0.022696 +v 0.022696 0.281249 0.022696 +v 0.008307 0.249999 0.031003 +v 0.008307 0.281249 0.031003 +v -0.004629 0.281250 0.047001 +v -0.006156 0.296747 0.062499 +v -0.005101 0.282008 0.051790 +v -0.005526 0.284210 0.056111 +v -0.005864 0.287638 0.059539 +v -0.006081 0.291958 0.061740 +v -0.004629 0.343750 0.047001 +v -0.006156 0.328252 0.062499 +v -0.005101 0.342991 0.051790 +v -0.005526 0.340790 0.056111 +v -0.005864 0.337362 0.059539 +v -0.006081 0.333041 0.061740 +v -0.013710 0.281250 0.045195 +v -0.018230 0.296747 0.060097 +v -0.015107 0.282008 0.049800 +v -0.016367 0.284210 0.053954 +v -0.017367 0.287638 0.057251 +v -0.018009 0.291958 0.059368 +v -0.013710 0.343750 0.045195 +v -0.018230 0.328252 0.060097 +v -0.015107 0.342991 0.049800 +v -0.016367 0.340790 0.053954 +v -0.017367 0.337362 0.057251 +v -0.018009 0.333041 0.059368 +v -0.022264 0.281250 0.041652 +v -0.029604 0.296747 0.055386 +v -0.024532 0.282008 0.045896 +v -0.026578 0.284210 0.049725 +v -0.028202 0.287638 0.052763 +v -0.029245 0.291958 0.054714 +v -0.022264 0.343750 0.041652 +v -0.029604 0.328252 0.055386 +v -0.024532 0.342991 0.045896 +v -0.026578 0.340790 0.049725 +v -0.028202 0.337362 0.052763 +v -0.029245 0.333041 0.054714 +v -0.029962 0.281250 0.036508 +v -0.039841 0.296747 0.048546 +v -0.033014 0.282008 0.040228 +v -0.035768 0.284210 0.043584 +v -0.037954 0.287638 0.046247 +v -0.039357 0.291958 0.047957 +v -0.029962 0.343750 0.036508 +v -0.039841 0.328252 0.048546 +v -0.033014 0.342991 0.040228 +v -0.035768 0.340790 0.043584 +v -0.037954 0.337362 0.046247 +v -0.039357 0.333041 0.047957 +v -0.036508 0.281250 0.029962 +v -0.048546 0.296747 0.039841 +v -0.040228 0.282008 0.033014 +v -0.043584 0.284210 0.035768 +v -0.046247 0.287638 0.037954 +v -0.047957 0.291958 0.039357 +v -0.036508 0.343750 0.029962 +v -0.048546 0.328252 0.039841 +v -0.040228 0.342991 0.033014 +v -0.043584 0.340790 0.035768 +v -0.046247 0.337362 0.037954 +v -0.047957 0.333041 0.039357 +v -0.041652 0.281250 0.022263 +v -0.055386 0.296747 0.029604 +v -0.045896 0.282008 0.024532 +v -0.049725 0.284210 0.026578 +v -0.052763 0.287638 0.028202 +v -0.054714 0.291958 0.029245 +v -0.041652 0.343750 0.022263 +v -0.055386 0.328252 0.029604 +v -0.045896 0.342991 0.024532 +v -0.049725 0.340790 0.026578 +v -0.052763 0.337362 0.028202 +v -0.054714 0.333041 0.029245 +v -0.045195 0.281250 0.013710 +v -0.060097 0.296747 0.018230 +v -0.049800 0.282008 0.015107 +v -0.053954 0.284210 0.016367 +v -0.057251 0.287638 0.017367 +v -0.059368 0.291958 0.018009 +v -0.045195 0.343750 0.013710 +v -0.060097 0.328252 0.018230 +v -0.049800 0.342991 0.015107 +v -0.053954 0.340790 0.016367 +v -0.057251 0.337362 0.017367 +v -0.059368 0.333041 0.018009 +v -0.047001 0.281250 0.004629 +v -0.062499 0.296747 0.006156 +v -0.051790 0.282008 0.005101 +v -0.056111 0.284210 0.005526 +v -0.059539 0.287638 0.005864 +v -0.061740 0.291958 0.006081 +v -0.047001 0.343750 0.004629 +v -0.062499 0.328252 0.006156 +v -0.051790 0.342991 0.005101 +v -0.056111 0.340790 0.005526 +v -0.059539 0.337362 0.005864 +v -0.061740 0.333041 0.006081 +v -0.047001 0.281250 -0.004629 +v -0.062499 0.296747 -0.006156 +v -0.051790 0.282008 -0.005101 +v -0.056111 0.284210 -0.005526 +v -0.059539 0.287638 -0.005864 +v -0.061740 0.291958 -0.006081 +v -0.047001 0.343750 -0.004629 +v -0.062499 0.328252 -0.006156 +v -0.051790 0.342991 -0.005101 +v -0.056111 0.340790 -0.005526 +v -0.059539 0.337362 -0.005864 +v -0.061740 0.333041 -0.006081 +v -0.045195 0.281250 -0.013710 +v -0.060097 0.296747 -0.018230 +v -0.049800 0.282008 -0.015107 +v -0.053954 0.284210 -0.016367 +v -0.057251 0.287638 -0.017367 +v -0.059368 0.291958 -0.018009 +v -0.045195 0.343750 -0.013710 +v -0.060097 0.328252 -0.018230 +v -0.049800 0.342991 -0.015107 +v -0.053954 0.340790 -0.016367 +v -0.057251 0.337362 -0.017367 +v -0.059368 0.333041 -0.018009 +v -0.041652 0.281250 -0.022264 +v -0.055386 0.296747 -0.029604 +v -0.045896 0.282008 -0.024532 +v -0.049725 0.284210 -0.026578 +v -0.052763 0.287638 -0.028202 +v -0.054714 0.291958 -0.029245 +v -0.041652 0.343750 -0.022264 +v -0.055386 0.328252 -0.029604 +v -0.045896 0.342991 -0.024532 +v -0.049725 0.340790 -0.026578 +v -0.052763 0.337362 -0.028202 +v -0.054714 0.333041 -0.029245 +v -0.036508 0.281250 -0.029962 +v -0.048546 0.296747 -0.039841 +v -0.040228 0.282008 -0.033014 +v -0.043584 0.284210 -0.035768 +v -0.046247 0.287638 -0.037954 +v -0.047957 0.291958 -0.039357 +v -0.036508 0.343750 -0.029962 +v -0.048546 0.328252 -0.039841 +v -0.040228 0.342991 -0.033014 +v -0.043584 0.340790 -0.035768 +v -0.046247 0.337362 -0.037954 +v -0.047957 0.333041 -0.039357 +v -0.029962 0.281250 -0.036508 +v -0.039841 0.296747 -0.048546 +v -0.033014 0.282008 -0.040228 +v -0.035768 0.284210 -0.043584 +v -0.037954 0.287638 -0.046247 +v -0.039357 0.291958 -0.047957 +v -0.029962 0.343750 -0.036508 +v -0.039841 0.328252 -0.048546 +v -0.033014 0.342991 -0.040228 +v -0.035768 0.340790 -0.043584 +v -0.037954 0.337362 -0.046247 +v -0.039357 0.333041 -0.047957 +v -0.022264 0.281250 -0.041652 +v -0.029604 0.296747 -0.055386 +v -0.024532 0.282008 -0.045896 +v -0.026578 0.284210 -0.049725 +v -0.028202 0.287638 -0.052763 +v -0.029245 0.291958 -0.054714 +v -0.022264 0.343750 -0.041652 +v -0.029604 0.328252 -0.055386 +v -0.024532 0.342991 -0.045896 +v -0.026578 0.340790 -0.049725 +v -0.028202 0.337362 -0.052763 +v -0.029245 0.333041 -0.054714 +v -0.013710 0.281250 -0.045195 +v -0.018230 0.296747 -0.060097 +v -0.015107 0.282008 -0.049800 +v -0.016367 0.284210 -0.053954 +v -0.017367 0.287638 -0.057251 +v -0.018009 0.291958 -0.059368 +v -0.013710 0.343750 -0.045195 +v -0.018230 0.328252 -0.060097 +v -0.015107 0.342991 -0.049800 +v -0.016367 0.340790 -0.053954 +v -0.017367 0.337362 -0.057251 +v -0.018009 0.333041 -0.059368 +v -0.004629 0.281250 -0.047001 +v -0.006156 0.296747 -0.062499 +v -0.005101 0.282008 -0.051790 +v -0.005526 0.284210 -0.056111 +v -0.005864 0.287638 -0.059539 +v -0.006081 0.291958 -0.061740 +v -0.004629 0.343750 -0.047001 +v -0.006156 0.328252 -0.062499 +v -0.005101 0.342991 -0.051790 +v -0.005526 0.340790 -0.056111 +v -0.005864 0.337362 -0.059539 +v -0.006081 0.333041 -0.061740 +v 0.004629 0.281250 -0.047001 +v 0.006156 0.296747 -0.062499 +v 0.005101 0.282008 -0.051790 +v 0.005526 0.284210 -0.056111 +v 0.005864 0.287638 -0.059539 +v 0.006081 0.291958 -0.061740 +v 0.004629 0.343750 -0.047001 +v 0.006156 0.328252 -0.062499 +v 0.005101 0.342991 -0.051790 +v 0.005526 0.340790 -0.056111 +v 0.005864 0.337362 -0.059539 +v 0.006081 0.333041 -0.061740 +v 0.014490 0.281250 -0.045040 +v 0.018230 0.296747 -0.060097 +v 0.015646 0.282008 -0.049693 +v 0.016688 0.284210 -0.053890 +v 0.017516 0.287638 -0.057221 +v 0.018047 0.291958 -0.059360 +v 0.014490 0.343750 -0.045040 +v 0.018230 0.328252 -0.060097 +v 0.015646 0.342991 -0.049693 +v 0.016688 0.340790 -0.053890 +v 0.017516 0.337362 -0.057221 +v 0.018047 0.333041 -0.059360 +v 0.014490 0.281250 0.045040 +v 0.018230 0.296747 0.060097 +v 0.015646 0.282008 0.049693 +v 0.016688 0.284210 0.053890 +v 0.017516 0.287638 0.057221 +v 0.018047 0.291958 0.059360 +v 0.014490 0.343750 0.045040 +v 0.018230 0.328252 0.060097 +v 0.015646 0.342991 0.049693 +v 0.016688 0.340790 0.053890 +v 0.017516 0.337362 0.057221 +v 0.018047 0.333041 0.059360 +v 0.004629 0.281250 0.047001 +v 0.006156 0.296747 0.062499 +v 0.005101 0.282008 0.051790 +v 0.005526 0.284210 0.056111 +v 0.005864 0.287638 0.059539 +v 0.006081 0.291958 0.061740 +v 0.004629 0.343750 0.047001 +v 0.006156 0.328252 0.062499 +v 0.005101 0.342991 0.051790 +v 0.005526 0.340790 0.056111 +v 0.005864 0.337362 0.059539 +v 0.006081 0.333041 0.061740 +v 0.323211 0.281250 -0.040589 +v 0.324445 0.296747 -0.056053 +v 0.323592 0.282008 -0.045368 +v 0.323937 0.284210 -0.049679 +v 0.324210 0.287638 -0.053100 +v 0.324385 0.291958 -0.055296 +v 0.359503 0.281250 -0.003958 +v 0.375000 0.296747 -0.004827 +v 0.364292 0.282008 -0.004226 +v 0.368612 0.284210 -0.004468 +v 0.372040 0.287638 -0.004661 +v 0.374242 0.291958 -0.004784 +v 0.332037 0.281250 -0.039478 +v 0.335695 0.296747 -0.054637 +v 0.333167 0.282008 -0.044162 +v 0.334187 0.284210 -0.048388 +v 0.334996 0.287638 -0.051742 +v 0.335516 0.291958 -0.053895 +v 0.339466 0.281250 -0.036780 +v 0.346380 0.296747 -0.050757 +v 0.341602 0.282008 -0.041099 +v 0.343530 0.284210 -0.044995 +v 0.345060 0.287638 -0.048087 +v 0.346042 0.291958 -0.050073 +v 0.346146 0.281250 -0.032494 +v 0.355966 0.296747 -0.044607 +v 0.349180 0.282008 -0.036237 +v 0.351918 0.284210 -0.039614 +v 0.354090 0.287638 -0.042293 +v 0.355485 0.291958 -0.044014 +v 0.351729 0.281250 -0.026837 +v 0.363971 0.296747 -0.036495 +v 0.355512 0.282008 -0.029821 +v 0.358924 0.284210 -0.032514 +v 0.361633 0.287638 -0.034651 +v 0.363371 0.291958 -0.036023 +v 0.355927 0.281250 -0.020100 +v 0.369993 0.296747 -0.026830 +v 0.360274 0.282008 -0.022180 +v 0.364195 0.284210 -0.024056 +v 0.367307 0.287638 -0.025544 +v 0.369305 0.291958 -0.026500 +v 0.358526 0.281250 -0.012636 +v 0.373732 0.296747 -0.016094 +v 0.363225 0.282008 -0.013705 +v 0.367464 0.284210 -0.014669 +v 0.370828 0.287638 -0.015433 +v 0.372988 0.291958 -0.015925 +v 0.359503 0.343750 -0.003958 +v 0.375000 0.328252 -0.004827 +v 0.364292 0.342991 -0.004226 +v 0.368612 0.340790 -0.004468 +v 0.372040 0.337362 -0.004661 +v 0.374242 0.333041 -0.004784 +v 0.323211 0.343750 -0.040589 +v 0.324445 0.328252 -0.056053 +v 0.323592 0.342991 -0.045368 +v 0.323937 0.340790 -0.049679 +v 0.324210 0.337362 -0.053100 +v 0.324385 0.333041 -0.055296 +v 0.358526 0.343750 -0.012636 +v 0.373732 0.328252 -0.016094 +v 0.363225 0.342991 -0.013705 +v 0.367464 0.340790 -0.014669 +v 0.370828 0.337362 -0.015433 +v 0.372988 0.333041 -0.015925 +v 0.355927 0.343750 -0.020100 +v 0.369993 0.328252 -0.026830 +v 0.360274 0.342991 -0.022180 +v 0.364195 0.340790 -0.024056 +v 0.367307 0.337362 -0.025544 +v 0.369305 0.333041 -0.026500 +v 0.351729 0.343750 -0.026837 +v 0.363971 0.328252 -0.036495 +v 0.355512 0.342991 -0.029821 +v 0.358924 0.340790 -0.032514 +v 0.361633 0.337362 -0.034651 +v 0.363371 0.333041 -0.036023 +v 0.346146 0.343750 -0.032494 +v 0.355966 0.328252 -0.044607 +v 0.349180 0.342991 -0.036237 +v 0.351918 0.340790 -0.039614 +v 0.354090 0.337362 -0.042293 +v 0.355485 0.333041 -0.044014 +v 0.339466 0.343750 -0.036780 +v 0.346380 0.328252 -0.050757 +v 0.341602 0.342991 -0.041099 +v 0.343530 0.340790 -0.044995 +v 0.345060 0.337362 -0.048087 +v 0.346042 0.333041 -0.050073 +v 0.332037 0.343750 -0.039478 +v 0.335695 0.328252 -0.054637 +v 0.333167 0.342991 -0.044162 +v 0.334187 0.340790 -0.048388 +v 0.334996 0.337362 -0.051742 +v 0.335516 0.333041 -0.053895 +v 0.359503 0.281250 0.003958 +v 0.375000 0.296747 0.004827 +v 0.364292 0.282008 0.004226 +v 0.368612 0.284210 0.004468 +v 0.372040 0.287638 0.004661 +v 0.374242 0.291958 0.004784 +v 0.323211 0.281250 0.040589 +v 0.324445 0.296747 0.056053 +v 0.323592 0.282008 0.045368 +v 0.323937 0.284210 0.049679 +v 0.324210 0.287638 0.053100 +v 0.324385 0.291958 0.055296 +v 0.358526 0.281250 0.012636 +v 0.373732 0.296747 0.016094 +v 0.363225 0.282008 0.013705 +v 0.367464 0.284210 0.014669 +v 0.370828 0.287638 0.015434 +v 0.372988 0.291958 0.015925 +v 0.355927 0.281250 0.020100 +v 0.369993 0.296747 0.026830 +v 0.360274 0.282008 0.022180 +v 0.364195 0.284210 0.024056 +v 0.367307 0.287638 0.025544 +v 0.369305 0.291958 0.026500 +v 0.351729 0.281250 0.026837 +v 0.363971 0.296747 0.036495 +v 0.355512 0.282008 0.029821 +v 0.358924 0.284210 0.032514 +v 0.361633 0.287638 0.034651 +v 0.363371 0.291958 0.036023 +v 0.346146 0.281250 0.032494 +v 0.355966 0.296747 0.044607 +v 0.349180 0.282008 0.036237 +v 0.351918 0.284210 0.039614 +v 0.354090 0.287638 0.042293 +v 0.355485 0.291958 0.044014 +v 0.339466 0.281250 0.036780 +v 0.346380 0.296747 0.050757 +v 0.341602 0.282008 0.041099 +v 0.343530 0.284210 0.044995 +v 0.345060 0.287638 0.048087 +v 0.346042 0.291958 0.050073 +v 0.332037 0.281250 0.039478 +v 0.335695 0.296747 0.054637 +v 0.333167 0.282008 0.044162 +v 0.334187 0.284210 0.048388 +v 0.334996 0.287638 0.051742 +v 0.335516 0.291958 0.053895 +v 0.323211 0.343750 0.040589 +v 0.324445 0.328252 0.056053 +v 0.323592 0.342991 0.045368 +v 0.323937 0.340790 0.049679 +v 0.324210 0.337362 0.053100 +v 0.324385 0.333041 0.055296 +v 0.359503 0.343750 0.003958 +v 0.375000 0.328252 0.004827 +v 0.364292 0.342991 0.004226 +v 0.368612 0.340790 0.004468 +v 0.372040 0.337362 0.004661 +v 0.374242 0.333041 0.004784 +v 0.332037 0.343750 0.039478 +v 0.335695 0.328252 0.054637 +v 0.333167 0.342991 0.044162 +v 0.334187 0.340790 0.048388 +v 0.334996 0.337362 0.051742 +v 0.335516 0.333041 0.053895 +v 0.339466 0.343750 0.036780 +v 0.346380 0.328252 0.050757 +v 0.341602 0.342991 0.041099 +v 0.343530 0.340790 0.044995 +v 0.345060 0.337362 0.048087 +v 0.346042 0.333041 0.050073 +v 0.346146 0.343750 0.032494 +v 0.355966 0.328252 0.044607 +v 0.349180 0.342991 0.036237 +v 0.351918 0.340790 0.039614 +v 0.354090 0.337362 0.042293 +v 0.355485 0.333041 0.044014 +v 0.351729 0.343750 0.026837 +v 0.363971 0.328252 0.036495 +v 0.355512 0.342991 0.029821 +v 0.358924 0.340790 0.032514 +v 0.361633 0.337362 0.034651 +v 0.363371 0.333041 0.036023 +v 0.355927 0.343750 0.020100 +v 0.369993 0.328252 0.026830 +v 0.360274 0.342991 0.022180 +v 0.364195 0.340790 0.024056 +v 0.367307 0.337362 0.025544 +v 0.369305 0.333041 0.026500 +v 0.358526 0.343750 0.012636 +v 0.373732 0.328252 0.016094 +v 0.363225 0.342991 0.013705 +v 0.367464 0.340790 0.014669 +v 0.370828 0.337362 0.015433 +v 0.372988 0.333041 0.015925 +v 0.219651 0.343750 0.036895 +v 0.218008 0.328252 0.052305 +v 0.219143 0.342991 0.041657 +v 0.218685 0.340790 0.045952 +v 0.218322 0.337362 0.049362 +v 0.218088 0.333041 0.051551 +v 0.311965 0.343750 0.040972 +v 0.312492 0.328252 0.056461 +v 0.312128 0.342991 0.045758 +v 0.312275 0.340790 0.050076 +v 0.312391 0.337362 0.053502 +v 0.312466 0.333041 0.055702 +v 0.230936 0.343750 0.038102 +v 0.229673 0.328252 0.053548 +v 0.230545 0.342991 0.042875 +v 0.230193 0.340790 0.047181 +v 0.229914 0.337362 0.050598 +v 0.229735 0.333041 0.052792 +v 0.244087 0.343750 0.039181 +v 0.243130 0.328252 0.054649 +v 0.243791 0.342991 0.043961 +v 0.243524 0.340790 0.048272 +v 0.243312 0.337362 0.051694 +v 0.243177 0.333041 0.053891 +v 0.258385 0.343750 0.040068 +v 0.257704 0.328252 0.055550 +v 0.258175 0.342991 0.044852 +v 0.257985 0.340790 0.049168 +v 0.257834 0.337362 0.052593 +v 0.257737 0.333041 0.054793 +v 0.273069 0.343750 0.040716 +v 0.272665 0.328252 0.056208 +v 0.272944 0.342991 0.045504 +v 0.272832 0.340790 0.049822 +v 0.272742 0.337362 0.053250 +v 0.272685 0.333041 0.055450 +v 0.287360 0.343750 0.041093 +v 0.287262 0.328252 0.056590 +v 0.287330 0.342991 0.045881 +v 0.287302 0.340790 0.050201 +v 0.287281 0.337362 0.053630 +v 0.287267 0.333041 0.055831 +v 0.300480 0.343750 0.041180 +v 0.300763 0.328252 0.056675 +v 0.300567 0.342991 0.045968 +v 0.300646 0.340790 0.050288 +v 0.300709 0.337362 0.053716 +v 0.300749 0.333041 0.055917 +v 0.312209 0.281250 0.040966 +v 0.312492 0.296747 0.056461 +v 0.312296 0.282008 0.045754 +v 0.312375 0.284210 0.050073 +v 0.312438 0.287638 0.053501 +v 0.312478 0.291958 0.055702 +v 0.219893 0.281250 0.036922 +v 0.218008 0.296747 0.052305 +v 0.219311 0.282008 0.041676 +v 0.218785 0.284210 0.045964 +v 0.218368 0.287638 0.049367 +v 0.218100 0.291958 0.051552 +v 0.300861 0.281250 0.041178 +v 0.300763 0.296747 0.056675 +v 0.300831 0.282008 0.045967 +v 0.300804 0.284210 0.050287 +v 0.300782 0.287638 0.053715 +v 0.300768 0.291958 0.055917 +v 0.287667 0.281250 0.041097 +v 0.287262 0.296747 0.056590 +v 0.287542 0.282008 0.045885 +v 0.287429 0.284210 0.050204 +v 0.287339 0.287638 0.053631 +v 0.287282 0.291958 0.055831 +v 0.273346 0.281250 0.040726 +v 0.272665 0.296747 0.056208 +v 0.273135 0.282008 0.045510 +v 0.272945 0.284210 0.049826 +v 0.272795 0.287638 0.053251 +v 0.272698 0.291958 0.055451 +v 0.258661 0.281250 0.040082 +v 0.257704 0.296747 0.055550 +v 0.258365 0.282008 0.044862 +v 0.258098 0.284210 0.049174 +v 0.257887 0.287638 0.052596 +v 0.257751 0.291958 0.054793 +v 0.244393 0.281250 0.039203 +v 0.243130 0.296747 0.054649 +v 0.244002 0.282008 0.043976 +v 0.243650 0.284210 0.048282 +v 0.243371 0.287638 0.051699 +v 0.243192 0.291958 0.053893 +v 0.231316 0.281250 0.038138 +v 0.229673 0.296747 0.053548 +v 0.230808 0.282008 0.042900 +v 0.230350 0.284210 0.047196 +v 0.229987 0.287638 0.050605 +v 0.229753 0.291958 0.052794 +v 0.312209 0.343750 -0.040966 +v 0.312492 0.328252 -0.056460 +v 0.312296 0.342991 -0.045754 +v 0.312375 0.340790 -0.050073 +v 0.312438 0.337362 -0.053501 +v 0.312478 0.333041 -0.055702 +v 0.219894 0.343750 -0.036922 +v 0.218008 0.328252 -0.052305 +v 0.219311 0.342991 -0.041676 +v 0.218785 0.340790 -0.045964 +v 0.218368 0.337362 -0.049367 +v 0.218100 0.333041 -0.051552 +v 0.300862 0.343750 -0.041178 +v 0.300763 0.328252 -0.056675 +v 0.300831 0.342991 -0.045967 +v 0.300804 0.340790 -0.050287 +v 0.300782 0.337362 -0.053715 +v 0.300768 0.333041 -0.055917 +v 0.287667 0.343750 -0.041097 +v 0.287262 0.328252 -0.056590 +v 0.287542 0.342991 -0.045885 +v 0.287429 0.340790 -0.050204 +v 0.287339 0.337362 -0.053631 +v 0.287282 0.333041 -0.055831 +v 0.273346 0.343750 -0.040726 +v 0.272665 0.328252 -0.056208 +v 0.273135 0.342991 -0.045510 +v 0.272945 0.340790 -0.049826 +v 0.272795 0.337362 -0.053251 +v 0.272698 0.333041 -0.055451 +v 0.258661 0.343750 -0.040082 +v 0.257704 0.328252 -0.055550 +v 0.258365 0.342991 -0.044862 +v 0.258098 0.340790 -0.049174 +v 0.257887 0.337362 -0.052596 +v 0.257751 0.333041 -0.054793 +v 0.244393 0.343750 -0.039203 +v 0.243130 0.328252 -0.054649 +v 0.244002 0.342991 -0.043976 +v 0.243650 0.340790 -0.048282 +v 0.243371 0.337362 -0.051699 +v 0.243192 0.333041 -0.053893 +v 0.231316 0.343750 -0.038138 +v 0.229673 0.328252 -0.053548 +v 0.230808 0.342991 -0.042900 +v 0.230350 0.340790 -0.047196 +v 0.229987 0.337362 -0.050605 +v 0.229753 0.333041 -0.052794 +v 0.219651 0.281250 -0.036895 +v 0.218008 0.296747 -0.052305 +v 0.219143 0.282008 -0.041657 +v 0.218685 0.284210 -0.045952 +v 0.218322 0.287638 -0.049362 +v 0.218089 0.291958 -0.051551 +v 0.311965 0.281250 -0.040972 +v 0.312492 0.296747 -0.056460 +v 0.312128 0.282008 -0.045758 +v 0.312275 0.284210 -0.050076 +v 0.312391 0.287638 -0.053502 +v 0.312466 0.291958 -0.055702 +v 0.230936 0.281250 -0.038102 +v 0.229673 0.296747 -0.053548 +v 0.230546 0.282008 -0.042875 +v 0.230193 0.284210 -0.047181 +v 0.229914 0.287638 -0.050598 +v 0.229735 0.291958 -0.052792 +v 0.244087 0.281250 -0.039181 +v 0.243130 0.296747 -0.054649 +v 0.243791 0.282008 -0.043961 +v 0.243524 0.284210 -0.048272 +v 0.243313 0.287638 -0.051694 +v 0.243177 0.291958 -0.053891 +v 0.258385 0.281250 -0.040068 +v 0.257704 0.296747 -0.055550 +v 0.258175 0.282008 -0.044852 +v 0.257985 0.284210 -0.049168 +v 0.257834 0.287638 -0.052593 +v 0.257737 0.291958 -0.054793 +v 0.273070 0.281250 -0.040716 +v 0.272665 0.296747 -0.056208 +v 0.272944 0.282008 -0.045503 +v 0.272832 0.284210 -0.049822 +v 0.272742 0.287638 -0.053250 +v 0.272685 0.291958 -0.055450 +v 0.287360 0.281250 -0.041093 +v 0.287262 0.296747 -0.056590 +v 0.287330 0.282008 -0.045881 +v 0.287302 0.284210 -0.050201 +v 0.287281 0.287638 -0.053630 +v 0.287267 0.291958 -0.055831 +v 0.300480 0.281250 -0.041180 +v 0.300763 0.296747 -0.056675 +v 0.300567 0.282008 -0.045968 +v 0.300647 0.284210 -0.050288 +v 0.300709 0.287638 -0.053716 +v 0.300750 0.291958 -0.055917 +v 0.126339 0.281250 0.025464 +v 0.124954 0.296747 0.040899 +v 0.125911 0.282008 0.030234 +v 0.125525 0.284210 0.034537 +v 0.125218 0.287638 0.037951 +v 0.125022 0.291958 0.040144 +v 0.061222 0.281250 0.031063 +v 0.065663 0.296747 0.045911 +v 0.062594 0.282008 0.035651 +v 0.063832 0.284210 0.039791 +v 0.064815 0.287638 0.043075 +v 0.065446 0.291958 0.045184 +v 0.120244 0.281250 0.024917 +v 0.119272 0.296747 0.040389 +v 0.119944 0.282008 0.029698 +v 0.119673 0.284210 0.034011 +v 0.119458 0.287638 0.037434 +v 0.119320 0.291958 0.039632 +v 0.113093 0.281250 0.024660 +v 0.112879 0.296747 0.040160 +v 0.113027 0.282008 0.029450 +v 0.112967 0.284210 0.033771 +v 0.112920 0.287638 0.037200 +v 0.112889 0.291958 0.039401 +v 0.105535 0.281250 0.024723 +v 0.105967 0.296747 0.040217 +v 0.105669 0.282008 0.029511 +v 0.105789 0.284210 0.033830 +v 0.105885 0.287638 0.037258 +v 0.105946 0.291958 0.039459 +v 0.097727 0.281250 0.025094 +v 0.098748 0.296747 0.040560 +v 0.098043 0.282008 0.029873 +v 0.098327 0.284210 0.034184 +v 0.098553 0.287638 0.037606 +v 0.098698 0.291958 0.039803 +v 0.089850 0.281250 0.025759 +v 0.091440 0.296747 0.041178 +v 0.090341 0.282008 0.030524 +v 0.090784 0.284210 0.034822 +v 0.091136 0.287638 0.038233 +v 0.091362 0.291958 0.040423 +v 0.082091 0.281250 0.026705 +v 0.084265 0.296747 0.042052 +v 0.082763 0.282008 0.031447 +v 0.083369 0.284210 0.035725 +v 0.083850 0.287638 0.039121 +v 0.084159 0.291958 0.041300 +v 0.074630 0.281250 0.027911 +v 0.077442 0.296747 0.043155 +v 0.075499 0.282008 0.032622 +v 0.076283 0.284210 0.036871 +v 0.076905 0.287638 0.040244 +v 0.077305 0.291958 0.042409 +v 0.067623 0.281250 0.029365 +v 0.071178 0.296747 0.044455 +v 0.068722 0.282008 0.034028 +v 0.069713 0.284210 0.038234 +v 0.070499 0.287638 0.041573 +v 0.071004 0.291958 0.043716 +v 0.126339 0.343750 -0.025464 +v 0.124954 0.328252 -0.040899 +v 0.125911 0.342991 -0.030234 +v 0.125525 0.340790 -0.034537 +v 0.125218 0.337362 -0.037951 +v 0.125022 0.333041 -0.040144 +v 0.061222 0.343750 -0.031063 +v 0.065663 0.328252 -0.045911 +v 0.062595 0.342991 -0.035651 +v 0.063832 0.340790 -0.039791 +v 0.064815 0.337362 -0.043075 +v 0.065446 0.333041 -0.045184 +v 0.120244 0.343750 -0.024917 +v 0.119272 0.328252 -0.040389 +v 0.119944 0.342991 -0.029698 +v 0.119673 0.340790 -0.034011 +v 0.119458 0.337362 -0.037434 +v 0.119320 0.333041 -0.039632 +v 0.113093 0.343750 -0.024660 +v 0.112879 0.328252 -0.040160 +v 0.113027 0.342991 -0.029450 +v 0.112967 0.340790 -0.033771 +v 0.112920 0.337362 -0.037200 +v 0.112889 0.333041 -0.039401 +v 0.105535 0.343750 -0.024723 +v 0.105967 0.328252 -0.040217 +v 0.105669 0.342991 -0.029511 +v 0.105789 0.340790 -0.033830 +v 0.105885 0.337362 -0.037258 +v 0.105946 0.333041 -0.039459 +v 0.097728 0.343750 -0.025094 +v 0.098748 0.328252 -0.040560 +v 0.098043 0.342991 -0.029873 +v 0.098327 0.340790 -0.034184 +v 0.098553 0.337362 -0.037606 +v 0.098698 0.333041 -0.039803 +v 0.089850 0.343750 -0.025759 +v 0.091440 0.328252 -0.041178 +v 0.090341 0.342991 -0.030524 +v 0.090785 0.340790 -0.034822 +v 0.091136 0.337362 -0.038233 +v 0.091362 0.333041 -0.040423 +v 0.082091 0.343750 -0.026705 +v 0.084265 0.328252 -0.042052 +v 0.082763 0.342991 -0.031447 +v 0.083369 0.340790 -0.035725 +v 0.083850 0.337362 -0.039121 +v 0.084159 0.333041 -0.041300 +v 0.074630 0.343750 -0.027911 +v 0.077442 0.328252 -0.043155 +v 0.075499 0.342991 -0.032622 +v 0.076283 0.340790 -0.036871 +v 0.076905 0.337362 -0.040244 +v 0.077305 0.333041 -0.042409 +v 0.067623 0.343750 -0.029365 +v 0.071178 0.328252 -0.044455 +v 0.068722 0.342991 -0.034028 +v 0.069713 0.340790 -0.038234 +v 0.070499 0.337362 -0.041573 +v 0.071004 0.333041 -0.043716 +v 0.061707 0.281250 -0.030927 +v 0.065663 0.296747 -0.045911 +v 0.062929 0.282008 -0.035557 +v 0.064032 0.284210 -0.039734 +v 0.064907 0.287638 -0.043049 +v 0.065469 0.291958 -0.045178 +v 0.126839 0.281250 -0.025517 +v 0.124954 0.296747 -0.040899 +v 0.126257 0.282008 -0.030270 +v 0.125731 0.284210 -0.034558 +v 0.125314 0.287638 -0.037962 +v 0.125046 0.291958 -0.040146 +v 0.067623 0.281250 -0.029365 +v 0.071178 0.296747 -0.044455 +v 0.068722 0.282008 -0.034028 +v 0.069713 0.284210 -0.038234 +v 0.070499 0.287638 -0.041573 +v 0.071004 0.291958 -0.043716 +v 0.074630 0.281250 -0.027911 +v 0.077442 0.296747 -0.043155 +v 0.075499 0.282008 -0.032622 +v 0.076283 0.284210 -0.036871 +v 0.076905 0.287638 -0.040244 +v 0.077305 0.291958 -0.042409 +v 0.082091 0.281250 -0.026705 +v 0.084265 0.296747 -0.042052 +v 0.082763 0.282008 -0.031447 +v 0.083369 0.284210 -0.035725 +v 0.083850 0.287638 -0.039121 +v 0.084159 0.291958 -0.041300 +v 0.089850 0.281250 -0.025759 +v 0.091440 0.296747 -0.041178 +v 0.090341 0.282008 -0.030524 +v 0.090785 0.284210 -0.034822 +v 0.091136 0.287638 -0.038233 +v 0.091362 0.291958 -0.040423 +v 0.097728 0.281250 -0.025094 +v 0.098748 0.296747 -0.040560 +v 0.098043 0.282008 -0.029873 +v 0.098327 0.284210 -0.034184 +v 0.098553 0.287638 -0.037606 +v 0.098698 0.291958 -0.039803 +v 0.105535 0.281250 -0.024723 +v 0.105967 0.296747 -0.040217 +v 0.105669 0.282008 -0.029511 +v 0.105789 0.284210 -0.033830 +v 0.105885 0.287638 -0.037258 +v 0.105946 0.291958 -0.039459 +v 0.113093 0.281250 -0.024660 +v 0.112879 0.296747 -0.040160 +v 0.113027 0.282008 -0.029450 +v 0.112967 0.284210 -0.033771 +v 0.112920 0.287638 -0.037200 +v 0.112889 0.291958 -0.039401 +v 0.120244 0.281250 -0.024917 +v 0.119272 0.296747 -0.040389 +v 0.119944 0.282008 -0.029698 +v 0.119673 0.284210 -0.034011 +v 0.119458 0.287638 -0.037434 +v 0.119320 0.291958 -0.039632 +v 0.061707 0.343750 0.030927 +v 0.065663 0.328252 0.045911 +v 0.062929 0.342991 0.035557 +v 0.064032 0.340790 0.039734 +v 0.064907 0.337362 0.043049 +v 0.065469 0.333041 0.045178 +v 0.126839 0.343750 0.025517 +v 0.124954 0.328252 0.040899 +v 0.126256 0.342991 0.030270 +v 0.125731 0.340790 0.034558 +v 0.125314 0.337362 0.037962 +v 0.125046 0.333041 0.040146 +v 0.067623 0.343750 0.029365 +v 0.071178 0.328252 0.044455 +v 0.068722 0.342991 0.034028 +v 0.069713 0.340790 0.038234 +v 0.070499 0.337362 0.041573 +v 0.071004 0.333041 0.043716 +v 0.074630 0.343750 0.027911 +v 0.077442 0.328252 0.043155 +v 0.075499 0.342991 0.032622 +v 0.076283 0.340790 0.036871 +v 0.076905 0.337362 0.040244 +v 0.077305 0.333041 0.042409 +v 0.082091 0.343750 0.026705 +v 0.084265 0.328252 0.042052 +v 0.082763 0.342991 0.031447 +v 0.083369 0.340790 0.035725 +v 0.083850 0.337362 0.039121 +v 0.084159 0.333041 0.041300 +v 0.089850 0.343750 0.025759 +v 0.091440 0.328252 0.041178 +v 0.090341 0.342991 0.030524 +v 0.090784 0.340790 0.034822 +v 0.091136 0.337362 0.038233 +v 0.091362 0.333041 0.040423 +v 0.097727 0.343750 0.025094 +v 0.098748 0.328252 0.040560 +v 0.098043 0.342991 0.029873 +v 0.098327 0.340790 0.034184 +v 0.098553 0.337362 0.037606 +v 0.098698 0.333041 0.039803 +v 0.105535 0.343750 0.024723 +v 0.105967 0.328252 0.040217 +v 0.105669 0.342991 0.029511 +v 0.105789 0.340790 0.033830 +v 0.105885 0.337362 0.037258 +v 0.105946 0.333041 0.039459 +v 0.113093 0.343750 0.024660 +v 0.112879 0.328252 0.040160 +v 0.113027 0.342991 0.029450 +v 0.112967 0.340790 0.033771 +v 0.112920 0.337362 0.037200 +v 0.112889 0.333041 0.039401 +v 0.120244 0.343750 0.024917 +v 0.119272 0.328252 0.040389 +v 0.119944 0.342991 0.029698 +v 0.119673 0.340790 0.034011 +v 0.119458 0.337362 0.037434 +v 0.119320 0.333041 0.039632 +v 0.141506 0.250000 0.168201 +v 0.146099 0.168201 0.250000 +v 0.142694 0.247213 0.189372 +v 0.143802 0.239041 0.209100 +v 0.144754 0.226042 0.226042 +v 0.145484 0.209100 0.239041 +v 0.145943 0.189372 0.247213 +v 0.168201 0.250000 0.141505 +v 0.250000 0.168201 0.146099 +v 0.189372 0.247213 0.142694 +v 0.209100 0.239041 0.143802 +v 0.226042 0.226042 0.144754 +v 0.239041 0.209100 0.145484 +v 0.247213 0.189372 0.145943 +v 0.150902 0.250000 0.167142 +v 0.169219 0.168201 0.247395 +v 0.155643 0.247213 0.187913 +v 0.160061 0.239041 0.207268 +v 0.163854 0.226042 0.223889 +v 0.166765 0.209100 0.236643 +v 0.168595 0.189372 0.244660 +v 0.155464 0.250000 0.165546 +v 0.191180 0.168201 0.239711 +v 0.164708 0.247213 0.184741 +v 0.173322 0.239041 0.202628 +v 0.180719 0.226042 0.217988 +v 0.186395 0.209100 0.229774 +v 0.189963 0.189372 0.237183 +v 0.159557 0.250000 0.162974 +v 0.210880 0.168201 0.227332 +v 0.172840 0.247213 0.179631 +v 0.185218 0.239041 0.195153 +v 0.195848 0.226042 0.208482 +v 0.204004 0.209100 0.218710 +v 0.209132 0.189372 0.225139 +v 0.162974 0.250000 0.159557 +v 0.227332 0.168201 0.210880 +v 0.179631 0.247213 0.172840 +v 0.195153 0.239041 0.185218 +v 0.208482 0.226042 0.195848 +v 0.218710 0.209100 0.204004 +v 0.225139 0.189372 0.209131 +v 0.165546 0.250000 0.155464 +v 0.239711 0.168201 0.191180 +v 0.184741 0.247213 0.164708 +v 0.202628 0.239041 0.173322 +v 0.217988 0.226042 0.180719 +v 0.229774 0.209100 0.186395 +v 0.237183 0.189372 0.189963 +v 0.167142 0.250000 0.150902 +v 0.247395 0.168201 0.169219 +v 0.187913 0.247213 0.155643 +v 0.207268 0.239041 0.160061 +v 0.223889 0.226042 0.163854 +v 0.236643 0.209100 0.166765 +v 0.244660 0.189372 0.168595 +v -0.168201 0.250000 0.141506 +v -0.250000 0.168201 0.146099 +v -0.189372 0.247213 0.142694 +v -0.209100 0.239041 0.143802 +v -0.226042 0.226042 0.144754 +v -0.239041 0.209100 0.145484 +v -0.247213 0.189372 0.145943 +v -0.141506 0.250000 0.168201 +v -0.146099 0.168201 0.250000 +v -0.142694 0.247213 0.189372 +v -0.143802 0.239041 0.209100 +v -0.144754 0.226042 0.226042 +v -0.145484 0.209100 0.239041 +v -0.145943 0.189372 0.247213 +v -0.167142 0.250000 0.150902 +v -0.247395 0.168201 0.169219 +v -0.187913 0.247213 0.155643 +v -0.207269 0.239041 0.160061 +v -0.223889 0.226042 0.163854 +v -0.236643 0.209100 0.166765 +v -0.244660 0.189372 0.168595 +v -0.165546 0.250000 0.155464 +v -0.239711 0.168201 0.191180 +v -0.184741 0.247213 0.164708 +v -0.202628 0.239041 0.173322 +v -0.217988 0.226042 0.180719 +v -0.229774 0.209100 0.186395 +v -0.237183 0.189372 0.189963 +v -0.162974 0.250000 0.159557 +v -0.227332 0.168201 0.210880 +v -0.179631 0.247213 0.172840 +v -0.195153 0.239041 0.185218 +v -0.208482 0.226042 0.195848 +v -0.218710 0.209100 0.204004 +v -0.225139 0.189372 0.209132 +v -0.159557 0.250000 0.162974 +v -0.210880 0.168201 0.227332 +v -0.172840 0.247213 0.179631 +v -0.185218 0.239041 0.195153 +v -0.195848 0.226042 0.208482 +v -0.204004 0.209100 0.218710 +v -0.209132 0.189372 0.225139 +v -0.155464 0.250000 0.165546 +v -0.191180 0.168201 0.239711 +v -0.164708 0.247213 0.184741 +v -0.173322 0.239041 0.202628 +v -0.180719 0.226042 0.217988 +v -0.186395 0.209100 0.229774 +v -0.189963 0.189372 0.237183 +v -0.150902 0.250000 0.167142 +v -0.169219 0.168201 0.247395 +v -0.155643 0.247213 0.187913 +v -0.160061 0.239041 0.207268 +v -0.163854 0.226042 0.223889 +v -0.166765 0.209100 0.236643 +v -0.168595 0.189372 0.244660 +v -0.141505 -0.250000 0.168201 +v -0.146099 -0.168201 0.250000 +v -0.142694 -0.247213 0.189372 +v -0.143802 -0.239041 0.209100 +v -0.144754 -0.226042 0.226042 +v -0.145484 -0.209100 0.239041 +v -0.145943 -0.189372 0.247213 +v -0.168201 -0.250000 0.141506 +v -0.250000 -0.168201 0.146099 +v -0.189372 -0.247213 0.142694 +v -0.209100 -0.239041 0.143802 +v -0.226042 -0.226042 0.144754 +v -0.239041 -0.209100 0.145484 +v -0.247213 -0.189372 0.145943 +v -0.150902 -0.250000 0.167142 +v -0.169219 -0.168201 0.247395 +v -0.155643 -0.247213 0.187913 +v -0.160061 -0.239041 0.207269 +v -0.163854 -0.226042 0.223889 +v -0.166765 -0.209100 0.236643 +v -0.168595 -0.189372 0.244660 +v -0.155464 -0.250000 0.165546 +v -0.191180 -0.168201 0.239711 +v -0.164708 -0.247213 0.184741 +v -0.173322 -0.239041 0.202628 +v -0.180719 -0.226042 0.217988 +v -0.186395 -0.209100 0.229774 +v -0.189963 -0.189372 0.237183 +v -0.159557 -0.250000 0.162974 +v -0.210880 -0.168201 0.227332 +v -0.172840 -0.247213 0.179631 +v -0.185218 -0.239041 0.195153 +v -0.195848 -0.226042 0.208482 +v -0.204004 -0.209100 0.218710 +v -0.209132 -0.189372 0.225139 +v -0.162974 -0.250000 0.159557 +v -0.227332 -0.168201 0.210880 +v -0.179631 -0.247213 0.172840 +v -0.195153 -0.239041 0.185218 +v -0.208482 -0.226042 0.195848 +v -0.218710 -0.209100 0.204004 +v -0.225139 -0.189372 0.209131 +v -0.165546 -0.250000 0.155464 +v -0.239711 -0.168201 0.191180 +v -0.184741 -0.247213 0.164708 +v -0.202628 -0.239041 0.173322 +v -0.217988 -0.226042 0.180719 +v -0.229774 -0.209100 0.186395 +v -0.237184 -0.189372 0.189963 +v -0.167142 -0.250000 0.150902 +v -0.247395 -0.168201 0.169219 +v -0.187913 -0.247213 0.155643 +v -0.207269 -0.239041 0.160061 +v -0.223889 -0.226042 0.163854 +v -0.236643 -0.209100 0.166765 +v -0.244660 -0.189372 0.168595 +v 0.168201 -0.250000 0.141505 +v 0.250000 -0.168201 0.146099 +v 0.189372 -0.247213 0.142694 +v 0.209100 -0.239041 0.143802 +v 0.226042 -0.226042 0.144754 +v 0.239041 -0.209100 0.145484 +v 0.247213 -0.189372 0.145943 +v 0.141506 -0.250000 0.168201 +v 0.146099 -0.168201 0.250000 +v 0.142694 -0.247213 0.189372 +v 0.143802 -0.239041 0.209100 +v 0.144754 -0.226042 0.226042 +v 0.145484 -0.209100 0.239041 +v 0.145943 -0.189372 0.247213 +v 0.167142 -0.250000 0.150902 +v 0.247395 -0.168201 0.169219 +v 0.187913 -0.247213 0.155643 +v 0.207269 -0.239041 0.160061 +v 0.223889 -0.226042 0.163854 +v 0.236643 -0.209100 0.166765 +v 0.244660 -0.189372 0.168595 +v 0.165546 -0.250000 0.155464 +v 0.239711 -0.168201 0.191180 +v 0.184741 -0.247213 0.164708 +v 0.202628 -0.239041 0.173322 +v 0.217988 -0.226042 0.180719 +v 0.229774 -0.209100 0.186395 +v 0.237183 -0.189372 0.189963 +v 0.162974 -0.250000 0.159557 +v 0.227332 -0.168201 0.210880 +v 0.179631 -0.247213 0.172840 +v 0.195153 -0.239041 0.185218 +v 0.208482 -0.226042 0.195848 +v 0.218710 -0.209100 0.204004 +v 0.225139 -0.189372 0.209132 +v 0.159557 -0.250000 0.162974 +v 0.210880 -0.168201 0.227332 +v 0.172840 -0.247213 0.179631 +v 0.185218 -0.239041 0.195153 +v 0.195848 -0.226042 0.208482 +v 0.204004 -0.209100 0.218710 +v 0.209131 -0.189372 0.225139 +v 0.155464 -0.250000 0.165546 +v 0.191180 -0.168201 0.239711 +v 0.164708 -0.247213 0.184741 +v 0.173322 -0.239041 0.202628 +v 0.180719 -0.226042 0.217988 +v 0.186395 -0.209100 0.229774 +v 0.189963 -0.189372 0.237184 +v 0.150902 -0.250000 0.167142 +v 0.169219 -0.168201 0.247395 +v 0.155643 -0.247213 0.187913 +v 0.160061 -0.239041 0.207269 +v 0.163854 -0.226042 0.223889 +v 0.166765 -0.209100 0.236643 +v 0.168595 -0.189372 0.244660 +v -0.141506 0.250000 -0.168201 +v -0.146099 0.168201 -0.250000 +v -0.142694 0.247213 -0.189372 +v -0.143802 0.239041 -0.209100 +v -0.144754 0.226042 -0.226042 +v -0.145484 0.209100 -0.239041 +v -0.145943 0.189372 -0.247213 +v -0.168201 0.250000 -0.141505 +v -0.250000 0.168201 -0.146099 +v -0.189372 0.247213 -0.142694 +v -0.209100 0.239041 -0.143802 +v -0.226042 0.226042 -0.144754 +v -0.239041 0.209100 -0.145484 +v -0.247213 0.189372 -0.145943 +v -0.150902 0.250000 -0.167142 +v -0.169219 0.168201 -0.247395 +v -0.155643 0.247213 -0.187913 +v -0.160061 0.239041 -0.207269 +v -0.163854 0.226042 -0.223889 +v -0.166765 0.209100 -0.236643 +v -0.168595 0.189372 -0.244660 +v -0.155464 0.250000 -0.165546 +v -0.191180 0.168201 -0.239711 +v -0.164708 0.247213 -0.184741 +v -0.173322 0.239041 -0.202628 +v -0.180719 0.226042 -0.217988 +v -0.186395 0.209100 -0.229774 +v -0.189963 0.189372 -0.237183 +v -0.159557 0.250000 -0.162974 +v -0.210880 0.168201 -0.227332 +v -0.172840 0.247213 -0.179631 +v -0.185218 0.239041 -0.195153 +v -0.195848 0.226042 -0.208482 +v -0.204004 0.209100 -0.218710 +v -0.209132 0.189372 -0.225139 +v -0.162974 0.250000 -0.159557 +v -0.227332 0.168201 -0.210880 +v -0.179631 0.247213 -0.172840 +v -0.195153 0.239041 -0.185218 +v -0.208482 0.226042 -0.195848 +v -0.218710 0.209100 -0.204004 +v -0.225139 0.189372 -0.209132 +v -0.165546 0.250000 -0.155464 +v -0.239711 0.168201 -0.191180 +v -0.184741 0.247213 -0.164708 +v -0.202628 0.239041 -0.173322 +v -0.217988 0.226042 -0.180719 +v -0.229774 0.209100 -0.186395 +v -0.237183 0.189372 -0.189963 +v -0.167142 0.250000 -0.150902 +v -0.247395 0.168201 -0.169219 +v -0.187913 0.247213 -0.155643 +v -0.207268 0.239041 -0.160061 +v -0.223889 0.226042 -0.163854 +v -0.236643 0.209100 -0.166765 +v -0.244660 0.189372 -0.168595 +v -0.168201 -0.250000 -0.141505 +v -0.250000 -0.168201 -0.146099 +v -0.189372 -0.247213 -0.142694 +v -0.209100 -0.239041 -0.143802 +v -0.226042 -0.226042 -0.144754 +v -0.239041 -0.209100 -0.145484 +v -0.247213 -0.189372 -0.145943 +v -0.141506 -0.250000 -0.168201 +v -0.146099 -0.168201 -0.250000 +v -0.142694 -0.247213 -0.189372 +v -0.143802 -0.239041 -0.209100 +v -0.144754 -0.226042 -0.226042 +v -0.145484 -0.209100 -0.239041 +v -0.145943 -0.189372 -0.247213 +v -0.167142 -0.250000 -0.150902 +v -0.247395 -0.168201 -0.169219 +v -0.187913 -0.247213 -0.155643 +v -0.207269 -0.239041 -0.160061 +v -0.223889 -0.226042 -0.163854 +v -0.236643 -0.209100 -0.166765 +v -0.244660 -0.189372 -0.168595 +v -0.165546 -0.250000 -0.155464 +v -0.239711 -0.168201 -0.191180 +v -0.184741 -0.247213 -0.164708 +v -0.202628 -0.239041 -0.173322 +v -0.217988 -0.226042 -0.180719 +v -0.229774 -0.209100 -0.186395 +v -0.237183 -0.189372 -0.189963 +v -0.162974 -0.250000 -0.159557 +v -0.227332 -0.168201 -0.210880 +v -0.179631 -0.247213 -0.172840 +v -0.195153 -0.239041 -0.185218 +v -0.208482 -0.226042 -0.195848 +v -0.218710 -0.209100 -0.204004 +v -0.225139 -0.189372 -0.209132 +v -0.159557 -0.250000 -0.162974 +v -0.210880 -0.168201 -0.227332 +v -0.172840 -0.247213 -0.179631 +v -0.185218 -0.239041 -0.195153 +v -0.195848 -0.226042 -0.208482 +v -0.204004 -0.209100 -0.218710 +v -0.209131 -0.189372 -0.225139 +v -0.155464 -0.250000 -0.165546 +v -0.191180 -0.168201 -0.239711 +v -0.164708 -0.247213 -0.184741 +v -0.173322 -0.239041 -0.202628 +v -0.180719 -0.226042 -0.217988 +v -0.186395 -0.209100 -0.229774 +v -0.189963 -0.189372 -0.237183 +v -0.150902 -0.250000 -0.167142 +v -0.169219 -0.168201 -0.247395 +v -0.155643 -0.247213 -0.187913 +v -0.160061 -0.239041 -0.207268 +v -0.163854 -0.226042 -0.223889 +v -0.166765 -0.209100 -0.236643 +v -0.168595 -0.189372 -0.244660 +v 0.168201 0.250000 -0.141506 +v 0.250000 0.168201 -0.146099 +v 0.189372 0.247213 -0.142694 +v 0.209100 0.239041 -0.143802 +v 0.226042 0.226042 -0.144754 +v 0.239041 0.209100 -0.145484 +v 0.247213 0.189372 -0.145943 +v 0.141505 0.250000 -0.168201 +v 0.146099 0.168201 -0.250000 +v 0.142694 0.247213 -0.189372 +v 0.143802 0.239041 -0.209100 +v 0.144754 0.226042 -0.226042 +v 0.145484 0.209100 -0.239041 +v 0.145943 0.189372 -0.247213 +v 0.167142 0.250000 -0.150902 +v 0.247395 0.168201 -0.169219 +v 0.187913 0.247213 -0.155643 +v 0.207269 0.239041 -0.160061 +v 0.223889 0.226042 -0.163854 +v 0.236643 0.209100 -0.166765 +v 0.244660 0.189372 -0.168595 +v 0.165546 0.250000 -0.155464 +v 0.239711 0.168201 -0.191180 +v 0.184741 0.247213 -0.164708 +v 0.202628 0.239041 -0.173322 +v 0.217988 0.226042 -0.180719 +v 0.229774 0.209100 -0.186395 +v 0.237183 0.189372 -0.189963 +v 0.162974 0.250000 -0.159557 +v 0.227332 0.168201 -0.210880 +v 0.179631 0.247213 -0.172840 +v 0.195153 0.239041 -0.185218 +v 0.208482 0.226042 -0.195848 +v 0.218710 0.209100 -0.204004 +v 0.225139 0.189372 -0.209132 +v 0.159557 0.250000 -0.162974 +v 0.210880 0.168201 -0.227332 +v 0.172840 0.247213 -0.179631 +v 0.185218 0.239041 -0.195153 +v 0.195848 0.226042 -0.208482 +v 0.204004 0.209100 -0.218710 +v 0.209132 0.189372 -0.225139 +v 0.155464 0.250000 -0.165546 +v 0.191180 0.168201 -0.239711 +v 0.164708 0.247213 -0.184741 +v 0.173322 0.239041 -0.202628 +v 0.180719 0.226042 -0.217988 +v 0.186395 0.209100 -0.229774 +v 0.189963 0.189372 -0.237183 +v 0.150902 0.250000 -0.167142 +v 0.169219 0.168201 -0.247395 +v 0.155643 0.247213 -0.187913 +v 0.160061 0.239041 -0.207268 +v 0.163854 0.226042 -0.223889 +v 0.166765 0.209100 -0.236643 +v 0.168595 0.189372 -0.244660 +v 0.141506 -0.250000 -0.168201 +v 0.146099 -0.168201 -0.250000 +v 0.142694 -0.247213 -0.189372 +v 0.143802 -0.239041 -0.209100 +v 0.144754 -0.226042 -0.226042 +v 0.145484 -0.209100 -0.239041 +v 0.145943 -0.189372 -0.247213 +v 0.168201 -0.250000 -0.141506 +v 0.250000 -0.168201 -0.146099 +v 0.189372 -0.247213 -0.142694 +v 0.209100 -0.239041 -0.143802 +v 0.226042 -0.226042 -0.144754 +v 0.239041 -0.209100 -0.145484 +v 0.247213 -0.189372 -0.145943 +v 0.150902 -0.250000 -0.167142 +v 0.169219 -0.168201 -0.247395 +v 0.155643 -0.247213 -0.187913 +v 0.160061 -0.239041 -0.207268 +v 0.163854 -0.226042 -0.223889 +v 0.166765 -0.209100 -0.236643 +v 0.168595 -0.189372 -0.244660 +v 0.155464 -0.250000 -0.165546 +v 0.191180 -0.168201 -0.239711 +v 0.164708 -0.247213 -0.184741 +v 0.173322 -0.239041 -0.202628 +v 0.180719 -0.226042 -0.217988 +v 0.186395 -0.209100 -0.229774 +v 0.189963 -0.189372 -0.237183 +v 0.159557 -0.250000 -0.162974 +v 0.210880 -0.168201 -0.227332 +v 0.172840 -0.247213 -0.179631 +v 0.185218 -0.239041 -0.195153 +v 0.195848 -0.226042 -0.208482 +v 0.204004 -0.209100 -0.218710 +v 0.209132 -0.189372 -0.225139 +v 0.162974 -0.250000 -0.159557 +v 0.227332 -0.168201 -0.210880 +v 0.179631 -0.247213 -0.172840 +v 0.195153 -0.239041 -0.185218 +v 0.208482 -0.226042 -0.195848 +v 0.218710 -0.209100 -0.204004 +v 0.225139 -0.189372 -0.209131 +v 0.165546 -0.250000 -0.155464 +v 0.239711 -0.168201 -0.191180 +v 0.184741 -0.247213 -0.164708 +v 0.202628 -0.239041 -0.173322 +v 0.217988 -0.226042 -0.180719 +v 0.229774 -0.209100 -0.186395 +v 0.237184 -0.189372 -0.189963 +v 0.167142 -0.250000 -0.150902 +v 0.247395 -0.168201 -0.169219 +v 0.187913 -0.247213 -0.155643 +v 0.207269 -0.239041 -0.160061 +v 0.223889 -0.226042 -0.163854 +v 0.236643 -0.209100 -0.166765 +v 0.244660 -0.189372 -0.168595 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.7130 0.4637 +vt 0.7238 0.4746 +vt 0.7366 0.4831 +vt 0.7508 0.4890 +vt 0.7659 0.4920 +vt 0.7812 0.4920 +vt 0.7963 0.4890 +vt 0.8105 0.4831 +vt 0.8233 0.4746 +vt 0.8342 0.4637 +vt 0.8427 0.4509 +vt 0.8486 0.4367 +vt 0.8516 0.4217 +vt 0.8516 0.4063 +vt 0.8486 0.3912 +vt 0.8427 0.3770 +vt 0.8342 0.3642 +vt 0.8233 0.3534 +vt 0.8105 0.3448 +vt 0.7963 0.3390 +vt 0.7812 0.3360 +vt 0.7659 0.3360 +vt 0.7508 0.3390 +vt 0.7366 0.3448 +vt 0.7238 0.3534 +vt 0.7130 0.3642 +vt 0.7044 0.3770 +vt 0.6986 0.3912 +vt 0.6956 0.4063 +vt 0.6956 0.4217 +vt 0.6986 0.4367 +vt 0.7044 0.4509 +vt 0.6089 0.3390 +vt 0.6231 0.3448 +vt 0.6358 0.3534 +vt 0.6467 0.3642 +vt 0.6552 0.3770 +vt 0.6611 0.3912 +vt 0.6641 0.4063 +vt 0.6641 0.4217 +vt 0.6611 0.4367 +vt 0.6552 0.4509 +vt 0.6467 0.4637 +vt 0.6358 0.4746 +vt 0.6231 0.4831 +vt 0.6089 0.4890 +vt 0.5938 0.4920 +vt 0.5784 0.4920 +vt 0.5634 0.4890 +vt 0.5492 0.4831 +vt 0.5364 0.4746 +vt 0.5255 0.4637 +vt 0.5170 0.4509 +vt 0.5111 0.4367 +vt 0.5081 0.4217 +vt 0.5081 0.4063 +vt 0.5111 0.3912 +vt 0.5170 0.3770 +vt 0.5255 0.3642 +vt 0.5364 0.3534 +vt 0.5492 0.3448 +vt 0.5634 0.3390 +vt 0.5784 0.3360 +vt 0.5938 0.3360 +vt 0.7812 0.3360 +vt 0.7963 0.3390 +vt 0.8105 0.3448 +vt 0.8233 0.3534 +vt 0.8342 0.3642 +vt 0.8427 0.3770 +vt 0.8486 0.3912 +vt 0.8516 0.4063 +vt 0.8516 0.4217 +vt 0.8486 0.4367 +vt 0.8427 0.4509 +vt 0.8342 0.4637 +vt 0.8233 0.4746 +vt 0.8105 0.4831 +vt 0.7963 0.4890 +vt 0.7812 0.4920 +vt 0.7659 0.4920 +vt 0.7508 0.4890 +vt 0.7366 0.4831 +vt 0.7238 0.4746 +vt 0.7130 0.4637 +vt 0.7044 0.4509 +vt 0.6986 0.4367 +vt 0.6956 0.4217 +vt 0.6956 0.4063 +vt 0.6986 0.3912 +vt 0.7044 0.3770 +vt 0.7130 0.3642 +vt 0.7238 0.3534 +vt 0.7366 0.3448 +vt 0.7508 0.3390 +vt 0.7659 0.3360 +vt 0.5492 0.3448 +vt 0.5364 0.3534 +vt 0.5255 0.3642 +vt 0.5170 0.3770 +vt 0.5111 0.3912 +vt 0.5081 0.4063 +vt 0.5081 0.4217 +vt 0.5111 0.4367 +vt 0.5170 0.4509 +vt 0.5255 0.4637 +vt 0.5364 0.4746 +vt 0.5492 0.4831 +vt 0.5634 0.4890 +vt 0.5784 0.4920 +vt 0.5938 0.4920 +vt 0.6089 0.4890 +vt 0.6231 0.4831 +vt 0.6358 0.4746 +vt 0.6467 0.4637 +vt 0.6552 0.4509 +vt 0.6611 0.4367 +vt 0.6641 0.4217 +vt 0.6641 0.4063 +vt 0.6611 0.3912 +vt 0.6552 0.3770 +vt 0.6467 0.3642 +vt 0.6358 0.3534 +vt 0.6231 0.3448 +vt 0.6089 0.3390 +vt 0.5938 0.3360 +vt 0.5784 0.3360 +vt 0.5634 0.3390 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.4747 0.6940 +vt 0.3065 0.6940 +vt 0.3065 0.6824 +vt 0.4747 0.6824 +vt 0.4636 0.9591 +vt 0.4636 0.7909 +vt 0.4752 0.7909 +vt 0.4752 0.9591 +vt 0.0404 0.6935 +vt 0.0404 0.5253 +vt 0.0520 0.5253 +vt 0.0520 0.6935 +vt 0.0409 0.2592 +vt 0.2091 0.2592 +vt 0.2091 0.2708 +vt 0.0409 0.2708 +vt 0.4747 0.5248 +vt 0.3065 0.5248 +vt 0.3065 0.5138 +vt 0.4747 0.5138 +vt 0.3060 0.9591 +vt 0.3060 0.7909 +vt 0.3176 0.7909 +vt 0.3176 0.9591 +vt 0.2206 0.6935 +vt 0.2206 0.5253 +vt 0.2304 0.5253 +vt 0.2304 0.6935 +vt 0.2500 0.5253 +vt 0.2500 0.6935 +vt 0.2852 0.9591 +vt 0.2852 0.7909 +vt 0.2950 0.7909 +vt 0.2950 0.9591 +vt 0.2096 0.6935 +vt 0.2096 0.5253 +vt 0.4747 0.5364 +vt 0.3065 0.5364 +vt 0.3065 0.5040 +vt 0.4747 0.5040 +vt 0.3065 0.4844 +vt 0.4747 0.4844 +vt 0.0196 0.6935 +vt 0.0196 0.5253 +vt 0.0294 0.5253 +vt 0.0294 0.6935 +vt 0.0409 0.4168 +vt 0.2091 0.4168 +vt 0.2091 0.4284 +vt 0.0409 0.4284 +vt 0.1980 0.6935 +vt 0.1980 0.5253 +vt 0.0409 0.4394 +vt 0.2091 0.4394 +vt 0.2091 0.4492 +vt 0.0409 0.4492 +vt 0.2091 0.4688 +vt 0.0409 0.4688 +vt 0.4747 0.7148 +vt 0.3065 0.7148 +vt 0.3065 0.7050 +vt 0.4747 0.7050 +vt 0.7403 0.9457 +vt 0.7398 0.9504 +vt 0.7390 0.9527 +vt 0.7377 0.9548 +vt 0.7360 0.9565 +vt 0.7340 0.9578 +vt 0.7317 0.9586 +vt 0.7270 0.9591 +vt 0.5855 0.9591 +vt 0.5808 0.9586 +vt 0.5785 0.9578 +vt 0.5765 0.9565 +vt 0.5748 0.9548 +vt 0.5735 0.9527 +vt 0.5727 0.9504 +vt 0.5721 0.9457 +vt 0.5721 0.8042 +vt 0.5727 0.7995 +vt 0.5735 0.7973 +vt 0.5748 0.7952 +vt 0.5765 0.7935 +vt 0.5785 0.7922 +vt 0.5808 0.7914 +vt 0.5855 0.7909 +vt 0.7270 0.7909 +vt 0.7317 0.7914 +vt 0.7340 0.7922 +vt 0.7360 0.7935 +vt 0.7377 0.7952 +vt 0.7390 0.7973 +vt 0.7398 0.7995 +vt 0.7403 0.8042 +vt 0.4862 0.9591 +vt 0.4862 0.7909 +vt 0.4960 0.7909 +vt 0.4960 0.9591 +vt 0.5156 0.7909 +vt 0.5156 0.9591 +vt 0.0409 0.2384 +vt 0.2091 0.2384 +vt 0.2091 0.2482 +vt 0.0409 0.2482 +vt 0.0547 0.2031 +vt 0.0547 0.1875 +vt 0.0703 0.1875 +vt 0.0703 0.2031 +vt 0.0859 0.1875 +vt 0.0859 0.2031 +vt 0.1016 0.2031 +vt 0.1016 0.1875 +vt 0.1172 0.1875 +vt 0.1172 0.2031 +vt 0.1328 0.1875 +vt 0.1328 0.2031 +vt 0.1484 0.2031 +vt 0.1484 0.1875 +vt 0.1641 0.1875 +vt 0.1641 0.2031 +vt 0.1797 0.1875 +vt 0.1797 0.2031 +vt 0.0547 0.2031 +vt 0.0547 0.1875 +vt 0.0703 0.1875 +vt 0.0703 0.2031 +vt 0.0859 0.1875 +vt 0.0859 0.2031 +vt 0.1016 0.2031 +vt 0.1016 0.1875 +vt 0.1172 0.1875 +vt 0.1172 0.2031 +vt 0.1328 0.1875 +vt 0.1328 0.2031 +vt 0.1484 0.2031 +vt 0.1484 0.1875 +vt 0.1641 0.1875 +vt 0.1641 0.2031 +vt 0.1797 0.1875 +vt 0.1797 0.2031 +vt 0.2887 0.2433 +vt 0.2887 0.2594 +vt 0.2829 0.2594 +vt 0.2829 0.2433 +vt 0.2721 0.2433 +vt 0.2721 0.2594 +vt 0.2675 0.2594 +vt 0.2675 0.2433 +vt 0.3127 0.1949 +vt 0.3127 0.2110 +vt 0.3086 0.2110 +vt 0.3086 0.1949 +vt 0.3039 0.2110 +vt 0.3039 0.1949 +vt 0.2986 0.2110 +vt 0.2986 0.1949 +vt 0.2930 0.2110 +vt 0.2930 0.1949 +vt 0.2872 0.2110 +vt 0.2872 0.1949 +vt 0.2816 0.2110 +vt 0.2816 0.1949 +vt 0.2763 0.2110 +vt 0.2763 0.1949 +vt 0.2715 0.2110 +vt 0.2715 0.1949 +vt 0.2675 0.2110 +vt 0.2675 0.1949 +vt 0.4555 0.2905 +vt 0.4555 0.3065 +vt 0.4509 0.3065 +vt 0.4509 0.2905 +vt 0.4457 0.3065 +vt 0.4457 0.2905 +vt 0.4401 0.3065 +vt 0.4401 0.2905 +vt 0.4344 0.3065 +vt 0.4344 0.2905 +vt 0.4287 0.3065 +vt 0.4287 0.2905 +vt 0.4064 0.3065 +vt 0.4064 0.2905 +vt 0.3777 0.2111 +vt 0.3777 0.1951 +vt 0.3830 0.1951 +vt 0.3830 0.2111 +vt 0.4258 0.2594 +vt 0.4258 0.2433 +vt 0.4313 0.2433 +vt 0.4313 0.2594 +vt 0.3732 0.2111 +vt 0.3732 0.1951 +vt 0.3166 0.2433 +vt 0.3166 0.2594 +vt 0.2943 0.2594 +vt 0.2943 0.2433 +vt 0.2902 0.4591 +vt 0.2902 0.4177 +vt 0.2954 0.4175 +vt 0.2759 0.3065 +vt 0.2759 0.2905 +vt 0.2809 0.2905 +vt 0.2809 0.3065 +vt 0.3680 0.2111 +vt 0.3680 0.1951 +vt 0.3880 0.1951 +vt 0.3880 0.2111 +vt 0.3925 0.1951 +vt 0.3925 0.2111 +vt 0.2675 0.3065 +vt 0.2675 0.2905 +vt 0.2714 0.2905 +vt 0.2714 0.3065 +vt 0.2918 0.2905 +vt 0.2918 0.3065 +vt 0.2862 0.3065 +vt 0.2862 0.2905 +vt 0.3630 0.2111 +vt 0.3630 0.1951 +vt 0.3874 0.2594 +vt 0.3874 0.2433 +vt 0.3928 0.2433 +vt 0.3928 0.2594 +vt 0.4421 0.2594 +vt 0.4421 0.2433 +vt 0.4471 0.2433 +vt 0.4471 0.2594 +vt 0.4517 0.2433 +vt 0.4517 0.2594 +vt 0.4555 0.2433 +vt 0.4555 0.2594 +vt 0.3585 0.2111 +vt 0.3585 0.1951 +vt 0.4368 0.2433 +vt 0.4368 0.2594 +vt 0.2972 0.3065 +vt 0.2972 0.2905 +vt 0.3035 0.2905 +vt 0.3035 0.3065 +vt 0.2774 0.2594 +vt 0.2774 0.2433 +vt 0.3302 0.3065 +vt 0.3302 0.2905 +vt 0.3357 0.2905 +vt 0.3357 0.3065 +vt 0.3103 0.2905 +vt 0.3103 0.3065 +vt 0.3172 0.2905 +vt 0.3172 0.3065 +vt 0.3240 0.2905 +vt 0.3240 0.3065 +vt 0.3416 0.2594 +vt 0.3416 0.2433 +vt 0.3443 0.2433 +vt 0.3443 0.2594 +vt 0.3787 0.2905 +vt 0.3787 0.3065 +vt 0.3990 0.2594 +vt 0.3990 0.2433 +vt 0.4058 0.2433 +vt 0.4058 0.2594 +vt 0.4127 0.2433 +vt 0.4127 0.2594 +vt 0.4195 0.2433 +vt 0.4195 0.2594 +vt 0.4038 0.3065 +vt 0.4038 0.2905 +vt 0.3844 0.3065 +vt 0.3844 0.2905 +vt 0.3876 0.2905 +vt 0.3876 0.3065 +vt 0.3909 0.2905 +vt 0.3909 0.3065 +vt 0.3943 0.2905 +vt 0.3943 0.3065 +vt 0.3977 0.2905 +vt 0.3977 0.3065 +vt 0.4009 0.2905 +vt 0.4009 0.3065 +vt 0.3814 0.3065 +vt 0.3814 0.2905 +vt 0.3387 0.2594 +vt 0.3387 0.2433 +vt 0.3192 0.2594 +vt 0.3192 0.2433 +vt 0.3221 0.2433 +vt 0.3221 0.2594 +vt 0.3253 0.2433 +vt 0.3253 0.2594 +vt 0.3287 0.2433 +vt 0.3287 0.2594 +vt 0.3321 0.2433 +vt 0.3321 0.2594 +vt 0.3355 0.2433 +vt 0.3355 0.2594 +vt 0.2775 0.2409 +vt 0.2830 0.2409 +vt 0.2778 0.2387 +vt 0.2831 0.2387 +vt 0.2925 0.3900 +vt 0.2871 0.3888 +vt 0.2876 0.3871 +vt 0.2926 0.3882 +vt 0.2882 0.3850 +vt 0.2928 0.3860 +vt 0.2888 0.3827 +vt 0.2930 0.3836 +vt 0.2830 0.2618 +vt 0.2775 0.2618 +vt 0.2831 0.2640 +vt 0.2778 0.2640 +vt 0.4487 0.4676 +vt 0.4434 0.4688 +vt 0.4432 0.4670 +vt 0.4483 0.4659 +vt 0.4430 0.4648 +vt 0.4477 0.4638 +vt 0.4428 0.4624 +vt 0.4471 0.4615 +vt 0.2723 0.2409 +vt 0.2728 0.2387 +vt 0.2821 0.3865 +vt 0.2828 0.3850 +vt 0.2838 0.3830 +vt 0.2848 0.3809 +vt 0.2723 0.2618 +vt 0.2728 0.2640 +vt 0.4538 0.4653 +vt 0.4530 0.4638 +vt 0.4521 0.4618 +vt 0.4510 0.4596 +vt 0.2677 0.2409 +vt 0.2684 0.2387 +vt 0.2775 0.3832 +vt 0.2785 0.3818 +vt 0.2798 0.3801 +vt 0.2812 0.3782 +vt 0.2677 0.2618 +vt 0.2684 0.2640 +vt 0.4583 0.4620 +vt 0.4573 0.4606 +vt 0.4560 0.4589 +vt 0.4546 0.4570 +vt 0.3084 0.1925 +vt 0.3124 0.1925 +vt 0.3078 0.1903 +vt 0.3116 0.1903 +vt 0.2737 0.3790 +vt 0.2749 0.3779 +vt 0.2765 0.3765 +vt 0.2782 0.3749 +vt 0.3124 0.2134 +vt 0.3084 0.2134 +vt 0.3116 0.2156 +vt 0.3078 0.2156 +vt 0.4622 0.4578 +vt 0.4610 0.4566 +vt 0.4594 0.4552 +vt 0.4577 0.4537 +vt 0.3037 0.1925 +vt 0.3032 0.1903 +vt 0.2706 0.3740 +vt 0.2721 0.3732 +vt 0.2738 0.3721 +vt 0.2758 0.3710 +vt 0.3037 0.2134 +vt 0.3032 0.2156 +vt 0.4652 0.4528 +vt 0.4638 0.4520 +vt 0.4620 0.4509 +vt 0.4601 0.4498 +vt 0.2985 0.1925 +vt 0.2982 0.1903 +vt 0.2686 0.3685 +vt 0.2701 0.3680 +vt 0.2720 0.3673 +vt 0.2741 0.3666 +vt 0.2985 0.2134 +vt 0.2982 0.2156 +vt 0.4673 0.4473 +vt 0.4658 0.4468 +vt 0.4639 0.4461 +vt 0.4617 0.4454 +vt 0.2929 0.1925 +vt 0.2928 0.1903 +vt 0.2675 0.3626 +vt 0.2691 0.3624 +vt 0.2711 0.3622 +vt 0.2733 0.3620 +vt 0.2929 0.2134 +vt 0.2928 0.2156 +vt 0.4684 0.4414 +vt 0.4668 0.4412 +vt 0.4648 0.4410 +vt 0.4626 0.4408 +vt 0.2873 0.1925 +vt 0.2874 0.1903 +vt 0.2875 0.1885 +vt 0.2927 0.1885 +vt 0.2691 0.3568 +vt 0.2711 0.3570 +vt 0.2733 0.3573 +vt 0.2873 0.2134 +vt 0.2874 0.2156 +vt 0.2927 0.2174 +vt 0.2875 0.2174 +vt 0.4668 0.4356 +vt 0.4648 0.4358 +vt 0.4626 0.4361 +vt 0.2817 0.1925 +vt 0.2820 0.1903 +vt 0.2675 0.3566 +vt 0.2686 0.3508 +vt 0.2701 0.3513 +vt 0.2720 0.3519 +vt 0.2741 0.3526 +vt 0.2817 0.2134 +vt 0.2820 0.2156 +vt 0.4673 0.4296 +vt 0.4684 0.4354 +vt 0.4658 0.4301 +vt 0.4639 0.4307 +vt 0.4617 0.4314 +vt 0.2765 0.1925 +vt 0.2770 0.1903 +vt 0.2706 0.3453 +vt 0.2721 0.3461 +vt 0.2738 0.3471 +vt 0.2758 0.3483 +vt 0.2765 0.2134 +vt 0.2770 0.2156 +vt 0.4652 0.4240 +vt 0.4638 0.4249 +vt 0.4620 0.4259 +vt 0.4601 0.4271 +vt 0.2718 0.1925 +vt 0.2724 0.1903 +vt 0.2737 0.3403 +vt 0.2749 0.3414 +vt 0.2765 0.3428 +vt 0.2782 0.3444 +vt 0.2718 0.2134 +vt 0.2724 0.2156 +vt 0.4622 0.4191 +vt 0.4610 0.4202 +vt 0.4594 0.4216 +vt 0.4577 0.4232 +vt 0.2678 0.1925 +vt 0.2686 0.1903 +vt 0.2775 0.3361 +vt 0.2785 0.3374 +vt 0.2798 0.3391 +vt 0.2812 0.3410 +vt 0.2678 0.2134 +vt 0.2686 0.2156 +vt 0.4583 0.4149 +vt 0.4573 0.4162 +vt 0.4560 0.4179 +vt 0.4546 0.4198 +vt 0.4507 0.2880 +vt 0.4553 0.2880 +vt 0.4502 0.2858 +vt 0.4546 0.2858 +vt 0.2821 0.3327 +vt 0.2828 0.3343 +vt 0.2838 0.3362 +vt 0.2848 0.3384 +vt 0.4553 0.3090 +vt 0.4507 0.3090 +vt 0.4546 0.3112 +vt 0.4502 0.3112 +vt 0.4538 0.4115 +vt 0.4530 0.4131 +vt 0.4521 0.4150 +vt 0.4510 0.4172 +vt 0.4456 0.2880 +vt 0.4452 0.2858 +vt 0.2871 0.3305 +vt 0.2876 0.3321 +vt 0.2882 0.3342 +vt 0.2888 0.3366 +vt 0.4456 0.3090 +vt 0.4452 0.3112 +vt 0.4487 0.4092 +vt 0.4483 0.4109 +vt 0.4477 0.4130 +vt 0.4471 0.4154 +vt 0.4400 0.2880 +vt 0.4399 0.2858 +vt 0.2925 0.3293 +vt 0.2926 0.3310 +vt 0.2928 0.3332 +vt 0.2930 0.3357 +vt 0.4400 0.3090 +vt 0.4399 0.3112 +vt 0.4434 0.4081 +vt 0.4432 0.4098 +vt 0.4430 0.4120 +vt 0.4428 0.4145 +vt 0.4344 0.2880 +vt 0.4345 0.2858 +vt 0.2979 0.3293 +vt 0.2978 0.3310 +vt 0.2976 0.3332 +vt 0.2973 0.3357 +vt 0.4344 0.3090 +vt 0.4345 0.3112 +vt 0.4379 0.4081 +vt 0.4381 0.4098 +vt 0.4383 0.4120 +vt 0.4385 0.4145 +vt 0.4288 0.2880 +vt 0.4290 0.2858 +vt 0.3034 0.3305 +vt 0.3030 0.3322 +vt 0.3025 0.3343 +vt 0.3019 0.3367 +vt 0.4288 0.3090 +vt 0.4290 0.3112 +vt 0.4325 0.4093 +vt 0.4329 0.4110 +vt 0.4334 0.4131 +vt 0.4339 0.4155 +vt 0.2886 0.2409 +vt 0.2942 0.2409 +vt 0.2886 0.2387 +vt 0.2940 0.2387 +vt 0.3034 0.3888 +vt 0.2979 0.3900 +vt 0.2978 0.3882 +vt 0.3030 0.3871 +vt 0.2976 0.3860 +vt 0.3025 0.3850 +vt 0.2973 0.3836 +vt 0.3019 0.3826 +vt 0.2942 0.2618 +vt 0.2886 0.2618 +vt 0.2940 0.2640 +vt 0.2886 0.2640 +vt 0.4379 0.4688 +vt 0.4325 0.4676 +vt 0.4329 0.4659 +vt 0.4381 0.4670 +vt 0.4334 0.4637 +vt 0.4383 0.4648 +vt 0.4339 0.4614 +vt 0.4385 0.4624 +vt 0.2738 0.4320 +vt 0.2733 0.4364 +vt 0.2711 0.4363 +vt 0.2716 0.4314 +vt 0.2691 0.4361 +vt 0.2696 0.4309 +vt 0.2675 0.4360 +vt 0.2681 0.4306 +vt 0.3827 0.2158 +vt 0.3777 0.2158 +vt 0.3777 0.2136 +vt 0.3829 0.2136 +vt 0.4625 0.3576 +vt 0.4621 0.3532 +vt 0.4642 0.3526 +vt 0.4647 0.3575 +vt 0.4662 0.3522 +vt 0.4668 0.3574 +vt 0.4678 0.3518 +vt 0.4684 0.3573 +vt 0.3777 0.1904 +vt 0.3827 0.1904 +vt 0.3829 0.1926 +vt 0.3777 0.1926 +vt 0.2750 0.4282 +vt 0.2730 0.4271 +vt 0.2712 0.4262 +vt 0.2697 0.4254 +vt 0.3874 0.2158 +vt 0.3878 0.2136 +vt 0.4608 0.3494 +vt 0.4629 0.3483 +vt 0.4647 0.3474 +vt 0.4662 0.3466 +vt 0.3874 0.1904 +vt 0.3878 0.1926 +vt 0.2770 0.4247 +vt 0.2752 0.4232 +vt 0.2736 0.4219 +vt 0.2723 0.4208 +vt 0.3916 0.2158 +vt 0.3922 0.2136 +vt 0.4589 0.3460 +vt 0.4607 0.3444 +vt 0.4623 0.3431 +vt 0.4635 0.3420 +vt 0.3916 0.1904 +vt 0.3922 0.1926 +vt 0.2796 0.4219 +vt 0.2782 0.4200 +vt 0.2769 0.4182 +vt 0.2758 0.4169 +vt 0.2722 0.3112 +vt 0.2686 0.3112 +vt 0.2678 0.3090 +vt 0.2716 0.3090 +vt 0.4563 0.3431 +vt 0.4577 0.3412 +vt 0.4590 0.3394 +vt 0.4600 0.3381 +vt 0.2686 0.2858 +vt 0.2722 0.2858 +vt 0.2716 0.2880 +vt 0.2678 0.2880 +vt 0.2827 0.4197 +vt 0.2817 0.4175 +vt 0.2808 0.4155 +vt 0.2801 0.4139 +vt 0.2765 0.3112 +vt 0.2761 0.3090 +vt 0.4532 0.3409 +vt 0.4542 0.3387 +vt 0.4551 0.3367 +vt 0.4558 0.3351 +vt 0.2765 0.2858 +vt 0.2761 0.2880 +vt 0.2861 0.4183 +vt 0.2856 0.4159 +vt 0.2851 0.4138 +vt 0.2847 0.4121 +vt 0.2812 0.3112 +vt 0.2810 0.3090 +vt 0.4497 0.3395 +vt 0.4503 0.3371 +vt 0.4507 0.3350 +vt 0.4511 0.3333 +vt 0.2812 0.2858 +vt 0.2810 0.2880 +vt 0.2901 0.4153 +vt 0.2899 0.4131 +vt 0.2898 0.4114 +vt 0.2863 0.3112 +vt 0.2862 0.3090 +vt 0.4456 0.3389 +vt 0.4458 0.3365 +vt 0.4460 0.3343 +vt 0.4461 0.3326 +vt 0.2863 0.2858 +vt 0.2862 0.2880 +vt 0.2861 0.4585 +vt 0.2901 0.4615 +vt 0.2856 0.4609 +vt 0.2899 0.4637 +vt 0.2851 0.4631 +vt 0.2898 0.4655 +vt 0.2847 0.4648 +vt 0.4418 0.2640 +vt 0.4368 0.2640 +vt 0.4368 0.2618 +vt 0.4420 0.2618 +vt 0.4456 0.3803 +vt 0.4497 0.3797 +vt 0.4503 0.3821 +vt 0.4458 0.3827 +vt 0.4507 0.3843 +vt 0.4460 0.3849 +vt 0.4511 0.3860 +vt 0.4461 0.3867 +vt 0.4368 0.2387 +vt 0.4418 0.2387 +vt 0.4420 0.2409 +vt 0.4368 0.2409 +vt 0.2827 0.4572 +vt 0.2817 0.4594 +vt 0.2808 0.4613 +vt 0.2801 0.4629 +vt 0.4465 0.2640 +vt 0.4470 0.2618 +vt 0.4532 0.3784 +vt 0.4542 0.3806 +vt 0.4551 0.3826 +vt 0.4558 0.3841 +vt 0.4465 0.2387 +vt 0.4470 0.2409 +vt 0.2796 0.4550 +vt 0.2782 0.4569 +vt 0.2769 0.4586 +vt 0.2758 0.4600 +vt 0.4508 0.2640 +vt 0.4515 0.2618 +vt 0.4563 0.3762 +vt 0.4577 0.3781 +vt 0.4590 0.3798 +vt 0.4600 0.3812 +vt 0.4508 0.2387 +vt 0.4515 0.2409 +vt 0.2770 0.4521 +vt 0.2752 0.4536 +vt 0.2736 0.4550 +vt 0.2723 0.4561 +vt 0.4545 0.2640 +vt 0.4553 0.2618 +vt 0.4589 0.3733 +vt 0.4607 0.3748 +vt 0.4623 0.3762 +vt 0.4635 0.3773 +vt 0.4545 0.2387 +vt 0.4553 0.2409 +vt 0.2750 0.4487 +vt 0.2730 0.4497 +vt 0.2712 0.4507 +vt 0.2697 0.4514 +vt 0.3636 0.2158 +vt 0.3594 0.2158 +vt 0.3587 0.2136 +vt 0.3631 0.2136 +vt 0.4608 0.3699 +vt 0.4629 0.3709 +vt 0.4647 0.3719 +vt 0.4662 0.3726 +vt 0.3594 0.1904 +vt 0.3636 0.1904 +vt 0.3631 0.1926 +vt 0.3587 0.1926 +vt 0.2738 0.4449 +vt 0.2716 0.4454 +vt 0.2696 0.4459 +vt 0.2681 0.4463 +vt 0.3683 0.2158 +vt 0.3681 0.2136 +vt 0.4621 0.3661 +vt 0.4642 0.3666 +vt 0.4662 0.3671 +vt 0.4678 0.3675 +vt 0.3683 0.1904 +vt 0.3681 0.1926 +vt 0.2733 0.4404 +vt 0.2711 0.4406 +vt 0.2691 0.4407 +vt 0.2675 0.4408 +vt 0.3733 0.2158 +vt 0.3733 0.2136 +vt 0.4625 0.3616 +vt 0.4647 0.3618 +vt 0.4668 0.3619 +vt 0.4684 0.3620 +vt 0.3733 0.1904 +vt 0.3733 0.1926 +vt 0.3006 0.4174 +vt 0.2953 0.4151 +vt 0.3007 0.4150 +vt 0.2953 0.4129 +vt 0.3007 0.4128 +vt 0.2952 0.4112 +vt 0.3007 0.4110 +vt 0.2972 0.3112 +vt 0.2917 0.3112 +vt 0.2918 0.3090 +vt 0.2972 0.3090 +vt 0.4404 0.3387 +vt 0.4350 0.3386 +vt 0.4351 0.3362 +vt 0.4405 0.3363 +vt 0.4351 0.3340 +vt 0.4405 0.3341 +vt 0.4352 0.3323 +vt 0.4406 0.3324 +vt 0.2918 0.2858 +vt 0.2972 0.2858 +vt 0.2972 0.2880 +vt 0.2918 0.2880 +vt 0.3068 0.4175 +vt 0.3068 0.4150 +vt 0.3069 0.4128 +vt 0.3069 0.4111 +vt 0.3034 0.3112 +vt 0.3035 0.3090 +vt 0.4289 0.3387 +vt 0.4289 0.3362 +vt 0.4289 0.3340 +vt 0.4289 0.3323 +vt 0.3034 0.2858 +vt 0.3035 0.2880 +vt 0.3135 0.4177 +vt 0.3135 0.4152 +vt 0.3136 0.4130 +vt 0.3137 0.4113 +vt 0.3102 0.3112 +vt 0.3103 0.3090 +vt 0.4223 0.3389 +vt 0.4222 0.3364 +vt 0.4222 0.3342 +vt 0.4222 0.3325 +vt 0.3102 0.2858 +vt 0.3103 0.2880 +vt 0.3203 0.4180 +vt 0.3204 0.4156 +vt 0.3205 0.4134 +vt 0.3206 0.4116 +vt 0.3171 0.3112 +vt 0.3172 0.3090 +vt 0.4154 0.3392 +vt 0.4154 0.3368 +vt 0.4153 0.3346 +vt 0.4152 0.3328 +vt 0.3171 0.2858 +vt 0.3172 0.2880 +vt 0.3269 0.4184 +vt 0.3271 0.4160 +vt 0.3273 0.4138 +vt 0.3274 0.4121 +vt 0.3238 0.3112 +vt 0.3240 0.3090 +vt 0.4088 0.3397 +vt 0.4087 0.3372 +vt 0.4085 0.3350 +vt 0.4085 0.3333 +vt 0.3239 0.2858 +vt 0.3240 0.2880 +vt 0.3330 0.4190 +vt 0.3332 0.4166 +vt 0.3335 0.4144 +vt 0.3336 0.4126 +vt 0.3301 0.3112 +vt 0.3302 0.3090 +vt 0.4027 0.3402 +vt 0.4025 0.3378 +vt 0.4023 0.3356 +vt 0.4022 0.3338 +vt 0.3301 0.2858 +vt 0.3302 0.2880 +vt 0.3383 0.4196 +vt 0.3386 0.4172 +vt 0.3388 0.4150 +vt 0.3390 0.4133 +vt 0.3354 0.3112 +vt 0.3356 0.3090 +vt 0.3974 0.3408 +vt 0.3972 0.3384 +vt 0.3970 0.3362 +vt 0.3968 0.3345 +vt 0.3355 0.2858 +vt 0.3356 0.2880 +vt 0.3332 0.4578 +vt 0.3384 0.4572 +vt 0.3387 0.4596 +vt 0.3334 0.4603 +vt 0.3389 0.4618 +vt 0.3335 0.4625 +vt 0.3390 0.4636 +vt 0.3336 0.4642 +vt 0.3929 0.2640 +vt 0.3876 0.2640 +vt 0.3874 0.2618 +vt 0.3928 0.2618 +vt 0.3975 0.3784 +vt 0.4028 0.3791 +vt 0.4026 0.3815 +vt 0.3973 0.3809 +vt 0.4024 0.3837 +vt 0.3970 0.3831 +vt 0.4023 0.3854 +vt 0.3968 0.3848 +vt 0.3876 0.2387 +vt 0.3930 0.2387 +vt 0.3928 0.2409 +vt 0.3874 0.2409 +vt 0.3271 0.4584 +vt 0.3272 0.4608 +vt 0.3273 0.4630 +vt 0.3274 0.4648 +vt 0.3992 0.2640 +vt 0.3991 0.2618 +vt 0.4089 0.3796 +vt 0.4088 0.3820 +vt 0.4086 0.3842 +vt 0.4085 0.3860 +vt 0.3992 0.2387 +vt 0.3991 0.2409 +vt 0.3204 0.4588 +vt 0.3205 0.4613 +vt 0.3206 0.4635 +vt 0.3206 0.4652 +vt 0.4059 0.2640 +vt 0.4058 0.2618 +vt 0.4156 0.3801 +vt 0.4154 0.3825 +vt 0.4153 0.3847 +vt 0.4152 0.3864 +vt 0.4059 0.2387 +vt 0.4058 0.2409 +vt 0.3136 0.4592 +vt 0.3136 0.4616 +vt 0.3137 0.4638 +vt 0.3137 0.4656 +vt 0.4128 0.2640 +vt 0.4128 0.2618 +vt 0.4224 0.3804 +vt 0.4223 0.3828 +vt 0.4222 0.3850 +vt 0.4222 0.3868 +vt 0.4128 0.2387 +vt 0.4128 0.2409 +vt 0.3069 0.4594 +vt 0.3069 0.4618 +vt 0.3069 0.4640 +vt 0.3069 0.4657 +vt 0.4196 0.2640 +vt 0.4195 0.2618 +vt 0.4291 0.3806 +vt 0.4290 0.3830 +vt 0.4290 0.3852 +vt 0.4289 0.3870 +vt 0.4196 0.2387 +vt 0.4195 0.2409 +vt 0.3008 0.4594 +vt 0.3008 0.4618 +vt 0.3007 0.4640 +vt 0.3007 0.4658 +vt 0.4258 0.2640 +vt 0.4258 0.2618 +vt 0.4352 0.3806 +vt 0.4352 0.3831 +vt 0.4352 0.3853 +vt 0.4352 0.3870 +vt 0.4259 0.2387 +vt 0.4258 0.2409 +vt 0.2955 0.4593 +vt 0.2954 0.4617 +vt 0.2953 0.4639 +vt 0.2953 0.4657 +vt 0.4313 0.2640 +vt 0.4313 0.2618 +vt 0.4405 0.3805 +vt 0.4405 0.3829 +vt 0.4406 0.3851 +vt 0.4406 0.3869 +vt 0.4313 0.2387 +vt 0.4313 0.2409 +vt 0.3847 0.4257 +vt 0.3819 0.4254 +vt 0.3821 0.4230 +vt 0.3848 0.4233 +vt 0.3822 0.4208 +vt 0.3850 0.4211 +vt 0.3824 0.4191 +vt 0.3851 0.4193 +vt 0.3812 0.3112 +vt 0.3786 0.3112 +vt 0.3787 0.3090 +vt 0.3813 0.3090 +vt 0.3542 0.3466 +vt 0.3512 0.3469 +vt 0.3510 0.3445 +vt 0.3540 0.3442 +vt 0.3509 0.3423 +vt 0.3537 0.3420 +vt 0.3508 0.3406 +vt 0.3535 0.3403 +vt 0.3785 0.2858 +vt 0.3812 0.2858 +vt 0.3813 0.2880 +vt 0.3787 0.2880 +vt 0.3880 0.4259 +vt 0.3881 0.4234 +vt 0.3881 0.4212 +vt 0.3881 0.4195 +vt 0.3843 0.3112 +vt 0.3843 0.3090 +vt 0.3478 0.3471 +vt 0.3478 0.3446 +vt 0.3478 0.3424 +vt 0.3478 0.3407 +vt 0.3843 0.2858 +vt 0.3843 0.2880 +vt 0.3916 0.4258 +vt 0.3915 0.4234 +vt 0.3914 0.4212 +vt 0.3914 0.4194 +vt 0.3876 0.3112 +vt 0.3876 0.3090 +vt 0.3443 0.3470 +vt 0.3444 0.3446 +vt 0.3444 0.3424 +vt 0.3445 0.3406 +vt 0.3876 0.2858 +vt 0.3876 0.2880 +vt 0.3952 0.4256 +vt 0.3950 0.4232 +vt 0.3949 0.4210 +vt 0.3948 0.4193 +vt 0.3910 0.3112 +vt 0.3909 0.3090 +vt 0.3407 0.3468 +vt 0.3408 0.3444 +vt 0.3410 0.3422 +vt 0.3411 0.3405 +vt 0.3910 0.2858 +vt 0.3909 0.2880 +vt 0.3989 0.4253 +vt 0.3986 0.4229 +vt 0.3984 0.4207 +vt 0.3982 0.4189 +vt 0.3944 0.3112 +vt 0.3944 0.3090 +vt 0.3370 0.3465 +vt 0.3372 0.3441 +vt 0.3374 0.3419 +vt 0.3376 0.3401 +vt 0.3944 0.2858 +vt 0.3944 0.2880 +vt 0.4025 0.4248 +vt 0.4022 0.4224 +vt 0.4019 0.4202 +vt 0.4016 0.4185 +vt 0.3978 0.3112 +vt 0.3977 0.3090 +vt 0.3334 0.3460 +vt 0.3337 0.3436 +vt 0.3340 0.3414 +vt 0.3342 0.3397 +vt 0.3978 0.2858 +vt 0.3977 0.2880 +vt 0.4059 0.4242 +vt 0.4055 0.4218 +vt 0.4052 0.4196 +vt 0.4049 0.4179 +vt 0.4011 0.3112 +vt 0.4009 0.3090 +vt 0.3299 0.3454 +vt 0.3303 0.3430 +vt 0.3307 0.3408 +vt 0.3310 0.3391 +vt 0.4011 0.2858 +vt 0.4009 0.2880 +vt 0.4092 0.4235 +vt 0.4087 0.4211 +vt 0.4082 0.4189 +vt 0.4078 0.4172 +vt 0.4041 0.3112 +vt 0.4039 0.3090 +vt 0.3267 0.3447 +vt 0.3272 0.3423 +vt 0.3276 0.3401 +vt 0.3280 0.3384 +vt 0.4041 0.2858 +vt 0.4039 0.2880 +vt 0.4122 0.4226 +vt 0.4115 0.4203 +vt 0.4110 0.4181 +vt 0.4105 0.4165 +vt 0.4068 0.3112 +vt 0.4065 0.3090 +vt 0.3239 0.3439 +vt 0.3245 0.3415 +vt 0.3250 0.3394 +vt 0.3254 0.3377 +vt 0.4067 0.2858 +vt 0.4065 0.2880 +vt 0.4092 0.4534 +vt 0.4120 0.4542 +vt 0.4114 0.4565 +vt 0.4087 0.4558 +vt 0.4109 0.4587 +vt 0.4082 0.4579 +vt 0.4104 0.4604 +vt 0.4078 0.4596 +vt 0.3189 0.2640 +vt 0.3163 0.2640 +vt 0.3165 0.2618 +vt 0.3191 0.2618 +vt 0.3237 0.3755 +vt 0.3267 0.3746 +vt 0.3272 0.3770 +vt 0.3243 0.3778 +vt 0.3276 0.3791 +vt 0.3249 0.3799 +vt 0.3280 0.3808 +vt 0.3254 0.3816 +vt 0.3163 0.2387 +vt 0.3189 0.2387 +vt 0.3191 0.2409 +vt 0.3165 0.2409 +vt 0.4059 0.4526 +vt 0.4055 0.4550 +vt 0.4052 0.4572 +vt 0.4049 0.4589 +vt 0.3219 0.2640 +vt 0.3221 0.2618 +vt 0.3299 0.3739 +vt 0.3303 0.3763 +vt 0.3307 0.3784 +vt 0.3310 0.3801 +vt 0.3219 0.2387 +vt 0.3221 0.2409 +vt 0.4025 0.4520 +vt 0.4022 0.4544 +vt 0.4019 0.4566 +vt 0.4016 0.4584 +vt 0.3252 0.2640 +vt 0.3253 0.2618 +vt 0.3334 0.3732 +vt 0.3337 0.3757 +vt 0.3340 0.3778 +vt 0.3342 0.3796 +vt 0.3252 0.2387 +vt 0.3253 0.2409 +vt 0.3989 0.4515 +vt 0.3986 0.4540 +vt 0.3984 0.4562 +vt 0.3982 0.4579 +vt 0.3286 0.2640 +vt 0.3287 0.2618 +vt 0.3370 0.3728 +vt 0.3372 0.3752 +vt 0.3374 0.3774 +vt 0.3376 0.3791 +vt 0.3286 0.2387 +vt 0.3287 0.2409 +vt 0.3952 0.4512 +vt 0.3950 0.4536 +vt 0.3949 0.4558 +vt 0.3948 0.4576 +vt 0.3320 0.2640 +vt 0.3321 0.2618 +vt 0.3407 0.3724 +vt 0.3408 0.3749 +vt 0.3410 0.3770 +vt 0.3411 0.3788 +vt 0.3320 0.2387 +vt 0.3321 0.2409 +vt 0.3916 0.4510 +vt 0.3915 0.4535 +vt 0.3914 0.4557 +vt 0.3914 0.4574 +vt 0.3355 0.2640 +vt 0.3355 0.2618 +vt 0.3443 0.3722 +vt 0.3444 0.3747 +vt 0.3444 0.3769 +vt 0.3445 0.3786 +vt 0.3355 0.2387 +vt 0.3355 0.2409 +vt 0.3880 0.4510 +vt 0.3881 0.4534 +vt 0.3881 0.4556 +vt 0.3881 0.4574 +vt 0.3387 0.2640 +vt 0.3387 0.2618 +vt 0.3478 0.3722 +vt 0.3478 0.3746 +vt 0.3478 0.3768 +vt 0.3478 0.3786 +vt 0.3387 0.2387 +vt 0.3387 0.2409 +vt 0.3847 0.4511 +vt 0.3848 0.4536 +vt 0.3850 0.4558 +vt 0.3851 0.4575 +vt 0.3418 0.2640 +vt 0.3417 0.2618 +vt 0.3512 0.3723 +vt 0.3510 0.3748 +vt 0.3509 0.3770 +vt 0.3508 0.3787 +vt 0.3418 0.2387 +vt 0.3417 0.2409 +vt 0.3816 0.4514 +vt 0.3819 0.4538 +vt 0.3821 0.4560 +vt 0.3823 0.4578 +vt 0.3445 0.2640 +vt 0.3443 0.2618 +vt 0.3540 0.3726 +vt 0.3538 0.3750 +vt 0.3536 0.3772 +vt 0.3535 0.3790 +vt 0.3444 0.2387 +vt 0.3443 0.2409 +vt 0.0414 0.7996 +vt 0.0409 0.8042 +vt 0.0303 0.8037 +vt 0.0311 0.7972 +vt 0.0205 0.8031 +vt 0.0214 0.7950 +vt 0.0001 0.8013 +vt 0.0012 0.7917 +vt 0.2083 0.7344 +vt 0.1987 0.7344 +vt 0.1984 0.7140 +vt 0.2090 0.7140 +vt 0.1981 0.7041 +vt 0.2095 0.7041 +vt 0.7502 0.7972 +vt 0.7509 0.8036 +vt 0.7599 0.7950 +vt 0.7608 0.8031 +vt 0.7801 0.7917 +vt 0.7812 0.8013 +vt 0.1987 0.4844 +vt 0.2083 0.4844 +vt 0.2090 0.5048 +vt 0.1984 0.5048 +vt 0.2095 0.5147 +vt 0.1981 0.5147 +vt 0.0422 0.7973 +vt 0.0326 0.7927 +vt 0.0237 0.7883 +vt 0.0018 0.7891 +vt 0.0047 0.7807 +vt 0.2193 0.7344 +vt 0.2109 0.7344 +vt 0.2102 0.7140 +vt 0.2200 0.7140 +vt 0.2098 0.7041 +vt 0.2204 0.7041 +vt 0.7486 0.7926 +vt 0.7576 0.7883 +vt 0.7765 0.7807 +vt 0.7795 0.7891 +vt 0.2109 0.4844 +vt 0.2193 0.4844 +vt 0.2200 0.5048 +vt 0.2102 0.5048 +vt 0.2204 0.5147 +vt 0.2098 0.5147 +vt 0.0435 0.7952 +vt 0.0352 0.7886 +vt 0.0274 0.7824 +vt 0.0059 0.7783 +vt 0.0106 0.7707 +vt 0.2293 0.7344 +vt 0.2217 0.7344 +vt 0.2211 0.7140 +vt 0.2299 0.7140 +vt 0.2207 0.7041 +vt 0.2303 0.7041 +vt 0.7461 0.7886 +vt 0.7538 0.7824 +vt 0.7706 0.7707 +vt 0.7754 0.7783 +vt 0.2217 0.4844 +vt 0.2293 0.4844 +vt 0.2299 0.5048 +vt 0.2211 0.5048 +vt 0.2303 0.5147 +vt 0.2207 0.5147 +vt 0.0452 0.7935 +vt 0.0386 0.7852 +vt 0.0324 0.7774 +vt 0.0123 0.7686 +vt 0.0186 0.7623 +vt 0.2477 0.7344 +vt 0.2327 0.7344 +vt 0.2315 0.7140 +vt 0.2490 0.7140 +vt 0.2307 0.7041 +vt 0.2497 0.7041 +vt 0.7427 0.7852 +vt 0.7489 0.7774 +vt 0.7626 0.7623 +vt 0.7690 0.7686 +vt 0.2327 0.4844 +vt 0.2477 0.4844 +vt 0.2490 0.5048 +vt 0.2315 0.5048 +vt 0.2497 0.5147 +vt 0.2307 0.5147 +vt 0.0473 0.7922 +vt 0.0427 0.7826 +vt 0.0384 0.7737 +vt 0.0207 0.7606 +vt 0.0283 0.7559 +vt 0.2939 1.0000 +vt 0.2863 1.0000 +vt 0.2857 0.9796 +vt 0.2945 0.9796 +vt 0.2853 0.9697 +vt 0.2949 0.9697 +vt 0.7386 0.7826 +vt 0.7429 0.7737 +vt 0.7530 0.7558 +vt 0.7605 0.7606 +vt 0.2863 0.7500 +vt 0.2939 0.7500 +vt 0.2945 0.7704 +vt 0.2857 0.7704 +vt 0.2949 0.7803 +vt 0.2853 0.7803 +vt 0.0496 0.7914 +vt 0.0472 0.7811 +vt 0.0450 0.7714 +vt 0.0307 0.7547 +vt 0.0391 0.7518 +vt 0.3047 1.0000 +vt 0.2963 1.0000 +vt 0.2956 0.9796 +vt 0.3054 0.9796 +vt 0.2952 0.9697 +vt 0.3058 0.9697 +vt 0.7341 0.7810 +vt 0.7363 0.7713 +vt 0.7421 0.7517 +vt 0.7506 0.7547 +vt 0.2963 0.7500 +vt 0.3047 0.7500 +vt 0.3054 0.7704 +vt 0.2956 0.7704 +vt 0.3058 0.7803 +vt 0.2952 0.7803 +vt 0.0543 0.7909 +vt 0.0537 0.7803 +vt 0.0531 0.7705 +vt 0.0417 0.7512 +vt 0.0513 0.7501 +vt 0.3169 1.0000 +vt 0.3073 1.0000 +vt 0.3066 0.9796 +vt 0.3172 0.9796 +vt 0.3061 0.9697 +vt 0.3175 0.9697 +vt 0.7276 0.7803 +vt 0.7281 0.7704 +vt 0.7300 0.7501 +vt 0.7395 0.7511 +vt 0.3073 0.7500 +vt 0.3169 0.7500 +vt 0.3172 0.7704 +vt 0.3066 0.7704 +vt 0.3175 0.7803 +vt 0.3061 0.7803 +vt 0.0496 0.9585 +vt 0.0543 0.9591 +vt 0.0537 0.9696 +vt 0.0472 0.9689 +vt 0.0531 0.9795 +vt 0.0450 0.9786 +vt 0.0513 0.9999 +vt 0.0417 0.9988 +vt 0.5156 0.5261 +vt 0.5156 0.5357 +vt 0.4952 0.5360 +vt 0.4952 0.5254 +vt 0.4853 0.5363 +vt 0.4853 0.5249 +vt 0.7341 0.9689 +vt 0.7276 0.9697 +vt 0.7363 0.9786 +vt 0.7281 0.9795 +vt 0.7395 0.9988 +vt 0.7300 0.9999 +vt 0.2656 0.5357 +vt 0.2656 0.5261 +vt 0.2860 0.5254 +vt 0.2860 0.5360 +vt 0.2959 0.5249 +vt 0.2959 0.5363 +vt 0.0473 0.9577 +vt 0.0427 0.9673 +vt 0.0384 0.9763 +vt 0.0391 0.9982 +vt 0.0307 0.9953 +vt 0.5156 0.5151 +vt 0.5156 0.5235 +vt 0.4952 0.5242 +vt 0.4952 0.5144 +vt 0.4853 0.5246 +vt 0.4853 0.5140 +vt 0.7386 0.9674 +vt 0.7429 0.9763 +vt 0.7506 0.9953 +vt 0.7421 0.9982 +vt 0.2656 0.5235 +vt 0.2656 0.5151 +vt 0.2860 0.5144 +vt 0.2860 0.5242 +vt 0.2959 0.5140 +vt 0.2959 0.5246 +vt 0.0452 0.9564 +vt 0.0386 0.9648 +vt 0.0324 0.9725 +vt 0.0283 0.9941 +vt 0.0207 0.9893 +vt 0.5156 0.5051 +vt 0.5156 0.5127 +vt 0.4952 0.5133 +vt 0.4952 0.5045 +vt 0.4853 0.5137 +vt 0.4853 0.5041 +vt 0.7427 0.9648 +vt 0.7489 0.9726 +vt 0.7605 0.9894 +vt 0.7530 0.9941 +vt 0.2656 0.5127 +vt 0.2656 0.5051 +vt 0.2860 0.5045 +vt 0.2860 0.5133 +vt 0.2959 0.5041 +vt 0.2959 0.5137 +vt 0.0435 0.9547 +vt 0.0352 0.9614 +vt 0.0274 0.9676 +vt 0.0186 0.9877 +vt 0.0123 0.9813 +vt 0.5156 0.4867 +vt 0.5156 0.5017 +vt 0.4952 0.5029 +vt 0.4952 0.4854 +vt 0.4853 0.5037 +vt 0.4853 0.4847 +vt 0.7461 0.9614 +vt 0.7538 0.9676 +vt 0.7690 0.9814 +vt 0.7626 0.9877 +vt 0.2656 0.5017 +vt 0.2656 0.4867 +vt 0.2860 0.4854 +vt 0.2860 0.5029 +vt 0.2959 0.4847 +vt 0.2959 0.5037 +vt 0.0422 0.9527 +vt 0.0326 0.9573 +vt 0.0237 0.9616 +vt 0.0106 0.9793 +vt 0.0059 0.9717 +vt 0.0283 0.7344 +vt 0.0207 0.7344 +vt 0.0201 0.7140 +vt 0.0289 0.7140 +vt 0.0197 0.7041 +vt 0.0293 0.7041 +vt 0.7486 0.9573 +vt 0.7576 0.9616 +vt 0.7754 0.9717 +vt 0.7706 0.9793 +vt 0.0207 0.4844 +vt 0.0283 0.4844 +vt 0.0289 0.5048 +vt 0.0201 0.5048 +vt 0.0293 0.5147 +vt 0.0197 0.5147 +vt 0.0414 0.9504 +vt 0.0311 0.9528 +vt 0.0214 0.9550 +vt 0.0047 0.9693 +vt 0.0018 0.9608 +vt 0.0391 0.7344 +vt 0.0307 0.7344 +vt 0.0300 0.7140 +vt 0.0398 0.7140 +vt 0.0296 0.7041 +vt 0.0402 0.7041 +vt 0.7502 0.9528 +vt 0.7599 0.9550 +vt 0.7795 0.9609 +vt 0.7765 0.9693 +vt 0.0307 0.4844 +vt 0.0391 0.4844 +vt 0.0398 0.5048 +vt 0.0300 0.5048 +vt 0.0402 0.5147 +vt 0.0296 0.5147 +vt 0.0409 0.9457 +vt 0.0303 0.9463 +vt 0.0205 0.9469 +vt 0.0012 0.9582 +vt 0.0001 0.9487 +vt 0.0513 0.7344 +vt 0.0417 0.7344 +vt 0.0410 0.7140 +vt 0.0516 0.7140 +vt 0.0405 0.7041 +vt 0.0519 0.7041 +vt 0.7509 0.9463 +vt 0.7608 0.9469 +vt 0.7812 0.9487 +vt 0.7801 0.9583 +vt 0.0417 0.4844 +vt 0.0513 0.4844 +vt 0.0516 0.5048 +vt 0.0410 0.5048 +vt 0.0519 0.5147 +vt 0.0405 0.5147 +vt 0.2085 0.9504 +vt 0.2091 0.9457 +vt 0.2197 0.9463 +vt 0.2189 0.9528 +vt 0.2295 0.9469 +vt 0.2286 0.9550 +vt 0.2499 0.9487 +vt 0.2488 0.9582 +vt 0.0000 0.4271 +vt 0.0000 0.4175 +vt 0.0204 0.4172 +vt 0.0204 0.4278 +vt 0.0303 0.4169 +vt 0.0303 0.4283 +vt 0.5623 0.9528 +vt 0.5616 0.9463 +vt 0.5526 0.9550 +vt 0.5517 0.9469 +vt 0.5324 0.9583 +vt 0.5313 0.9487 +vt 0.2500 0.4175 +vt 0.2500 0.4271 +vt 0.2296 0.4278 +vt 0.2296 0.4172 +vt 0.2197 0.4283 +vt 0.2197 0.4169 +vt 0.2077 0.9527 +vt 0.2173 0.9573 +vt 0.2263 0.9616 +vt 0.2482 0.9608 +vt 0.2453 0.9693 +vt 0.0000 0.4381 +vt 0.0000 0.4297 +vt 0.0204 0.4290 +vt 0.0204 0.4388 +vt 0.0303 0.4286 +vt 0.0303 0.4392 +vt 0.5639 0.9573 +vt 0.5549 0.9616 +vt 0.5359 0.9693 +vt 0.5330 0.9609 +vt 0.2500 0.4297 +vt 0.2500 0.4381 +vt 0.2296 0.4388 +vt 0.2296 0.4290 +vt 0.2197 0.4392 +vt 0.2197 0.4286 +vt 0.2065 0.9547 +vt 0.2148 0.9614 +vt 0.2225 0.9676 +vt 0.2441 0.9717 +vt 0.2393 0.9793 +vt 0.0000 0.4481 +vt 0.0000 0.4405 +vt 0.0204 0.4399 +vt 0.0204 0.4487 +vt 0.0303 0.4395 +vt 0.0303 0.4491 +vt 0.5664 0.9614 +vt 0.5587 0.9676 +vt 0.5419 0.9793 +vt 0.5371 0.9717 +vt 0.2500 0.4405 +vt 0.2500 0.4481 +vt 0.2296 0.4487 +vt 0.2296 0.4399 +vt 0.2197 0.4491 +vt 0.2197 0.4395 +vt 0.2047 0.9564 +vt 0.2114 0.9648 +vt 0.2176 0.9725 +vt 0.2377 0.9813 +vt 0.2314 0.9877 +vt 0.0000 0.4665 +vt 0.0000 0.4515 +vt 0.0204 0.4503 +vt 0.0204 0.4678 +vt 0.0303 0.4495 +vt 0.0303 0.4685 +vt 0.5698 0.9648 +vt 0.5636 0.9726 +vt 0.5498 0.9877 +vt 0.5435 0.9814 +vt 0.2500 0.4515 +vt 0.2500 0.4665 +vt 0.2296 0.4678 +vt 0.2296 0.4503 +vt 0.2197 0.4685 +vt 0.2197 0.4495 +vt 0.2027 0.9577 +vt 0.2073 0.9673 +vt 0.2116 0.9763 +vt 0.2293 0.9893 +vt 0.2217 0.9941 +vt 0.5156 0.7061 +vt 0.5156 0.7137 +vt 0.4952 0.7143 +vt 0.4952 0.7055 +vt 0.4853 0.7147 +vt 0.4853 0.7051 +vt 0.5739 0.9674 +vt 0.5696 0.9763 +vt 0.5595 0.9941 +vt 0.5519 0.9894 +vt 0.2656 0.7137 +vt 0.2656 0.7061 +vt 0.2860 0.7055 +vt 0.2860 0.7143 +vt 0.2959 0.7051 +vt 0.2959 0.7147 +vt 0.2004 0.9585 +vt 0.2028 0.9689 +vt 0.2050 0.9786 +vt 0.2193 0.9953 +vt 0.2109 0.9982 +vt 0.5156 0.6953 +vt 0.5156 0.7037 +vt 0.4952 0.7044 +vt 0.4952 0.6946 +vt 0.4853 0.7048 +vt 0.4853 0.6942 +vt 0.5784 0.9689 +vt 0.5762 0.9786 +vt 0.5704 0.9982 +vt 0.5619 0.9953 +vt 0.2656 0.7037 +vt 0.2656 0.6953 +vt 0.2860 0.6946 +vt 0.2860 0.7044 +vt 0.2959 0.6942 +vt 0.2959 0.7048 +vt 0.1957 0.9591 +vt 0.1963 0.9696 +vt 0.1969 0.9795 +vt 0.2082 0.9988 +vt 0.1987 0.9999 +vt 0.5156 0.6831 +vt 0.5156 0.6927 +vt 0.4952 0.6934 +vt 0.4952 0.6828 +vt 0.4853 0.6939 +vt 0.4853 0.6825 +vt 0.5849 0.9697 +vt 0.5843 0.9795 +vt 0.5825 0.9999 +vt 0.5730 0.9988 +vt 0.2656 0.6927 +vt 0.2656 0.6831 +vt 0.2860 0.6828 +vt 0.2860 0.6934 +vt 0.2959 0.6825 +vt 0.2959 0.6939 +vt 0.2004 0.7914 +vt 0.1957 0.7909 +vt 0.1963 0.7803 +vt 0.2028 0.7811 +vt 0.1969 0.7705 +vt 0.2050 0.7714 +vt 0.1987 0.7501 +vt 0.2082 0.7512 +vt 0.4739 1.0000 +vt 0.4643 1.0000 +vt 0.4640 0.9796 +vt 0.4746 0.9796 +vt 0.4637 0.9697 +vt 0.4751 0.9697 +vt 0.5784 0.7810 +vt 0.5849 0.7803 +vt 0.5762 0.7713 +vt 0.5843 0.7704 +vt 0.5730 0.7511 +vt 0.5825 0.7501 +vt 0.4643 0.7500 +vt 0.4739 0.7500 +vt 0.4746 0.7704 +vt 0.4640 0.7704 +vt 0.4751 0.7803 +vt 0.4637 0.7803 +vt 0.2027 0.7922 +vt 0.2073 0.7826 +vt 0.2116 0.7737 +vt 0.2109 0.7518 +vt 0.2193 0.7547 +vt 0.4849 1.0000 +vt 0.4765 1.0000 +vt 0.4758 0.9796 +vt 0.4856 0.9796 +vt 0.4754 0.9697 +vt 0.4860 0.9697 +vt 0.5739 0.7826 +vt 0.5696 0.7737 +vt 0.5619 0.7547 +vt 0.5704 0.7517 +vt 0.4765 0.7500 +vt 0.4849 0.7500 +vt 0.4856 0.7704 +vt 0.4758 0.7704 +vt 0.4860 0.7803 +vt 0.4754 0.7803 +vt 0.2047 0.7935 +vt 0.2114 0.7852 +vt 0.2176 0.7774 +vt 0.2217 0.7559 +vt 0.2293 0.7606 +vt 0.4949 1.0000 +vt 0.4873 1.0000 +vt 0.4867 0.9796 +vt 0.4955 0.9796 +vt 0.4863 0.9697 +vt 0.4959 0.9697 +vt 0.5698 0.7852 +vt 0.5636 0.7774 +vt 0.5519 0.7606 +vt 0.5595 0.7558 +vt 0.4873 0.7500 +vt 0.4949 0.7500 +vt 0.4955 0.7704 +vt 0.4867 0.7704 +vt 0.4959 0.7803 +vt 0.4863 0.7803 +vt 0.2065 0.7952 +vt 0.2148 0.7886 +vt 0.2225 0.7824 +vt 0.2314 0.7623 +vt 0.2377 0.7686 +vt 0.5133 1.0000 +vt 0.4983 1.0000 +vt 0.4971 0.9796 +vt 0.5146 0.9796 +vt 0.4963 0.9697 +vt 0.5153 0.9697 +vt 0.5664 0.7886 +vt 0.5587 0.7824 +vt 0.5435 0.7686 +vt 0.5498 0.7623 +vt 0.4983 0.7500 +vt 0.5133 0.7500 +vt 0.5146 0.7704 +vt 0.4971 0.7704 +vt 0.5153 0.7803 +vt 0.4963 0.7803 +vt 0.2077 0.7973 +vt 0.2173 0.7927 +vt 0.2263 0.7883 +vt 0.2393 0.7707 +vt 0.2441 0.7783 +vt 0.0000 0.2471 +vt 0.0000 0.2395 +vt 0.0204 0.2389 +vt 0.0204 0.2477 +vt 0.0303 0.2385 +vt 0.0303 0.2481 +vt 0.5639 0.7926 +vt 0.5549 0.7883 +vt 0.5371 0.7783 +vt 0.5419 0.7707 +vt 0.2500 0.2395 +vt 0.2500 0.2471 +vt 0.2296 0.2477 +vt 0.2296 0.2389 +vt 0.2197 0.2481 +vt 0.2197 0.2385 +vt 0.2085 0.7996 +vt 0.2189 0.7972 +vt 0.2286 0.7950 +vt 0.2453 0.7807 +vt 0.2482 0.7891 +vt 0.0000 0.2579 +vt 0.0000 0.2495 +vt 0.0204 0.2488 +vt 0.0204 0.2586 +vt 0.0303 0.2484 +vt 0.0303 0.2590 +vt 0.5623 0.7972 +vt 0.5526 0.7950 +vt 0.5330 0.7891 +vt 0.5359 0.7807 +vt 0.2500 0.2495 +vt 0.2500 0.2579 +vt 0.2296 0.2586 +vt 0.2296 0.2488 +vt 0.2197 0.2590 +vt 0.2197 0.2484 +vt 0.2091 0.8042 +vt 0.2197 0.8037 +vt 0.2295 0.8031 +vt 0.2488 0.7917 +vt 0.2499 0.8013 +vt 0.0000 0.2701 +vt 0.0000 0.2605 +vt 0.0204 0.2598 +vt 0.0204 0.2704 +vt 0.0303 0.2593 +vt 0.0303 0.2707 +vt 0.5616 0.8036 +vt 0.5517 0.8031 +vt 0.5313 0.8013 +vt 0.5324 0.7917 +vt 0.2500 0.2605 +vt 0.2500 0.2701 +vt 0.2296 0.2704 +vt 0.2296 0.2598 +vt 0.2197 0.2707 +vt 0.2197 0.2593 +vt 0.1980 0.7041 +vt 0.0520 0.7041 +vt 0.1977 0.7140 +vt 0.0523 0.7140 +vt 0.1974 0.7344 +vt 0.0526 0.7344 +vt 0.0000 0.9473 +vt 0.0000 0.8026 +vt 0.4636 0.9697 +vt 0.3176 0.9697 +vt 0.4633 0.9796 +vt 0.3179 0.9796 +vt 0.4630 1.0000 +vt 0.3182 1.0000 +vt 0.0526 0.7500 +vt 0.1973 0.7500 +vt 0.0303 0.4168 +vt 0.0303 0.2708 +vt 0.0204 0.4165 +vt 0.0204 0.2711 +vt 0.0000 0.4162 +vt 0.0000 0.2714 +vt 0.2500 0.8026 +vt 0.2500 0.9473 +vt 0.4853 0.5364 +vt 0.4853 0.6824 +vt 0.4952 0.5367 +vt 0.4952 0.6821 +vt 0.5156 0.5370 +vt 0.5156 0.6818 +vt 0.1973 0.9999 +vt 0.0526 0.9999 +vt 0.7812 0.8026 +vt 0.7812 0.9474 +vt 0.0526 0.4844 +vt 0.1974 0.4844 +vt 0.1977 0.5048 +vt 0.0523 0.5048 +vt 0.1980 0.5147 +vt 0.0520 0.5147 +vt 0.7286 1.0000 +vt 0.5839 1.0000 +vt 0.2656 0.6818 +vt 0.2656 0.5370 +vt 0.2860 0.5367 +vt 0.2860 0.6821 +vt 0.2959 0.5364 +vt 0.2959 0.6824 +vt 0.5312 0.9474 +vt 0.5312 0.8026 +vt 0.2500 0.2714 +vt 0.2500 0.4162 +vt 0.2296 0.4165 +vt 0.2296 0.2711 +vt 0.2197 0.4168 +vt 0.2197 0.2708 +vt 0.3176 0.7803 +vt 0.4636 0.7803 +vt 0.3179 0.7704 +vt 0.4633 0.7704 +vt 0.3182 0.7500 +vt 0.4630 0.7500 +vt 0.5839 0.7500 +vt 0.7286 0.7500 +vt 0.7266 0.2969 +vt 0.7266 0.2812 +vt 0.7422 0.2812 +vt 0.7422 0.2969 +vt 0.7109 0.2969 +vt 0.7109 0.2812 +vt 0.6953 0.2969 +vt 0.6953 0.2812 +vt 0.6797 0.2969 +vt 0.6797 0.2812 +vt 0.6641 0.2969 +vt 0.6641 0.2812 +vt 0.6484 0.2969 +vt 0.6484 0.2812 +vt 0.6328 0.2969 +vt 0.6328 0.2812 +vt 0.6172 0.2969 +vt 0.6172 0.2812 +vt 0.6016 0.2969 +vt 0.6016 0.2812 +vt 0.5859 0.2969 +vt 0.5859 0.2812 +vt 0.5703 0.2969 +vt 0.5703 0.2812 +vt 0.5547 0.2969 +vt 0.5547 0.2812 +vt 0.5391 0.2969 +vt 0.5391 0.2812 +vt 0.5234 0.2969 +vt 0.5234 0.2812 +vt 0.5078 0.2969 +vt 0.5078 0.2812 +vt 0.4922 0.2969 +vt 0.4922 0.2812 +vt 0.9766 0.2969 +vt 0.9766 0.2812 +vt 0.9922 0.2812 +vt 0.9922 0.2969 +vt 0.9609 0.2969 +vt 0.9609 0.2812 +vt 0.9453 0.2969 +vt 0.9453 0.2812 +vt 0.9297 0.2969 +vt 0.9297 0.2812 +vt 0.8984 0.2969 +vt 0.8984 0.2812 +vt 0.9141 0.2812 +vt 0.9141 0.2969 +vt 0.8828 0.2969 +vt 0.8828 0.2812 +vt 0.8672 0.2969 +vt 0.8672 0.2812 +vt 0.8516 0.2969 +vt 0.8516 0.2812 +vt 0.8359 0.2969 +vt 0.8359 0.2812 +vt 0.8047 0.2969 +vt 0.8047 0.2812 +vt 0.8203 0.2812 +vt 0.8203 0.2969 +vt 0.7891 0.2969 +vt 0.7891 0.2812 +vt 0.7734 0.2969 +vt 0.7734 0.2812 +vt 0.7120 0.2565 +vt 0.7120 0.2493 +vt 0.7274 0.2493 +vt 0.7274 0.2564 +vt 0.7428 0.2565 +vt 0.7428 0.2493 +vt 0.7582 0.2564 +vt 0.7582 0.2493 +vt 0.7736 0.2564 +vt 0.7736 0.2493 +vt 0.7890 0.2565 +vt 0.7890 0.2493 +vt 0.8044 0.2565 +vt 0.8044 0.2493 +vt 0.8198 0.2493 +vt 0.8198 0.2565 +vt 0.8352 0.2565 +vt 0.8352 0.2494 +vt 0.8506 0.2566 +vt 0.8507 0.2494 +vt 0.8660 0.2567 +vt 0.8661 0.2494 +vt 0.8816 0.2495 +vt 0.8815 0.2567 +vt 0.8970 0.2495 +vt 0.8970 0.2567 +vt 0.9124 0.2567 +vt 0.9125 0.2495 +vt 0.9279 0.2495 +vt 0.9279 0.2567 +vt 0.9434 0.2495 +vt 0.9434 0.2567 +vt 0.9590 0.2567 +vt 0.9588 0.2495 +vt 0.9742 0.2494 +vt 0.9747 0.2566 +vt 0.9905 0.2563 +vt 0.9894 0.2492 +vt 0.4951 0.2563 +vt 0.4962 0.2492 +vt 0.5114 0.2493 +vt 0.5109 0.2566 +vt 0.5267 0.2567 +vt 0.5269 0.2494 +vt 0.5424 0.2495 +vt 0.5424 0.2567 +vt 0.5579 0.2494 +vt 0.5579 0.2566 +vt 0.5733 0.2494 +vt 0.5734 0.2566 +vt 0.5887 0.2494 +vt 0.5888 0.2566 +vt 0.6041 0.2494 +vt 0.6042 0.2565 +vt 0.6195 0.2493 +vt 0.6195 0.2565 +vt 0.6503 0.2565 +vt 0.6349 0.2565 +vt 0.6349 0.2493 +vt 0.6503 0.2493 +vt 0.6811 0.2565 +vt 0.6657 0.2564 +vt 0.6657 0.2493 +vt 0.6811 0.2493 +vt 0.6966 0.2565 +vt 0.6966 0.2493 +vt 0.8826 0.0183 +vt 0.8672 0.0183 +vt 0.8673 0.0112 +vt 0.8519 0.0183 +vt 0.8519 0.0112 +vt 0.8826 0.0111 +vt 0.8980 0.0111 +vt 0.8979 0.0183 +vt 0.8366 0.0183 +vt 0.8213 0.0183 +vt 0.8367 0.0112 +vt 0.9134 0.0112 +vt 0.9133 0.0183 +vt 0.8214 0.0111 +vt 0.9287 0.0112 +vt 0.9286 0.0183 +vt 0.8061 0.0111 +vt 0.8060 0.0182 +vt 0.8359 0.2969 +vt 0.8359 0.2812 +vt 0.8516 0.2812 +vt 0.8516 0.2969 +vt 0.8828 0.2969 +vt 0.8828 0.2812 +vt 0.8984 0.2812 +vt 0.8984 0.2969 +vt 0.9442 0.0112 +vt 0.9439 0.0184 +vt 0.8203 0.2969 +vt 0.8203 0.2812 +vt 0.7907 0.0111 +vt 0.7906 0.0182 +vt 0.9141 0.2812 +vt 0.9141 0.2969 +vt 0.9596 0.0113 +vt 0.9592 0.0184 +vt 0.8047 0.2969 +vt 0.8047 0.2812 +vt 0.7754 0.0110 +vt 0.7753 0.0181 +vt 0.7891 0.2969 +vt 0.7891 0.2812 +vt 0.9750 0.0115 +vt 0.9743 0.0186 +vt 0.7578 0.2969 +vt 0.7578 0.2812 +vt 0.7734 0.2812 +vt 0.7734 0.2969 +vt 0.7600 0.0110 +vt 0.7599 0.0181 +vt 0.9297 0.2812 +vt 0.9297 0.2969 +vt 0.9905 0.0118 +vt 0.9892 0.0188 +vt 0.7422 0.2969 +vt 0.7422 0.2812 +vt 0.7446 0.0109 +vt 0.7446 0.0180 +vt 0.9453 0.2812 +vt 0.9453 0.2969 +vt 0.5119 0.0099 +vt 0.5123 0.0172 +vt 0.4968 0.0174 +vt 0.4958 0.0101 +vt 0.7578 0.2812 +vt 0.7578 0.2969 +vt 0.7266 0.2969 +vt 0.7266 0.2812 +vt 0.5901 0.0174 +vt 0.5746 0.0173 +vt 0.7293 0.0109 +vt 0.7292 0.0180 +vt 0.9609 0.2812 +vt 0.9609 0.2969 +vt 0.5279 0.0099 +vt 0.5279 0.0172 +vt 0.7109 0.2969 +vt 0.7109 0.2812 +vt 0.7139 0.0108 +vt 0.7138 0.0180 +vt 0.9766 0.2812 +vt 0.9766 0.2969 +vt 0.5437 0.0099 +vt 0.5436 0.0172 +vt 0.6953 0.2969 +vt 0.6953 0.2812 +vt 0.6985 0.0107 +vt 0.6984 0.0179 +vt 0.4922 0.2969 +vt 0.4922 0.2812 +vt 0.5078 0.2812 +vt 0.5078 0.2969 +vt 0.5593 0.0100 +vt 0.5591 0.0173 +vt 0.9922 0.2812 +vt 0.9922 0.2969 +vt 0.6831 0.0107 +vt 0.6830 0.0178 +vt 0.5234 0.2812 +vt 0.5234 0.2969 +vt 0.8672 0.2812 +vt 0.8672 0.2969 +vt 0.5748 0.0101 +vt 0.6797 0.2969 +vt 0.6797 0.2812 +vt 0.6521 0.0177 +vt 0.6676 0.0178 +vt 0.6677 0.0106 +vt 0.5391 0.2812 +vt 0.5391 0.2969 +vt 0.5903 0.0102 +vt 0.6641 0.2969 +vt 0.6641 0.2812 +vt 0.6523 0.0105 +vt 0.5547 0.2812 +vt 0.5547 0.2969 +vt 0.6059 0.0102 +vt 0.6057 0.0175 +vt 0.6484 0.2969 +vt 0.6484 0.2812 +vt 0.6369 0.0104 +vt 0.6367 0.0176 +vt 0.5703 0.2812 +vt 0.5703 0.2969 +vt 0.6214 0.0103 +vt 0.6212 0.0175 +vt 0.6328 0.2969 +vt 0.6328 0.2812 +vt 0.6172 0.2969 +vt 0.6172 0.2812 +vt 0.5859 0.2812 +vt 0.5859 0.2969 +vt 0.6016 0.2969 +vt 0.6016 0.2812 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.1120 0.0000 0.9937 +vn -0.1120 -0.0000 -0.9937 +vn 0.9937 0.0000 0.1120 +vn -0.9937 0.0000 -0.1120 +vn 0.3303 0.0000 0.9439 +vn 0.1120 -0.0000 -0.9937 +vn 0.8467 0.0000 -0.5320 +vn 0.7071 0.0000 -0.7071 +vn 0.5320 -0.0000 -0.8467 +vn 0.3303 -0.0000 -0.9439 +vn 0.9439 0.0000 -0.3303 +vn 0.5320 0.0000 0.8467 +vn 0.7071 0.0000 0.7071 +vn 0.8467 0.0000 0.5320 +vn 0.9439 0.0000 0.3303 +vn -0.9937 -0.0000 0.1120 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.8467 0.0000 0.5320 +vn -0.7071 0.0000 0.7071 +vn -0.5320 0.0000 0.8467 +vn -0.3303 0.0000 0.9439 +vn 0.0000 -1.0000 0.0000 +vn -0.9439 0.0000 0.3303 +vn -0.5320 -0.0000 -0.8467 +vn -0.7071 -0.0000 -0.7071 +vn -0.8467 -0.0000 -0.5320 +vn -0.9439 -0.0000 -0.3303 +vn 0.9937 -0.0000 -0.1120 +vn -0.3303 -0.0000 -0.9439 +vn 0.1120 0.0000 0.9937 +vn -0.5000 0.0000 0.8660 +vn -0.8660 0.0000 0.5000 +vn -0.8660 0.0000 -0.5000 +vn -0.5000 0.0000 -0.8660 +vn 0.5000 0.0000 -0.8660 +vn 0.8660 0.0000 -0.5000 +vn 0.8660 0.0000 0.5000 +vn 0.5000 0.0000 0.8660 +vn -0.5556 0.0000 0.8315 +vn -0.8315 0.0000 0.5556 +vn -0.9239 0.0000 0.3827 +vn -0.9808 0.0000 0.1951 +vn -0.9808 0.0000 -0.1951 +vn -0.9239 0.0000 -0.3827 +vn -0.8315 0.0000 -0.5556 +vn -0.5556 0.0000 -0.8315 +vn -0.3827 0.0000 -0.9239 +vn -0.1951 0.0000 -0.9808 +vn 0.1951 0.0000 -0.9808 +vn 0.2865 0.0000 -0.9581 +vn 0.9937 0.0000 -0.1118 +vn 0.0183 -0.0000 0.9998 +vn 0.2865 0.0000 0.9581 +vn 0.0000 1.0000 0.0000 +vn 0.3413 0.0000 -0.9399 +vn 0.9937 0.0000 0.1118 +vn 0.9444 0.0000 -0.3289 +vn 0.8487 -0.0000 -0.5288 +vn 0.7118 -0.0000 -0.7024 +vn 0.5400 -0.0000 -0.8417 +vn 0.0340 0.0000 -0.9994 +vn 0.9444 -0.0000 0.3289 +vn -0.1060 0.0000 0.9944 +vn 0.3413 0.0000 0.9399 +vn 0.5400 0.0000 0.8417 +vn 0.7118 0.0000 0.7024 +vn 0.8487 -0.0000 0.5288 +vn 0.0340 0.0000 0.9994 +vn 0.1951 0.0000 0.9808 +vn -0.0063 -0.0000 -1.0000 +vn -0.1951 0.0000 0.9808 +vn -0.1060 0.0000 -0.9944 +vn -0.0261 -0.0000 -0.9997 +vn -0.0439 -0.0000 -0.9990 +vn -0.0618 -0.0000 -0.9981 +vn -0.0815 -0.0000 -0.9967 +vn -0.0894 0.0000 0.9960 +vn -0.1217 0.0000 -0.9926 +vn -0.1217 0.0000 0.9926 +vn -0.0618 0.0000 0.9981 +vn -0.0439 0.0000 0.9990 +vn -0.0261 0.0000 0.9997 +vn -0.0063 0.0000 1.0000 +vn 0.0183 -0.0000 -0.9998 +vn -0.0815 0.0000 0.9967 +vn 0.1249 0.0000 0.9922 +vn 0.2553 -0.0000 -0.9669 +vn 0.0083 -0.0000 -1.0000 +vn 0.0474 -0.0000 -0.9989 +vn 0.0842 -0.0000 -0.9964 +vn 0.1209 -0.0000 -0.9927 +vn 0.1597 -0.0000 -0.9872 +vn 0.2031 -0.0000 -0.9792 +vn -0.0359 -0.0000 -0.9994 +vn -0.0359 0.0000 0.9994 +vn -0.0894 -0.0000 -0.9960 +vn 0.2031 -0.0000 0.9792 +vn 0.1597 0.0000 0.9872 +vn 0.1209 -0.0000 0.9927 +vn 0.0842 0.0000 0.9964 +vn 0.0474 0.0000 0.9989 +vn 0.0083 0.0000 1.0000 +vn 0.2553 0.0000 0.9669 +vn 0.1249 0.0000 -0.9922 +vn -0.3827 0.0000 0.9239 +vn -0.1927 -0.1564 0.9687 +vn -0.1738 -0.4540 0.8739 +vn -0.1380 -0.7071 0.6935 +vn -0.0886 -0.8910 0.4453 +vn -0.0305 -0.9877 0.1534 +vn -0.1927 0.1564 0.9687 +vn -0.1738 0.4540 0.8739 +vn -0.1379 0.7071 0.6935 +vn -0.0886 0.8910 0.4453 +vn -0.0305 0.9877 0.1534 +vn -0.3780 -0.1564 0.9125 +vn -0.3410 -0.4540 0.8232 +vn -0.2706 -0.7071 0.6533 +vn -0.1737 -0.8910 0.4194 +vn -0.0599 -0.9877 0.1445 +vn -0.3780 0.1564 0.9125 +vn -0.3410 0.4540 0.8232 +vn -0.2706 0.7071 0.6533 +vn -0.1737 0.8910 0.4194 +vn -0.0599 0.9877 0.1445 +vn -0.5487 -0.1564 0.8212 +vn -0.4950 -0.4540 0.7408 +vn -0.3928 -0.7071 0.5879 +vn -0.2522 -0.8910 0.3775 +vn -0.0869 -0.9877 0.1301 +vn -0.5487 0.1564 0.8212 +vn -0.4950 0.4540 0.7408 +vn -0.3928 0.7071 0.5879 +vn -0.2522 0.8910 0.3775 +vn -0.0869 0.9877 0.1301 +vn -0.6984 -0.1564 0.6984 +vn -0.6300 -0.4540 0.6300 +vn -0.5000 -0.7071 0.5000 +vn -0.3210 -0.8910 0.3210 +vn -0.1106 -0.9877 0.1106 +vn -0.6984 0.1564 0.6984 +vn -0.6300 0.4540 0.6300 +vn -0.5000 0.7071 0.5000 +vn -0.3210 0.8910 0.3210 +vn -0.1106 0.9877 0.1106 +vn -0.8212 -0.1564 0.5487 +vn -0.7408 -0.4540 0.4950 +vn -0.5879 -0.7071 0.3928 +vn -0.3775 -0.8910 0.2522 +vn -0.1301 -0.9877 0.0869 +vn -0.8212 0.1564 0.5487 +vn -0.7408 0.4540 0.4950 +vn -0.5879 0.7071 0.3928 +vn -0.3775 0.8910 0.2522 +vn -0.1301 0.9877 0.0869 +vn -0.9125 -0.1564 0.3780 +vn -0.8232 -0.4540 0.3410 +vn -0.6533 -0.7071 0.2706 +vn -0.4194 -0.8910 0.1737 +vn -0.1445 -0.9877 0.0599 +vn -0.9125 0.1564 0.3780 +vn -0.8232 0.4540 0.3410 +vn -0.6533 0.7071 0.2706 +vn -0.4194 0.8910 0.1737 +vn -0.1445 0.9877 0.0599 +vn -0.9687 -0.1564 0.1927 +vn -0.8739 -0.4540 0.1738 +vn -0.6935 -0.7071 0.1379 +vn -0.4453 -0.8910 0.0886 +vn -0.1534 -0.9877 0.0305 +vn -0.9687 0.1564 0.1927 +vn -0.8739 0.4540 0.1738 +vn -0.6935 0.7071 0.1379 +vn -0.4453 0.8910 0.0886 +vn -0.1534 0.9877 0.0305 +vn -0.9877 -0.1564 0.0000 +vn -0.8910 -0.4540 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.4540 -0.8910 -0.0000 +vn -0.1564 -0.9877 0.0000 +vn -0.9877 0.1564 0.0000 +vn -0.8910 0.4540 0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.4540 0.8910 -0.0000 +vn -0.1564 0.9877 -0.0000 +vn -0.9687 -0.1564 -0.1927 +vn -0.8739 -0.4540 -0.1738 +vn -0.6935 -0.7071 -0.1379 +vn -0.4453 -0.8910 -0.0886 +vn -0.1534 -0.9877 -0.0305 +vn -0.9687 0.1564 -0.1927 +vn -0.8739 0.4540 -0.1738 +vn -0.6935 0.7071 -0.1379 +vn -0.4453 0.8910 -0.0886 +vn -0.1534 0.9877 -0.0305 +vn -0.9125 -0.1564 -0.3780 +vn -0.8232 -0.4540 -0.3410 +vn -0.6533 -0.7071 -0.2706 +vn -0.4194 -0.8910 -0.1737 +vn -0.1445 -0.9877 -0.0599 +vn -0.9125 0.1564 -0.3780 +vn -0.8232 0.4540 -0.3410 +vn -0.6533 0.7071 -0.2706 +vn -0.4194 0.8910 -0.1737 +vn -0.1445 0.9877 -0.0599 +vn -0.8212 -0.1564 -0.5487 +vn -0.7408 -0.4540 -0.4950 +vn -0.5879 -0.7071 -0.3928 +vn -0.3775 -0.8910 -0.2522 +vn -0.1301 -0.9877 -0.0869 +vn -0.8212 0.1564 -0.5487 +vn -0.7408 0.4540 -0.4950 +vn -0.5879 0.7071 -0.3928 +vn -0.3775 0.8910 -0.2522 +vn -0.1301 0.9877 -0.0869 +vn -0.6984 -0.1564 -0.6984 +vn -0.6300 -0.4540 -0.6300 +vn -0.5000 -0.7071 -0.5000 +vn -0.3210 -0.8910 -0.3210 +vn -0.1106 -0.9877 -0.1106 +vn -0.6984 0.1564 -0.6984 +vn -0.6300 0.4540 -0.6300 +vn -0.5000 0.7071 -0.5000 +vn -0.3210 0.8910 -0.3210 +vn -0.1106 0.9877 -0.1106 +vn -0.5487 -0.1564 -0.8212 +vn -0.4950 -0.4540 -0.7408 +vn -0.3928 -0.7071 -0.5879 +vn -0.2522 -0.8910 -0.3775 +vn -0.0869 -0.9877 -0.1301 +vn -0.5487 0.1564 -0.8212 +vn -0.4950 0.4540 -0.7408 +vn -0.3928 0.7071 -0.5879 +vn -0.2522 0.8910 -0.3775 +vn -0.0869 0.9877 -0.1301 +vn -0.3780 -0.1564 -0.9125 +vn -0.3410 -0.4540 -0.8232 +vn -0.2706 -0.7071 -0.6533 +vn -0.1737 -0.8910 -0.4194 +vn -0.0599 -0.9877 -0.1445 +vn -0.3780 0.1564 -0.9125 +vn -0.3410 0.4540 -0.8232 +vn -0.2706 0.7071 -0.6533 +vn -0.1737 0.8910 -0.4194 +vn -0.0599 0.9877 -0.1445 +vn -0.1927 -0.1564 -0.9687 +vn -0.1738 -0.4540 -0.8739 +vn -0.1379 -0.7071 -0.6935 +vn -0.0886 -0.8910 -0.4453 +vn -0.0305 -0.9877 -0.1534 +vn -0.1927 0.1564 -0.9687 +vn -0.1738 0.4540 -0.8739 +vn -0.1379 0.7071 -0.6935 +vn -0.0886 0.8910 -0.4453 +vn -0.0305 0.9877 -0.1534 +vn 0.0000 -0.1564 -0.9877 +vn 0.0000 -0.4540 -0.8910 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.8910 -0.4540 +vn 0.0000 -0.9877 -0.1564 +vn 0.0000 0.1564 -0.9877 +vn 0.0000 0.4540 -0.8910 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.8910 -0.4540 +vn 0.0000 0.9877 -0.1564 +vn 0.1927 -0.1564 -0.9687 +vn 0.1738 -0.4540 -0.8739 +vn 0.1380 -0.7071 -0.6935 +vn 0.0886 -0.8910 -0.4453 +vn 0.0305 -0.9877 -0.1534 +vn 0.1927 0.1564 -0.9687 +vn 0.1738 0.4540 -0.8739 +vn 0.1379 0.7071 -0.6935 +vn 0.0886 0.8910 -0.4453 +vn 0.0305 0.9877 -0.1534 +vn 0.1927 -0.1564 0.9687 +vn 0.1738 -0.4540 0.8739 +vn 0.1379 -0.7071 0.6935 +vn 0.0886 -0.8910 0.4453 +vn 0.0305 -0.9877 0.1534 +vn 0.1927 0.1564 0.9687 +vn 0.1738 0.4540 0.8739 +vn 0.1379 0.7071 0.6935 +vn 0.0886 0.8910 0.4453 +vn 0.0305 0.9877 0.1534 +vn -0.0000 -0.1564 0.9877 +vn -0.0000 -0.4540 0.8910 +vn -0.0000 -0.7071 0.7071 +vn -0.0000 -0.8910 0.4540 +vn -0.0000 -0.9877 0.1564 +vn -0.0000 0.1564 0.9877 +vn -0.0000 0.4540 0.8910 +vn -0.0000 0.7071 0.7071 +vn -0.0000 0.8910 0.4540 +vn -0.0000 0.9877 0.1564 +vn 0.1555 0.9877 -0.0175 +vn 0.4511 0.8910 -0.0508 +vn 0.7027 0.7071 -0.0791 +vn 0.8854 0.4540 -0.0996 +vn 0.9815 0.1564 -0.1104 +vn 0.1555 -0.9877 -0.0175 +vn 0.4511 -0.8910 -0.0508 +vn 0.7027 -0.7071 -0.0791 +vn 0.8854 -0.4540 -0.0996 +vn 0.9815 -0.1564 -0.1104 +vn 0.1477 0.9877 -0.0514 +vn 0.4287 0.8910 -0.1493 +vn 0.6678 0.7071 -0.2326 +vn 0.8414 0.4540 -0.2931 +vn 0.9327 0.1564 -0.3248 +vn 0.1477 -0.9877 -0.0514 +vn 0.4287 -0.8910 -0.1493 +vn 0.6678 -0.7071 -0.2326 +vn 0.8414 -0.4540 -0.2931 +vn 0.9327 -0.1564 -0.3248 +vn 0.1328 0.9877 -0.0827 +vn 0.3853 0.8910 -0.2401 +vn 0.6001 0.7071 -0.3740 +vn 0.7562 0.4540 -0.4712 +vn 0.8383 0.1564 -0.5223 +vn 0.1328 -0.9877 -0.0827 +vn 0.3853 -0.8910 -0.2401 +vn 0.6001 -0.7071 -0.3740 +vn 0.7562 -0.4540 -0.4712 +vn 0.8383 -0.1564 -0.5223 +vn 0.1113 0.9877 -0.1099 +vn 0.3231 0.8910 -0.3189 +vn 0.5033 0.7071 -0.4967 +vn 0.6342 0.4540 -0.6259 +vn 0.7030 0.1564 -0.6938 +vn 0.1113 -0.9877 -0.1099 +vn 0.3231 -0.8910 -0.3189 +vn 0.5033 -0.7071 -0.4967 +vn 0.6342 -0.4540 -0.6259 +vn 0.7030 -0.1564 -0.6938 +vn 0.0845 0.9877 -0.1317 +vn 0.2452 0.8910 -0.3821 +vn 0.3818 0.7071 -0.5951 +vn 0.4812 0.4540 -0.7499 +vn 0.5334 0.1564 -0.8313 +vn 0.0845 -0.9877 -0.1317 +vn 0.2452 -0.8910 -0.3821 +vn 0.3818 -0.7071 -0.5951 +vn 0.4812 -0.4540 -0.7499 +vn 0.5334 -0.1564 -0.8313 +vn 0.0534 0.9877 -0.1470 +vn 0.1550 0.8910 -0.4267 +vn 0.2414 0.7071 -0.6646 +vn 0.3041 0.4540 -0.8375 +vn 0.3371 0.1564 -0.9284 +vn 0.0534 -0.9877 -0.1470 +vn 0.1550 -0.8910 -0.4267 +vn 0.2414 -0.7071 -0.6646 +vn 0.3041 -0.4540 -0.8375 +vn 0.3371 -0.1564 -0.9284 +vn 0.0195 0.9877 -0.1552 +vn 0.0567 0.8910 -0.4504 +vn 0.0883 0.7071 -0.7016 +vn 0.1113 0.4540 -0.8840 +vn 0.1234 0.1564 -0.9800 +vn 0.0195 -0.9877 -0.1552 +vn 0.0567 -0.8910 -0.4504 +vn 0.0883 -0.7071 -0.7016 +vn 0.1113 -0.4540 -0.8840 +vn 0.1234 -0.1564 -0.9800 +vn 0.0195 0.9877 0.1552 +vn 0.0567 0.8910 0.4504 +vn 0.0883 0.7071 0.7016 +vn 0.1113 0.4540 0.8840 +vn 0.1234 0.1564 0.9800 +vn 0.0195 -0.9877 0.1552 +vn 0.0567 -0.8910 0.4504 +vn 0.0883 -0.7071 0.7016 +vn 0.1113 -0.4540 0.8840 +vn 0.1234 -0.1564 0.9800 +vn 0.0534 0.9877 0.1470 +vn 0.1550 0.8910 0.4267 +vn 0.2414 0.7071 0.6646 +vn 0.3041 0.4540 0.8375 +vn 0.3371 0.1564 0.9284 +vn 0.0534 -0.9877 0.1470 +vn 0.1550 -0.8910 0.4267 +vn 0.2414 -0.7071 0.6646 +vn 0.3041 -0.4540 0.8375 +vn 0.3371 -0.1564 0.9284 +vn 0.0845 0.9877 0.1317 +vn 0.2452 0.8910 0.3821 +vn 0.3818 0.7071 0.5951 +vn 0.4812 0.4540 0.7499 +vn 0.5334 0.1564 0.8313 +vn 0.0845 -0.9877 0.1317 +vn 0.2452 -0.8910 0.3821 +vn 0.3818 -0.7071 0.5951 +vn 0.4812 -0.4540 0.7499 +vn 0.5334 -0.1564 0.8313 +vn 0.1113 0.9877 0.1099 +vn 0.3231 0.8910 0.3189 +vn 0.5033 0.7071 0.4967 +vn 0.6342 0.4540 0.6259 +vn 0.7030 0.1564 0.6938 +vn 0.1113 -0.9877 0.1099 +vn 0.3231 -0.8910 0.3189 +vn 0.5033 -0.7071 0.4967 +vn 0.6342 -0.4540 0.6259 +vn 0.7030 -0.1564 0.6938 +vn 0.1328 0.9877 0.0827 +vn 0.3853 0.8910 0.2401 +vn 0.6001 0.7071 0.3740 +vn 0.7562 0.4540 0.4712 +vn 0.8383 0.1564 0.5223 +vn 0.1328 -0.9877 0.0827 +vn 0.3853 -0.8910 0.2401 +vn 0.6001 -0.7071 0.3740 +vn 0.7562 -0.4540 0.4712 +vn 0.8383 -0.1564 0.5223 +vn 0.1477 0.9877 0.0515 +vn 0.4287 0.8910 0.1493 +vn 0.6678 0.7071 0.2326 +vn 0.8414 0.4540 0.2931 +vn 0.9327 0.1564 0.3248 +vn 0.1477 -0.9877 0.0514 +vn 0.4287 -0.8910 0.1493 +vn 0.6678 -0.7071 0.2326 +vn 0.8414 -0.4540 0.2931 +vn 0.9327 -0.1564 0.3248 +vn 0.1555 0.9877 0.0175 +vn 0.4511 0.8910 0.0508 +vn 0.7027 0.7071 0.0790 +vn 0.8854 0.4540 0.0996 +vn 0.9815 0.1564 0.1104 +vn 0.1555 -0.9877 0.0175 +vn 0.4511 -0.8910 0.0508 +vn 0.7027 -0.7071 0.0791 +vn 0.8854 -0.4540 0.0996 +vn 0.9815 -0.1564 0.1104 +vn 0.1564 0.9877 0.0000 +vn 0.4540 0.8910 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.8910 0.4540 0.0000 +vn 0.9877 0.1564 0.0000 +vn 0.1564 -0.9877 0.0000 +vn 0.4540 -0.8910 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.8910 -0.4540 0.0000 +vn 0.9877 -0.1564 0.0000 +vn 0.0029 0.9877 -0.1564 +vn 0.0084 0.8910 -0.4540 +vn 0.0130 0.7071 -0.7070 +vn 0.0163 0.4539 -0.8909 +vn 0.0181 0.1564 -0.9875 +vn 0.0028 -0.9877 -0.1564 +vn 0.0083 -0.8910 -0.4539 +vn 0.0129 -0.7071 -0.7070 +vn 0.0163 -0.4540 -0.8909 +vn 0.0181 -0.1564 -0.9875 +vn -0.0010 0.9877 -0.1564 +vn -0.0028 0.8910 -0.4540 +vn -0.0044 0.7071 -0.7071 +vn -0.0056 0.4540 -0.8910 +vn -0.0062 0.1564 -0.9877 +vn -0.0010 -0.9877 -0.1565 +vn -0.0030 -0.8910 -0.4540 +vn -0.0046 -0.7071 -0.7071 +vn -0.0057 -0.4539 -0.8910 +vn -0.0063 -0.1564 -0.9877 +vn -0.0041 0.9877 -0.1564 +vn -0.0118 0.8910 -0.4539 +vn -0.0184 0.7071 -0.7069 +vn -0.0233 0.4540 -0.8907 +vn -0.0258 0.1564 -0.9874 +vn -0.0041 -0.9877 -0.1564 +vn -0.0119 -0.8910 -0.4539 +vn -0.0185 -0.7071 -0.7069 +vn -0.0233 -0.4540 -0.8907 +vn -0.0258 -0.1564 -0.9874 +vn -0.0069 0.9877 -0.1563 +vn -0.0199 0.8910 -0.4536 +vn -0.0310 0.7071 -0.7065 +vn -0.0391 0.4540 -0.8902 +vn -0.0434 0.1564 -0.9867 +vn -0.0069 -0.9877 -0.1563 +vn -0.0200 -0.8910 -0.4536 +vn -0.0311 -0.7071 -0.7064 +vn -0.0392 -0.4540 -0.8902 +vn -0.0434 -0.1564 -0.9867 +vn -0.0096 0.9877 -0.1562 +vn -0.0280 0.8910 -0.4532 +vn -0.0436 0.7071 -0.7058 +vn -0.0550 0.4540 -0.8893 +vn -0.0610 0.1564 -0.9858 +vn -0.0097 -0.9877 -0.1561 +vn -0.0281 -0.8910 -0.4532 +vn -0.0437 -0.7071 -0.7058 +vn -0.0550 -0.4540 -0.8893 +vn -0.0610 -0.1564 -0.9858 +vn -0.0127 0.9877 -0.1559 +vn -0.0369 0.8910 -0.4525 +vn -0.0576 0.7071 -0.7048 +vn -0.0726 0.4539 -0.8881 +vn -0.0805 0.1564 -0.9844 +vn -0.0128 -0.9877 -0.1559 +vn -0.0371 -0.8910 -0.4525 +vn -0.0577 -0.7071 -0.7048 +vn -0.0726 -0.4540 -0.8881 +vn -0.0805 -0.1564 -0.9844 +vn -0.0166 0.9877 -0.1556 +vn -0.0481 0.8910 -0.4515 +vn -0.0749 0.7071 -0.7031 +vn -0.0944 0.4540 -0.8860 +vn -0.1047 0.1564 -0.9821 +vn -0.0166 -0.9877 -0.1556 +vn -0.0482 -0.8910 -0.4515 +vn -0.0751 -0.7071 -0.7032 +vn -0.0945 -0.4539 -0.8860 +vn -0.1047 -0.1564 -0.9821 +vn -0.0166 0.9877 0.1556 +vn -0.0482 0.8910 0.4515 +vn -0.0751 0.7071 0.7032 +vn -0.0945 0.4539 0.8860 +vn -0.1047 0.1564 0.9821 +vn -0.0166 -0.9877 0.1556 +vn -0.0481 -0.8910 0.4515 +vn -0.0749 -0.7071 0.7031 +vn -0.0944 -0.4540 0.8860 +vn -0.1047 -0.1564 0.9821 +vn -0.0128 0.9877 0.1559 +vn -0.0371 0.8910 0.4525 +vn -0.0577 0.7071 0.7048 +vn -0.0726 0.4540 0.8881 +vn -0.0805 0.1564 0.9844 +vn -0.0127 -0.9877 0.1559 +vn -0.0369 -0.8910 0.4525 +vn -0.0576 -0.7071 0.7048 +vn -0.0726 -0.4539 0.8881 +vn -0.0805 -0.1564 0.9844 +vn -0.0097 0.9877 0.1561 +vn -0.0281 0.8910 0.4532 +vn -0.0437 0.7071 0.7058 +vn -0.0550 0.4540 0.8893 +vn -0.0610 0.1564 0.9858 +vn -0.0096 -0.9877 0.1562 +vn -0.0280 -0.8910 0.4532 +vn -0.0436 -0.7071 0.7058 +vn -0.0550 -0.4540 0.8893 +vn -0.0610 -0.1564 0.9858 +vn -0.0069 0.9877 0.1563 +vn -0.0200 0.8910 0.4536 +vn -0.0311 0.7071 0.7065 +vn -0.0392 0.4540 0.8902 +vn -0.0434 0.1564 0.9867 +vn -0.0069 -0.9877 0.1563 +vn -0.0199 -0.8910 0.4536 +vn -0.0310 -0.7071 0.7065 +vn -0.0391 -0.4540 0.8902 +vn -0.0434 -0.1564 0.9867 +vn -0.0041 0.9877 0.1564 +vn -0.0119 0.8910 0.4539 +vn -0.0185 0.7071 0.7069 +vn -0.0233 0.4540 0.8907 +vn -0.0258 0.1564 0.9874 +vn -0.0041 -0.9877 0.1564 +vn -0.0118 -0.8910 0.4539 +vn -0.0184 -0.7071 0.7069 +vn -0.0233 -0.4540 0.8907 +vn -0.0258 -0.1564 0.9874 +vn -0.0010 0.9877 0.1565 +vn -0.0030 0.8910 0.4540 +vn -0.0046 0.7071 0.7071 +vn -0.0057 0.4539 0.8910 +vn -0.0063 0.1564 0.9877 +vn -0.0010 -0.9877 0.1564 +vn -0.0028 -0.8910 0.4540 +vn -0.0044 -0.7071 0.7071 +vn -0.0056 -0.4540 0.8910 +vn -0.0062 -0.1564 0.9877 +vn 0.0028 0.9877 0.1564 +vn 0.0083 0.8910 0.4539 +vn 0.0129 0.7071 0.7070 +vn 0.0163 0.4540 0.8909 +vn 0.0181 0.1564 0.9875 +vn 0.0029 -0.9877 0.1564 +vn 0.0084 -0.8910 0.4540 +vn 0.0130 -0.7071 0.7070 +vn 0.0163 -0.4539 0.8909 +vn 0.0181 -0.1564 0.9875 +vn 0.0053 -0.9877 0.1564 +vn 0.0155 -0.8910 0.4538 +vn 0.0241 -0.7071 0.7067 +vn 0.0304 -0.4540 0.8905 +vn 0.0336 -0.1564 0.9871 +vn 0.0053 0.9877 0.1563 +vn 0.0155 0.8910 0.4537 +vn 0.0241 0.7071 0.7067 +vn 0.0303 0.4540 0.8905 +vn 0.0336 0.1564 0.9871 +vn 0.0053 -0.9877 -0.1563 +vn 0.0155 -0.8910 -0.4537 +vn 0.0241 -0.7071 -0.7067 +vn 0.0303 -0.4540 -0.8905 +vn 0.0336 -0.1564 -0.9871 +vn 0.0053 0.9877 -0.1564 +vn 0.0155 0.8910 -0.4537 +vn 0.0241 0.7071 -0.7067 +vn 0.0304 0.4540 -0.8905 +vn 0.0336 0.1564 -0.9871 +vn -0.0140 0.9877 -0.1558 +vn -0.0406 0.8910 -0.4522 +vn -0.0632 0.7071 -0.7043 +vn -0.0796 0.4540 -0.8874 +vn -0.0883 0.1564 -0.9837 +vn -0.0142 -0.9877 -0.1558 +vn -0.0409 -0.8910 -0.4522 +vn -0.0635 -0.7070 -0.7043 +vn -0.0798 -0.4539 -0.8875 +vn -0.0883 -0.1564 -0.9837 +vn -0.0056 0.9877 -0.1563 +vn -0.0163 0.8910 -0.4537 +vn -0.0254 0.7071 -0.7066 +vn -0.0320 0.4540 -0.8904 +vn -0.0355 0.1564 -0.9871 +vn -0.0056 -0.9877 -0.1563 +vn -0.0163 -0.8910 -0.4537 +vn -0.0254 -0.7071 -0.7067 +vn -0.0320 -0.4540 -0.8904 +vn -0.0355 -0.1564 -0.9871 +vn 0.0013 0.9877 -0.1564 +vn 0.0038 0.8910 -0.4540 +vn 0.0059 0.7071 -0.7071 +vn 0.0074 0.4540 -0.8910 +vn 0.0082 0.1564 -0.9877 +vn 0.0013 -0.9877 -0.1564 +vn 0.0038 -0.8910 -0.4540 +vn 0.0059 -0.7071 -0.7071 +vn 0.0074 -0.4540 -0.8910 +vn 0.0082 -0.1564 -0.9877 +vn 0.0074 0.9877 -0.1563 +vn 0.0215 0.8910 -0.4535 +vn 0.0335 0.7071 -0.7063 +vn 0.0423 0.4540 -0.8900 +vn 0.0468 0.1564 -0.9866 +vn 0.0074 -0.9877 -0.1563 +vn 0.0215 -0.8910 -0.4535 +vn 0.0335 -0.7071 -0.7063 +vn 0.0423 -0.4540 -0.8900 +vn 0.0468 -0.1564 -0.9866 +vn 0.0132 0.9877 -0.1559 +vn 0.0382 0.8910 -0.4524 +vn 0.0596 0.7071 -0.7046 +vn 0.0750 0.4540 -0.8878 +vn 0.0832 0.1564 -0.9842 +vn 0.0132 -0.9877 -0.1559 +vn 0.0382 -0.8910 -0.4524 +vn 0.0596 -0.7071 -0.7046 +vn 0.0750 -0.4540 -0.8878 +vn 0.0832 -0.1564 -0.9842 +vn 0.0189 0.9877 -0.1553 +vn 0.0549 0.8910 -0.4507 +vn 0.0855 0.7071 -0.7019 +vn 0.1077 0.4540 -0.8845 +vn 0.1194 0.1564 -0.9804 +vn 0.0189 -0.9877 -0.1553 +vn 0.0549 -0.8910 -0.4507 +vn 0.0855 -0.7071 -0.7019 +vn 0.1077 -0.4540 -0.8845 +vn 0.1194 -0.1564 -0.9804 +vn 0.0250 0.9877 -0.1544 +vn 0.0725 0.8910 -0.4482 +vn 0.1129 0.7071 -0.6980 +vn 0.1423 0.4540 -0.8796 +vn 0.1577 0.1564 -0.9750 +vn 0.0250 -0.9877 -0.1544 +vn 0.0725 -0.8910 -0.4482 +vn 0.1129 -0.7071 -0.6980 +vn 0.1423 -0.4540 -0.8796 +vn 0.1577 -0.1564 -0.9750 +vn 0.0318 0.9877 -0.1532 +vn 0.0922 0.8910 -0.4445 +vn 0.1436 0.7071 -0.6924 +vn 0.1810 0.4540 -0.8724 +vn 0.2006 0.1564 -0.9671 +vn 0.0318 -0.9877 -0.1532 +vn 0.0922 -0.8910 -0.4445 +vn 0.1436 -0.7071 -0.6924 +vn 0.1810 -0.4540 -0.8724 +vn 0.2006 -0.1564 -0.9671 +vn 0.0401 0.9877 -0.1512 +vn 0.1162 0.8910 -0.4390 +vn 0.1808 0.7070 -0.6837 +vn 0.2276 0.4539 -0.8615 +vn 0.2522 0.1564 -0.9550 +vn 0.0399 -0.9877 -0.1513 +vn 0.1159 -0.8910 -0.4390 +vn 0.1805 -0.7071 -0.6837 +vn 0.2275 -0.4540 -0.8615 +vn 0.2521 -0.1564 -0.9550 +vn 0.0399 0.9877 0.1513 +vn 0.1159 0.8910 0.4389 +vn 0.1805 0.7071 0.6837 +vn 0.2275 0.4540 0.8615 +vn 0.2521 0.1564 0.9550 +vn 0.0401 -0.9877 0.1512 +vn 0.1162 -0.8910 0.4390 +vn 0.1808 -0.7070 0.6837 +vn 0.2276 -0.4539 0.8615 +vn 0.2522 -0.1564 0.9550 +vn 0.0318 0.9877 0.1532 +vn 0.0922 0.8910 0.4445 +vn 0.1436 0.7071 0.6924 +vn 0.1810 0.4540 0.8724 +vn 0.2006 0.1564 0.9671 +vn 0.0318 -0.9877 0.1532 +vn 0.0922 -0.8910 0.4445 +vn 0.1436 -0.7071 0.6924 +vn 0.1810 -0.4540 0.8724 +vn 0.2006 -0.1564 0.9671 +vn 0.0250 0.9877 0.1544 +vn 0.0725 0.8910 0.4482 +vn 0.1129 0.7071 0.6980 +vn 0.1423 0.4540 0.8796 +vn 0.1577 0.1564 0.9750 +vn 0.0250 -0.9877 0.1544 +vn 0.0725 -0.8910 0.4482 +vn 0.1129 -0.7071 0.6980 +vn 0.1423 -0.4540 0.8796 +vn 0.1577 -0.1564 0.9750 +vn 0.0189 0.9877 0.1553 +vn 0.0549 0.8910 0.4507 +vn 0.0855 0.7071 0.7019 +vn 0.1077 0.4540 0.8845 +vn 0.1194 0.1564 0.9804 +vn 0.0189 -0.9877 0.1553 +vn 0.0549 -0.8910 0.4507 +vn 0.0855 -0.7071 0.7019 +vn 0.1077 -0.4540 0.8845 +vn 0.1194 -0.1564 0.9804 +vn 0.0132 0.9877 0.1559 +vn 0.0382 0.8910 0.4524 +vn 0.0596 0.7071 0.7046 +vn 0.0750 0.4540 0.8878 +vn 0.0832 0.1564 0.9842 +vn 0.0132 -0.9877 0.1559 +vn 0.0382 -0.8910 0.4524 +vn 0.0596 -0.7071 0.7046 +vn 0.0750 -0.4540 0.8878 +vn 0.0832 -0.1564 0.9842 +vn 0.0074 0.9877 0.1563 +vn 0.0215 0.8910 0.4535 +vn 0.0335 0.7071 0.7063 +vn 0.0423 0.4540 0.8900 +vn 0.0468 0.1564 0.9866 +vn 0.0074 -0.9877 0.1563 +vn 0.0215 -0.8910 0.4535 +vn 0.0335 -0.7071 0.7063 +vn 0.0423 -0.4540 0.8900 +vn 0.0468 -0.1564 0.9866 +vn 0.0013 0.9877 0.1564 +vn 0.0038 0.8910 0.4540 +vn 0.0059 0.7071 0.7071 +vn 0.0074 0.4540 0.8910 +vn 0.0082 0.1564 0.9877 +vn 0.0013 -0.9877 0.1564 +vn 0.0038 -0.8910 0.4540 +vn 0.0059 -0.7071 0.7071 +vn 0.0074 -0.4540 0.8910 +vn 0.0082 -0.1564 0.9877 +vn -0.0056 0.9877 0.1563 +vn -0.0163 0.8910 0.4537 +vn -0.0254 0.7071 0.7066 +vn -0.0320 0.4540 0.8904 +vn -0.0355 0.1564 0.9871 +vn -0.0056 -0.9877 0.1563 +vn -0.0163 -0.8910 0.4537 +vn -0.0254 -0.7071 0.7067 +vn -0.0320 -0.4540 0.8904 +vn -0.0355 -0.1564 0.9871 +vn -0.0142 0.9877 0.1558 +vn -0.0409 0.8910 0.4522 +vn -0.0635 0.7070 0.7043 +vn -0.0798 0.4539 0.8875 +vn -0.0883 0.1564 0.9837 +vn -0.0140 -0.9877 0.1558 +vn -0.0406 -0.8910 0.4522 +vn -0.0632 -0.7071 0.7043 +vn -0.0796 -0.4540 0.8874 +vn -0.0883 -0.1564 0.9837 +vn 0.0448 -0.9877 0.1499 +vn 0.1301 -0.8910 0.4350 +vn 0.2026 -0.7071 0.6775 +vn 0.2553 -0.4540 0.8536 +vn 0.2830 -0.1564 0.9463 +vn 0.0448 0.9877 0.1499 +vn 0.1301 0.8910 0.4351 +vn 0.2026 0.7070 0.6776 +vn 0.2553 0.4539 0.8537 +vn 0.2830 0.1564 0.9463 +vn -0.0190 -0.9877 0.1553 +vn -0.0552 -0.8910 0.4507 +vn -0.0860 -0.7070 0.7019 +vn -0.1084 -0.4539 0.8844 +vn -0.1202 -0.1564 0.9804 +vn -0.0190 0.9877 0.1553 +vn -0.0552 0.8910 0.4506 +vn -0.0860 0.7071 0.7019 +vn -0.1084 0.4540 0.8844 +vn -0.1202 0.1564 0.9804 +vn 0.0448 -0.9877 -0.1499 +vn 0.1301 -0.8910 -0.4351 +vn 0.2026 -0.7070 -0.6776 +vn 0.2553 -0.4539 -0.8537 +vn 0.2830 -0.1564 -0.9463 +vn 0.0448 0.9877 -0.1499 +vn 0.1301 0.8910 -0.4350 +vn 0.2026 0.7071 -0.6775 +vn 0.2553 0.4540 -0.8536 +vn 0.2830 0.1564 -0.9463 +vn -0.0190 -0.9877 -0.1553 +vn -0.0552 -0.8910 -0.4506 +vn -0.0860 -0.7071 -0.7019 +vn -0.1084 -0.4540 -0.8844 +vn -0.1202 -0.1564 -0.9804 +vn -0.0190 0.9877 -0.1553 +vn -0.0552 0.8910 -0.4507 +vn -0.0860 0.7070 -0.7019 +vn -0.1084 0.4539 -0.8844 +vn -0.1202 0.1564 -0.9804 +vn 0.1297 0.9914 -0.0146 +vn 0.3803 0.9239 -0.0428 +vn 0.6049 0.7934 -0.0682 +vn 0.7884 0.6088 -0.0888 +vn 0.9181 0.3827 -0.1034 +vn 0.9852 0.1305 -0.1110 +vn 0.1297 -0.9914 -0.0146 +vn 0.3803 -0.9239 -0.0428 +vn 0.6049 -0.7934 -0.0682 +vn 0.7884 -0.6088 -0.0888 +vn 0.9181 -0.3827 -0.1034 +vn 0.9852 -0.1305 -0.1110 +vn 0.1232 0.9914 -0.0431 +vn 0.3612 0.9239 -0.1264 +vn 0.5746 0.7934 -0.2011 +vn 0.7488 0.6088 -0.2620 +vn 0.8720 0.3827 -0.3051 +vn 0.9358 0.1305 -0.3275 +vn 0.1232 -0.9914 -0.0431 +vn 0.3612 -0.9239 -0.1264 +vn 0.5746 -0.7934 -0.2011 +vn 0.7488 -0.6088 -0.2620 +vn 0.8720 -0.3827 -0.3051 +vn 0.9358 -0.1305 -0.3275 +vn 0.1105 0.9914 -0.0694 +vn 0.3240 0.9239 -0.2036 +vn 0.5155 0.7934 -0.3239 +vn 0.6718 0.6088 -0.4221 +vn 0.7823 0.3827 -0.4915 +vn 0.8395 0.1305 -0.5275 +vn 0.1105 -0.9914 -0.0694 +vn 0.3240 -0.9239 -0.2036 +vn 0.5155 -0.7934 -0.3239 +vn 0.6718 -0.6088 -0.4221 +vn 0.7823 -0.3827 -0.4915 +vn 0.8395 -0.1305 -0.5275 +vn 0.0923 0.9914 -0.0923 +vn 0.2706 0.9239 -0.2706 +vn 0.4305 0.7934 -0.4305 +vn 0.5610 0.6088 -0.5610 +vn 0.6533 0.3827 -0.6533 +vn 0.7011 0.1305 -0.7011 +vn 0.0923 -0.9914 -0.0923 +vn 0.2706 -0.9239 -0.2706 +vn 0.4305 -0.7934 -0.4305 +vn 0.5610 -0.6088 -0.5610 +vn 0.6533 -0.3827 -0.6533 +vn 0.7011 -0.1305 -0.7011 +vn 0.0694 0.9914 -0.1105 +vn 0.2036 0.9239 -0.3240 +vn 0.3239 0.7934 -0.5155 +vn 0.4221 0.6088 -0.6718 +vn 0.4915 0.3827 -0.7823 +vn 0.5275 0.1305 -0.8395 +vn 0.0694 -0.9914 -0.1105 +vn 0.2036 -0.9239 -0.3240 +vn 0.3239 -0.7934 -0.5155 +vn 0.4221 -0.6088 -0.6718 +vn 0.4915 -0.3827 -0.7823 +vn 0.5275 -0.1305 -0.8395 +vn 0.0431 0.9914 -0.1232 +vn 0.1264 0.9239 -0.3612 +vn 0.2011 0.7934 -0.5746 +vn 0.2620 0.6088 -0.7488 +vn 0.3051 0.3827 -0.8720 +vn 0.3275 0.1305 -0.9358 +vn 0.0431 -0.9914 -0.1232 +vn 0.1264 -0.9239 -0.3612 +vn 0.2011 -0.7934 -0.5746 +vn 0.2620 -0.6088 -0.7488 +vn 0.3051 -0.3827 -0.8720 +vn 0.3275 -0.1305 -0.9358 +vn 0.0146 0.9914 -0.1297 +vn 0.0428 0.9239 -0.3803 +vn 0.0682 0.7934 -0.6049 +vn 0.0888 0.6088 -0.7884 +vn 0.1034 0.3827 -0.9181 +vn 0.1110 0.1305 -0.9852 +vn 0.0146 -0.9914 -0.1297 +vn 0.0428 -0.9239 -0.3803 +vn 0.0682 -0.7934 -0.6049 +vn 0.0888 -0.6088 -0.7884 +vn 0.1034 -0.3827 -0.9181 +vn 0.1110 -0.1305 -0.9852 +vn 0.0146 0.9914 0.1297 +vn 0.0428 0.9239 0.3803 +vn 0.0682 0.7934 0.6049 +vn 0.0888 0.6088 0.7884 +vn 0.1034 0.3827 0.9181 +vn 0.1110 0.1305 0.9852 +vn 0.0146 -0.9914 0.1297 +vn 0.0428 -0.9239 0.3803 +vn 0.0682 -0.7934 0.6049 +vn 0.0888 -0.6088 0.7884 +vn 0.1034 -0.3827 0.9181 +vn 0.1110 -0.1305 0.9852 +vn 0.0431 0.9914 0.1232 +vn 0.1264 0.9239 0.3612 +vn 0.2011 0.7934 0.5746 +vn 0.2620 0.6088 0.7488 +vn 0.3051 0.3827 0.8720 +vn 0.3275 0.1305 0.9358 +vn 0.0431 -0.9914 0.1232 +vn 0.1264 -0.9239 0.3612 +vn 0.2011 -0.7934 0.5746 +vn 0.2620 -0.6088 0.7488 +vn 0.3051 -0.3827 0.8720 +vn 0.3275 -0.1305 0.9358 +vn 0.0694 0.9914 0.1105 +vn 0.2036 0.9239 0.3240 +vn 0.3239 0.7934 0.5155 +vn 0.4221 0.6088 0.6718 +vn 0.4915 0.3827 0.7823 +vn 0.5275 0.1305 0.8395 +vn 0.0694 -0.9914 0.1105 +vn 0.2036 -0.9239 0.3240 +vn 0.3239 -0.7934 0.5155 +vn 0.4221 -0.6088 0.6718 +vn 0.4915 -0.3827 0.7823 +vn 0.5275 -0.1305 0.8395 +vn 0.0923 0.9914 0.0923 +vn 0.2706 0.9239 0.2706 +vn 0.4305 0.7934 0.4305 +vn 0.5610 0.6088 0.5610 +vn 0.6533 0.3827 0.6533 +vn 0.7011 0.1305 0.7011 +vn 0.0923 -0.9914 0.0923 +vn 0.2706 -0.9239 0.2706 +vn 0.4305 -0.7934 0.4305 +vn 0.5610 -0.6088 0.5610 +vn 0.6533 -0.3827 0.6533 +vn 0.7011 -0.1305 0.7011 +vn 0.1105 0.9914 0.0694 +vn 0.3240 0.9239 0.2036 +vn 0.5155 0.7934 0.3239 +vn 0.6718 0.6088 0.4221 +vn 0.7823 0.3827 0.4915 +vn 0.8395 0.1305 0.5275 +vn 0.1105 -0.9914 0.0694 +vn 0.3240 -0.9239 0.2036 +vn 0.5155 -0.7934 0.3239 +vn 0.6718 -0.6088 0.4221 +vn 0.7823 -0.3827 0.4915 +vn 0.8395 -0.1305 0.5275 +vn 0.1232 0.9914 0.0431 +vn 0.3612 0.9239 0.1264 +vn 0.5746 0.7934 0.2011 +vn 0.7488 0.6088 0.2620 +vn 0.8720 0.3827 0.3051 +vn 0.9358 0.1305 0.3275 +vn 0.1232 -0.9914 0.0431 +vn 0.3612 -0.9239 0.1264 +vn 0.5746 -0.7934 0.2011 +vn 0.7488 -0.6088 0.2620 +vn 0.8720 -0.3827 0.3051 +vn 0.9358 -0.1305 0.3275 +vn 0.1297 0.9914 0.0146 +vn 0.3803 0.9239 0.0428 +vn 0.6049 0.7934 0.0682 +vn 0.7884 0.6088 0.0888 +vn 0.9181 0.3827 0.1034 +vn 0.9852 0.1305 0.1110 +vn 0.1297 -0.9914 0.0146 +vn 0.3803 -0.9239 0.0428 +vn 0.6049 -0.7934 0.0682 +vn 0.7884 -0.6088 0.0888 +vn 0.9181 -0.3827 0.1034 +vn 0.9852 -0.1305 0.1110 +vn -0.1297 0.9914 0.0146 +vn -0.3803 0.9239 0.0428 +vn -0.6049 0.7934 0.0682 +vn -0.7884 0.6088 0.0888 +vn -0.9181 0.3827 0.1034 +vn -0.9852 0.1305 0.1110 +vn -0.1297 -0.9914 0.0146 +vn -0.3803 -0.9239 0.0428 +vn -0.6049 -0.7934 0.0682 +vn -0.7884 -0.6088 0.0888 +vn -0.9181 -0.3827 0.1034 +vn -0.9852 -0.1305 0.1110 +vn -0.1232 0.9914 0.0431 +vn -0.3612 0.9239 0.1264 +vn -0.5746 0.7934 0.2011 +vn -0.7488 0.6088 0.2620 +vn -0.8720 0.3827 0.3051 +vn -0.9358 0.1305 0.3275 +vn -0.1232 -0.9914 0.0431 +vn -0.3612 -0.9239 0.1264 +vn -0.5746 -0.7934 0.2011 +vn -0.7488 -0.6088 0.2620 +vn -0.8720 -0.3827 0.3051 +vn -0.9358 -0.1305 0.3275 +vn -0.1105 0.9914 0.0694 +vn -0.3240 0.9239 0.2036 +vn -0.5155 0.7934 0.3239 +vn -0.6718 0.6088 0.4221 +vn -0.7823 0.3827 0.4915 +vn -0.8395 0.1305 0.5275 +vn -0.1105 -0.9914 0.0694 +vn -0.3240 -0.9239 0.2036 +vn -0.5155 -0.7934 0.3239 +vn -0.6718 -0.6088 0.4221 +vn -0.7823 -0.3827 0.4915 +vn -0.8395 -0.1305 0.5275 +vn -0.0923 0.9914 0.0923 +vn -0.2706 0.9239 0.2706 +vn -0.4305 0.7934 0.4305 +vn -0.5610 0.6088 0.5610 +vn -0.6533 0.3827 0.6533 +vn -0.7011 0.1305 0.7011 +vn -0.0923 -0.9914 0.0923 +vn -0.2706 -0.9239 0.2706 +vn -0.4305 -0.7934 0.4305 +vn -0.5610 -0.6088 0.5610 +vn -0.6533 -0.3827 0.6533 +vn -0.7011 -0.1305 0.7011 +vn -0.0694 0.9914 0.1105 +vn -0.2036 0.9239 0.3240 +vn -0.3239 0.7934 0.5155 +vn -0.4221 0.6088 0.6718 +vn -0.4915 0.3827 0.7823 +vn -0.5275 0.1305 0.8395 +vn -0.0694 -0.9914 0.1105 +vn -0.2036 -0.9239 0.3240 +vn -0.3239 -0.7934 0.5155 +vn -0.4221 -0.6088 0.6718 +vn -0.4915 -0.3827 0.7823 +vn -0.5275 -0.1305 0.8395 +vn -0.0431 0.9914 0.1232 +vn -0.1264 0.9239 0.3612 +vn -0.2011 0.7934 0.5746 +vn -0.2620 0.6088 0.7488 +vn -0.3051 0.3827 0.8720 +vn -0.3275 0.1305 0.9358 +vn -0.0431 -0.9914 0.1232 +vn -0.1264 -0.9239 0.3612 +vn -0.2011 -0.7934 0.5746 +vn -0.2620 -0.6088 0.7488 +vn -0.3051 -0.3827 0.8720 +vn -0.3275 -0.1305 0.9358 +vn -0.0146 0.9914 0.1297 +vn -0.0428 0.9239 0.3803 +vn -0.0682 0.7934 0.6049 +vn -0.0888 0.6088 0.7884 +vn -0.1034 0.3827 0.9181 +vn -0.1110 0.1305 0.9852 +vn -0.0146 -0.9914 0.1297 +vn -0.0428 -0.9239 0.3803 +vn -0.0682 -0.7934 0.6049 +vn -0.0888 -0.6088 0.7884 +vn -0.1034 -0.3827 0.9181 +vn -0.1110 -0.1305 0.9852 +vn -0.0146 0.9914 -0.1297 +vn -0.0428 0.9239 -0.3803 +vn -0.0682 0.7934 -0.6049 +vn -0.0888 0.6088 -0.7884 +vn -0.1034 0.3827 -0.9181 +vn -0.1110 0.1305 -0.9852 +vn -0.0146 -0.9914 -0.1297 +vn -0.0428 -0.9239 -0.3803 +vn -0.0682 -0.7934 -0.6049 +vn -0.0888 -0.6088 -0.7884 +vn -0.1034 -0.3827 -0.9181 +vn -0.1110 -0.1305 -0.9852 +vn -0.0431 0.9914 -0.1232 +vn -0.1264 0.9239 -0.3612 +vn -0.2011 0.7934 -0.5746 +vn -0.2620 0.6088 -0.7488 +vn -0.3051 0.3827 -0.8720 +vn -0.3275 0.1305 -0.9358 +vn -0.0431 -0.9914 -0.1232 +vn -0.1264 -0.9239 -0.3612 +vn -0.2011 -0.7934 -0.5746 +vn -0.2620 -0.6088 -0.7488 +vn -0.3051 -0.3827 -0.8720 +vn -0.3275 -0.1305 -0.9358 +vn -0.0694 0.9914 -0.1105 +vn -0.2036 0.9239 -0.3240 +vn -0.3239 0.7934 -0.5155 +vn -0.4221 0.6088 -0.6718 +vn -0.4915 0.3827 -0.7823 +vn -0.5275 0.1305 -0.8395 +vn -0.0694 -0.9914 -0.1105 +vn -0.2036 -0.9239 -0.3240 +vn -0.3239 -0.7934 -0.5155 +vn -0.4221 -0.6088 -0.6718 +vn -0.4915 -0.3827 -0.7823 +vn -0.5275 -0.1305 -0.8395 +vn -0.0923 0.9914 -0.0923 +vn -0.2706 0.9239 -0.2706 +vn -0.4305 0.7934 -0.4305 +vn -0.5610 0.6088 -0.5610 +vn -0.6533 0.3827 -0.6533 +vn -0.7011 0.1305 -0.7011 +vn -0.0923 -0.9914 -0.0923 +vn -0.2706 -0.9239 -0.2706 +vn -0.4305 -0.7934 -0.4305 +vn -0.5610 -0.6088 -0.5610 +vn -0.6533 -0.3827 -0.6533 +vn -0.7011 -0.1305 -0.7011 +vn -0.1105 0.9914 -0.0694 +vn -0.3240 0.9239 -0.2036 +vn -0.5155 0.7934 -0.3239 +vn -0.6718 0.6088 -0.4221 +vn -0.7823 0.3827 -0.4915 +vn -0.8395 0.1305 -0.5275 +vn -0.1105 -0.9914 -0.0694 +vn -0.3240 -0.9239 -0.2036 +vn -0.5155 -0.7934 -0.3239 +vn -0.6718 -0.6088 -0.4221 +vn -0.7823 -0.3827 -0.4915 +vn -0.8395 -0.1305 -0.5275 +vn -0.1232 0.9914 -0.0431 +vn -0.3612 0.9239 -0.1264 +vn -0.5746 0.7934 -0.2011 +vn -0.7488 0.6088 -0.2620 +vn -0.8720 0.3827 -0.3051 +vn -0.9358 0.1305 -0.3275 +vn -0.1232 -0.9914 -0.0431 +vn -0.3612 -0.9239 -0.1264 +vn -0.5746 -0.7934 -0.2011 +vn -0.7488 -0.6088 -0.2620 +vn -0.8720 -0.3827 -0.3051 +vn -0.9358 -0.1305 -0.3275 +vn -0.1297 0.9914 -0.0146 +vn -0.3803 0.9239 -0.0428 +vn -0.6049 0.7934 -0.0682 +vn -0.7884 0.6088 -0.0888 +vn -0.9181 0.3827 -0.1034 +vn -0.9852 0.1305 -0.1110 +vn -0.1297 -0.9914 -0.0146 +vn -0.3803 -0.9239 -0.0428 +vn -0.6049 -0.7934 -0.0682 +vn -0.7884 -0.6088 -0.0888 +vn -0.9181 -0.3827 -0.1034 +vn -0.9852 -0.1305 -0.1110 +vn 0.9914 0.1305 0.0000 +vn 0.9239 0.3827 -0.0000 +vn 0.7934 0.6088 -0.0000 +vn 0.6088 0.7934 -0.0000 +vn 0.3827 0.9239 -0.0000 +vn 0.1305 0.9914 -0.0000 +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.9914 0.1305 -0.0000 +vn -0.9239 0.3827 -0.0000 +vn -0.7934 0.6088 -0.0000 +vn -0.6088 0.7934 -0.0000 +vn -0.3827 0.9239 -0.0000 +vn -0.1305 0.9914 -0.0000 +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.1305 -0.9914 0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.6088 -0.7934 0.0000 +vn 0.7934 -0.6088 0.0000 +vn 0.9239 -0.3827 0.0000 +vn 0.9914 -0.1305 0.0000 +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.7934 +vn 0.0000 -0.3827 0.9239 +vn -0.0000 -0.1305 0.9914 +vn -0.1305 -0.9914 0.0000 +vn -0.3827 -0.9239 0.0000 +vn -0.6088 -0.7934 0.0000 +vn -0.7934 -0.6088 0.0000 +vn -0.9239 -0.3827 0.0000 +vn -0.9914 -0.1305 -0.0000 +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.6965 0.2113 0.6857 +vn 0.6965 0.2113 -0.6857 +vn 0.6419 0.3431 -0.6857 +vn 0.6419 0.3431 0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.6965 -0.2113 0.6857 +vn 0.6965 -0.2113 -0.6857 +vn 0.6419 -0.3431 0.6857 +vn 0.6419 -0.3431 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.5626 -0.4617 -0.6857 +vn 0.4617 -0.5626 0.6857 +vn 0.4617 -0.5626 -0.6857 +vn 0.3431 -0.6419 0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn 0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn -0.2113 -0.6965 0.6857 +vn -0.2113 -0.6965 -0.6857 +vn -0.3431 -0.6419 0.6857 +vn -0.3431 -0.6419 -0.6857 +vn -0.4617 -0.5626 0.6857 +vn -0.4617 -0.5626 -0.6857 +vn -0.5626 -0.4617 0.6857 +vn -0.5626 -0.4617 -0.6857 +vn -0.6419 -0.3431 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.7244 0.0713 0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.6965 0.2113 -0.6857 +vn -0.5626 0.4617 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.6419 0.3431 0.6857 +vn -0.4617 0.5626 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.2113 0.6965 -0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn 0.2113 0.6965 0.6857 +vn 0.2113 0.6965 -0.6857 +vn 0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn 0.3431 0.6419 0.6857 +vn 0.3431 0.6419 -0.6857 +vn 0.4617 0.5626 0.6857 +vn 0.4617 0.5626 -0.6857 +vn -0.4604 0.8614 0.2147 +vn -0.4686 0.8767 0.1087 +vn -0.2886 0.9513 0.1087 +vn -0.2835 0.9346 0.2147 +vn -0.0957 0.9720 0.2147 +vn -0.0974 0.9893 0.1087 +vn 0.0957 0.9720 0.2147 +vn 0.0974 0.9893 0.1087 +vn 0.2835 0.9346 0.2147 +vn 0.2886 0.9513 0.1087 +vn 0.4604 0.8614 0.2147 +vn 0.4686 0.8767 0.1087 +vn 0.6196 0.7550 0.2147 +vn 0.6306 0.7684 0.1087 +vn 0.7684 0.6306 0.1087 +vn 0.7550 0.6196 0.2147 +vn 0.8614 0.4604 0.2147 +vn 0.8767 0.4686 0.1087 +vn 0.9346 0.2835 0.2147 +vn 0.9513 0.2886 0.1087 +vn 0.9720 0.0957 0.2147 +vn 0.9893 0.0974 0.1087 +vn 0.9893 -0.0974 0.1087 +vn 0.9720 -0.0957 0.2147 +vn 0.9513 -0.2886 0.1087 +vn 0.9346 -0.2835 0.2147 +vn 0.8614 -0.4604 0.2147 +vn 0.8767 -0.4686 0.1087 +vn 0.7684 -0.6306 0.1087 +vn 0.7550 -0.6196 0.2147 +vn 0.6306 -0.7684 0.1087 +vn 0.6196 -0.7550 0.2147 +vn 0.4604 -0.8614 0.2147 +vn 0.4686 -0.8767 0.1087 +vn 0.2886 -0.9513 0.1087 +vn 0.2835 -0.9346 0.2147 +vn 0.0957 -0.9720 0.2147 +vn 0.0974 -0.9893 0.1087 +vn -0.0974 -0.9893 0.1087 +vn -0.0957 -0.9720 0.2147 +vn -0.2835 -0.9346 0.2147 +vn -0.2886 -0.9513 0.1087 +vn -0.4686 -0.8767 0.1087 +vn -0.4604 -0.8614 0.2147 +vn -0.6306 -0.7684 0.1087 +vn -0.6196 -0.7550 0.2147 +vn -0.7684 -0.6306 0.1087 +vn -0.7550 -0.6196 0.2147 +vn -0.8767 -0.4686 0.1087 +vn -0.8614 -0.4604 0.2147 +vn -0.9513 -0.2886 0.1087 +vn -0.9346 -0.2835 0.2147 +vn -0.9893 -0.0974 0.1087 +vn -0.9720 -0.0957 0.2147 +vn -0.9346 0.2835 0.2147 +vn -0.9720 0.0957 0.2147 +vn -0.9893 0.0974 0.1087 +vn -0.9513 0.2886 0.1087 +vn -0.7550 0.6196 0.2147 +vn -0.8614 0.4604 0.2147 +vn -0.8767 0.4686 0.1087 +vn -0.7684 0.6306 0.1087 +vn -0.6196 0.7550 0.2147 +vn -0.6306 0.7684 0.1087 +vn 0.9893 -0.0974 -0.1087 +vn 0.9893 0.0974 -0.1087 +vn 0.9720 0.0957 -0.2147 +vn 0.9513 0.2886 -0.1087 +vn 0.9346 0.2835 -0.2147 +vn 0.9720 -0.0957 -0.2147 +vn 0.9346 -0.2835 -0.2147 +vn 0.9513 -0.2886 -0.1087 +vn 0.8767 0.4686 -0.1087 +vn 0.7684 0.6306 -0.1087 +vn 0.8614 0.4604 -0.2147 +vn 0.8614 -0.4604 -0.2147 +vn 0.8767 -0.4686 -0.1087 +vn 0.7550 0.6196 -0.2147 +vn 0.7550 -0.6196 -0.2147 +vn 0.7684 -0.6306 -0.1087 +vn 0.6196 0.7550 -0.2147 +vn 0.6306 0.7684 -0.1087 +vn 0.6196 -0.7550 -0.2147 +vn 0.6306 -0.7684 -0.1087 +vn 0.4604 0.8614 -0.2147 +vn 0.4686 0.8767 -0.1087 +vn 0.4604 -0.8614 -0.2147 +vn 0.4686 -0.8767 -0.1087 +vn 0.2835 0.9346 -0.2147 +vn 0.2886 0.9513 -0.1087 +vn 0.2835 -0.9346 -0.2147 +vn 0.2886 -0.9513 -0.1087 +vn 0.0957 0.9720 -0.2147 +vn 0.0974 0.9893 -0.1087 +vn 0.0957 -0.9720 -0.2147 +vn 0.0974 -0.9893 -0.1087 +vn -0.0957 0.9720 -0.2147 +vn -0.0974 0.9893 -0.1087 +vn -0.0957 -0.9720 -0.2147 +vn -0.0974 -0.9893 -0.1087 +vn 0.5626 0.4617 -0.6857 +vn 0.5626 0.4617 0.6857 +vn -0.8767 -0.4686 -0.1087 +vn -0.7684 -0.6306 -0.1087 +vn -0.2835 0.9346 -0.2147 +vn -0.2886 0.9513 -0.1087 +vn -0.2835 -0.9346 -0.2147 +vn -0.2886 -0.9513 -0.1087 +vn -0.4604 0.8614 -0.2147 +vn -0.4686 0.8767 -0.1087 +vn -0.4604 -0.8614 -0.2147 +vn -0.4686 -0.8767 -0.1087 +vn -0.6196 0.7550 -0.2147 +vn -0.6306 0.7684 -0.1087 +vn -0.6196 -0.7550 -0.2147 +vn -0.6306 -0.7684 -0.1087 +vn -0.7550 0.6196 -0.2147 +vn -0.7684 0.6306 -0.1087 +vn -0.7550 -0.6196 -0.2147 +vn -0.9513 0.2886 -0.1087 +vn -0.8767 0.4686 -0.1087 +vn -0.8614 0.4604 -0.2147 +vn -0.8614 -0.4604 -0.2147 +vn -0.9346 0.2835 -0.2147 +vn -0.9346 -0.2835 -0.2147 +vn -0.9513 -0.2886 -0.1087 +vn -0.9720 0.0957 -0.2147 +vn -0.9893 0.0974 -0.1087 +vn -0.9720 -0.0957 -0.2147 +vn -0.9893 -0.0974 -0.1087 +vn -0.7321 -0.3032 -0.6100 +vn -0.7933 0.6088 0.0000 +vn -0.6287 0.4824 -0.6100 +vn -0.1034 -0.7856 -0.6100 +vn 0.1034 0.7856 -0.6100 +vn 0.7321 0.3032 -0.6100 +vn 0.7933 -0.6088 0.0000 +vn 0.6287 -0.4824 -0.6100 +vn 0.7321 0.3032 0.6100 +vn 0.1034 0.7856 0.6100 +vn 0.6287 -0.4824 0.6100 +vn -0.6287 0.4824 0.6100 +vn -0.7321 -0.3032 0.6100 +vn -0.1034 -0.7856 0.6100 +vn -0.3032 -0.7321 -0.6100 +vn -0.7856 -0.1034 -0.6100 +vn 0.4824 -0.6287 -0.6100 +vn 0.6088 -0.7933 0.0000 +vn -0.6088 0.7933 0.0000 +vn -0.4824 0.6287 -0.6100 +vn 0.3032 0.7321 -0.6100 +vn 0.7856 0.1034 -0.6100 +vn 0.3032 0.7321 0.6100 +vn -0.4824 0.6287 0.6100 +vn 0.7856 0.1034 0.6100 +vn -0.7856 -0.1034 0.6100 +vn -0.3032 -0.7321 0.6100 +vn 0.4824 -0.6287 0.6100 +vn 0.3032 -0.7321 -0.6100 +vn -0.6088 -0.7933 0.0000 +vn -0.4824 -0.6287 -0.6100 +vn 0.7856 -0.1034 -0.6100 +vn -0.7856 0.1034 -0.6100 +vn -0.3032 0.7321 -0.6100 +vn 0.6088 0.7933 0.0000 +vn 0.4824 0.6287 -0.6100 +vn -0.3032 0.7321 0.6100 +vn -0.7856 0.1034 0.6100 +vn 0.4824 0.6287 0.6100 +vn -0.4824 -0.6287 0.6100 +vn 0.3032 -0.7321 0.6100 +vn 0.7856 -0.1034 0.6100 +vn 0.7321 -0.3032 -0.6100 +vn 0.1034 -0.7856 -0.6100 +vn 0.6287 0.4824 -0.6100 +vn 0.7933 0.6088 0.0000 +vn -0.7933 -0.6088 0.0000 +vn -0.6287 -0.4824 -0.6100 +vn -0.7321 0.3032 -0.6100 +vn -0.1034 0.7856 -0.6100 +vn -0.7321 0.3032 0.6100 +vn -0.6287 -0.4824 0.6100 +vn -0.1034 0.7856 0.6100 +vn 0.1034 -0.7856 0.6100 +vn 0.7321 -0.3032 0.6100 +vn 0.6287 0.4824 0.6100 +vn -0.5603 -0.5603 -0.6100 +vn -0.9659 0.2588 0.0000 +vn -0.7654 0.2051 -0.6100 +vn 0.2051 -0.7654 -0.6100 +vn 0.2588 -0.9659 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 -0.6100 +vn 0.5603 0.5603 -0.6100 +vn 0.9659 -0.2588 0.0000 +vn 0.7654 -0.2051 -0.6100 +vn 0.5603 0.5603 0.6100 +vn -0.2051 0.7654 0.6100 +vn 0.7654 -0.2051 0.6100 +vn -0.7654 0.2051 0.6100 +vn -0.5603 -0.5603 0.6100 +vn 0.2051 -0.7654 0.6100 +vn 0.0000 -0.7924 -0.6100 +vn -0.8660 -0.5000 0.0000 +vn -0.6862 -0.3962 -0.6100 +vn 0.6862 -0.3962 -0.6100 +vn 0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 -0.6100 +vn 0.8660 0.5000 0.0000 +vn 0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 0.6100 +vn -0.6862 0.3962 0.6100 +vn 0.6862 0.3962 0.6100 +vn -0.6862 -0.3962 0.6100 +vn 0.0000 -0.7924 0.6100 +vn 0.6862 -0.3962 0.6100 +vn 0.5603 -0.5603 -0.6100 +vn -0.2588 -0.9659 0.0000 +vn -0.2051 -0.7654 -0.6100 +vn 0.7654 0.2051 -0.6100 +vn 0.9659 0.2588 0.0000 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 -0.6100 +vn -0.5603 0.5603 -0.6100 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 -0.6100 +vn -0.5603 0.5603 0.6100 +vn -0.7654 -0.2051 0.6100 +vn 0.2051 0.7654 0.6100 +vn -0.2051 -0.7654 0.6100 +vn 0.5603 -0.5603 0.6100 +vn 0.7654 0.2051 0.6100 +vn 0.7924 0.0000 -0.6100 +vn 0.5000 -0.8660 0.0000 +vn 0.3962 -0.6862 -0.6100 +vn 0.3962 0.6862 -0.6100 +vn 0.5000 0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 -0.6100 +vn -0.7924 0.0000 -0.6100 +vn -0.5000 0.8660 0.0000 +vn -0.3962 0.6862 -0.6100 +vn -0.7924 0.0000 0.6100 +vn -0.3962 -0.6862 0.6100 +vn -0.3962 0.6862 0.6100 +vn 0.3962 -0.6862 0.6100 +vn 0.7924 0.0000 0.6100 +vn 0.3962 0.6862 0.6100 +g Pipe_Cylinder.002_None +s off +f 129/1/1 132/2/1 133/3/1 134/4/1 135/5/1 136/6/1 +f 141/7/2 144/8/2 145/9/2 146/10/2 147/11/2 148/12/2 +f 153/13/1 156/14/1 157/15/1 158/16/1 159/17/1 160/18/1 +f 165/19/2 168/20/2 169/21/2 170/22/2 171/23/2 172/24/2 +f 177/25/1 180/26/1 181/27/1 182/28/1 183/29/1 184/30/1 +f 189/31/2 192/32/2 193/33/2 194/34/2 195/35/2 196/36/2 +f 201/37/1 204/38/1 205/39/1 206/40/1 207/41/1 208/42/1 +f 213/43/2 216/44/2 217/45/2 218/46/2 219/47/2 220/48/2 +f 225/49/1 228/50/1 229/51/1 230/52/1 231/53/1 232/54/1 +f 237/55/2 240/56/2 241/57/2 242/58/2 243/59/2 244/60/2 +f 249/61/1 252/62/1 253/63/1 254/64/1 255/65/1 256/66/1 +f 261/67/2 264/68/2 265/69/2 266/70/2 267/71/2 268/72/2 +f 273/73/1 276/74/1 277/75/1 278/76/1 279/77/1 280/78/1 +f 285/79/2 288/80/2 289/81/2 290/82/2 291/83/2 292/84/2 +f 297/85/1 300/86/1 301/87/1 302/88/1 303/89/1 304/90/1 +f 309/91/2 312/92/2 313/93/2 314/94/2 315/95/2 316/96/2 +f 353/97/2 354/98/2 384/99/2 383/100/2 381/101/2 382/102/2 380/103/2 379/104/2 378/105/2 377/106/2 375/107/2 376/108/2 374/109/2 373/110/2 372/111/2 371/112/2 370/113/2 369/114/2 368/115/2 367/116/2 366/117/2 365/118/2 364/119/2 363/120/2 362/121/2 361/122/2 360/123/2 359/124/2 358/125/2 357/126/2 356/127/2 355/128/2 +f 332/129/1 349/130/1 333/131/1 334/132/1 335/133/1 336/134/1 337/135/1 350/136/1 338/137/1 339/138/1 340/139/1 351/140/1 341/141/1 352/142/1 342/143/1 343/144/1 344/145/1 345/146/1 346/147/1 321/148/1 322/149/1 323/150/1 324/151/1 325/152/1 326/153/1 327/154/1 328/155/1 329/156/1 347/157/1 330/158/1 348/159/1 331/160/1 +f 389/161/1 399/162/1 404/163/1 408/164/1 412/165/1 417/166/1 416/167/1 421/168/1 425/169/1 429/170/1 433/171/1 438/172/1 447/173/1 448/174/1 446/175/1 440/176/1 435/177/1 431/178/1 427/179/1 423/180/1 419/181/1 414/182/1 410/183/1 406/184/1 401/185/1 397/186/1 390/187/1 391/188/1 388/189/1 385/190/1 386/191/1 387/192/1 +f 393/193/2 392/194/2 398/195/2 403/196/2 402/197/2 407/198/2 411/199/2 415/200/2 420/201/2 424/202/2 428/203/2 432/204/2 436/205/2 441/206/2 437/207/2 443/208/2 442/209/2 444/210/2 445/211/2 439/212/2 434/213/2 430/214/2 426/215/2 422/216/2 418/217/2 413/218/2 409/219/2 405/220/2 400/221/2 396/222/2 395/223/2 394/224/2 +f 449/225/1 452/226/1 453/227/1 454/228/1 455/229/1 456/230/1 +f 461/231/2 464/232/2 465/233/2 466/234/2 467/235/2 468/236/2 +f 473/237/1 476/238/1 477/239/1 478/240/1 479/241/1 480/242/1 +f 485/243/2 488/244/2 489/245/2 490/246/2 491/247/2 492/248/2 +f 497/249/1 500/250/1 501/251/1 502/252/1 503/253/1 504/254/1 +f 509/255/2 512/256/2 513/257/2 514/258/2 515/259/2 516/260/2 +f 521/261/1 524/262/1 525/263/1 526/264/1 527/265/1 528/266/1 +f 533/267/2 536/268/2 537/269/2 538/270/2 539/271/2 540/272/2 +f 545/273/1 548/274/1 549/275/1 550/276/1 551/277/1 552/278/1 +f 557/279/2 560/280/2 561/281/2 562/282/2 563/283/2 564/284/2 +f 569/285/1 572/286/1 573/287/1 574/288/1 575/289/1 576/290/1 +f 581/291/2 584/292/2 585/293/2 586/294/2 587/295/2 588/296/2 +f 593/297/1 596/298/1 597/299/1 598/300/1 599/301/1 600/302/1 +f 605/303/2 608/304/2 609/305/2 610/306/2 611/307/2 612/308/2 +f 617/309/1 620/310/1 621/311/1 622/312/1 623/313/1 624/314/1 +f 629/315/2 632/316/2 633/317/2 634/318/2 635/319/2 636/320/2 +f 1635/321/3 1656/322/3 1642/323/3 1593/324/3 +f 1754/325/4 1817/326/4 1859/327/4 1768/328/4 +f 1579/329/5 1712/330/5 1698/331/5 1537/332/5 +f 1803/333/6 1824/334/6 1810/335/6 1761/336/6 +f 1544/337/7 1747/338/7 1740/339/7 1551/340/7 +f 1915/341/8 1936/342/8 1922/343/8 1873/344/8 +f 1887/345/9 1964/346/9 1957/347/9 1894/348/9 +f 1894/348/10 1957/347/10 1950/349/10 1901/350/10 +f 1901/351/11 1950/352/11 1943/353/11 1908/354/11 +f 1908/354/12 1943/353/12 1936/342/12 1915/341/12 +f 1880/355/13 1971/356/13 1964/346/13 1887/345/13 +f 1530/357/2 1593/324/2 1642/323/2 1705/358/2 +f 1551/340/14 1740/339/14 1733/359/14 1558/360/14 +f 1558/360/15 1733/359/15 1726/361/15 1565/362/15 +f 1565/363/16 1726/364/16 1719/365/16 1572/366/16 +f 1572/366/17 1719/365/17 1712/330/17 1579/329/17 +f 1586/367/18 1649/368/18 1691/369/18 1600/370/18 +f 1866/371/19 1537/332/19 1698/331/19 1929/372/19 +f 1586/367/20 1761/336/20 1810/335/20 1649/368/20 +f 1607/373/21 1684/374/21 1677/375/21 1614/376/21 +f 1614/376/22 1677/375/22 1670/377/22 1621/378/22 +f 1621/379/23 1670/380/23 1663/381/23 1628/382/23 +f 1628/382/24 1663/381/24 1656/322/24 1635/321/24 +f 1697/383/25 1711/384/25 1718/385/25 1725/386/25 1732/387/25 1739/388/25 1746/389/25 1704/390/25 1641/391/25 1655/392/25 1662/393/25 1669/394/25 1676/395/25 1683/396/25 1690/397/25 1648/398/25 1809/399/25 1823/400/25 1830/401/25 1837/402/25 1844/403/25 1851/404/25 1858/405/25 1816/406/25 1921/407/25 1935/408/25 1942/409/25 1949/410/25 1956/411/25 1963/412/25 1970/413/25 1928/414/25 +f 1600/370/26 1691/369/26 1684/374/26 1607/373/26 +f 1754/325/1 1873/344/1 1922/343/1 1817/326/1 +f 1775/415/27 1852/416/27 1845/417/27 1782/418/27 +f 1782/418/28 1845/417/28 1838/419/28 1789/420/28 +f 1789/421/29 1838/422/29 1831/423/29 1796/424/29 +f 1796/424/30 1831/423/30 1824/334/30 1803/333/30 +f 1866/371/31 1929/372/31 1971/356/31 1880/355/31 +f 1768/328/32 1859/327/32 1852/416/32 1775/415/32 +f 1530/357/33 1705/358/33 1747/338/33 1544/337/33 +f 641/425/34 642/426/34 644/427/34 643/428/34 +f 643/428/35 644/427/35 646/429/35 645/430/35 +f 645/431/20 646/432/20 648/433/20 647/434/20 +f 647/434/36 648/433/36 650/435/36 649/436/36 +f 649/437/37 650/438/37 652/439/37 651/440/37 +f 651/440/1 652/439/1 654/441/1 653/442/1 +f 653/443/38 654/444/38 656/445/38 655/446/38 +f 655/446/39 656/445/39 658/447/39 657/448/39 +f 657/449/19 658/450/19 660/451/19 659/452/19 +f 659/452/40 660/451/40 662/453/40 661/454/40 +f 661/455/41 662/456/41 664/457/41 663/458/41 +f 663/458/2 664/457/2 642/459/2 641/460/2 +f 894/461/2 900/462/2 672/463/2 666/464/2 +f 690/465/42 696/466/42 708/467/42 702/468/42 +f 702/469/22 708/470/22 720/471/22 714/472/22 +f 714/472/43 720/471/43 732/473/43 726/474/43 +f 726/474/44 732/473/44 744/475/44 738/476/44 +f 738/476/45 744/475/45 756/477/45 750/478/45 +f 750/478/20 756/477/20 768/479/20 762/480/20 +f 762/480/46 768/479/46 780/481/46 774/482/46 +f 774/482/47 780/481/47 792/483/47 786/484/47 +f 786/484/48 792/483/48 804/485/48 798/486/48 +f 798/486/28 804/485/28 816/487/28 810/488/28 +f 810/489/49 816/490/49 828/491/49 822/492/49 +f 822/492/50 828/491/50 840/493/50 834/494/50 +f 834/494/51 840/493/51 852/495/51 846/496/51 +f 846/496/1 852/495/1 864/497/1 858/498/1 +f 858/498/52 864/497/52 876/499/52 870/500/52 +f 870/500/53 876/499/53 1356/501/53 1410/502/53 +f 954/503/54 912/504/54 948/505/54 966/506/54 +f 1140/507/55 1158/508/55 1146/509/55 1104/510/55 +f 954/503/19 1056/511/19 1002/512/19 912/504/19 +f 1296/513/56 1470/514/56 888/515/56 882/516/56 +f 1049/517/57 959/518/57 1193/519/57 +f 990/520/58 924/521/58 918/522/58 996/523/58 +f 1092/524/59 1014/525/59 1002/512/59 1056/511/59 +f 966/506/60 948/505/60 942/526/60 972/527/60 +f 972/527/61 942/526/61 936/528/61 978/529/61 +f 978/530/62 936/531/62 930/532/62 984/533/62 +f 984/533/63 930/532/63 924/521/63 990/520/63 +f 1248/534/64 1194/535/64 960/536/64 906/537/64 +f 1086/538/65 1020/539/65 1014/525/65 1092/524/65 +f 1098/540/66 1152/541/66 1188/542/66 1110/543/66 +f 1062/544/67 1044/545/67 1038/546/67 1068/547/67 +f 1068/547/68 1038/546/68 1032/548/68 1074/549/68 +f 1074/549/69 1032/548/69 1026/550/69 1080/551/69 +f 1080/552/70 1026/553/70 1020/539/70 1086/538/70 +f 1008/554/71 1050/555/71 1104/510/71 1146/509/71 +f 882/516/72 888/515/72 900/462/72 894/461/72 +f 1206/556/73 1284/557/73 1278/558/73 1212/559/73 +f 666/464/74 672/463/74 684/560/74 678/561/74 +f 1236/562/75 1254/563/75 1242/564/75 1200/565/75 +f 1212/559/76 1278/558/76 1272/566/76 1218/567/76 +f 1218/567/77 1272/566/77 1266/568/77 1224/569/77 +f 1224/569/78 1266/568/78 1260/570/78 1230/571/78 +f 1230/571/79 1260/570/79 1254/563/79 1236/562/79 +f 1524/572/80 1302/573/80 1290/574/80 1476/575/80 +f 1416/576/81 1350/577/81 1200/565/81 1242/564/81 +f 1152/541/82 1098/540/82 1476/575/82 1290/574/82 +f 1116/578/83 1182/579/83 1176/580/83 1122/581/83 +f 1122/581/84 1176/580/84 1170/582/84 1128/583/84 +f 1128/583/85 1170/582/85 1164/584/85 1134/585/85 +f 1134/585/86 1164/584/86 1158/508/86 1140/507/86 +f 1194/535/87 1248/534/87 1284/557/87 1206/556/87 +f 1110/543/88 1188/542/88 1182/579/88 1116/578/88 +f 1050/555/89 1008/554/89 1044/545/89 1062/544/89 +f 1404/586/90 1422/587/90 1410/502/90 1356/501/90 +f 1368/588/91 1458/589/91 1452/590/91 1374/591/91 +f 1374/591/92 1452/590/92 1446/592/92 1380/593/92 +f 1380/593/93 1446/592/93 1440/594/93 1386/595/93 +f 1386/595/94 1440/594/94 1434/596/94 1392/597/94 +f 1392/597/95 1434/596/95 1428/598/95 1398/599/95 +f 1398/599/96 1428/598/96 1422/587/96 1404/586/96 +f 1362/600/97 1464/601/97 1458/589/97 1368/588/97 +f 1518/602/98 1308/603/98 1302/573/98 1524/572/98 +f 1350/577/99 1416/576/99 1464/601/99 1362/600/99 +f 1482/604/100 1344/605/100 1338/606/100 1488/607/100 +f 1488/607/101 1338/606/101 1332/608/101 1494/609/101 +f 1494/609/102 1332/608/102 1326/610/102 1500/611/102 +f 1500/611/103 1326/610/103 1320/612/103 1506/613/103 +f 1506/613/104 1320/612/104 1314/614/104 1512/615/104 +f 1512/615/105 1314/614/105 1308/603/105 1518/602/105 +f 1470/514/106 1296/513/106 1344/605/106 1482/604/106 +f 996/523/107 918/522/107 906/537/107 960/536/107 +f 678/561/108 684/560/108 696/466/108 690/465/108 +f 666/464/109 678/561/109 682/616/109 670/617/109 +f 670/617/110 682/616/110 681/618/110 669/619/110 +f 669/620/111 681/621/111 680/622/111 668/623/111 +f 668/623/112 680/622/112 679/624/112 667/625/112 +f 667/625/113 679/624/113 677/626/113 665/627/113 +f 684/560/114 672/463/114 676/628/114 688/629/114 +f 688/629/115 676/628/115 675/630/115 687/631/115 +f 687/632/116 675/633/116 674/634/116 686/635/116 +f 686/635/117 674/634/117 673/636/117 685/637/117 +f 685/637/118 673/636/118 671/638/118 683/639/118 +f 678/561/119 690/465/119 694/640/119 682/616/119 +f 682/616/120 694/640/120 693/641/120 681/618/120 +f 681/621/121 693/642/121 692/643/121 680/622/121 +f 680/622/122 692/643/122 691/644/122 679/624/122 +f 679/624/123 691/644/123 689/645/123 677/626/123 +f 696/466/124 684/560/124 688/629/124 700/646/124 +f 700/646/125 688/629/125 687/631/125 699/647/125 +f 699/648/126 687/632/126 686/635/126 698/649/126 +f 698/649/127 686/635/127 685/637/127 697/650/127 +f 697/650/128 685/637/128 683/639/128 695/651/128 +f 690/465/129 702/468/129 706/652/129 694/640/129 +f 694/640/130 706/652/130 705/653/130 693/641/130 +f 693/642/131 705/654/131 704/655/131 692/643/131 +f 692/643/132 704/655/132 703/656/132 691/644/132 +f 691/644/133 703/656/133 701/657/133 689/645/133 +f 708/467/134 696/466/134 700/646/134 712/658/134 +f 712/658/135 700/646/135 699/647/135 711/659/135 +f 711/660/136 699/648/136 698/649/136 710/661/136 +f 710/661/137 698/649/137 697/650/137 709/662/137 +f 709/662/138 697/650/138 695/651/138 707/663/138 +f 702/469/139 714/472/139 718/664/139 706/665/139 +f 706/665/140 718/664/140 717/666/140 705/667/140 +f 705/654/141 717/668/141 716/669/141 704/655/141 +f 704/655/142 716/669/142 715/670/142 703/656/142 +f 703/656/143 715/670/143 713/671/143 701/657/143 +f 720/471/144 708/470/144 712/672/144 724/673/144 +f 724/673/145 712/672/145 711/674/145 723/675/145 +f 723/676/146 711/660/146 710/661/146 722/677/146 +f 722/677/147 710/661/147 709/662/147 721/678/147 +f 721/678/148 709/662/148 707/663/148 719/679/148 +f 714/472/149 726/474/149 730/680/149 718/664/149 +f 718/664/150 730/680/150 729/681/150 717/666/150 +f 717/668/151 729/682/151 728/683/151 716/669/151 +f 716/669/152 728/683/152 727/684/152 715/670/152 +f 715/670/153 727/684/153 725/685/153 713/671/153 +f 732/473/154 720/471/154 724/673/154 736/686/154 +f 736/686/155 724/673/155 723/675/155 735/687/155 +f 735/688/156 723/676/156 722/677/156 734/689/156 +f 734/689/157 722/677/157 721/678/157 733/690/157 +f 733/690/158 721/678/158 719/679/158 731/691/158 +f 726/474/159 738/476/159 742/692/159 730/680/159 +f 730/680/160 742/692/160 741/693/160 729/681/160 +f 729/682/161 741/694/161 740/695/161 728/683/161 +f 728/683/162 740/695/162 739/696/162 727/684/162 +f 727/684/163 739/696/163 737/697/163 725/685/163 +f 744/475/164 732/473/164 736/686/164 748/698/164 +f 748/698/165 736/686/165 735/687/165 747/699/165 +f 747/700/166 735/688/166 734/689/166 746/701/166 +f 746/701/167 734/689/167 733/690/167 745/702/167 +f 745/702/168 733/690/168 731/691/168 743/703/168 +f 738/476/169 750/478/169 754/704/169 742/692/169 +f 742/692/170 754/704/170 753/705/170 741/693/170 +f 741/694/171 753/706/171 752/707/171 740/695/171 +f 740/695/172 752/707/172 751/708/172 739/696/172 +f 739/696/173 751/708/173 749/709/173 737/697/173 +f 756/477/174 744/475/174 748/698/174 760/710/174 +f 760/710/175 748/698/175 747/699/175 759/711/175 +f 759/712/176 747/700/176 746/701/176 758/713/176 +f 758/713/177 746/701/177 745/702/177 757/714/177 +f 757/714/178 745/702/178 743/703/178 755/715/178 +f 750/478/179 762/480/179 766/716/179 754/704/179 +f 754/704/180 766/716/180 765/717/180 753/705/180 +f 753/705/181 765/717/181 764/718/181 752/719/181 +f 752/707/182 764/720/182 763/721/182 751/708/182 +f 751/708/183 763/721/183 761/722/183 749/709/183 +f 768/479/184 756/477/184 760/710/184 772/723/184 +f 772/723/185 760/710/185 759/711/185 771/724/185 +f 771/724/186 759/711/186 758/725/186 770/726/186 +f 770/727/187 758/713/187 757/714/187 769/728/187 +f 769/728/188 757/714/188 755/715/188 767/729/188 +f 762/480/189 774/482/189 778/730/189 766/716/189 +f 766/716/190 778/730/190 777/731/190 765/717/190 +f 765/732/191 777/733/191 776/734/191 764/720/191 +f 764/720/192 776/734/192 775/735/192 763/721/192 +f 763/721/193 775/735/193 773/736/193 761/722/193 +f 780/481/194 768/479/194 772/723/194 784/737/194 +f 784/737/195 772/723/195 771/724/195 783/738/195 +f 783/739/196 771/740/196 770/727/196 782/741/196 +f 782/741/197 770/727/197 769/728/197 781/742/197 +f 781/742/198 769/728/198 767/729/198 779/743/198 +f 774/482/199 786/484/199 790/744/199 778/730/199 +f 778/730/200 790/744/200 789/745/200 777/731/200 +f 777/733/201 789/746/201 788/747/201 776/734/201 +f 776/734/202 788/747/202 787/748/202 775/735/202 +f 775/735/203 787/748/203 785/749/203 773/736/203 +f 792/483/204 780/481/204 784/737/204 796/750/204 +f 796/750/205 784/737/205 783/738/205 795/751/205 +f 795/752/206 783/739/206 782/741/206 794/753/206 +f 794/753/207 782/741/207 781/742/207 793/754/207 +f 793/754/208 781/742/208 779/743/208 791/755/208 +f 786/484/209 798/486/209 802/756/209 790/744/209 +f 790/744/210 802/756/210 801/757/210 789/745/210 +f 789/746/211 801/758/211 800/759/211 788/747/211 +f 788/747/212 800/759/212 799/760/212 787/748/212 +f 787/748/213 799/760/213 797/761/213 785/749/213 +f 804/485/214 792/483/214 796/750/214 808/762/214 +f 808/762/215 796/750/215 795/751/215 807/763/215 +f 807/764/216 795/752/216 794/753/216 806/765/216 +f 806/765/217 794/753/217 793/754/217 805/766/217 +f 805/766/218 793/754/218 791/755/218 803/767/218 +f 798/486/219 810/488/219 814/768/219 802/756/219 +f 802/756/220 814/768/220 813/769/220 801/757/220 +f 801/758/221 813/770/221 812/771/221 800/759/221 +f 800/759/222 812/771/222 811/772/222 799/760/222 +f 799/760/223 811/772/223 809/773/223 797/761/223 +f 816/487/224 804/485/224 808/762/224 820/774/224 +f 820/774/225 808/762/225 807/763/225 819/775/225 +f 819/776/226 807/764/226 806/765/226 818/777/226 +f 818/777/227 806/765/227 805/766/227 817/778/227 +f 817/778/228 805/766/228 803/767/228 815/779/228 +f 810/489/229 822/492/229 826/780/229 814/781/229 +f 814/781/230 826/780/230 825/782/230 813/783/230 +f 813/770/231 825/784/231 824/785/231 812/771/231 +f 812/771/232 824/785/232 823/786/232 811/772/232 +f 811/772/233 823/786/233 821/787/233 809/773/233 +f 828/491/234 816/490/234 820/788/234 832/789/234 +f 832/789/235 820/788/235 819/790/235 831/791/235 +f 831/792/236 819/776/236 818/777/236 830/793/236 +f 830/793/237 818/777/237 817/778/237 829/794/237 +f 829/794/238 817/778/238 815/779/238 827/795/238 +f 822/492/239 834/494/239 838/796/239 826/780/239 +f 826/780/240 838/796/240 837/797/240 825/782/240 +f 825/784/241 837/798/241 836/799/241 824/785/241 +f 824/785/242 836/799/242 835/800/242 823/786/242 +f 823/786/243 835/800/243 833/801/243 821/787/243 +f 840/493/244 828/491/244 832/789/244 844/802/244 +f 844/802/245 832/789/245 831/791/245 843/803/245 +f 843/804/246 831/792/246 830/793/246 842/805/246 +f 842/805/247 830/793/247 829/794/247 841/806/247 +f 841/806/248 829/794/248 827/795/248 839/807/248 +f 834/494/249 846/496/249 850/808/249 838/796/249 +f 838/796/250 850/808/250 849/809/250 837/797/250 +f 837/798/251 849/810/251 848/811/251 836/799/251 +f 836/799/252 848/811/252 847/812/252 835/800/252 +f 835/800/253 847/812/253 845/813/253 833/801/253 +f 852/495/254 840/493/254 844/802/254 856/814/254 +f 856/814/255 844/802/255 843/803/255 855/815/255 +f 855/816/256 843/804/256 842/805/256 854/817/256 +f 854/817/257 842/805/257 841/806/257 853/818/257 +f 853/818/258 841/806/258 839/807/258 851/819/258 +f 846/496/259 858/498/259 862/820/259 850/808/259 +f 850/808/260 862/820/260 861/821/260 849/809/260 +f 849/810/261 861/822/261 860/823/261 848/811/261 +f 848/811/262 860/823/262 859/824/262 847/812/262 +f 847/812/263 859/824/263 857/825/263 845/813/263 +f 864/497/264 852/495/264 856/814/264 868/826/264 +f 868/826/265 856/814/265 855/815/265 867/827/265 +f 867/828/266 855/816/266 854/817/266 866/829/266 +f 866/829/267 854/817/267 853/818/267 865/830/267 +f 865/830/268 853/818/268 851/819/268 863/831/268 +f 858/498/269 870/500/269 874/832/269 862/820/269 +f 862/820/270 874/832/270 873/833/270 861/821/270 +f 861/822/271 873/834/271 872/835/271 860/823/271 +f 860/823/272 872/835/272 871/836/272 859/824/272 +f 859/824/273 871/836/273 869/837/273 857/825/273 +f 876/499/274 864/497/274 868/826/274 880/838/274 +f 880/838/275 868/826/275 867/827/275 879/839/275 +f 879/840/276 867/828/276 866/829/276 878/841/276 +f 878/841/277 866/829/277 865/830/277 877/842/277 +f 877/842/278 865/830/278 863/831/278 875/843/278 +f 882/516/279 894/461/279 898/844/279 886/845/279 +f 886/845/280 898/844/280 897/846/280 885/847/280 +f 885/848/281 897/849/281 896/850/281 884/851/281 +f 884/851/282 896/850/282 895/852/282 883/853/282 +f 883/853/283 895/852/283 893/854/283 881/855/283 +f 900/462/284 888/515/284 892/856/284 904/857/284 +f 904/857/285 892/856/285 891/858/285 903/859/285 +f 903/860/286 891/861/286 890/862/286 902/863/286 +f 902/863/287 890/862/287 889/864/287 901/865/287 +f 901/865/288 889/864/288 887/866/288 899/867/288 +f 894/461/289 666/464/289 670/617/289 898/844/289 +f 898/844/290 670/617/290 669/619/290 897/846/290 +f 897/849/291 669/620/291 668/623/291 896/850/291 +f 896/850/292 668/623/292 667/625/292 895/852/292 +f 895/852/293 667/625/293 665/627/293 893/854/293 +f 672/463/294 900/462/294 904/857/294 676/628/294 +f 676/628/295 904/857/295 903/859/295 675/630/295 +f 675/633/296 903/860/296 902/863/296 674/634/296 +f 674/634/297 902/863/297 901/865/297 673/636/297 +f 673/636/298 901/865/298 899/867/298 671/638/298 +f 965/868/299 953/869/299 955/870/299 967/871/299 +f 967/871/300 955/870/300 956/872/300 968/873/300 +f 968/873/301 956/872/301 957/874/301 969/875/301 +f 969/876/302 957/877/302 958/878/302 970/879/302 +f 970/879/303 958/878/303 954/503/303 966/506/303 +f 911/880/304 947/881/304 949/882/304 913/883/304 +f 913/883/305 949/882/305 950/884/305 914/885/305 +f 914/885/306 950/884/306 951/886/306 915/887/306 +f 915/888/307 951/889/307 952/890/307 916/891/307 +f 916/891/308 952/890/308 948/505/308 912/504/308 +f 971/892/309 965/868/309 967/871/309 973/893/309 +f 973/893/310 967/871/310 968/873/310 974/894/310 +f 974/894/311 968/873/311 969/875/311 975/895/311 +f 975/896/312 969/876/312 970/879/312 976/897/312 +f 976/897/313 970/879/313 966/506/313 972/527/313 +f 947/881/314 941/898/314 943/899/314 949/882/314 +f 949/882/315 943/899/315 944/900/315 950/884/315 +f 950/884/316 944/900/316 945/901/316 951/886/316 +f 951/889/317 945/902/317 946/903/317 952/890/317 +f 952/890/318 946/903/318 942/526/318 948/505/318 +f 977/904/319 971/892/319 973/893/319 979/905/319 +f 979/905/320 973/893/320 974/894/320 980/906/320 +f 980/906/321 974/894/321 975/895/321 981/907/321 +f 981/908/322 975/896/322 976/897/322 982/909/322 +f 982/909/323 976/897/323 972/527/323 978/529/323 +f 941/898/324 935/910/324 937/911/324 943/899/324 +f 943/899/325 937/911/325 938/912/325 944/900/325 +f 944/900/326 938/912/326 939/913/326 945/901/326 +f 945/902/327 939/914/327 940/915/327 946/903/327 +f 946/903/328 940/915/328 936/528/328 942/526/328 +f 983/916/329 977/904/329 979/905/329 985/917/329 +f 985/917/330 979/905/330 980/906/330 986/918/330 +f 986/918/331 980/906/331 981/907/331 987/919/331 +f 987/920/332 981/921/332 982/922/332 988/923/332 +f 988/923/333 982/922/333 978/530/333 984/533/333 +f 935/910/334 929/924/334 931/925/334 937/911/334 +f 937/911/335 931/925/335 932/926/335 938/912/335 +f 938/912/336 932/926/336 933/927/336 939/913/336 +f 939/928/337 933/929/337 934/930/337 940/931/337 +f 940/931/338 934/930/338 930/532/338 936/531/338 +f 989/932/339 983/916/339 985/917/339 991/933/339 +f 991/933/340 985/917/340 986/918/340 992/934/340 +f 992/934/341 986/918/341 987/919/341 993/935/341 +f 993/936/342 987/920/342 988/923/342 994/937/342 +f 994/937/343 988/923/343 984/533/343 990/520/343 +f 929/924/344 923/938/344 925/939/344 931/925/344 +f 931/925/345 925/939/345 926/940/345 932/926/345 +f 932/926/346 926/940/346 927/941/346 933/927/346 +f 933/929/347 927/942/347 928/943/347 934/930/347 +f 934/930/348 928/943/348 924/521/348 930/532/348 +f 995/944/349 989/932/349 991/933/349 997/945/349 +f 997/945/350 991/933/350 992/934/350 998/946/350 +f 998/946/351 992/934/351 993/935/351 999/947/351 +f 999/948/352 993/936/352 994/937/352 1000/949/352 +f 1000/949/353 994/937/353 990/520/353 996/523/353 +f 923/938/354 917/950/354 919/951/354 925/939/354 +f 925/939/355 919/951/355 920/952/355 926/940/355 +f 926/940/356 920/952/356 921/953/356 927/941/356 +f 927/942/357 921/954/357 922/955/357 928/943/357 +f 928/943/358 922/955/358 918/522/358 924/521/358 +f 959/518/359 995/944/359 997/945/359 961/956/359 +f 961/956/360 997/945/360 998/946/360 962/957/360 +f 962/957/361 998/946/361 999/947/361 963/958/361 +f 963/959/362 999/948/362 1000/949/362 964/960/362 +f 964/960/363 1000/949/363 996/523/363 960/536/363 +f 917/950/364 905/961/364 907/962/364 919/951/364 +f 919/951/365 907/962/365 908/963/365 920/952/365 +f 920/952/366 908/963/366 909/964/366 921/953/366 +f 921/954/367 909/965/367 910/966/367 922/955/367 +f 922/955/368 910/966/368 906/537/368 918/522/368 +f 1061/967/369 1049/517/369 1051/968/369 1063/969/369 +f 1063/969/370 1051/968/370 1052/970/370 1064/971/370 +f 1064/971/371 1052/970/371 1053/972/371 1065/973/371 +f 1065/974/372 1053/975/372 1054/976/372 1066/977/372 +f 1066/977/373 1054/976/373 1050/555/373 1062/544/373 +f 1007/978/374 1043/979/374 1045/980/374 1009/981/374 +f 1009/981/375 1045/980/375 1046/982/375 1010/983/375 +f 1010/983/376 1046/982/376 1047/984/376 1011/985/376 +f 1011/986/377 1047/987/377 1048/988/377 1012/989/377 +f 1012/989/378 1048/988/378 1044/545/378 1008/554/378 +f 1067/990/379 1061/967/379 1063/969/379 1069/991/379 +f 1069/991/380 1063/969/380 1064/971/380 1070/992/380 +f 1070/992/381 1064/971/381 1065/973/381 1071/993/381 +f 1071/994/382 1065/974/382 1066/977/382 1072/995/382 +f 1072/995/383 1066/977/383 1062/544/383 1068/547/383 +f 1043/979/384 1037/996/384 1039/997/384 1045/980/384 +f 1045/980/385 1039/997/385 1040/998/385 1046/982/385 +f 1046/982/386 1040/998/386 1041/999/386 1047/984/386 +f 1047/987/387 1041/1000/387 1042/1001/387 1048/988/387 +f 1048/988/388 1042/1001/388 1038/546/388 1044/545/388 +f 1073/1002/389 1067/990/389 1069/991/389 1075/1003/389 +f 1075/1003/390 1069/991/390 1070/992/390 1076/1004/390 +f 1076/1004/391 1070/992/391 1071/993/391 1077/1005/391 +f 1077/1006/392 1071/994/392 1072/995/392 1078/1007/392 +f 1078/1007/393 1072/995/393 1068/547/393 1074/549/393 +f 1037/996/394 1031/1008/394 1033/1009/394 1039/997/394 +f 1039/997/395 1033/1009/395 1034/1010/395 1040/998/395 +f 1040/998/396 1034/1010/396 1035/1011/396 1041/999/396 +f 1041/1000/397 1035/1012/397 1036/1013/397 1042/1001/397 +f 1042/1001/398 1036/1013/398 1032/548/398 1038/546/398 +f 1079/1014/399 1073/1002/399 1075/1003/399 1081/1015/399 +f 1081/1015/400 1075/1003/400 1076/1004/400 1082/1016/400 +f 1082/1016/401 1076/1004/401 1077/1005/401 1083/1017/401 +f 1083/1018/402 1077/1006/402 1078/1007/402 1084/1019/402 +f 1084/1019/403 1078/1007/403 1074/549/403 1080/551/403 +f 1031/1008/404 1025/1020/404 1027/1021/404 1033/1009/404 +f 1033/1009/405 1027/1021/405 1028/1022/405 1034/1010/405 +f 1034/1010/406 1028/1022/406 1029/1023/406 1035/1011/406 +f 1035/1012/407 1029/1024/407 1030/1025/407 1036/1013/407 +f 1036/1013/408 1030/1025/408 1026/550/408 1032/548/408 +f 1085/1026/409 1079/1014/409 1081/1015/409 1087/1027/409 +f 1087/1027/410 1081/1015/410 1082/1016/410 1088/1028/410 +f 1088/1028/411 1082/1016/411 1083/1017/411 1089/1029/411 +f 1089/1030/412 1083/1031/412 1084/1032/412 1090/1033/412 +f 1090/1033/413 1084/1032/413 1080/552/413 1086/538/413 +f 1025/1020/414 1019/1034/414 1021/1035/414 1027/1021/414 +f 1027/1021/415 1021/1035/415 1022/1036/415 1028/1022/415 +f 1028/1022/416 1022/1036/416 1023/1037/416 1029/1023/416 +f 1029/1038/417 1023/1039/417 1024/1040/417 1030/1041/417 +f 1030/1041/418 1024/1040/418 1020/539/418 1026/553/418 +f 1091/1042/419 1085/1026/419 1087/1027/419 1093/1043/419 +f 1093/1043/420 1087/1027/420 1088/1028/420 1094/1044/420 +f 1094/1044/421 1088/1028/421 1089/1029/421 1095/1045/421 +f 1095/1046/422 1089/1030/422 1090/1033/422 1096/1047/422 +f 1096/1047/423 1090/1033/423 1086/538/423 1092/524/423 +f 1019/1034/424 1013/1048/424 1015/1049/424 1021/1035/424 +f 1021/1035/425 1015/1049/425 1016/1050/425 1022/1036/425 +f 1022/1036/426 1016/1050/426 1017/1051/426 1023/1037/426 +f 1023/1039/427 1017/1052/427 1018/1053/427 1024/1040/427 +f 1024/1040/428 1018/1053/428 1014/525/428 1020/539/428 +f 1055/1054/429 1091/1042/429 1093/1043/429 1057/1055/429 +f 1057/1055/430 1093/1043/430 1094/1044/430 1058/1056/430 +f 1058/1056/431 1094/1044/431 1095/1045/431 1059/1057/431 +f 1059/1058/432 1095/1046/432 1096/1047/432 1060/1059/432 +f 1060/1059/433 1096/1047/433 1092/524/433 1056/511/433 +f 1013/1048/434 1001/1060/434 1003/1061/434 1015/1049/434 +f 1015/1049/435 1003/1061/435 1004/1062/435 1016/1050/435 +f 1016/1050/436 1004/1062/436 1005/1063/436 1017/1051/436 +f 1017/1052/437 1005/1064/437 1006/1065/437 1018/1053/437 +f 1018/1053/438 1006/1065/438 1002/512/438 1014/525/438 +f 953/869/439 1055/1054/439 1057/1055/439 955/870/439 +f 955/870/440 1057/1055/440 1058/1056/440 956/872/440 +f 956/872/441 1058/1056/441 1059/1057/441 957/874/441 +f 957/877/442 1059/1058/442 1060/1059/442 958/878/442 +f 958/878/443 1060/1059/443 1056/511/443 954/503/443 +f 1001/1060/444 911/880/444 913/883/444 1003/1061/444 +f 1003/1061/445 913/883/445 914/885/445 1004/1062/445 +f 1004/1062/446 914/885/446 915/887/446 1005/1063/446 +f 1005/1064/447 915/888/447 916/891/447 1006/1065/447 +f 1006/1065/448 916/891/448 912/504/448 1002/512/448 +f 1205/1066/449 1193/519/449 1195/1067/449 1207/1068/449 +f 1207/1068/450 1195/1067/450 1196/1069/450 1208/1070/450 +f 1208/1070/451 1196/1069/451 1197/1071/451 1209/1072/451 +f 1209/1073/452 1197/1074/452 1198/1075/452 1210/1076/452 +f 1210/1076/453 1198/1075/453 1194/535/453 1206/556/453 +f 1247/1077/454 1283/1078/454 1285/1079/454 1249/1080/454 +f 1249/1080/455 1285/1079/455 1286/1081/455 1250/1082/455 +f 1250/1082/456 1286/1081/456 1287/1083/456 1251/1084/456 +f 1251/1085/457 1287/1086/457 1288/1087/457 1252/1088/457 +f 1252/1088/458 1288/1087/458 1284/557/458 1248/534/458 +f 1211/1089/459 1205/1066/459 1207/1068/459 1213/1090/459 +f 1213/1090/460 1207/1068/460 1208/1070/460 1214/1091/460 +f 1214/1091/461 1208/1070/461 1209/1072/461 1215/1092/461 +f 1215/1093/462 1209/1073/462 1210/1076/462 1216/1094/462 +f 1216/1094/463 1210/1076/463 1206/556/463 1212/559/463 +f 1283/1078/464 1277/1095/464 1279/1096/464 1285/1079/464 +f 1285/1079/465 1279/1096/465 1280/1097/465 1286/1081/465 +f 1286/1081/466 1280/1097/466 1281/1098/466 1287/1083/466 +f 1287/1086/467 1281/1099/467 1282/1100/467 1288/1087/467 +f 1288/1087/468 1282/1100/468 1278/558/468 1284/557/468 +f 1217/1101/469 1211/1089/469 1213/1090/469 1219/1102/469 +f 1219/1102/470 1213/1090/470 1214/1091/470 1220/1103/470 +f 1220/1103/471 1214/1091/471 1215/1092/471 1221/1104/471 +f 1221/1105/472 1215/1093/472 1216/1094/472 1222/1106/472 +f 1222/1106/473 1216/1094/473 1212/559/473 1218/567/473 +f 1277/1095/474 1271/1107/474 1273/1108/474 1279/1096/474 +f 1279/1096/475 1273/1108/475 1274/1109/475 1280/1097/475 +f 1280/1097/476 1274/1109/476 1275/1110/476 1281/1098/476 +f 1281/1099/477 1275/1111/477 1276/1112/477 1282/1100/477 +f 1282/1100/478 1276/1112/478 1272/566/478 1278/558/478 +f 1223/1113/479 1217/1101/479 1219/1102/479 1225/1114/479 +f 1225/1114/480 1219/1102/480 1220/1103/480 1226/1115/480 +f 1226/1115/481 1220/1103/481 1221/1104/481 1227/1116/481 +f 1227/1117/482 1221/1105/482 1222/1106/482 1228/1118/482 +f 1228/1118/483 1222/1106/483 1218/567/483 1224/569/483 +f 1271/1107/484 1265/1119/484 1267/1120/484 1273/1108/484 +f 1273/1108/485 1267/1120/485 1268/1121/485 1274/1109/485 +f 1274/1109/486 1268/1121/486 1269/1122/486 1275/1110/486 +f 1275/1111/487 1269/1123/487 1270/1124/487 1276/1112/487 +f 1276/1112/488 1270/1124/488 1266/568/488 1272/566/488 +f 1229/1125/489 1223/1113/489 1225/1114/489 1231/1126/489 +f 1231/1126/490 1225/1114/490 1226/1115/490 1232/1127/490 +f 1232/1127/491 1226/1115/491 1227/1116/491 1233/1128/491 +f 1233/1129/492 1227/1117/492 1228/1118/492 1234/1130/492 +f 1234/1130/493 1228/1118/493 1224/569/493 1230/571/493 +f 1265/1119/494 1259/1131/494 1261/1132/494 1267/1120/494 +f 1267/1120/495 1261/1132/495 1262/1133/495 1268/1121/495 +f 1268/1121/496 1262/1133/496 1263/1134/496 1269/1122/496 +f 1269/1123/497 1263/1135/497 1264/1136/497 1270/1124/497 +f 1270/1124/498 1264/1136/498 1260/570/498 1266/568/498 +f 1235/1137/499 1229/1125/499 1231/1126/499 1237/1138/499 +f 1237/1138/500 1231/1126/500 1232/1127/500 1238/1139/500 +f 1238/1139/501 1232/1127/501 1233/1128/501 1239/1140/501 +f 1239/1141/502 1233/1129/502 1234/1130/502 1240/1142/502 +f 1240/1142/503 1234/1130/503 1230/571/503 1236/562/503 +f 1259/1131/504 1253/1143/504 1255/1144/504 1261/1132/504 +f 1261/1132/505 1255/1144/505 1256/1145/505 1262/1133/505 +f 1262/1133/506 1256/1145/506 1257/1146/506 1263/1134/506 +f 1263/1135/507 1257/1147/507 1258/1148/507 1264/1136/507 +f 1264/1136/508 1258/1148/508 1254/563/508 1260/570/508 +f 1199/1149/509 1235/1137/509 1237/1138/509 1201/1150/509 +f 1201/1150/510 1237/1138/510 1238/1139/510 1202/1151/510 +f 1202/1151/511 1238/1139/511 1239/1140/511 1203/1152/511 +f 1203/1153/512 1239/1141/512 1240/1142/512 1204/1154/512 +f 1204/1154/513 1240/1142/513 1236/562/513 1200/565/513 +f 1253/1143/514 1241/1155/514 1243/1156/514 1255/1144/514 +f 1255/1144/515 1243/1156/515 1244/1157/515 1256/1145/515 +f 1256/1145/516 1244/1157/516 1245/1158/516 1257/1146/516 +f 1257/1147/517 1245/1159/517 1246/1160/517 1258/1148/517 +f 1258/1148/518 1246/1160/518 1242/564/518 1254/563/518 +f 1109/1161/519 1097/1162/519 1099/1163/519 1111/1164/519 +f 1111/1164/520 1099/1163/520 1100/1165/520 1112/1166/520 +f 1112/1166/521 1100/1165/521 1101/1167/521 1113/1168/521 +f 1113/1169/522 1101/1170/522 1102/1171/522 1114/1172/522 +f 1114/1172/523 1102/1171/523 1098/540/523 1110/543/523 +f 1151/1173/524 1187/1174/524 1189/1175/524 1153/1176/524 +f 1153/1176/525 1189/1175/525 1190/1177/525 1154/1178/525 +f 1154/1178/526 1190/1177/526 1191/1179/526 1155/1180/526 +f 1155/1181/527 1191/1182/527 1192/1183/527 1156/1184/527 +f 1156/1184/528 1192/1183/528 1188/542/528 1152/541/528 +f 1115/1185/529 1109/1161/529 1111/1164/529 1117/1186/529 +f 1117/1186/530 1111/1164/530 1112/1166/530 1118/1187/530 +f 1118/1187/531 1112/1166/531 1113/1168/531 1119/1188/531 +f 1119/1189/532 1113/1169/532 1114/1172/532 1120/1190/532 +f 1120/1190/533 1114/1172/533 1110/543/533 1116/578/533 +f 1187/1174/534 1181/1191/534 1183/1192/534 1189/1175/534 +f 1189/1175/535 1183/1192/535 1184/1193/535 1190/1177/535 +f 1190/1177/536 1184/1193/536 1185/1194/536 1191/1179/536 +f 1191/1182/537 1185/1195/537 1186/1196/537 1192/1183/537 +f 1192/1183/538 1186/1196/538 1182/579/538 1188/542/538 +f 1121/1197/539 1115/1185/539 1117/1186/539 1123/1198/539 +f 1123/1198/540 1117/1186/540 1118/1187/540 1124/1199/540 +f 1124/1199/541 1118/1187/541 1119/1188/541 1125/1200/541 +f 1125/1201/542 1119/1189/542 1120/1190/542 1126/1202/542 +f 1126/1202/543 1120/1190/543 1116/578/543 1122/581/543 +f 1181/1191/544 1175/1203/544 1177/1204/544 1183/1192/544 +f 1183/1192/545 1177/1204/545 1178/1205/545 1184/1193/545 +f 1184/1193/546 1178/1205/546 1179/1206/546 1185/1194/546 +f 1185/1195/547 1179/1207/547 1180/1208/547 1186/1196/547 +f 1186/1196/548 1180/1208/548 1176/580/548 1182/579/548 +f 1127/1209/549 1121/1197/549 1123/1198/549 1129/1210/549 +f 1129/1210/550 1123/1198/550 1124/1199/550 1130/1211/550 +f 1130/1211/551 1124/1199/551 1125/1200/551 1131/1212/551 +f 1131/1213/552 1125/1201/552 1126/1202/552 1132/1214/552 +f 1132/1214/553 1126/1202/553 1122/581/553 1128/583/553 +f 1175/1203/554 1169/1215/554 1171/1216/554 1177/1204/554 +f 1177/1204/555 1171/1216/555 1172/1217/555 1178/1205/555 +f 1178/1205/556 1172/1217/556 1173/1218/556 1179/1206/556 +f 1179/1207/557 1173/1219/557 1174/1220/557 1180/1208/557 +f 1180/1208/558 1174/1220/558 1170/582/558 1176/580/558 +f 1133/1221/559 1127/1209/559 1129/1210/559 1135/1222/559 +f 1135/1222/560 1129/1210/560 1130/1211/560 1136/1223/560 +f 1136/1223/561 1130/1211/561 1131/1212/561 1137/1224/561 +f 1137/1225/562 1131/1213/562 1132/1214/562 1138/1226/562 +f 1138/1226/563 1132/1214/563 1128/583/563 1134/585/563 +f 1169/1215/564 1163/1227/564 1165/1228/564 1171/1216/564 +f 1171/1216/565 1165/1228/565 1166/1229/565 1172/1217/565 +f 1172/1217/566 1166/1229/566 1167/1230/566 1173/1218/566 +f 1173/1219/567 1167/1231/567 1168/1232/567 1174/1220/567 +f 1174/1220/568 1168/1232/568 1164/584/568 1170/582/568 +f 1139/1233/569 1133/1221/569 1135/1222/569 1141/1234/569 +f 1141/1234/570 1135/1222/570 1136/1223/570 1142/1235/570 +f 1142/1235/571 1136/1223/571 1137/1224/571 1143/1236/571 +f 1143/1237/572 1137/1225/572 1138/1226/572 1144/1238/572 +f 1144/1238/573 1138/1226/573 1134/585/573 1140/507/573 +f 1163/1227/574 1157/1239/574 1159/1240/574 1165/1228/574 +f 1165/1228/575 1159/1240/575 1160/1241/575 1166/1229/575 +f 1166/1229/576 1160/1241/576 1161/1242/576 1167/1230/576 +f 1167/1231/577 1161/1243/577 1162/1244/577 1168/1232/577 +f 1168/1232/578 1162/1244/578 1158/508/578 1164/584/578 +f 1103/1245/579 1139/1233/579 1141/1234/579 1105/1246/579 +f 1105/1246/580 1141/1234/580 1142/1235/580 1106/1247/580 +f 1106/1247/581 1142/1235/581 1143/1236/581 1107/1248/581 +f 1107/1249/582 1143/1237/582 1144/1238/582 1108/1250/582 +f 1108/1250/583 1144/1238/583 1140/507/583 1104/510/583 +f 1157/1239/584 1145/1251/584 1147/1252/584 1159/1240/584 +f 1159/1240/585 1147/1252/585 1148/1253/585 1160/1241/585 +f 1160/1241/586 1148/1253/586 1149/1254/586 1161/1242/586 +f 1161/1243/587 1149/1255/587 1150/1256/587 1162/1244/587 +f 1162/1244/588 1150/1256/588 1146/509/588 1158/508/588 +f 1145/1251/589 1007/978/589 1009/981/589 1147/1252/589 +f 1147/1252/590 1009/981/590 1010/983/590 1148/1253/590 +f 1148/1253/591 1010/983/591 1011/985/591 1149/1254/591 +f 1149/1255/592 1011/986/592 1012/989/592 1150/1256/592 +f 1150/1256/593 1012/989/593 1008/554/593 1146/509/593 +f 1049/517/594 1103/1245/594 1105/1246/594 1051/968/594 +f 1051/968/595 1105/1246/595 1106/1247/595 1052/970/595 +f 1052/970/596 1106/1247/596 1107/1248/596 1053/972/596 +f 1053/975/597 1107/1249/597 1108/1250/597 1054/976/597 +f 1054/976/598 1108/1250/598 1104/510/598 1050/555/598 +f 905/961/599 1247/1077/599 1249/1080/599 907/962/599 +f 907/962/600 1249/1080/600 1250/1082/600 908/963/600 +f 908/963/601 1250/1082/601 1251/1084/601 909/964/601 +f 909/965/602 1251/1085/602 1252/1088/602 910/966/602 +f 910/966/603 1252/1088/603 1248/534/603 906/537/603 +f 1193/519/604 959/518/604 961/956/604 1195/1067/604 +f 1195/1067/605 961/956/605 962/957/605 1196/1069/605 +f 1196/1069/606 962/957/606 963/958/606 1197/1071/606 +f 1197/1074/607 963/959/607 964/960/607 1198/1075/607 +f 1198/1075/608 964/960/608 960/536/608 1194/535/608 +f 1361/1257/609 1349/1258/609 1351/1259/609 1363/1260/609 +f 1363/1260/610 1351/1259/610 1352/1261/610 1364/1262/610 +f 1364/1262/611 1352/1261/611 1353/1263/611 1365/1264/611 +f 1365/1265/612 1353/1266/612 1354/1267/612 1366/1268/612 +f 1366/1268/613 1354/1267/613 1350/577/613 1362/600/613 +f 1415/1269/614 1463/1270/614 1465/1271/614 1417/1272/614 +f 1417/1272/615 1465/1271/615 1466/1273/615 1418/1274/615 +f 1418/1274/616 1466/1273/616 1467/1275/616 1419/1276/616 +f 1419/1277/617 1467/1278/617 1468/1279/617 1420/1280/617 +f 1420/1280/618 1468/1279/618 1464/601/618 1416/576/618 +f 1367/1281/619 1361/1257/619 1363/1260/619 1369/1282/619 +f 1369/1282/620 1363/1260/620 1364/1262/620 1370/1283/620 +f 1370/1283/621 1364/1262/621 1365/1264/621 1371/1284/621 +f 1371/1285/622 1365/1265/622 1366/1268/622 1372/1286/622 +f 1372/1286/623 1366/1268/623 1362/600/623 1368/588/623 +f 1463/1270/624 1457/1287/624 1459/1288/624 1465/1271/624 +f 1465/1271/625 1459/1288/625 1460/1289/625 1466/1273/625 +f 1466/1273/626 1460/1289/626 1461/1290/626 1467/1275/626 +f 1467/1278/627 1461/1291/627 1462/1292/627 1468/1279/627 +f 1468/1279/628 1462/1292/628 1458/589/628 1464/601/628 +f 1373/1293/629 1367/1281/629 1369/1282/629 1375/1294/629 +f 1375/1294/630 1369/1282/630 1370/1283/630 1376/1295/630 +f 1376/1295/631 1370/1283/631 1371/1284/631 1377/1296/631 +f 1377/1297/632 1371/1285/632 1372/1286/632 1378/1298/632 +f 1378/1298/633 1372/1286/633 1368/588/633 1374/591/633 +f 1457/1287/634 1451/1299/634 1453/1300/634 1459/1288/634 +f 1459/1288/635 1453/1300/635 1454/1301/635 1460/1289/635 +f 1460/1289/636 1454/1301/636 1455/1302/636 1461/1290/636 +f 1461/1291/637 1455/1303/637 1456/1304/637 1462/1292/637 +f 1462/1292/638 1456/1304/638 1452/590/638 1458/589/638 +f 1379/1305/639 1373/1293/639 1375/1294/639 1381/1306/639 +f 1381/1306/640 1375/1294/640 1376/1295/640 1382/1307/640 +f 1382/1307/641 1376/1295/641 1377/1296/641 1383/1308/641 +f 1383/1309/642 1377/1297/642 1378/1298/642 1384/1310/642 +f 1384/1310/643 1378/1298/643 1374/591/643 1380/593/643 +f 1451/1299/644 1445/1311/644 1447/1312/644 1453/1300/644 +f 1453/1300/645 1447/1312/645 1448/1313/645 1454/1301/645 +f 1454/1301/646 1448/1313/646 1449/1314/646 1455/1302/646 +f 1455/1303/647 1449/1315/647 1450/1316/647 1456/1304/647 +f 1456/1304/648 1450/1316/648 1446/592/648 1452/590/648 +f 1385/1317/649 1379/1305/649 1381/1306/649 1387/1318/649 +f 1387/1318/650 1381/1306/650 1382/1307/650 1388/1319/650 +f 1388/1319/651 1382/1307/651 1383/1308/651 1389/1320/651 +f 1389/1321/652 1383/1309/652 1384/1310/652 1390/1322/652 +f 1390/1322/653 1384/1310/653 1380/593/653 1386/595/653 +f 1445/1311/654 1439/1323/654 1441/1324/654 1447/1312/654 +f 1447/1312/655 1441/1324/655 1442/1325/655 1448/1313/655 +f 1448/1313/656 1442/1325/656 1443/1326/656 1449/1314/656 +f 1449/1315/657 1443/1327/657 1444/1328/657 1450/1316/657 +f 1450/1316/658 1444/1328/658 1440/594/658 1446/592/658 +f 1391/1329/659 1385/1317/659 1387/1318/659 1393/1330/659 +f 1393/1330/660 1387/1318/660 1388/1319/660 1394/1331/660 +f 1394/1331/661 1388/1319/661 1389/1320/661 1395/1332/661 +f 1395/1333/662 1389/1321/662 1390/1322/662 1396/1334/662 +f 1396/1334/663 1390/1322/663 1386/595/663 1392/597/663 +f 1439/1323/664 1433/1335/664 1435/1336/664 1441/1324/664 +f 1441/1324/665 1435/1336/665 1436/1337/665 1442/1325/665 +f 1442/1325/666 1436/1337/666 1437/1338/666 1443/1326/666 +f 1443/1327/667 1437/1339/667 1438/1340/667 1444/1328/667 +f 1444/1328/668 1438/1340/668 1434/596/668 1440/594/668 +f 1397/1341/669 1391/1329/669 1393/1330/669 1399/1342/669 +f 1399/1342/670 1393/1330/670 1394/1331/670 1400/1343/670 +f 1400/1343/671 1394/1331/671 1395/1332/671 1401/1344/671 +f 1401/1345/672 1395/1333/672 1396/1334/672 1402/1346/672 +f 1402/1346/673 1396/1334/673 1392/597/673 1398/599/673 +f 1433/1335/674 1427/1347/674 1429/1348/674 1435/1336/674 +f 1435/1336/675 1429/1348/675 1430/1349/675 1436/1337/675 +f 1436/1337/676 1430/1349/676 1431/1350/676 1437/1338/676 +f 1437/1339/677 1431/1351/677 1432/1352/677 1438/1340/677 +f 1438/1340/678 1432/1352/678 1428/598/678 1434/596/678 +f 1403/1353/679 1397/1341/679 1399/1342/679 1405/1354/679 +f 1405/1354/680 1399/1342/680 1400/1343/680 1406/1355/680 +f 1406/1355/681 1400/1343/681 1401/1344/681 1407/1356/681 +f 1407/1357/682 1401/1345/682 1402/1346/682 1408/1358/682 +f 1408/1358/683 1402/1346/683 1398/599/683 1404/586/683 +f 1427/1347/684 1421/1359/684 1423/1360/684 1429/1348/684 +f 1429/1348/685 1423/1360/685 1424/1361/685 1430/1349/685 +f 1430/1349/686 1424/1361/686 1425/1362/686 1431/1350/686 +f 1431/1351/687 1425/1363/687 1426/1364/687 1432/1352/687 +f 1432/1352/688 1426/1364/688 1422/587/688 1428/598/688 +f 1355/1365/689 1403/1353/689 1405/1354/689 1357/1366/689 +f 1357/1366/690 1405/1354/690 1406/1355/690 1358/1367/690 +f 1358/1367/691 1406/1355/691 1407/1356/691 1359/1368/691 +f 1359/1369/692 1407/1357/692 1408/1358/692 1360/1370/692 +f 1360/1370/693 1408/1358/693 1404/586/693 1356/501/693 +f 1421/1359/694 1409/1371/694 1411/1372/694 1423/1360/694 +f 1423/1360/695 1411/1372/695 1412/1373/695 1424/1361/695 +f 1424/1361/696 1412/1373/696 1413/1374/696 1425/1362/696 +f 1425/1363/697 1413/1375/697 1414/1376/697 1426/1364/697 +f 1426/1364/698 1414/1376/698 1410/502/698 1422/587/698 +f 1481/1377/699 1469/1378/699 1471/1379/699 1483/1380/699 +f 1483/1380/700 1471/1379/700 1472/1381/700 1484/1382/700 +f 1484/1382/701 1472/1381/701 1473/1383/701 1485/1384/701 +f 1485/1385/702 1473/1386/702 1474/1387/702 1486/1388/702 +f 1486/1388/703 1474/1387/703 1470/514/703 1482/604/703 +f 1295/1389/704 1343/1390/704 1345/1391/704 1297/1392/704 +f 1297/1392/705 1345/1391/705 1346/1393/705 1298/1394/705 +f 1298/1394/706 1346/1393/706 1347/1395/706 1299/1396/706 +f 1299/1397/707 1347/1398/707 1348/1399/707 1300/1400/707 +f 1300/1400/708 1348/1399/708 1344/605/708 1296/513/708 +f 1487/1401/709 1481/1377/709 1483/1380/709 1489/1402/709 +f 1489/1402/710 1483/1380/710 1484/1382/710 1490/1403/710 +f 1490/1403/711 1484/1382/711 1485/1384/711 1491/1404/711 +f 1491/1405/712 1485/1385/712 1486/1388/712 1492/1406/712 +f 1492/1406/713 1486/1388/713 1482/604/713 1488/607/713 +f 1343/1390/714 1337/1407/714 1339/1408/714 1345/1391/714 +f 1345/1391/715 1339/1408/715 1340/1409/715 1346/1393/715 +f 1346/1393/716 1340/1409/716 1341/1410/716 1347/1395/716 +f 1347/1398/717 1341/1411/717 1342/1412/717 1348/1399/717 +f 1348/1399/718 1342/1412/718 1338/606/718 1344/605/718 +f 1493/1413/719 1487/1401/719 1489/1402/719 1495/1414/719 +f 1495/1414/720 1489/1402/720 1490/1403/720 1496/1415/720 +f 1496/1415/721 1490/1403/721 1491/1404/721 1497/1416/721 +f 1497/1417/722 1491/1405/722 1492/1406/722 1498/1418/722 +f 1498/1418/723 1492/1406/723 1488/607/723 1494/609/723 +f 1337/1407/724 1331/1419/724 1333/1420/724 1339/1408/724 +f 1339/1408/725 1333/1420/725 1334/1421/725 1340/1409/725 +f 1340/1409/726 1334/1421/726 1335/1422/726 1341/1410/726 +f 1341/1411/727 1335/1423/727 1336/1424/727 1342/1412/727 +f 1342/1412/728 1336/1424/728 1332/608/728 1338/606/728 +f 1499/1425/729 1493/1413/729 1495/1414/729 1501/1426/729 +f 1501/1426/730 1495/1414/730 1496/1415/730 1502/1427/730 +f 1502/1427/731 1496/1415/731 1497/1416/731 1503/1428/731 +f 1503/1429/732 1497/1417/732 1498/1418/732 1504/1430/732 +f 1504/1430/733 1498/1418/733 1494/609/733 1500/611/733 +f 1331/1419/734 1325/1431/734 1327/1432/734 1333/1420/734 +f 1333/1420/735 1327/1432/735 1328/1433/735 1334/1421/735 +f 1334/1421/736 1328/1433/736 1329/1434/736 1335/1422/736 +f 1335/1423/737 1329/1435/737 1330/1436/737 1336/1424/737 +f 1336/1424/738 1330/1436/738 1326/610/738 1332/608/738 +f 1505/1437/739 1499/1425/739 1501/1426/739 1507/1438/739 +f 1507/1438/740 1501/1426/740 1502/1427/740 1508/1439/740 +f 1508/1439/741 1502/1427/741 1503/1428/741 1509/1440/741 +f 1509/1441/742 1503/1429/742 1504/1430/742 1510/1442/742 +f 1510/1442/743 1504/1430/743 1500/611/743 1506/613/743 +f 1325/1431/744 1319/1443/744 1321/1444/744 1327/1432/744 +f 1327/1432/745 1321/1444/745 1322/1445/745 1328/1433/745 +f 1328/1433/746 1322/1445/746 1323/1446/746 1329/1434/746 +f 1329/1435/747 1323/1447/747 1324/1448/747 1330/1436/747 +f 1330/1436/748 1324/1448/748 1320/612/748 1326/610/748 +f 1511/1449/749 1505/1437/749 1507/1438/749 1513/1450/749 +f 1513/1450/750 1507/1438/750 1508/1439/750 1514/1451/750 +f 1514/1451/751 1508/1439/751 1509/1440/751 1515/1452/751 +f 1515/1453/752 1509/1441/752 1510/1442/752 1516/1454/752 +f 1516/1454/753 1510/1442/753 1506/613/753 1512/615/753 +f 1319/1443/754 1313/1455/754 1315/1456/754 1321/1444/754 +f 1321/1444/755 1315/1456/755 1316/1457/755 1322/1445/755 +f 1322/1445/756 1316/1457/756 1317/1458/756 1323/1446/756 +f 1323/1447/757 1317/1459/757 1318/1460/757 1324/1448/757 +f 1324/1448/758 1318/1460/758 1314/614/758 1320/612/758 +f 1517/1461/759 1511/1449/759 1513/1450/759 1519/1462/759 +f 1519/1462/760 1513/1450/760 1514/1451/760 1520/1463/760 +f 1520/1463/761 1514/1451/761 1515/1452/761 1521/1464/761 +f 1521/1465/762 1515/1453/762 1516/1454/762 1522/1466/762 +f 1522/1466/763 1516/1454/763 1512/615/763 1518/602/763 +f 1313/1455/764 1307/1467/764 1309/1468/764 1315/1456/764 +f 1315/1456/765 1309/1468/765 1310/1469/765 1316/1457/765 +f 1316/1457/766 1310/1469/766 1311/1470/766 1317/1458/766 +f 1317/1459/767 1311/1471/767 1312/1472/767 1318/1460/767 +f 1318/1460/768 1312/1472/768 1308/603/768 1314/614/768 +f 1523/1473/769 1517/1461/769 1519/1462/769 1525/1474/769 +f 1525/1474/770 1519/1462/770 1520/1463/770 1526/1475/770 +f 1526/1475/771 1520/1463/771 1521/1464/771 1527/1476/771 +f 1527/1477/772 1521/1465/772 1522/1466/772 1528/1478/772 +f 1528/1478/773 1522/1466/773 1518/602/773 1524/572/773 +f 1307/1467/774 1301/1479/774 1303/1480/774 1309/1468/774 +f 1309/1468/775 1303/1480/775 1304/1481/775 1310/1469/775 +f 1310/1469/776 1304/1481/776 1305/1482/776 1311/1470/776 +f 1311/1471/777 1305/1483/777 1306/1484/777 1312/1472/777 +f 1312/1472/778 1306/1484/778 1302/573/778 1308/603/778 +f 1475/1485/779 1523/1473/779 1525/1474/779 1477/1486/779 +f 1477/1486/780 1525/1474/780 1526/1475/780 1478/1487/780 +f 1478/1487/781 1526/1475/781 1527/1476/781 1479/1488/781 +f 1479/1489/782 1527/1477/782 1528/1478/782 1480/1490/782 +f 1480/1490/783 1528/1478/783 1524/572/783 1476/575/783 +f 1301/1479/784 1289/1491/784 1291/1492/784 1303/1480/784 +f 1303/1480/785 1291/1492/785 1292/1493/785 1304/1481/785 +f 1304/1481/786 1292/1493/786 1293/1494/786 1305/1482/786 +f 1305/1483/787 1293/1495/787 1294/1496/787 1306/1484/787 +f 1306/1484/788 1294/1496/788 1290/574/788 1302/573/788 +f 881/855/789 1295/1389/789 1297/1392/789 883/853/789 +f 883/853/790 1297/1392/790 1298/1394/790 884/851/790 +f 884/851/791 1298/1394/791 1299/1396/791 885/848/791 +f 885/847/792 1299/1397/792 1300/1400/792 886/845/792 +f 886/845/793 1300/1400/793 1296/513/793 882/516/793 +f 1469/1378/794 887/866/794 889/864/794 1471/1379/794 +f 1471/1379/795 889/864/795 890/862/795 1472/1381/795 +f 1472/1381/796 890/862/796 891/861/796 1473/1383/796 +f 1473/1386/797 891/858/797 892/856/797 1474/1387/797 +f 1474/1387/798 892/856/798 888/515/798 1470/514/798 +f 1289/1491/799 1151/1173/799 1153/1176/799 1291/1492/799 +f 1291/1492/800 1153/1176/800 1154/1178/800 1292/1493/800 +f 1292/1493/801 1154/1178/801 1155/1180/801 1293/1494/801 +f 1293/1495/802 1155/1181/802 1156/1184/802 1294/1496/802 +f 1294/1496/803 1156/1184/803 1152/541/803 1290/574/803 +f 1097/1162/804 1475/1485/804 1477/1486/804 1099/1163/804 +f 1099/1163/805 1477/1486/805 1478/1487/805 1100/1165/805 +f 1100/1165/806 1478/1487/806 1479/1488/806 1101/1167/806 +f 1101/1170/807 1479/1489/807 1480/1490/807 1102/1171/807 +f 1102/1171/808 1480/1490/808 1476/575/808 1098/540/808 +f 1409/1371/809 869/837/809 871/836/809 1411/1372/809 +f 1411/1372/810 871/836/810 872/835/810 1412/1373/810 +f 1412/1373/811 872/835/811 873/834/811 1413/1374/811 +f 1413/1375/812 873/833/812 874/832/812 1414/1376/812 +f 1414/1376/813 874/832/813 870/500/813 1410/502/813 +f 875/843/814 1355/1365/814 1357/1366/814 877/842/814 +f 877/842/815 1357/1366/815 1358/1367/815 878/841/815 +f 878/841/816 1358/1367/816 1359/1368/816 879/840/816 +f 879/839/817 1359/1369/817 1360/1370/817 880/838/817 +f 880/838/818 1360/1370/818 1356/501/818 876/499/818 +f 1241/1155/819 1415/1269/819 1417/1272/819 1243/1156/819 +f 1243/1156/820 1417/1272/820 1418/1274/820 1244/1157/820 +f 1244/1157/821 1418/1274/821 1419/1276/821 1245/1158/821 +f 1245/1159/822 1419/1277/822 1420/1280/822 1246/1160/822 +f 1246/1160/823 1420/1280/823 1416/576/823 1242/564/823 +f 1349/1258/824 1199/1149/824 1201/1150/824 1351/1259/824 +f 1351/1259/825 1201/1150/825 1202/1151/825 1352/1261/825 +f 1352/1261/826 1202/1151/826 1203/1152/826 1353/1263/826 +f 1353/1266/827 1203/1153/827 1204/1154/827 1354/1267/827 +f 1354/1267/828 1204/1154/828 1200/565/828 1350/577/828 +f 1163/1227/25 1169/1215/25 1277/1095/25 +f 1879/1497/829 1865/1498/829 1867/1499/829 1881/1500/829 +f 1881/1500/830 1867/1499/830 1868/1501/830 1882/1502/830 +f 1882/1502/831 1868/1501/831 1869/1503/831 1883/1504/831 +f 1883/1505/832 1869/1506/832 1870/1507/832 1884/1508/832 +f 1884/1508/833 1870/1507/833 1871/1509/833 1885/1510/833 +f 1885/1510/834 1871/1509/834 1866/371/834 1880/355/834 +f 1928/414/835 1970/413/835 1972/1511/835 1930/1512/835 +f 1930/1512/836 1972/1511/836 1973/1513/836 1931/1514/836 +f 1931/1514/837 1973/1513/837 1974/1515/837 1932/1516/837 +f 1932/1517/838 1974/1518/838 1975/1519/838 1933/1520/838 +f 1933/1520/839 1975/1519/839 1976/1521/839 1934/1522/839 +f 1934/1522/840 1976/1521/840 1971/356/840 1929/372/840 +f 1886/1523/841 1879/1497/841 1881/1500/841 1888/1524/841 +f 1888/1524/842 1881/1500/842 1882/1502/842 1889/1525/842 +f 1889/1525/843 1882/1502/843 1883/1526/843 1890/1527/843 +f 1890/1528/844 1883/1529/844 1884/1530/844 1891/1531/844 +f 1891/1531/845 1884/1530/845 1885/1532/845 1892/1533/845 +f 1892/1533/846 1885/1532/846 1880/355/846 1887/345/846 +f 1970/413/847 1963/412/847 1965/1534/847 1972/1511/847 +f 1972/1511/848 1965/1534/848 1966/1535/848 1973/1513/848 +f 1973/1513/849 1966/1535/849 1967/1536/849 1974/1537/849 +f 1974/1538/850 1967/1539/850 1968/1540/850 1975/1541/850 +f 1975/1541/851 1968/1540/851 1969/1542/851 1976/1543/851 +f 1976/1543/852 1969/1542/852 1964/346/852 1971/356/852 +f 1893/1544/853 1886/1523/853 1888/1524/853 1895/1545/853 +f 1895/1545/854 1888/1524/854 1889/1525/854 1896/1546/854 +f 1896/1546/855 1889/1525/855 1890/1547/855 1897/1548/855 +f 1897/1549/856 1890/1550/856 1891/1551/856 1898/1552/856 +f 1898/1552/857 1891/1551/857 1892/1553/857 1899/1554/857 +f 1899/1554/858 1892/1553/858 1887/345/858 1894/348/858 +f 1963/412/859 1956/411/859 1958/1555/859 1965/1534/859 +f 1965/1534/860 1958/1555/860 1959/1556/860 1966/1535/860 +f 1966/1535/861 1959/1556/861 1960/1557/861 1967/1558/861 +f 1967/1559/862 1960/1560/862 1961/1561/862 1968/1562/862 +f 1968/1562/863 1961/1561/863 1962/1563/863 1969/1564/863 +f 1969/1564/864 1962/1563/864 1957/347/864 1964/346/864 +f 1900/1565/865 1893/1544/865 1895/1545/865 1902/1566/865 +f 1902/1566/866 1895/1545/866 1896/1546/866 1903/1567/866 +f 1903/1567/867 1896/1546/867 1897/1568/867 1904/1569/867 +f 1904/1570/868 1897/1571/868 1898/1572/868 1905/1573/868 +f 1905/1573/869 1898/1572/869 1899/1574/869 1906/1575/869 +f 1906/1575/870 1899/1574/870 1894/348/870 1901/350/870 +f 1956/411/871 1949/410/871 1951/1576/871 1958/1555/871 +f 1958/1555/872 1951/1576/872 1952/1577/872 1959/1556/872 +f 1959/1556/873 1952/1577/873 1953/1578/873 1960/1579/873 +f 1960/1580/874 1953/1581/874 1954/1582/874 1961/1583/874 +f 1961/1583/875 1954/1582/875 1955/1584/875 1962/1585/875 +f 1962/1585/876 1955/1584/876 1950/349/876 1957/347/876 +f 1907/1586/877 1900/1565/877 1902/1566/877 1909/1587/877 +f 1909/1587/878 1902/1566/878 1903/1567/878 1910/1588/878 +f 1910/1588/879 1903/1567/879 1904/1589/879 1911/1590/879 +f 1911/1591/880 1904/1592/880 1905/1593/880 1912/1594/880 +f 1912/1594/881 1905/1593/881 1906/1595/881 1913/1596/881 +f 1913/1596/882 1906/1595/882 1901/351/882 1908/354/882 +f 1949/410/883 1942/409/883 1944/1597/883 1951/1576/883 +f 1951/1576/884 1944/1597/884 1945/1598/884 1952/1577/884 +f 1952/1577/885 1945/1598/885 1946/1599/885 1953/1600/885 +f 1953/1601/886 1946/1602/886 1947/1603/886 1954/1604/886 +f 1954/1604/887 1947/1603/887 1948/1605/887 1955/1606/887 +f 1955/1606/888 1948/1605/888 1943/353/888 1950/352/888 +f 1914/1607/889 1907/1586/889 1909/1587/889 1916/1608/889 +f 1916/1608/890 1909/1587/890 1910/1588/890 1917/1609/890 +f 1917/1609/891 1910/1588/891 1911/1610/891 1918/1611/891 +f 1918/1612/892 1911/1613/892 1912/1614/892 1919/1615/892 +f 1919/1615/893 1912/1614/893 1913/1616/893 1920/1617/893 +f 1920/1617/894 1913/1616/894 1908/354/894 1915/341/894 +f 1942/409/895 1935/408/895 1937/1618/895 1944/1597/895 +f 1944/1597/896 1937/1618/896 1938/1619/896 1945/1598/896 +f 1945/1598/897 1938/1619/897 1939/1620/897 1946/1621/897 +f 1946/1622/898 1939/1623/898 1940/1624/898 1947/1625/898 +f 1947/1625/899 1940/1624/899 1941/1626/899 1948/1627/899 +f 1948/1627/900 1941/1626/900 1936/342/900 1943/353/900 +f 1872/1628/901 1914/1607/901 1916/1608/901 1874/1629/901 +f 1874/1629/902 1916/1608/902 1917/1609/902 1875/1630/902 +f 1875/1630/903 1917/1609/903 1918/1631/903 1876/1632/903 +f 1876/1633/904 1918/1634/904 1919/1635/904 1877/1636/904 +f 1877/1636/905 1919/1635/905 1920/1637/905 1878/1638/905 +f 1878/1638/906 1920/1637/906 1915/341/906 1873/344/906 +f 1935/408/907 1921/407/907 1923/1639/907 1937/1618/907 +f 1937/1618/908 1923/1639/908 1924/1640/908 1938/1619/908 +f 1938/1619/909 1924/1640/909 1925/1641/909 1939/1642/909 +f 1939/1643/910 1925/1644/910 1926/1645/910 1940/1646/910 +f 1940/1646/911 1926/1645/911 1927/1647/911 1941/1648/911 +f 1941/1648/912 1927/1647/912 1922/343/912 1936/342/912 +f 1543/1649/913 1529/1650/913 1531/1651/913 1545/1652/913 +f 1545/1652/914 1531/1651/914 1532/1653/914 1546/1654/914 +f 1546/1654/915 1532/1653/915 1533/1655/915 1547/1656/915 +f 1547/1657/916 1533/1658/916 1534/1659/916 1548/1660/916 +f 1548/1660/917 1534/1659/917 1535/1661/917 1549/1662/917 +f 1549/1662/918 1535/1661/918 1530/357/918 1544/337/918 +f 1704/390/919 1746/389/919 1748/1663/919 1706/1664/919 +f 1706/1664/920 1748/1663/920 1749/1665/920 1707/1666/920 +f 1707/1666/921 1749/1665/921 1750/1667/921 1708/1668/921 +f 1708/1669/922 1750/1670/922 1751/1671/922 1709/1672/922 +f 1709/1672/923 1751/1671/923 1752/1673/923 1710/1674/923 +f 1710/1674/924 1752/1673/924 1747/338/924 1705/358/924 +f 1550/1675/925 1543/1649/925 1545/1652/925 1552/1676/925 +f 1552/1676/926 1545/1652/926 1546/1654/926 1553/1677/926 +f 1553/1677/927 1546/1654/927 1547/1678/927 1554/1679/927 +f 1554/1680/928 1547/1681/928 1548/1682/928 1555/1683/928 +f 1555/1683/929 1548/1682/929 1549/1684/929 1556/1685/929 +f 1556/1685/930 1549/1684/930 1544/337/930 1551/340/930 +f 1746/389/931 1739/388/931 1741/1686/931 1748/1663/931 +f 1748/1663/932 1741/1686/932 1742/1687/932 1749/1665/932 +f 1749/1665/933 1742/1687/933 1743/1688/933 1750/1689/933 +f 1750/1690/934 1743/1691/934 1744/1692/934 1751/1693/934 +f 1751/1693/935 1744/1692/935 1745/1694/935 1752/1695/935 +f 1752/1695/936 1745/1694/936 1740/339/936 1747/338/936 +f 1557/1696/937 1550/1675/937 1552/1676/937 1559/1697/937 +f 1559/1697/938 1552/1676/938 1553/1677/938 1560/1698/938 +f 1560/1698/939 1553/1677/939 1554/1699/939 1561/1700/939 +f 1561/1701/940 1554/1702/940 1555/1703/940 1562/1704/940 +f 1562/1704/941 1555/1703/941 1556/1705/941 1563/1706/941 +f 1563/1706/942 1556/1705/942 1551/340/942 1558/360/942 +f 1739/388/943 1732/387/943 1734/1707/943 1741/1686/943 +f 1741/1686/944 1734/1707/944 1735/1708/944 1742/1687/944 +f 1742/1687/945 1735/1708/945 1736/1709/945 1743/1710/945 +f 1743/1711/946 1736/1712/946 1737/1713/946 1744/1714/946 +f 1744/1714/947 1737/1713/947 1738/1715/947 1745/1716/947 +f 1745/1716/948 1738/1715/948 1733/359/948 1740/339/948 +f 1564/1717/949 1557/1696/949 1559/1697/949 1566/1718/949 +f 1566/1718/950 1559/1697/950 1560/1698/950 1567/1719/950 +f 1567/1719/951 1560/1698/951 1561/1720/951 1568/1721/951 +f 1568/1722/952 1561/1723/952 1562/1724/952 1569/1725/952 +f 1569/1725/953 1562/1724/953 1563/1726/953 1570/1727/953 +f 1570/1727/954 1563/1726/954 1558/360/954 1565/362/954 +f 1732/387/955 1725/386/955 1727/1728/955 1734/1707/955 +f 1734/1707/956 1727/1728/956 1728/1729/956 1735/1708/956 +f 1735/1708/957 1728/1729/957 1729/1730/957 1736/1731/957 +f 1736/1732/958 1729/1733/958 1730/1734/958 1737/1735/958 +f 1737/1735/959 1730/1734/959 1731/1736/959 1738/1737/959 +f 1738/1737/960 1731/1736/960 1726/361/960 1733/359/960 +f 1571/1738/961 1564/1717/961 1566/1718/961 1573/1739/961 +f 1573/1739/962 1566/1718/962 1567/1719/962 1574/1740/962 +f 1574/1740/963 1567/1719/963 1568/1741/963 1575/1742/963 +f 1575/1743/964 1568/1744/964 1569/1745/964 1576/1746/964 +f 1576/1746/965 1569/1745/965 1570/1747/965 1577/1748/965 +f 1577/1748/966 1570/1747/966 1565/363/966 1572/366/966 +f 1725/386/967 1718/385/967 1720/1749/967 1727/1728/967 +f 1727/1728/968 1720/1749/968 1721/1750/968 1728/1729/968 +f 1728/1729/969 1721/1750/969 1722/1751/969 1729/1752/969 +f 1729/1753/970 1722/1754/970 1723/1755/970 1730/1756/970 +f 1730/1756/971 1723/1755/971 1724/1757/971 1731/1758/971 +f 1731/1758/972 1724/1757/972 1719/365/972 1726/364/972 +f 1578/1759/973 1571/1738/973 1573/1739/973 1580/1760/973 +f 1580/1760/974 1573/1739/974 1574/1740/974 1581/1761/974 +f 1581/1761/975 1574/1740/975 1575/1762/975 1582/1763/975 +f 1582/1764/976 1575/1765/976 1576/1766/976 1583/1767/976 +f 1583/1767/977 1576/1766/977 1577/1768/977 1584/1769/977 +f 1584/1769/978 1577/1768/978 1572/366/978 1579/329/978 +f 1718/385/979 1711/384/979 1713/1770/979 1720/1749/979 +f 1720/1749/980 1713/1770/980 1714/1771/980 1721/1750/980 +f 1721/1750/981 1714/1771/981 1715/1772/981 1722/1773/981 +f 1722/1774/982 1715/1775/982 1716/1776/982 1723/1777/982 +f 1723/1777/983 1716/1776/983 1717/1778/983 1724/1779/983 +f 1724/1779/984 1717/1778/984 1712/330/984 1719/365/984 +f 1536/1780/985 1578/1759/985 1580/1760/985 1538/1781/985 +f 1538/1781/986 1580/1760/986 1581/1761/986 1539/1782/986 +f 1539/1782/987 1581/1761/987 1582/1783/987 1540/1784/987 +f 1540/1785/988 1582/1786/988 1583/1787/988 1541/1788/988 +f 1541/1788/989 1583/1787/989 1584/1789/989 1542/1790/989 +f 1542/1790/990 1584/1789/990 1579/329/990 1537/332/990 +f 1711/384/991 1697/383/991 1699/1791/991 1713/1770/991 +f 1713/1770/992 1699/1791/992 1700/1792/992 1714/1771/992 +f 1714/1771/993 1700/1792/993 1701/1793/993 1715/1794/993 +f 1715/1795/994 1701/1796/994 1702/1797/994 1716/1798/994 +f 1716/1798/995 1702/1797/995 1703/1799/995 1717/1800/995 +f 1717/1800/996 1703/1799/996 1698/331/996 1712/330/996 +f 1599/1801/997 1585/1802/997 1587/1803/997 1601/1804/997 +f 1601/1804/998 1587/1803/998 1588/1805/998 1602/1806/998 +f 1602/1806/999 1588/1805/999 1589/1807/999 1603/1808/999 +f 1603/1809/1000 1589/1810/1000 1590/1811/1000 1604/1812/1000 +f 1604/1812/1001 1590/1811/1001 1591/1813/1001 1605/1814/1001 +f 1605/1814/1002 1591/1813/1002 1586/367/1002 1600/370/1002 +f 1648/398/1003 1690/397/1003 1692/1815/1003 1650/1816/1003 +f 1650/1816/1004 1692/1815/1004 1693/1817/1004 1651/1818/1004 +f 1651/1818/1005 1693/1817/1005 1694/1819/1005 1652/1820/1005 +f 1652/1821/1006 1694/1822/1006 1695/1823/1006 1653/1824/1006 +f 1653/1824/1007 1695/1823/1007 1696/1825/1007 1654/1826/1007 +f 1654/1826/1008 1696/1825/1008 1691/369/1008 1649/368/1008 +f 1606/1827/1009 1599/1801/1009 1601/1804/1009 1608/1828/1009 +f 1608/1828/1010 1601/1804/1010 1602/1806/1010 1609/1829/1010 +f 1609/1829/1011 1602/1806/1011 1603/1830/1011 1610/1831/1011 +f 1610/1832/1012 1603/1833/1012 1604/1834/1012 1611/1835/1012 +f 1611/1835/1013 1604/1834/1013 1605/1836/1013 1612/1837/1013 +f 1612/1837/1014 1605/1836/1014 1600/370/1014 1607/373/1014 +f 1690/397/1015 1683/396/1015 1685/1838/1015 1692/1815/1015 +f 1692/1815/1016 1685/1838/1016 1686/1839/1016 1693/1817/1016 +f 1693/1817/1017 1686/1839/1017 1687/1840/1017 1694/1841/1017 +f 1694/1842/1018 1687/1843/1018 1688/1844/1018 1695/1845/1018 +f 1695/1845/1019 1688/1844/1019 1689/1846/1019 1696/1847/1019 +f 1696/1847/1020 1689/1846/1020 1684/374/1020 1691/369/1020 +f 1613/1848/1021 1606/1827/1021 1608/1828/1021 1615/1849/1021 +f 1615/1849/1022 1608/1828/1022 1609/1829/1022 1616/1850/1022 +f 1616/1850/1023 1609/1829/1023 1610/1851/1023 1617/1852/1023 +f 1617/1853/1024 1610/1854/1024 1611/1855/1024 1618/1856/1024 +f 1618/1856/1025 1611/1855/1025 1612/1857/1025 1619/1858/1025 +f 1619/1858/1026 1612/1857/1026 1607/373/1026 1614/376/1026 +f 1683/396/1027 1676/395/1027 1678/1859/1027 1685/1838/1027 +f 1685/1838/1028 1678/1859/1028 1679/1860/1028 1686/1839/1028 +f 1686/1839/1029 1679/1860/1029 1680/1861/1029 1687/1862/1029 +f 1687/1863/1030 1680/1864/1030 1681/1865/1030 1688/1866/1030 +f 1688/1866/1031 1681/1865/1031 1682/1867/1031 1689/1868/1031 +f 1689/1868/1032 1682/1867/1032 1677/375/1032 1684/374/1032 +f 1620/1869/1033 1613/1848/1033 1615/1849/1033 1622/1870/1033 +f 1622/1870/1034 1615/1849/1034 1616/1850/1034 1623/1871/1034 +f 1623/1871/1035 1616/1850/1035 1617/1872/1035 1624/1873/1035 +f 1624/1874/1036 1617/1875/1036 1618/1876/1036 1625/1877/1036 +f 1625/1877/1037 1618/1876/1037 1619/1878/1037 1626/1879/1037 +f 1626/1879/1038 1619/1878/1038 1614/376/1038 1621/378/1038 +f 1676/395/1039 1669/394/1039 1671/1880/1039 1678/1859/1039 +f 1678/1859/1040 1671/1880/1040 1672/1881/1040 1679/1860/1040 +f 1679/1860/1041 1672/1881/1041 1673/1882/1041 1680/1883/1041 +f 1680/1884/1042 1673/1885/1042 1674/1886/1042 1681/1887/1042 +f 1681/1887/1043 1674/1886/1043 1675/1888/1043 1682/1889/1043 +f 1682/1889/1044 1675/1888/1044 1670/377/1044 1677/375/1044 +f 1627/1890/1045 1620/1869/1045 1622/1870/1045 1629/1891/1045 +f 1629/1891/1046 1622/1870/1046 1623/1871/1046 1630/1892/1046 +f 1630/1892/1047 1623/1871/1047 1624/1893/1047 1631/1894/1047 +f 1631/1895/1048 1624/1896/1048 1625/1897/1048 1632/1898/1048 +f 1632/1898/1049 1625/1897/1049 1626/1899/1049 1633/1900/1049 +f 1633/1900/1050 1626/1899/1050 1621/379/1050 1628/382/1050 +f 1669/394/1051 1662/393/1051 1664/1901/1051 1671/1880/1051 +f 1671/1880/1052 1664/1901/1052 1665/1902/1052 1672/1881/1052 +f 1672/1881/1053 1665/1902/1053 1666/1903/1053 1673/1904/1053 +f 1673/1905/1054 1666/1906/1054 1667/1907/1054 1674/1908/1054 +f 1674/1908/1055 1667/1907/1055 1668/1909/1055 1675/1910/1055 +f 1675/1910/1056 1668/1909/1056 1663/381/1056 1670/380/1056 +f 1634/1911/1057 1627/1890/1057 1629/1891/1057 1636/1912/1057 +f 1636/1912/1058 1629/1891/1058 1630/1892/1058 1637/1913/1058 +f 1637/1913/1059 1630/1892/1059 1631/1914/1059 1638/1915/1059 +f 1638/1916/1060 1631/1917/1060 1632/1918/1060 1639/1919/1060 +f 1639/1919/1061 1632/1918/1061 1633/1920/1061 1640/1921/1061 +f 1640/1921/1062 1633/1920/1062 1628/382/1062 1635/321/1062 +f 1662/393/1063 1655/392/1063 1657/1922/1063 1664/1901/1063 +f 1664/1901/1064 1657/1922/1064 1658/1923/1064 1665/1902/1064 +f 1665/1902/1065 1658/1923/1065 1659/1924/1065 1666/1925/1065 +f 1666/1926/1066 1659/1927/1066 1660/1928/1066 1667/1929/1066 +f 1667/1929/1067 1660/1928/1067 1661/1930/1067 1668/1931/1067 +f 1668/1931/1068 1661/1930/1068 1656/322/1068 1663/381/1068 +f 1592/1932/1069 1634/1911/1069 1636/1912/1069 1594/1933/1069 +f 1594/1933/1070 1636/1912/1070 1637/1913/1070 1595/1934/1070 +f 1595/1934/1071 1637/1913/1071 1638/1935/1071 1596/1936/1071 +f 1596/1937/1072 1638/1938/1072 1639/1939/1072 1597/1940/1072 +f 1597/1940/1073 1639/1939/1073 1640/1941/1073 1598/1942/1073 +f 1598/1942/1074 1640/1941/1074 1635/321/1074 1593/324/1074 +f 1655/392/1075 1641/391/1075 1643/1943/1075 1657/1922/1075 +f 1657/1922/1076 1643/1943/1076 1644/1944/1076 1658/1923/1076 +f 1658/1923/1077 1644/1944/1077 1645/1945/1077 1659/1946/1077 +f 1659/1947/1078 1645/1948/1078 1646/1949/1078 1660/1950/1078 +f 1660/1950/1079 1646/1949/1079 1647/1951/1079 1661/1952/1079 +f 1661/1952/1080 1647/1951/1080 1642/323/1080 1656/322/1080 +f 1767/1953/1081 1753/1954/1081 1755/1955/1081 1769/1956/1081 +f 1769/1956/1082 1755/1955/1082 1756/1957/1082 1770/1958/1082 +f 1770/1958/1083 1756/1957/1083 1757/1959/1083 1771/1960/1083 +f 1771/1961/1084 1757/1962/1084 1758/1963/1084 1772/1964/1084 +f 1772/1964/1085 1758/1963/1085 1759/1965/1085 1773/1966/1085 +f 1773/1966/1086 1759/1965/1086 1754/325/1086 1768/328/1086 +f 1816/406/1087 1858/405/1087 1860/1967/1087 1818/1968/1087 +f 1818/1968/1088 1860/1967/1088 1861/1969/1088 1819/1970/1088 +f 1819/1970/1089 1861/1969/1089 1862/1971/1089 1820/1972/1089 +f 1820/1973/1090 1862/1974/1090 1863/1975/1090 1821/1976/1090 +f 1821/1976/1091 1863/1975/1091 1864/1977/1091 1822/1978/1091 +f 1822/1978/1092 1864/1977/1092 1859/327/1092 1817/326/1092 +f 1774/1979/1093 1767/1953/1093 1769/1956/1093 1776/1980/1093 +f 1776/1980/1094 1769/1956/1094 1770/1958/1094 1777/1981/1094 +f 1777/1981/1095 1770/1958/1095 1771/1982/1095 1778/1983/1095 +f 1778/1984/1096 1771/1985/1096 1772/1986/1096 1779/1987/1096 +f 1779/1987/1097 1772/1986/1097 1773/1988/1097 1780/1989/1097 +f 1780/1989/1098 1773/1988/1098 1768/328/1098 1775/415/1098 +f 1858/405/1099 1851/404/1099 1853/1990/1099 1860/1967/1099 +f 1860/1967/1100 1853/1990/1100 1854/1991/1100 1861/1969/1100 +f 1861/1969/1101 1854/1991/1101 1855/1992/1101 1862/1993/1101 +f 1862/1994/1102 1855/1995/1102 1856/1996/1102 1863/1997/1102 +f 1863/1997/1103 1856/1996/1103 1857/1998/1103 1864/1999/1103 +f 1864/1999/1104 1857/1998/1104 1852/416/1104 1859/327/1104 +f 1781/2000/1105 1774/1979/1105 1776/1980/1105 1783/2001/1105 +f 1783/2001/1106 1776/1980/1106 1777/1981/1106 1784/2002/1106 +f 1784/2002/1107 1777/1981/1107 1778/2003/1107 1785/2004/1107 +f 1785/2005/1108 1778/2006/1108 1779/2007/1108 1786/2008/1108 +f 1786/2008/1109 1779/2007/1109 1780/2009/1109 1787/2010/1109 +f 1787/2010/1110 1780/2009/1110 1775/415/1110 1782/418/1110 +f 1851/404/1111 1844/403/1111 1846/2011/1111 1853/1990/1111 +f 1853/1990/1112 1846/2011/1112 1847/2012/1112 1854/1991/1112 +f 1854/1991/1113 1847/2012/1113 1848/2013/1113 1855/2014/1113 +f 1855/2015/1114 1848/2016/1114 1849/2017/1114 1856/2018/1114 +f 1856/2018/1115 1849/2017/1115 1850/2019/1115 1857/2020/1115 +f 1857/2020/1116 1850/2019/1116 1845/417/1116 1852/416/1116 +f 1788/2021/1117 1781/2000/1117 1783/2001/1117 1790/2022/1117 +f 1790/2022/1118 1783/2001/1118 1784/2002/1118 1791/2023/1118 +f 1791/2023/1119 1784/2002/1119 1785/2024/1119 1792/2025/1119 +f 1792/2026/1120 1785/2027/1120 1786/2028/1120 1793/2029/1120 +f 1793/2029/1121 1786/2028/1121 1787/2030/1121 1794/2031/1121 +f 1794/2031/1122 1787/2030/1122 1782/418/1122 1789/420/1122 +f 1844/403/1123 1837/402/1123 1839/2032/1123 1846/2011/1123 +f 1846/2011/1124 1839/2032/1124 1840/2033/1124 1847/2012/1124 +f 1847/2012/1125 1840/2033/1125 1841/2034/1125 1848/2035/1125 +f 1848/2036/1126 1841/2037/1126 1842/2038/1126 1849/2039/1126 +f 1849/2039/1127 1842/2038/1127 1843/2040/1127 1850/2041/1127 +f 1850/2041/1128 1843/2040/1128 1838/419/1128 1845/417/1128 +f 1795/2042/1129 1788/2021/1129 1790/2022/1129 1797/2043/1129 +f 1797/2043/1130 1790/2022/1130 1791/2023/1130 1798/2044/1130 +f 1798/2044/1131 1791/2023/1131 1792/2045/1131 1799/2046/1131 +f 1799/2047/1132 1792/2048/1132 1793/2049/1132 1800/2050/1132 +f 1800/2050/1133 1793/2049/1133 1794/2051/1133 1801/2052/1133 +f 1801/2052/1134 1794/2051/1134 1789/421/1134 1796/424/1134 +f 1837/402/1135 1830/401/1135 1832/2053/1135 1839/2032/1135 +f 1839/2032/1136 1832/2053/1136 1833/2054/1136 1840/2033/1136 +f 1840/2033/1137 1833/2054/1137 1834/2055/1137 1841/2056/1137 +f 1841/2057/1138 1834/2058/1138 1835/2059/1138 1842/2060/1138 +f 1842/2060/1139 1835/2059/1139 1836/2061/1139 1843/2062/1139 +f 1843/2062/1140 1836/2061/1140 1831/423/1140 1838/422/1140 +f 1802/2063/1141 1795/2042/1141 1797/2043/1141 1804/2064/1141 +f 1804/2064/1142 1797/2043/1142 1798/2044/1142 1805/2065/1142 +f 1805/2065/1143 1798/2044/1143 1799/2066/1143 1806/2067/1143 +f 1806/2068/1144 1799/2069/1144 1800/2070/1144 1807/2071/1144 +f 1807/2071/1145 1800/2070/1145 1801/2072/1145 1808/2073/1145 +f 1808/2073/1146 1801/2072/1146 1796/424/1146 1803/333/1146 +f 1830/401/1147 1823/400/1147 1825/2074/1147 1832/2053/1147 +f 1832/2053/1148 1825/2074/1148 1826/2075/1148 1833/2054/1148 +f 1833/2054/1149 1826/2075/1149 1827/2076/1149 1834/2077/1149 +f 1834/2078/1150 1827/2079/1150 1828/2080/1150 1835/2081/1150 +f 1835/2081/1151 1828/2080/1151 1829/2082/1151 1836/2083/1151 +f 1836/2083/1152 1829/2082/1152 1824/334/1152 1831/423/1152 +f 1760/2084/1153 1802/2063/1153 1804/2064/1153 1762/2085/1153 +f 1762/2085/1154 1804/2064/1154 1805/2065/1154 1763/2086/1154 +f 1763/2086/1155 1805/2065/1155 1806/2087/1155 1764/2088/1155 +f 1764/2089/1156 1806/2090/1156 1807/2091/1156 1765/2092/1156 +f 1765/2092/1157 1807/2091/1157 1808/2093/1157 1766/2094/1157 +f 1766/2094/1158 1808/2093/1158 1803/333/1158 1761/336/1158 +f 1823/400/1159 1809/399/1159 1811/2095/1159 1825/2074/1159 +f 1825/2074/1160 1811/2095/1160 1812/2096/1160 1826/2075/1160 +f 1826/2075/1161 1812/2096/1161 1813/2097/1161 1827/2098/1161 +f 1827/2099/1162 1813/2100/1162 1814/2101/1162 1828/2102/1162 +f 1828/2102/1163 1814/2101/1163 1815/2103/1163 1829/2104/1163 +f 1829/2104/1164 1815/2103/1164 1810/335/1164 1824/334/1164 +f 1537/332/1165 1866/371/1165 1871/2105/1165 1542/2106/1165 +f 1542/2106/1166 1871/2105/1166 1870/2107/1166 1541/2108/1166 +f 1541/2108/1167 1870/2107/1167 1869/2109/1167 1540/2110/1167 +f 1540/2111/1168 1869/2112/1168 1868/1501/1168 1539/1782/1168 +f 1539/1782/1169 1868/1501/1169 1867/1499/1169 1538/1781/1169 +f 1538/1781/1170 1867/1499/1170 1865/1498/1170 1536/1780/1170 +f 1873/344/1171 1754/325/1171 1759/2113/1171 1878/2114/1171 +f 1878/2114/1172 1759/2113/1172 1758/2115/1172 1877/2116/1172 +f 1877/2116/1173 1758/2115/1173 1757/2117/1173 1876/2118/1173 +f 1876/2119/1174 1757/2120/1174 1756/1957/1174 1875/1630/1174 +f 1875/1630/1175 1756/1957/1175 1755/1955/1175 1874/1629/1175 +f 1874/1629/1176 1755/1955/1176 1753/1954/1176 1872/1628/1176 +f 1761/336/1177 1586/367/1177 1591/2121/1177 1766/2122/1177 +f 1766/2122/1178 1591/2121/1178 1590/2123/1178 1765/2124/1178 +f 1765/2124/1179 1590/2123/1179 1589/2125/1179 1764/2126/1179 +f 1764/2127/1180 1589/2128/1180 1588/1805/1180 1763/2086/1180 +f 1763/2086/1181 1588/1805/1181 1587/1803/1181 1762/2085/1181 +f 1762/2085/1182 1587/1803/1182 1585/1802/1182 1760/2084/1182 +f 1593/324/1183 1530/357/1183 1535/2129/1183 1598/2130/1183 +f 1598/2130/1184 1535/2129/1184 1534/2131/1184 1597/2132/1184 +f 1597/2132/1185 1534/2131/1185 1533/2133/1185 1596/2134/1185 +f 1596/2135/1186 1533/2136/1186 1532/1653/1186 1595/1934/1186 +f 1595/1934/1187 1532/1653/1187 1531/1651/1187 1594/1933/1187 +f 1594/1933/1188 1531/1651/1188 1529/1650/1188 1592/1932/1188 +f 1697/383/1189 1928/414/1189 1930/1512/1189 1699/1791/1189 +f 1699/1791/1190 1930/1512/1190 1931/1514/1190 1700/1792/1190 +f 1700/1792/1191 1931/1514/1191 1932/2137/1191 1701/2138/1191 +f 1701/2139/1192 1932/2140/1192 1933/2141/1192 1702/2142/1192 +f 1702/2142/1193 1933/2141/1193 1934/2143/1193 1703/2144/1193 +f 1703/2144/1194 1934/2143/1194 1929/372/1194 1698/331/1194 +f 1641/391/1195 1704/390/1195 1706/1664/1195 1643/1943/1195 +f 1643/1943/1196 1706/1664/1196 1707/1666/1196 1644/1944/1196 +f 1644/1944/1197 1707/1666/1197 1708/2145/1197 1645/2146/1197 +f 1645/2147/1198 1708/2148/1198 1709/2149/1198 1646/2150/1198 +f 1646/2150/1199 1709/2149/1199 1710/2151/1199 1647/2152/1199 +f 1647/2152/1200 1710/2151/1200 1705/358/1200 1642/323/1200 +f 1809/399/1201 1648/398/1201 1650/1816/1201 1811/2095/1201 +f 1811/2095/1202 1650/1816/1202 1651/1818/1202 1812/2096/1202 +f 1812/2096/1203 1651/1818/1203 1652/2153/1203 1813/2154/1203 +f 1813/2155/1204 1652/2156/1204 1653/2157/1204 1814/2158/1204 +f 1814/2158/1205 1653/2157/1205 1654/2159/1205 1815/2160/1205 +f 1815/2160/1206 1654/2159/1206 1649/368/1206 1810/335/1206 +f 1817/326/1207 1922/343/1207 1927/2161/1207 1822/2162/1207 +f 1822/2162/1208 1927/2161/1208 1926/2163/1208 1821/2164/1208 +f 1821/2164/1209 1926/2163/1209 1925/2165/1209 1820/2166/1209 +f 1820/2167/1210 1925/2168/1210 1924/1640/1210 1819/1970/1210 +f 1819/1970/1211 1924/1640/1211 1923/1639/1211 1818/1968/1211 +f 1818/1968/1212 1923/1639/1212 1921/407/1212 1816/406/1212 +f 1865/1498/57 1879/1497/57 1886/1523/57 1893/1544/57 1900/1565/57 1907/1586/57 1914/1607/57 1872/1628/57 1753/1954/57 1767/1953/57 1774/1979/57 1781/2000/57 1788/2021/57 1795/2042/57 1802/2063/57 1760/2084/57 1585/1802/57 1599/1801/57 1606/1827/57 1613/1848/57 1620/1869/57 1627/1890/57 1634/1911/57 1592/1932/57 1529/1650/57 1543/1649/57 1550/1675/57 1557/1696/57 1564/1717/57 1571/1738/57 1578/1759/57 1536/1780/57 +f 683/639/57 671/638/57 899/867/57 +f 899/867/57 887/866/57 875/843/57 +f 683/639/57 899/867/57 863/831/57 +f 707/663/57 695/651/57 683/639/57 +f 731/691/57 719/679/57 755/715/57 +f 755/715/57 743/703/57 731/691/57 +f 779/743/57 767/729/57 755/715/57 +f 803/767/57 791/755/57 755/715/57 +f 827/795/57 815/779/57 851/819/57 +f 851/819/57 839/807/57 827/795/57 +f 875/843/57 863/831/57 899/867/57 +f 1355/1365/57 1469/1378/57 1403/1353/57 +f 851/819/57 815/779/57 803/767/57 +f 791/755/57 779/743/57 755/715/57 +f 755/715/57 719/679/57 707/663/57 +f 707/663/57 683/639/57 863/831/57 +f 887/866/57 1355/1365/57 875/843/57 +f 803/767/57 755/715/57 707/663/57 +f 887/866/57 1469/1378/57 1355/1365/57 +f 1403/1353/57 1469/1378/57 1481/1377/57 +f 803/767/57 707/663/57 851/819/57 +f 707/663/57 863/831/57 851/819/57 +f 1397/1341/57 1403/1353/57 1487/1401/57 +f 1391/1329/57 1397/1341/57 1493/1413/57 +f 1481/1377/57 1487/1401/57 1403/1353/57 +f 1487/1401/57 1493/1413/57 1397/1341/57 +f 1385/1317/57 1391/1329/57 1499/1425/57 +f 1379/1305/57 1385/1317/57 1505/1437/57 +f 1493/1413/57 1499/1425/57 1391/1329/57 +f 1499/1425/57 1505/1437/57 1385/1317/57 +f 1373/1293/57 1379/1305/57 1511/1449/57 +f 1379/1305/57 1505/1437/57 1511/1449/57 +f 1373/1293/57 1511/1449/57 1517/1461/57 +f 1367/1281/57 1373/1293/57 1517/1461/57 +f 1367/1281/57 1517/1461/57 1523/1473/57 +f 1361/1257/57 1367/1281/57 1523/1473/57 +f 1475/1485/57 1097/1162/57 1199/1149/57 +f 1361/1257/57 1523/1473/57 1349/1258/57 +f 1235/1137/57 1199/1149/57 1109/1161/57 +f 1349/1258/57 1523/1473/57 1475/1485/57 +f 1097/1162/57 1109/1161/57 1199/1149/57 +f 1115/1185/57 1121/1197/57 1229/1125/57 +f 1127/1209/57 1133/1221/57 1217/1101/57 +f 1139/1233/57 1103/1245/57 1205/1066/57 +f 1049/517/57 1061/967/57 1055/1054/57 +f 1067/990/57 1073/1002/57 1079/1014/57 +f 1079/1014/57 1085/1026/57 1091/1042/57 +f 1091/1042/57 1055/1054/57 1061/967/57 +f 953/869/57 965/868/57 995/944/57 +f 971/892/57 977/904/57 983/916/57 +f 983/916/57 989/932/57 995/944/57 +f 995/944/57 959/518/57 953/869/57 +f 1193/519/57 1205/1066/57 1103/1245/57 +f 1211/1089/57 1217/1101/57 1133/1221/57 +f 1223/1113/57 1229/1125/57 1121/1197/57 +f 1199/1149/57 1349/1258/57 1475/1485/57 +f 1109/1161/57 1115/1185/57 1235/1137/57 +f 1133/1221/57 1139/1233/57 1211/1089/57 +f 1061/967/57 1067/990/57 1079/1014/57 +f 1079/1014/57 1091/1042/57 1061/967/57 +f 965/868/57 971/892/57 983/916/57 +f 983/916/57 995/944/57 965/868/57 +f 1205/1066/57 1211/1089/57 1139/1233/57 +f 1229/1125/57 1235/1137/57 1115/1185/57 +f 1121/1197/57 1127/1209/57 1223/1113/57 +f 1049/517/57 1055/1054/57 953/869/57 +f 953/869/57 959/518/57 1049/517/57 +f 1217/1101/57 1223/1113/57 1127/1209/57 +f 1103/1245/57 1049/517/57 1193/519/57 +f 665/627/25 677/626/25 893/854/25 +f 689/645/25 701/657/25 713/671/25 +f 713/671/25 725/685/25 737/697/25 +f 737/697/25 749/709/25 785/749/25 +f 761/722/25 773/736/25 785/749/25 +f 785/749/25 797/761/25 809/773/25 +f 809/773/25 821/787/25 785/749/25 +f 833/801/25 845/813/25 857/825/25 +f 857/825/25 869/837/25 893/854/25 +f 833/801/25 857/825/25 893/854/25 +f 785/749/25 821/787/25 833/801/25 +f 749/709/25 761/722/25 785/749/25 +f 689/645/25 713/671/25 785/749/25 +f 893/854/25 677/626/25 689/645/25 +f 1295/1389/25 869/837/25 1409/1371/25 +f 881/855/25 869/837/25 1295/1389/25 +f 713/671/25 737/697/25 785/749/25 +f 785/749/25 833/801/25 893/854/25 +f 869/837/25 881/855/25 893/854/25 +f 893/854/25 689/645/25 785/749/25 +f 1343/1390/25 1295/1389/25 1409/1371/25 +f 1409/1371/25 1421/1359/25 1343/1390/25 +f 1421/1359/25 1427/1347/25 1337/1407/25 +f 1337/1407/25 1343/1390/25 1421/1359/25 +f 1331/1419/25 1337/1407/25 1427/1347/25 +f 1427/1347/25 1433/1335/25 1331/1419/25 +f 1433/1335/25 1439/1323/25 1325/1431/25 +f 1325/1431/25 1331/1419/25 1433/1335/25 +f 1319/1443/25 1325/1431/25 1439/1323/25 +f 1439/1323/25 1445/1311/25 1319/1443/25 +f 1445/1311/25 1451/1299/25 1313/1455/25 +f 1313/1455/25 1319/1443/25 1445/1311/25 +f 1307/1467/25 1313/1455/25 1451/1299/25 +f 1307/1467/25 1451/1299/25 1457/1287/25 +f 1301/1479/25 1307/1467/25 1457/1287/25 +f 1301/1479/25 1457/1287/25 1463/1270/25 +f 1187/1174/25 1151/1173/25 1253/1143/25 +f 1289/1491/25 1301/1479/25 1463/1270/25 +f 1415/1269/25 1151/1173/25 1289/1491/25 +f 1289/1491/25 1463/1270/25 1415/1269/25 +f 1181/1191/25 1187/1174/25 1259/1131/25 +f 1169/1215/25 1175/1203/25 1271/1107/25 +f 1157/1239/25 1283/1078/25 1247/1077/25 +f 1007/978/25 1145/1251/25 905/961/25 +f 1037/996/25 1043/979/25 1025/1020/25 +f 1025/1020/25 1031/1008/25 1037/996/25 +f 1013/1048/25 1019/1034/25 1025/1020/25 +f 911/880/25 1001/1060/25 1007/978/25 +f 941/898/25 947/881/25 929/924/25 +f 929/924/25 935/910/25 941/898/25 +f 917/950/25 923/938/25 929/924/25 +f 1247/1077/25 905/961/25 1145/1251/25 +f 1277/1095/25 1283/1078/25 1163/1227/25 +f 1265/1119/25 1271/1107/25 1175/1203/25 +f 1253/1143/25 1259/1131/25 1187/1174/25 +f 1415/1269/25 1241/1155/25 1151/1173/25 +f 1175/1203/25 1181/1191/25 1265/1119/25 +f 1145/1251/25 1157/1239/25 1247/1077/25 +f 1025/1020/25 1043/979/25 1013/1048/25 +f 1001/1060/25 1043/979/25 1007/978/25 +f 929/924/25 947/881/25 917/950/25 +f 905/961/25 917/950/25 911/880/25 +f 1271/1107/25 1277/1095/25 1169/1215/25 +f 1241/1155/25 1253/1143/25 1151/1173/25 +f 1163/1227/25 1283/1078/25 1157/1239/25 +f 1013/1048/25 1043/979/25 1001/1060/25 +f 917/950/25 947/881/25 911/880/25 +f 1259/1131/25 1265/1119/25 1181/1191/25 +f 911/880/25 1007/978/25 905/961/25 +s 1 +f 356/2169/1213 323/2170/1214 322/2171/1215 355/2172/1216 +f 357/2173/1217 324/2174/1218 323/2170/1214 356/2169/1213 +f 358/2175/1219 325/2176/1220 324/2174/1218 357/2173/1217 +f 359/2177/1221 326/2178/1222 325/2176/1220 358/2175/1219 +f 360/2179/1223 327/2180/1224 326/2178/1222 359/2177/1221 +f 361/2181/1225 328/2182/1226 327/2180/1224 360/2179/1223 +f 362/2183/1227 329/2184/1228 328/2182/1226 361/2181/1225 +f 363/2185/1229 347/2186/1230 329/2184/1228 362/2183/1227 +f 364/2187/1231 330/2188/1232 347/2186/1230 363/2185/1229 +f 365/2189/1233 348/2190/1234 330/2188/1232 364/2187/1231 +f 366/2191/1235 331/2192/1236 348/2190/1234 365/2189/1233 +f 367/2193/1237 332/2194/1238 331/2192/1236 366/2191/1235 +f 368/2195/1239 349/2196/1240 332/2194/1238 367/2193/1237 +f 369/2197/1241 333/2198/1242 349/2196/1240 368/2195/1239 +f 370/2199/1243 334/2200/1244 333/2198/1242 369/2197/1241 +f 371/2201/1245 335/2202/1246 334/2200/1244 370/2199/1243 +f 372/2203/1247 336/2204/1248 335/2205/1246 371/2206/1245 +f 373/2207/1249 337/2208/1250 336/2204/1248 372/2203/1247 +f 374/2209/1251 350/2210/1252 337/2208/1250 373/2207/1249 +f 376/2211/1253 338/2212/1254 350/2210/1252 374/2209/1251 +f 377/2213/1255 340/2214/1256 339/2215/1257 375/2216/1258 +f 375/2216/1258 339/2215/1257 338/2212/1254 376/2211/1253 +f 378/2217/1259 351/2218/1260 340/2214/1256 377/2213/1255 +f 379/2219/1261 341/2220/1262 351/2218/1260 378/2217/1259 +f 380/2221/1263 352/2222/1264 341/2220/1262 379/2219/1261 +f 382/2223/1265 342/2224/1266 352/2222/1264 380/2221/1263 +f 383/2225/1267 344/2226/1268 343/2227/1269 381/2228/1270 +f 381/2228/1270 343/2227/1269 342/2224/1266 382/2223/1265 +f 384/2229/1271 345/2230/1272 344/2226/1268 383/2225/1267 +f 354/2231/1273 346/2232/1274 345/2230/1272 384/2229/1271 +f 30/2233/1275 33/2234/1276 34/2235/1277 1/2236/1278 +f 2/2237/1279 1/2236/1278 34/2235/1277 35/2238/1280 +f 3/2239/1281 2/2237/1279 35/2238/1280 36/2240/1282 +f 4/2241/1283 3/2239/1281 36/2240/1282 37/2242/1284 +f 5/2243/1285 4/2241/1283 37/2242/1284 38/2244/1286 +f 6/2245/1287 5/2243/1285 38/2244/1286 39/2246/1288 +f 6/2245/1287 39/2246/1288 40/2247/1289 7/2248/1290 +f 8/2249/1291 7/2248/1290 40/2247/1289 41/2250/1292 +f 9/2251/1293 8/2249/1291 41/2250/1292 42/2252/1294 +f 10/2253/1295 9/2251/1293 42/2252/1294 43/2254/1296 +f 10/2253/1295 43/2254/1296 44/2255/1297 11/2256/1298 +f 11/2256/1298 44/2255/1297 45/2257/1299 31/2258/1300 +f 12/2259/1301 46/2260/1302 47/2261/1303 13/2262/1304 +f 31/2258/1300 45/2257/1299 46/2260/1302 12/2259/1301 +f 13/2262/1304 47/2261/1303 48/2263/1305 14/2264/1306 +f 15/2265/1307 14/2264/1306 48/2263/1305 49/2266/1308 +f 15/2265/1307 49/2266/1308 50/2267/1309 16/2268/1310 +f 17/2269/1311 16/2268/1310 50/2267/1309 51/2270/1312 +f 17/2271/1311 51/2272/1312 52/2273/1313 18/2274/1314 +f 19/2275/1315 18/2274/1314 52/2273/1313 53/2276/1316 +f 19/2275/1315 53/2276/1316 54/2277/1317 20/2278/1318 +f 20/2278/1318 54/2277/1317 55/2279/1319 22/2280/1320 +f 22/2280/1320 55/2279/1319 56/2281/1321 21/2282/1322 +f 21/2282/1322 56/2281/1321 57/2283/1323 23/2284/1324 +f 23/2284/1324 57/2283/1323 58/2285/1325 24/2286/1326 +f 24/2286/1326 58/2285/1325 59/2287/1327 32/2288/1328 +f 27/2289/1329 25/2290/1330 60/2291/1331 61/2292/1332 +f 25/2290/1330 32/2288/1328 59/2287/1327 60/2291/1331 +f 28/2293/1333 26/2294/1334 62/2295/1335 63/2296/1336 +f 27/2289/1329 61/2292/1332 62/2295/1335 26/2294/1334 +f 29/2297/1337 28/2293/1333 63/2296/1336 64/2298/1338 +f 29/2297/1337 64/2298/1338 33/2234/1276 30/2233/1275 +f 67/2299/1339 44/2255/1297 43/2254/1296 66/2300/1340 +f 70/2301/1341 66/2300/1340 65/2302/1342 71/2303/1343 +f 72/2304/1344 67/2299/1339 66/2300/1340 70/2301/1341 +f 74/2305/1345 68/2306/1346 67/2299/1339 72/2304/1344 +f 69/2307/1347 41/2250/1292 40/2247/1289 75/2308/1348 +f 71/2303/1343 65/2302/1342 69/2307/1347 76/2309/1349 +f 78/2310/1350 73/2311/1351 68/2306/1346 74/2305/1345 +f 80/2312/1352 76/2309/1349 69/2307/1347 75/2308/1348 +f 82/2313/1353 77/2314/1354 73/2311/1351 78/2310/1350 +f 84/2315/1355 80/2312/1352 75/2308/1348 79/2316/1356 +f 388/2317/1228 392/2318/1227 393/2319/1229 385/2320/1230 +f 387/2321/1234 395/2322/1233 396/2323/1235 389/2324/1236 +f 86/2325/1357 81/2326/1358 77/2314/1354 82/2313/1353 +f 391/2327/1226 398/2328/1225 392/2318/1227 388/2317/1228 +f 88/2329/1359 84/2315/1355 79/2316/1356 83/2330/1360 +f 389/2324/1236 396/2323/1235 400/2331/1237 399/2332/1238 +f 90/2333/1361 85/2334/1362 81/2326/1358 86/2325/1357 +f 390/2335/1224 403/2336/1223 398/2328/1225 391/2327/1226 +f 92/2337/1363 88/2329/1359 83/2330/1360 87/2338/1364 +f 397/2339/1222 402/2340/1221 403/2336/1223 390/2335/1224 +f 94/2341/1365 89/2342/1366 85/2334/1362 90/2333/1361 +f 406/2343/1218 411/2344/1217 407/2345/1219 401/2346/1220 +f 96/2347/1367 92/2337/1363 87/2338/1364 91/2348/1368 +f 399/2332/1238 400/2331/1237 405/2349/1239 404/2350/1240 +f 98/2351/1369 93/2352/1370 89/2342/1366 94/2341/1365 +f 410/2353/1214 415/2354/1213 411/2344/1217 406/2343/1218 +f 100/2355/1371 96/2347/1367 91/2348/1368 95/2356/1372 +f 404/2350/1240 405/2349/1239 409/2357/1241 408/2358/1242 +f 102/2359/1373 97/2360/1374 93/2361/1370 98/2362/1369 +f 355/2172/1216 322/2171/1215 321/2363/1375 353/2364/1376 +f 414/2365/1215 420/2366/1216 415/2354/1213 410/2353/1214 +f 36/2240/1282 91/2348/1368 87/2338/1364 37/2242/1284 +f 117/2367/1377 57/2283/1323 56/2281/1321 113/2368/1378 +f 104/2369/1379 100/2355/1371 95/2356/1372 99/2370/1380 +f 408/2358/1242 409/2357/1241 413/2371/1243 412/2372/1244 +f 106/2373/1381 101/2374/1382 97/2360/1374 102/2359/1373 +f 419/2375/1375 424/2376/1376 420/2366/1216 414/2365/1215 +f 108/2377/1383 104/2369/1379 99/2370/1380 103/2378/1384 +f 412/2372/1244 413/2371/1243 418/2379/1245 417/2380/1246 +f 110/2381/1385 105/2382/1386 101/2374/1382 106/2373/1381 +f 423/2383/1274 428/2384/1273 424/2376/1376 419/2375/1375 +f 112/2385/1387 108/2377/1383 103/2378/1384 107/2386/1388 +f 416/2387/1248 422/2388/1247 426/2389/1249 421/2390/1250 +f 110/2381/1385 114/2391/1389 109/2392/1390 105/2382/1386 +f 417/2380/1246 418/2379/1245 422/2393/1247 416/2394/1248 +f 116/2395/1391 112/2385/1387 107/2386/1388 111/2396/1392 +f 421/2390/1250 426/2389/1249 430/2397/1251 425/2398/1252 +f 385/2320/1230 393/2319/1229 394/2399/1231 386/2400/1232 +f 118/2401/1393 113/2368/1378 109/2392/1390 114/2391/1389 +f 427/2402/1272 432/2403/1271 428/2384/1273 423/2383/1274 +f 61/2292/1332 119/2404/1394 115/2405/1395 62/2295/1335 +f 120/2406/1396 116/2395/1391 111/2396/1392 115/2405/1395 +f 425/2398/1252 430/2397/1251 434/2407/1253 429/2408/1254 +f 118/2401/1393 122/2409/1397 117/2367/1377 113/2368/1378 +f 431/2410/1268 436/2411/1267 432/2403/1271 427/2402/1272 +f 124/2412/1398 120/2406/1396 115/2405/1395 119/2404/1394 +f 429/2408/1254 434/2407/1253 439/2413/1258 433/2414/1257 +f 122/2409/1397 126/2415/1399 121/2416/1400 117/2367/1377 +f 435/2417/1269 441/2418/1270 436/2411/1267 431/2410/1268 +f 401/2346/1220 407/2345/1219 402/2340/1221 397/2339/1222 +f 127/2419/1401 124/2412/1398 119/2404/1394 123/2420/1402 +f 433/2414/1257 439/2413/1258 445/2421/1255 438/2422/1256 +f 126/2415/1399 128/2423/1403 125/2424/1404 121/2416/1400 +f 440/2425/1266 437/2426/1265 441/2418/1270 435/2417/1269 +f 128/2423/1403 127/2419/1401 123/2420/1402 125/2424/1404 +f 386/2400/1232 394/2399/1231 395/2322/1233 387/2321/1234 +f 446/2427/1264 443/2428/1263 437/2426/1265 440/2425/1266 +f 438/2422/1256 445/2421/1255 444/2429/1259 447/2430/1260 +f 448/2431/1262 442/2432/1261 443/2428/1263 446/2427/1264 +f 447/2430/1260 444/2429/1259 442/2432/1261 448/2431/1262 +f 129/2433/1405 130/2434/1205 131/2435/1406 132/2436/1407 +f 136/2437/1408 137/2438/1201 130/2434/1205 129/2433/1405 +f 132/2436/1407 131/2435/1406 138/2439/1170 133/2440/1409 +f 133/2440/1409 138/2439/1170 139/2441/1166 134/2442/1410 +f 134/2443/1410 139/2444/1166 140/2445/1411 135/2446/1412 +f 135/2446/1412 140/2445/1411 137/2438/1201 136/2437/1408 +f 141/2447/1413 142/2448/1166 143/2449/1170 144/2450/1414 +f 148/2451/1415 149/2452/1411 142/2448/1166 141/2447/1413 +f 144/2450/1414 143/2449/1170 150/2453/1406 145/2454/1416 +f 145/2454/1416 150/2453/1406 151/2455/1205 146/2456/1417 +f 146/2457/1417 151/2458/1205 152/2459/1201 147/2460/1418 +f 147/2460/1418 152/2459/1201 149/2452/1411 148/2451/1415 +f 153/2461/1419 154/2462/1202 155/2463/1206 156/2464/1420 +f 160/2465/1421 161/2466/1422 154/2462/1202 153/2461/1419 +f 156/2464/1420 155/2463/1206 162/2467/1423 157/2468/1424 +f 157/2468/1424 162/2467/1423 163/2469/1169 158/2470/1425 +f 158/2471/1425 163/2472/1169 164/2473/1165 159/2474/1426 +f 159/2474/1426 164/2473/1165 161/2466/1422 160/2465/1421 +f 165/2475/1427 166/2476/1169 167/2477/1423 168/2478/1428 +f 172/2479/1429 173/2480/1165 166/2476/1169 165/2475/1427 +f 168/2478/1428 167/2477/1423 174/2481/1206 169/2482/1430 +f 169/2482/1430 174/2481/1206 175/2483/1202 170/2484/1431 +f 170/2485/1431 175/2486/1202 176/2487/1422 171/2488/1432 +f 171/2488/1432 176/2487/1422 173/2480/1165 172/2479/1429 +f 177/2489/1433 178/2490/1190 179/2491/1434 180/2492/1435 +f 184/2493/1436 185/2494/1194 178/2490/1190 177/2489/1433 +f 180/2492/1435 179/2491/1434 186/2495/1177 181/2496/1437 +f 181/2496/1437 186/2495/1177 187/2497/1181 182/2498/1438 +f 182/2499/1438 187/2500/1181 188/2501/1439 183/2502/1440 +f 183/2502/1440 188/2501/1439 185/2494/1194 184/2493/1436 +f 189/2503/1441 190/2504/1181 191/2505/1177 192/2506/1442 +f 196/2507/1443 197/2508/1439 190/2504/1181 189/2503/1441 +f 192/2506/1442 191/2505/1177 198/2509/1434 193/2510/1444 +f 193/2510/1444 198/2509/1434 199/2511/1190 194/2512/1445 +f 194/2513/1445 199/2514/1190 200/2515/1194 195/2516/1446 +f 195/2516/1446 200/2515/1194 197/2508/1439 196/2507/1443 +f 201/2517/1447 202/2518/1193 203/2519/1189 204/2520/1448 +f 208/2521/1449 209/2522/1450 202/2518/1193 201/2517/1447 +f 204/2520/1448 203/2519/1189 210/2523/1451 205/2524/1452 +f 205/2524/1452 210/2523/1451 211/2525/1178 206/2526/1453 +f 206/2527/1453 211/2528/1178 212/2529/1182 207/2530/1454 +f 207/2530/1454 212/2529/1182 209/2522/1450 208/2521/1449 +f 213/2531/1455 214/2532/1178 215/2533/1451 216/2534/1456 +f 220/2535/1457 221/2536/1182 214/2532/1178 213/2531/1455 +f 216/2534/1456 215/2533/1451 222/2537/1189 217/2538/1458 +f 217/2538/1458 222/2537/1189 223/2539/1193 218/2540/1459 +f 218/2541/1459 223/2542/1193 224/2543/1450 219/2544/1460 +f 219/2544/1460 224/2543/1450 221/2536/1182 220/2535/1457 +f 225/2545/1410 226/2546/1166 227/2547/1411 228/2548/1412 +f 232/2549/1409 233/2550/1170 226/2546/1166 225/2545/1410 +f 228/2548/1412 227/2547/1411 234/2551/1201 229/2552/1408 +f 229/2552/1408 234/2551/1201 235/2553/1205 230/2554/1405 +f 230/2555/1405 235/2556/1205 236/2557/1406 231/2558/1407 +f 231/2558/1407 236/2557/1406 233/2550/1170 232/2549/1409 +f 237/2559/1417 238/2560/1205 239/2561/1201 240/2562/1418 +f 244/2563/1416 245/2564/1406 238/2560/1205 237/2559/1417 +f 240/2562/1418 239/2561/1201 246/2565/1411 241/2566/1415 +f 241/2566/1415 246/2565/1411 247/2567/1166 242/2568/1413 +f 242/2569/1413 247/2570/1166 248/2571/1170 243/2572/1414 +f 243/2572/1414 248/2571/1170 245/2564/1406 244/2563/1416 +f 249/2573/1425 250/2574/1169 251/2575/1165 252/2576/1426 +f 256/2577/1424 257/2578/1423 250/2574/1169 249/2573/1425 +f 252/2576/1426 251/2575/1165 258/2579/1422 253/2580/1421 +f 253/2580/1421 258/2579/1422 259/2581/1202 254/2582/1419 +f 254/2583/1419 259/2584/1202 260/2585/1206 255/2586/1420 +f 255/2586/1420 260/2585/1206 257/2578/1423 256/2577/1424 +f 261/2587/1431 262/2588/1202 263/2589/1422 264/2590/1432 +f 268/2591/1430 269/2592/1206 262/2588/1202 261/2587/1431 +f 264/2590/1432 263/2589/1422 270/2593/1165 265/2594/1429 +f 265/2594/1429 270/2593/1165 271/2595/1169 266/2596/1427 +f 266/2597/1427 271/2598/1169 272/2599/1423 267/2600/1428 +f 267/2600/1428 272/2599/1423 269/2592/1206 268/2591/1430 +f 273/2601/1438 274/2602/1181 275/2603/1439 276/2604/1440 +f 280/2605/1437 281/2606/1177 274/2602/1181 273/2601/1438 +f 276/2604/1440 275/2603/1439 282/2607/1194 277/2608/1436 +f 277/2608/1436 282/2607/1194 283/2609/1190 278/2610/1433 +f 278/2611/1433 283/2612/1190 284/2613/1434 279/2614/1435 +f 279/2614/1435 284/2613/1434 281/2606/1177 280/2605/1437 +f 285/2615/1445 286/2616/1190 287/2617/1194 288/2618/1446 +f 292/2619/1444 293/2620/1434 286/2616/1190 285/2615/1445 +f 288/2618/1446 287/2617/1194 294/2621/1439 289/2622/1443 +f 289/2622/1443 294/2621/1439 295/2623/1181 290/2624/1441 +f 290/2625/1441 295/2626/1181 296/2627/1177 291/2628/1442 +f 291/2628/1442 296/2627/1177 293/2620/1434 292/2619/1444 +f 297/2629/1453 298/2630/1178 299/2631/1182 300/2632/1454 +f 304/2633/1452 305/2634/1451 298/2630/1178 297/2629/1453 +f 300/2632/1454 299/2631/1182 306/2635/1450 301/2636/1449 +f 301/2636/1449 306/2635/1450 307/2637/1193 302/2638/1447 +f 302/2639/1447 307/2640/1193 308/2641/1189 303/2642/1448 +f 303/2642/1448 308/2641/1189 305/2634/1451 304/2633/1452 +f 309/2643/1459 310/2644/1193 311/2645/1450 312/2646/1460 +f 316/2647/1458 317/2648/1189 310/2644/1193 309/2643/1459 +f 312/2646/1460 311/2645/1450 318/2649/1182 313/2650/1457 +f 313/2650/1457 318/2649/1182 319/2651/1178 314/2652/1455 +f 314/2653/1455 319/2654/1178 320/2655/1451 315/2656/1456 +f 315/2656/1456 320/2655/1451 317/2648/1189 316/2647/1458 +f 54/2277/1317 53/2276/1316 101/2374/1382 105/2382/1386 +f 64/2298/1338 107/2386/1388 103/2378/1384 33/2234/1276 +f 125/2424/1404 59/2287/1327 58/2285/1325 121/2416/1400 +f 65/2302/1342 42/2252/1294 41/2250/1292 69/2307/1347 +f 62/2295/1335 115/2405/1395 111/2396/1392 63/2296/1336 +f 89/2342/1366 93/2352/1370 51/2270/1312 50/2267/1309 +f 38/2244/1286 37/2242/1284 87/2338/1364 83/2330/1360 +f 121/2416/1400 58/2285/1325 57/2283/1323 117/2367/1377 +f 61/2292/1332 60/2291/1331 123/2420/1402 119/2404/1394 +f 64/2298/1338 63/2296/1336 111/2396/1392 107/2386/1388 +f 125/2424/1404 123/2420/1402 60/2291/1331 59/2287/1327 +f 39/2246/1288 79/2316/1356 75/2308/1348 40/2247/1289 +f 35/2238/1280 34/2235/1277 99/2370/1380 95/2356/1372 +f 55/2279/1319 109/2392/1390 113/2368/1378 56/2281/1321 +f 55/2279/1319 54/2277/1317 105/2382/1386 109/2392/1390 +f 49/2266/1308 48/2263/1305 81/2326/1358 85/2334/1362 +f 353/2364/1376 321/2363/1375 346/2232/1274 354/2231/1273 +f 36/2240/1282 35/2238/1280 95/2356/1372 91/2348/1368 +f 43/2254/1296 42/2252/1294 65/2302/1342 66/2300/1340 +f 45/2257/1299 68/2306/1346 73/2311/1351 46/2260/1302 +f 46/2260/1302 73/2311/1351 77/2314/1354 47/2261/1303 +f 44/2255/1297 67/2299/1339 68/2306/1346 45/2257/1299 +f 52/2273/1313 97/2360/1374 101/2374/1382 53/2276/1316 +f 34/2235/1277 33/2234/1276 103/2378/1384 99/2370/1380 +f 89/2342/1366 50/2267/1309 49/2266/1308 85/2334/1362 +f 449/2657/1461 450/2658/181 451/2659/1462 452/2660/1463 +f 456/2661/1464 457/2662/1465 450/2658/181 449/2657/1461 +f 452/2660/1463 451/2659/1462 458/2663/1466 453/2664/1467 +f 453/2664/1467 458/2663/1466 459/2665/441 454/2666/1468 +f 454/2667/1468 459/2668/441 460/2669/1469 455/2670/1470 +f 455/2670/1470 460/2669/1469 457/2662/1465 456/2661/1464 +f 461/2671/1471 462/2672/441 463/2673/1466 464/2674/1472 +f 468/2675/1473 469/2676/1469 462/2672/441 461/2671/1471 +f 464/2674/1472 463/2673/1466 470/2677/1462 465/2678/1474 +f 465/2678/1474 470/2677/1462 471/2679/181 466/2680/1475 +f 466/2681/1475 471/2682/181 472/2683/1465 467/2684/1476 +f 467/2684/1476 472/2683/1465 469/2676/1469 468/2675/1473 +f 473/2685/1477 474/2686/25 475/2687/1478 476/2688/1479 +f 480/2689/1480 481/2690/1481 474/2686/25 473/2685/1477 +f 476/2688/1479 475/2687/1478 482/2691/1482 477/2692/1483 +f 477/2692/1483 482/2691/1482 483/2693/57 478/2694/1484 +f 478/2695/1484 483/2696/57 484/2697/1485 479/2698/1486 +f 479/2698/1486 484/2697/1485 481/2690/1481 480/2689/1480 +f 485/2699/1487 486/2700/57 487/2701/1482 488/2702/1488 +f 492/2703/1489 493/2704/1485 486/2700/57 485/2699/1487 +f 488/2702/1488 487/2701/1482 494/2705/1478 489/2706/1490 +f 489/2706/1490 494/2705/1478 495/2707/25 490/2708/1491 +f 490/2709/1491 495/2710/25 496/2711/1481 491/2712/1492 +f 491/2712/1492 496/2711/1481 493/2704/1485 492/2703/1489 +f 497/2713/1493 498/2714/446 499/2715/1494 500/2716/1495 +f 504/2717/1496 505/2718/1497 498/2714/446 497/2713/1493 +f 500/2716/1495 499/2715/1494 506/2719/1498 501/2720/1499 +f 501/2720/1499 506/2719/1498 507/2721/186 502/2722/1500 +f 502/2723/1500 507/2724/186 508/2725/1501 503/2726/1502 +f 503/2726/1502 508/2725/1501 505/2718/1497 504/2717/1496 +f 509/2727/1503 510/2728/186 511/2729/1498 512/2730/1504 +f 516/2731/1505 517/2732/1501 510/2728/186 509/2727/1503 +f 512/2730/1504 511/2729/1498 518/2733/1494 513/2734/1506 +f 513/2734/1506 518/2733/1494 519/2735/446 514/2736/1507 +f 514/2737/1507 519/2738/446 520/2739/1497 515/2740/1508 +f 515/2740/1508 520/2739/1497 517/2732/1501 516/2731/1505 +f 521/2741/1509 522/2742/19 523/2743/1510 524/2744/1511 +f 528/2745/1512 529/2746/1513 522/2742/19 521/2741/1509 +f 524/2744/1511 523/2743/1510 530/2747/1514 525/2748/1515 +f 525/2748/1515 530/2747/1514 531/2749/20 526/2750/1516 +f 526/2751/1516 531/2752/20 532/2753/1517 527/2754/1518 +f 527/2754/1518 532/2753/1517 529/2746/1513 528/2745/1512 +f 533/2755/1519 534/2756/20 535/2757/1514 536/2758/1520 +f 540/2759/1521 541/2760/1517 534/2756/20 533/2755/1519 +f 536/2758/1520 535/2757/1514 542/2761/1510 537/2762/1522 +f 537/2762/1522 542/2761/1510 543/2763/19 538/2764/1523 +f 538/2765/1523 543/2766/19 544/2767/1513 539/2768/1524 +f 539/2768/1524 544/2767/1513 541/2760/1517 540/2759/1521 +f 545/2769/1468 546/2770/441 547/2771/1469 548/2772/1470 +f 552/2773/1467 553/2774/1466 546/2770/441 545/2769/1468 +f 548/2772/1470 547/2771/1469 554/2775/1465 549/2776/1464 +f 549/2776/1464 554/2775/1465 555/2777/181 550/2778/1461 +f 550/2779/1461 555/2780/181 556/2781/1462 551/2782/1463 +f 551/2782/1463 556/2781/1462 553/2774/1466 552/2773/1467 +f 557/2783/1475 558/2784/181 559/2785/1465 560/2786/1476 +f 564/2787/1474 565/2788/1462 558/2784/181 557/2783/1475 +f 560/2786/1476 559/2785/1465 566/2789/1469 561/2790/1473 +f 561/2790/1473 566/2789/1469 567/2791/441 562/2792/1471 +f 562/2793/1471 567/2794/441 568/2795/1466 563/2796/1472 +f 563/2796/1472 568/2795/1466 565/2788/1462 564/2787/1474 +f 569/2797/1484 570/2798/57 571/2799/1485 572/2800/1486 +f 576/2801/1483 577/2802/1482 570/2798/57 569/2797/1484 +f 572/2800/1486 571/2799/1485 578/2803/1481 573/2804/1480 +f 573/2804/1480 578/2803/1481 579/2805/25 574/2806/1477 +f 574/2807/1477 579/2808/25 580/2809/1478 575/2810/1479 +f 575/2810/1479 580/2809/1478 577/2802/1482 576/2801/1483 +f 581/2811/1491 582/2812/25 583/2813/1481 584/2814/1492 +f 588/2815/1490 589/2816/1478 582/2812/25 581/2811/1491 +f 584/2814/1492 583/2813/1481 590/2817/1485 585/2818/1489 +f 585/2818/1489 590/2817/1485 591/2819/57 586/2820/1487 +f 586/2821/1487 591/2822/57 592/2823/1482 587/2824/1488 +f 587/2824/1488 592/2823/1482 589/2816/1478 588/2815/1490 +f 593/2825/1500 594/2826/186 595/2827/1501 596/2828/1502 +f 600/2829/1499 601/2830/1498 594/2826/186 593/2825/1500 +f 596/2828/1502 595/2827/1501 602/2831/1497 597/2832/1496 +f 597/2832/1496 602/2831/1497 603/2833/446 598/2834/1493 +f 598/2835/1493 603/2836/446 604/2837/1494 599/2838/1495 +f 599/2838/1495 604/2837/1494 601/2830/1498 600/2829/1499 +f 605/2839/1507 606/2840/446 607/2841/1497 608/2842/1508 +f 612/2843/1506 613/2844/1494 606/2840/446 605/2839/1507 +f 608/2842/1508 607/2841/1497 614/2845/1501 609/2846/1505 +f 609/2846/1505 614/2845/1501 615/2847/186 610/2848/1503 +f 610/2849/1503 615/2850/186 616/2851/1498 611/2852/1504 +f 611/2852/1504 616/2851/1498 613/2844/1494 612/2843/1506 +f 617/2853/1516 618/2854/20 619/2855/1517 620/2856/1518 +f 624/2857/1515 625/2858/1514 618/2854/20 617/2853/1516 +f 620/2856/1518 619/2855/1517 626/2859/1513 621/2860/1512 +f 621/2860/1512 626/2859/1513 627/2861/19 622/2862/1509 +f 622/2863/1509 627/2864/19 628/2865/1510 623/2866/1511 +f 623/2866/1511 628/2865/1510 625/2858/1514 624/2857/1515 +f 629/2867/1523 630/2868/19 631/2869/1513 632/2870/1524 +f 636/2871/1522 637/2872/1510 630/2868/19 629/2867/1523 +f 632/2870/1524 631/2869/1513 638/2873/1517 633/2874/1521 +f 633/2874/1521 638/2873/1517 639/2875/20 634/2876/1519 +f 634/2877/1519 639/2878/20 640/2879/1514 635/2880/1520 +f 635/2880/1520 640/2879/1514 637/2872/1510 636/2871/1522 +f 38/2244/1286 83/2330/1360 79/2316/1356 39/2246/1288 +f 81/2326/1358 48/2263/1305 47/2261/1303 77/2314/1354 +f 51/2272/1312 93/2361/1370 97/2360/1374 52/2273/1313 diff --git a/mods/pipeworks/models/pipeworks_valve_off_lowpoly.obj b/mods/pipeworks/models/pipeworks_valve_off_lowpoly.obj new file mode 100755 index 0000000..c86d8da --- /dev/null +++ b/mods/pipeworks/models/pipeworks_valve_off_lowpoly.obj @@ -0,0 +1,286 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-valve-off.blend' +# www.blender.org +o Cube.003_Cube.003_None +v 0.312500 0.343750 0.062500 +v -0.093750 0.343750 0.062500 +v -0.093750 0.281250 0.062500 +v 0.312500 0.281250 0.062500 +v -0.093750 0.343750 -0.062500 +v -0.093750 0.281250 -0.062500 +v 0.312500 0.343750 -0.062500 +v 0.312500 0.281250 -0.062500 +v 0.031250 0.281250 0.031250 +v -0.031250 0.281250 0.031250 +v -0.031250 0.250000 0.031250 +v 0.031250 0.250000 0.031250 +v -0.031250 0.281250 -0.031250 +v -0.031250 0.250000 -0.031250 +v 0.031250 0.281250 -0.031250 +v 0.031250 0.250000 -0.031250 +v 0.250000 0.250000 0.250000 +v -0.250000 0.250000 0.250000 +v -0.250000 -0.250000 0.250000 +v 0.250000 -0.250000 0.250000 +v -0.250000 0.250000 -0.250000 +v -0.250000 -0.250000 -0.250000 +v 0.250000 0.250000 -0.250000 +v 0.250000 -0.250000 -0.250000 +v -0.156250 -0.064721 0.500000 +v -0.156250 -0.064721 0.468750 +v -0.064721 -0.156250 0.500000 +v -0.064721 -0.156250 0.468750 +v 0.064721 -0.156250 0.500000 +v 0.064721 -0.156250 0.468750 +v 0.156250 -0.064721 0.500000 +v 0.156250 -0.064721 0.468750 +v 0.156250 0.064721 0.500000 +v 0.156250 0.064721 0.468750 +v 0.064721 0.156250 0.500000 +v 0.064721 0.156250 0.468750 +v -0.064721 0.156250 0.500000 +v -0.064721 0.156250 0.468750 +v -0.156250 0.064721 0.500000 +v -0.156250 0.064721 0.468750 +v -0.125000 -0.051777 0.468750 +v -0.125000 -0.051777 -0.468750 +v -0.051777 -0.125000 0.468750 +v -0.051777 -0.125000 -0.468750 +v 0.051777 -0.125000 0.468750 +v 0.051777 -0.125000 -0.468750 +v 0.125000 -0.051777 0.468750 +v 0.125000 -0.051777 -0.468750 +v 0.125000 0.051777 0.468750 +v 0.125000 0.051777 -0.468750 +v 0.051777 0.125000 0.468750 +v 0.051777 0.125000 -0.468750 +v -0.051777 0.125000 0.468750 +v -0.051777 0.125000 -0.468750 +v -0.125000 0.051777 0.468750 +v -0.125000 0.051777 -0.468750 +v -0.156250 -0.064721 -0.468750 +v -0.156250 -0.064721 -0.500000 +v -0.064721 -0.156250 -0.468750 +v -0.064721 -0.156250 -0.500000 +v 0.064721 -0.156250 -0.468750 +v 0.064721 -0.156250 -0.500000 +v 0.156250 -0.064721 -0.468750 +v 0.156250 -0.064721 -0.500000 +v 0.156250 0.064721 -0.468750 +v 0.156250 0.064721 -0.500000 +v 0.064721 0.156250 -0.468750 +v 0.064721 0.156250 -0.500000 +v -0.064721 0.156250 -0.468750 +v -0.064721 0.156250 -0.500000 +v -0.156250 0.064721 -0.468750 +v -0.156250 0.064721 -0.500000 +vt 0.2656 0.2344 +vt 0.4688 0.2344 +vt 0.4688 0.2656 +vt 0.2656 0.2656 +vt 0.2656 0.1875 +vt 0.3281 0.1875 +vt 0.3281 0.2188 +vt 0.2656 0.2188 +vt 0.4688 0.3125 +vt 0.2656 0.3125 +vt 0.2656 0.2812 +vt 0.4688 0.2812 +vt 0.4062 0.2188 +vt 0.3438 0.2188 +vt 0.3438 0.1875 +vt 0.4062 0.1875 +vt 0.4688 0.4688 +vt 0.2656 0.4688 +vt 0.2656 0.4062 +vt 0.4688 0.4062 +vt 0.4688 0.3906 +vt 0.2656 0.3906 +vt 0.2656 0.3281 +vt 0.4688 0.3281 +vt 0.0391 0.2031 +vt 0.0078 0.2031 +vt 0.0078 0.1875 +vt 0.0391 0.1875 +vt 0.0859 0.2031 +vt 0.0547 0.2031 +vt 0.0547 0.1875 +vt 0.0859 0.1875 +vt 0.1484 0.1875 +vt 0.1797 0.1875 +vt 0.1797 0.2031 +vt 0.1484 0.2031 +vt 0.1328 0.2031 +vt 0.1016 0.2031 +vt 0.1016 0.1875 +vt 0.1328 0.1875 +vt 0.5156 0.4844 +vt 0.5156 0.7344 +vt 0.2656 0.7344 +vt 0.2656 0.4844 +vt 0.0000 0.4688 +vt 0.0000 0.2188 +vt 0.2500 0.2188 +vt 0.2500 0.4688 +vt 0.5156 1.0000 +vt 0.2656 1.0000 +vt 0.2656 0.7500 +vt 0.5156 0.7500 +vt 0.2500 0.7344 +vt 0.0000 0.7344 +vt 0.0000 0.4844 +vt 0.2500 0.4844 +vt 0.7812 1.0000 +vt 0.5312 1.0000 +vt 0.5312 0.7500 +vt 0.7812 0.7500 +vt 0.0008 0.7500 +vt 0.2502 0.7500 +vt 0.2502 0.9994 +vt 0.0008 0.9994 +vt 0.8516 0.4453 +vt 0.8047 0.4922 +vt 0.7422 0.4922 +vt 0.6953 0.4453 +vt 0.6953 0.3828 +vt 0.7422 0.3359 +vt 0.8047 0.3359 +vt 0.8516 0.3828 +vt 0.6172 0.4922 +vt 0.6641 0.4453 +vt 0.6641 0.3828 +vt 0.6172 0.3359 +vt 0.5547 0.3359 +vt 0.5078 0.3828 +vt 0.5078 0.4453 +vt 0.5547 0.4922 +vt 0.6641 0.4453 +vt 0.6172 0.4922 +vt 0.5547 0.4922 +vt 0.5078 0.4453 +vt 0.5078 0.3828 +vt 0.5547 0.3359 +vt 0.6172 0.3359 +vt 0.6641 0.3828 +vt 0.8047 0.4922 +vt 0.8516 0.4453 +vt 0.8516 0.3828 +vt 0.8047 0.3359 +vt 0.7422 0.3359 +vt 0.6953 0.3828 +vt 0.6953 0.4453 +vt 0.7422 0.4922 +vt 0.8984 0.2969 +vt 0.8984 0.2812 +vt 0.9297 0.2812 +vt 0.9297 0.2969 +vt 0.9609 0.2812 +vt 0.9609 0.2969 +vt 0.9922 0.2812 +vt 0.9922 0.2969 +vt 0.7422 0.2969 +vt 0.7422 0.2812 +vt 0.7734 0.2812 +vt 0.7734 0.2969 +vt 0.8047 0.2812 +vt 0.8047 0.2969 +vt 0.8359 0.2812 +vt 0.8359 0.2969 +vt 0.8672 0.2812 +vt 0.8672 0.2969 +vt 0.6797 0.2969 +vt 0.6797 0.2812 +vt 0.7109 0.2812 +vt 0.7109 0.2969 +vt 0.6484 0.2969 +vt 0.6484 0.2812 +vt 0.7422 0.2812 +vt 0.7422 0.2969 +vt 0.4922 0.2969 +vt 0.4922 0.2812 +vt 0.5234 0.2812 +vt 0.5234 0.2969 +vt 0.5547 0.2812 +vt 0.5547 0.2969 +vt 0.5859 0.2812 +vt 0.5859 0.2969 +vt 0.6172 0.2812 +vt 0.6172 0.2969 +vt 0.4922 0.1328 +vt 0.4922 0.1016 +vt 0.9922 0.1016 +vt 0.9922 0.1328 +vt 0.4922 0.1953 +vt 0.4922 0.1641 +vt 0.9922 0.1641 +vt 0.9922 0.1953 +vt 0.4922 0.2266 +vt 0.9922 0.2266 +vt 0.9922 0.2578 +vt 0.4922 0.2578 +vt 0.9922 0.0391 +vt 0.9922 0.0703 +vt 0.4922 0.0703 +vt 0.4922 0.0391 +vt 0.9922 0.0078 +vt 0.4922 0.0078 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 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.9239 -0.3827 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.9239 0.3827 -0.0000 +g Cube.003_Cube.003_None_Cube.003_Cube.003_None_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/5/2 5/6/2 6/7/2 3/8/2 +f 5/9/3 7/10/3 8/11/3 6/12/3 +f 7/13/4 1/14/4 4/15/4 8/16/4 +f 4/17/5 3/18/5 6/19/5 8/20/5 +f 7/21/6 5/22/6 2/23/6 1/24/6 +f 9/25/1 10/26/1 11/27/1 12/28/1 +f 10/29/2 13/30/2 14/31/2 11/32/2 +f 13/33/3 15/34/3 16/35/3 14/36/3 +f 15/37/4 9/38/4 12/39/4 16/40/4 +f 17/41/1 18/42/1 19/43/1 20/44/1 +f 18/45/2 21/46/2 22/47/2 19/48/2 +f 21/49/3 23/50/3 24/51/3 22/52/3 +f 23/53/4 17/54/4 20/55/4 24/56/4 +f 20/57/5 19/58/5 22/59/5 24/60/5 +f 23/61/6 21/62/6 18/63/6 17/64/6 +f 28/65/3 26/66/3 40/67/3 38/68/3 36/69/3 34/70/3 32/71/3 30/72/3 +f 25/73/1 27/74/1 29/75/1 31/76/1 33/77/1 35/78/1 37/79/1 39/80/1 +f 60/81/3 58/82/3 72/83/3 70/84/3 68/85/3 66/86/3 64/87/3 62/88/3 +f 57/89/1 59/90/1 61/91/1 63/92/1 65/93/1 67/94/1 69/95/1 71/96/1 +s 1 +f 25/97/7 26/98/7 28/99/8 27/100/8 +f 27/100/8 28/99/8 30/101/9 29/102/9 +f 29/102/9 30/101/9 32/103/10 31/104/10 +f 31/105/10 32/106/10 34/107/11 33/108/11 +f 33/108/11 34/107/11 36/109/12 35/110/12 +f 35/110/12 36/109/12 38/111/13 37/112/13 +f 37/112/13 38/111/13 40/113/14 39/114/14 +f 39/114/14 40/113/14 26/98/7 25/97/7 +f 59/115/8 60/116/8 62/117/9 61/118/9 +f 57/119/7 58/120/7 60/116/8 59/115/8 +f 61/118/9 62/117/9 64/121/10 63/122/10 +f 63/123/10 64/124/10 66/125/11 65/126/11 +f 65/126/11 66/125/11 68/127/12 67/128/12 +f 67/128/12 68/127/12 70/129/13 69/130/13 +f 69/130/13 70/129/13 72/131/14 71/132/14 +f 71/132/14 72/131/14 58/120/7 57/119/7 +f 54/133/13 56/134/14 55/135/14 53/136/13 +f 50/137/11 52/138/12 51/139/12 49/140/11 +f 48/141/10 47/142/10 45/143/9 46/144/9 +f 54/133/13 53/136/13 51/139/12 52/138/12 +f 43/145/8 41/146/7 42/147/7 44/148/8 +f 45/149/9 43/145/8 44/148/8 46/150/9 +f 48/141/10 50/137/11 49/140/11 47/142/10 +f 41/146/7 55/135/14 56/134/14 42/147/7 diff --git a/mods/pipeworks/models/pipeworks_valve_on.obj b/mods/pipeworks/models/pipeworks_valve_on.obj new file mode 100755 index 0000000..61681f8 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_valve_on.obj @@ -0,0 +1,8136 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-valve-on.blend' +# www.blender.org +o Pipe_Cylinder.002 +v -0.038455 0.126770 -0.468750 +v -0.012985 0.131837 -0.468750 +v 0.012984 0.131837 -0.468750 +v 0.038455 0.126770 -0.468750 +v 0.062448 0.116832 -0.468750 +v 0.084041 0.102404 -0.468750 +v 0.102404 0.084041 -0.468750 +v 0.116832 0.062448 -0.468750 +v 0.126770 0.038455 -0.468750 +v 0.131836 0.012985 -0.468750 +v 0.131836 -0.012985 -0.468750 +v 0.116832 -0.062448 -0.468750 +v 0.102404 -0.084041 -0.468750 +v 0.084041 -0.102404 -0.468750 +v 0.062448 -0.116832 -0.468750 +v 0.038455 -0.126770 -0.468750 +v 0.012985 -0.131836 -0.468750 +v -0.012985 -0.131836 -0.468750 +v -0.038455 -0.126770 -0.468750 +v -0.062448 -0.116832 -0.468750 +v -0.102404 -0.084041 -0.468750 +v -0.084041 -0.102404 -0.468750 +v -0.116832 -0.062448 -0.468750 +v -0.126770 -0.038455 -0.468750 +v -0.131837 0.012985 -0.468750 +v -0.116832 0.062448 -0.468750 +v -0.126770 0.038455 -0.468750 +v -0.102404 0.084041 -0.468750 +v -0.084041 0.102404 -0.468750 +v -0.062448 0.116832 -0.468750 +v 0.126770 -0.038455 -0.468750 +v -0.131837 -0.012985 -0.468750 +v -0.059210 0.110774 -0.437501 +v -0.036461 0.120197 -0.437501 +v -0.012312 0.125000 -0.437501 +v 0.012311 0.125001 -0.437501 +v 0.036461 0.120197 -0.437501 +v 0.059210 0.110774 -0.437501 +v 0.079683 0.097094 -0.437501 +v 0.097094 0.079683 -0.437501 +v 0.110774 0.059210 -0.437501 +v 0.120197 0.036461 -0.437501 +v 0.125000 0.012312 -0.437501 +v 0.125000 -0.012311 -0.437501 +v 0.120197 -0.036461 -0.437501 +v 0.110774 -0.059210 -0.437501 +v 0.097094 -0.079683 -0.437501 +v 0.079683 -0.097094 -0.437501 +v 0.059210 -0.110774 -0.437501 +v 0.036461 -0.120197 -0.437501 +v 0.012311 -0.125000 -0.437501 +v -0.012312 -0.125000 -0.437501 +v -0.036461 -0.120197 -0.437501 +v -0.059210 -0.110774 -0.437501 +v -0.079683 -0.097094 -0.437501 +v -0.097094 -0.079683 -0.437501 +v -0.110774 -0.059210 -0.437501 +v -0.120197 -0.036461 -0.437501 +v -0.125001 -0.012311 -0.437501 +v -0.125001 0.012311 -0.437501 +v -0.120197 0.036461 -0.437501 +v -0.110774 0.059210 -0.437501 +v -0.097094 0.079683 -0.437501 +v -0.079683 0.097094 -0.437501 +v 0.120197 0.036461 0.437501 +v 0.125001 0.012312 0.437501 +v 0.125001 -0.012311 0.437501 +v 0.120197 -0.036461 0.437501 +v 0.110774 0.059210 0.437501 +v 0.131837 0.012985 0.468750 +v 0.126770 0.038455 0.468750 +v 0.131837 -0.012985 0.468750 +v 0.110774 -0.059210 0.437501 +v 0.126770 -0.038455 0.468750 +v 0.097094 0.079683 0.437501 +v 0.116832 0.062448 0.468750 +v 0.097094 -0.079683 0.437501 +v 0.116832 -0.062448 0.468750 +v 0.079683 0.097094 0.437501 +v 0.102404 0.084041 0.468750 +v 0.079683 -0.097094 0.437501 +v 0.102404 -0.084041 0.468750 +v 0.059210 0.110774 0.437501 +v 0.084041 0.102404 0.468750 +v 0.059210 -0.110774 0.437501 +v 0.084041 -0.102404 0.468750 +v 0.036461 0.120197 0.437501 +v 0.062448 0.116832 0.468750 +v 0.036461 -0.120197 0.437501 +v 0.062448 -0.116832 0.468750 +v 0.012311 0.125000 0.437501 +v 0.038455 0.126770 0.468750 +v 0.012311 -0.125001 0.437501 +v 0.038455 -0.126770 0.468750 +v -0.012312 0.125000 0.437501 +v 0.012985 0.131836 0.468750 +v -0.012311 -0.125001 0.437501 +v 0.012985 -0.131837 0.468750 +v -0.036461 0.120197 0.437501 +v -0.012985 0.131836 0.468750 +v -0.036461 -0.120197 0.437501 +v -0.012985 -0.131837 0.468750 +v -0.059210 0.110774 0.437501 +v -0.038455 0.126770 0.468750 +v -0.059210 -0.110774 0.437501 +v -0.038455 -0.126770 0.468750 +v -0.079683 0.097094 0.437501 +v -0.062448 0.116832 0.468750 +v -0.079683 -0.097094 0.437501 +v -0.062448 -0.116832 0.468750 +v -0.097094 0.079683 0.437501 +v -0.084041 0.102404 0.468750 +v -0.097094 -0.079683 0.437501 +v -0.084041 -0.102404 0.468750 +v -0.110774 0.059210 0.437501 +v -0.102404 0.084041 0.468750 +v -0.110774 -0.059210 0.437501 +v -0.102404 -0.084041 0.468750 +v -0.120197 0.036461 0.437501 +v -0.116832 0.062448 0.468750 +v -0.120197 -0.036461 0.437501 +v -0.116832 -0.062448 0.468750 +v -0.125000 0.012311 0.437501 +v -0.126770 0.038455 0.468750 +v -0.125000 -0.012311 0.437501 +v -0.126770 -0.038455 0.468750 +v -0.131836 0.012985 0.468750 +v -0.131836 -0.012985 0.468750 +v -0.063644 0.130078 0.460912 +v -0.063644 0.130078 0.468749 +v -0.062467 0.139022 0.468749 +v -0.062467 0.139022 0.460912 +v -0.054132 0.142474 0.460912 +v -0.046976 0.136982 0.460912 +v -0.048153 0.128039 0.460912 +v -0.056487 0.124587 0.460912 +v -0.056487 0.124587 0.468749 +v -0.054132 0.142474 0.468749 +v -0.046976 0.136982 0.468749 +v -0.048153 0.128039 0.468749 +v -0.046976 0.136982 -0.460914 +v -0.046976 0.136982 -0.468751 +v -0.054133 0.142474 -0.468751 +v -0.054133 0.142474 -0.460914 +v -0.062467 0.139022 -0.460914 +v -0.063644 0.130078 -0.460914 +v -0.056488 0.124587 -0.460914 +v -0.048153 0.128039 -0.460914 +v -0.048153 0.128039 -0.468751 +v -0.062467 0.139022 -0.468751 +v -0.063644 0.130078 -0.468751 +v -0.056488 0.124587 -0.468751 +v -0.136982 0.046976 0.460912 +v -0.136982 0.046976 0.468749 +v -0.142474 0.054133 0.468749 +v -0.142474 0.054133 0.460912 +v -0.139022 0.062467 0.460912 +v -0.130078 0.063644 0.460912 +v -0.124587 0.056488 0.460912 +v -0.128039 0.048154 0.460912 +v -0.128039 0.048154 0.468749 +v -0.139022 0.062467 0.468749 +v -0.130078 0.063644 0.468749 +v -0.124587 0.056488 0.468749 +v -0.130078 0.063644 -0.460914 +v -0.130078 0.063644 -0.468751 +v -0.139022 0.062467 -0.468751 +v -0.139022 0.062467 -0.460914 +v -0.142474 0.054133 -0.460914 +v -0.136982 0.046976 -0.460914 +v -0.128039 0.048153 -0.460914 +v -0.124587 0.056487 -0.460914 +v -0.124587 0.056487 -0.468751 +v -0.142474 0.054133 -0.468751 +v -0.136982 0.046976 -0.468751 +v -0.128039 0.048153 -0.468751 +v -0.130078 -0.063644 0.460912 +v -0.130078 -0.063644 0.468749 +v -0.139022 -0.062467 0.468749 +v -0.139022 -0.062467 0.460912 +v -0.142474 -0.054132 0.460912 +v -0.136982 -0.046976 0.460912 +v -0.128039 -0.048153 0.460912 +v -0.124587 -0.056487 0.460912 +v -0.124587 -0.056487 0.468749 +v -0.142474 -0.054132 0.468749 +v -0.136982 -0.046976 0.468749 +v -0.128039 -0.048153 0.468749 +v -0.136982 -0.046976 -0.460914 +v -0.136982 -0.046976 -0.468751 +v -0.142474 -0.054133 -0.468751 +v -0.142474 -0.054133 -0.460914 +v -0.139022 -0.062467 -0.460914 +v -0.130078 -0.063644 -0.460914 +v -0.124587 -0.056488 -0.460914 +v -0.128039 -0.048153 -0.460914 +v -0.128039 -0.048153 -0.468751 +v -0.139022 -0.062467 -0.468751 +v -0.130078 -0.063644 -0.468751 +v -0.124587 -0.056488 -0.468751 +v -0.046976 -0.136982 0.460912 +v -0.046976 -0.136982 0.468749 +v -0.054133 -0.142474 0.468749 +v -0.054133 -0.142474 0.460912 +v -0.062467 -0.139022 0.460912 +v -0.063644 -0.130078 0.460912 +v -0.056488 -0.124587 0.460912 +v -0.048153 -0.128039 0.460912 +v -0.048153 -0.128039 0.468749 +v -0.062467 -0.139022 0.468749 +v -0.063644 -0.130078 0.468749 +v -0.056488 -0.124587 0.468749 +v -0.063644 -0.130078 -0.460914 +v -0.063644 -0.130078 -0.468751 +v -0.062467 -0.139022 -0.468751 +v -0.062467 -0.139022 -0.460914 +v -0.054133 -0.142474 -0.460914 +v -0.046976 -0.136982 -0.460914 +v -0.048153 -0.128039 -0.460914 +v -0.056487 -0.124587 -0.460914 +v -0.056487 -0.124587 -0.468751 +v -0.054133 -0.142474 -0.468751 +v -0.046976 -0.136982 -0.468751 +v -0.048153 -0.128039 -0.468751 +v 0.063644 -0.130078 0.460912 +v 0.063644 -0.130078 0.468749 +v 0.062467 -0.139022 0.468749 +v 0.062467 -0.139022 0.460912 +v 0.054132 -0.142474 0.460912 +v 0.046976 -0.136982 0.460912 +v 0.048153 -0.128039 0.460912 +v 0.056487 -0.124587 0.460912 +v 0.056487 -0.124587 0.468749 +v 0.054132 -0.142474 0.468749 +v 0.046976 -0.136982 0.468749 +v 0.048153 -0.128039 0.468749 +v 0.046976 -0.136982 -0.460914 +v 0.046976 -0.136982 -0.468751 +v 0.054133 -0.142474 -0.468751 +v 0.054133 -0.142474 -0.460914 +v 0.062467 -0.139022 -0.460914 +v 0.063644 -0.130078 -0.460914 +v 0.056487 -0.124587 -0.460914 +v 0.048153 -0.128039 -0.460914 +v 0.048153 -0.128039 -0.468751 +v 0.062467 -0.139022 -0.468751 +v 0.063644 -0.130078 -0.468751 +v 0.056487 -0.124587 -0.468751 +v 0.136982 -0.046976 0.460912 +v 0.136982 -0.046976 0.468749 +v 0.142474 -0.054133 0.468749 +v 0.142474 -0.054133 0.460912 +v 0.139022 -0.062467 0.460912 +v 0.130078 -0.063644 0.460912 +v 0.124587 -0.056488 0.460912 +v 0.128039 -0.048153 0.460912 +v 0.128039 -0.048153 0.468749 +v 0.139022 -0.062467 0.468749 +v 0.130078 -0.063644 0.468749 +v 0.124587 -0.056488 0.468749 +v 0.130078 -0.063644 -0.460914 +v 0.130078 -0.063644 -0.468751 +v 0.139022 -0.062467 -0.468751 +v 0.139022 -0.062467 -0.460914 +v 0.142474 -0.054132 -0.460914 +v 0.136982 -0.046976 -0.460914 +v 0.128039 -0.048153 -0.460914 +v 0.124587 -0.056487 -0.460914 +v 0.124587 -0.056487 -0.468751 +v 0.142474 -0.054132 -0.468751 +v 0.136982 -0.046976 -0.468751 +v 0.128039 -0.048153 -0.468751 +v 0.130078 0.063644 0.460912 +v 0.130078 0.063644 0.468749 +v 0.139022 0.062467 0.468749 +v 0.139022 0.062467 0.460912 +v 0.142474 0.054132 0.460912 +v 0.136982 0.046976 0.460912 +v 0.128039 0.048153 0.460912 +v 0.124587 0.056487 0.460912 +v 0.124587 0.056487 0.468749 +v 0.142474 0.054132 0.468749 +v 0.136982 0.046976 0.468749 +v 0.128039 0.048153 0.468749 +v 0.136982 0.046976 -0.460914 +v 0.136982 0.046976 -0.468751 +v 0.142474 0.054133 -0.468751 +v 0.142474 0.054133 -0.460914 +v 0.139022 0.062467 -0.460914 +v 0.130078 0.063644 -0.460914 +v 0.124587 0.056487 -0.460914 +v 0.128039 0.048153 -0.460914 +v 0.128039 0.048153 -0.468751 +v 0.139022 0.062467 -0.468751 +v 0.130078 0.063644 -0.468751 +v 0.124587 0.056487 -0.468751 +v 0.046976 0.136982 0.460912 +v 0.046976 0.136982 0.468749 +v 0.054133 0.142474 0.468749 +v 0.054133 0.142474 0.460912 +v 0.062467 0.139022 0.460912 +v 0.063644 0.130078 0.460912 +v 0.056488 0.124587 0.460912 +v 0.048154 0.128039 0.460912 +v 0.048154 0.128039 0.468749 +v 0.062467 0.139022 0.468749 +v 0.063644 0.130078 0.468749 +v 0.056488 0.124587 0.468749 +v 0.063644 0.130078 -0.460914 +v 0.063644 0.130078 -0.468751 +v 0.062467 0.139022 -0.468751 +v 0.062467 0.139022 -0.460914 +v 0.054132 0.142474 -0.460914 +v 0.046976 0.136982 -0.460914 +v 0.048153 0.128039 -0.460914 +v 0.056487 0.124587 -0.460914 +v 0.056487 0.124587 -0.468751 +v 0.054132 0.142474 -0.468751 +v 0.046976 0.136982 -0.468751 +v 0.048153 0.128039 -0.468751 +v 0.121367 0.099603 -0.500000 +v 0.138467 0.074012 -0.500000 +v 0.150245 0.045577 -0.500000 +v 0.156250 0.015390 -0.500000 +v 0.156250 -0.015389 -0.500000 +v 0.150245 -0.045576 -0.500000 +v 0.138467 -0.074012 -0.500000 +v 0.121367 -0.099603 -0.500000 +v 0.099603 -0.121367 -0.500000 +v 0.045576 -0.150245 -0.500000 +v -0.015389 -0.156250 -0.500000 +v -0.045576 -0.150245 -0.500000 +v -0.099603 -0.121367 -0.500000 +v -0.121367 -0.099603 -0.500000 +v -0.138467 -0.074012 -0.500000 +v -0.150245 -0.045576 -0.500000 +v -0.156250 -0.015389 -0.500000 +v -0.150245 0.045576 -0.500000 +v -0.138467 0.074012 -0.500000 +v -0.121367 0.099603 -0.500000 +v -0.074012 0.138467 -0.500000 +v -0.015389 0.156250 -0.500000 +v 0.015389 0.156250 -0.500000 +v 0.045576 0.150245 -0.500000 +v 0.074012 0.138467 -0.500000 +v 0.099603 0.121367 -0.500000 +v 0.074012 -0.138466 -0.500000 +v 0.015389 -0.156250 -0.500000 +v -0.074012 -0.138467 -0.500000 +v -0.156250 0.015389 -0.500000 +v -0.099603 0.121367 -0.500000 +v -0.045576 0.150245 -0.500000 +v 0.121367 0.099603 -0.468750 +v 0.099603 0.121367 -0.468750 +v 0.138467 0.074012 -0.468750 +v 0.150245 0.045577 -0.468750 +v 0.156250 0.015390 -0.468750 +v 0.156250 -0.015389 -0.468750 +v 0.150245 -0.045576 -0.468750 +v 0.138467 -0.074012 -0.468750 +v 0.121367 -0.099603 -0.468750 +v 0.099603 -0.121367 -0.468750 +v 0.074012 -0.138466 -0.468750 +v 0.045576 -0.150245 -0.468750 +v 0.015389 -0.156250 -0.468750 +v -0.015389 -0.156250 -0.468750 +v -0.045576 -0.150245 -0.468750 +v -0.074012 -0.138467 -0.468750 +v -0.099603 -0.121367 -0.468750 +v -0.121367 -0.099603 -0.468750 +v -0.138467 -0.074012 -0.468750 +v -0.150245 -0.045576 -0.468750 +v -0.156250 -0.015389 -0.468750 +v -0.156250 0.015389 -0.468750 +v -0.138467 0.074012 -0.468750 +v -0.150245 0.045576 -0.468750 +v -0.121367 0.099603 -0.468750 +v -0.099603 0.121367 -0.468750 +v -0.074012 0.138467 -0.468750 +v -0.045576 0.150245 -0.468750 +v 0.015389 0.156250 -0.468750 +v -0.015389 0.156250 -0.468750 +v 0.045576 0.150245 -0.468750 +v 0.074012 0.138467 -0.468750 +v 0.074012 -0.138466 0.468750 +v 0.045576 -0.150245 0.468750 +v 0.015389 -0.156250 0.468750 +v 0.099603 -0.121367 0.468750 +v -0.015389 -0.156250 0.468750 +v 0.138467 -0.074012 0.468750 +v 0.121367 -0.099603 0.468750 +v 0.099603 -0.121367 0.500000 +v 0.074012 -0.138467 0.500000 +v 0.045576 -0.150245 0.500000 +v 0.015389 -0.156250 0.500000 +v -0.015389 -0.156250 0.500000 +v 0.150245 -0.045576 0.468750 +v 0.121367 -0.099603 0.500000 +v -0.045576 -0.150245 0.468750 +v -0.045576 -0.150245 0.500000 +v 0.156250 -0.015389 0.468750 +v 0.150245 -0.045576 0.500000 +v 0.138467 -0.074012 0.500000 +v -0.074012 -0.138467 0.468750 +v -0.074012 -0.138467 0.500000 +v 0.156250 0.015389 0.468750 +v 0.156250 -0.015389 0.500000 +v -0.099603 -0.121367 0.468750 +v -0.099603 -0.121367 0.500000 +v 0.150245 0.045576 0.468750 +v 0.156250 0.015389 0.500000 +v -0.121367 -0.099603 0.468750 +v -0.121367 -0.099603 0.500000 +v 0.138467 0.074012 0.468750 +v 0.150245 0.045576 0.500000 +v -0.150245 -0.045576 0.468750 +v -0.138467 -0.074012 0.468750 +v -0.138467 -0.074012 0.500000 +v 0.121367 0.099603 0.468750 +v 0.138467 0.074012 0.500000 +v -0.156250 -0.015389 0.468750 +v -0.150245 -0.045576 0.500000 +v 0.099603 0.121367 0.468750 +v 0.121367 0.099603 0.500000 +v -0.156250 0.015389 0.468750 +v -0.156250 -0.015389 0.500000 +v 0.074012 0.138466 0.468750 +v 0.099604 0.121367 0.500000 +v -0.150245 0.045576 0.468750 +v -0.156250 0.015389 0.500000 +v 0.045577 0.150245 0.468750 +v 0.074012 0.138466 0.500000 +v -0.138467 0.074012 0.468750 +v -0.150245 0.045576 0.500000 +v 0.015389 0.156249 0.468750 +v 0.045577 0.150245 0.500000 +v -0.015389 0.156250 0.500000 +v -0.121367 0.099603 0.468750 +v -0.138467 0.074012 0.500000 +v -0.015389 0.156250 0.468750 +v 0.015389 0.156250 0.500000 +v -0.074012 0.138467 0.500000 +v -0.045576 0.150245 0.500000 +v -0.099603 0.121367 0.500000 +v -0.121367 0.099603 0.500000 +v -0.045576 0.150245 0.468750 +v -0.099603 0.121367 0.468750 +v -0.074012 0.138467 0.468750 +v -0.108578 0.095821 0.460912 +v -0.108578 0.095821 0.468749 +v -0.110913 0.104534 0.468749 +v -0.110913 0.104534 0.460912 +v -0.104534 0.110913 0.460912 +v -0.095821 0.108578 0.460912 +v -0.093486 0.099865 0.460912 +v -0.099865 0.093486 0.460912 +v -0.099865 0.093486 0.468749 +v -0.104534 0.110913 0.468749 +v -0.095821 0.108578 0.468749 +v -0.093486 0.099865 0.468749 +v -0.095821 0.108578 -0.460914 +v -0.095821 0.108578 -0.468751 +v -0.104534 0.110913 -0.468751 +v -0.104534 0.110913 -0.460914 +v -0.110913 0.104534 -0.460914 +v -0.108578 0.095821 -0.460914 +v -0.099865 0.093486 -0.460914 +v -0.093486 0.099865 -0.460914 +v -0.093486 0.099865 -0.468751 +v -0.110913 0.104534 -0.468751 +v -0.108578 0.095821 -0.468751 +v -0.099865 0.093486 -0.468751 +v -0.144532 -0.009021 0.460912 +v -0.144532 -0.009021 0.468749 +v -0.152344 -0.004510 0.468749 +v -0.152344 -0.004510 0.460912 +v -0.152344 0.004510 0.460912 +v -0.144532 0.009021 0.460912 +v -0.136720 0.004510 0.460912 +v -0.136720 -0.004510 0.460912 +v -0.136720 -0.004510 0.468749 +v -0.152344 0.004510 0.468749 +v -0.144532 0.009021 0.468749 +v -0.136720 0.004510 0.468749 +v -0.144532 0.009021 -0.460914 +v -0.144532 0.009021 -0.468751 +v -0.152344 0.004510 -0.468751 +v -0.152344 0.004510 -0.460914 +v -0.152344 -0.004510 -0.460914 +v -0.144532 -0.009021 -0.460914 +v -0.136720 -0.004510 -0.460914 +v -0.136720 0.004510 -0.460914 +v -0.136720 0.004510 -0.468751 +v -0.152344 -0.004510 -0.468751 +v -0.144532 -0.009021 -0.468751 +v -0.136720 -0.004510 -0.468751 +v -0.095821 -0.108578 0.460912 +v -0.095821 -0.108578 0.468749 +v -0.104534 -0.110913 0.468749 +v -0.104534 -0.110913 0.460912 +v -0.110913 -0.104534 0.460912 +v -0.108578 -0.095821 0.460912 +v -0.099865 -0.093486 0.460912 +v -0.093486 -0.099865 0.460912 +v -0.093486 -0.099865 0.468749 +v -0.110913 -0.104534 0.468749 +v -0.108578 -0.095821 0.468749 +v -0.099865 -0.093486 0.468749 +v -0.108578 -0.095821 -0.460914 +v -0.108578 -0.095821 -0.468751 +v -0.110913 -0.104534 -0.468751 +v -0.110913 -0.104534 -0.460914 +v -0.104534 -0.110913 -0.460914 +v -0.095821 -0.108578 -0.460914 +v -0.093486 -0.099865 -0.460914 +v -0.099865 -0.093486 -0.460914 +v -0.099865 -0.093486 -0.468751 +v -0.104534 -0.110913 -0.468751 +v -0.095821 -0.108578 -0.468751 +v -0.093486 -0.099865 -0.468751 +v 0.009021 -0.144532 0.460912 +v 0.009021 -0.144532 0.468749 +v 0.004510 -0.152344 0.468749 +v 0.004510 -0.152344 0.460912 +v -0.004510 -0.152344 0.460912 +v -0.009021 -0.144532 0.460912 +v -0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.460912 +v 0.004510 -0.136720 0.468749 +v -0.004510 -0.152344 0.468749 +v -0.009021 -0.144532 0.468749 +v -0.004510 -0.136720 0.468749 +v -0.009021 -0.144532 -0.460914 +v -0.009021 -0.144532 -0.468751 +v -0.004510 -0.152344 -0.468751 +v -0.004510 -0.152344 -0.460914 +v 0.004510 -0.152344 -0.460914 +v 0.009021 -0.144532 -0.460914 +v 0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.460914 +v -0.004510 -0.136720 -0.468751 +v 0.004510 -0.152344 -0.468751 +v 0.009021 -0.144532 -0.468751 +v 0.004510 -0.136720 -0.468751 +v 0.108578 -0.095821 0.460912 +v 0.108578 -0.095821 0.468749 +v 0.110913 -0.104534 0.468749 +v 0.110913 -0.104534 0.460912 +v 0.104534 -0.110913 0.460912 +v 0.095821 -0.108578 0.460912 +v 0.093486 -0.099865 0.460912 +v 0.099865 -0.093486 0.460912 +v 0.099865 -0.093486 0.468749 +v 0.104534 -0.110913 0.468749 +v 0.095821 -0.108578 0.468749 +v 0.093486 -0.099865 0.468749 +v 0.095821 -0.108578 -0.460914 +v 0.095821 -0.108578 -0.468751 +v 0.104534 -0.110913 -0.468751 +v 0.104534 -0.110913 -0.460914 +v 0.110913 -0.104534 -0.460914 +v 0.108578 -0.095821 -0.460914 +v 0.099865 -0.093486 -0.460914 +v 0.093486 -0.099865 -0.460914 +v 0.093486 -0.099865 -0.468751 +v 0.110913 -0.104534 -0.468751 +v 0.108578 -0.095821 -0.468751 +v 0.099865 -0.093486 -0.468751 +v 0.144532 0.009021 0.460912 +v 0.144532 0.009021 0.468749 +v 0.152344 0.004510 0.468749 +v 0.152344 0.004510 0.460912 +v 0.152344 -0.004510 0.460912 +v 0.144532 -0.009021 0.460912 +v 0.136720 -0.004510 0.460912 +v 0.136720 0.004510 0.460912 +v 0.136720 0.004510 0.468749 +v 0.152344 -0.004510 0.468749 +v 0.144532 -0.009021 0.468749 +v 0.136720 -0.004510 0.468749 +v 0.144532 -0.009021 -0.460914 +v 0.144532 -0.009021 -0.468751 +v 0.152344 -0.004510 -0.468751 +v 0.152344 -0.004510 -0.460914 +v 0.152344 0.004510 -0.460914 +v 0.144532 0.009021 -0.460914 +v 0.136720 0.004510 -0.460914 +v 0.136720 -0.004510 -0.460914 +v 0.136720 -0.004510 -0.468751 +v 0.152344 0.004510 -0.468751 +v 0.144532 0.009021 -0.468751 +v 0.136720 0.004510 -0.468751 +v 0.095821 0.108578 0.460912 +v 0.095821 0.108578 0.468749 +v 0.104534 0.110913 0.468749 +v 0.104534 0.110913 0.460912 +v 0.110913 0.104534 0.460912 +v 0.108578 0.095821 0.460912 +v 0.099865 0.093486 0.460912 +v 0.093486 0.099865 0.460912 +v 0.093486 0.099865 0.468749 +v 0.110913 0.104534 0.468749 +v 0.108578 0.095821 0.468749 +v 0.099865 0.093486 0.468749 +v 0.108578 0.095821 -0.460914 +v 0.108578 0.095821 -0.468751 +v 0.110913 0.104534 -0.468751 +v 0.110913 0.104534 -0.460914 +v 0.104534 0.110913 -0.460914 +v 0.095821 0.108578 -0.460914 +v 0.093486 0.099865 -0.460914 +v 0.099865 0.093486 -0.460914 +v 0.099865 0.093486 -0.468751 +v 0.104534 0.110913 -0.468751 +v 0.095821 0.108578 -0.468751 +v 0.093486 0.099865 -0.468751 +v -0.009021 0.144532 0.460912 +v -0.009021 0.144532 0.468749 +v -0.004510 0.152344 0.468749 +v -0.004510 0.152344 0.460912 +v 0.004511 0.152344 0.460912 +v 0.009021 0.144532 0.460912 +v 0.004511 0.136720 0.460912 +v -0.004510 0.136720 0.460912 +v -0.004510 0.136720 0.468749 +v 0.004511 0.152344 0.468749 +v 0.009021 0.144532 0.468749 +v 0.004511 0.136720 0.468749 +v 0.009021 0.144532 -0.460914 +v 0.009021 0.144532 -0.468751 +v 0.004510 0.152344 -0.468751 +v 0.004510 0.152344 -0.460914 +v -0.004510 0.152344 -0.460914 +v -0.009021 0.144532 -0.460914 +v -0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.460914 +v 0.004510 0.136720 -0.468751 +v -0.004510 0.152344 -0.468751 +v -0.009021 0.144532 -0.468751 +v -0.004510 0.136720 -0.468751 +v -0.008307 0.249999 0.031003 +v -0.008307 0.281249 0.031003 +v -0.022696 0.249999 0.022696 +v -0.022696 0.281249 0.022696 +v -0.031003 0.249999 0.008307 +v -0.031003 0.281249 0.008307 +v -0.031003 0.249999 -0.008307 +v -0.031003 0.281249 -0.008307 +v -0.022696 0.249999 -0.022696 +v -0.022696 0.281249 -0.022696 +v -0.008307 0.249999 -0.031003 +v -0.008307 0.281249 -0.031003 +v 0.008307 0.249999 -0.031003 +v 0.008307 0.281249 -0.031003 +v 0.022696 0.249999 -0.022696 +v 0.022696 0.281249 -0.022696 +v 0.031003 0.249999 -0.008307 +v 0.031003 0.281249 -0.008307 +v 0.031003 0.249999 0.008307 +v 0.031003 0.281249 0.008307 +v 0.022696 0.249999 0.022696 +v 0.022696 0.281249 0.022696 +v 0.008307 0.249999 0.031003 +v 0.008307 0.281249 0.031003 +v -0.047001 0.281250 -0.004629 +v -0.062499 0.296747 -0.006156 +v -0.051790 0.282008 -0.005101 +v -0.056111 0.284210 -0.005526 +v -0.059539 0.287638 -0.005864 +v -0.061740 0.291958 -0.006081 +v -0.047001 0.343750 -0.004629 +v -0.062499 0.328252 -0.006156 +v -0.051790 0.342991 -0.005101 +v -0.056111 0.340790 -0.005526 +v -0.059539 0.337362 -0.005864 +v -0.061740 0.333041 -0.006081 +v -0.045195 0.281250 -0.013710 +v -0.060097 0.296747 -0.018230 +v -0.049800 0.282008 -0.015107 +v -0.053954 0.284210 -0.016367 +v -0.057251 0.287638 -0.017367 +v -0.059368 0.291958 -0.018009 +v -0.045195 0.343750 -0.013710 +v -0.060097 0.328252 -0.018230 +v -0.049800 0.342991 -0.015107 +v -0.053954 0.340790 -0.016367 +v -0.057251 0.337362 -0.017367 +v -0.059368 0.333041 -0.018009 +v -0.041652 0.281250 -0.022264 +v -0.055386 0.296747 -0.029604 +v -0.045896 0.282008 -0.024532 +v -0.049725 0.284210 -0.026578 +v -0.052763 0.287638 -0.028202 +v -0.054714 0.291958 -0.029245 +v -0.041652 0.343750 -0.022264 +v -0.055386 0.328252 -0.029604 +v -0.045896 0.342991 -0.024532 +v -0.049725 0.340790 -0.026578 +v -0.052763 0.337362 -0.028202 +v -0.054714 0.333041 -0.029245 +v -0.036508 0.281250 -0.029962 +v -0.048546 0.296747 -0.039841 +v -0.040228 0.282008 -0.033014 +v -0.043584 0.284210 -0.035768 +v -0.046247 0.287638 -0.037954 +v -0.047957 0.291958 -0.039357 +v -0.036508 0.343750 -0.029962 +v -0.048546 0.328252 -0.039841 +v -0.040228 0.342991 -0.033014 +v -0.043584 0.340790 -0.035768 +v -0.046247 0.337362 -0.037954 +v -0.047957 0.333041 -0.039357 +v -0.029962 0.281250 -0.036508 +v -0.039841 0.296747 -0.048546 +v -0.033014 0.282008 -0.040228 +v -0.035768 0.284210 -0.043584 +v -0.037954 0.287638 -0.046247 +v -0.039357 0.291958 -0.047957 +v -0.029962 0.343750 -0.036508 +v -0.039841 0.328252 -0.048546 +v -0.033014 0.342991 -0.040228 +v -0.035768 0.340790 -0.043584 +v -0.037954 0.337362 -0.046247 +v -0.039357 0.333041 -0.047957 +v -0.022263 0.281250 -0.041652 +v -0.029604 0.296747 -0.055386 +v -0.024532 0.282008 -0.045896 +v -0.026578 0.284210 -0.049725 +v -0.028202 0.287638 -0.052763 +v -0.029245 0.291958 -0.054714 +v -0.022263 0.343750 -0.041652 +v -0.029604 0.328252 -0.055386 +v -0.024532 0.342991 -0.045896 +v -0.026578 0.340790 -0.049725 +v -0.028202 0.337362 -0.052763 +v -0.029245 0.333041 -0.054714 +v -0.013710 0.281250 -0.045195 +v -0.018230 0.296747 -0.060097 +v -0.015107 0.282008 -0.049800 +v -0.016367 0.284210 -0.053954 +v -0.017367 0.287638 -0.057251 +v -0.018009 0.291958 -0.059368 +v -0.013710 0.343750 -0.045195 +v -0.018230 0.328252 -0.060097 +v -0.015107 0.342991 -0.049800 +v -0.016367 0.340790 -0.053954 +v -0.017367 0.337362 -0.057251 +v -0.018009 0.333041 -0.059368 +v -0.004629 0.281250 -0.047001 +v -0.006156 0.296747 -0.062499 +v -0.005101 0.282008 -0.051790 +v -0.005526 0.284210 -0.056111 +v -0.005864 0.287638 -0.059539 +v -0.006081 0.291958 -0.061740 +v -0.004629 0.343750 -0.047001 +v -0.006156 0.328252 -0.062499 +v -0.005101 0.342991 -0.051790 +v -0.005526 0.340790 -0.056111 +v -0.005864 0.337362 -0.059539 +v -0.006081 0.333041 -0.061740 +v 0.004629 0.281250 -0.047001 +v 0.006156 0.296747 -0.062499 +v 0.005101 0.282008 -0.051790 +v 0.005526 0.284210 -0.056111 +v 0.005864 0.287638 -0.059539 +v 0.006081 0.291958 -0.061740 +v 0.004629 0.343750 -0.047001 +v 0.006156 0.328252 -0.062499 +v 0.005101 0.342991 -0.051790 +v 0.005526 0.340790 -0.056111 +v 0.005864 0.337362 -0.059539 +v 0.006081 0.333041 -0.061740 +v 0.013710 0.281250 -0.045195 +v 0.018230 0.296747 -0.060097 +v 0.015107 0.282008 -0.049800 +v 0.016367 0.284210 -0.053954 +v 0.017367 0.287638 -0.057251 +v 0.018009 0.291958 -0.059368 +v 0.013710 0.343750 -0.045195 +v 0.018230 0.328252 -0.060097 +v 0.015107 0.342991 -0.049800 +v 0.016367 0.340790 -0.053954 +v 0.017367 0.337362 -0.057251 +v 0.018009 0.333041 -0.059368 +v 0.022263 0.281250 -0.041652 +v 0.029604 0.296747 -0.055386 +v 0.024532 0.282008 -0.045896 +v 0.026578 0.284210 -0.049725 +v 0.028202 0.287638 -0.052763 +v 0.029245 0.291958 -0.054714 +v 0.022263 0.343750 -0.041652 +v 0.029604 0.328252 -0.055386 +v 0.024532 0.342991 -0.045896 +v 0.026578 0.340790 -0.049725 +v 0.028202 0.337362 -0.052763 +v 0.029245 0.333041 -0.054714 +v 0.029962 0.281250 -0.036508 +v 0.039841 0.296747 -0.048546 +v 0.033014 0.282008 -0.040228 +v 0.035768 0.284210 -0.043584 +v 0.037954 0.287638 -0.046247 +v 0.039357 0.291958 -0.047957 +v 0.029962 0.343750 -0.036508 +v 0.039841 0.328252 -0.048546 +v 0.033014 0.342991 -0.040228 +v 0.035768 0.340790 -0.043584 +v 0.037954 0.337362 -0.046247 +v 0.039357 0.333041 -0.047957 +v 0.036508 0.281250 -0.029962 +v 0.048546 0.296747 -0.039841 +v 0.040228 0.282008 -0.033014 +v 0.043584 0.284210 -0.035768 +v 0.046247 0.287638 -0.037954 +v 0.047957 0.291958 -0.039357 +v 0.036508 0.343750 -0.029962 +v 0.048546 0.328252 -0.039841 +v 0.040228 0.342991 -0.033014 +v 0.043584 0.340790 -0.035768 +v 0.046247 0.337362 -0.037954 +v 0.047957 0.333041 -0.039357 +v 0.041652 0.281250 -0.022264 +v 0.055386 0.296747 -0.029604 +v 0.045896 0.282008 -0.024532 +v 0.049725 0.284210 -0.026578 +v 0.052763 0.287638 -0.028202 +v 0.054714 0.291958 -0.029245 +v 0.041652 0.343750 -0.022264 +v 0.055386 0.328252 -0.029604 +v 0.045896 0.342991 -0.024532 +v 0.049725 0.340790 -0.026578 +v 0.052763 0.337362 -0.028202 +v 0.054714 0.333041 -0.029245 +v 0.045195 0.281250 -0.013710 +v 0.060097 0.296747 -0.018230 +v 0.049800 0.282008 -0.015107 +v 0.053954 0.284210 -0.016367 +v 0.057251 0.287638 -0.017367 +v 0.059368 0.291958 -0.018009 +v 0.045195 0.343750 -0.013710 +v 0.060097 0.328252 -0.018230 +v 0.049800 0.342991 -0.015107 +v 0.053954 0.340790 -0.016367 +v 0.057251 0.337362 -0.017367 +v 0.059368 0.333041 -0.018009 +v 0.047001 0.281250 -0.004629 +v 0.062499 0.296747 -0.006156 +v 0.051790 0.282008 -0.005101 +v 0.056111 0.284210 -0.005526 +v 0.059539 0.287638 -0.005864 +v 0.061740 0.291958 -0.006081 +v 0.047001 0.343750 -0.004629 +v 0.062499 0.328252 -0.006156 +v 0.051790 0.342991 -0.005101 +v 0.056111 0.340790 -0.005526 +v 0.059539 0.337362 -0.005864 +v 0.061740 0.333041 -0.006081 +v 0.047001 0.281250 0.004629 +v 0.062499 0.296747 0.006156 +v 0.051790 0.282008 0.005101 +v 0.056111 0.284210 0.005526 +v 0.059539 0.287638 0.005864 +v 0.061740 0.291958 0.006081 +v 0.047001 0.343750 0.004629 +v 0.062499 0.328252 0.006156 +v 0.051790 0.342991 0.005101 +v 0.056111 0.340790 0.005526 +v 0.059539 0.337362 0.005864 +v 0.061740 0.333041 0.006081 +v 0.045040 0.281250 0.014490 +v 0.060097 0.296747 0.018230 +v 0.049693 0.282008 0.015646 +v 0.053890 0.284210 0.016688 +v 0.057221 0.287638 0.017516 +v 0.059360 0.291958 0.018047 +v 0.045040 0.343750 0.014490 +v 0.060097 0.328252 0.018230 +v 0.049693 0.342991 0.015646 +v 0.053890 0.340790 0.016688 +v 0.057221 0.337362 0.017516 +v 0.059360 0.333041 0.018047 +v -0.045040 0.281250 0.014490 +v -0.060097 0.296747 0.018230 +v -0.049693 0.282008 0.015646 +v -0.053890 0.284210 0.016688 +v -0.057221 0.287638 0.017516 +v -0.059360 0.291958 0.018047 +v -0.045040 0.343750 0.014490 +v -0.060097 0.328252 0.018230 +v -0.049693 0.342991 0.015646 +v -0.053890 0.340790 0.016688 +v -0.057221 0.337362 0.017516 +v -0.059360 0.333041 0.018047 +v -0.047001 0.281250 0.004629 +v -0.062499 0.296747 0.006155 +v -0.051790 0.282008 0.005101 +v -0.056111 0.284210 0.005526 +v -0.059539 0.287638 0.005864 +v -0.061740 0.291958 0.006081 +v -0.047001 0.343750 0.004629 +v -0.062499 0.328252 0.006155 +v -0.051790 0.342991 0.005101 +v -0.056111 0.340790 0.005526 +v -0.059539 0.337362 0.005864 +v -0.061740 0.333041 0.006081 +v 0.040589 0.281250 0.323211 +v 0.056053 0.296747 0.324445 +v 0.045368 0.282008 0.323592 +v 0.049679 0.284210 0.323937 +v 0.053100 0.287638 0.324210 +v 0.055296 0.291958 0.324385 +v 0.003958 0.281250 0.359503 +v 0.004827 0.296747 0.375000 +v 0.004226 0.282008 0.364292 +v 0.004468 0.284210 0.368612 +v 0.004661 0.287638 0.372040 +v 0.004784 0.291958 0.374242 +v 0.039478 0.281250 0.332037 +v 0.054637 0.296747 0.335695 +v 0.044162 0.282008 0.333167 +v 0.048388 0.284210 0.334187 +v 0.051742 0.287638 0.334996 +v 0.053895 0.291958 0.335516 +v 0.036780 0.281250 0.339466 +v 0.050757 0.296747 0.346380 +v 0.041099 0.282008 0.341602 +v 0.044995 0.284210 0.343530 +v 0.048087 0.287638 0.345060 +v 0.050073 0.291958 0.346042 +v 0.032494 0.281250 0.346146 +v 0.044607 0.296747 0.355966 +v 0.036237 0.282008 0.349180 +v 0.039614 0.284210 0.351918 +v 0.042293 0.287638 0.354090 +v 0.044014 0.291958 0.355485 +v 0.026837 0.281250 0.351729 +v 0.036495 0.296747 0.363971 +v 0.029821 0.282008 0.355512 +v 0.032514 0.284210 0.358924 +v 0.034651 0.287638 0.361633 +v 0.036023 0.291958 0.363371 +v 0.020100 0.281250 0.355927 +v 0.026830 0.296747 0.369993 +v 0.022180 0.282008 0.360274 +v 0.024056 0.284210 0.364195 +v 0.025544 0.287638 0.367307 +v 0.026500 0.291958 0.369305 +v 0.012636 0.281250 0.358526 +v 0.016094 0.296747 0.373732 +v 0.013705 0.282008 0.363225 +v 0.014669 0.284210 0.367464 +v 0.015434 0.287638 0.370828 +v 0.015925 0.291958 0.372988 +v 0.003958 0.343750 0.359503 +v 0.004827 0.328252 0.375000 +v 0.004226 0.342991 0.364292 +v 0.004468 0.340790 0.368612 +v 0.004661 0.337362 0.372040 +v 0.004784 0.333041 0.374242 +v 0.040589 0.343750 0.323211 +v 0.056053 0.328252 0.324445 +v 0.045368 0.342991 0.323592 +v 0.049679 0.340790 0.323937 +v 0.053100 0.337362 0.324210 +v 0.055296 0.333041 0.324385 +v 0.012636 0.343750 0.358526 +v 0.016094 0.328252 0.373732 +v 0.013705 0.342991 0.363225 +v 0.014669 0.340790 0.367464 +v 0.015434 0.337362 0.370828 +v 0.015925 0.333041 0.372988 +v 0.020100 0.343750 0.355927 +v 0.026830 0.328252 0.369993 +v 0.022180 0.342991 0.360274 +v 0.024056 0.340790 0.364195 +v 0.025544 0.337362 0.367307 +v 0.026500 0.333041 0.369305 +v 0.026837 0.343750 0.351729 +v 0.036495 0.328252 0.363971 +v 0.029821 0.342991 0.355512 +v 0.032514 0.340790 0.358924 +v 0.034651 0.337362 0.361633 +v 0.036023 0.333041 0.363371 +v 0.032494 0.343750 0.346146 +v 0.044607 0.328252 0.355966 +v 0.036237 0.342991 0.349180 +v 0.039614 0.340790 0.351918 +v 0.042293 0.337362 0.354090 +v 0.044014 0.333041 0.355485 +v 0.036780 0.343750 0.339466 +v 0.050757 0.328252 0.346380 +v 0.041099 0.342991 0.341603 +v 0.044995 0.340790 0.343530 +v 0.048087 0.337362 0.345060 +v 0.050073 0.333041 0.346042 +v 0.039478 0.343750 0.332037 +v 0.054637 0.328252 0.335695 +v 0.044162 0.342991 0.333167 +v 0.048388 0.340790 0.334187 +v 0.051742 0.337362 0.334996 +v 0.053895 0.333041 0.335516 +v -0.003958 0.281250 0.359503 +v -0.004827 0.296747 0.375000 +v -0.004226 0.282008 0.364292 +v -0.004468 0.284210 0.368612 +v -0.004661 0.287638 0.372040 +v -0.004784 0.291958 0.374242 +v -0.040589 0.281250 0.323211 +v -0.056053 0.296747 0.324445 +v -0.045368 0.282008 0.323592 +v -0.049679 0.284210 0.323937 +v -0.053100 0.287638 0.324210 +v -0.055296 0.291958 0.324385 +v -0.012636 0.281250 0.358526 +v -0.016094 0.296747 0.373732 +v -0.013705 0.282008 0.363225 +v -0.014669 0.284210 0.367464 +v -0.015433 0.287638 0.370828 +v -0.015925 0.291958 0.372988 +v -0.020100 0.281250 0.355927 +v -0.026830 0.296747 0.369993 +v -0.022180 0.282008 0.360274 +v -0.024056 0.284210 0.364195 +v -0.025544 0.287638 0.367307 +v -0.026500 0.291958 0.369305 +v -0.026837 0.281250 0.351729 +v -0.036495 0.296747 0.363971 +v -0.029821 0.282008 0.355512 +v -0.032514 0.284210 0.358924 +v -0.034651 0.287638 0.361633 +v -0.036023 0.291958 0.363371 +v -0.032494 0.281250 0.346146 +v -0.044607 0.296747 0.355966 +v -0.036237 0.282008 0.349180 +v -0.039614 0.284210 0.351918 +v -0.042293 0.287638 0.354090 +v -0.044014 0.291958 0.355485 +v -0.036780 0.281250 0.339466 +v -0.050757 0.296747 0.346380 +v -0.041099 0.282008 0.341602 +v -0.044995 0.284210 0.343530 +v -0.048087 0.287638 0.345060 +v -0.050073 0.291958 0.346042 +v -0.039478 0.281250 0.332037 +v -0.054637 0.296747 0.335695 +v -0.044162 0.282008 0.333167 +v -0.048388 0.284210 0.334187 +v -0.051742 0.287638 0.334996 +v -0.053895 0.291958 0.335516 +v -0.040589 0.343750 0.323211 +v -0.056053 0.328252 0.324445 +v -0.045368 0.342991 0.323592 +v -0.049679 0.340790 0.323937 +v -0.053100 0.337362 0.324210 +v -0.055296 0.333041 0.324385 +v -0.003958 0.343750 0.359503 +v -0.004827 0.328252 0.375000 +v -0.004226 0.342991 0.364292 +v -0.004468 0.340790 0.368612 +v -0.004661 0.337362 0.372040 +v -0.004784 0.333041 0.374242 +v -0.039478 0.343750 0.332037 +v -0.054637 0.328252 0.335695 +v -0.044162 0.342991 0.333167 +v -0.048388 0.340790 0.334187 +v -0.051742 0.337362 0.334996 +v -0.053895 0.333041 0.335516 +v -0.036780 0.343750 0.339466 +v -0.050757 0.328252 0.346380 +v -0.041099 0.342991 0.341602 +v -0.044995 0.340790 0.343530 +v -0.048087 0.337362 0.345060 +v -0.050073 0.333041 0.346042 +v -0.032494 0.343750 0.346146 +v -0.044607 0.328252 0.355966 +v -0.036237 0.342991 0.349180 +v -0.039614 0.340790 0.351918 +v -0.042293 0.337362 0.354090 +v -0.044014 0.333041 0.355485 +v -0.026837 0.343750 0.351729 +v -0.036495 0.328252 0.363971 +v -0.029821 0.342991 0.355512 +v -0.032514 0.340790 0.358924 +v -0.034651 0.337362 0.361633 +v -0.036023 0.333041 0.363371 +v -0.020100 0.343750 0.355927 +v -0.026830 0.328252 0.369993 +v -0.022180 0.342991 0.360274 +v -0.024056 0.340790 0.364195 +v -0.025544 0.337362 0.367307 +v -0.026500 0.333041 0.369305 +v -0.012636 0.343750 0.358526 +v -0.016094 0.328252 0.373732 +v -0.013705 0.342991 0.363225 +v -0.014669 0.340790 0.367464 +v -0.015433 0.337362 0.370828 +v -0.015925 0.333041 0.372988 +v -0.036895 0.343750 0.219651 +v -0.052305 0.328252 0.218008 +v -0.041657 0.342991 0.219143 +v -0.045952 0.340790 0.218685 +v -0.049362 0.337362 0.218322 +v -0.051551 0.333041 0.218088 +v -0.040972 0.343750 0.311965 +v -0.056460 0.328252 0.312492 +v -0.045758 0.342991 0.312128 +v -0.050076 0.340790 0.312275 +v -0.053502 0.337362 0.312391 +v -0.055702 0.333041 0.312466 +v -0.038102 0.343750 0.230936 +v -0.053548 0.328252 0.229673 +v -0.042875 0.342991 0.230545 +v -0.047181 0.340790 0.230193 +v -0.050598 0.337362 0.229914 +v -0.052792 0.333041 0.229735 +v -0.039181 0.343750 0.244087 +v -0.054649 0.328252 0.243130 +v -0.043961 0.342991 0.243791 +v -0.048272 0.340790 0.243524 +v -0.051694 0.337362 0.243312 +v -0.053891 0.333041 0.243177 +v -0.040068 0.343750 0.258385 +v -0.055550 0.328252 0.257704 +v -0.044852 0.342991 0.258175 +v -0.049168 0.340790 0.257985 +v -0.052593 0.337362 0.257834 +v -0.054793 0.333041 0.257737 +v -0.040716 0.343750 0.273069 +v -0.056208 0.328252 0.272665 +v -0.045503 0.342991 0.272944 +v -0.049822 0.340790 0.272832 +v -0.053250 0.337362 0.272742 +v -0.055450 0.333041 0.272685 +v -0.041092 0.343750 0.287360 +v -0.056590 0.328252 0.287262 +v -0.045881 0.342991 0.287330 +v -0.050201 0.340790 0.287302 +v -0.053630 0.337362 0.287281 +v -0.055831 0.333041 0.287267 +v -0.041180 0.343750 0.300480 +v -0.056675 0.328252 0.300763 +v -0.045968 0.342991 0.300567 +v -0.050288 0.340790 0.300646 +v -0.053716 0.337362 0.300709 +v -0.055917 0.333041 0.300749 +v -0.040966 0.281250 0.312209 +v -0.056460 0.296747 0.312492 +v -0.045754 0.282008 0.312296 +v -0.050073 0.284210 0.312375 +v -0.053501 0.287638 0.312438 +v -0.055702 0.291958 0.312478 +v -0.036922 0.281250 0.219893 +v -0.052305 0.296747 0.218008 +v -0.041676 0.282008 0.219311 +v -0.045964 0.284210 0.218785 +v -0.049367 0.287638 0.218368 +v -0.051552 0.291958 0.218100 +v -0.041178 0.281250 0.300861 +v -0.056675 0.296747 0.300763 +v -0.045967 0.282008 0.300831 +v -0.050287 0.284210 0.300804 +v -0.053715 0.287638 0.300782 +v -0.055917 0.291958 0.300768 +v -0.041097 0.281250 0.287667 +v -0.056590 0.296747 0.287262 +v -0.045885 0.282008 0.287542 +v -0.050204 0.284210 0.287429 +v -0.053631 0.287638 0.287339 +v -0.055831 0.291958 0.287282 +v -0.040726 0.281250 0.273346 +v -0.056208 0.296747 0.272665 +v -0.045510 0.282008 0.273135 +v -0.049826 0.284210 0.272945 +v -0.053251 0.287638 0.272795 +v -0.055451 0.291958 0.272698 +v -0.040082 0.281250 0.258661 +v -0.055550 0.296747 0.257704 +v -0.044862 0.282008 0.258365 +v -0.049174 0.284210 0.258098 +v -0.052596 0.287638 0.257887 +v -0.054793 0.291958 0.257751 +v -0.039203 0.281250 0.244393 +v -0.054649 0.296747 0.243130 +v -0.043976 0.282008 0.244002 +v -0.048282 0.284210 0.243650 +v -0.051699 0.287638 0.243371 +v -0.053893 0.291958 0.243192 +v -0.038138 0.281250 0.231316 +v -0.053548 0.296747 0.229673 +v -0.042900 0.282008 0.230808 +v -0.047196 0.284210 0.230350 +v -0.050605 0.287638 0.229987 +v -0.052794 0.291958 0.229753 +v 0.040966 0.343750 0.312209 +v 0.056461 0.328252 0.312492 +v 0.045754 0.342991 0.312296 +v 0.050073 0.340790 0.312375 +v 0.053501 0.337362 0.312438 +v 0.055702 0.333041 0.312478 +v 0.036922 0.343750 0.219894 +v 0.052305 0.328252 0.218008 +v 0.041676 0.342991 0.219311 +v 0.045964 0.340790 0.218785 +v 0.049367 0.337362 0.218368 +v 0.051552 0.333041 0.218100 +v 0.041178 0.343750 0.300861 +v 0.056675 0.328252 0.300763 +v 0.045967 0.342991 0.300831 +v 0.050287 0.340790 0.300804 +v 0.053715 0.337362 0.300782 +v 0.055917 0.333041 0.300768 +v 0.041097 0.343750 0.287667 +v 0.056590 0.328252 0.287262 +v 0.045885 0.342991 0.287542 +v 0.050204 0.340790 0.287429 +v 0.053631 0.337362 0.287339 +v 0.055831 0.333041 0.287282 +v 0.040726 0.343750 0.273346 +v 0.056208 0.328252 0.272665 +v 0.045510 0.342991 0.273135 +v 0.049826 0.340790 0.272945 +v 0.053251 0.337362 0.272795 +v 0.055451 0.333041 0.272698 +v 0.040082 0.343750 0.258661 +v 0.055550 0.328252 0.257704 +v 0.044862 0.342991 0.258365 +v 0.049174 0.340790 0.258098 +v 0.052596 0.337362 0.257887 +v 0.054793 0.333041 0.257751 +v 0.039203 0.343750 0.244393 +v 0.054649 0.328252 0.243130 +v 0.043976 0.342991 0.244002 +v 0.048282 0.340790 0.243650 +v 0.051699 0.337362 0.243371 +v 0.053893 0.333041 0.243192 +v 0.038138 0.343750 0.231316 +v 0.053548 0.328252 0.229673 +v 0.042900 0.342991 0.230808 +v 0.047196 0.340790 0.230350 +v 0.050605 0.337362 0.229987 +v 0.052794 0.333041 0.229753 +v 0.036895 0.281250 0.219651 +v 0.052305 0.296747 0.218008 +v 0.041657 0.282008 0.219143 +v 0.045952 0.284210 0.218685 +v 0.049362 0.287638 0.218322 +v 0.051551 0.291958 0.218089 +v 0.040972 0.281250 0.311965 +v 0.056461 0.296747 0.312492 +v 0.045758 0.282008 0.312128 +v 0.050076 0.284210 0.312275 +v 0.053502 0.287638 0.312391 +v 0.055702 0.291958 0.312466 +v 0.038102 0.281250 0.230936 +v 0.053548 0.296747 0.229673 +v 0.042875 0.282008 0.230546 +v 0.047181 0.284210 0.230193 +v 0.050598 0.287638 0.229914 +v 0.052792 0.291958 0.229735 +v 0.039181 0.281250 0.244087 +v 0.054649 0.296747 0.243130 +v 0.043961 0.282008 0.243791 +v 0.048272 0.284210 0.243524 +v 0.051694 0.287638 0.243313 +v 0.053891 0.291958 0.243177 +v 0.040068 0.281250 0.258385 +v 0.055550 0.296747 0.257704 +v 0.044852 0.282008 0.258175 +v 0.049168 0.284210 0.257985 +v 0.052593 0.287638 0.257834 +v 0.054793 0.291958 0.257737 +v 0.040716 0.281250 0.273070 +v 0.056208 0.296747 0.272665 +v 0.045504 0.282008 0.272944 +v 0.049822 0.284210 0.272832 +v 0.053250 0.287638 0.272742 +v 0.055450 0.291958 0.272685 +v 0.041093 0.281250 0.287360 +v 0.056590 0.296747 0.287262 +v 0.045881 0.282008 0.287330 +v 0.050201 0.284210 0.287302 +v 0.053630 0.287638 0.287281 +v 0.055831 0.291958 0.287267 +v 0.041180 0.281250 0.300480 +v 0.056675 0.296747 0.300763 +v 0.045968 0.282008 0.300567 +v 0.050288 0.284210 0.300646 +v 0.053716 0.287638 0.300709 +v 0.055917 0.291958 0.300750 +v -0.025464 0.281250 0.126339 +v -0.040899 0.296747 0.124954 +v -0.030234 0.282008 0.125911 +v -0.034537 0.284210 0.125525 +v -0.037951 0.287638 0.125218 +v -0.040144 0.291958 0.125021 +v -0.031063 0.281250 0.061222 +v -0.045911 0.296747 0.065663 +v -0.035651 0.282008 0.062594 +v -0.039790 0.284210 0.063832 +v -0.043075 0.287638 0.064815 +v -0.045184 0.291958 0.065446 +v -0.024917 0.281250 0.120244 +v -0.040389 0.296747 0.119272 +v -0.029698 0.282008 0.119944 +v -0.034011 0.284210 0.119673 +v -0.037434 0.287638 0.119458 +v -0.039632 0.291958 0.119320 +v -0.024660 0.281250 0.113093 +v -0.040160 0.296747 0.112879 +v -0.029450 0.282008 0.113027 +v -0.033771 0.284210 0.112967 +v -0.037200 0.287638 0.112920 +v -0.039401 0.291958 0.112889 +v -0.024723 0.281250 0.105535 +v -0.040217 0.296747 0.105967 +v -0.029511 0.282008 0.105669 +v -0.033830 0.284210 0.105789 +v -0.037258 0.287638 0.105885 +v -0.039459 0.291958 0.105946 +v -0.025094 0.281250 0.097727 +v -0.040560 0.296747 0.098748 +v -0.029873 0.282008 0.098043 +v -0.034184 0.284210 0.098327 +v -0.037606 0.287638 0.098553 +v -0.039803 0.291958 0.098698 +v -0.025759 0.281250 0.089850 +v -0.041178 0.296747 0.091440 +v -0.030524 0.282008 0.090341 +v -0.034822 0.284210 0.090784 +v -0.038233 0.287638 0.091136 +v -0.040423 0.291958 0.091362 +v -0.026705 0.281250 0.082090 +v -0.042052 0.296747 0.084265 +v -0.031447 0.282008 0.082763 +v -0.035725 0.284210 0.083369 +v -0.039121 0.287638 0.083850 +v -0.041300 0.291958 0.084159 +v -0.027911 0.281250 0.074630 +v -0.043155 0.296747 0.077442 +v -0.032622 0.282008 0.075499 +v -0.036871 0.284210 0.076283 +v -0.040244 0.287638 0.076905 +v -0.042409 0.291958 0.077305 +v -0.029365 0.281250 0.067623 +v -0.044455 0.296747 0.071178 +v -0.034028 0.282008 0.068722 +v -0.038234 0.284210 0.069713 +v -0.041573 0.287638 0.070499 +v -0.043716 0.291958 0.071004 +v 0.025464 0.343750 0.126339 +v 0.040899 0.328252 0.124954 +v 0.030234 0.342991 0.125911 +v 0.034537 0.340790 0.125525 +v 0.037951 0.337362 0.125218 +v 0.040144 0.333041 0.125022 +v 0.031063 0.343750 0.061222 +v 0.045911 0.328252 0.065663 +v 0.035651 0.342991 0.062595 +v 0.039791 0.340790 0.063832 +v 0.043075 0.337362 0.064815 +v 0.045184 0.333041 0.065446 +v 0.024917 0.343750 0.120244 +v 0.040389 0.328252 0.119272 +v 0.029698 0.342991 0.119944 +v 0.034011 0.340790 0.119673 +v 0.037434 0.337362 0.119458 +v 0.039632 0.333041 0.119320 +v 0.024660 0.343750 0.113093 +v 0.040160 0.328252 0.112879 +v 0.029450 0.342991 0.113027 +v 0.033771 0.340790 0.112967 +v 0.037200 0.337362 0.112920 +v 0.039401 0.333041 0.112889 +v 0.024723 0.343750 0.105535 +v 0.040217 0.328252 0.105967 +v 0.029511 0.342991 0.105669 +v 0.033830 0.340790 0.105789 +v 0.037258 0.337362 0.105885 +v 0.039459 0.333041 0.105946 +v 0.025094 0.343750 0.097728 +v 0.040560 0.328252 0.098748 +v 0.029873 0.342991 0.098043 +v 0.034184 0.340790 0.098327 +v 0.037606 0.337362 0.098553 +v 0.039803 0.333041 0.098698 +v 0.025759 0.343750 0.089850 +v 0.041178 0.328252 0.091440 +v 0.030524 0.342991 0.090341 +v 0.034822 0.340790 0.090785 +v 0.038233 0.337362 0.091136 +v 0.040423 0.333041 0.091362 +v 0.026705 0.343750 0.082091 +v 0.042052 0.328252 0.084265 +v 0.031447 0.342991 0.082763 +v 0.035725 0.340790 0.083369 +v 0.039121 0.337362 0.083850 +v 0.041300 0.333041 0.084159 +v 0.027911 0.343750 0.074630 +v 0.043155 0.328252 0.077442 +v 0.032622 0.342991 0.075499 +v 0.036871 0.340790 0.076283 +v 0.040244 0.337362 0.076905 +v 0.042409 0.333041 0.077305 +v 0.029365 0.343750 0.067623 +v 0.044455 0.328252 0.071178 +v 0.034028 0.342991 0.068722 +v 0.038234 0.340790 0.069713 +v 0.041573 0.337362 0.070499 +v 0.043716 0.333041 0.071004 +v 0.030927 0.281250 0.061707 +v 0.045911 0.296747 0.065663 +v 0.035557 0.282008 0.062929 +v 0.039734 0.284210 0.064032 +v 0.043049 0.287638 0.064907 +v 0.045178 0.291958 0.065469 +v 0.025517 0.281250 0.126839 +v 0.040899 0.296747 0.124954 +v 0.030270 0.282008 0.126257 +v 0.034558 0.284210 0.125731 +v 0.037962 0.287638 0.125314 +v 0.040146 0.291958 0.125046 +v 0.029365 0.281250 0.067623 +v 0.044455 0.296747 0.071178 +v 0.034028 0.282008 0.068722 +v 0.038234 0.284210 0.069713 +v 0.041573 0.287638 0.070499 +v 0.043716 0.291958 0.071004 +v 0.027911 0.281250 0.074630 +v 0.043155 0.296747 0.077442 +v 0.032622 0.282008 0.075499 +v 0.036871 0.284210 0.076283 +v 0.040244 0.287638 0.076905 +v 0.042409 0.291958 0.077305 +v 0.026705 0.281250 0.082091 +v 0.042052 0.296747 0.084265 +v 0.031447 0.282008 0.082763 +v 0.035725 0.284210 0.083369 +v 0.039121 0.287638 0.083850 +v 0.041300 0.291958 0.084159 +v 0.025759 0.281250 0.089850 +v 0.041178 0.296747 0.091440 +v 0.030524 0.282008 0.090341 +v 0.034822 0.284210 0.090785 +v 0.038233 0.287638 0.091136 +v 0.040423 0.291958 0.091362 +v 0.025094 0.281250 0.097727 +v 0.040560 0.296747 0.098748 +v 0.029873 0.282008 0.098043 +v 0.034184 0.284210 0.098327 +v 0.037606 0.287638 0.098553 +v 0.039803 0.291958 0.098698 +v 0.024723 0.281250 0.105535 +v 0.040217 0.296747 0.105967 +v 0.029511 0.282008 0.105669 +v 0.033830 0.284210 0.105789 +v 0.037258 0.287638 0.105885 +v 0.039459 0.291958 0.105946 +v 0.024660 0.281250 0.113093 +v 0.040160 0.296747 0.112879 +v 0.029450 0.282008 0.113027 +v 0.033771 0.284210 0.112967 +v 0.037200 0.287638 0.112920 +v 0.039401 0.291958 0.112889 +v 0.024917 0.281250 0.120244 +v 0.040389 0.296747 0.119272 +v 0.029698 0.282008 0.119944 +v 0.034011 0.284210 0.119673 +v 0.037434 0.287638 0.119458 +v 0.039632 0.291958 0.119320 +v -0.030927 0.343750 0.061707 +v -0.045911 0.328252 0.065663 +v -0.035557 0.342991 0.062929 +v -0.039734 0.340790 0.064032 +v -0.043049 0.337362 0.064907 +v -0.045178 0.333041 0.065469 +v -0.025517 0.343750 0.126839 +v -0.040899 0.328252 0.124954 +v -0.030270 0.342991 0.126256 +v -0.034558 0.340790 0.125731 +v -0.037961 0.337362 0.125314 +v -0.040146 0.333041 0.125046 +v -0.029365 0.343750 0.067623 +v -0.044455 0.328252 0.071178 +v -0.034028 0.342991 0.068722 +v -0.038234 0.340790 0.069713 +v -0.041573 0.337362 0.070499 +v -0.043716 0.333041 0.071004 +v -0.027911 0.343750 0.074630 +v -0.043155 0.328252 0.077442 +v -0.032622 0.342991 0.075499 +v -0.036871 0.340790 0.076283 +v -0.040244 0.337362 0.076905 +v -0.042409 0.333041 0.077305 +v -0.026705 0.343750 0.082091 +v -0.042052 0.328252 0.084265 +v -0.031447 0.342991 0.082763 +v -0.035725 0.340790 0.083369 +v -0.039121 0.337362 0.083850 +v -0.041300 0.333041 0.084159 +v -0.025759 0.343750 0.089850 +v -0.041178 0.328252 0.091440 +v -0.030524 0.342991 0.090341 +v -0.034822 0.340790 0.090784 +v -0.038233 0.337362 0.091136 +v -0.040423 0.333041 0.091362 +v -0.025094 0.343750 0.097727 +v -0.040560 0.328252 0.098748 +v -0.029873 0.342991 0.098043 +v -0.034184 0.340790 0.098327 +v -0.037606 0.337362 0.098553 +v -0.039803 0.333041 0.098698 +v -0.024723 0.343750 0.105535 +v -0.040217 0.328252 0.105967 +v -0.029511 0.342991 0.105669 +v -0.033830 0.340790 0.105789 +v -0.037258 0.337362 0.105885 +v -0.039459 0.333041 0.105946 +v -0.024660 0.343750 0.113093 +v -0.040160 0.328252 0.112879 +v -0.029450 0.342991 0.113027 +v -0.033771 0.340790 0.112967 +v -0.037200 0.337362 0.112920 +v -0.039401 0.333041 0.112889 +v -0.024917 0.343750 0.120244 +v -0.040389 0.328252 0.119272 +v -0.029698 0.342991 0.119944 +v -0.034011 0.340790 0.119673 +v -0.037434 0.337362 0.119458 +v -0.039632 0.333041 0.119320 +v 0.141506 0.250000 0.168201 +v 0.146099 0.168201 0.250000 +v 0.142694 0.247213 0.189372 +v 0.143802 0.239041 0.209100 +v 0.144754 0.226042 0.226042 +v 0.145484 0.209100 0.239041 +v 0.145943 0.189372 0.247213 +v 0.168201 0.250000 0.141505 +v 0.250000 0.168201 0.146099 +v 0.189372 0.247213 0.142694 +v 0.209100 0.239041 0.143802 +v 0.226042 0.226042 0.144754 +v 0.239041 0.209100 0.145484 +v 0.247213 0.189372 0.145943 +v 0.150902 0.250000 0.167142 +v 0.169219 0.168201 0.247395 +v 0.155643 0.247213 0.187913 +v 0.160061 0.239041 0.207268 +v 0.163854 0.226042 0.223889 +v 0.166765 0.209100 0.236643 +v 0.168595 0.189372 0.244660 +v 0.155464 0.250000 0.165546 +v 0.191180 0.168201 0.239711 +v 0.164708 0.247213 0.184741 +v 0.173322 0.239041 0.202628 +v 0.180719 0.226042 0.217988 +v 0.186395 0.209100 0.229774 +v 0.189963 0.189372 0.237183 +v 0.159557 0.250000 0.162974 +v 0.210880 0.168201 0.227332 +v 0.172840 0.247213 0.179631 +v 0.185218 0.239041 0.195153 +v 0.195848 0.226042 0.208482 +v 0.204004 0.209100 0.218710 +v 0.209132 0.189372 0.225139 +v 0.162974 0.250000 0.159557 +v 0.227332 0.168201 0.210880 +v 0.179631 0.247213 0.172840 +v 0.195153 0.239041 0.185218 +v 0.208482 0.226042 0.195848 +v 0.218710 0.209100 0.204004 +v 0.225139 0.189372 0.209131 +v 0.165546 0.250000 0.155464 +v 0.239711 0.168201 0.191180 +v 0.184741 0.247213 0.164708 +v 0.202628 0.239041 0.173322 +v 0.217988 0.226042 0.180719 +v 0.229774 0.209100 0.186395 +v 0.237183 0.189372 0.189963 +v 0.167142 0.250000 0.150902 +v 0.247395 0.168201 0.169219 +v 0.187913 0.247213 0.155643 +v 0.207268 0.239041 0.160061 +v 0.223889 0.226042 0.163854 +v 0.236643 0.209100 0.166765 +v 0.244660 0.189372 0.168595 +v -0.168201 0.250000 0.141506 +v -0.250000 0.168201 0.146099 +v -0.189372 0.247213 0.142694 +v -0.209100 0.239041 0.143802 +v -0.226042 0.226042 0.144754 +v -0.239041 0.209100 0.145484 +v -0.247213 0.189372 0.145943 +v -0.141506 0.250000 0.168201 +v -0.146099 0.168201 0.250000 +v -0.142694 0.247213 0.189372 +v -0.143802 0.239041 0.209100 +v -0.144754 0.226042 0.226042 +v -0.145484 0.209100 0.239041 +v -0.145943 0.189372 0.247213 +v -0.167142 0.250000 0.150902 +v -0.247395 0.168201 0.169219 +v -0.187913 0.247213 0.155643 +v -0.207269 0.239041 0.160061 +v -0.223889 0.226042 0.163854 +v -0.236643 0.209100 0.166765 +v -0.244660 0.189372 0.168595 +v -0.165546 0.250000 0.155464 +v -0.239711 0.168201 0.191180 +v -0.184741 0.247213 0.164708 +v -0.202628 0.239041 0.173322 +v -0.217988 0.226042 0.180719 +v -0.229774 0.209100 0.186395 +v -0.237183 0.189372 0.189963 +v -0.162974 0.250000 0.159557 +v -0.227332 0.168201 0.210880 +v -0.179631 0.247213 0.172840 +v -0.195153 0.239041 0.185218 +v -0.208482 0.226042 0.195848 +v -0.218710 0.209100 0.204004 +v -0.225139 0.189372 0.209132 +v -0.159557 0.250000 0.162974 +v -0.210880 0.168201 0.227332 +v -0.172840 0.247213 0.179631 +v -0.185218 0.239041 0.195153 +v -0.195848 0.226042 0.208482 +v -0.204004 0.209100 0.218710 +v -0.209132 0.189372 0.225139 +v -0.155464 0.250000 0.165546 +v -0.191180 0.168201 0.239711 +v -0.164708 0.247213 0.184741 +v -0.173322 0.239041 0.202628 +v -0.180719 0.226042 0.217988 +v -0.186395 0.209100 0.229774 +v -0.189963 0.189372 0.237183 +v -0.150902 0.250000 0.167142 +v -0.169219 0.168201 0.247395 +v -0.155643 0.247213 0.187913 +v -0.160061 0.239041 0.207268 +v -0.163854 0.226042 0.223889 +v -0.166765 0.209100 0.236643 +v -0.168595 0.189372 0.244660 +v -0.141505 -0.250000 0.168201 +v -0.146099 -0.168201 0.250000 +v -0.142694 -0.247213 0.189372 +v -0.143802 -0.239041 0.209100 +v -0.144754 -0.226042 0.226042 +v -0.145484 -0.209100 0.239041 +v -0.145943 -0.189372 0.247213 +v -0.168201 -0.250000 0.141506 +v -0.250000 -0.168201 0.146099 +v -0.189372 -0.247213 0.142694 +v -0.209100 -0.239041 0.143802 +v -0.226042 -0.226042 0.144754 +v -0.239041 -0.209100 0.145484 +v -0.247213 -0.189372 0.145943 +v -0.150902 -0.250000 0.167142 +v -0.169219 -0.168201 0.247395 +v -0.155643 -0.247213 0.187913 +v -0.160061 -0.239041 0.207269 +v -0.163854 -0.226042 0.223889 +v -0.166765 -0.209100 0.236643 +v -0.168595 -0.189372 0.244660 +v -0.155464 -0.250000 0.165546 +v -0.191180 -0.168201 0.239711 +v -0.164708 -0.247213 0.184741 +v -0.173322 -0.239041 0.202628 +v -0.180719 -0.226042 0.217988 +v -0.186395 -0.209100 0.229774 +v -0.189963 -0.189372 0.237183 +v -0.159557 -0.250000 0.162974 +v -0.210880 -0.168201 0.227332 +v -0.172840 -0.247213 0.179631 +v -0.185218 -0.239041 0.195153 +v -0.195848 -0.226042 0.208482 +v -0.204004 -0.209100 0.218710 +v -0.209132 -0.189372 0.225139 +v -0.162974 -0.250000 0.159557 +v -0.227332 -0.168201 0.210880 +v -0.179631 -0.247213 0.172840 +v -0.195153 -0.239041 0.185218 +v -0.208482 -0.226042 0.195848 +v -0.218710 -0.209100 0.204004 +v -0.225139 -0.189372 0.209131 +v -0.165546 -0.250000 0.155464 +v -0.239711 -0.168201 0.191180 +v -0.184741 -0.247213 0.164708 +v -0.202628 -0.239041 0.173322 +v -0.217988 -0.226042 0.180719 +v -0.229774 -0.209100 0.186395 +v -0.237184 -0.189372 0.189963 +v -0.167142 -0.250000 0.150902 +v -0.247395 -0.168201 0.169219 +v -0.187913 -0.247213 0.155643 +v -0.207269 -0.239041 0.160061 +v -0.223889 -0.226042 0.163854 +v -0.236643 -0.209100 0.166765 +v -0.244660 -0.189372 0.168595 +v 0.168201 -0.250000 0.141505 +v 0.250000 -0.168201 0.146099 +v 0.189372 -0.247213 0.142694 +v 0.209100 -0.239041 0.143802 +v 0.226042 -0.226042 0.144754 +v 0.239041 -0.209100 0.145484 +v 0.247213 -0.189372 0.145943 +v 0.141506 -0.250000 0.168201 +v 0.146099 -0.168201 0.250000 +v 0.142694 -0.247213 0.189372 +v 0.143802 -0.239041 0.209100 +v 0.144754 -0.226042 0.226042 +v 0.145484 -0.209100 0.239041 +v 0.145943 -0.189372 0.247213 +v 0.167142 -0.250000 0.150902 +v 0.247395 -0.168201 0.169219 +v 0.187913 -0.247213 0.155643 +v 0.207269 -0.239041 0.160061 +v 0.223889 -0.226042 0.163854 +v 0.236643 -0.209100 0.166765 +v 0.244660 -0.189372 0.168595 +v 0.165546 -0.250000 0.155464 +v 0.239711 -0.168201 0.191180 +v 0.184741 -0.247213 0.164708 +v 0.202628 -0.239041 0.173322 +v 0.217988 -0.226042 0.180719 +v 0.229774 -0.209100 0.186395 +v 0.237183 -0.189372 0.189963 +v 0.162974 -0.250000 0.159557 +v 0.227332 -0.168201 0.210880 +v 0.179631 -0.247213 0.172840 +v 0.195153 -0.239041 0.185218 +v 0.208482 -0.226042 0.195848 +v 0.218710 -0.209100 0.204004 +v 0.225139 -0.189372 0.209132 +v 0.159557 -0.250000 0.162974 +v 0.210880 -0.168201 0.227332 +v 0.172840 -0.247213 0.179631 +v 0.185218 -0.239041 0.195153 +v 0.195848 -0.226042 0.208482 +v 0.204004 -0.209100 0.218710 +v 0.209131 -0.189372 0.225139 +v 0.155464 -0.250000 0.165546 +v 0.191180 -0.168201 0.239711 +v 0.164708 -0.247213 0.184741 +v 0.173322 -0.239041 0.202628 +v 0.180719 -0.226042 0.217988 +v 0.186395 -0.209100 0.229774 +v 0.189963 -0.189372 0.237184 +v 0.150902 -0.250000 0.167142 +v 0.169219 -0.168201 0.247395 +v 0.155643 -0.247213 0.187913 +v 0.160061 -0.239041 0.207269 +v 0.163854 -0.226042 0.223889 +v 0.166765 -0.209100 0.236643 +v 0.168595 -0.189372 0.244660 +v -0.141506 0.250000 -0.168201 +v -0.146099 0.168201 -0.250000 +v -0.142694 0.247213 -0.189372 +v -0.143802 0.239041 -0.209100 +v -0.144754 0.226042 -0.226042 +v -0.145484 0.209100 -0.239041 +v -0.145943 0.189372 -0.247213 +v -0.168201 0.250000 -0.141505 +v -0.250000 0.168201 -0.146099 +v -0.189372 0.247213 -0.142694 +v -0.209100 0.239041 -0.143802 +v -0.226042 0.226042 -0.144754 +v -0.239041 0.209100 -0.145484 +v -0.247213 0.189372 -0.145943 +v -0.150902 0.250000 -0.167142 +v -0.169219 0.168201 -0.247395 +v -0.155643 0.247213 -0.187913 +v -0.160061 0.239041 -0.207269 +v -0.163854 0.226042 -0.223889 +v -0.166765 0.209100 -0.236643 +v -0.168595 0.189372 -0.244660 +v -0.155464 0.250000 -0.165546 +v -0.191180 0.168201 -0.239711 +v -0.164708 0.247213 -0.184741 +v -0.173322 0.239041 -0.202628 +v -0.180719 0.226042 -0.217988 +v -0.186395 0.209100 -0.229774 +v -0.189963 0.189372 -0.237183 +v -0.159557 0.250000 -0.162974 +v -0.210880 0.168201 -0.227332 +v -0.172840 0.247213 -0.179631 +v -0.185218 0.239041 -0.195153 +v -0.195848 0.226042 -0.208482 +v -0.204004 0.209100 -0.218710 +v -0.209132 0.189372 -0.225139 +v -0.162974 0.250000 -0.159557 +v -0.227332 0.168201 -0.210880 +v -0.179631 0.247213 -0.172840 +v -0.195153 0.239041 -0.185218 +v -0.208482 0.226042 -0.195848 +v -0.218710 0.209100 -0.204004 +v -0.225139 0.189372 -0.209132 +v -0.165546 0.250000 -0.155464 +v -0.239711 0.168201 -0.191180 +v -0.184741 0.247213 -0.164708 +v -0.202628 0.239041 -0.173322 +v -0.217988 0.226042 -0.180719 +v -0.229774 0.209100 -0.186395 +v -0.237183 0.189372 -0.189963 +v -0.167142 0.250000 -0.150902 +v -0.247395 0.168201 -0.169219 +v -0.187913 0.247213 -0.155643 +v -0.207268 0.239041 -0.160061 +v -0.223889 0.226042 -0.163854 +v -0.236643 0.209100 -0.166765 +v -0.244660 0.189372 -0.168595 +v -0.168201 -0.250000 -0.141505 +v -0.250000 -0.168201 -0.146099 +v -0.189372 -0.247213 -0.142694 +v -0.209100 -0.239041 -0.143802 +v -0.226042 -0.226042 -0.144754 +v -0.239041 -0.209100 -0.145484 +v -0.247213 -0.189372 -0.145943 +v -0.141506 -0.250000 -0.168201 +v -0.146099 -0.168201 -0.250000 +v -0.142694 -0.247213 -0.189372 +v -0.143802 -0.239041 -0.209100 +v -0.144754 -0.226042 -0.226042 +v -0.145484 -0.209100 -0.239041 +v -0.145943 -0.189372 -0.247213 +v -0.167142 -0.250000 -0.150902 +v -0.247395 -0.168201 -0.169219 +v -0.187913 -0.247213 -0.155643 +v -0.207269 -0.239041 -0.160061 +v -0.223889 -0.226042 -0.163854 +v -0.236643 -0.209100 -0.166765 +v -0.244660 -0.189372 -0.168595 +v -0.165546 -0.250000 -0.155464 +v -0.239711 -0.168201 -0.191180 +v -0.184741 -0.247213 -0.164708 +v -0.202628 -0.239041 -0.173322 +v -0.217988 -0.226042 -0.180719 +v -0.229774 -0.209100 -0.186395 +v -0.237183 -0.189372 -0.189963 +v -0.162974 -0.250000 -0.159557 +v -0.227332 -0.168201 -0.210880 +v -0.179631 -0.247213 -0.172840 +v -0.195153 -0.239041 -0.185218 +v -0.208482 -0.226042 -0.195848 +v -0.218710 -0.209100 -0.204004 +v -0.225139 -0.189372 -0.209132 +v -0.159557 -0.250000 -0.162974 +v -0.210880 -0.168201 -0.227332 +v -0.172840 -0.247213 -0.179631 +v -0.185218 -0.239041 -0.195153 +v -0.195848 -0.226042 -0.208482 +v -0.204004 -0.209100 -0.218710 +v -0.209131 -0.189372 -0.225139 +v -0.155464 -0.250000 -0.165546 +v -0.191180 -0.168201 -0.239711 +v -0.164708 -0.247213 -0.184741 +v -0.173322 -0.239041 -0.202628 +v -0.180719 -0.226042 -0.217988 +v -0.186395 -0.209100 -0.229774 +v -0.189963 -0.189372 -0.237183 +v -0.150902 -0.250000 -0.167142 +v -0.169219 -0.168201 -0.247395 +v -0.155643 -0.247213 -0.187913 +v -0.160061 -0.239041 -0.207268 +v -0.163854 -0.226042 -0.223889 +v -0.166765 -0.209100 -0.236643 +v -0.168595 -0.189372 -0.244660 +v 0.168201 0.250000 -0.141506 +v 0.250000 0.168201 -0.146099 +v 0.189372 0.247213 -0.142694 +v 0.209100 0.239041 -0.143802 +v 0.226042 0.226042 -0.144754 +v 0.239041 0.209100 -0.145484 +v 0.247213 0.189372 -0.145943 +v 0.141505 0.250000 -0.168201 +v 0.146099 0.168201 -0.250000 +v 0.142694 0.247213 -0.189372 +v 0.143802 0.239041 -0.209100 +v 0.144754 0.226042 -0.226042 +v 0.145484 0.209100 -0.239041 +v 0.145943 0.189372 -0.247213 +v 0.167142 0.250000 -0.150902 +v 0.247395 0.168201 -0.169219 +v 0.187913 0.247213 -0.155643 +v 0.207269 0.239041 -0.160061 +v 0.223889 0.226042 -0.163854 +v 0.236643 0.209100 -0.166765 +v 0.244660 0.189372 -0.168595 +v 0.165546 0.250000 -0.155464 +v 0.239711 0.168201 -0.191180 +v 0.184741 0.247213 -0.164708 +v 0.202628 0.239041 -0.173322 +v 0.217988 0.226042 -0.180719 +v 0.229774 0.209100 -0.186395 +v 0.237183 0.189372 -0.189963 +v 0.162974 0.250000 -0.159557 +v 0.227332 0.168201 -0.210880 +v 0.179631 0.247213 -0.172840 +v 0.195153 0.239041 -0.185218 +v 0.208482 0.226042 -0.195848 +v 0.218710 0.209100 -0.204004 +v 0.225139 0.189372 -0.209132 +v 0.159557 0.250000 -0.162974 +v 0.210880 0.168201 -0.227332 +v 0.172840 0.247213 -0.179631 +v 0.185218 0.239041 -0.195153 +v 0.195848 0.226042 -0.208482 +v 0.204004 0.209100 -0.218710 +v 0.209132 0.189372 -0.225139 +v 0.155464 0.250000 -0.165546 +v 0.191180 0.168201 -0.239711 +v 0.164708 0.247213 -0.184741 +v 0.173322 0.239041 -0.202628 +v 0.180719 0.226042 -0.217988 +v 0.186395 0.209100 -0.229774 +v 0.189963 0.189372 -0.237183 +v 0.150902 0.250000 -0.167142 +v 0.169219 0.168201 -0.247395 +v 0.155643 0.247213 -0.187913 +v 0.160061 0.239041 -0.207268 +v 0.163854 0.226042 -0.223889 +v 0.166765 0.209100 -0.236643 +v 0.168595 0.189372 -0.244660 +v 0.141506 -0.250000 -0.168201 +v 0.146099 -0.168201 -0.250000 +v 0.142694 -0.247213 -0.189372 +v 0.143802 -0.239041 -0.209100 +v 0.144754 -0.226042 -0.226042 +v 0.145484 -0.209100 -0.239041 +v 0.145943 -0.189372 -0.247213 +v 0.168201 -0.250000 -0.141506 +v 0.250000 -0.168201 -0.146099 +v 0.189372 -0.247213 -0.142694 +v 0.209100 -0.239041 -0.143802 +v 0.226042 -0.226042 -0.144754 +v 0.239041 -0.209100 -0.145484 +v 0.247213 -0.189372 -0.145943 +v 0.150902 -0.250000 -0.167142 +v 0.169219 -0.168201 -0.247395 +v 0.155643 -0.247213 -0.187913 +v 0.160061 -0.239041 -0.207268 +v 0.163854 -0.226042 -0.223889 +v 0.166765 -0.209100 -0.236643 +v 0.168595 -0.189372 -0.244660 +v 0.155464 -0.250000 -0.165546 +v 0.191180 -0.168201 -0.239711 +v 0.164708 -0.247213 -0.184741 +v 0.173322 -0.239041 -0.202628 +v 0.180719 -0.226042 -0.217988 +v 0.186395 -0.209100 -0.229774 +v 0.189963 -0.189372 -0.237183 +v 0.159557 -0.250000 -0.162974 +v 0.210880 -0.168201 -0.227332 +v 0.172840 -0.247213 -0.179631 +v 0.185218 -0.239041 -0.195153 +v 0.195848 -0.226042 -0.208482 +v 0.204004 -0.209100 -0.218710 +v 0.209132 -0.189372 -0.225139 +v 0.162974 -0.250000 -0.159557 +v 0.227332 -0.168201 -0.210880 +v 0.179631 -0.247213 -0.172840 +v 0.195153 -0.239041 -0.185218 +v 0.208482 -0.226042 -0.195848 +v 0.218710 -0.209100 -0.204004 +v 0.225139 -0.189372 -0.209131 +v 0.165546 -0.250000 -0.155464 +v 0.239711 -0.168201 -0.191180 +v 0.184741 -0.247213 -0.164708 +v 0.202628 -0.239041 -0.173322 +v 0.217988 -0.226042 -0.180719 +v 0.229774 -0.209100 -0.186395 +v 0.237184 -0.189372 -0.189963 +v 0.167142 -0.250000 -0.150902 +v 0.247395 -0.168201 -0.169219 +v 0.187913 -0.247213 -0.155643 +v 0.207269 -0.239041 -0.160061 +v 0.223889 -0.226042 -0.163854 +v 0.236643 -0.209100 -0.166765 +v 0.244660 -0.189372 -0.168595 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.7130 0.4637 +vt 0.7238 0.4746 +vt 0.7366 0.4831 +vt 0.7508 0.4890 +vt 0.7659 0.4920 +vt 0.7812 0.4920 +vt 0.7963 0.4890 +vt 0.8105 0.4831 +vt 0.8233 0.4746 +vt 0.8342 0.4637 +vt 0.8427 0.4509 +vt 0.8486 0.4367 +vt 0.8516 0.4217 +vt 0.8516 0.4063 +vt 0.8486 0.3912 +vt 0.8427 0.3770 +vt 0.8342 0.3642 +vt 0.8233 0.3534 +vt 0.8105 0.3448 +vt 0.7963 0.3390 +vt 0.7812 0.3360 +vt 0.7659 0.3360 +vt 0.7508 0.3390 +vt 0.7366 0.3448 +vt 0.7238 0.3534 +vt 0.7130 0.3642 +vt 0.7044 0.3770 +vt 0.6986 0.3912 +vt 0.6956 0.4063 +vt 0.6956 0.4217 +vt 0.6986 0.4367 +vt 0.7044 0.4509 +vt 0.6089 0.3390 +vt 0.6231 0.3448 +vt 0.6358 0.3534 +vt 0.6467 0.3642 +vt 0.6552 0.3770 +vt 0.6611 0.3912 +vt 0.6641 0.4063 +vt 0.6641 0.4217 +vt 0.6611 0.4367 +vt 0.6552 0.4509 +vt 0.6467 0.4637 +vt 0.6358 0.4746 +vt 0.6231 0.4831 +vt 0.6089 0.4890 +vt 0.5938 0.4920 +vt 0.5784 0.4920 +vt 0.5634 0.4890 +vt 0.5492 0.4831 +vt 0.5364 0.4746 +vt 0.5255 0.4637 +vt 0.5170 0.4509 +vt 0.5111 0.4367 +vt 0.5081 0.4217 +vt 0.5081 0.4063 +vt 0.5111 0.3912 +vt 0.5170 0.3770 +vt 0.5255 0.3642 +vt 0.5364 0.3534 +vt 0.5492 0.3448 +vt 0.5634 0.3390 +vt 0.5784 0.3360 +vt 0.5938 0.3360 +vt 0.7812 0.3360 +vt 0.7963 0.3390 +vt 0.8105 0.3448 +vt 0.8233 0.3534 +vt 0.8342 0.3642 +vt 0.8427 0.3770 +vt 0.8486 0.3912 +vt 0.8516 0.4063 +vt 0.8516 0.4217 +vt 0.8486 0.4367 +vt 0.8427 0.4509 +vt 0.8342 0.4637 +vt 0.8233 0.4746 +vt 0.8105 0.4831 +vt 0.7963 0.4890 +vt 0.7812 0.4920 +vt 0.7659 0.4920 +vt 0.7508 0.4890 +vt 0.7366 0.4831 +vt 0.7238 0.4746 +vt 0.7130 0.4637 +vt 0.7044 0.4509 +vt 0.6986 0.4367 +vt 0.6956 0.4217 +vt 0.6956 0.4063 +vt 0.6986 0.3912 +vt 0.7044 0.3770 +vt 0.7130 0.3642 +vt 0.7238 0.3534 +vt 0.7366 0.3448 +vt 0.7508 0.3390 +vt 0.7659 0.3360 +vt 0.5492 0.3448 +vt 0.5364 0.3534 +vt 0.5255 0.3642 +vt 0.5170 0.3770 +vt 0.5111 0.3912 +vt 0.5081 0.4063 +vt 0.5081 0.4217 +vt 0.5111 0.4367 +vt 0.5170 0.4509 +vt 0.5255 0.4637 +vt 0.5364 0.4746 +vt 0.5492 0.4831 +vt 0.5634 0.4890 +vt 0.5784 0.4920 +vt 0.5938 0.4920 +vt 0.6089 0.4890 +vt 0.6231 0.4831 +vt 0.6358 0.4746 +vt 0.6467 0.4637 +vt 0.6552 0.4509 +vt 0.6611 0.4367 +vt 0.6641 0.4217 +vt 0.6641 0.4063 +vt 0.6611 0.3912 +vt 0.6552 0.3770 +vt 0.6467 0.3642 +vt 0.6358 0.3534 +vt 0.6231 0.3448 +vt 0.6089 0.3390 +vt 0.5938 0.3360 +vt 0.5784 0.3360 +vt 0.5634 0.3390 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.8359 0.3594 +vt 0.8426 0.3555 +vt 0.8426 0.3478 +vt 0.8359 0.3439 +vt 0.8292 0.3478 +vt 0.8292 0.3555 +vt 0.4747 0.6940 +vt 0.3065 0.6940 +vt 0.3065 0.6824 +vt 0.4747 0.6824 +vt 0.4636 0.9591 +vt 0.4636 0.7909 +vt 0.4752 0.7909 +vt 0.4752 0.9591 +vt 0.0404 0.6935 +vt 0.0404 0.5253 +vt 0.0520 0.5253 +vt 0.0520 0.6935 +vt 0.0409 0.2592 +vt 0.2091 0.2592 +vt 0.2091 0.2708 +vt 0.0409 0.2708 +vt 0.4747 0.5248 +vt 0.3065 0.5248 +vt 0.3065 0.5138 +vt 0.4747 0.5138 +vt 0.3060 0.9591 +vt 0.3060 0.7909 +vt 0.3176 0.7909 +vt 0.3176 0.9591 +vt 0.2206 0.6935 +vt 0.2206 0.5253 +vt 0.2304 0.5253 +vt 0.2304 0.6935 +vt 0.2500 0.5253 +vt 0.2500 0.6935 +vt 0.2852 0.9591 +vt 0.2852 0.7909 +vt 0.2950 0.7909 +vt 0.2950 0.9591 +vt 0.2096 0.6935 +vt 0.2096 0.5253 +vt 0.4747 0.5364 +vt 0.3065 0.5364 +vt 0.3065 0.5040 +vt 0.4747 0.5040 +vt 0.3065 0.4844 +vt 0.4747 0.4844 +vt 0.0196 0.6935 +vt 0.0196 0.5253 +vt 0.0294 0.5253 +vt 0.0294 0.6935 +vt 0.0409 0.4168 +vt 0.2091 0.4168 +vt 0.2091 0.4284 +vt 0.0409 0.4284 +vt 0.1980 0.6935 +vt 0.1980 0.5253 +vt 0.0409 0.4394 +vt 0.2091 0.4394 +vt 0.2091 0.4492 +vt 0.0409 0.4492 +vt 0.2091 0.4688 +vt 0.0409 0.4688 +vt 0.4747 0.7148 +vt 0.3065 0.7148 +vt 0.3065 0.7050 +vt 0.4747 0.7050 +vt 0.7403 0.9457 +vt 0.7398 0.9504 +vt 0.7390 0.9527 +vt 0.7377 0.9548 +vt 0.7360 0.9565 +vt 0.7340 0.9578 +vt 0.7317 0.9586 +vt 0.7270 0.9591 +vt 0.5855 0.9591 +vt 0.5808 0.9586 +vt 0.5785 0.9578 +vt 0.5765 0.9565 +vt 0.5748 0.9548 +vt 0.5735 0.9527 +vt 0.5727 0.9504 +vt 0.5721 0.9457 +vt 0.5721 0.8042 +vt 0.5727 0.7995 +vt 0.5735 0.7973 +vt 0.5748 0.7952 +vt 0.5765 0.7935 +vt 0.5785 0.7922 +vt 0.5808 0.7914 +vt 0.5855 0.7909 +vt 0.7270 0.7909 +vt 0.7317 0.7914 +vt 0.7340 0.7922 +vt 0.7360 0.7935 +vt 0.7377 0.7952 +vt 0.7390 0.7973 +vt 0.7398 0.7995 +vt 0.7403 0.8042 +vt 0.4862 0.9591 +vt 0.4862 0.7909 +vt 0.4960 0.7909 +vt 0.4960 0.9591 +vt 0.5156 0.7909 +vt 0.5156 0.9591 +vt 0.0409 0.2384 +vt 0.2091 0.2384 +vt 0.2091 0.2482 +vt 0.0409 0.2482 +vt 0.0547 0.2031 +vt 0.0547 0.1875 +vt 0.0703 0.1875 +vt 0.0703 0.2031 +vt 0.0859 0.1875 +vt 0.0859 0.2031 +vt 0.1016 0.2031 +vt 0.1016 0.1875 +vt 0.1172 0.1875 +vt 0.1172 0.2031 +vt 0.1328 0.1875 +vt 0.1328 0.2031 +vt 0.1484 0.2031 +vt 0.1484 0.1875 +vt 0.1641 0.1875 +vt 0.1641 0.2031 +vt 0.1797 0.1875 +vt 0.1797 0.2031 +vt 0.0547 0.2031 +vt 0.0547 0.1875 +vt 0.0703 0.1875 +vt 0.0703 0.2031 +vt 0.0859 0.1875 +vt 0.0859 0.2031 +vt 0.1016 0.2031 +vt 0.1016 0.1875 +vt 0.1172 0.1875 +vt 0.1172 0.2031 +vt 0.1328 0.1875 +vt 0.1328 0.2031 +vt 0.1484 0.2031 +vt 0.1484 0.1875 +vt 0.1641 0.1875 +vt 0.1641 0.2031 +vt 0.1797 0.1875 +vt 0.1797 0.2031 +vt 0.2887 0.2433 +vt 0.2887 0.2594 +vt 0.2829 0.2594 +vt 0.2829 0.2433 +vt 0.2721 0.2433 +vt 0.2721 0.2594 +vt 0.2675 0.2594 +vt 0.2675 0.2433 +vt 0.3127 0.1949 +vt 0.3127 0.2110 +vt 0.3086 0.2110 +vt 0.3086 0.1949 +vt 0.3039 0.2110 +vt 0.3039 0.1949 +vt 0.2986 0.2110 +vt 0.2986 0.1949 +vt 0.2930 0.2110 +vt 0.2930 0.1949 +vt 0.2872 0.2110 +vt 0.2872 0.1949 +vt 0.2816 0.2110 +vt 0.2816 0.1949 +vt 0.2763 0.2110 +vt 0.2763 0.1949 +vt 0.2715 0.2110 +vt 0.2715 0.1949 +vt 0.2675 0.2110 +vt 0.2675 0.1949 +vt 0.4555 0.2905 +vt 0.4555 0.3065 +vt 0.4509 0.3065 +vt 0.4509 0.2905 +vt 0.4457 0.3065 +vt 0.4457 0.2905 +vt 0.4401 0.3065 +vt 0.4401 0.2905 +vt 0.4344 0.3065 +vt 0.4344 0.2905 +vt 0.4287 0.3065 +vt 0.4287 0.2905 +vt 0.4064 0.3065 +vt 0.4064 0.2905 +vt 0.3777 0.2111 +vt 0.3777 0.1951 +vt 0.3830 0.1951 +vt 0.3830 0.2111 +vt 0.4258 0.2594 +vt 0.4258 0.2433 +vt 0.4313 0.2433 +vt 0.4313 0.2594 +vt 0.3732 0.2111 +vt 0.3732 0.1951 +vt 0.3166 0.2433 +vt 0.3166 0.2594 +vt 0.2943 0.2594 +vt 0.2943 0.2433 +vt 0.2902 0.4591 +vt 0.2902 0.4177 +vt 0.2954 0.4175 +vt 0.2759 0.3065 +vt 0.2759 0.2905 +vt 0.2809 0.2905 +vt 0.2809 0.3065 +vt 0.3680 0.2111 +vt 0.3680 0.1951 +vt 0.3880 0.1951 +vt 0.3880 0.2111 +vt 0.3925 0.1951 +vt 0.3925 0.2111 +vt 0.2675 0.3065 +vt 0.2675 0.2905 +vt 0.2714 0.2905 +vt 0.2714 0.3065 +vt 0.2918 0.2905 +vt 0.2918 0.3065 +vt 0.2862 0.3065 +vt 0.2862 0.2905 +vt 0.3630 0.2111 +vt 0.3630 0.1951 +vt 0.3874 0.2594 +vt 0.3874 0.2433 +vt 0.3928 0.2433 +vt 0.3928 0.2594 +vt 0.4421 0.2594 +vt 0.4421 0.2433 +vt 0.4471 0.2433 +vt 0.4471 0.2594 +vt 0.4517 0.2433 +vt 0.4517 0.2594 +vt 0.4555 0.2433 +vt 0.4555 0.2594 +vt 0.3585 0.2111 +vt 0.3585 0.1951 +vt 0.4368 0.2433 +vt 0.4368 0.2594 +vt 0.2972 0.3065 +vt 0.2972 0.2905 +vt 0.3035 0.2905 +vt 0.3035 0.3065 +vt 0.2774 0.2594 +vt 0.2774 0.2433 +vt 0.3302 0.3065 +vt 0.3302 0.2905 +vt 0.3357 0.2905 +vt 0.3357 0.3065 +vt 0.3103 0.2905 +vt 0.3103 0.3065 +vt 0.3172 0.2905 +vt 0.3172 0.3065 +vt 0.3240 0.2905 +vt 0.3240 0.3065 +vt 0.3416 0.2594 +vt 0.3416 0.2433 +vt 0.3443 0.2433 +vt 0.3443 0.2594 +vt 0.3787 0.2905 +vt 0.3787 0.3065 +vt 0.3990 0.2594 +vt 0.3990 0.2433 +vt 0.4058 0.2433 +vt 0.4058 0.2594 +vt 0.4127 0.2433 +vt 0.4127 0.2594 +vt 0.4195 0.2433 +vt 0.4195 0.2594 +vt 0.4038 0.3065 +vt 0.4038 0.2905 +vt 0.3844 0.3065 +vt 0.3844 0.2905 +vt 0.3876 0.2905 +vt 0.3876 0.3065 +vt 0.3909 0.2905 +vt 0.3909 0.3065 +vt 0.3943 0.2905 +vt 0.3943 0.3065 +vt 0.3977 0.2905 +vt 0.3977 0.3065 +vt 0.4009 0.2905 +vt 0.4009 0.3065 +vt 0.3814 0.3065 +vt 0.3814 0.2905 +vt 0.3387 0.2594 +vt 0.3387 0.2433 +vt 0.3192 0.2594 +vt 0.3192 0.2433 +vt 0.3221 0.2433 +vt 0.3221 0.2594 +vt 0.3253 0.2433 +vt 0.3253 0.2594 +vt 0.3287 0.2433 +vt 0.3287 0.2594 +vt 0.3321 0.2433 +vt 0.3321 0.2594 +vt 0.3355 0.2433 +vt 0.3355 0.2594 +vt 0.2775 0.2409 +vt 0.2830 0.2409 +vt 0.2778 0.2387 +vt 0.2831 0.2387 +vt 0.2925 0.3900 +vt 0.2871 0.3888 +vt 0.2876 0.3871 +vt 0.2926 0.3882 +vt 0.2882 0.3850 +vt 0.2928 0.3860 +vt 0.2888 0.3827 +vt 0.2930 0.3836 +vt 0.2830 0.2618 +vt 0.2775 0.2618 +vt 0.2831 0.2640 +vt 0.2778 0.2640 +vt 0.4487 0.4676 +vt 0.4434 0.4688 +vt 0.4432 0.4670 +vt 0.4483 0.4659 +vt 0.4430 0.4648 +vt 0.4477 0.4638 +vt 0.4428 0.4624 +vt 0.4471 0.4615 +vt 0.2723 0.2409 +vt 0.2728 0.2387 +vt 0.2821 0.3865 +vt 0.2828 0.3850 +vt 0.2838 0.3830 +vt 0.2848 0.3809 +vt 0.2723 0.2618 +vt 0.2728 0.2640 +vt 0.4538 0.4653 +vt 0.4530 0.4638 +vt 0.4521 0.4618 +vt 0.4510 0.4596 +vt 0.2677 0.2409 +vt 0.2684 0.2387 +vt 0.2775 0.3832 +vt 0.2785 0.3818 +vt 0.2798 0.3801 +vt 0.2812 0.3782 +vt 0.2677 0.2618 +vt 0.2684 0.2640 +vt 0.4583 0.4620 +vt 0.4573 0.4606 +vt 0.4560 0.4589 +vt 0.4546 0.4570 +vt 0.3084 0.1925 +vt 0.3124 0.1925 +vt 0.3078 0.1903 +vt 0.3116 0.1903 +vt 0.2737 0.3790 +vt 0.2749 0.3779 +vt 0.2765 0.3765 +vt 0.2782 0.3749 +vt 0.3124 0.2134 +vt 0.3084 0.2134 +vt 0.3116 0.2156 +vt 0.3078 0.2156 +vt 0.4622 0.4578 +vt 0.4610 0.4566 +vt 0.4594 0.4552 +vt 0.4577 0.4537 +vt 0.3037 0.1925 +vt 0.3032 0.1903 +vt 0.2706 0.3740 +vt 0.2721 0.3732 +vt 0.2738 0.3721 +vt 0.2758 0.3710 +vt 0.3037 0.2134 +vt 0.3032 0.2156 +vt 0.4652 0.4528 +vt 0.4638 0.4520 +vt 0.4620 0.4509 +vt 0.4601 0.4498 +vt 0.2985 0.1925 +vt 0.2982 0.1903 +vt 0.2686 0.3685 +vt 0.2701 0.3680 +vt 0.2720 0.3673 +vt 0.2741 0.3666 +vt 0.2985 0.2134 +vt 0.2982 0.2156 +vt 0.4673 0.4473 +vt 0.4658 0.4468 +vt 0.4639 0.4461 +vt 0.4617 0.4454 +vt 0.2929 0.1925 +vt 0.2928 0.1903 +vt 0.2675 0.3626 +vt 0.2691 0.3624 +vt 0.2711 0.3622 +vt 0.2733 0.3620 +vt 0.2929 0.2134 +vt 0.2928 0.2156 +vt 0.4684 0.4414 +vt 0.4668 0.4412 +vt 0.4648 0.4410 +vt 0.4626 0.4408 +vt 0.2873 0.1925 +vt 0.2874 0.1903 +vt 0.2875 0.1885 +vt 0.2927 0.1885 +vt 0.2691 0.3568 +vt 0.2711 0.3570 +vt 0.2733 0.3573 +vt 0.2873 0.2134 +vt 0.2874 0.2156 +vt 0.2927 0.2174 +vt 0.2875 0.2174 +vt 0.4668 0.4356 +vt 0.4648 0.4358 +vt 0.4626 0.4361 +vt 0.2817 0.1925 +vt 0.2820 0.1903 +vt 0.2675 0.3566 +vt 0.2686 0.3508 +vt 0.2701 0.3513 +vt 0.2720 0.3519 +vt 0.2741 0.3526 +vt 0.2817 0.2134 +vt 0.2820 0.2156 +vt 0.4673 0.4296 +vt 0.4684 0.4354 +vt 0.4658 0.4301 +vt 0.4639 0.4307 +vt 0.4617 0.4314 +vt 0.2765 0.1925 +vt 0.2770 0.1903 +vt 0.2706 0.3453 +vt 0.2721 0.3461 +vt 0.2738 0.3471 +vt 0.2758 0.3483 +vt 0.2765 0.2134 +vt 0.2770 0.2156 +vt 0.4652 0.4240 +vt 0.4638 0.4249 +vt 0.4620 0.4259 +vt 0.4601 0.4271 +vt 0.2718 0.1925 +vt 0.2724 0.1903 +vt 0.2737 0.3403 +vt 0.2749 0.3414 +vt 0.2765 0.3428 +vt 0.2782 0.3444 +vt 0.2718 0.2134 +vt 0.2724 0.2156 +vt 0.4622 0.4191 +vt 0.4610 0.4202 +vt 0.4594 0.4216 +vt 0.4577 0.4232 +vt 0.2678 0.1925 +vt 0.2686 0.1903 +vt 0.2775 0.3361 +vt 0.2785 0.3374 +vt 0.2798 0.3391 +vt 0.2812 0.3410 +vt 0.2678 0.2134 +vt 0.2686 0.2156 +vt 0.4583 0.4149 +vt 0.4573 0.4162 +vt 0.4560 0.4179 +vt 0.4546 0.4198 +vt 0.4507 0.2880 +vt 0.4553 0.2880 +vt 0.4502 0.2858 +vt 0.4546 0.2858 +vt 0.2821 0.3327 +vt 0.2828 0.3343 +vt 0.2838 0.3362 +vt 0.2848 0.3384 +vt 0.4553 0.3090 +vt 0.4507 0.3090 +vt 0.4546 0.3112 +vt 0.4502 0.3112 +vt 0.4538 0.4115 +vt 0.4530 0.4131 +vt 0.4521 0.4150 +vt 0.4510 0.4172 +vt 0.4456 0.2880 +vt 0.4452 0.2858 +vt 0.2871 0.3305 +vt 0.2876 0.3321 +vt 0.2882 0.3342 +vt 0.2888 0.3366 +vt 0.4456 0.3090 +vt 0.4452 0.3112 +vt 0.4487 0.4092 +vt 0.4483 0.4109 +vt 0.4477 0.4130 +vt 0.4471 0.4154 +vt 0.4400 0.2880 +vt 0.4399 0.2858 +vt 0.2925 0.3293 +vt 0.2926 0.3310 +vt 0.2928 0.3332 +vt 0.2930 0.3357 +vt 0.4400 0.3090 +vt 0.4399 0.3112 +vt 0.4434 0.4081 +vt 0.4432 0.4098 +vt 0.4430 0.4120 +vt 0.4428 0.4145 +vt 0.4344 0.2880 +vt 0.4345 0.2858 +vt 0.2979 0.3293 +vt 0.2978 0.3310 +vt 0.2976 0.3332 +vt 0.2973 0.3357 +vt 0.4344 0.3090 +vt 0.4345 0.3112 +vt 0.4379 0.4081 +vt 0.4381 0.4098 +vt 0.4383 0.4120 +vt 0.4385 0.4145 +vt 0.4288 0.2880 +vt 0.4290 0.2858 +vt 0.3034 0.3305 +vt 0.3030 0.3322 +vt 0.3025 0.3343 +vt 0.3019 0.3367 +vt 0.4288 0.3090 +vt 0.4290 0.3112 +vt 0.4325 0.4093 +vt 0.4329 0.4110 +vt 0.4334 0.4131 +vt 0.4339 0.4155 +vt 0.2886 0.2409 +vt 0.2942 0.2409 +vt 0.2886 0.2387 +vt 0.2940 0.2387 +vt 0.3034 0.3888 +vt 0.2979 0.3900 +vt 0.2978 0.3882 +vt 0.3030 0.3871 +vt 0.2976 0.3860 +vt 0.3025 0.3850 +vt 0.2973 0.3836 +vt 0.3019 0.3826 +vt 0.2942 0.2618 +vt 0.2886 0.2618 +vt 0.2940 0.2640 +vt 0.2886 0.2640 +vt 0.4379 0.4688 +vt 0.4325 0.4676 +vt 0.4329 0.4659 +vt 0.4381 0.4670 +vt 0.4334 0.4637 +vt 0.4383 0.4648 +vt 0.4339 0.4614 +vt 0.4385 0.4624 +vt 0.2738 0.4320 +vt 0.2733 0.4364 +vt 0.2711 0.4363 +vt 0.2716 0.4314 +vt 0.2691 0.4361 +vt 0.2696 0.4309 +vt 0.2675 0.4360 +vt 0.2681 0.4306 +vt 0.3827 0.2158 +vt 0.3777 0.2158 +vt 0.3777 0.2136 +vt 0.3829 0.2136 +vt 0.4625 0.3576 +vt 0.4621 0.3532 +vt 0.4642 0.3526 +vt 0.4647 0.3575 +vt 0.4662 0.3522 +vt 0.4668 0.3574 +vt 0.4678 0.3518 +vt 0.4684 0.3573 +vt 0.3777 0.1904 +vt 0.3827 0.1904 +vt 0.3829 0.1926 +vt 0.3777 0.1926 +vt 0.2750 0.4282 +vt 0.2730 0.4271 +vt 0.2712 0.4262 +vt 0.2697 0.4254 +vt 0.3874 0.2158 +vt 0.3878 0.2136 +vt 0.4608 0.3494 +vt 0.4629 0.3483 +vt 0.4647 0.3474 +vt 0.4662 0.3466 +vt 0.3874 0.1904 +vt 0.3878 0.1926 +vt 0.2770 0.4247 +vt 0.2752 0.4232 +vt 0.2736 0.4219 +vt 0.2723 0.4208 +vt 0.3916 0.2158 +vt 0.3922 0.2136 +vt 0.4589 0.3460 +vt 0.4607 0.3444 +vt 0.4623 0.3431 +vt 0.4635 0.3420 +vt 0.3916 0.1904 +vt 0.3922 0.1926 +vt 0.2796 0.4219 +vt 0.2782 0.4200 +vt 0.2769 0.4182 +vt 0.2758 0.4169 +vt 0.2722 0.3112 +vt 0.2686 0.3112 +vt 0.2678 0.3090 +vt 0.2716 0.3090 +vt 0.4563 0.3431 +vt 0.4577 0.3412 +vt 0.4590 0.3394 +vt 0.4600 0.3381 +vt 0.2686 0.2858 +vt 0.2722 0.2858 +vt 0.2716 0.2880 +vt 0.2678 0.2880 +vt 0.2827 0.4197 +vt 0.2817 0.4175 +vt 0.2808 0.4155 +vt 0.2801 0.4139 +vt 0.2765 0.3112 +vt 0.2761 0.3090 +vt 0.4532 0.3409 +vt 0.4542 0.3387 +vt 0.4551 0.3367 +vt 0.4558 0.3351 +vt 0.2765 0.2858 +vt 0.2761 0.2880 +vt 0.2861 0.4183 +vt 0.2856 0.4159 +vt 0.2851 0.4138 +vt 0.2847 0.4121 +vt 0.2812 0.3112 +vt 0.2810 0.3090 +vt 0.4497 0.3395 +vt 0.4503 0.3371 +vt 0.4507 0.3350 +vt 0.4511 0.3333 +vt 0.2812 0.2858 +vt 0.2810 0.2880 +vt 0.2901 0.4153 +vt 0.2899 0.4131 +vt 0.2898 0.4114 +vt 0.2863 0.3112 +vt 0.2862 0.3090 +vt 0.4456 0.3389 +vt 0.4458 0.3365 +vt 0.4460 0.3343 +vt 0.4461 0.3326 +vt 0.2863 0.2858 +vt 0.2862 0.2880 +vt 0.2861 0.4585 +vt 0.2901 0.4615 +vt 0.2856 0.4609 +vt 0.2899 0.4637 +vt 0.2851 0.4631 +vt 0.2898 0.4655 +vt 0.2847 0.4648 +vt 0.4418 0.2640 +vt 0.4368 0.2640 +vt 0.4368 0.2618 +vt 0.4420 0.2618 +vt 0.4456 0.3803 +vt 0.4497 0.3797 +vt 0.4503 0.3821 +vt 0.4458 0.3827 +vt 0.4507 0.3843 +vt 0.4460 0.3849 +vt 0.4511 0.3860 +vt 0.4461 0.3867 +vt 0.4368 0.2387 +vt 0.4418 0.2387 +vt 0.4420 0.2409 +vt 0.4368 0.2409 +vt 0.2827 0.4572 +vt 0.2817 0.4594 +vt 0.2808 0.4613 +vt 0.2801 0.4629 +vt 0.4465 0.2640 +vt 0.4470 0.2618 +vt 0.4532 0.3784 +vt 0.4542 0.3806 +vt 0.4551 0.3826 +vt 0.4558 0.3841 +vt 0.4465 0.2387 +vt 0.4470 0.2409 +vt 0.2796 0.4550 +vt 0.2782 0.4569 +vt 0.2769 0.4586 +vt 0.2758 0.4600 +vt 0.4508 0.2640 +vt 0.4515 0.2618 +vt 0.4563 0.3762 +vt 0.4577 0.3781 +vt 0.4590 0.3798 +vt 0.4600 0.3812 +vt 0.4508 0.2387 +vt 0.4515 0.2409 +vt 0.2770 0.4521 +vt 0.2752 0.4536 +vt 0.2736 0.4550 +vt 0.2723 0.4561 +vt 0.4545 0.2640 +vt 0.4553 0.2618 +vt 0.4589 0.3733 +vt 0.4607 0.3748 +vt 0.4623 0.3762 +vt 0.4635 0.3773 +vt 0.4545 0.2387 +vt 0.4553 0.2409 +vt 0.2750 0.4487 +vt 0.2730 0.4497 +vt 0.2712 0.4507 +vt 0.2697 0.4514 +vt 0.3636 0.2158 +vt 0.3594 0.2158 +vt 0.3587 0.2136 +vt 0.3631 0.2136 +vt 0.4608 0.3699 +vt 0.4629 0.3709 +vt 0.4647 0.3719 +vt 0.4662 0.3726 +vt 0.3594 0.1904 +vt 0.3636 0.1904 +vt 0.3631 0.1926 +vt 0.3587 0.1926 +vt 0.2738 0.4449 +vt 0.2716 0.4454 +vt 0.2696 0.4459 +vt 0.2681 0.4463 +vt 0.3683 0.2158 +vt 0.3681 0.2136 +vt 0.4621 0.3661 +vt 0.4642 0.3666 +vt 0.4662 0.3671 +vt 0.4678 0.3675 +vt 0.3683 0.1904 +vt 0.3681 0.1926 +vt 0.2733 0.4404 +vt 0.2711 0.4406 +vt 0.2691 0.4407 +vt 0.2675 0.4408 +vt 0.3733 0.2158 +vt 0.3733 0.2136 +vt 0.4625 0.3616 +vt 0.4647 0.3618 +vt 0.4668 0.3619 +vt 0.4684 0.3620 +vt 0.3733 0.1904 +vt 0.3733 0.1926 +vt 0.3006 0.4174 +vt 0.2953 0.4151 +vt 0.3007 0.4150 +vt 0.2953 0.4129 +vt 0.3007 0.4128 +vt 0.2952 0.4112 +vt 0.3007 0.4110 +vt 0.2972 0.3112 +vt 0.2917 0.3112 +vt 0.2918 0.3090 +vt 0.2972 0.3090 +vt 0.4404 0.3387 +vt 0.4350 0.3386 +vt 0.4351 0.3362 +vt 0.4405 0.3363 +vt 0.4351 0.3340 +vt 0.4405 0.3341 +vt 0.4352 0.3323 +vt 0.4406 0.3324 +vt 0.2918 0.2858 +vt 0.2972 0.2858 +vt 0.2972 0.2880 +vt 0.2918 0.2880 +vt 0.3068 0.4175 +vt 0.3068 0.4150 +vt 0.3069 0.4128 +vt 0.3069 0.4111 +vt 0.3034 0.3112 +vt 0.3035 0.3090 +vt 0.4289 0.3387 +vt 0.4289 0.3362 +vt 0.4289 0.3340 +vt 0.4289 0.3323 +vt 0.3034 0.2858 +vt 0.3035 0.2880 +vt 0.3135 0.4177 +vt 0.3135 0.4152 +vt 0.3136 0.4130 +vt 0.3137 0.4113 +vt 0.3102 0.3112 +vt 0.3103 0.3090 +vt 0.4223 0.3389 +vt 0.4222 0.3364 +vt 0.4222 0.3342 +vt 0.4222 0.3325 +vt 0.3102 0.2858 +vt 0.3103 0.2880 +vt 0.3203 0.4180 +vt 0.3204 0.4156 +vt 0.3205 0.4134 +vt 0.3206 0.4116 +vt 0.3171 0.3112 +vt 0.3172 0.3090 +vt 0.4154 0.3392 +vt 0.4154 0.3368 +vt 0.4153 0.3346 +vt 0.4152 0.3328 +vt 0.3171 0.2858 +vt 0.3172 0.2880 +vt 0.3269 0.4184 +vt 0.3271 0.4160 +vt 0.3273 0.4138 +vt 0.3274 0.4121 +vt 0.3238 0.3112 +vt 0.3240 0.3090 +vt 0.4088 0.3397 +vt 0.4087 0.3372 +vt 0.4085 0.3350 +vt 0.4085 0.3333 +vt 0.3239 0.2858 +vt 0.3240 0.2880 +vt 0.3330 0.4190 +vt 0.3332 0.4166 +vt 0.3335 0.4144 +vt 0.3336 0.4126 +vt 0.3301 0.3112 +vt 0.3302 0.3090 +vt 0.4027 0.3402 +vt 0.4025 0.3378 +vt 0.4023 0.3356 +vt 0.4022 0.3338 +vt 0.3301 0.2858 +vt 0.3302 0.2880 +vt 0.3383 0.4196 +vt 0.3386 0.4172 +vt 0.3388 0.4150 +vt 0.3390 0.4133 +vt 0.3354 0.3112 +vt 0.3356 0.3090 +vt 0.3974 0.3408 +vt 0.3972 0.3384 +vt 0.3970 0.3362 +vt 0.3968 0.3345 +vt 0.3355 0.2858 +vt 0.3356 0.2880 +vt 0.3332 0.4578 +vt 0.3384 0.4572 +vt 0.3387 0.4596 +vt 0.3334 0.4603 +vt 0.3389 0.4618 +vt 0.3335 0.4625 +vt 0.3390 0.4636 +vt 0.3336 0.4642 +vt 0.3929 0.2640 +vt 0.3876 0.2640 +vt 0.3874 0.2618 +vt 0.3928 0.2618 +vt 0.3975 0.3784 +vt 0.4028 0.3791 +vt 0.4026 0.3815 +vt 0.3973 0.3809 +vt 0.4024 0.3837 +vt 0.3970 0.3831 +vt 0.4023 0.3854 +vt 0.3968 0.3848 +vt 0.3876 0.2387 +vt 0.3930 0.2387 +vt 0.3928 0.2409 +vt 0.3874 0.2409 +vt 0.3271 0.4584 +vt 0.3272 0.4608 +vt 0.3273 0.4630 +vt 0.3274 0.4648 +vt 0.3992 0.2640 +vt 0.3991 0.2618 +vt 0.4089 0.3796 +vt 0.4088 0.3820 +vt 0.4086 0.3842 +vt 0.4085 0.3860 +vt 0.3992 0.2387 +vt 0.3991 0.2409 +vt 0.3204 0.4588 +vt 0.3205 0.4613 +vt 0.3206 0.4635 +vt 0.3206 0.4652 +vt 0.4059 0.2640 +vt 0.4058 0.2618 +vt 0.4156 0.3801 +vt 0.4154 0.3825 +vt 0.4153 0.3847 +vt 0.4152 0.3864 +vt 0.4059 0.2387 +vt 0.4058 0.2409 +vt 0.3136 0.4592 +vt 0.3136 0.4616 +vt 0.3137 0.4638 +vt 0.3137 0.4656 +vt 0.4128 0.2640 +vt 0.4128 0.2618 +vt 0.4224 0.3804 +vt 0.4223 0.3828 +vt 0.4222 0.3850 +vt 0.4222 0.3868 +vt 0.4128 0.2387 +vt 0.4128 0.2409 +vt 0.3069 0.4594 +vt 0.3069 0.4618 +vt 0.3069 0.4640 +vt 0.3069 0.4657 +vt 0.4196 0.2640 +vt 0.4195 0.2618 +vt 0.4291 0.3806 +vt 0.4290 0.3830 +vt 0.4290 0.3852 +vt 0.4289 0.3870 +vt 0.4196 0.2387 +vt 0.4195 0.2409 +vt 0.3008 0.4594 +vt 0.3008 0.4618 +vt 0.3007 0.4640 +vt 0.3007 0.4658 +vt 0.4258 0.2640 +vt 0.4258 0.2618 +vt 0.4352 0.3806 +vt 0.4352 0.3831 +vt 0.4352 0.3853 +vt 0.4352 0.3870 +vt 0.4259 0.2387 +vt 0.4258 0.2409 +vt 0.2955 0.4593 +vt 0.2954 0.4617 +vt 0.2953 0.4639 +vt 0.2953 0.4657 +vt 0.4313 0.2640 +vt 0.4313 0.2618 +vt 0.4405 0.3805 +vt 0.4405 0.3829 +vt 0.4406 0.3851 +vt 0.4406 0.3869 +vt 0.4313 0.2387 +vt 0.4313 0.2409 +vt 0.3847 0.4257 +vt 0.3819 0.4254 +vt 0.3821 0.4230 +vt 0.3848 0.4233 +vt 0.3822 0.4208 +vt 0.3850 0.4211 +vt 0.3824 0.4191 +vt 0.3851 0.4193 +vt 0.3812 0.3112 +vt 0.3786 0.3112 +vt 0.3787 0.3090 +vt 0.3813 0.3090 +vt 0.3542 0.3466 +vt 0.3512 0.3469 +vt 0.3510 0.3445 +vt 0.3540 0.3442 +vt 0.3509 0.3423 +vt 0.3537 0.3420 +vt 0.3508 0.3406 +vt 0.3535 0.3403 +vt 0.3785 0.2858 +vt 0.3812 0.2858 +vt 0.3813 0.2880 +vt 0.3787 0.2880 +vt 0.3880 0.4259 +vt 0.3881 0.4234 +vt 0.3881 0.4212 +vt 0.3881 0.4195 +vt 0.3843 0.3112 +vt 0.3843 0.3090 +vt 0.3478 0.3471 +vt 0.3478 0.3446 +vt 0.3478 0.3424 +vt 0.3478 0.3407 +vt 0.3843 0.2858 +vt 0.3843 0.2880 +vt 0.3916 0.4258 +vt 0.3915 0.4234 +vt 0.3914 0.4212 +vt 0.3914 0.4194 +vt 0.3876 0.3112 +vt 0.3876 0.3090 +vt 0.3443 0.3470 +vt 0.3444 0.3446 +vt 0.3444 0.3424 +vt 0.3445 0.3406 +vt 0.3876 0.2858 +vt 0.3876 0.2880 +vt 0.3952 0.4256 +vt 0.3950 0.4232 +vt 0.3949 0.4210 +vt 0.3948 0.4193 +vt 0.3910 0.3112 +vt 0.3909 0.3090 +vt 0.3407 0.3468 +vt 0.3408 0.3444 +vt 0.3410 0.3422 +vt 0.3411 0.3405 +vt 0.3910 0.2858 +vt 0.3909 0.2880 +vt 0.3989 0.4253 +vt 0.3986 0.4229 +vt 0.3984 0.4207 +vt 0.3982 0.4189 +vt 0.3944 0.3112 +vt 0.3944 0.3090 +vt 0.3370 0.3465 +vt 0.3372 0.3441 +vt 0.3374 0.3419 +vt 0.3376 0.3401 +vt 0.3944 0.2858 +vt 0.3944 0.2880 +vt 0.4025 0.4248 +vt 0.4022 0.4224 +vt 0.4019 0.4202 +vt 0.4016 0.4185 +vt 0.3978 0.3112 +vt 0.3977 0.3090 +vt 0.3334 0.3460 +vt 0.3337 0.3436 +vt 0.3340 0.3414 +vt 0.3342 0.3397 +vt 0.3978 0.2858 +vt 0.3977 0.2880 +vt 0.4059 0.4242 +vt 0.4055 0.4218 +vt 0.4052 0.4196 +vt 0.4049 0.4179 +vt 0.4011 0.3112 +vt 0.4009 0.3090 +vt 0.3299 0.3454 +vt 0.3303 0.3430 +vt 0.3307 0.3408 +vt 0.3310 0.3391 +vt 0.4011 0.2858 +vt 0.4009 0.2880 +vt 0.4092 0.4235 +vt 0.4087 0.4211 +vt 0.4082 0.4189 +vt 0.4078 0.4172 +vt 0.4041 0.3112 +vt 0.4039 0.3090 +vt 0.3267 0.3447 +vt 0.3272 0.3423 +vt 0.3276 0.3401 +vt 0.3280 0.3384 +vt 0.4041 0.2858 +vt 0.4039 0.2880 +vt 0.4122 0.4226 +vt 0.4115 0.4203 +vt 0.4110 0.4181 +vt 0.4105 0.4165 +vt 0.4068 0.3112 +vt 0.4065 0.3090 +vt 0.3239 0.3439 +vt 0.3245 0.3415 +vt 0.3250 0.3394 +vt 0.3254 0.3377 +vt 0.4067 0.2858 +vt 0.4065 0.2880 +vt 0.4092 0.4534 +vt 0.4120 0.4542 +vt 0.4114 0.4565 +vt 0.4087 0.4558 +vt 0.4109 0.4587 +vt 0.4082 0.4579 +vt 0.4104 0.4604 +vt 0.4078 0.4596 +vt 0.3189 0.2640 +vt 0.3163 0.2640 +vt 0.3165 0.2618 +vt 0.3191 0.2618 +vt 0.3237 0.3755 +vt 0.3267 0.3746 +vt 0.3272 0.3770 +vt 0.3243 0.3778 +vt 0.3276 0.3791 +vt 0.3249 0.3799 +vt 0.3280 0.3808 +vt 0.3254 0.3816 +vt 0.3163 0.2387 +vt 0.3189 0.2387 +vt 0.3191 0.2409 +vt 0.3165 0.2409 +vt 0.4059 0.4526 +vt 0.4055 0.4550 +vt 0.4052 0.4572 +vt 0.4049 0.4589 +vt 0.3219 0.2640 +vt 0.3221 0.2618 +vt 0.3299 0.3739 +vt 0.3303 0.3763 +vt 0.3307 0.3784 +vt 0.3310 0.3801 +vt 0.3219 0.2387 +vt 0.3221 0.2409 +vt 0.4025 0.4520 +vt 0.4022 0.4544 +vt 0.4019 0.4566 +vt 0.4016 0.4584 +vt 0.3252 0.2640 +vt 0.3253 0.2618 +vt 0.3334 0.3732 +vt 0.3337 0.3757 +vt 0.3340 0.3778 +vt 0.3342 0.3796 +vt 0.3252 0.2387 +vt 0.3253 0.2409 +vt 0.3989 0.4515 +vt 0.3986 0.4540 +vt 0.3984 0.4562 +vt 0.3982 0.4579 +vt 0.3286 0.2640 +vt 0.3287 0.2618 +vt 0.3370 0.3728 +vt 0.3372 0.3752 +vt 0.3374 0.3774 +vt 0.3376 0.3791 +vt 0.3286 0.2387 +vt 0.3287 0.2409 +vt 0.3952 0.4512 +vt 0.3950 0.4536 +vt 0.3949 0.4558 +vt 0.3948 0.4576 +vt 0.3320 0.2640 +vt 0.3321 0.2618 +vt 0.3407 0.3724 +vt 0.3408 0.3749 +vt 0.3410 0.3770 +vt 0.3411 0.3788 +vt 0.3320 0.2387 +vt 0.3321 0.2409 +vt 0.3916 0.4510 +vt 0.3915 0.4535 +vt 0.3914 0.4557 +vt 0.3914 0.4574 +vt 0.3355 0.2640 +vt 0.3355 0.2618 +vt 0.3443 0.3722 +vt 0.3444 0.3747 +vt 0.3444 0.3769 +vt 0.3445 0.3786 +vt 0.3355 0.2387 +vt 0.3355 0.2409 +vt 0.3880 0.4510 +vt 0.3881 0.4534 +vt 0.3881 0.4556 +vt 0.3881 0.4574 +vt 0.3387 0.2640 +vt 0.3387 0.2618 +vt 0.3478 0.3722 +vt 0.3478 0.3746 +vt 0.3478 0.3768 +vt 0.3478 0.3786 +vt 0.3387 0.2387 +vt 0.3387 0.2409 +vt 0.3847 0.4511 +vt 0.3848 0.4536 +vt 0.3850 0.4558 +vt 0.3851 0.4575 +vt 0.3418 0.2640 +vt 0.3417 0.2618 +vt 0.3512 0.3723 +vt 0.3510 0.3748 +vt 0.3509 0.3770 +vt 0.3508 0.3787 +vt 0.3418 0.2387 +vt 0.3417 0.2409 +vt 0.3816 0.4514 +vt 0.3819 0.4538 +vt 0.3821 0.4560 +vt 0.3823 0.4578 +vt 0.3445 0.2640 +vt 0.3443 0.2618 +vt 0.3540 0.3726 +vt 0.3538 0.3750 +vt 0.3536 0.3772 +vt 0.3535 0.3790 +vt 0.3444 0.2387 +vt 0.3443 0.2409 +vt 0.0414 0.7996 +vt 0.0409 0.8042 +vt 0.0303 0.8037 +vt 0.0311 0.7972 +vt 0.0205 0.8031 +vt 0.0214 0.7950 +vt 0.0001 0.8013 +vt 0.0012 0.7917 +vt 0.2083 0.7344 +vt 0.1987 0.7344 +vt 0.1984 0.7140 +vt 0.2090 0.7140 +vt 0.1981 0.7041 +vt 0.2095 0.7041 +vt 0.7502 0.7972 +vt 0.7509 0.8036 +vt 0.7599 0.7950 +vt 0.7608 0.8031 +vt 0.7801 0.7917 +vt 0.7812 0.8013 +vt 0.1987 0.4844 +vt 0.2083 0.4844 +vt 0.2090 0.5048 +vt 0.1984 0.5048 +vt 0.2095 0.5147 +vt 0.1981 0.5147 +vt 0.0422 0.7973 +vt 0.0326 0.7927 +vt 0.0237 0.7883 +vt 0.0018 0.7891 +vt 0.0047 0.7807 +vt 0.2193 0.7344 +vt 0.2109 0.7344 +vt 0.2102 0.7140 +vt 0.2200 0.7140 +vt 0.2098 0.7041 +vt 0.2204 0.7041 +vt 0.7486 0.7926 +vt 0.7576 0.7883 +vt 0.7765 0.7807 +vt 0.7795 0.7891 +vt 0.2109 0.4844 +vt 0.2193 0.4844 +vt 0.2200 0.5048 +vt 0.2102 0.5048 +vt 0.2204 0.5147 +vt 0.2098 0.5147 +vt 0.0435 0.7952 +vt 0.0352 0.7886 +vt 0.0274 0.7824 +vt 0.0059 0.7783 +vt 0.0106 0.7707 +vt 0.2293 0.7344 +vt 0.2217 0.7344 +vt 0.2211 0.7140 +vt 0.2299 0.7140 +vt 0.2207 0.7041 +vt 0.2303 0.7041 +vt 0.7461 0.7886 +vt 0.7538 0.7824 +vt 0.7706 0.7707 +vt 0.7754 0.7783 +vt 0.2217 0.4844 +vt 0.2293 0.4844 +vt 0.2299 0.5048 +vt 0.2211 0.5048 +vt 0.2303 0.5147 +vt 0.2207 0.5147 +vt 0.0452 0.7935 +vt 0.0386 0.7852 +vt 0.0324 0.7774 +vt 0.0123 0.7686 +vt 0.0186 0.7623 +vt 0.2477 0.7344 +vt 0.2327 0.7344 +vt 0.2315 0.7140 +vt 0.2490 0.7140 +vt 0.2307 0.7041 +vt 0.2497 0.7041 +vt 0.7427 0.7852 +vt 0.7489 0.7774 +vt 0.7626 0.7623 +vt 0.7690 0.7686 +vt 0.2327 0.4844 +vt 0.2477 0.4844 +vt 0.2490 0.5048 +vt 0.2315 0.5048 +vt 0.2497 0.5147 +vt 0.2307 0.5147 +vt 0.0473 0.7922 +vt 0.0427 0.7826 +vt 0.0384 0.7737 +vt 0.0207 0.7606 +vt 0.0283 0.7559 +vt 0.2939 1.0000 +vt 0.2863 1.0000 +vt 0.2857 0.9796 +vt 0.2945 0.9796 +vt 0.2853 0.9697 +vt 0.2949 0.9697 +vt 0.7386 0.7826 +vt 0.7429 0.7737 +vt 0.7530 0.7558 +vt 0.7605 0.7606 +vt 0.2863 0.7500 +vt 0.2939 0.7500 +vt 0.2945 0.7704 +vt 0.2857 0.7704 +vt 0.2949 0.7803 +vt 0.2853 0.7803 +vt 0.0496 0.7914 +vt 0.0472 0.7811 +vt 0.0450 0.7714 +vt 0.0307 0.7547 +vt 0.0391 0.7518 +vt 0.3047 1.0000 +vt 0.2963 1.0000 +vt 0.2956 0.9796 +vt 0.3054 0.9796 +vt 0.2952 0.9697 +vt 0.3058 0.9697 +vt 0.7341 0.7810 +vt 0.7363 0.7713 +vt 0.7421 0.7517 +vt 0.7506 0.7547 +vt 0.2963 0.7500 +vt 0.3047 0.7500 +vt 0.3054 0.7704 +vt 0.2956 0.7704 +vt 0.3058 0.7803 +vt 0.2952 0.7803 +vt 0.0543 0.7909 +vt 0.0537 0.7803 +vt 0.0531 0.7705 +vt 0.0417 0.7512 +vt 0.0513 0.7501 +vt 0.3169 1.0000 +vt 0.3073 1.0000 +vt 0.3066 0.9796 +vt 0.3172 0.9796 +vt 0.3061 0.9697 +vt 0.3175 0.9697 +vt 0.7276 0.7803 +vt 0.7281 0.7704 +vt 0.7300 0.7501 +vt 0.7395 0.7511 +vt 0.3073 0.7500 +vt 0.3169 0.7500 +vt 0.3172 0.7704 +vt 0.3066 0.7704 +vt 0.3175 0.7803 +vt 0.3061 0.7803 +vt 0.0496 0.9585 +vt 0.0543 0.9591 +vt 0.0537 0.9696 +vt 0.0472 0.9689 +vt 0.0531 0.9795 +vt 0.0450 0.9786 +vt 0.0513 0.9999 +vt 0.0417 0.9988 +vt 0.5156 0.5261 +vt 0.5156 0.5357 +vt 0.4952 0.5360 +vt 0.4952 0.5254 +vt 0.4853 0.5363 +vt 0.4853 0.5249 +vt 0.7341 0.9689 +vt 0.7276 0.9697 +vt 0.7363 0.9786 +vt 0.7281 0.9795 +vt 0.7395 0.9988 +vt 0.7300 0.9999 +vt 0.2656 0.5357 +vt 0.2656 0.5261 +vt 0.2860 0.5254 +vt 0.2860 0.5360 +vt 0.2959 0.5249 +vt 0.2959 0.5363 +vt 0.0473 0.9577 +vt 0.0427 0.9673 +vt 0.0384 0.9763 +vt 0.0391 0.9982 +vt 0.0307 0.9953 +vt 0.5156 0.5151 +vt 0.5156 0.5235 +vt 0.4952 0.5242 +vt 0.4952 0.5144 +vt 0.4853 0.5246 +vt 0.4853 0.5140 +vt 0.7386 0.9674 +vt 0.7429 0.9763 +vt 0.7506 0.9953 +vt 0.7421 0.9982 +vt 0.2656 0.5235 +vt 0.2656 0.5151 +vt 0.2860 0.5144 +vt 0.2860 0.5242 +vt 0.2959 0.5140 +vt 0.2959 0.5246 +vt 0.0452 0.9564 +vt 0.0386 0.9648 +vt 0.0324 0.9725 +vt 0.0283 0.9941 +vt 0.0207 0.9893 +vt 0.5156 0.5051 +vt 0.5156 0.5127 +vt 0.4952 0.5133 +vt 0.4952 0.5045 +vt 0.4853 0.5137 +vt 0.4853 0.5041 +vt 0.7427 0.9648 +vt 0.7489 0.9726 +vt 0.7605 0.9894 +vt 0.7530 0.9941 +vt 0.2656 0.5127 +vt 0.2656 0.5051 +vt 0.2860 0.5045 +vt 0.2860 0.5133 +vt 0.2959 0.5041 +vt 0.2959 0.5137 +vt 0.0435 0.9547 +vt 0.0352 0.9614 +vt 0.0274 0.9676 +vt 0.0186 0.9877 +vt 0.0123 0.9813 +vt 0.5156 0.4867 +vt 0.5156 0.5017 +vt 0.4952 0.5029 +vt 0.4952 0.4854 +vt 0.4853 0.5037 +vt 0.4853 0.4847 +vt 0.7461 0.9614 +vt 0.7538 0.9676 +vt 0.7690 0.9814 +vt 0.7626 0.9877 +vt 0.2656 0.5017 +vt 0.2656 0.4867 +vt 0.2860 0.4854 +vt 0.2860 0.5029 +vt 0.2959 0.4847 +vt 0.2959 0.5037 +vt 0.0422 0.9527 +vt 0.0326 0.9573 +vt 0.0237 0.9616 +vt 0.0106 0.9793 +vt 0.0059 0.9717 +vt 0.0283 0.7344 +vt 0.0207 0.7344 +vt 0.0201 0.7140 +vt 0.0289 0.7140 +vt 0.0197 0.7041 +vt 0.0293 0.7041 +vt 0.7486 0.9573 +vt 0.7576 0.9616 +vt 0.7754 0.9717 +vt 0.7706 0.9793 +vt 0.0207 0.4844 +vt 0.0283 0.4844 +vt 0.0289 0.5048 +vt 0.0201 0.5048 +vt 0.0293 0.5147 +vt 0.0197 0.5147 +vt 0.0414 0.9504 +vt 0.0311 0.9528 +vt 0.0214 0.9550 +vt 0.0047 0.9693 +vt 0.0018 0.9608 +vt 0.0391 0.7344 +vt 0.0307 0.7344 +vt 0.0300 0.7140 +vt 0.0398 0.7140 +vt 0.0296 0.7041 +vt 0.0402 0.7041 +vt 0.7502 0.9528 +vt 0.7599 0.9550 +vt 0.7795 0.9609 +vt 0.7765 0.9693 +vt 0.0307 0.4844 +vt 0.0391 0.4844 +vt 0.0398 0.5048 +vt 0.0300 0.5048 +vt 0.0402 0.5147 +vt 0.0296 0.5147 +vt 0.0409 0.9457 +vt 0.0303 0.9463 +vt 0.0205 0.9469 +vt 0.0012 0.9582 +vt 0.0001 0.9487 +vt 0.0513 0.7344 +vt 0.0417 0.7344 +vt 0.0410 0.7140 +vt 0.0516 0.7140 +vt 0.0405 0.7041 +vt 0.0519 0.7041 +vt 0.7509 0.9463 +vt 0.7608 0.9469 +vt 0.7812 0.9487 +vt 0.7801 0.9583 +vt 0.0417 0.4844 +vt 0.0513 0.4844 +vt 0.0516 0.5048 +vt 0.0410 0.5048 +vt 0.0519 0.5147 +vt 0.0405 0.5147 +vt 0.2085 0.9504 +vt 0.2091 0.9457 +vt 0.2197 0.9463 +vt 0.2189 0.9528 +vt 0.2295 0.9469 +vt 0.2286 0.9550 +vt 0.2499 0.9487 +vt 0.2488 0.9582 +vt 0.0000 0.4271 +vt 0.0000 0.4175 +vt 0.0204 0.4172 +vt 0.0204 0.4278 +vt 0.0303 0.4169 +vt 0.0303 0.4283 +vt 0.5623 0.9528 +vt 0.5616 0.9463 +vt 0.5526 0.9550 +vt 0.5517 0.9469 +vt 0.5324 0.9583 +vt 0.5313 0.9487 +vt 0.2500 0.4175 +vt 0.2500 0.4271 +vt 0.2296 0.4278 +vt 0.2296 0.4172 +vt 0.2197 0.4283 +vt 0.2197 0.4169 +vt 0.2077 0.9527 +vt 0.2173 0.9573 +vt 0.2263 0.9616 +vt 0.2482 0.9608 +vt 0.2453 0.9693 +vt 0.0000 0.4381 +vt 0.0000 0.4297 +vt 0.0204 0.4290 +vt 0.0204 0.4388 +vt 0.0303 0.4286 +vt 0.0303 0.4392 +vt 0.5639 0.9573 +vt 0.5549 0.9616 +vt 0.5359 0.9693 +vt 0.5330 0.9609 +vt 0.2500 0.4297 +vt 0.2500 0.4381 +vt 0.2296 0.4388 +vt 0.2296 0.4290 +vt 0.2197 0.4392 +vt 0.2197 0.4286 +vt 0.2065 0.9547 +vt 0.2148 0.9614 +vt 0.2225 0.9676 +vt 0.2441 0.9717 +vt 0.2393 0.9793 +vt 0.0000 0.4481 +vt 0.0000 0.4405 +vt 0.0204 0.4399 +vt 0.0204 0.4487 +vt 0.0303 0.4395 +vt 0.0303 0.4491 +vt 0.5664 0.9614 +vt 0.5587 0.9676 +vt 0.5419 0.9793 +vt 0.5371 0.9717 +vt 0.2500 0.4405 +vt 0.2500 0.4481 +vt 0.2296 0.4487 +vt 0.2296 0.4399 +vt 0.2197 0.4491 +vt 0.2197 0.4395 +vt 0.2047 0.9564 +vt 0.2114 0.9648 +vt 0.2176 0.9725 +vt 0.2377 0.9813 +vt 0.2314 0.9877 +vt 0.0000 0.4665 +vt 0.0000 0.4515 +vt 0.0204 0.4503 +vt 0.0204 0.4678 +vt 0.0303 0.4495 +vt 0.0303 0.4685 +vt 0.5698 0.9648 +vt 0.5636 0.9726 +vt 0.5498 0.9877 +vt 0.5435 0.9814 +vt 0.2500 0.4515 +vt 0.2500 0.4665 +vt 0.2296 0.4678 +vt 0.2296 0.4503 +vt 0.2197 0.4685 +vt 0.2197 0.4495 +vt 0.2027 0.9577 +vt 0.2073 0.9673 +vt 0.2116 0.9763 +vt 0.2293 0.9893 +vt 0.2217 0.9941 +vt 0.5156 0.7061 +vt 0.5156 0.7137 +vt 0.4952 0.7143 +vt 0.4952 0.7055 +vt 0.4853 0.7147 +vt 0.4853 0.7051 +vt 0.5739 0.9674 +vt 0.5696 0.9763 +vt 0.5595 0.9941 +vt 0.5519 0.9894 +vt 0.2656 0.7137 +vt 0.2656 0.7061 +vt 0.2860 0.7055 +vt 0.2860 0.7143 +vt 0.2959 0.7051 +vt 0.2959 0.7147 +vt 0.2004 0.9585 +vt 0.2028 0.9689 +vt 0.2050 0.9786 +vt 0.2193 0.9953 +vt 0.2109 0.9982 +vt 0.5156 0.6953 +vt 0.5156 0.7037 +vt 0.4952 0.7044 +vt 0.4952 0.6946 +vt 0.4853 0.7048 +vt 0.4853 0.6942 +vt 0.5784 0.9689 +vt 0.5762 0.9786 +vt 0.5704 0.9982 +vt 0.5619 0.9953 +vt 0.2656 0.7037 +vt 0.2656 0.6953 +vt 0.2860 0.6946 +vt 0.2860 0.7044 +vt 0.2959 0.6942 +vt 0.2959 0.7048 +vt 0.1957 0.9591 +vt 0.1963 0.9696 +vt 0.1969 0.9795 +vt 0.2082 0.9988 +vt 0.1987 0.9999 +vt 0.5156 0.6831 +vt 0.5156 0.6927 +vt 0.4952 0.6934 +vt 0.4952 0.6828 +vt 0.4853 0.6939 +vt 0.4853 0.6825 +vt 0.5849 0.9697 +vt 0.5843 0.9795 +vt 0.5825 0.9999 +vt 0.5730 0.9988 +vt 0.2656 0.6927 +vt 0.2656 0.6831 +vt 0.2860 0.6828 +vt 0.2860 0.6934 +vt 0.2959 0.6825 +vt 0.2959 0.6939 +vt 0.2004 0.7914 +vt 0.1957 0.7909 +vt 0.1963 0.7803 +vt 0.2028 0.7811 +vt 0.1969 0.7705 +vt 0.2050 0.7714 +vt 0.1987 0.7501 +vt 0.2082 0.7512 +vt 0.4739 1.0000 +vt 0.4643 1.0000 +vt 0.4640 0.9796 +vt 0.4746 0.9796 +vt 0.4637 0.9697 +vt 0.4751 0.9697 +vt 0.5784 0.7810 +vt 0.5849 0.7803 +vt 0.5762 0.7713 +vt 0.5843 0.7704 +vt 0.5730 0.7511 +vt 0.5825 0.7501 +vt 0.4643 0.7500 +vt 0.4739 0.7500 +vt 0.4746 0.7704 +vt 0.4640 0.7704 +vt 0.4751 0.7803 +vt 0.4637 0.7803 +vt 0.2027 0.7922 +vt 0.2073 0.7826 +vt 0.2116 0.7737 +vt 0.2109 0.7518 +vt 0.2193 0.7547 +vt 0.4849 1.0000 +vt 0.4765 1.0000 +vt 0.4758 0.9796 +vt 0.4856 0.9796 +vt 0.4754 0.9697 +vt 0.4860 0.9697 +vt 0.5739 0.7826 +vt 0.5696 0.7737 +vt 0.5619 0.7547 +vt 0.5704 0.7517 +vt 0.4765 0.7500 +vt 0.4849 0.7500 +vt 0.4856 0.7704 +vt 0.4758 0.7704 +vt 0.4860 0.7803 +vt 0.4754 0.7803 +vt 0.2047 0.7935 +vt 0.2114 0.7852 +vt 0.2176 0.7774 +vt 0.2217 0.7559 +vt 0.2293 0.7606 +vt 0.4949 1.0000 +vt 0.4873 1.0000 +vt 0.4867 0.9796 +vt 0.4955 0.9796 +vt 0.4863 0.9697 +vt 0.4959 0.9697 +vt 0.5698 0.7852 +vt 0.5636 0.7774 +vt 0.5519 0.7606 +vt 0.5595 0.7558 +vt 0.4873 0.7500 +vt 0.4949 0.7500 +vt 0.4955 0.7704 +vt 0.4867 0.7704 +vt 0.4959 0.7803 +vt 0.4863 0.7803 +vt 0.2065 0.7952 +vt 0.2148 0.7886 +vt 0.2225 0.7824 +vt 0.2314 0.7623 +vt 0.2377 0.7686 +vt 0.5133 1.0000 +vt 0.4983 1.0000 +vt 0.4971 0.9796 +vt 0.5146 0.9796 +vt 0.4963 0.9697 +vt 0.5153 0.9697 +vt 0.5664 0.7886 +vt 0.5587 0.7824 +vt 0.5435 0.7686 +vt 0.5498 0.7623 +vt 0.4983 0.7500 +vt 0.5133 0.7500 +vt 0.5146 0.7704 +vt 0.4971 0.7704 +vt 0.5153 0.7803 +vt 0.4963 0.7803 +vt 0.2077 0.7973 +vt 0.2173 0.7927 +vt 0.2263 0.7883 +vt 0.2393 0.7707 +vt 0.2441 0.7783 +vt 0.0000 0.2471 +vt 0.0000 0.2395 +vt 0.0204 0.2389 +vt 0.0204 0.2477 +vt 0.0303 0.2385 +vt 0.0303 0.2481 +vt 0.5639 0.7926 +vt 0.5549 0.7883 +vt 0.5371 0.7783 +vt 0.5419 0.7707 +vt 0.2500 0.2395 +vt 0.2500 0.2471 +vt 0.2296 0.2477 +vt 0.2296 0.2389 +vt 0.2197 0.2481 +vt 0.2197 0.2385 +vt 0.2085 0.7996 +vt 0.2189 0.7972 +vt 0.2286 0.7950 +vt 0.2453 0.7807 +vt 0.2482 0.7891 +vt 0.0000 0.2579 +vt 0.0000 0.2495 +vt 0.0204 0.2488 +vt 0.0204 0.2586 +vt 0.0303 0.2484 +vt 0.0303 0.2590 +vt 0.5623 0.7972 +vt 0.5526 0.7950 +vt 0.5330 0.7891 +vt 0.5359 0.7807 +vt 0.2500 0.2495 +vt 0.2500 0.2579 +vt 0.2296 0.2586 +vt 0.2296 0.2488 +vt 0.2197 0.2590 +vt 0.2197 0.2484 +vt 0.2091 0.8042 +vt 0.2197 0.8037 +vt 0.2295 0.8031 +vt 0.2488 0.7917 +vt 0.2499 0.8013 +vt 0.0000 0.2701 +vt 0.0000 0.2605 +vt 0.0204 0.2598 +vt 0.0204 0.2704 +vt 0.0303 0.2593 +vt 0.0303 0.2707 +vt 0.5616 0.8036 +vt 0.5517 0.8031 +vt 0.5313 0.8013 +vt 0.5324 0.7917 +vt 0.2500 0.2605 +vt 0.2500 0.2701 +vt 0.2296 0.2704 +vt 0.2296 0.2598 +vt 0.2197 0.2707 +vt 0.2197 0.2593 +vt 0.1980 0.7041 +vt 0.0520 0.7041 +vt 0.1977 0.7140 +vt 0.0523 0.7140 +vt 0.1974 0.7344 +vt 0.0526 0.7344 +vt 0.0000 0.9473 +vt 0.0000 0.8026 +vt 0.4636 0.9697 +vt 0.3176 0.9697 +vt 0.4633 0.9796 +vt 0.3179 0.9796 +vt 0.4630 1.0000 +vt 0.3182 1.0000 +vt 0.0526 0.7500 +vt 0.1973 0.7500 +vt 0.0303 0.4168 +vt 0.0303 0.2708 +vt 0.0204 0.4165 +vt 0.0204 0.2711 +vt 0.0000 0.4162 +vt 0.0000 0.2714 +vt 0.2500 0.8026 +vt 0.2500 0.9473 +vt 0.4853 0.5364 +vt 0.4853 0.6824 +vt 0.4952 0.5367 +vt 0.4952 0.6821 +vt 0.5156 0.5370 +vt 0.5156 0.6818 +vt 0.1973 0.9999 +vt 0.0526 0.9999 +vt 0.7812 0.8026 +vt 0.7812 0.9474 +vt 0.0526 0.4844 +vt 0.1974 0.4844 +vt 0.1977 0.5048 +vt 0.0523 0.5048 +vt 0.1980 0.5147 +vt 0.0520 0.5147 +vt 0.7286 1.0000 +vt 0.5839 1.0000 +vt 0.2656 0.6818 +vt 0.2656 0.5370 +vt 0.2860 0.5367 +vt 0.2860 0.6821 +vt 0.2959 0.5364 +vt 0.2959 0.6824 +vt 0.5312 0.9474 +vt 0.5312 0.8026 +vt 0.2500 0.2714 +vt 0.2500 0.4162 +vt 0.2296 0.4165 +vt 0.2296 0.2711 +vt 0.2197 0.4168 +vt 0.2197 0.2708 +vt 0.3176 0.7803 +vt 0.4636 0.7803 +vt 0.3179 0.7704 +vt 0.4633 0.7704 +vt 0.3182 0.7500 +vt 0.4630 0.7500 +vt 0.5839 0.7500 +vt 0.7286 0.7500 +vt 0.7266 0.2969 +vt 0.7266 0.2812 +vt 0.7422 0.2812 +vt 0.7422 0.2969 +vt 0.7109 0.2969 +vt 0.7109 0.2812 +vt 0.6953 0.2969 +vt 0.6953 0.2812 +vt 0.6797 0.2969 +vt 0.6797 0.2812 +vt 0.6641 0.2969 +vt 0.6641 0.2812 +vt 0.6484 0.2969 +vt 0.6484 0.2812 +vt 0.6328 0.2969 +vt 0.6328 0.2812 +vt 0.6172 0.2969 +vt 0.6172 0.2812 +vt 0.6016 0.2969 +vt 0.6016 0.2812 +vt 0.5859 0.2969 +vt 0.5859 0.2812 +vt 0.5703 0.2969 +vt 0.5703 0.2812 +vt 0.5547 0.2969 +vt 0.5547 0.2812 +vt 0.5391 0.2969 +vt 0.5391 0.2812 +vt 0.5234 0.2969 +vt 0.5234 0.2812 +vt 0.5078 0.2969 +vt 0.5078 0.2812 +vt 0.4922 0.2969 +vt 0.4922 0.2812 +vt 0.9766 0.2969 +vt 0.9766 0.2812 +vt 0.9922 0.2812 +vt 0.9922 0.2969 +vt 0.9609 0.2969 +vt 0.9609 0.2812 +vt 0.9453 0.2969 +vt 0.9453 0.2812 +vt 0.9297 0.2969 +vt 0.9297 0.2812 +vt 0.8984 0.2969 +vt 0.8984 0.2812 +vt 0.9141 0.2812 +vt 0.9141 0.2969 +vt 0.8828 0.2969 +vt 0.8828 0.2812 +vt 0.8672 0.2969 +vt 0.8672 0.2812 +vt 0.8516 0.2969 +vt 0.8516 0.2812 +vt 0.8359 0.2969 +vt 0.8359 0.2812 +vt 0.8047 0.2969 +vt 0.8047 0.2812 +vt 0.8203 0.2812 +vt 0.8203 0.2969 +vt 0.7891 0.2969 +vt 0.7891 0.2812 +vt 0.7734 0.2969 +vt 0.7734 0.2812 +vt 0.7120 0.2565 +vt 0.7120 0.2493 +vt 0.7274 0.2493 +vt 0.7274 0.2564 +vt 0.7428 0.2565 +vt 0.7428 0.2493 +vt 0.7582 0.2564 +vt 0.7582 0.2493 +vt 0.7736 0.2564 +vt 0.7736 0.2493 +vt 0.7890 0.2565 +vt 0.7890 0.2493 +vt 0.8044 0.2565 +vt 0.8044 0.2493 +vt 0.8198 0.2493 +vt 0.8198 0.2565 +vt 0.8352 0.2565 +vt 0.8352 0.2494 +vt 0.8506 0.2566 +vt 0.8507 0.2494 +vt 0.8660 0.2567 +vt 0.8661 0.2494 +vt 0.8816 0.2495 +vt 0.8815 0.2567 +vt 0.8970 0.2495 +vt 0.8970 0.2567 +vt 0.9124 0.2567 +vt 0.9125 0.2495 +vt 0.9279 0.2495 +vt 0.9279 0.2567 +vt 0.9434 0.2495 +vt 0.9434 0.2567 +vt 0.9590 0.2567 +vt 0.9588 0.2495 +vt 0.9742 0.2494 +vt 0.9747 0.2566 +vt 0.9905 0.2563 +vt 0.9894 0.2492 +vt 0.4951 0.2563 +vt 0.4962 0.2492 +vt 0.5114 0.2493 +vt 0.5109 0.2566 +vt 0.5267 0.2567 +vt 0.5269 0.2494 +vt 0.5424 0.2495 +vt 0.5424 0.2567 +vt 0.5579 0.2494 +vt 0.5579 0.2566 +vt 0.5733 0.2494 +vt 0.5734 0.2566 +vt 0.5887 0.2494 +vt 0.5888 0.2566 +vt 0.6041 0.2494 +vt 0.6042 0.2565 +vt 0.6195 0.2493 +vt 0.6195 0.2565 +vt 0.6503 0.2565 +vt 0.6349 0.2565 +vt 0.6349 0.2493 +vt 0.6503 0.2493 +vt 0.6811 0.2565 +vt 0.6657 0.2564 +vt 0.6657 0.2493 +vt 0.6811 0.2493 +vt 0.6966 0.2565 +vt 0.6966 0.2493 +vt 0.8826 0.0183 +vt 0.8672 0.0183 +vt 0.8673 0.0112 +vt 0.8519 0.0183 +vt 0.8519 0.0112 +vt 0.8826 0.0111 +vt 0.8980 0.0111 +vt 0.8979 0.0183 +vt 0.8366 0.0183 +vt 0.8213 0.0183 +vt 0.8367 0.0112 +vt 0.9134 0.0112 +vt 0.9133 0.0183 +vt 0.8214 0.0111 +vt 0.9287 0.0112 +vt 0.9286 0.0183 +vt 0.8061 0.0111 +vt 0.8060 0.0182 +vt 0.8359 0.2969 +vt 0.8359 0.2812 +vt 0.8516 0.2812 +vt 0.8516 0.2969 +vt 0.8828 0.2969 +vt 0.8828 0.2812 +vt 0.8984 0.2812 +vt 0.8984 0.2969 +vt 0.9442 0.0112 +vt 0.9439 0.0184 +vt 0.8203 0.2969 +vt 0.8203 0.2812 +vt 0.7907 0.0111 +vt 0.7906 0.0182 +vt 0.9141 0.2812 +vt 0.9141 0.2969 +vt 0.9596 0.0113 +vt 0.9592 0.0184 +vt 0.8047 0.2969 +vt 0.8047 0.2812 +vt 0.7754 0.0110 +vt 0.7753 0.0181 +vt 0.7891 0.2969 +vt 0.7891 0.2812 +vt 0.9750 0.0115 +vt 0.9743 0.0186 +vt 0.7578 0.2969 +vt 0.7578 0.2812 +vt 0.7734 0.2812 +vt 0.7734 0.2969 +vt 0.7600 0.0110 +vt 0.7599 0.0181 +vt 0.9297 0.2812 +vt 0.9297 0.2969 +vt 0.9905 0.0118 +vt 0.9892 0.0188 +vt 0.7422 0.2969 +vt 0.7422 0.2812 +vt 0.7446 0.0109 +vt 0.7446 0.0180 +vt 0.9453 0.2812 +vt 0.9453 0.2969 +vt 0.5119 0.0099 +vt 0.5123 0.0172 +vt 0.4968 0.0174 +vt 0.4958 0.0101 +vt 0.7578 0.2812 +vt 0.7578 0.2969 +vt 0.7266 0.2969 +vt 0.7266 0.2812 +vt 0.5901 0.0174 +vt 0.5746 0.0173 +vt 0.7293 0.0109 +vt 0.7292 0.0180 +vt 0.9609 0.2812 +vt 0.9609 0.2969 +vt 0.5279 0.0099 +vt 0.5279 0.0172 +vt 0.7109 0.2969 +vt 0.7109 0.2812 +vt 0.7139 0.0108 +vt 0.7138 0.0180 +vt 0.9766 0.2812 +vt 0.9766 0.2969 +vt 0.5437 0.0099 +vt 0.5436 0.0172 +vt 0.6953 0.2969 +vt 0.6953 0.2812 +vt 0.6985 0.0107 +vt 0.6984 0.0179 +vt 0.4922 0.2969 +vt 0.4922 0.2812 +vt 0.5078 0.2812 +vt 0.5078 0.2969 +vt 0.5593 0.0100 +vt 0.5591 0.0173 +vt 0.9922 0.2812 +vt 0.9922 0.2969 +vt 0.6831 0.0107 +vt 0.6830 0.0178 +vt 0.5234 0.2812 +vt 0.5234 0.2969 +vt 0.8672 0.2812 +vt 0.8672 0.2969 +vt 0.5748 0.0101 +vt 0.6797 0.2969 +vt 0.6797 0.2812 +vt 0.6521 0.0177 +vt 0.6676 0.0178 +vt 0.6677 0.0106 +vt 0.5391 0.2812 +vt 0.5391 0.2969 +vt 0.5903 0.0102 +vt 0.6641 0.2969 +vt 0.6641 0.2812 +vt 0.6523 0.0105 +vt 0.5547 0.2812 +vt 0.5547 0.2969 +vt 0.6059 0.0102 +vt 0.6057 0.0175 +vt 0.6484 0.2969 +vt 0.6484 0.2812 +vt 0.6369 0.0104 +vt 0.6367 0.0176 +vt 0.5703 0.2812 +vt 0.5703 0.2969 +vt 0.6214 0.0103 +vt 0.6212 0.0175 +vt 0.6328 0.2969 +vt 0.6328 0.2812 +vt 0.6172 0.2969 +vt 0.6172 0.2812 +vt 0.5859 0.2812 +vt 0.5859 0.2969 +vt 0.6016 0.2969 +vt 0.6016 0.2812 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vt 0.8359 0.3361 +vt 0.8359 0.3283 +vt 0.8437 0.3283 +vt 0.8437 0.3361 +vt 0.8281 0.3361 +vt 0.8281 0.3283 +vt 0.8515 0.3283 +vt 0.8515 0.3361 +vt 0.8593 0.3283 +vt 0.8593 0.3361 +vt 0.8125 0.3361 +vt 0.8125 0.3283 +vt 0.8203 0.3283 +vt 0.8203 0.3361 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.1120 0.0000 0.9937 +vn -0.1120 -0.0000 -0.9937 +vn 0.9937 0.0000 0.1120 +vn -0.9937 0.0000 -0.1120 +vn 0.3303 0.0000 0.9439 +vn 0.1120 -0.0000 -0.9937 +vn 0.8467 0.0000 -0.5320 +vn 0.7071 0.0000 -0.7071 +vn 0.5320 -0.0000 -0.8467 +vn 0.3303 -0.0000 -0.9439 +vn 0.9439 0.0000 -0.3303 +vn 0.5320 0.0000 0.8467 +vn 0.7071 0.0000 0.7071 +vn 0.8467 0.0000 0.5320 +vn 0.9439 0.0000 0.3303 +vn -0.9937 -0.0000 0.1120 +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.8467 0.0000 0.5320 +vn -0.7071 0.0000 0.7071 +vn -0.5320 0.0000 0.8467 +vn -0.3303 0.0000 0.9439 +vn 0.0000 -1.0000 0.0000 +vn -0.9439 0.0000 0.3303 +vn -0.5320 -0.0000 -0.8467 +vn -0.7071 -0.0000 -0.7071 +vn -0.8467 -0.0000 -0.5320 +vn -0.9439 -0.0000 -0.3303 +vn 0.9937 -0.0000 -0.1120 +vn -0.3303 -0.0000 -0.9439 +vn 0.1120 0.0000 0.9937 +vn -0.5000 0.0000 0.8660 +vn -0.8660 0.0000 0.5000 +vn -0.8660 0.0000 -0.5000 +vn -0.5000 0.0000 -0.8660 +vn 0.5000 0.0000 -0.8660 +vn 0.8660 0.0000 -0.5000 +vn 0.8660 0.0000 0.5000 +vn 0.5000 0.0000 0.8660 +vn -0.8315 0.0000 -0.5556 +vn -0.5556 0.0000 -0.8315 +vn -0.3827 0.0000 -0.9239 +vn -0.1951 0.0000 -0.9808 +vn 0.1951 0.0000 -0.9808 +vn 0.3827 0.0000 -0.9239 +vn 0.5556 0.0000 -0.8315 +vn 0.8315 0.0000 -0.5556 +vn 0.9239 0.0000 -0.3827 +vn 0.9808 0.0000 -0.1951 +vn 0.9808 0.0000 0.1951 +vn 0.9581 -0.0000 0.2865 +vn 0.1118 0.0000 0.9937 +vn -0.9998 0.0000 0.0183 +vn -0.9581 0.0000 0.2865 +vn 0.0000 1.0000 0.0000 +vn 0.9399 0.0000 0.3413 +vn -0.1118 0.0000 0.9937 +vn 0.3289 0.0000 0.9444 +vn 0.5288 0.0000 0.8487 +vn 0.7024 0.0000 0.7118 +vn 0.8417 0.0000 0.5400 +vn 0.9994 0.0000 0.0340 +vn -0.3289 0.0000 0.9444 +vn -0.9944 0.0000 -0.1060 +vn -0.9399 0.0000 0.3413 +vn -0.8417 0.0000 0.5400 +vn -0.7024 0.0000 0.7118 +vn -0.5288 0.0000 0.8487 +vn -0.9994 0.0000 0.0340 +vn -0.9808 0.0000 0.1951 +vn 1.0000 0.0000 -0.0063 +vn -0.9808 0.0000 -0.1951 +vn 0.9944 0.0000 -0.1060 +vn 0.9997 -0.0000 -0.0261 +vn 0.9990 -0.0000 -0.0439 +vn 0.9981 0.0000 -0.0618 +vn 0.9967 0.0000 -0.0815 +vn -0.9960 0.0000 -0.0894 +vn 0.9926 0.0000 -0.1217 +vn -0.9926 0.0000 -0.1217 +vn -0.9981 0.0000 -0.0618 +vn -0.9990 0.0000 -0.0439 +vn -0.9997 0.0000 -0.0261 +vn -1.0000 0.0000 -0.0063 +vn 0.9998 0.0000 0.0183 +vn -0.9967 0.0000 -0.0815 +vn -0.9922 0.0000 0.1249 +vn 0.9669 -0.0000 0.2553 +vn 1.0000 -0.0000 0.0083 +vn 0.9989 -0.0000 0.0474 +vn 0.9964 -0.0000 0.0842 +vn 0.9927 -0.0000 0.1209 +vn 0.9872 -0.0000 0.1597 +vn 0.9792 0.0000 0.2031 +vn 0.9994 -0.0000 -0.0359 +vn -0.9994 0.0000 -0.0359 +vn 0.9960 0.0000 -0.0894 +vn -0.9792 0.0000 0.2031 +vn -0.9872 0.0000 0.1597 +vn -0.9927 0.0000 0.1209 +vn -0.9964 0.0000 0.0842 +vn -0.9989 0.0000 0.0474 +vn -1.0000 0.0000 0.0083 +vn -0.9669 0.0000 0.2553 +vn 0.9922 0.0000 0.1249 +vn -0.9239 0.0000 -0.3827 +vn -0.9687 -0.1564 -0.1927 +vn -0.8739 -0.4540 -0.1738 +vn -0.6935 -0.7071 -0.1380 +vn -0.4453 -0.8910 -0.0886 +vn -0.1534 -0.9877 -0.0305 +vn -0.9687 0.1564 -0.1927 +vn -0.8739 0.4540 -0.1738 +vn -0.6935 0.7071 -0.1379 +vn -0.4453 0.8910 -0.0886 +vn -0.1534 0.9877 -0.0305 +vn -0.9125 -0.1564 -0.3780 +vn -0.8232 -0.4540 -0.3410 +vn -0.6533 -0.7071 -0.2706 +vn -0.4194 -0.8910 -0.1737 +vn -0.1445 -0.9877 -0.0599 +vn -0.9125 0.1564 -0.3780 +vn -0.8232 0.4540 -0.3410 +vn -0.6533 0.7071 -0.2706 +vn -0.4194 0.8910 -0.1737 +vn -0.1445 0.9877 -0.0599 +vn -0.8212 -0.1564 -0.5487 +vn -0.7408 -0.4540 -0.4950 +vn -0.5879 -0.7071 -0.3928 +vn -0.3775 -0.8910 -0.2522 +vn -0.1301 -0.9877 -0.0869 +vn -0.8212 0.1564 -0.5487 +vn -0.7408 0.4540 -0.4950 +vn -0.5879 0.7071 -0.3928 +vn -0.3775 0.8910 -0.2522 +vn -0.1301 0.9877 -0.0869 +vn -0.6984 -0.1564 -0.6984 +vn -0.6300 -0.4540 -0.6300 +vn -0.5000 -0.7071 -0.5000 +vn -0.3210 -0.8910 -0.3210 +vn -0.1106 -0.9877 -0.1106 +vn -0.6984 0.1564 -0.6984 +vn -0.6300 0.4540 -0.6300 +vn -0.5000 0.7071 -0.5000 +vn -0.3210 0.8910 -0.3210 +vn -0.1106 0.9877 -0.1106 +vn -0.5487 -0.1564 -0.8212 +vn -0.4950 -0.4540 -0.7408 +vn -0.3928 -0.7071 -0.5879 +vn -0.2522 -0.8910 -0.3775 +vn -0.0869 -0.9877 -0.1301 +vn -0.5487 0.1564 -0.8212 +vn -0.4950 0.4540 -0.7408 +vn -0.3928 0.7071 -0.5879 +vn -0.2522 0.8910 -0.3775 +vn -0.0869 0.9877 -0.1301 +vn -0.3780 -0.1564 -0.9125 +vn -0.3410 -0.4540 -0.8232 +vn -0.2706 -0.7071 -0.6533 +vn -0.1737 -0.8910 -0.4194 +vn -0.0599 -0.9877 -0.1445 +vn -0.3780 0.1564 -0.9125 +vn -0.3410 0.4540 -0.8232 +vn -0.2706 0.7071 -0.6533 +vn -0.1737 0.8910 -0.4194 +vn -0.0599 0.9877 -0.1445 +vn -0.1927 -0.1564 -0.9687 +vn -0.1738 -0.4540 -0.8739 +vn -0.1379 -0.7071 -0.6935 +vn -0.0886 -0.8910 -0.4453 +vn -0.0305 -0.9877 -0.1534 +vn -0.1927 0.1564 -0.9687 +vn -0.1738 0.4540 -0.8739 +vn -0.1379 0.7071 -0.6935 +vn -0.0886 0.8910 -0.4453 +vn -0.0305 0.9877 -0.1534 +vn 0.0000 -0.1564 -0.9877 +vn -0.0000 -0.4540 -0.8910 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 -0.8910 -0.4540 +vn -0.0000 -0.9877 -0.1564 +vn 0.0000 0.1564 -0.9877 +vn -0.0000 0.4540 -0.8910 +vn -0.0000 0.7071 -0.7071 +vn -0.0000 0.8910 -0.4540 +vn -0.0000 0.9877 -0.1564 +vn 0.1927 -0.1564 -0.9687 +vn 0.1738 -0.4540 -0.8739 +vn 0.1379 -0.7071 -0.6935 +vn 0.0886 -0.8910 -0.4453 +vn 0.0305 -0.9877 -0.1534 +vn 0.1927 0.1564 -0.9687 +vn 0.1738 0.4540 -0.8739 +vn 0.1379 0.7071 -0.6935 +vn 0.0886 0.8910 -0.4453 +vn 0.0305 0.9877 -0.1534 +vn 0.3780 -0.1564 -0.9125 +vn 0.3410 -0.4540 -0.8232 +vn 0.2706 -0.7071 -0.6533 +vn 0.1737 -0.8910 -0.4194 +vn 0.0599 -0.9877 -0.1445 +vn 0.3780 0.1564 -0.9125 +vn 0.3410 0.4540 -0.8232 +vn 0.2706 0.7071 -0.6533 +vn 0.1737 0.8910 -0.4194 +vn 0.0599 0.9877 -0.1445 +vn 0.5487 -0.1564 -0.8212 +vn 0.4950 -0.4540 -0.7408 +vn 0.3928 -0.7071 -0.5879 +vn 0.2522 -0.8910 -0.3775 +vn 0.0869 -0.9877 -0.1301 +vn 0.5487 0.1564 -0.8212 +vn 0.4950 0.4540 -0.7408 +vn 0.3928 0.7071 -0.5879 +vn 0.2522 0.8910 -0.3775 +vn 0.0869 0.9877 -0.1301 +vn 0.6984 -0.1564 -0.6984 +vn 0.6300 -0.4540 -0.6300 +vn 0.5000 -0.7071 -0.5000 +vn 0.3210 -0.8910 -0.3210 +vn 0.1106 -0.9877 -0.1106 +vn 0.6984 0.1564 -0.6984 +vn 0.6300 0.4540 -0.6300 +vn 0.5000 0.7071 -0.5000 +vn 0.3210 0.8910 -0.3210 +vn 0.1106 0.9877 -0.1106 +vn 0.8212 -0.1564 -0.5487 +vn 0.7408 -0.4540 -0.4950 +vn 0.5879 -0.7071 -0.3928 +vn 0.3775 -0.8910 -0.2522 +vn 0.1301 -0.9877 -0.0869 +vn 0.8212 0.1564 -0.5487 +vn 0.7408 0.4540 -0.4950 +vn 0.5879 0.7071 -0.3928 +vn 0.3775 0.8910 -0.2522 +vn 0.1301 0.9877 -0.0869 +vn 0.9125 -0.1564 -0.3780 +vn 0.8232 -0.4540 -0.3410 +vn 0.6533 -0.7071 -0.2706 +vn 0.4194 -0.8910 -0.1737 +vn 0.1445 -0.9877 -0.0599 +vn 0.9125 0.1564 -0.3780 +vn 0.8232 0.4540 -0.3410 +vn 0.6533 0.7071 -0.2706 +vn 0.4194 0.8910 -0.1737 +vn 0.1445 0.9877 -0.0599 +vn 0.9687 -0.1564 -0.1927 +vn 0.8739 -0.4540 -0.1738 +vn 0.6935 -0.7071 -0.1379 +vn 0.4453 -0.8910 -0.0886 +vn 0.1534 -0.9877 -0.0305 +vn 0.9687 0.1564 -0.1927 +vn 0.8739 0.4540 -0.1738 +vn 0.6935 0.7071 -0.1379 +vn 0.4453 0.8910 -0.0886 +vn 0.1534 0.9877 -0.0305 +vn 0.9877 -0.1564 0.0000 +vn 0.8910 -0.4540 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.4540 -0.8910 0.0000 +vn 0.1564 -0.9877 0.0000 +vn 0.9877 0.1564 0.0000 +vn 0.8910 0.4540 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.4540 0.8910 0.0000 +vn 0.1564 0.9877 0.0000 +vn 0.9687 -0.1564 0.1927 +vn 0.8739 -0.4540 0.1738 +vn 0.6935 -0.7071 0.1380 +vn 0.4453 -0.8910 0.0886 +vn 0.1534 -0.9877 0.0305 +vn 0.9687 0.1564 0.1927 +vn 0.8739 0.4540 0.1738 +vn 0.6935 0.7071 0.1380 +vn 0.4453 0.8910 0.0886 +vn 0.1534 0.9877 0.0305 +vn -0.9687 -0.1564 0.1927 +vn -0.8739 -0.4540 0.1738 +vn -0.6935 -0.7071 0.1379 +vn -0.4453 -0.8910 0.0886 +vn -0.1534 -0.9877 0.0305 +vn -0.9687 0.1564 0.1927 +vn -0.8739 0.4540 0.1738 +vn -0.6935 0.7071 0.1380 +vn -0.4453 0.8910 0.0886 +vn -0.1534 0.9877 0.0305 +vn -0.9877 -0.1564 -0.0000 +vn -0.8910 -0.4540 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.4540 -0.8910 0.0000 +vn -0.1564 -0.9877 -0.0000 +vn -0.9877 0.1564 -0.0000 +vn -0.8910 0.4540 0.0000 +vn -0.7071 0.7071 0.0000 +vn -0.4540 0.8910 0.0000 +vn -0.1564 0.9877 0.0000 +vn 0.0175 0.9877 0.1555 +vn 0.0508 0.8910 0.4511 +vn 0.0790 0.7071 0.7027 +vn 0.0996 0.4540 0.8854 +vn 0.1104 0.1564 0.9815 +vn 0.0175 -0.9877 0.1555 +vn 0.0508 -0.8910 0.4511 +vn 0.0790 -0.7071 0.7027 +vn 0.0996 -0.4540 0.8854 +vn 0.1104 -0.1564 0.9815 +vn 0.0515 0.9877 0.1477 +vn 0.1493 0.8910 0.4287 +vn 0.2326 0.7071 0.6678 +vn 0.2930 0.4540 0.8414 +vn 0.3249 0.1564 0.9327 +vn 0.0515 -0.9877 0.1477 +vn 0.1493 -0.8910 0.4287 +vn 0.2326 -0.7071 0.6678 +vn 0.2930 -0.4540 0.8414 +vn 0.3248 -0.1564 0.9327 +vn 0.0827 0.9877 0.1328 +vn 0.2401 0.8910 0.3853 +vn 0.3740 0.7071 0.6001 +vn 0.4712 0.4540 0.7562 +vn 0.5223 0.1564 0.8383 +vn 0.0827 -0.9877 0.1328 +vn 0.2401 -0.8910 0.3853 +vn 0.3740 -0.7071 0.6001 +vn 0.4712 -0.4540 0.7562 +vn 0.5223 -0.1564 0.8383 +vn 0.1099 0.9877 0.1113 +vn 0.3189 0.8910 0.3231 +vn 0.4967 0.7071 0.5033 +vn 0.6259 0.4540 0.6342 +vn 0.6938 0.1564 0.7030 +vn 0.1099 -0.9877 0.1113 +vn 0.3189 -0.8910 0.3231 +vn 0.4967 -0.7071 0.5033 +vn 0.6259 -0.4540 0.6342 +vn 0.6938 -0.1564 0.7030 +vn 0.1317 0.9877 0.0845 +vn 0.3821 0.8910 0.2452 +vn 0.5951 0.7071 0.3818 +vn 0.7499 0.4540 0.4811 +vn 0.8313 0.1564 0.5334 +vn 0.1317 -0.9877 0.0845 +vn 0.3821 -0.8910 0.2452 +vn 0.5951 -0.7071 0.3818 +vn 0.7499 -0.4540 0.4812 +vn 0.8313 -0.1564 0.5334 +vn 0.1470 0.9877 0.0534 +vn 0.4267 0.8910 0.1550 +vn 0.6646 0.7071 0.2414 +vn 0.8375 0.4540 0.3041 +vn 0.9284 0.1564 0.3371 +vn 0.1470 -0.9877 0.0534 +vn 0.4267 -0.8910 0.1550 +vn 0.6646 -0.7071 0.2414 +vn 0.8375 -0.4540 0.3041 +vn 0.9284 -0.1564 0.3371 +vn 0.1552 0.9877 0.0195 +vn 0.4504 0.8910 0.0567 +vn 0.7016 0.7071 0.0883 +vn 0.8840 0.4540 0.1113 +vn 0.9800 0.1564 0.1234 +vn 0.1552 -0.9877 0.0195 +vn 0.4504 -0.8910 0.0567 +vn 0.7016 -0.7071 0.0883 +vn 0.8840 -0.4540 0.1113 +vn 0.9800 -0.1564 0.1234 +vn -0.1552 0.9877 0.0195 +vn -0.4504 0.8910 0.0567 +vn -0.7016 0.7071 0.0883 +vn -0.8840 0.4540 0.1113 +vn -0.9800 0.1564 0.1234 +vn -0.1552 -0.9877 0.0195 +vn -0.4504 -0.8910 0.0567 +vn -0.7016 -0.7071 0.0883 +vn -0.8840 -0.4540 0.1113 +vn -0.9800 -0.1564 0.1234 +vn -0.1470 0.9877 0.0534 +vn -0.4267 0.8910 0.1550 +vn -0.6646 0.7071 0.2414 +vn -0.8375 0.4540 0.3041 +vn -0.9284 0.1564 0.3371 +vn -0.1470 -0.9877 0.0534 +vn -0.4267 -0.8910 0.1550 +vn -0.6646 -0.7071 0.2414 +vn -0.8375 -0.4540 0.3041 +vn -0.9284 -0.1564 0.3371 +vn -0.1317 0.9877 0.0845 +vn -0.3821 0.8910 0.2452 +vn -0.5951 0.7071 0.3818 +vn -0.7499 0.4540 0.4811 +vn -0.8313 0.1564 0.5334 +vn -0.1317 -0.9877 0.0845 +vn -0.3821 -0.8910 0.2452 +vn -0.5951 -0.7071 0.3818 +vn -0.7499 -0.4540 0.4812 +vn -0.8313 -0.1564 0.5334 +vn -0.1099 0.9877 0.1113 +vn -0.3189 0.8910 0.3231 +vn -0.4967 0.7071 0.5033 +vn -0.6259 0.4540 0.6342 +vn -0.6938 0.1564 0.7030 +vn -0.1099 -0.9877 0.1113 +vn -0.3189 -0.8910 0.3231 +vn -0.4967 -0.7071 0.5033 +vn -0.6259 -0.4540 0.6342 +vn -0.6938 -0.1564 0.7030 +vn -0.0827 0.9877 0.1328 +vn -0.2401 0.8910 0.3853 +vn -0.3740 0.7071 0.6001 +vn -0.4712 0.4540 0.7562 +vn -0.5223 0.1564 0.8383 +vn -0.0827 -0.9877 0.1328 +vn -0.2401 -0.8910 0.3853 +vn -0.3740 -0.7071 0.6001 +vn -0.4712 -0.4540 0.7562 +vn -0.5223 -0.1564 0.8383 +vn -0.0515 0.9877 0.1477 +vn -0.1493 0.8910 0.4287 +vn -0.2326 0.7071 0.6678 +vn -0.2930 0.4540 0.8414 +vn -0.3248 0.1564 0.9327 +vn -0.0515 -0.9877 0.1477 +vn -0.1493 -0.8910 0.4287 +vn -0.2326 -0.7071 0.6678 +vn -0.2930 -0.4540 0.8414 +vn -0.3248 -0.1564 0.9327 +vn -0.0175 0.9877 0.1555 +vn -0.0508 0.8910 0.4511 +vn -0.0790 0.7071 0.7027 +vn -0.0996 0.4540 0.8854 +vn -0.1104 0.1564 0.9815 +vn -0.0175 -0.9877 0.1554 +vn -0.0508 -0.8910 0.4512 +vn -0.0790 -0.7071 0.7027 +vn -0.0996 -0.4540 0.8854 +vn -0.1104 -0.1564 0.9815 +vn 0.0000 0.9877 0.1564 +vn 0.0000 0.8910 0.4540 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.4540 0.8910 +vn 0.0000 0.1564 0.9877 +vn 0.0000 -0.9877 0.1564 +vn 0.0000 -0.8910 0.4540 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.4540 0.8910 +vn 0.0000 -0.1564 0.9877 +vn 0.1564 0.9877 0.0029 +vn 0.4540 0.8910 0.0084 +vn 0.7070 0.7071 0.0130 +vn 0.8909 0.4539 0.0163 +vn 0.9875 0.1564 0.0181 +vn 0.1564 -0.9877 0.0028 +vn 0.4539 -0.8910 0.0083 +vn 0.7070 -0.7071 0.0129 +vn 0.8909 -0.4540 0.0163 +vn 0.9875 -0.1564 0.0181 +vn 0.1564 0.9877 -0.0010 +vn 0.4540 0.8910 -0.0028 +vn 0.7071 0.7071 -0.0044 +vn 0.8910 0.4540 -0.0056 +vn 0.9877 0.1564 -0.0062 +vn 0.1565 -0.9877 -0.0010 +vn 0.4540 -0.8910 -0.0030 +vn 0.7071 -0.7071 -0.0046 +vn 0.8910 -0.4539 -0.0057 +vn 0.9877 -0.1564 -0.0063 +vn 0.1564 0.9877 -0.0041 +vn 0.4539 0.8910 -0.0118 +vn 0.7069 0.7071 -0.0184 +vn 0.8907 0.4540 -0.0233 +vn 0.9874 0.1564 -0.0258 +vn 0.1564 -0.9877 -0.0041 +vn 0.4539 -0.8910 -0.0119 +vn 0.7069 -0.7071 -0.0185 +vn 0.8907 -0.4540 -0.0233 +vn 0.9874 -0.1564 -0.0258 +vn 0.1563 0.9877 -0.0069 +vn 0.4536 0.8910 -0.0199 +vn 0.7065 0.7071 -0.0310 +vn 0.8902 0.4540 -0.0391 +vn 0.9867 0.1564 -0.0434 +vn 0.1563 -0.9877 -0.0069 +vn 0.4536 -0.8910 -0.0200 +vn 0.7065 -0.7071 -0.0311 +vn 0.8902 -0.4540 -0.0392 +vn 0.9867 -0.1564 -0.0434 +vn 0.1562 0.9877 -0.0096 +vn 0.4532 0.8910 -0.0280 +vn 0.7058 0.7071 -0.0436 +vn 0.8893 0.4540 -0.0550 +vn 0.9858 0.1564 -0.0610 +vn 0.1561 -0.9877 -0.0097 +vn 0.4532 -0.8910 -0.0281 +vn 0.7058 -0.7071 -0.0437 +vn 0.8893 -0.4540 -0.0550 +vn 0.9858 -0.1564 -0.0610 +vn 0.1559 0.9877 -0.0127 +vn 0.4525 0.8910 -0.0369 +vn 0.7048 0.7071 -0.0576 +vn 0.8881 0.4539 -0.0726 +vn 0.9844 0.1564 -0.0805 +vn 0.1559 -0.9877 -0.0128 +vn 0.4525 -0.8910 -0.0371 +vn 0.7048 -0.7071 -0.0577 +vn 0.8881 -0.4540 -0.0726 +vn 0.9844 -0.1564 -0.0805 +vn 0.1556 0.9877 -0.0166 +vn 0.4515 0.8910 -0.0481 +vn 0.7031 0.7071 -0.0749 +vn 0.8860 0.4540 -0.0944 +vn 0.9821 0.1564 -0.1047 +vn 0.1556 -0.9877 -0.0166 +vn 0.4515 -0.8910 -0.0482 +vn 0.7032 -0.7071 -0.0751 +vn 0.8860 -0.4539 -0.0945 +vn 0.9821 -0.1564 -0.1047 +vn -0.1556 0.9877 -0.0166 +vn -0.4515 0.8910 -0.0482 +vn -0.7032 0.7071 -0.0751 +vn -0.8860 0.4539 -0.0945 +vn -0.9821 0.1564 -0.1047 +vn -0.1556 -0.9877 -0.0166 +vn -0.4515 -0.8910 -0.0481 +vn -0.7031 -0.7071 -0.0749 +vn -0.8860 -0.4540 -0.0944 +vn -0.9821 -0.1564 -0.1047 +vn -0.1559 0.9877 -0.0128 +vn -0.4525 0.8910 -0.0371 +vn -0.7048 0.7071 -0.0577 +vn -0.8881 0.4540 -0.0726 +vn -0.9844 0.1564 -0.0805 +vn -0.1559 -0.9877 -0.0127 +vn -0.4525 -0.8910 -0.0369 +vn -0.7048 -0.7071 -0.0576 +vn -0.8881 -0.4539 -0.0726 +vn -0.9844 -0.1564 -0.0805 +vn -0.1561 0.9877 -0.0097 +vn -0.4532 0.8910 -0.0281 +vn -0.7058 0.7071 -0.0437 +vn -0.8893 0.4540 -0.0550 +vn -0.9858 0.1564 -0.0610 +vn -0.1562 -0.9877 -0.0096 +vn -0.4532 -0.8910 -0.0280 +vn -0.7058 -0.7071 -0.0436 +vn -0.8893 -0.4540 -0.0550 +vn -0.9858 -0.1564 -0.0610 +vn -0.1563 0.9877 -0.0069 +vn -0.4536 0.8910 -0.0200 +vn -0.7064 0.7071 -0.0311 +vn -0.8902 0.4540 -0.0392 +vn -0.9867 0.1564 -0.0434 +vn -0.1563 -0.9877 -0.0069 +vn -0.4536 -0.8910 -0.0199 +vn -0.7065 -0.7071 -0.0310 +vn -0.8902 -0.4540 -0.0391 +vn -0.9867 -0.1564 -0.0434 +vn -0.1564 0.9877 -0.0041 +vn -0.4539 0.8910 -0.0119 +vn -0.7069 0.7071 -0.0185 +vn -0.8907 0.4540 -0.0233 +vn -0.9874 0.1564 -0.0258 +vn -0.1564 -0.9877 -0.0041 +vn -0.4539 -0.8910 -0.0118 +vn -0.7069 -0.7071 -0.0184 +vn -0.8907 -0.4540 -0.0232 +vn -0.9874 -0.1564 -0.0258 +vn -0.1565 0.9877 -0.0010 +vn -0.4540 0.8910 -0.0030 +vn -0.7071 0.7071 -0.0046 +vn -0.8910 0.4539 -0.0057 +vn -0.9877 0.1564 -0.0063 +vn -0.1564 -0.9877 -0.0010 +vn -0.4540 -0.8910 -0.0028 +vn -0.7071 -0.7071 -0.0044 +vn -0.8910 -0.4540 -0.0056 +vn -0.9877 -0.1564 -0.0062 +vn -0.1564 0.9877 0.0028 +vn -0.4539 0.8910 0.0083 +vn -0.7070 0.7071 0.0129 +vn -0.8909 0.4540 0.0163 +vn -0.9875 0.1564 0.0181 +vn -0.1564 -0.9877 0.0029 +vn -0.4540 -0.8910 0.0084 +vn -0.7070 -0.7071 0.0130 +vn -0.8909 -0.4539 0.0163 +vn -0.9875 -0.1564 0.0181 +vn -0.1564 -0.9877 0.0053 +vn -0.4537 -0.8910 0.0155 +vn -0.7067 -0.7071 0.0241 +vn -0.8905 -0.4540 0.0304 +vn -0.9871 -0.1564 0.0336 +vn -0.1563 0.9877 0.0053 +vn -0.4537 0.8910 0.0155 +vn -0.7067 0.7071 0.0241 +vn -0.8905 0.4540 0.0303 +vn -0.9871 0.1564 0.0336 +vn 0.1563 -0.9877 0.0053 +vn 0.4537 -0.8910 0.0155 +vn 0.7067 -0.7071 0.0241 +vn 0.8905 -0.4540 0.0303 +vn 0.9871 -0.1564 0.0336 +vn 0.1564 0.9877 0.0053 +vn 0.4538 0.8910 0.0155 +vn 0.7067 0.7071 0.0241 +vn 0.8905 0.4540 0.0304 +vn 0.9871 0.1564 0.0336 +vn 0.1558 0.9877 -0.0140 +vn 0.4522 0.8910 -0.0406 +vn 0.7043 0.7071 -0.0632 +vn 0.8874 0.4540 -0.0796 +vn 0.9837 0.1564 -0.0883 +vn 0.1558 -0.9877 -0.0142 +vn 0.4522 -0.8910 -0.0409 +vn 0.7043 -0.7070 -0.0635 +vn 0.8875 -0.4539 -0.0798 +vn 0.9837 -0.1564 -0.0883 +vn 0.1563 0.9877 -0.0056 +vn 0.4537 0.8910 -0.0163 +vn 0.7067 0.7071 -0.0254 +vn 0.8904 0.4540 -0.0320 +vn 0.9871 0.1564 -0.0355 +vn 0.1563 -0.9877 -0.0056 +vn 0.4537 -0.8910 -0.0163 +vn 0.7066 -0.7071 -0.0254 +vn 0.8904 -0.4540 -0.0320 +vn 0.9871 -0.1564 -0.0355 +vn 0.1564 0.9877 0.0013 +vn 0.4540 0.8910 0.0038 +vn 0.7071 0.7071 0.0059 +vn 0.8910 0.4540 0.0074 +vn 0.9877 0.1564 0.0082 +vn 0.1564 -0.9877 0.0013 +vn 0.4540 -0.8910 0.0038 +vn 0.7071 -0.7071 0.0059 +vn 0.8910 -0.4540 0.0074 +vn 0.9877 -0.1564 0.0082 +vn 0.1563 0.9877 0.0074 +vn 0.4535 0.8910 0.0215 +vn 0.7063 0.7071 0.0335 +vn 0.8900 0.4540 0.0423 +vn 0.9866 0.1564 0.0468 +vn 0.1563 -0.9877 0.0074 +vn 0.4535 -0.8910 0.0215 +vn 0.7063 -0.7071 0.0335 +vn 0.8900 -0.4540 0.0423 +vn 0.9866 -0.1564 0.0468 +vn 0.1559 0.9877 0.0132 +vn 0.4524 0.8910 0.0382 +vn 0.7046 0.7071 0.0596 +vn 0.8878 0.4540 0.0750 +vn 0.9842 0.1564 0.0832 +vn 0.1559 -0.9877 0.0132 +vn 0.4524 -0.8910 0.0382 +vn 0.7046 -0.7071 0.0596 +vn 0.8878 -0.4540 0.0750 +vn 0.9842 -0.1564 0.0832 +vn 0.1553 0.9877 0.0189 +vn 0.4507 0.8910 0.0549 +vn 0.7019 0.7071 0.0855 +vn 0.8845 0.4540 0.1077 +vn 0.9804 0.1564 0.1194 +vn 0.1553 -0.9877 0.0189 +vn 0.4507 -0.8910 0.0549 +vn 0.7019 -0.7071 0.0855 +vn 0.8845 -0.4540 0.1077 +vn 0.9804 -0.1564 0.1194 +vn 0.1544 0.9877 0.0250 +vn 0.4482 0.8910 0.0725 +vn 0.6980 0.7071 0.1129 +vn 0.8796 0.4540 0.1423 +vn 0.9750 0.1564 0.1577 +vn 0.1544 -0.9877 0.0250 +vn 0.4482 -0.8910 0.0725 +vn 0.6980 -0.7071 0.1129 +vn 0.8796 -0.4540 0.1423 +vn 0.9750 -0.1564 0.1577 +vn 0.1532 0.9877 0.0318 +vn 0.4445 0.8910 0.0922 +vn 0.6924 0.7071 0.1436 +vn 0.8724 0.4540 0.1810 +vn 0.9671 0.1564 0.2006 +vn 0.1532 -0.9877 0.0318 +vn 0.4445 -0.8910 0.0922 +vn 0.6924 -0.7071 0.1436 +vn 0.8724 -0.4540 0.1810 +vn 0.9671 -0.1564 0.2006 +vn 0.1512 0.9877 0.0401 +vn 0.4390 0.8910 0.1162 +vn 0.6837 0.7070 0.1808 +vn 0.8615 0.4539 0.2276 +vn 0.9550 0.1564 0.2522 +vn 0.1513 -0.9877 0.0399 +vn 0.4389 -0.8910 0.1159 +vn 0.6837 -0.7071 0.1805 +vn 0.8615 -0.4540 0.2275 +vn 0.9550 -0.1564 0.2521 +vn -0.1513 0.9877 0.0399 +vn -0.4389 0.8910 0.1159 +vn -0.6837 0.7071 0.1805 +vn -0.8615 0.4540 0.2275 +vn -0.9550 0.1564 0.2521 +vn -0.1512 -0.9877 0.0401 +vn -0.4390 -0.8910 0.1162 +vn -0.6837 -0.7070 0.1808 +vn -0.8615 -0.4539 0.2276 +vn -0.9550 -0.1564 0.2522 +vn -0.1532 0.9877 0.0318 +vn -0.4445 0.8910 0.0922 +vn -0.6924 0.7071 0.1436 +vn -0.8724 0.4540 0.1810 +vn -0.9671 0.1564 0.2006 +vn -0.1532 -0.9877 0.0318 +vn -0.4445 -0.8910 0.0922 +vn -0.6924 -0.7071 0.1436 +vn -0.8724 -0.4540 0.1810 +vn -0.9671 -0.1564 0.2006 +vn -0.1544 0.9877 0.0250 +vn -0.4482 0.8910 0.0725 +vn -0.6980 0.7071 0.1129 +vn -0.8796 0.4540 0.1423 +vn -0.9750 0.1564 0.1577 +vn -0.1544 -0.9877 0.0250 +vn -0.4482 -0.8910 0.0725 +vn -0.6980 -0.7071 0.1129 +vn -0.8796 -0.4540 0.1423 +vn -0.9750 -0.1564 0.1577 +vn -0.1553 0.9877 0.0189 +vn -0.4507 0.8910 0.0549 +vn -0.7019 0.7071 0.0855 +vn -0.8845 0.4540 0.1077 +vn -0.9804 0.1564 0.1194 +vn -0.1553 -0.9877 0.0189 +vn -0.4507 -0.8910 0.0549 +vn -0.7019 -0.7071 0.0855 +vn -0.8845 -0.4540 0.1077 +vn -0.9804 -0.1564 0.1194 +vn -0.1559 0.9877 0.0132 +vn -0.4524 0.8910 0.0382 +vn -0.7046 0.7071 0.0596 +vn -0.8878 0.4540 0.0750 +vn -0.9842 0.1564 0.0832 +vn -0.1559 -0.9877 0.0132 +vn -0.4524 -0.8910 0.0382 +vn -0.7046 -0.7071 0.0596 +vn -0.8878 -0.4540 0.0750 +vn -0.9842 -0.1564 0.0832 +vn -0.1563 0.9877 0.0074 +vn -0.4535 0.8910 0.0215 +vn -0.7063 0.7071 0.0335 +vn -0.8900 0.4540 0.0423 +vn -0.9866 0.1564 0.0468 +vn -0.1563 -0.9877 0.0074 +vn -0.4535 -0.8910 0.0215 +vn -0.7063 -0.7071 0.0335 +vn -0.8900 -0.4540 0.0423 +vn -0.9866 -0.1564 0.0468 +vn -0.1564 0.9877 0.0013 +vn -0.4540 0.8910 0.0038 +vn -0.7071 0.7071 0.0059 +vn -0.8910 0.4540 0.0074 +vn -0.9877 0.1564 0.0082 +vn -0.1564 -0.9877 0.0013 +vn -0.4540 -0.8910 0.0038 +vn -0.7071 -0.7071 0.0059 +vn -0.8910 -0.4540 0.0074 +vn -0.9877 -0.1564 0.0082 +vn -0.1563 0.9877 -0.0056 +vn -0.4537 0.8910 -0.0163 +vn -0.7066 0.7071 -0.0254 +vn -0.8904 0.4540 -0.0320 +vn -0.9871 0.1564 -0.0355 +vn -0.1563 -0.9877 -0.0056 +vn -0.4537 -0.8910 -0.0163 +vn -0.7066 -0.7071 -0.0254 +vn -0.8904 -0.4540 -0.0320 +vn -0.9871 -0.1564 -0.0355 +vn -0.1558 0.9877 -0.0142 +vn -0.4522 0.8910 -0.0409 +vn -0.7043 0.7070 -0.0635 +vn -0.8875 0.4539 -0.0798 +vn -0.9837 0.1564 -0.0883 +vn -0.1558 -0.9877 -0.0140 +vn -0.4522 -0.8910 -0.0406 +vn -0.7043 -0.7071 -0.0632 +vn -0.8874 -0.4540 -0.0796 +vn -0.9837 -0.1564 -0.0883 +vn -0.1499 -0.9877 0.0448 +vn -0.4350 -0.8910 0.1301 +vn -0.6775 -0.7071 0.2026 +vn -0.8536 -0.4540 0.2553 +vn -0.9463 -0.1564 0.2830 +vn -0.1499 0.9877 0.0448 +vn -0.4351 0.8910 0.1301 +vn -0.6776 0.7070 0.2026 +vn -0.8537 0.4539 0.2553 +vn -0.9463 0.1564 0.2830 +vn -0.1553 -0.9877 -0.0190 +vn -0.4507 -0.8910 -0.0552 +vn -0.7019 -0.7070 -0.0860 +vn -0.8844 -0.4539 -0.1084 +vn -0.9804 -0.1564 -0.1202 +vn -0.1553 0.9877 -0.0190 +vn -0.4506 0.8910 -0.0552 +vn -0.7019 0.7071 -0.0860 +vn -0.8844 0.4540 -0.1084 +vn -0.9804 0.1564 -0.1202 +vn 0.1499 -0.9877 0.0448 +vn 0.4351 -0.8910 0.1301 +vn 0.6776 -0.7070 0.2026 +vn 0.8537 -0.4539 0.2553 +vn 0.9463 -0.1564 0.2830 +vn 0.1499 0.9877 0.0448 +vn 0.4350 0.8910 0.1301 +vn 0.6775 0.7071 0.2026 +vn 0.8536 0.4540 0.2553 +vn 0.9463 0.1564 0.2830 +vn 0.1553 -0.9877 -0.0190 +vn 0.4506 -0.8910 -0.0552 +vn 0.7019 -0.7071 -0.0860 +vn 0.8844 -0.4540 -0.1084 +vn 0.9804 -0.1564 -0.1202 +vn 0.1553 0.9877 -0.0190 +vn 0.4507 0.8910 -0.0552 +vn 0.7019 0.7070 -0.0860 +vn 0.8844 0.4539 -0.1084 +vn 0.9804 0.1564 -0.1202 +vn 0.1297 0.9914 -0.0146 +vn 0.3803 0.9239 -0.0428 +vn 0.6049 0.7934 -0.0682 +vn 0.7884 0.6088 -0.0888 +vn 0.9181 0.3827 -0.1034 +vn 0.9852 0.1305 -0.1110 +vn 0.1297 -0.9914 -0.0146 +vn 0.3803 -0.9239 -0.0428 +vn 0.6049 -0.7934 -0.0682 +vn 0.7884 -0.6088 -0.0888 +vn 0.9181 -0.3827 -0.1034 +vn 0.9852 -0.1305 -0.1110 +vn 0.1232 0.9914 -0.0431 +vn 0.3612 0.9239 -0.1264 +vn 0.5746 0.7934 -0.2011 +vn 0.7488 0.6088 -0.2620 +vn 0.8720 0.3827 -0.3051 +vn 0.9358 0.1305 -0.3275 +vn 0.1232 -0.9914 -0.0431 +vn 0.3612 -0.9239 -0.1264 +vn 0.5746 -0.7934 -0.2011 +vn 0.7488 -0.6088 -0.2620 +vn 0.8720 -0.3827 -0.3051 +vn 0.9358 -0.1305 -0.3275 +vn 0.1105 0.9914 -0.0694 +vn 0.3240 0.9239 -0.2036 +vn 0.5155 0.7934 -0.3239 +vn 0.6718 0.6088 -0.4221 +vn 0.7823 0.3827 -0.4915 +vn 0.8395 0.1305 -0.5275 +vn 0.1105 -0.9914 -0.0694 +vn 0.3240 -0.9239 -0.2036 +vn 0.5155 -0.7934 -0.3239 +vn 0.6718 -0.6088 -0.4221 +vn 0.7823 -0.3827 -0.4915 +vn 0.8395 -0.1305 -0.5275 +vn 0.0923 0.9914 -0.0923 +vn 0.2706 0.9239 -0.2706 +vn 0.4305 0.7934 -0.4305 +vn 0.5610 0.6088 -0.5610 +vn 0.6533 0.3827 -0.6533 +vn 0.7011 0.1305 -0.7011 +vn 0.0923 -0.9914 -0.0923 +vn 0.2706 -0.9239 -0.2706 +vn 0.4305 -0.7934 -0.4305 +vn 0.5610 -0.6088 -0.5610 +vn 0.6533 -0.3827 -0.6533 +vn 0.7011 -0.1305 -0.7011 +vn 0.0694 0.9914 -0.1105 +vn 0.2036 0.9239 -0.3240 +vn 0.3239 0.7934 -0.5155 +vn 0.4221 0.6088 -0.6718 +vn 0.4915 0.3827 -0.7823 +vn 0.5275 0.1305 -0.8395 +vn 0.0694 -0.9914 -0.1105 +vn 0.2036 -0.9239 -0.3240 +vn 0.3239 -0.7934 -0.5155 +vn 0.4221 -0.6088 -0.6718 +vn 0.4915 -0.3827 -0.7823 +vn 0.5275 -0.1305 -0.8395 +vn 0.0431 0.9914 -0.1232 +vn 0.1264 0.9239 -0.3612 +vn 0.2011 0.7934 -0.5746 +vn 0.2620 0.6088 -0.7488 +vn 0.3051 0.3827 -0.8720 +vn 0.3275 0.1305 -0.9358 +vn 0.0431 -0.9914 -0.1232 +vn 0.1264 -0.9239 -0.3612 +vn 0.2011 -0.7934 -0.5746 +vn 0.2620 -0.6088 -0.7488 +vn 0.3051 -0.3827 -0.8720 +vn 0.3275 -0.1305 -0.9358 +vn 0.0146 0.9914 -0.1297 +vn 0.0428 0.9239 -0.3803 +vn 0.0682 0.7934 -0.6049 +vn 0.0888 0.6088 -0.7884 +vn 0.1034 0.3827 -0.9181 +vn 0.1110 0.1305 -0.9852 +vn 0.0146 -0.9914 -0.1297 +vn 0.0428 -0.9239 -0.3803 +vn 0.0682 -0.7934 -0.6049 +vn 0.0888 -0.6088 -0.7884 +vn 0.1034 -0.3827 -0.9181 +vn 0.1110 -0.1305 -0.9852 +vn 0.0146 0.9914 0.1297 +vn 0.0428 0.9239 0.3803 +vn 0.0682 0.7934 0.6049 +vn 0.0888 0.6088 0.7884 +vn 0.1034 0.3827 0.9181 +vn 0.1110 0.1305 0.9852 +vn 0.0146 -0.9914 0.1297 +vn 0.0428 -0.9239 0.3803 +vn 0.0682 -0.7934 0.6049 +vn 0.0888 -0.6088 0.7884 +vn 0.1034 -0.3827 0.9181 +vn 0.1110 -0.1305 0.9852 +vn 0.0431 0.9914 0.1232 +vn 0.1264 0.9239 0.3612 +vn 0.2011 0.7934 0.5746 +vn 0.2620 0.6088 0.7488 +vn 0.3051 0.3827 0.8720 +vn 0.3275 0.1305 0.9358 +vn 0.0431 -0.9914 0.1232 +vn 0.1264 -0.9239 0.3612 +vn 0.2011 -0.7934 0.5746 +vn 0.2620 -0.6088 0.7488 +vn 0.3051 -0.3827 0.8720 +vn 0.3275 -0.1305 0.9358 +vn 0.0694 0.9914 0.1105 +vn 0.2036 0.9239 0.3240 +vn 0.3239 0.7934 0.5155 +vn 0.4221 0.6088 0.6718 +vn 0.4915 0.3827 0.7823 +vn 0.5275 0.1305 0.8395 +vn 0.0694 -0.9914 0.1105 +vn 0.2036 -0.9239 0.3240 +vn 0.3239 -0.7934 0.5155 +vn 0.4221 -0.6088 0.6718 +vn 0.4915 -0.3827 0.7823 +vn 0.5275 -0.1305 0.8395 +vn 0.0923 0.9914 0.0923 +vn 0.2706 0.9239 0.2706 +vn 0.4305 0.7934 0.4305 +vn 0.5610 0.6088 0.5610 +vn 0.6533 0.3827 0.6533 +vn 0.7011 0.1305 0.7011 +vn 0.0923 -0.9914 0.0923 +vn 0.2706 -0.9239 0.2706 +vn 0.4305 -0.7934 0.4305 +vn 0.5610 -0.6088 0.5610 +vn 0.6533 -0.3827 0.6533 +vn 0.7011 -0.1305 0.7011 +vn 0.1105 0.9914 0.0694 +vn 0.3240 0.9239 0.2036 +vn 0.5155 0.7934 0.3239 +vn 0.6718 0.6088 0.4221 +vn 0.7823 0.3827 0.4915 +vn 0.8395 0.1305 0.5275 +vn 0.1105 -0.9914 0.0694 +vn 0.3240 -0.9239 0.2036 +vn 0.5155 -0.7934 0.3239 +vn 0.6718 -0.6088 0.4221 +vn 0.7823 -0.3827 0.4915 +vn 0.8395 -0.1305 0.5275 +vn 0.1232 0.9914 0.0431 +vn 0.3612 0.9239 0.1264 +vn 0.5746 0.7934 0.2011 +vn 0.7488 0.6088 0.2620 +vn 0.8720 0.3827 0.3051 +vn 0.9358 0.1305 0.3275 +vn 0.1232 -0.9914 0.0431 +vn 0.3612 -0.9239 0.1264 +vn 0.5746 -0.7934 0.2011 +vn 0.7488 -0.6088 0.2620 +vn 0.8720 -0.3827 0.3051 +vn 0.9358 -0.1305 0.3275 +vn 0.1297 0.9914 0.0146 +vn 0.3803 0.9239 0.0428 +vn 0.6049 0.7934 0.0682 +vn 0.7884 0.6088 0.0888 +vn 0.9181 0.3827 0.1034 +vn 0.9852 0.1305 0.1110 +vn 0.1297 -0.9914 0.0146 +vn 0.3803 -0.9239 0.0428 +vn 0.6049 -0.7934 0.0682 +vn 0.7884 -0.6088 0.0888 +vn 0.9181 -0.3827 0.1034 +vn 0.9852 -0.1305 0.1110 +vn -0.1297 0.9914 0.0146 +vn -0.3803 0.9239 0.0428 +vn -0.6049 0.7934 0.0682 +vn -0.7884 0.6088 0.0888 +vn -0.9181 0.3827 0.1034 +vn -0.9852 0.1305 0.1110 +vn -0.1297 -0.9914 0.0146 +vn -0.3803 -0.9239 0.0428 +vn -0.6049 -0.7934 0.0682 +vn -0.7884 -0.6088 0.0888 +vn -0.9181 -0.3827 0.1034 +vn -0.9852 -0.1305 0.1110 +vn -0.1232 0.9914 0.0431 +vn -0.3612 0.9239 0.1264 +vn -0.5746 0.7934 0.2011 +vn -0.7488 0.6088 0.2620 +vn -0.8720 0.3827 0.3051 +vn -0.9358 0.1305 0.3275 +vn -0.1232 -0.9914 0.0431 +vn -0.3612 -0.9239 0.1264 +vn -0.5746 -0.7934 0.2011 +vn -0.7488 -0.6088 0.2620 +vn -0.8720 -0.3827 0.3051 +vn -0.9358 -0.1305 0.3275 +vn -0.1105 0.9914 0.0694 +vn -0.3240 0.9239 0.2036 +vn -0.5155 0.7934 0.3239 +vn -0.6718 0.6088 0.4221 +vn -0.7823 0.3827 0.4915 +vn -0.8395 0.1305 0.5275 +vn -0.1105 -0.9914 0.0694 +vn -0.3240 -0.9239 0.2036 +vn -0.5155 -0.7934 0.3239 +vn -0.6718 -0.6088 0.4221 +vn -0.7823 -0.3827 0.4915 +vn -0.8395 -0.1305 0.5275 +vn -0.0923 0.9914 0.0923 +vn -0.2706 0.9239 0.2706 +vn -0.4305 0.7934 0.4305 +vn -0.5610 0.6088 0.5610 +vn -0.6533 0.3827 0.6533 +vn -0.7011 0.1305 0.7011 +vn -0.0923 -0.9914 0.0923 +vn -0.2706 -0.9239 0.2706 +vn -0.4305 -0.7934 0.4305 +vn -0.5610 -0.6088 0.5610 +vn -0.6533 -0.3827 0.6533 +vn -0.7011 -0.1305 0.7011 +vn -0.0694 0.9914 0.1105 +vn -0.2036 0.9239 0.3240 +vn -0.3239 0.7934 0.5155 +vn -0.4221 0.6088 0.6718 +vn -0.4915 0.3827 0.7823 +vn -0.5275 0.1305 0.8395 +vn -0.0694 -0.9914 0.1105 +vn -0.2036 -0.9239 0.3240 +vn -0.3239 -0.7934 0.5155 +vn -0.4221 -0.6088 0.6718 +vn -0.4915 -0.3827 0.7823 +vn -0.5275 -0.1305 0.8395 +vn -0.0431 0.9914 0.1232 +vn -0.1264 0.9239 0.3612 +vn -0.2011 0.7934 0.5746 +vn -0.2620 0.6088 0.7488 +vn -0.3051 0.3827 0.8720 +vn -0.3275 0.1305 0.9358 +vn -0.0431 -0.9914 0.1232 +vn -0.1264 -0.9239 0.3612 +vn -0.2011 -0.7934 0.5746 +vn -0.2620 -0.6088 0.7488 +vn -0.3051 -0.3827 0.8720 +vn -0.3275 -0.1305 0.9358 +vn -0.0146 0.9914 0.1297 +vn -0.0428 0.9239 0.3803 +vn -0.0682 0.7934 0.6049 +vn -0.0888 0.6088 0.7884 +vn -0.1034 0.3827 0.9181 +vn -0.1110 0.1305 0.9852 +vn -0.0146 -0.9914 0.1297 +vn -0.0428 -0.9239 0.3803 +vn -0.0682 -0.7934 0.6049 +vn -0.0888 -0.6088 0.7884 +vn -0.1034 -0.3827 0.9181 +vn -0.1110 -0.1305 0.9852 +vn -0.0146 0.9914 -0.1297 +vn -0.0428 0.9239 -0.3803 +vn -0.0682 0.7934 -0.6049 +vn -0.0888 0.6088 -0.7884 +vn -0.1034 0.3827 -0.9181 +vn -0.1110 0.1305 -0.9852 +vn -0.0146 -0.9914 -0.1297 +vn -0.0428 -0.9239 -0.3803 +vn -0.0682 -0.7934 -0.6049 +vn -0.0888 -0.6088 -0.7884 +vn -0.1034 -0.3827 -0.9181 +vn -0.1110 -0.1305 -0.9852 +vn -0.0431 0.9914 -0.1232 +vn -0.1264 0.9239 -0.3612 +vn -0.2011 0.7934 -0.5746 +vn -0.2620 0.6088 -0.7488 +vn -0.3051 0.3827 -0.8720 +vn -0.3275 0.1305 -0.9358 +vn -0.0431 -0.9914 -0.1232 +vn -0.1264 -0.9239 -0.3612 +vn -0.2011 -0.7934 -0.5746 +vn -0.2620 -0.6088 -0.7488 +vn -0.3051 -0.3827 -0.8720 +vn -0.3275 -0.1305 -0.9358 +vn -0.0694 0.9914 -0.1105 +vn -0.2036 0.9239 -0.3240 +vn -0.3239 0.7934 -0.5155 +vn -0.4221 0.6088 -0.6718 +vn -0.4915 0.3827 -0.7823 +vn -0.5275 0.1305 -0.8395 +vn -0.0694 -0.9914 -0.1105 +vn -0.2036 -0.9239 -0.3240 +vn -0.3239 -0.7934 -0.5155 +vn -0.4221 -0.6088 -0.6718 +vn -0.4915 -0.3827 -0.7823 +vn -0.5275 -0.1305 -0.8395 +vn -0.0923 0.9914 -0.0923 +vn -0.2706 0.9239 -0.2706 +vn -0.4305 0.7934 -0.4305 +vn -0.5610 0.6088 -0.5610 +vn -0.6533 0.3827 -0.6533 +vn -0.7011 0.1305 -0.7011 +vn -0.0923 -0.9914 -0.0923 +vn -0.2706 -0.9239 -0.2706 +vn -0.4305 -0.7934 -0.4305 +vn -0.5610 -0.6088 -0.5610 +vn -0.6533 -0.3827 -0.6533 +vn -0.7011 -0.1305 -0.7011 +vn -0.1105 0.9914 -0.0694 +vn -0.3240 0.9239 -0.2036 +vn -0.5155 0.7934 -0.3239 +vn -0.6718 0.6088 -0.4221 +vn -0.7823 0.3827 -0.4915 +vn -0.8395 0.1305 -0.5275 +vn -0.1105 -0.9914 -0.0694 +vn -0.3240 -0.9239 -0.2036 +vn -0.5155 -0.7934 -0.3239 +vn -0.6718 -0.6088 -0.4221 +vn -0.7823 -0.3827 -0.4915 +vn -0.8395 -0.1305 -0.5275 +vn -0.1232 0.9914 -0.0431 +vn -0.3612 0.9239 -0.1264 +vn -0.5746 0.7934 -0.2011 +vn -0.7488 0.6088 -0.2620 +vn -0.8720 0.3827 -0.3051 +vn -0.9358 0.1305 -0.3275 +vn -0.1232 -0.9914 -0.0431 +vn -0.3612 -0.9239 -0.1264 +vn -0.5746 -0.7934 -0.2011 +vn -0.7488 -0.6088 -0.2620 +vn -0.8720 -0.3827 -0.3051 +vn -0.9358 -0.1305 -0.3275 +vn -0.1297 0.9914 -0.0146 +vn -0.3803 0.9239 -0.0428 +vn -0.6049 0.7934 -0.0682 +vn -0.7884 0.6088 -0.0888 +vn -0.9181 0.3827 -0.1034 +vn -0.9852 0.1305 -0.1110 +vn -0.1297 -0.9914 -0.0146 +vn -0.3803 -0.9239 -0.0428 +vn -0.6049 -0.7934 -0.0682 +vn -0.7884 -0.6088 -0.0888 +vn -0.9181 -0.3827 -0.1034 +vn -0.9852 -0.1305 -0.1110 +vn 0.9914 0.1305 0.0000 +vn 0.9239 0.3827 -0.0000 +vn 0.7934 0.6088 -0.0000 +vn 0.6088 0.7934 -0.0000 +vn 0.3827 0.9239 -0.0000 +vn 0.1305 0.9914 -0.0000 +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.9914 0.1305 -0.0000 +vn -0.9239 0.3827 -0.0000 +vn -0.7934 0.6088 -0.0000 +vn -0.6088 0.7934 -0.0000 +vn -0.3827 0.9239 -0.0000 +vn -0.1305 0.9914 -0.0000 +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.1305 -0.9914 0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.6088 -0.7934 0.0000 +vn 0.7934 -0.6088 0.0000 +vn 0.9239 -0.3827 0.0000 +vn 0.9914 -0.1305 0.0000 +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.7934 +vn 0.0000 -0.3827 0.9239 +vn -0.0000 -0.1305 0.9914 +vn -0.1305 -0.9914 0.0000 +vn -0.3827 -0.9239 0.0000 +vn -0.6088 -0.7934 0.0000 +vn -0.7934 -0.6088 0.0000 +vn -0.9239 -0.3827 0.0000 +vn -0.9914 -0.1305 -0.0000 +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.6965 0.2113 0.6857 +vn 0.6965 0.2113 -0.6857 +vn 0.6419 0.3431 -0.6857 +vn 0.6419 0.3431 0.6857 +vn 0.7244 0.0713 0.6857 +vn 0.7244 0.0713 -0.6857 +vn 0.7244 -0.0713 0.6857 +vn 0.7244 -0.0713 -0.6857 +vn 0.6965 -0.2113 0.6857 +vn 0.6965 -0.2113 -0.6857 +vn 0.6419 -0.3431 0.6857 +vn 0.6419 -0.3431 -0.6857 +vn 0.5626 -0.4617 0.6857 +vn 0.5626 -0.4617 -0.6857 +vn 0.4617 -0.5626 0.6857 +vn 0.4617 -0.5626 -0.6857 +vn 0.3431 -0.6419 0.6857 +vn 0.3431 -0.6419 -0.6857 +vn 0.2113 -0.6965 0.6857 +vn 0.2113 -0.6965 -0.6857 +vn 0.0713 -0.7244 0.6857 +vn 0.0713 -0.7244 -0.6857 +vn -0.0713 -0.7244 0.6857 +vn -0.0713 -0.7244 -0.6857 +vn -0.2113 -0.6965 0.6857 +vn -0.2113 -0.6965 -0.6857 +vn -0.3431 -0.6419 0.6857 +vn -0.3431 -0.6419 -0.6857 +vn -0.4617 -0.5626 0.6857 +vn -0.4617 -0.5626 -0.6857 +vn -0.5626 -0.4617 0.6857 +vn -0.5626 -0.4617 -0.6857 +vn -0.6419 -0.3431 0.6857 +vn -0.6419 -0.3431 -0.6857 +vn -0.6965 -0.2113 0.6857 +vn -0.6965 -0.2113 -0.6857 +vn -0.7244 -0.0713 0.6857 +vn -0.7244 -0.0713 -0.6857 +vn -0.7244 0.0713 0.6857 +vn -0.7244 0.0713 -0.6857 +vn -0.6965 0.2113 0.6857 +vn -0.6965 0.2113 -0.6857 +vn -0.5626 0.4617 0.6857 +vn -0.5626 0.4617 -0.6857 +vn -0.6419 0.3431 -0.6857 +vn -0.6419 0.3431 0.6857 +vn -0.4617 0.5626 0.6857 +vn -0.4617 0.5626 -0.6857 +vn -0.3431 0.6419 0.6857 +vn -0.3431 0.6419 -0.6857 +vn -0.2113 0.6965 0.6857 +vn -0.2113 0.6965 -0.6857 +vn -0.0713 0.7244 0.6857 +vn -0.0713 0.7244 -0.6857 +vn 0.2113 0.6965 0.6857 +vn 0.2113 0.6965 -0.6857 +vn 0.0713 0.7244 -0.6857 +vn 0.0713 0.7244 0.6857 +vn 0.3431 0.6419 0.6857 +vn 0.3431 0.6419 -0.6857 +vn 0.4617 0.5626 0.6857 +vn 0.4617 0.5626 -0.6857 +vn -0.4604 0.8614 0.2147 +vn -0.4686 0.8767 0.1087 +vn -0.2886 0.9513 0.1087 +vn -0.2835 0.9346 0.2147 +vn -0.0957 0.9720 0.2147 +vn -0.0974 0.9893 0.1087 +vn 0.0957 0.9720 0.2147 +vn 0.0974 0.9893 0.1087 +vn 0.2835 0.9346 0.2147 +vn 0.2886 0.9513 0.1087 +vn 0.4604 0.8614 0.2147 +vn 0.4686 0.8767 0.1087 +vn 0.6196 0.7550 0.2147 +vn 0.6306 0.7684 0.1087 +vn 0.7684 0.6306 0.1087 +vn 0.7550 0.6196 0.2147 +vn 0.8614 0.4604 0.2147 +vn 0.8767 0.4686 0.1087 +vn 0.9346 0.2835 0.2147 +vn 0.9513 0.2886 0.1087 +vn 0.9720 0.0957 0.2147 +vn 0.9893 0.0974 0.1087 +vn 0.9893 -0.0974 0.1087 +vn 0.9720 -0.0957 0.2147 +vn 0.9513 -0.2886 0.1087 +vn 0.9346 -0.2835 0.2147 +vn 0.8614 -0.4604 0.2147 +vn 0.8767 -0.4686 0.1087 +vn 0.7684 -0.6306 0.1087 +vn 0.7550 -0.6196 0.2147 +vn 0.6306 -0.7684 0.1087 +vn 0.6196 -0.7550 0.2147 +vn 0.4604 -0.8614 0.2147 +vn 0.4686 -0.8767 0.1087 +vn 0.2886 -0.9513 0.1087 +vn 0.2835 -0.9346 0.2147 +vn 0.0957 -0.9720 0.2147 +vn 0.0974 -0.9893 0.1087 +vn -0.0974 -0.9893 0.1087 +vn -0.0957 -0.9720 0.2147 +vn -0.2835 -0.9346 0.2147 +vn -0.2886 -0.9513 0.1087 +vn -0.4686 -0.8767 0.1087 +vn -0.4604 -0.8614 0.2147 +vn -0.6306 -0.7684 0.1087 +vn -0.6196 -0.7550 0.2147 +vn -0.7684 -0.6306 0.1087 +vn -0.7550 -0.6196 0.2147 +vn -0.8767 -0.4686 0.1087 +vn -0.8614 -0.4604 0.2147 +vn -0.9513 -0.2886 0.1087 +vn -0.9346 -0.2835 0.2147 +vn -0.9893 -0.0974 0.1087 +vn -0.9720 -0.0957 0.2147 +vn -0.9346 0.2835 0.2147 +vn -0.9720 0.0957 0.2147 +vn -0.9893 0.0974 0.1087 +vn -0.9513 0.2886 0.1087 +vn -0.7550 0.6196 0.2147 +vn -0.8614 0.4604 0.2147 +vn -0.8767 0.4686 0.1087 +vn -0.7684 0.6306 0.1087 +vn -0.6196 0.7550 0.2147 +vn -0.6306 0.7684 0.1087 +vn 0.9893 -0.0974 -0.1087 +vn 0.9893 0.0974 -0.1087 +vn 0.9720 0.0957 -0.2147 +vn 0.9513 0.2886 -0.1087 +vn 0.9346 0.2835 -0.2147 +vn 0.9720 -0.0957 -0.2147 +vn 0.9346 -0.2835 -0.2147 +vn 0.9513 -0.2886 -0.1087 +vn 0.8767 0.4686 -0.1087 +vn 0.7684 0.6306 -0.1087 +vn 0.8614 0.4604 -0.2147 +vn 0.8614 -0.4604 -0.2147 +vn 0.8767 -0.4686 -0.1087 +vn 0.7550 0.6196 -0.2147 +vn 0.7550 -0.6196 -0.2147 +vn 0.7684 -0.6306 -0.1087 +vn 0.6196 0.7550 -0.2147 +vn 0.6306 0.7684 -0.1087 +vn 0.6196 -0.7550 -0.2147 +vn 0.6306 -0.7684 -0.1087 +vn 0.4604 0.8614 -0.2147 +vn 0.4686 0.8767 -0.1087 +vn 0.4604 -0.8614 -0.2147 +vn 0.4686 -0.8767 -0.1087 +vn 0.2835 0.9346 -0.2147 +vn 0.2886 0.9513 -0.1087 +vn 0.2835 -0.9346 -0.2147 +vn 0.2886 -0.9513 -0.1087 +vn 0.0957 0.9720 -0.2147 +vn 0.0974 0.9893 -0.1087 +vn 0.0957 -0.9720 -0.2147 +vn 0.0974 -0.9893 -0.1087 +vn -0.0957 0.9720 -0.2147 +vn -0.0974 0.9893 -0.1087 +vn -0.0957 -0.9720 -0.2147 +vn -0.0974 -0.9893 -0.1087 +vn 0.5626 0.4617 -0.6857 +vn 0.5626 0.4617 0.6857 +vn -0.8767 -0.4686 -0.1087 +vn -0.7684 -0.6306 -0.1087 +vn -0.2835 0.9346 -0.2147 +vn -0.2886 0.9513 -0.1087 +vn -0.2835 -0.9346 -0.2147 +vn -0.2886 -0.9513 -0.1087 +vn -0.4604 0.8614 -0.2147 +vn -0.4686 0.8767 -0.1087 +vn -0.4604 -0.8614 -0.2147 +vn -0.4686 -0.8767 -0.1087 +vn -0.6196 0.7550 -0.2147 +vn -0.6306 0.7684 -0.1087 +vn -0.6196 -0.7550 -0.2147 +vn -0.6306 -0.7684 -0.1087 +vn -0.7550 0.6196 -0.2147 +vn -0.7684 0.6306 -0.1087 +vn -0.7550 -0.6196 -0.2147 +vn -0.9513 0.2886 -0.1087 +vn -0.8767 0.4686 -0.1087 +vn -0.8614 0.4604 -0.2147 +vn -0.8614 -0.4604 -0.2147 +vn -0.9346 0.2835 -0.2147 +vn -0.9346 -0.2835 -0.2147 +vn -0.9513 -0.2886 -0.1087 +vn -0.9720 0.0957 -0.2147 +vn -0.9893 0.0974 -0.1087 +vn -0.9720 -0.0957 -0.2147 +vn -0.9893 -0.0974 -0.1087 +vn -0.7321 -0.3032 -0.6100 +vn -0.7933 0.6088 0.0000 +vn -0.6287 0.4824 -0.6100 +vn -0.1034 -0.7856 -0.6100 +vn 0.1034 0.7856 -0.6100 +vn 0.7321 0.3032 -0.6100 +vn 0.7933 -0.6088 0.0000 +vn 0.6287 -0.4824 -0.6100 +vn 0.7321 0.3032 0.6100 +vn 0.1034 0.7856 0.6100 +vn 0.6287 -0.4824 0.6100 +vn -0.6287 0.4824 0.6100 +vn -0.7321 -0.3032 0.6100 +vn -0.1034 -0.7856 0.6100 +vn -0.3032 -0.7321 -0.6100 +vn -0.7856 -0.1034 -0.6100 +vn 0.4824 -0.6287 -0.6100 +vn 0.6088 -0.7933 0.0000 +vn -0.6088 0.7933 0.0000 +vn -0.4824 0.6287 -0.6100 +vn 0.3032 0.7321 -0.6100 +vn 0.7856 0.1034 -0.6100 +vn 0.3032 0.7321 0.6100 +vn -0.4824 0.6287 0.6100 +vn 0.7856 0.1034 0.6100 +vn -0.7856 -0.1034 0.6100 +vn -0.3032 -0.7321 0.6100 +vn 0.4824 -0.6287 0.6100 +vn 0.3032 -0.7321 -0.6100 +vn -0.6088 -0.7933 0.0000 +vn -0.4824 -0.6287 -0.6100 +vn 0.7856 -0.1034 -0.6100 +vn -0.7856 0.1034 -0.6100 +vn -0.3032 0.7321 -0.6100 +vn 0.6088 0.7933 0.0000 +vn 0.4824 0.6287 -0.6100 +vn -0.3032 0.7321 0.6100 +vn -0.7856 0.1034 0.6100 +vn 0.4824 0.6287 0.6100 +vn -0.4824 -0.6287 0.6100 +vn 0.3032 -0.7321 0.6100 +vn 0.7856 -0.1034 0.6100 +vn 0.7321 -0.3032 -0.6100 +vn 0.1034 -0.7856 -0.6100 +vn 0.6287 0.4824 -0.6100 +vn 0.7933 0.6088 0.0000 +vn -0.7933 -0.6088 0.0000 +vn -0.6287 -0.4824 -0.6100 +vn -0.7321 0.3032 -0.6100 +vn -0.1034 0.7856 -0.6100 +vn -0.7321 0.3032 0.6100 +vn -0.6287 -0.4824 0.6100 +vn -0.1034 0.7856 0.6100 +vn 0.1034 -0.7856 0.6100 +vn 0.7321 -0.3032 0.6100 +vn 0.6287 0.4824 0.6100 +vn -0.5603 -0.5603 -0.6100 +vn -0.9659 0.2588 0.0000 +vn -0.7654 0.2051 -0.6100 +vn 0.2051 -0.7654 -0.6100 +vn 0.2588 -0.9659 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.2051 0.7654 -0.6100 +vn 0.5603 0.5603 -0.6100 +vn 0.9659 -0.2588 0.0000 +vn 0.7654 -0.2051 -0.6100 +vn 0.5603 0.5603 0.6100 +vn -0.2051 0.7654 0.6100 +vn 0.7654 -0.2051 0.6100 +vn -0.7654 0.2051 0.6100 +vn -0.5603 -0.5603 0.6100 +vn 0.2051 -0.7654 0.6100 +vn 0.0000 -0.7924 -0.6100 +vn -0.8660 -0.5000 0.0000 +vn -0.6862 -0.3962 -0.6100 +vn 0.6862 -0.3962 -0.6100 +vn 0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 -0.6100 +vn 0.8660 0.5000 0.0000 +vn 0.6862 0.3962 -0.6100 +vn 0.0000 0.7924 0.6100 +vn -0.6862 0.3962 0.6100 +vn 0.6862 0.3962 0.6100 +vn -0.6862 -0.3962 0.6100 +vn 0.0000 -0.7924 0.6100 +vn 0.6862 -0.3962 0.6100 +vn 0.5603 -0.5603 -0.6100 +vn -0.2588 -0.9659 0.0000 +vn -0.2051 -0.7654 -0.6100 +vn 0.7654 0.2051 -0.6100 +vn 0.9659 0.2588 0.0000 +vn -0.9659 -0.2588 0.0000 +vn -0.7654 -0.2051 -0.6100 +vn -0.5603 0.5603 -0.6100 +vn 0.2588 0.9659 0.0000 +vn 0.2051 0.7654 -0.6100 +vn -0.5603 0.5603 0.6100 +vn -0.7654 -0.2051 0.6100 +vn 0.2051 0.7654 0.6100 +vn -0.2051 -0.7654 0.6100 +vn 0.5603 -0.5603 0.6100 +vn 0.7654 0.2051 0.6100 +vn 0.7924 0.0000 -0.6100 +vn 0.5000 -0.8660 0.0000 +vn 0.3962 -0.6862 -0.6100 +vn 0.3962 0.6862 -0.6100 +vn 0.5000 0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.3962 -0.6862 -0.6100 +vn -0.7924 0.0000 -0.6100 +vn -0.5000 0.8660 0.0000 +vn -0.3962 0.6862 -0.6100 +vn -0.7924 0.0000 0.6100 +vn -0.3962 -0.6862 0.6100 +vn -0.3962 0.6862 0.6100 +vn 0.3962 -0.6862 0.6100 +vn 0.7924 0.0000 0.6100 +vn 0.3962 0.6862 0.6100 +g Pipe_Cylinder.002_None +s off +f 129/1/1 132/2/1 133/3/1 134/4/1 135/5/1 136/6/1 +f 141/7/2 144/8/2 145/9/2 146/10/2 147/11/2 148/12/2 +f 153/13/1 156/14/1 157/15/1 158/16/1 159/17/1 160/18/1 +f 165/19/2 168/20/2 169/21/2 170/22/2 171/23/2 172/24/2 +f 177/25/1 180/26/1 181/27/1 182/28/1 183/29/1 184/30/1 +f 189/31/2 192/32/2 193/33/2 194/34/2 195/35/2 196/36/2 +f 201/37/1 204/38/1 205/39/1 206/40/1 207/41/1 208/42/1 +f 213/43/2 216/44/2 217/45/2 218/46/2 219/47/2 220/48/2 +f 225/49/1 228/50/1 229/51/1 230/52/1 231/53/1 232/54/1 +f 237/55/2 240/56/2 241/57/2 242/58/2 243/59/2 244/60/2 +f 249/61/1 252/62/1 253/63/1 254/64/1 255/65/1 256/66/1 +f 261/67/2 264/68/2 265/69/2 266/70/2 267/71/2 268/72/2 +f 273/73/1 276/74/1 277/75/1 278/76/1 279/77/1 280/78/1 +f 285/79/2 288/80/2 289/81/2 290/82/2 291/83/2 292/84/2 +f 297/85/1 300/86/1 301/87/1 302/88/1 303/89/1 304/90/1 +f 309/91/2 312/92/2 313/93/2 314/94/2 315/95/2 316/96/2 +f 353/97/2 354/98/2 384/99/2 383/100/2 381/101/2 382/102/2 380/103/2 379/104/2 378/105/2 377/106/2 375/107/2 376/108/2 374/109/2 373/110/2 372/111/2 371/112/2 370/113/2 369/114/2 368/115/2 367/116/2 366/117/2 365/118/2 364/119/2 363/120/2 362/121/2 361/122/2 360/123/2 359/124/2 358/125/2 357/126/2 356/127/2 355/128/2 +f 332/129/1 349/130/1 333/131/1 334/132/1 335/133/1 336/134/1 337/135/1 350/136/1 338/137/1 339/138/1 340/139/1 351/140/1 341/141/1 352/142/1 342/143/1 343/144/1 344/145/1 345/146/1 346/147/1 321/148/1 322/149/1 323/150/1 324/151/1 325/152/1 326/153/1 327/154/1 328/155/1 329/156/1 347/157/1 330/158/1 348/159/1 331/160/1 +f 389/161/1 399/162/1 404/163/1 408/164/1 412/165/1 417/166/1 416/167/1 421/168/1 425/169/1 429/170/1 433/171/1 438/172/1 447/173/1 448/174/1 446/175/1 440/176/1 435/177/1 431/178/1 427/179/1 423/180/1 419/181/1 414/182/1 410/183/1 406/184/1 401/185/1 397/186/1 390/187/1 391/188/1 388/189/1 385/190/1 386/191/1 387/192/1 +f 393/193/2 392/194/2 398/195/2 403/196/2 402/197/2 407/198/2 411/199/2 415/200/2 420/201/2 424/202/2 428/203/2 432/204/2 436/205/2 441/206/2 437/207/2 443/208/2 442/209/2 444/210/2 445/211/2 439/212/2 434/213/2 430/214/2 426/215/2 422/216/2 418/217/2 413/218/2 409/219/2 405/220/2 400/221/2 396/222/2 395/223/2 394/224/2 +f 449/225/1 452/226/1 453/227/1 454/228/1 455/229/1 456/230/1 +f 461/231/2 464/232/2 465/233/2 466/234/2 467/235/2 468/236/2 +f 473/237/1 476/238/1 477/239/1 478/240/1 479/241/1 480/242/1 +f 485/243/2 488/244/2 489/245/2 490/246/2 491/247/2 492/248/2 +f 497/249/1 500/250/1 501/251/1 502/252/1 503/253/1 504/254/1 +f 509/255/2 512/256/2 513/257/2 514/258/2 515/259/2 516/260/2 +f 521/261/1 524/262/1 525/263/1 526/264/1 527/265/1 528/266/1 +f 533/267/2 536/268/2 537/269/2 538/270/2 539/271/2 540/272/2 +f 545/273/1 548/274/1 549/275/1 550/276/1 551/277/1 552/278/1 +f 557/279/2 560/280/2 561/281/2 562/282/2 563/283/2 564/284/2 +f 569/285/1 572/286/1 573/287/1 574/288/1 575/289/1 576/290/1 +f 581/291/2 584/292/2 585/293/2 586/294/2 587/295/2 588/296/2 +f 593/297/1 596/298/1 597/299/1 598/300/1 599/301/1 600/302/1 +f 605/303/2 608/304/2 609/305/2 610/306/2 611/307/2 612/308/2 +f 617/309/1 620/310/1 621/311/1 622/312/1 623/313/1 624/314/1 +f 629/315/2 632/316/2 633/317/2 634/318/2 635/319/2 636/320/2 +f 1635/321/3 1656/322/3 1642/323/3 1593/324/3 +f 1754/325/4 1817/326/4 1859/327/4 1768/328/4 +f 1579/329/5 1712/330/5 1698/331/5 1537/332/5 +f 1803/333/6 1824/334/6 1810/335/6 1761/336/6 +f 1544/337/7 1747/338/7 1740/339/7 1551/340/7 +f 1915/341/8 1936/342/8 1922/343/8 1873/344/8 +f 1887/345/9 1964/346/9 1957/347/9 1894/348/9 +f 1894/348/10 1957/347/10 1950/349/10 1901/350/10 +f 1901/351/11 1950/352/11 1943/353/11 1908/354/11 +f 1908/354/12 1943/353/12 1936/342/12 1915/341/12 +f 1880/355/13 1971/356/13 1964/346/13 1887/345/13 +f 1530/357/2 1593/324/2 1642/323/2 1705/358/2 +f 1551/340/14 1740/339/14 1733/359/14 1558/360/14 +f 1558/360/15 1733/359/15 1726/361/15 1565/362/15 +f 1565/363/16 1726/364/16 1719/365/16 1572/366/16 +f 1572/366/17 1719/365/17 1712/330/17 1579/329/17 +f 1586/367/18 1649/368/18 1691/369/18 1600/370/18 +f 1866/371/19 1537/332/19 1698/331/19 1929/372/19 +f 1586/367/20 1761/336/20 1810/335/20 1649/368/20 +f 1607/373/21 1684/374/21 1677/375/21 1614/376/21 +f 1614/376/22 1677/375/22 1670/377/22 1621/378/22 +f 1621/379/23 1670/380/23 1663/381/23 1628/382/23 +f 1628/382/24 1663/381/24 1656/322/24 1635/321/24 +f 1697/383/25 1711/384/25 1718/385/25 1725/386/25 1732/387/25 1739/388/25 1746/389/25 1704/390/25 1641/391/25 1655/392/25 1662/393/25 1669/394/25 1676/395/25 1683/396/25 1690/397/25 1648/398/25 1809/399/25 1823/400/25 1830/401/25 1837/402/25 1844/403/25 1851/404/25 1858/405/25 1816/406/25 1921/407/25 1935/408/25 1942/409/25 1949/410/25 1956/411/25 1963/412/25 1970/413/25 1928/414/25 +f 1600/370/26 1691/369/26 1684/374/26 1607/373/26 +f 1754/325/1 1873/344/1 1922/343/1 1817/326/1 +f 1775/415/27 1852/416/27 1845/417/27 1782/418/27 +f 1782/418/28 1845/417/28 1838/419/28 1789/420/28 +f 1789/421/29 1838/422/29 1831/423/29 1796/424/29 +f 1796/424/30 1831/423/30 1824/334/30 1803/333/30 +f 1866/371/31 1929/372/31 1971/356/31 1880/355/31 +f 1768/328/32 1859/327/32 1852/416/32 1775/415/32 +f 1530/357/33 1705/358/33 1747/338/33 1544/337/33 +f 641/425/34 642/426/34 644/427/34 643/428/34 +f 643/428/35 644/427/35 646/429/35 645/430/35 +f 645/431/20 646/432/20 648/433/20 647/434/20 +f 647/434/36 648/433/36 650/435/36 649/436/36 +f 649/437/37 650/438/37 652/439/37 651/440/37 +f 651/440/1 652/439/1 654/441/1 653/442/1 +f 653/443/38 654/444/38 656/445/38 655/446/38 +f 655/446/39 656/445/39 658/447/39 657/448/39 +f 657/449/19 658/450/19 660/451/19 659/452/19 +f 659/452/40 660/451/40 662/453/40 661/454/40 +f 661/455/41 662/456/41 664/457/41 663/458/41 +f 663/458/2 664/457/2 642/459/2 641/460/2 +f 894/461/20 900/462/20 672/463/20 666/464/20 +f 690/465/42 696/466/42 708/467/42 702/468/42 +f 702/469/28 708/470/28 720/471/28 714/472/28 +f 714/472/43 720/471/43 732/473/43 726/474/43 +f 726/474/44 732/473/44 744/475/44 738/476/44 +f 738/476/45 744/475/45 756/477/45 750/478/45 +f 750/478/1 756/477/1 768/479/1 762/480/1 +f 762/480/46 768/479/46 780/481/46 774/482/46 +f 774/482/47 780/481/47 792/483/47 786/484/47 +f 786/484/48 792/483/48 804/485/48 798/486/48 +f 798/486/10 804/485/10 816/487/10 810/488/10 +f 810/489/49 816/490/49 828/491/49 822/492/49 +f 822/492/50 828/491/50 840/493/50 834/494/50 +f 834/494/51 840/493/51 852/495/51 846/496/51 +f 846/496/19 852/495/19 864/497/19 858/498/19 +f 858/498/52 864/497/52 876/499/52 870/500/52 +f 870/500/53 876/499/53 1356/501/53 1410/502/53 +f 954/503/54 912/504/54 948/505/54 966/506/54 +f 1140/507/55 1158/508/55 1146/509/55 1104/510/55 +f 954/503/2 1056/511/2 1002/512/2 912/504/2 +f 1296/513/56 1470/514/56 888/515/56 882/516/56 +f 1049/517/57 959/518/57 1193/519/57 +f 990/520/58 924/521/58 918/522/58 996/523/58 +f 1092/524/59 1014/525/59 1002/512/59 1056/511/59 +f 966/506/60 948/505/60 942/526/60 972/527/60 +f 972/527/61 942/526/61 936/528/61 978/529/61 +f 978/530/62 936/531/62 930/532/62 984/533/62 +f 984/533/63 930/532/63 924/521/63 990/520/63 +f 1248/534/64 1194/535/64 960/536/64 906/537/64 +f 1086/538/65 1020/539/65 1014/525/65 1092/524/65 +f 1098/540/66 1152/541/66 1188/542/66 1110/543/66 +f 1062/544/67 1044/545/67 1038/546/67 1068/547/67 +f 1068/547/68 1038/546/68 1032/548/68 1074/549/68 +f 1074/549/69 1032/548/69 1026/550/69 1080/551/69 +f 1080/552/70 1026/553/70 1020/539/70 1086/538/70 +f 1008/554/71 1050/555/71 1104/510/71 1146/509/71 +f 882/516/72 888/515/72 900/462/72 894/461/72 +f 1206/556/73 1284/557/73 1278/558/73 1212/559/73 +f 666/464/74 672/463/74 684/560/74 678/561/74 +f 1236/562/75 1254/563/75 1242/564/75 1200/565/75 +f 1212/559/76 1278/558/76 1272/566/76 1218/567/76 +f 1218/567/77 1272/566/77 1266/568/77 1224/569/77 +f 1224/569/78 1266/568/78 1260/570/78 1230/571/78 +f 1230/571/79 1260/570/79 1254/563/79 1236/562/79 +f 1524/572/80 1302/573/80 1290/574/80 1476/575/80 +f 1416/576/81 1350/577/81 1200/565/81 1242/564/81 +f 1152/541/82 1098/540/82 1476/575/82 1290/574/82 +f 1116/578/83 1182/579/83 1176/580/83 1122/581/83 +f 1122/581/84 1176/580/84 1170/582/84 1128/583/84 +f 1128/583/85 1170/582/85 1164/584/85 1134/585/85 +f 1134/585/86 1164/584/86 1158/508/86 1140/507/86 +f 1194/535/87 1248/534/87 1284/557/87 1206/556/87 +f 1110/543/88 1188/542/88 1182/579/88 1116/578/88 +f 1050/555/89 1008/554/89 1044/545/89 1062/544/89 +f 1404/586/90 1422/587/90 1410/502/90 1356/501/90 +f 1368/588/91 1458/589/91 1452/590/91 1374/591/91 +f 1374/591/92 1452/590/92 1446/592/92 1380/593/92 +f 1380/593/93 1446/592/93 1440/594/93 1386/595/93 +f 1386/595/94 1440/594/94 1434/596/94 1392/597/94 +f 1392/597/95 1434/596/95 1428/598/95 1398/599/95 +f 1398/599/96 1428/598/96 1422/587/96 1404/586/96 +f 1362/600/97 1464/601/97 1458/589/97 1368/588/97 +f 1518/602/98 1308/603/98 1302/573/98 1524/572/98 +f 1350/577/99 1416/576/99 1464/601/99 1362/600/99 +f 1482/604/100 1344/605/100 1338/606/100 1488/607/100 +f 1488/607/101 1338/606/101 1332/608/101 1494/609/101 +f 1494/609/102 1332/608/102 1326/610/102 1500/611/102 +f 1500/611/103 1326/610/103 1320/612/103 1506/613/103 +f 1506/613/104 1320/612/104 1314/614/104 1512/615/104 +f 1512/615/105 1314/614/105 1308/603/105 1518/602/105 +f 1470/514/106 1296/513/106 1344/605/106 1482/604/106 +f 996/523/107 918/522/107 906/537/107 960/536/107 +f 678/561/108 684/560/108 696/466/108 690/465/108 +f 666/464/109 678/561/109 682/616/109 670/617/109 +f 670/617/110 682/616/110 681/618/110 669/619/110 +f 669/620/111 681/621/111 680/622/111 668/623/111 +f 668/623/112 680/622/112 679/624/112 667/625/112 +f 667/625/113 679/624/113 677/626/113 665/627/113 +f 684/560/114 672/463/114 676/628/114 688/629/114 +f 688/629/115 676/628/115 675/630/115 687/631/115 +f 687/632/116 675/633/116 674/634/116 686/635/116 +f 686/635/117 674/634/117 673/636/117 685/637/117 +f 685/637/118 673/636/118 671/638/118 683/639/118 +f 678/561/119 690/465/119 694/640/119 682/616/119 +f 682/616/120 694/640/120 693/641/120 681/618/120 +f 681/621/121 693/642/121 692/643/121 680/622/121 +f 680/622/122 692/643/122 691/644/122 679/624/122 +f 679/624/123 691/644/123 689/645/123 677/626/123 +f 696/466/124 684/560/124 688/629/124 700/646/124 +f 700/646/125 688/629/125 687/631/125 699/647/125 +f 699/648/126 687/632/126 686/635/126 698/649/126 +f 698/649/127 686/635/127 685/637/127 697/650/127 +f 697/650/128 685/637/128 683/639/128 695/651/128 +f 690/465/129 702/468/129 706/652/129 694/640/129 +f 694/640/130 706/652/130 705/653/130 693/641/130 +f 693/642/131 705/654/131 704/655/131 692/643/131 +f 692/643/132 704/655/132 703/656/132 691/644/132 +f 691/644/133 703/656/133 701/657/133 689/645/133 +f 708/467/134 696/466/134 700/646/134 712/658/134 +f 712/658/135 700/646/135 699/647/135 711/659/135 +f 711/660/136 699/648/136 698/649/136 710/661/136 +f 710/661/137 698/649/137 697/650/137 709/662/137 +f 709/662/138 697/650/138 695/651/138 707/663/138 +f 702/469/139 714/472/139 718/664/139 706/665/139 +f 706/665/140 718/664/140 717/666/140 705/667/140 +f 705/654/141 717/668/141 716/669/141 704/655/141 +f 704/655/142 716/669/142 715/670/142 703/656/142 +f 703/656/143 715/670/143 713/671/143 701/657/143 +f 720/471/144 708/470/144 712/672/144 724/673/144 +f 724/673/145 712/672/145 711/674/145 723/675/145 +f 723/676/146 711/660/146 710/661/146 722/677/146 +f 722/677/147 710/661/147 709/662/147 721/678/147 +f 721/678/148 709/662/148 707/663/148 719/679/148 +f 714/472/149 726/474/149 730/680/149 718/664/149 +f 718/664/150 730/680/150 729/681/150 717/666/150 +f 717/668/151 729/682/151 728/683/151 716/669/151 +f 716/669/152 728/683/152 727/684/152 715/670/152 +f 715/670/153 727/684/153 725/685/153 713/671/153 +f 732/473/154 720/471/154 724/673/154 736/686/154 +f 736/686/155 724/673/155 723/675/155 735/687/155 +f 735/688/156 723/676/156 722/677/156 734/689/156 +f 734/689/157 722/677/157 721/678/157 733/690/157 +f 733/690/158 721/678/158 719/679/158 731/691/158 +f 726/474/159 738/476/159 742/692/159 730/680/159 +f 730/680/160 742/692/160 741/693/160 729/681/160 +f 729/682/161 741/694/161 740/695/161 728/683/161 +f 728/683/162 740/695/162 739/696/162 727/684/162 +f 727/684/163 739/696/163 737/697/163 725/685/163 +f 744/475/164 732/473/164 736/686/164 748/698/164 +f 748/698/165 736/686/165 735/687/165 747/699/165 +f 747/700/166 735/688/166 734/689/166 746/701/166 +f 746/701/167 734/689/167 733/690/167 745/702/167 +f 745/702/168 733/690/168 731/691/168 743/703/168 +f 738/476/169 750/478/169 754/704/169 742/692/169 +f 742/692/170 754/704/170 753/705/170 741/693/170 +f 741/694/171 753/706/171 752/707/171 740/695/171 +f 740/695/172 752/707/172 751/708/172 739/696/172 +f 739/696/173 751/708/173 749/709/173 737/697/173 +f 756/477/174 744/475/174 748/698/174 760/710/174 +f 760/710/175 748/698/175 747/699/175 759/711/175 +f 759/712/176 747/700/176 746/701/176 758/713/176 +f 758/713/177 746/701/177 745/702/177 757/714/177 +f 757/714/178 745/702/178 743/703/178 755/715/178 +f 750/478/179 762/480/179 766/716/179 754/704/179 +f 754/704/180 766/716/180 765/717/180 753/705/180 +f 753/705/181 765/717/181 764/718/181 752/719/181 +f 752/707/182 764/720/182 763/721/182 751/708/182 +f 751/708/183 763/721/183 761/722/183 749/709/183 +f 768/479/184 756/477/184 760/710/184 772/723/184 +f 772/723/185 760/710/185 759/711/185 771/724/185 +f 771/724/186 759/711/186 758/725/186 770/726/186 +f 770/727/187 758/713/187 757/714/187 769/728/187 +f 769/728/188 757/714/188 755/715/188 767/729/188 +f 762/480/189 774/482/189 778/730/189 766/716/189 +f 766/716/190 778/730/190 777/731/190 765/717/190 +f 765/732/191 777/733/191 776/734/191 764/720/191 +f 764/720/192 776/734/192 775/735/192 763/721/192 +f 763/721/193 775/735/193 773/736/193 761/722/193 +f 780/481/194 768/479/194 772/723/194 784/737/194 +f 784/737/195 772/723/195 771/724/195 783/738/195 +f 783/739/196 771/740/196 770/727/196 782/741/196 +f 782/741/197 770/727/197 769/728/197 781/742/197 +f 781/742/198 769/728/198 767/729/198 779/743/198 +f 774/482/199 786/484/199 790/744/199 778/730/199 +f 778/730/200 790/744/200 789/745/200 777/731/200 +f 777/733/201 789/746/201 788/747/201 776/734/201 +f 776/734/202 788/747/202 787/748/202 775/735/202 +f 775/735/203 787/748/203 785/749/203 773/736/203 +f 792/483/204 780/481/204 784/737/204 796/750/204 +f 796/750/205 784/737/205 783/738/205 795/751/205 +f 795/752/206 783/739/206 782/741/206 794/753/206 +f 794/753/207 782/741/207 781/742/207 793/754/207 +f 793/754/208 781/742/208 779/743/208 791/755/208 +f 786/484/209 798/486/209 802/756/209 790/744/209 +f 790/744/210 802/756/210 801/757/210 789/745/210 +f 789/746/211 801/758/211 800/759/211 788/747/211 +f 788/747/212 800/759/212 799/760/212 787/748/212 +f 787/748/213 799/760/213 797/761/213 785/749/213 +f 804/485/214 792/483/214 796/750/214 808/762/214 +f 808/762/215 796/750/215 795/751/215 807/763/215 +f 807/764/216 795/752/216 794/753/216 806/765/216 +f 806/765/217 794/753/217 793/754/217 805/766/217 +f 805/766/218 793/754/218 791/755/218 803/767/218 +f 798/486/219 810/488/219 814/768/219 802/756/219 +f 802/756/220 814/768/220 813/769/220 801/757/220 +f 801/758/221 813/770/221 812/771/221 800/759/221 +f 800/759/222 812/771/222 811/772/222 799/760/222 +f 799/760/223 811/772/223 809/773/223 797/761/223 +f 816/487/224 804/485/224 808/762/224 820/774/224 +f 820/774/225 808/762/225 807/763/225 819/775/225 +f 819/776/226 807/764/226 806/765/226 818/777/226 +f 818/777/227 806/765/227 805/766/227 817/778/227 +f 817/778/228 805/766/228 803/767/228 815/779/228 +f 810/489/229 822/492/229 826/780/229 814/781/229 +f 814/781/230 826/780/230 825/782/230 813/783/230 +f 813/770/231 825/784/231 824/785/231 812/771/231 +f 812/771/232 824/785/232 823/786/232 811/772/232 +f 811/772/233 823/786/233 821/787/233 809/773/233 +f 828/491/234 816/490/234 820/788/234 832/789/234 +f 832/789/235 820/788/235 819/790/235 831/791/235 +f 831/792/236 819/776/236 818/777/236 830/793/236 +f 830/793/237 818/777/237 817/778/237 829/794/237 +f 829/794/238 817/778/238 815/779/238 827/795/238 +f 822/492/239 834/494/239 838/796/239 826/780/239 +f 826/780/240 838/796/240 837/797/240 825/782/240 +f 825/784/241 837/798/241 836/799/241 824/785/241 +f 824/785/242 836/799/242 835/800/242 823/786/242 +f 823/786/243 835/800/243 833/801/243 821/787/243 +f 840/493/244 828/491/244 832/789/244 844/802/244 +f 844/802/245 832/789/245 831/791/245 843/803/245 +f 843/804/246 831/792/246 830/793/246 842/805/246 +f 842/805/247 830/793/247 829/794/247 841/806/247 +f 841/806/248 829/794/248 827/795/248 839/807/248 +f 834/494/249 846/496/249 850/808/249 838/796/249 +f 838/796/250 850/808/250 849/809/250 837/797/250 +f 837/798/251 849/810/251 848/811/251 836/799/251 +f 836/799/252 848/811/252 847/812/252 835/800/252 +f 835/800/253 847/812/253 845/813/253 833/801/253 +f 852/495/254 840/493/254 844/802/254 856/814/254 +f 856/814/255 844/802/255 843/803/255 855/815/255 +f 855/816/256 843/804/256 842/805/256 854/817/256 +f 854/817/257 842/805/257 841/806/257 853/818/257 +f 853/818/258 841/806/258 839/807/258 851/819/258 +f 846/496/259 858/498/259 862/820/259 850/808/259 +f 850/808/260 862/820/260 861/821/260 849/809/260 +f 849/810/261 861/822/261 860/823/261 848/811/261 +f 848/811/262 860/823/262 859/824/262 847/812/262 +f 847/812/263 859/824/263 857/825/263 845/813/263 +f 864/497/264 852/495/264 856/814/264 868/826/264 +f 868/826/265 856/814/265 855/815/265 867/827/265 +f 867/828/266 855/816/266 854/817/266 866/829/266 +f 866/829/267 854/817/267 853/818/267 865/830/267 +f 865/830/268 853/818/268 851/819/268 863/831/268 +f 858/498/269 870/500/269 874/832/269 862/820/269 +f 862/820/270 874/832/270 873/833/270 861/821/270 +f 861/822/271 873/834/271 872/835/271 860/823/271 +f 860/823/272 872/835/272 871/836/272 859/824/272 +f 859/824/273 871/836/273 869/837/273 857/825/273 +f 876/499/274 864/497/274 868/826/274 880/838/274 +f 880/838/275 868/826/275 867/827/275 879/839/275 +f 879/840/276 867/828/276 866/829/276 878/841/276 +f 878/841/277 866/829/277 865/830/277 877/842/277 +f 877/842/278 865/830/278 863/831/278 875/843/278 +f 882/516/279 894/461/279 898/844/279 886/845/279 +f 886/845/280 898/844/280 897/846/280 885/847/280 +f 885/848/281 897/849/281 896/850/281 884/851/281 +f 884/851/282 896/850/282 895/852/282 883/853/282 +f 883/853/283 895/852/283 893/854/283 881/855/283 +f 900/462/284 888/515/284 892/856/284 904/857/284 +f 904/857/285 892/856/285 891/858/285 903/859/285 +f 903/860/286 891/861/286 890/862/286 902/863/286 +f 902/863/287 890/862/287 889/864/287 901/865/287 +f 901/865/288 889/864/288 887/866/288 899/867/288 +f 894/461/289 666/464/289 670/617/289 898/844/289 +f 898/844/290 670/617/290 669/619/290 897/846/290 +f 897/849/291 669/620/291 668/623/291 896/850/291 +f 896/850/292 668/623/292 667/625/292 895/852/292 +f 895/852/293 667/625/293 665/627/293 893/854/293 +f 672/463/294 900/462/294 904/857/294 676/628/294 +f 676/628/295 904/857/295 903/859/295 675/630/295 +f 675/633/296 903/860/296 902/863/296 674/634/296 +f 674/634/297 902/863/297 901/865/297 673/636/297 +f 673/636/298 901/865/298 899/867/298 671/638/298 +f 965/868/299 953/869/299 955/870/299 967/871/299 +f 967/871/300 955/870/300 956/872/300 968/873/300 +f 968/873/301 956/872/301 957/874/301 969/875/301 +f 969/876/302 957/877/302 958/878/302 970/879/302 +f 970/879/303 958/878/303 954/503/303 966/506/303 +f 911/880/304 947/881/304 949/882/304 913/883/304 +f 913/883/305 949/882/305 950/884/305 914/885/305 +f 914/885/306 950/884/306 951/886/306 915/887/306 +f 915/888/307 951/889/307 952/890/307 916/891/307 +f 916/891/308 952/890/308 948/505/308 912/504/308 +f 971/892/309 965/868/309 967/871/309 973/893/309 +f 973/893/310 967/871/310 968/873/310 974/894/310 +f 974/894/311 968/873/311 969/875/311 975/895/311 +f 975/896/312 969/876/312 970/879/312 976/897/312 +f 976/897/313 970/879/313 966/506/313 972/527/313 +f 947/881/314 941/898/314 943/899/314 949/882/314 +f 949/882/315 943/899/315 944/900/315 950/884/315 +f 950/884/316 944/900/316 945/901/316 951/886/316 +f 951/889/317 945/902/317 946/903/317 952/890/317 +f 952/890/318 946/903/318 942/526/318 948/505/318 +f 977/904/319 971/892/319 973/893/319 979/905/319 +f 979/905/320 973/893/320 974/894/320 980/906/320 +f 980/906/321 974/894/321 975/895/321 981/907/321 +f 981/908/322 975/896/322 976/897/322 982/909/322 +f 982/909/323 976/897/323 972/527/323 978/529/323 +f 941/898/324 935/910/324 937/911/324 943/899/324 +f 943/899/325 937/911/325 938/912/325 944/900/325 +f 944/900/326 938/912/326 939/913/326 945/901/326 +f 945/902/327 939/914/327 940/915/327 946/903/327 +f 946/903/328 940/915/328 936/528/328 942/526/328 +f 983/916/329 977/904/329 979/905/329 985/917/329 +f 985/917/330 979/905/330 980/906/330 986/918/330 +f 986/918/331 980/906/331 981/907/331 987/919/331 +f 987/920/332 981/921/332 982/922/332 988/923/332 +f 988/923/333 982/922/333 978/530/333 984/533/333 +f 935/910/334 929/924/334 931/925/334 937/911/334 +f 937/911/335 931/925/335 932/926/335 938/912/335 +f 938/912/336 932/926/336 933/927/336 939/913/336 +f 939/928/337 933/929/337 934/930/337 940/931/337 +f 940/931/338 934/930/338 930/532/338 936/531/338 +f 989/932/339 983/916/339 985/917/339 991/933/339 +f 991/933/340 985/917/340 986/918/340 992/934/340 +f 992/934/341 986/918/341 987/919/341 993/935/341 +f 993/936/342 987/920/342 988/923/342 994/937/342 +f 994/937/343 988/923/343 984/533/343 990/520/343 +f 929/924/344 923/938/344 925/939/344 931/925/344 +f 931/925/345 925/939/345 926/940/345 932/926/345 +f 932/926/346 926/940/346 927/941/346 933/927/346 +f 933/929/347 927/942/347 928/943/347 934/930/347 +f 934/930/348 928/943/348 924/521/348 930/532/348 +f 995/944/349 989/932/349 991/933/349 997/945/349 +f 997/945/350 991/933/350 992/934/350 998/946/350 +f 998/946/351 992/934/351 993/935/351 999/947/351 +f 999/948/352 993/936/352 994/937/352 1000/949/352 +f 1000/949/353 994/937/353 990/520/353 996/523/353 +f 923/938/354 917/950/354 919/951/354 925/939/354 +f 925/939/355 919/951/355 920/952/355 926/940/355 +f 926/940/356 920/952/356 921/953/356 927/941/356 +f 927/942/357 921/954/357 922/955/357 928/943/357 +f 928/943/358 922/955/358 918/522/358 924/521/358 +f 959/518/359 995/944/359 997/945/359 961/956/359 +f 961/956/360 997/945/360 998/946/360 962/957/360 +f 962/957/361 998/946/361 999/947/361 963/958/361 +f 963/959/362 999/948/362 1000/949/362 964/960/362 +f 964/960/363 1000/949/363 996/523/363 960/536/363 +f 917/950/364 905/961/364 907/962/364 919/951/364 +f 919/951/365 907/962/365 908/963/365 920/952/365 +f 920/952/366 908/963/366 909/964/366 921/953/366 +f 921/954/367 909/965/367 910/966/367 922/955/367 +f 922/955/368 910/966/368 906/537/368 918/522/368 +f 1061/967/369 1049/517/369 1051/968/369 1063/969/369 +f 1063/969/370 1051/968/370 1052/970/370 1064/971/370 +f 1064/971/371 1052/970/371 1053/972/371 1065/973/371 +f 1065/974/372 1053/975/372 1054/976/372 1066/977/372 +f 1066/977/373 1054/976/373 1050/555/373 1062/544/373 +f 1007/978/374 1043/979/374 1045/980/374 1009/981/374 +f 1009/981/375 1045/980/375 1046/982/375 1010/983/375 +f 1010/983/376 1046/982/376 1047/984/376 1011/985/376 +f 1011/986/377 1047/987/377 1048/988/377 1012/989/377 +f 1012/989/378 1048/988/378 1044/545/378 1008/554/378 +f 1067/990/379 1061/967/379 1063/969/379 1069/991/379 +f 1069/991/380 1063/969/380 1064/971/380 1070/992/380 +f 1070/992/381 1064/971/381 1065/973/381 1071/993/381 +f 1071/994/382 1065/974/382 1066/977/382 1072/995/382 +f 1072/995/383 1066/977/383 1062/544/383 1068/547/383 +f 1043/979/384 1037/996/384 1039/997/384 1045/980/384 +f 1045/980/385 1039/997/385 1040/998/385 1046/982/385 +f 1046/982/386 1040/998/386 1041/999/386 1047/984/386 +f 1047/987/387 1041/1000/387 1042/1001/387 1048/988/387 +f 1048/988/388 1042/1001/388 1038/546/388 1044/545/388 +f 1073/1002/389 1067/990/389 1069/991/389 1075/1003/389 +f 1075/1003/390 1069/991/390 1070/992/390 1076/1004/390 +f 1076/1004/391 1070/992/391 1071/993/391 1077/1005/391 +f 1077/1006/392 1071/994/392 1072/995/392 1078/1007/392 +f 1078/1007/393 1072/995/393 1068/547/393 1074/549/393 +f 1037/996/394 1031/1008/394 1033/1009/394 1039/997/394 +f 1039/997/395 1033/1009/395 1034/1010/395 1040/998/395 +f 1040/998/396 1034/1010/396 1035/1011/396 1041/999/396 +f 1041/1000/397 1035/1012/397 1036/1013/397 1042/1001/397 +f 1042/1001/398 1036/1013/398 1032/548/398 1038/546/398 +f 1079/1014/399 1073/1002/399 1075/1003/399 1081/1015/399 +f 1081/1015/400 1075/1003/400 1076/1004/400 1082/1016/400 +f 1082/1016/401 1076/1004/401 1077/1005/401 1083/1017/401 +f 1083/1018/402 1077/1006/402 1078/1007/402 1084/1019/402 +f 1084/1019/403 1078/1007/403 1074/549/403 1080/551/403 +f 1031/1008/404 1025/1020/404 1027/1021/404 1033/1009/404 +f 1033/1009/405 1027/1021/405 1028/1022/405 1034/1010/405 +f 1034/1010/406 1028/1022/406 1029/1023/406 1035/1011/406 +f 1035/1012/407 1029/1024/407 1030/1025/407 1036/1013/407 +f 1036/1013/408 1030/1025/408 1026/550/408 1032/548/408 +f 1085/1026/409 1079/1014/409 1081/1015/409 1087/1027/409 +f 1087/1027/410 1081/1015/410 1082/1016/410 1088/1028/410 +f 1088/1028/411 1082/1016/411 1083/1017/411 1089/1029/411 +f 1089/1030/412 1083/1031/412 1084/1032/412 1090/1033/412 +f 1090/1033/413 1084/1032/413 1080/552/413 1086/538/413 +f 1025/1020/414 1019/1034/414 1021/1035/414 1027/1021/414 +f 1027/1021/415 1021/1035/415 1022/1036/415 1028/1022/415 +f 1028/1022/416 1022/1036/416 1023/1037/416 1029/1023/416 +f 1029/1038/417 1023/1039/417 1024/1040/417 1030/1041/417 +f 1030/1041/418 1024/1040/418 1020/539/418 1026/553/418 +f 1091/1042/419 1085/1026/419 1087/1027/419 1093/1043/419 +f 1093/1043/420 1087/1027/420 1088/1028/420 1094/1044/420 +f 1094/1044/421 1088/1028/421 1089/1029/421 1095/1045/421 +f 1095/1046/422 1089/1030/422 1090/1033/422 1096/1047/422 +f 1096/1047/423 1090/1033/423 1086/538/423 1092/524/423 +f 1019/1034/424 1013/1048/424 1015/1049/424 1021/1035/424 +f 1021/1035/425 1015/1049/425 1016/1050/425 1022/1036/425 +f 1022/1036/426 1016/1050/426 1017/1051/426 1023/1037/426 +f 1023/1039/427 1017/1052/427 1018/1053/427 1024/1040/427 +f 1024/1040/428 1018/1053/428 1014/525/428 1020/539/428 +f 1055/1054/429 1091/1042/429 1093/1043/429 1057/1055/429 +f 1057/1055/430 1093/1043/430 1094/1044/430 1058/1056/430 +f 1058/1056/431 1094/1044/431 1095/1045/431 1059/1057/431 +f 1059/1058/432 1095/1046/432 1096/1047/432 1060/1059/432 +f 1060/1059/433 1096/1047/433 1092/524/433 1056/511/433 +f 1013/1048/434 1001/1060/434 1003/1061/434 1015/1049/434 +f 1015/1049/435 1003/1061/435 1004/1062/435 1016/1050/435 +f 1016/1050/436 1004/1062/436 1005/1063/436 1017/1051/436 +f 1017/1052/437 1005/1064/437 1006/1065/437 1018/1053/437 +f 1018/1053/438 1006/1065/438 1002/512/438 1014/525/438 +f 953/869/439 1055/1054/439 1057/1055/439 955/870/439 +f 955/870/440 1057/1055/440 1058/1056/440 956/872/440 +f 956/872/441 1058/1056/441 1059/1057/441 957/874/441 +f 957/877/442 1059/1058/442 1060/1059/442 958/878/442 +f 958/878/443 1060/1059/443 1056/511/443 954/503/443 +f 1001/1060/444 911/880/444 913/883/444 1003/1061/444 +f 1003/1061/445 913/883/445 914/885/445 1004/1062/445 +f 1004/1062/446 914/885/446 915/887/446 1005/1063/446 +f 1005/1064/447 915/888/447 916/891/447 1006/1065/447 +f 1006/1065/448 916/891/448 912/504/448 1002/512/448 +f 1205/1066/449 1193/519/449 1195/1067/449 1207/1068/449 +f 1207/1068/450 1195/1067/450 1196/1069/450 1208/1070/450 +f 1208/1070/451 1196/1069/451 1197/1071/451 1209/1072/451 +f 1209/1073/452 1197/1074/452 1198/1075/452 1210/1076/452 +f 1210/1076/453 1198/1075/453 1194/535/453 1206/556/453 +f 1247/1077/454 1283/1078/454 1285/1079/454 1249/1080/454 +f 1249/1080/455 1285/1079/455 1286/1081/455 1250/1082/455 +f 1250/1082/456 1286/1081/456 1287/1083/456 1251/1084/456 +f 1251/1085/457 1287/1086/457 1288/1087/457 1252/1088/457 +f 1252/1088/458 1288/1087/458 1284/557/458 1248/534/458 +f 1211/1089/459 1205/1066/459 1207/1068/459 1213/1090/459 +f 1213/1090/460 1207/1068/460 1208/1070/460 1214/1091/460 +f 1214/1091/461 1208/1070/461 1209/1072/461 1215/1092/461 +f 1215/1093/462 1209/1073/462 1210/1076/462 1216/1094/462 +f 1216/1094/463 1210/1076/463 1206/556/463 1212/559/463 +f 1283/1078/464 1277/1095/464 1279/1096/464 1285/1079/464 +f 1285/1079/465 1279/1096/465 1280/1097/465 1286/1081/465 +f 1286/1081/466 1280/1097/466 1281/1098/466 1287/1083/466 +f 1287/1086/467 1281/1099/467 1282/1100/467 1288/1087/467 +f 1288/1087/468 1282/1100/468 1278/558/468 1284/557/468 +f 1217/1101/469 1211/1089/469 1213/1090/469 1219/1102/469 +f 1219/1102/470 1213/1090/470 1214/1091/470 1220/1103/470 +f 1220/1103/471 1214/1091/471 1215/1092/471 1221/1104/471 +f 1221/1105/472 1215/1093/472 1216/1094/472 1222/1106/472 +f 1222/1106/473 1216/1094/473 1212/559/473 1218/567/473 +f 1277/1095/474 1271/1107/474 1273/1108/474 1279/1096/474 +f 1279/1096/475 1273/1108/475 1274/1109/475 1280/1097/475 +f 1280/1097/476 1274/1109/476 1275/1110/476 1281/1098/476 +f 1281/1099/477 1275/1111/477 1276/1112/477 1282/1100/477 +f 1282/1100/478 1276/1112/478 1272/566/478 1278/558/478 +f 1223/1113/479 1217/1101/479 1219/1102/479 1225/1114/479 +f 1225/1114/480 1219/1102/480 1220/1103/480 1226/1115/480 +f 1226/1115/481 1220/1103/481 1221/1104/481 1227/1116/481 +f 1227/1117/482 1221/1105/482 1222/1106/482 1228/1118/482 +f 1228/1118/483 1222/1106/483 1218/567/483 1224/569/483 +f 1271/1107/484 1265/1119/484 1267/1120/484 1273/1108/484 +f 1273/1108/485 1267/1120/485 1268/1121/485 1274/1109/485 +f 1274/1109/486 1268/1121/486 1269/1122/486 1275/1110/486 +f 1275/1111/487 1269/1123/487 1270/1124/487 1276/1112/487 +f 1276/1112/488 1270/1124/488 1266/568/488 1272/566/488 +f 1229/1125/489 1223/1113/489 1225/1114/489 1231/1126/489 +f 1231/1126/490 1225/1114/490 1226/1115/490 1232/1127/490 +f 1232/1127/491 1226/1115/491 1227/1116/491 1233/1128/491 +f 1233/1129/492 1227/1117/492 1228/1118/492 1234/1130/492 +f 1234/1130/493 1228/1118/493 1224/569/493 1230/571/493 +f 1265/1119/494 1259/1131/494 1261/1132/494 1267/1120/494 +f 1267/1120/495 1261/1132/495 1262/1133/495 1268/1121/495 +f 1268/1121/496 1262/1133/496 1263/1134/496 1269/1122/496 +f 1269/1123/497 1263/1135/497 1264/1136/497 1270/1124/497 +f 1270/1124/498 1264/1136/498 1260/570/498 1266/568/498 +f 1235/1137/499 1229/1125/499 1231/1126/499 1237/1138/499 +f 1237/1138/500 1231/1126/500 1232/1127/500 1238/1139/500 +f 1238/1139/501 1232/1127/501 1233/1128/501 1239/1140/501 +f 1239/1141/502 1233/1129/502 1234/1130/502 1240/1142/502 +f 1240/1142/503 1234/1130/503 1230/571/503 1236/562/503 +f 1259/1131/504 1253/1143/504 1255/1144/504 1261/1132/504 +f 1261/1132/505 1255/1144/505 1256/1145/505 1262/1133/505 +f 1262/1133/506 1256/1145/506 1257/1146/506 1263/1134/506 +f 1263/1135/507 1257/1147/507 1258/1148/507 1264/1136/507 +f 1264/1136/508 1258/1148/508 1254/563/508 1260/570/508 +f 1199/1149/509 1235/1137/509 1237/1138/509 1201/1150/509 +f 1201/1150/510 1237/1138/510 1238/1139/510 1202/1151/510 +f 1202/1151/511 1238/1139/511 1239/1140/511 1203/1152/511 +f 1203/1153/512 1239/1141/512 1240/1142/512 1204/1154/512 +f 1204/1154/513 1240/1142/513 1236/562/513 1200/565/513 +f 1253/1143/514 1241/1155/514 1243/1156/514 1255/1144/514 +f 1255/1144/515 1243/1156/515 1244/1157/515 1256/1145/515 +f 1256/1145/516 1244/1157/516 1245/1158/516 1257/1146/516 +f 1257/1147/517 1245/1159/517 1246/1160/517 1258/1148/517 +f 1258/1148/518 1246/1160/518 1242/564/518 1254/563/518 +f 1109/1161/519 1097/1162/519 1099/1163/519 1111/1164/519 +f 1111/1164/520 1099/1163/520 1100/1165/520 1112/1166/520 +f 1112/1166/521 1100/1165/521 1101/1167/521 1113/1168/521 +f 1113/1169/522 1101/1170/522 1102/1171/522 1114/1172/522 +f 1114/1172/523 1102/1171/523 1098/540/523 1110/543/523 +f 1151/1173/524 1187/1174/524 1189/1175/524 1153/1176/524 +f 1153/1176/525 1189/1175/525 1190/1177/525 1154/1178/525 +f 1154/1178/526 1190/1177/526 1191/1179/526 1155/1180/526 +f 1155/1181/527 1191/1182/527 1192/1183/527 1156/1184/527 +f 1156/1184/528 1192/1183/528 1188/542/528 1152/541/528 +f 1115/1185/529 1109/1161/529 1111/1164/529 1117/1186/529 +f 1117/1186/530 1111/1164/530 1112/1166/530 1118/1187/530 +f 1118/1187/531 1112/1166/531 1113/1168/531 1119/1188/531 +f 1119/1189/532 1113/1169/532 1114/1172/532 1120/1190/532 +f 1120/1190/533 1114/1172/533 1110/543/533 1116/578/533 +f 1187/1174/534 1181/1191/534 1183/1192/534 1189/1175/534 +f 1189/1175/535 1183/1192/535 1184/1193/535 1190/1177/535 +f 1190/1177/536 1184/1193/536 1185/1194/536 1191/1179/536 +f 1191/1182/537 1185/1195/537 1186/1196/537 1192/1183/537 +f 1192/1183/538 1186/1196/538 1182/579/538 1188/542/538 +f 1121/1197/539 1115/1185/539 1117/1186/539 1123/1198/539 +f 1123/1198/540 1117/1186/540 1118/1187/540 1124/1199/540 +f 1124/1199/541 1118/1187/541 1119/1188/541 1125/1200/541 +f 1125/1201/542 1119/1189/542 1120/1190/542 1126/1202/542 +f 1126/1202/543 1120/1190/543 1116/578/543 1122/581/543 +f 1181/1191/544 1175/1203/544 1177/1204/544 1183/1192/544 +f 1183/1192/545 1177/1204/545 1178/1205/545 1184/1193/545 +f 1184/1193/546 1178/1205/546 1179/1206/546 1185/1194/546 +f 1185/1195/547 1179/1207/547 1180/1208/547 1186/1196/547 +f 1186/1196/548 1180/1208/548 1176/580/548 1182/579/548 +f 1127/1209/549 1121/1197/549 1123/1198/549 1129/1210/549 +f 1129/1210/550 1123/1198/550 1124/1199/550 1130/1211/550 +f 1130/1211/551 1124/1199/551 1125/1200/551 1131/1212/551 +f 1131/1213/552 1125/1201/552 1126/1202/552 1132/1214/552 +f 1132/1214/553 1126/1202/553 1122/581/553 1128/583/553 +f 1175/1203/554 1169/1215/554 1171/1216/554 1177/1204/554 +f 1177/1204/555 1171/1216/555 1172/1217/555 1178/1205/555 +f 1178/1205/556 1172/1217/556 1173/1218/556 1179/1206/556 +f 1179/1207/557 1173/1219/557 1174/1220/557 1180/1208/557 +f 1180/1208/558 1174/1220/558 1170/582/558 1176/580/558 +f 1133/1221/559 1127/1209/559 1129/1210/559 1135/1222/559 +f 1135/1222/560 1129/1210/560 1130/1211/560 1136/1223/560 +f 1136/1223/561 1130/1211/561 1131/1212/561 1137/1224/561 +f 1137/1225/562 1131/1213/562 1132/1214/562 1138/1226/562 +f 1138/1226/563 1132/1214/563 1128/583/563 1134/585/563 +f 1169/1215/564 1163/1227/564 1165/1228/564 1171/1216/564 +f 1171/1216/565 1165/1228/565 1166/1229/565 1172/1217/565 +f 1172/1217/566 1166/1229/566 1167/1230/566 1173/1218/566 +f 1173/1219/567 1167/1231/567 1168/1232/567 1174/1220/567 +f 1174/1220/568 1168/1232/568 1164/584/568 1170/582/568 +f 1139/1233/569 1133/1221/569 1135/1222/569 1141/1234/569 +f 1141/1234/570 1135/1222/570 1136/1223/570 1142/1235/570 +f 1142/1235/571 1136/1223/571 1137/1224/571 1143/1236/571 +f 1143/1237/572 1137/1225/572 1138/1226/572 1144/1238/572 +f 1144/1238/573 1138/1226/573 1134/585/573 1140/507/573 +f 1163/1227/574 1157/1239/574 1159/1240/574 1165/1228/574 +f 1165/1228/575 1159/1240/575 1160/1241/575 1166/1229/575 +f 1166/1229/576 1160/1241/576 1161/1242/576 1167/1230/576 +f 1167/1231/577 1161/1243/577 1162/1244/577 1168/1232/577 +f 1168/1232/578 1162/1244/578 1158/508/578 1164/584/578 +f 1103/1245/579 1139/1233/579 1141/1234/579 1105/1246/579 +f 1105/1246/580 1141/1234/580 1142/1235/580 1106/1247/580 +f 1106/1247/581 1142/1235/581 1143/1236/581 1107/1248/581 +f 1107/1249/582 1143/1237/582 1144/1238/582 1108/1250/582 +f 1108/1250/583 1144/1238/583 1140/507/583 1104/510/583 +f 1157/1239/584 1145/1251/584 1147/1252/584 1159/1240/584 +f 1159/1240/585 1147/1252/585 1148/1253/585 1160/1241/585 +f 1160/1241/586 1148/1253/586 1149/1254/586 1161/1242/586 +f 1161/1243/587 1149/1255/587 1150/1256/587 1162/1244/587 +f 1162/1244/588 1150/1256/588 1146/509/588 1158/508/588 +f 1145/1251/589 1007/978/589 1009/981/589 1147/1252/589 +f 1147/1252/590 1009/981/590 1010/983/590 1148/1253/590 +f 1148/1253/591 1010/983/591 1011/985/591 1149/1254/591 +f 1149/1255/592 1011/986/592 1012/989/592 1150/1256/592 +f 1150/1256/593 1012/989/593 1008/554/593 1146/509/593 +f 1049/517/594 1103/1245/594 1105/1246/594 1051/968/594 +f 1051/968/595 1105/1246/595 1106/1247/595 1052/970/595 +f 1052/970/596 1106/1247/596 1107/1248/596 1053/972/596 +f 1053/975/597 1107/1249/597 1108/1250/597 1054/976/597 +f 1054/976/598 1108/1250/598 1104/510/598 1050/555/598 +f 905/961/599 1247/1077/599 1249/1080/599 907/962/599 +f 907/962/600 1249/1080/600 1250/1082/600 908/963/600 +f 908/963/601 1250/1082/601 1251/1084/601 909/964/601 +f 909/965/602 1251/1085/602 1252/1088/602 910/966/602 +f 910/966/603 1252/1088/603 1248/534/603 906/537/603 +f 1193/519/604 959/518/604 961/956/604 1195/1067/604 +f 1195/1067/605 961/956/605 962/957/605 1196/1069/605 +f 1196/1069/606 962/957/606 963/958/606 1197/1071/606 +f 1197/1074/607 963/959/607 964/960/607 1198/1075/607 +f 1198/1075/608 964/960/608 960/536/608 1194/535/608 +f 1361/1257/609 1349/1258/609 1351/1259/609 1363/1260/609 +f 1363/1260/610 1351/1259/610 1352/1261/610 1364/1262/610 +f 1364/1262/611 1352/1261/611 1353/1263/611 1365/1264/611 +f 1365/1265/612 1353/1266/612 1354/1267/612 1366/1268/612 +f 1366/1268/613 1354/1267/613 1350/577/613 1362/600/613 +f 1415/1269/614 1463/1270/614 1465/1271/614 1417/1272/614 +f 1417/1272/615 1465/1271/615 1466/1273/615 1418/1274/615 +f 1418/1274/616 1466/1273/616 1467/1275/616 1419/1276/616 +f 1419/1277/617 1467/1278/617 1468/1279/617 1420/1280/617 +f 1420/1280/618 1468/1279/618 1464/601/618 1416/576/618 +f 1367/1281/619 1361/1257/619 1363/1260/619 1369/1282/619 +f 1369/1282/620 1363/1260/620 1364/1262/620 1370/1283/620 +f 1370/1283/621 1364/1262/621 1365/1264/621 1371/1284/621 +f 1371/1285/622 1365/1265/622 1366/1268/622 1372/1286/622 +f 1372/1286/623 1366/1268/623 1362/600/623 1368/588/623 +f 1463/1270/624 1457/1287/624 1459/1288/624 1465/1271/624 +f 1465/1271/625 1459/1288/625 1460/1289/625 1466/1273/625 +f 1466/1273/626 1460/1289/626 1461/1290/626 1467/1275/626 +f 1467/1278/627 1461/1291/627 1462/1292/627 1468/1279/627 +f 1468/1279/628 1462/1292/628 1458/589/628 1464/601/628 +f 1373/1293/629 1367/1281/629 1369/1282/629 1375/1294/629 +f 1375/1294/630 1369/1282/630 1370/1283/630 1376/1295/630 +f 1376/1295/631 1370/1283/631 1371/1284/631 1377/1296/631 +f 1377/1297/632 1371/1285/632 1372/1286/632 1378/1298/632 +f 1378/1298/633 1372/1286/633 1368/588/633 1374/591/633 +f 1457/1287/634 1451/1299/634 1453/1300/634 1459/1288/634 +f 1459/1288/635 1453/1300/635 1454/1301/635 1460/1289/635 +f 1460/1289/636 1454/1301/636 1455/1302/636 1461/1290/636 +f 1461/1291/637 1455/1303/637 1456/1304/637 1462/1292/637 +f 1462/1292/638 1456/1304/638 1452/590/638 1458/589/638 +f 1379/1305/639 1373/1293/639 1375/1294/639 1381/1306/639 +f 1381/1306/640 1375/1294/640 1376/1295/640 1382/1307/640 +f 1382/1307/641 1376/1295/641 1377/1296/641 1383/1308/641 +f 1383/1309/642 1377/1297/642 1378/1298/642 1384/1310/642 +f 1384/1310/643 1378/1298/643 1374/591/643 1380/593/643 +f 1451/1299/644 1445/1311/644 1447/1312/644 1453/1300/644 +f 1453/1300/645 1447/1312/645 1448/1313/645 1454/1301/645 +f 1454/1301/646 1448/1313/646 1449/1314/646 1455/1302/646 +f 1455/1303/647 1449/1315/647 1450/1316/647 1456/1304/647 +f 1456/1304/648 1450/1316/648 1446/592/648 1452/590/648 +f 1385/1317/649 1379/1305/649 1381/1306/649 1387/1318/649 +f 1387/1318/650 1381/1306/650 1382/1307/650 1388/1319/650 +f 1388/1319/651 1382/1307/651 1383/1308/651 1389/1320/651 +f 1389/1321/652 1383/1309/652 1384/1310/652 1390/1322/652 +f 1390/1322/653 1384/1310/653 1380/593/653 1386/595/653 +f 1445/1311/654 1439/1323/654 1441/1324/654 1447/1312/654 +f 1447/1312/655 1441/1324/655 1442/1325/655 1448/1313/655 +f 1448/1313/656 1442/1325/656 1443/1326/656 1449/1314/656 +f 1449/1315/657 1443/1327/657 1444/1328/657 1450/1316/657 +f 1450/1316/658 1444/1328/658 1440/594/658 1446/592/658 +f 1391/1329/659 1385/1317/659 1387/1318/659 1393/1330/659 +f 1393/1330/660 1387/1318/660 1388/1319/660 1394/1331/660 +f 1394/1331/661 1388/1319/661 1389/1320/661 1395/1332/661 +f 1395/1333/662 1389/1321/662 1390/1322/662 1396/1334/662 +f 1396/1334/663 1390/1322/663 1386/595/663 1392/597/663 +f 1439/1323/664 1433/1335/664 1435/1336/664 1441/1324/664 +f 1441/1324/665 1435/1336/665 1436/1337/665 1442/1325/665 +f 1442/1325/666 1436/1337/666 1437/1338/666 1443/1326/666 +f 1443/1327/667 1437/1339/667 1438/1340/667 1444/1328/667 +f 1444/1328/668 1438/1340/668 1434/596/668 1440/594/668 +f 1397/1341/669 1391/1329/669 1393/1330/669 1399/1342/669 +f 1399/1342/670 1393/1330/670 1394/1331/670 1400/1343/670 +f 1400/1343/671 1394/1331/671 1395/1332/671 1401/1344/671 +f 1401/1345/672 1395/1333/672 1396/1334/672 1402/1346/672 +f 1402/1346/673 1396/1334/673 1392/597/673 1398/599/673 +f 1433/1335/674 1427/1347/674 1429/1348/674 1435/1336/674 +f 1435/1336/675 1429/1348/675 1430/1349/675 1436/1337/675 +f 1436/1337/676 1430/1349/676 1431/1350/676 1437/1338/676 +f 1437/1339/677 1431/1351/677 1432/1352/677 1438/1340/677 +f 1438/1340/678 1432/1352/678 1428/598/678 1434/596/678 +f 1403/1353/679 1397/1341/679 1399/1342/679 1405/1354/679 +f 1405/1354/680 1399/1342/680 1400/1343/680 1406/1355/680 +f 1406/1355/681 1400/1343/681 1401/1344/681 1407/1356/681 +f 1407/1357/682 1401/1345/682 1402/1346/682 1408/1358/682 +f 1408/1358/683 1402/1346/683 1398/599/683 1404/586/683 +f 1427/1347/684 1421/1359/684 1423/1360/684 1429/1348/684 +f 1429/1348/685 1423/1360/685 1424/1361/685 1430/1349/685 +f 1430/1349/686 1424/1361/686 1425/1362/686 1431/1350/686 +f 1431/1351/687 1425/1363/687 1426/1364/687 1432/1352/687 +f 1432/1352/688 1426/1364/688 1422/587/688 1428/598/688 +f 1355/1365/689 1403/1353/689 1405/1354/689 1357/1366/689 +f 1357/1366/690 1405/1354/690 1406/1355/690 1358/1367/690 +f 1358/1367/691 1406/1355/691 1407/1356/691 1359/1368/691 +f 1359/1369/692 1407/1357/692 1408/1358/692 1360/1370/692 +f 1360/1370/693 1408/1358/693 1404/586/693 1356/501/693 +f 1421/1359/694 1409/1371/694 1411/1372/694 1423/1360/694 +f 1423/1360/695 1411/1372/695 1412/1373/695 1424/1361/695 +f 1424/1361/696 1412/1373/696 1413/1374/696 1425/1362/696 +f 1425/1363/697 1413/1375/697 1414/1376/697 1426/1364/697 +f 1426/1364/698 1414/1376/698 1410/502/698 1422/587/698 +f 1481/1377/699 1469/1378/699 1471/1379/699 1483/1380/699 +f 1483/1380/700 1471/1379/700 1472/1381/700 1484/1382/700 +f 1484/1382/701 1472/1381/701 1473/1383/701 1485/1384/701 +f 1485/1385/702 1473/1386/702 1474/1387/702 1486/1388/702 +f 1486/1388/703 1474/1387/703 1470/514/703 1482/604/703 +f 1295/1389/704 1343/1390/704 1345/1391/704 1297/1392/704 +f 1297/1392/705 1345/1391/705 1346/1393/705 1298/1394/705 +f 1298/1394/706 1346/1393/706 1347/1395/706 1299/1396/706 +f 1299/1397/707 1347/1398/707 1348/1399/707 1300/1400/707 +f 1300/1400/708 1348/1399/708 1344/605/708 1296/513/708 +f 1487/1401/709 1481/1377/709 1483/1380/709 1489/1402/709 +f 1489/1402/710 1483/1380/710 1484/1382/710 1490/1403/710 +f 1490/1403/711 1484/1382/711 1485/1384/711 1491/1404/711 +f 1491/1405/712 1485/1385/712 1486/1388/712 1492/1406/712 +f 1492/1406/713 1486/1388/713 1482/604/713 1488/607/713 +f 1343/1390/714 1337/1407/714 1339/1408/714 1345/1391/714 +f 1345/1391/715 1339/1408/715 1340/1409/715 1346/1393/715 +f 1346/1393/716 1340/1409/716 1341/1410/716 1347/1395/716 +f 1347/1398/717 1341/1411/717 1342/1412/717 1348/1399/717 +f 1348/1399/718 1342/1412/718 1338/606/718 1344/605/718 +f 1493/1413/719 1487/1401/719 1489/1402/719 1495/1414/719 +f 1495/1414/720 1489/1402/720 1490/1403/720 1496/1415/720 +f 1496/1415/721 1490/1403/721 1491/1404/721 1497/1416/721 +f 1497/1417/722 1491/1405/722 1492/1406/722 1498/1418/722 +f 1498/1418/723 1492/1406/723 1488/607/723 1494/609/723 +f 1337/1407/724 1331/1419/724 1333/1420/724 1339/1408/724 +f 1339/1408/725 1333/1420/725 1334/1421/725 1340/1409/725 +f 1340/1409/726 1334/1421/726 1335/1422/726 1341/1410/726 +f 1341/1411/727 1335/1423/727 1336/1424/727 1342/1412/727 +f 1342/1412/728 1336/1424/728 1332/608/728 1338/606/728 +f 1499/1425/729 1493/1413/729 1495/1414/729 1501/1426/729 +f 1501/1426/730 1495/1414/730 1496/1415/730 1502/1427/730 +f 1502/1427/731 1496/1415/731 1497/1416/731 1503/1428/731 +f 1503/1429/732 1497/1417/732 1498/1418/732 1504/1430/732 +f 1504/1430/733 1498/1418/733 1494/609/733 1500/611/733 +f 1331/1419/734 1325/1431/734 1327/1432/734 1333/1420/734 +f 1333/1420/735 1327/1432/735 1328/1433/735 1334/1421/735 +f 1334/1421/736 1328/1433/736 1329/1434/736 1335/1422/736 +f 1335/1423/737 1329/1435/737 1330/1436/737 1336/1424/737 +f 1336/1424/738 1330/1436/738 1326/610/738 1332/608/738 +f 1505/1437/739 1499/1425/739 1501/1426/739 1507/1438/739 +f 1507/1438/740 1501/1426/740 1502/1427/740 1508/1439/740 +f 1508/1439/741 1502/1427/741 1503/1428/741 1509/1440/741 +f 1509/1441/742 1503/1429/742 1504/1430/742 1510/1442/742 +f 1510/1442/743 1504/1430/743 1500/611/743 1506/613/743 +f 1325/1431/744 1319/1443/744 1321/1444/744 1327/1432/744 +f 1327/1432/745 1321/1444/745 1322/1445/745 1328/1433/745 +f 1328/1433/746 1322/1445/746 1323/1446/746 1329/1434/746 +f 1329/1435/747 1323/1447/747 1324/1448/747 1330/1436/747 +f 1330/1436/748 1324/1448/748 1320/612/748 1326/610/748 +f 1511/1449/749 1505/1437/749 1507/1438/749 1513/1450/749 +f 1513/1450/750 1507/1438/750 1508/1439/750 1514/1451/750 +f 1514/1451/751 1508/1439/751 1509/1440/751 1515/1452/751 +f 1515/1453/752 1509/1441/752 1510/1442/752 1516/1454/752 +f 1516/1454/753 1510/1442/753 1506/613/753 1512/615/753 +f 1319/1443/754 1313/1455/754 1315/1456/754 1321/1444/754 +f 1321/1444/755 1315/1456/755 1316/1457/755 1322/1445/755 +f 1322/1445/756 1316/1457/756 1317/1458/756 1323/1446/756 +f 1323/1447/757 1317/1459/757 1318/1460/757 1324/1448/757 +f 1324/1448/758 1318/1460/758 1314/614/758 1320/612/758 +f 1517/1461/759 1511/1449/759 1513/1450/759 1519/1462/759 +f 1519/1462/760 1513/1450/760 1514/1451/760 1520/1463/760 +f 1520/1463/761 1514/1451/761 1515/1452/761 1521/1464/761 +f 1521/1465/762 1515/1453/762 1516/1454/762 1522/1466/762 +f 1522/1466/763 1516/1454/763 1512/615/763 1518/602/763 +f 1313/1455/764 1307/1467/764 1309/1468/764 1315/1456/764 +f 1315/1456/765 1309/1468/765 1310/1469/765 1316/1457/765 +f 1316/1457/766 1310/1469/766 1311/1470/766 1317/1458/766 +f 1317/1459/767 1311/1471/767 1312/1472/767 1318/1460/767 +f 1318/1460/768 1312/1472/768 1308/603/768 1314/614/768 +f 1523/1473/769 1517/1461/769 1519/1462/769 1525/1474/769 +f 1525/1474/770 1519/1462/770 1520/1463/770 1526/1475/770 +f 1526/1475/771 1520/1463/771 1521/1464/771 1527/1476/771 +f 1527/1477/772 1521/1465/772 1522/1466/772 1528/1478/772 +f 1528/1478/773 1522/1466/773 1518/602/773 1524/572/773 +f 1307/1467/774 1301/1479/774 1303/1480/774 1309/1468/774 +f 1309/1468/775 1303/1480/775 1304/1481/775 1310/1469/775 +f 1310/1469/776 1304/1481/776 1305/1482/776 1311/1470/776 +f 1311/1471/777 1305/1483/777 1306/1484/777 1312/1472/777 +f 1312/1472/778 1306/1484/778 1302/573/778 1308/603/778 +f 1475/1485/779 1523/1473/779 1525/1474/779 1477/1486/779 +f 1477/1486/780 1525/1474/780 1526/1475/780 1478/1487/780 +f 1478/1487/781 1526/1475/781 1527/1476/781 1479/1488/781 +f 1479/1489/782 1527/1477/782 1528/1478/782 1480/1490/782 +f 1480/1490/783 1528/1478/783 1524/572/783 1476/575/783 +f 1301/1479/784 1289/1491/784 1291/1492/784 1303/1480/784 +f 1303/1480/785 1291/1492/785 1292/1493/785 1304/1481/785 +f 1304/1481/786 1292/1493/786 1293/1494/786 1305/1482/786 +f 1305/1483/787 1293/1495/787 1294/1496/787 1306/1484/787 +f 1306/1484/788 1294/1496/788 1290/574/788 1302/573/788 +f 881/855/789 1295/1389/789 1297/1392/789 883/853/789 +f 883/853/790 1297/1392/790 1298/1394/790 884/851/790 +f 884/851/791 1298/1394/791 1299/1396/791 885/848/791 +f 885/847/792 1299/1397/792 1300/1400/792 886/845/792 +f 886/845/793 1300/1400/793 1296/513/793 882/516/793 +f 1469/1378/794 887/866/794 889/864/794 1471/1379/794 +f 1471/1379/795 889/864/795 890/862/795 1472/1381/795 +f 1472/1381/796 890/862/796 891/861/796 1473/1383/796 +f 1473/1386/797 891/858/797 892/856/797 1474/1387/797 +f 1474/1387/798 892/856/798 888/515/798 1470/514/798 +f 1289/1491/799 1151/1173/799 1153/1176/799 1291/1492/799 +f 1291/1492/800 1153/1176/800 1154/1178/800 1292/1493/800 +f 1292/1493/801 1154/1178/801 1155/1180/801 1293/1494/801 +f 1293/1495/802 1155/1181/802 1156/1184/802 1294/1496/802 +f 1294/1496/803 1156/1184/803 1152/541/803 1290/574/803 +f 1097/1162/804 1475/1485/804 1477/1486/804 1099/1163/804 +f 1099/1163/805 1477/1486/805 1478/1487/805 1100/1165/805 +f 1100/1165/806 1478/1487/806 1479/1488/806 1101/1167/806 +f 1101/1170/807 1479/1489/807 1480/1490/807 1102/1171/807 +f 1102/1171/808 1480/1490/808 1476/575/808 1098/540/808 +f 1409/1371/809 869/837/809 871/836/809 1411/1372/809 +f 1411/1372/810 871/836/810 872/835/810 1412/1373/810 +f 1412/1373/811 872/835/811 873/834/811 1413/1374/811 +f 1413/1375/812 873/833/812 874/832/812 1414/1376/812 +f 1414/1376/813 874/832/813 870/500/813 1410/502/813 +f 875/843/814 1355/1365/814 1357/1366/814 877/842/814 +f 877/842/815 1357/1366/815 1358/1367/815 878/841/815 +f 878/841/816 1358/1367/816 1359/1368/816 879/840/816 +f 879/839/817 1359/1369/817 1360/1370/817 880/838/817 +f 880/838/818 1360/1370/818 1356/501/818 876/499/818 +f 1241/1155/819 1415/1269/819 1417/1272/819 1243/1156/819 +f 1243/1156/820 1417/1272/820 1418/1274/820 1244/1157/820 +f 1244/1157/821 1418/1274/821 1419/1276/821 1245/1158/821 +f 1245/1159/822 1419/1277/822 1420/1280/822 1246/1160/822 +f 1246/1160/823 1420/1280/823 1416/576/823 1242/564/823 +f 1349/1258/824 1199/1149/824 1201/1150/824 1351/1259/824 +f 1351/1259/825 1201/1150/825 1202/1151/825 1352/1261/825 +f 1352/1261/826 1202/1151/826 1203/1152/826 1353/1263/826 +f 1353/1266/827 1203/1153/827 1204/1154/827 1354/1267/827 +f 1354/1267/828 1204/1154/828 1200/565/828 1350/577/828 +f 1163/1227/25 1169/1215/25 1277/1095/25 +f 1879/1497/829 1865/1498/829 1867/1499/829 1881/1500/829 +f 1881/1500/830 1867/1499/830 1868/1501/830 1882/1502/830 +f 1882/1502/831 1868/1501/831 1869/1503/831 1883/1504/831 +f 1883/1505/832 1869/1506/832 1870/1507/832 1884/1508/832 +f 1884/1508/833 1870/1507/833 1871/1509/833 1885/1510/833 +f 1885/1510/834 1871/1509/834 1866/371/834 1880/355/834 +f 1928/414/835 1970/413/835 1972/1511/835 1930/1512/835 +f 1930/1512/836 1972/1511/836 1973/1513/836 1931/1514/836 +f 1931/1514/837 1973/1513/837 1974/1515/837 1932/1516/837 +f 1932/1517/838 1974/1518/838 1975/1519/838 1933/1520/838 +f 1933/1520/839 1975/1519/839 1976/1521/839 1934/1522/839 +f 1934/1522/840 1976/1521/840 1971/356/840 1929/372/840 +f 1886/1523/841 1879/1497/841 1881/1500/841 1888/1524/841 +f 1888/1524/842 1881/1500/842 1882/1502/842 1889/1525/842 +f 1889/1525/843 1882/1502/843 1883/1526/843 1890/1527/843 +f 1890/1528/844 1883/1529/844 1884/1530/844 1891/1531/844 +f 1891/1531/845 1884/1530/845 1885/1532/845 1892/1533/845 +f 1892/1533/846 1885/1532/846 1880/355/846 1887/345/846 +f 1970/413/847 1963/412/847 1965/1534/847 1972/1511/847 +f 1972/1511/848 1965/1534/848 1966/1535/848 1973/1513/848 +f 1973/1513/849 1966/1535/849 1967/1536/849 1974/1537/849 +f 1974/1538/850 1967/1539/850 1968/1540/850 1975/1541/850 +f 1975/1541/851 1968/1540/851 1969/1542/851 1976/1543/851 +f 1976/1543/852 1969/1542/852 1964/346/852 1971/356/852 +f 1893/1544/853 1886/1523/853 1888/1524/853 1895/1545/853 +f 1895/1545/854 1888/1524/854 1889/1525/854 1896/1546/854 +f 1896/1546/855 1889/1525/855 1890/1547/855 1897/1548/855 +f 1897/1549/856 1890/1550/856 1891/1551/856 1898/1552/856 +f 1898/1552/857 1891/1551/857 1892/1553/857 1899/1554/857 +f 1899/1554/858 1892/1553/858 1887/345/858 1894/348/858 +f 1963/412/859 1956/411/859 1958/1555/859 1965/1534/859 +f 1965/1534/860 1958/1555/860 1959/1556/860 1966/1535/860 +f 1966/1535/861 1959/1556/861 1960/1557/861 1967/1558/861 +f 1967/1559/862 1960/1560/862 1961/1561/862 1968/1562/862 +f 1968/1562/863 1961/1561/863 1962/1563/863 1969/1564/863 +f 1969/1564/864 1962/1563/864 1957/347/864 1964/346/864 +f 1900/1565/865 1893/1544/865 1895/1545/865 1902/1566/865 +f 1902/1566/866 1895/1545/866 1896/1546/866 1903/1567/866 +f 1903/1567/867 1896/1546/867 1897/1568/867 1904/1569/867 +f 1904/1570/868 1897/1571/868 1898/1572/868 1905/1573/868 +f 1905/1573/869 1898/1572/869 1899/1574/869 1906/1575/869 +f 1906/1575/870 1899/1574/870 1894/348/870 1901/350/870 +f 1956/411/871 1949/410/871 1951/1576/871 1958/1555/871 +f 1958/1555/872 1951/1576/872 1952/1577/872 1959/1556/872 +f 1959/1556/873 1952/1577/873 1953/1578/873 1960/1579/873 +f 1960/1580/874 1953/1581/874 1954/1582/874 1961/1583/874 +f 1961/1583/875 1954/1582/875 1955/1584/875 1962/1585/875 +f 1962/1585/876 1955/1584/876 1950/349/876 1957/347/876 +f 1907/1586/877 1900/1565/877 1902/1566/877 1909/1587/877 +f 1909/1587/878 1902/1566/878 1903/1567/878 1910/1588/878 +f 1910/1588/879 1903/1567/879 1904/1589/879 1911/1590/879 +f 1911/1591/880 1904/1592/880 1905/1593/880 1912/1594/880 +f 1912/1594/881 1905/1593/881 1906/1595/881 1913/1596/881 +f 1913/1596/882 1906/1595/882 1901/351/882 1908/354/882 +f 1949/410/883 1942/409/883 1944/1597/883 1951/1576/883 +f 1951/1576/884 1944/1597/884 1945/1598/884 1952/1577/884 +f 1952/1577/885 1945/1598/885 1946/1599/885 1953/1600/885 +f 1953/1601/886 1946/1602/886 1947/1603/886 1954/1604/886 +f 1954/1604/887 1947/1603/887 1948/1605/887 1955/1606/887 +f 1955/1606/888 1948/1605/888 1943/353/888 1950/352/888 +f 1914/1607/889 1907/1586/889 1909/1587/889 1916/1608/889 +f 1916/1608/890 1909/1587/890 1910/1588/890 1917/1609/890 +f 1917/1609/891 1910/1588/891 1911/1610/891 1918/1611/891 +f 1918/1612/892 1911/1613/892 1912/1614/892 1919/1615/892 +f 1919/1615/893 1912/1614/893 1913/1616/893 1920/1617/893 +f 1920/1617/894 1913/1616/894 1908/354/894 1915/341/894 +f 1942/409/895 1935/408/895 1937/1618/895 1944/1597/895 +f 1944/1597/896 1937/1618/896 1938/1619/896 1945/1598/896 +f 1945/1598/897 1938/1619/897 1939/1620/897 1946/1621/897 +f 1946/1622/898 1939/1623/898 1940/1624/898 1947/1625/898 +f 1947/1625/899 1940/1624/899 1941/1626/899 1948/1627/899 +f 1948/1627/900 1941/1626/900 1936/342/900 1943/353/900 +f 1872/1628/901 1914/1607/901 1916/1608/901 1874/1629/901 +f 1874/1629/902 1916/1608/902 1917/1609/902 1875/1630/902 +f 1875/1630/903 1917/1609/903 1918/1631/903 1876/1632/903 +f 1876/1633/904 1918/1634/904 1919/1635/904 1877/1636/904 +f 1877/1636/905 1919/1635/905 1920/1637/905 1878/1638/905 +f 1878/1638/906 1920/1637/906 1915/341/906 1873/344/906 +f 1935/408/907 1921/407/907 1923/1639/907 1937/1618/907 +f 1937/1618/908 1923/1639/908 1924/1640/908 1938/1619/908 +f 1938/1619/909 1924/1640/909 1925/1641/909 1939/1642/909 +f 1939/1643/910 1925/1644/910 1926/1645/910 1940/1646/910 +f 1940/1646/911 1926/1645/911 1927/1647/911 1941/1648/911 +f 1941/1648/912 1927/1647/912 1922/343/912 1936/342/912 +f 1543/1649/913 1529/1650/913 1531/1651/913 1545/1652/913 +f 1545/1652/914 1531/1651/914 1532/1653/914 1546/1654/914 +f 1546/1654/915 1532/1653/915 1533/1655/915 1547/1656/915 +f 1547/1657/916 1533/1658/916 1534/1659/916 1548/1660/916 +f 1548/1660/917 1534/1659/917 1535/1661/917 1549/1662/917 +f 1549/1662/918 1535/1661/918 1530/357/918 1544/337/918 +f 1704/390/919 1746/389/919 1748/1663/919 1706/1664/919 +f 1706/1664/920 1748/1663/920 1749/1665/920 1707/1666/920 +f 1707/1666/921 1749/1665/921 1750/1667/921 1708/1668/921 +f 1708/1669/922 1750/1670/922 1751/1671/922 1709/1672/922 +f 1709/1672/923 1751/1671/923 1752/1673/923 1710/1674/923 +f 1710/1674/924 1752/1673/924 1747/338/924 1705/358/924 +f 1550/1675/925 1543/1649/925 1545/1652/925 1552/1676/925 +f 1552/1676/926 1545/1652/926 1546/1654/926 1553/1677/926 +f 1553/1677/927 1546/1654/927 1547/1678/927 1554/1679/927 +f 1554/1680/928 1547/1681/928 1548/1682/928 1555/1683/928 +f 1555/1683/929 1548/1682/929 1549/1684/929 1556/1685/929 +f 1556/1685/930 1549/1684/930 1544/337/930 1551/340/930 +f 1746/389/931 1739/388/931 1741/1686/931 1748/1663/931 +f 1748/1663/932 1741/1686/932 1742/1687/932 1749/1665/932 +f 1749/1665/933 1742/1687/933 1743/1688/933 1750/1689/933 +f 1750/1690/934 1743/1691/934 1744/1692/934 1751/1693/934 +f 1751/1693/935 1744/1692/935 1745/1694/935 1752/1695/935 +f 1752/1695/936 1745/1694/936 1740/339/936 1747/338/936 +f 1557/1696/937 1550/1675/937 1552/1676/937 1559/1697/937 +f 1559/1697/938 1552/1676/938 1553/1677/938 1560/1698/938 +f 1560/1698/939 1553/1677/939 1554/1699/939 1561/1700/939 +f 1561/1701/940 1554/1702/940 1555/1703/940 1562/1704/940 +f 1562/1704/941 1555/1703/941 1556/1705/941 1563/1706/941 +f 1563/1706/942 1556/1705/942 1551/340/942 1558/360/942 +f 1739/388/943 1732/387/943 1734/1707/943 1741/1686/943 +f 1741/1686/944 1734/1707/944 1735/1708/944 1742/1687/944 +f 1742/1687/945 1735/1708/945 1736/1709/945 1743/1710/945 +f 1743/1711/946 1736/1712/946 1737/1713/946 1744/1714/946 +f 1744/1714/947 1737/1713/947 1738/1715/947 1745/1716/947 +f 1745/1716/948 1738/1715/948 1733/359/948 1740/339/948 +f 1564/1717/949 1557/1696/949 1559/1697/949 1566/1718/949 +f 1566/1718/950 1559/1697/950 1560/1698/950 1567/1719/950 +f 1567/1719/951 1560/1698/951 1561/1720/951 1568/1721/951 +f 1568/1722/952 1561/1723/952 1562/1724/952 1569/1725/952 +f 1569/1725/953 1562/1724/953 1563/1726/953 1570/1727/953 +f 1570/1727/954 1563/1726/954 1558/360/954 1565/362/954 +f 1732/387/955 1725/386/955 1727/1728/955 1734/1707/955 +f 1734/1707/956 1727/1728/956 1728/1729/956 1735/1708/956 +f 1735/1708/957 1728/1729/957 1729/1730/957 1736/1731/957 +f 1736/1732/958 1729/1733/958 1730/1734/958 1737/1735/958 +f 1737/1735/959 1730/1734/959 1731/1736/959 1738/1737/959 +f 1738/1737/960 1731/1736/960 1726/361/960 1733/359/960 +f 1571/1738/961 1564/1717/961 1566/1718/961 1573/1739/961 +f 1573/1739/962 1566/1718/962 1567/1719/962 1574/1740/962 +f 1574/1740/963 1567/1719/963 1568/1741/963 1575/1742/963 +f 1575/1743/964 1568/1744/964 1569/1745/964 1576/1746/964 +f 1576/1746/965 1569/1745/965 1570/1747/965 1577/1748/965 +f 1577/1748/966 1570/1747/966 1565/363/966 1572/366/966 +f 1725/386/967 1718/385/967 1720/1749/967 1727/1728/967 +f 1727/1728/968 1720/1749/968 1721/1750/968 1728/1729/968 +f 1728/1729/969 1721/1750/969 1722/1751/969 1729/1752/969 +f 1729/1753/970 1722/1754/970 1723/1755/970 1730/1756/970 +f 1730/1756/971 1723/1755/971 1724/1757/971 1731/1758/971 +f 1731/1758/972 1724/1757/972 1719/365/972 1726/364/972 +f 1578/1759/973 1571/1738/973 1573/1739/973 1580/1760/973 +f 1580/1760/974 1573/1739/974 1574/1740/974 1581/1761/974 +f 1581/1761/975 1574/1740/975 1575/1762/975 1582/1763/975 +f 1582/1764/976 1575/1765/976 1576/1766/976 1583/1767/976 +f 1583/1767/977 1576/1766/977 1577/1768/977 1584/1769/977 +f 1584/1769/978 1577/1768/978 1572/366/978 1579/329/978 +f 1718/385/979 1711/384/979 1713/1770/979 1720/1749/979 +f 1720/1749/980 1713/1770/980 1714/1771/980 1721/1750/980 +f 1721/1750/981 1714/1771/981 1715/1772/981 1722/1773/981 +f 1722/1774/982 1715/1775/982 1716/1776/982 1723/1777/982 +f 1723/1777/983 1716/1776/983 1717/1778/983 1724/1779/983 +f 1724/1779/984 1717/1778/984 1712/330/984 1719/365/984 +f 1536/1780/985 1578/1759/985 1580/1760/985 1538/1781/985 +f 1538/1781/986 1580/1760/986 1581/1761/986 1539/1782/986 +f 1539/1782/987 1581/1761/987 1582/1783/987 1540/1784/987 +f 1540/1785/988 1582/1786/988 1583/1787/988 1541/1788/988 +f 1541/1788/989 1583/1787/989 1584/1789/989 1542/1790/989 +f 1542/1790/990 1584/1789/990 1579/329/990 1537/332/990 +f 1711/384/991 1697/383/991 1699/1791/991 1713/1770/991 +f 1713/1770/992 1699/1791/992 1700/1792/992 1714/1771/992 +f 1714/1771/993 1700/1792/993 1701/1793/993 1715/1794/993 +f 1715/1795/994 1701/1796/994 1702/1797/994 1716/1798/994 +f 1716/1798/995 1702/1797/995 1703/1799/995 1717/1800/995 +f 1717/1800/996 1703/1799/996 1698/331/996 1712/330/996 +f 1599/1801/997 1585/1802/997 1587/1803/997 1601/1804/997 +f 1601/1804/998 1587/1803/998 1588/1805/998 1602/1806/998 +f 1602/1806/999 1588/1805/999 1589/1807/999 1603/1808/999 +f 1603/1809/1000 1589/1810/1000 1590/1811/1000 1604/1812/1000 +f 1604/1812/1001 1590/1811/1001 1591/1813/1001 1605/1814/1001 +f 1605/1814/1002 1591/1813/1002 1586/367/1002 1600/370/1002 +f 1648/398/1003 1690/397/1003 1692/1815/1003 1650/1816/1003 +f 1650/1816/1004 1692/1815/1004 1693/1817/1004 1651/1818/1004 +f 1651/1818/1005 1693/1817/1005 1694/1819/1005 1652/1820/1005 +f 1652/1821/1006 1694/1822/1006 1695/1823/1006 1653/1824/1006 +f 1653/1824/1007 1695/1823/1007 1696/1825/1007 1654/1826/1007 +f 1654/1826/1008 1696/1825/1008 1691/369/1008 1649/368/1008 +f 1606/1827/1009 1599/1801/1009 1601/1804/1009 1608/1828/1009 +f 1608/1828/1010 1601/1804/1010 1602/1806/1010 1609/1829/1010 +f 1609/1829/1011 1602/1806/1011 1603/1830/1011 1610/1831/1011 +f 1610/1832/1012 1603/1833/1012 1604/1834/1012 1611/1835/1012 +f 1611/1835/1013 1604/1834/1013 1605/1836/1013 1612/1837/1013 +f 1612/1837/1014 1605/1836/1014 1600/370/1014 1607/373/1014 +f 1690/397/1015 1683/396/1015 1685/1838/1015 1692/1815/1015 +f 1692/1815/1016 1685/1838/1016 1686/1839/1016 1693/1817/1016 +f 1693/1817/1017 1686/1839/1017 1687/1840/1017 1694/1841/1017 +f 1694/1842/1018 1687/1843/1018 1688/1844/1018 1695/1845/1018 +f 1695/1845/1019 1688/1844/1019 1689/1846/1019 1696/1847/1019 +f 1696/1847/1020 1689/1846/1020 1684/374/1020 1691/369/1020 +f 1613/1848/1021 1606/1827/1021 1608/1828/1021 1615/1849/1021 +f 1615/1849/1022 1608/1828/1022 1609/1829/1022 1616/1850/1022 +f 1616/1850/1023 1609/1829/1023 1610/1851/1023 1617/1852/1023 +f 1617/1853/1024 1610/1854/1024 1611/1855/1024 1618/1856/1024 +f 1618/1856/1025 1611/1855/1025 1612/1857/1025 1619/1858/1025 +f 1619/1858/1026 1612/1857/1026 1607/373/1026 1614/376/1026 +f 1683/396/1027 1676/395/1027 1678/1859/1027 1685/1838/1027 +f 1685/1838/1028 1678/1859/1028 1679/1860/1028 1686/1839/1028 +f 1686/1839/1029 1679/1860/1029 1680/1861/1029 1687/1862/1029 +f 1687/1863/1030 1680/1864/1030 1681/1865/1030 1688/1866/1030 +f 1688/1866/1031 1681/1865/1031 1682/1867/1031 1689/1868/1031 +f 1689/1868/1032 1682/1867/1032 1677/375/1032 1684/374/1032 +f 1620/1869/1033 1613/1848/1033 1615/1849/1033 1622/1870/1033 +f 1622/1870/1034 1615/1849/1034 1616/1850/1034 1623/1871/1034 +f 1623/1871/1035 1616/1850/1035 1617/1872/1035 1624/1873/1035 +f 1624/1874/1036 1617/1875/1036 1618/1876/1036 1625/1877/1036 +f 1625/1877/1037 1618/1876/1037 1619/1878/1037 1626/1879/1037 +f 1626/1879/1038 1619/1878/1038 1614/376/1038 1621/378/1038 +f 1676/395/1039 1669/394/1039 1671/1880/1039 1678/1859/1039 +f 1678/1859/1040 1671/1880/1040 1672/1881/1040 1679/1860/1040 +f 1679/1860/1041 1672/1881/1041 1673/1882/1041 1680/1883/1041 +f 1680/1884/1042 1673/1885/1042 1674/1886/1042 1681/1887/1042 +f 1681/1887/1043 1674/1886/1043 1675/1888/1043 1682/1889/1043 +f 1682/1889/1044 1675/1888/1044 1670/377/1044 1677/375/1044 +f 1627/1890/1045 1620/1869/1045 1622/1870/1045 1629/1891/1045 +f 1629/1891/1046 1622/1870/1046 1623/1871/1046 1630/1892/1046 +f 1630/1892/1047 1623/1871/1047 1624/1893/1047 1631/1894/1047 +f 1631/1895/1048 1624/1896/1048 1625/1897/1048 1632/1898/1048 +f 1632/1898/1049 1625/1897/1049 1626/1899/1049 1633/1900/1049 +f 1633/1900/1050 1626/1899/1050 1621/379/1050 1628/382/1050 +f 1669/394/1051 1662/393/1051 1664/1901/1051 1671/1880/1051 +f 1671/1880/1052 1664/1901/1052 1665/1902/1052 1672/1881/1052 +f 1672/1881/1053 1665/1902/1053 1666/1903/1053 1673/1904/1053 +f 1673/1905/1054 1666/1906/1054 1667/1907/1054 1674/1908/1054 +f 1674/1908/1055 1667/1907/1055 1668/1909/1055 1675/1910/1055 +f 1675/1910/1056 1668/1909/1056 1663/381/1056 1670/380/1056 +f 1634/1911/1057 1627/1890/1057 1629/1891/1057 1636/1912/1057 +f 1636/1912/1058 1629/1891/1058 1630/1892/1058 1637/1913/1058 +f 1637/1913/1059 1630/1892/1059 1631/1914/1059 1638/1915/1059 +f 1638/1916/1060 1631/1917/1060 1632/1918/1060 1639/1919/1060 +f 1639/1919/1061 1632/1918/1061 1633/1920/1061 1640/1921/1061 +f 1640/1921/1062 1633/1920/1062 1628/382/1062 1635/321/1062 +f 1662/393/1063 1655/392/1063 1657/1922/1063 1664/1901/1063 +f 1664/1901/1064 1657/1922/1064 1658/1923/1064 1665/1902/1064 +f 1665/1902/1065 1658/1923/1065 1659/1924/1065 1666/1925/1065 +f 1666/1926/1066 1659/1927/1066 1660/1928/1066 1667/1929/1066 +f 1667/1929/1067 1660/1928/1067 1661/1930/1067 1668/1931/1067 +f 1668/1931/1068 1661/1930/1068 1656/322/1068 1663/381/1068 +f 1592/1932/1069 1634/1911/1069 1636/1912/1069 1594/1933/1069 +f 1594/1933/1070 1636/1912/1070 1637/1913/1070 1595/1934/1070 +f 1595/1934/1071 1637/1913/1071 1638/1935/1071 1596/1936/1071 +f 1596/1937/1072 1638/1938/1072 1639/1939/1072 1597/1940/1072 +f 1597/1940/1073 1639/1939/1073 1640/1941/1073 1598/1942/1073 +f 1598/1942/1074 1640/1941/1074 1635/321/1074 1593/324/1074 +f 1655/392/1075 1641/391/1075 1643/1943/1075 1657/1922/1075 +f 1657/1922/1076 1643/1943/1076 1644/1944/1076 1658/1923/1076 +f 1658/1923/1077 1644/1944/1077 1645/1945/1077 1659/1946/1077 +f 1659/1947/1078 1645/1948/1078 1646/1949/1078 1660/1950/1078 +f 1660/1950/1079 1646/1949/1079 1647/1951/1079 1661/1952/1079 +f 1661/1952/1080 1647/1951/1080 1642/323/1080 1656/322/1080 +f 1767/1953/1081 1753/1954/1081 1755/1955/1081 1769/1956/1081 +f 1769/1956/1082 1755/1955/1082 1756/1957/1082 1770/1958/1082 +f 1770/1958/1083 1756/1957/1083 1757/1959/1083 1771/1960/1083 +f 1771/1961/1084 1757/1962/1084 1758/1963/1084 1772/1964/1084 +f 1772/1964/1085 1758/1963/1085 1759/1965/1085 1773/1966/1085 +f 1773/1966/1086 1759/1965/1086 1754/325/1086 1768/328/1086 +f 1816/406/1087 1858/405/1087 1860/1967/1087 1818/1968/1087 +f 1818/1968/1088 1860/1967/1088 1861/1969/1088 1819/1970/1088 +f 1819/1970/1089 1861/1969/1089 1862/1971/1089 1820/1972/1089 +f 1820/1973/1090 1862/1974/1090 1863/1975/1090 1821/1976/1090 +f 1821/1976/1091 1863/1975/1091 1864/1977/1091 1822/1978/1091 +f 1822/1978/1092 1864/1977/1092 1859/327/1092 1817/326/1092 +f 1774/1979/1093 1767/1953/1093 1769/1956/1093 1776/1980/1093 +f 1776/1980/1094 1769/1956/1094 1770/1958/1094 1777/1981/1094 +f 1777/1981/1095 1770/1958/1095 1771/1982/1095 1778/1983/1095 +f 1778/1984/1096 1771/1985/1096 1772/1986/1096 1779/1987/1096 +f 1779/1987/1097 1772/1986/1097 1773/1988/1097 1780/1989/1097 +f 1780/1989/1098 1773/1988/1098 1768/328/1098 1775/415/1098 +f 1858/405/1099 1851/404/1099 1853/1990/1099 1860/1967/1099 +f 1860/1967/1100 1853/1990/1100 1854/1991/1100 1861/1969/1100 +f 1861/1969/1101 1854/1991/1101 1855/1992/1101 1862/1993/1101 +f 1862/1994/1102 1855/1995/1102 1856/1996/1102 1863/1997/1102 +f 1863/1997/1103 1856/1996/1103 1857/1998/1103 1864/1999/1103 +f 1864/1999/1104 1857/1998/1104 1852/416/1104 1859/327/1104 +f 1781/2000/1105 1774/1979/1105 1776/1980/1105 1783/2001/1105 +f 1783/2001/1106 1776/1980/1106 1777/1981/1106 1784/2002/1106 +f 1784/2002/1107 1777/1981/1107 1778/2003/1107 1785/2004/1107 +f 1785/2005/1108 1778/2006/1108 1779/2007/1108 1786/2008/1108 +f 1786/2008/1109 1779/2007/1109 1780/2009/1109 1787/2010/1109 +f 1787/2010/1110 1780/2009/1110 1775/415/1110 1782/418/1110 +f 1851/404/1111 1844/403/1111 1846/2011/1111 1853/1990/1111 +f 1853/1990/1112 1846/2011/1112 1847/2012/1112 1854/1991/1112 +f 1854/1991/1113 1847/2012/1113 1848/2013/1113 1855/2014/1113 +f 1855/2015/1114 1848/2016/1114 1849/2017/1114 1856/2018/1114 +f 1856/2018/1115 1849/2017/1115 1850/2019/1115 1857/2020/1115 +f 1857/2020/1116 1850/2019/1116 1845/417/1116 1852/416/1116 +f 1788/2021/1117 1781/2000/1117 1783/2001/1117 1790/2022/1117 +f 1790/2022/1118 1783/2001/1118 1784/2002/1118 1791/2023/1118 +f 1791/2023/1119 1784/2002/1119 1785/2024/1119 1792/2025/1119 +f 1792/2026/1120 1785/2027/1120 1786/2028/1120 1793/2029/1120 +f 1793/2029/1121 1786/2028/1121 1787/2030/1121 1794/2031/1121 +f 1794/2031/1122 1787/2030/1122 1782/418/1122 1789/420/1122 +f 1844/403/1123 1837/402/1123 1839/2032/1123 1846/2011/1123 +f 1846/2011/1124 1839/2032/1124 1840/2033/1124 1847/2012/1124 +f 1847/2012/1125 1840/2033/1125 1841/2034/1125 1848/2035/1125 +f 1848/2036/1126 1841/2037/1126 1842/2038/1126 1849/2039/1126 +f 1849/2039/1127 1842/2038/1127 1843/2040/1127 1850/2041/1127 +f 1850/2041/1128 1843/2040/1128 1838/419/1128 1845/417/1128 +f 1795/2042/1129 1788/2021/1129 1790/2022/1129 1797/2043/1129 +f 1797/2043/1130 1790/2022/1130 1791/2023/1130 1798/2044/1130 +f 1798/2044/1131 1791/2023/1131 1792/2045/1131 1799/2046/1131 +f 1799/2047/1132 1792/2048/1132 1793/2049/1132 1800/2050/1132 +f 1800/2050/1133 1793/2049/1133 1794/2051/1133 1801/2052/1133 +f 1801/2052/1134 1794/2051/1134 1789/421/1134 1796/424/1134 +f 1837/402/1135 1830/401/1135 1832/2053/1135 1839/2032/1135 +f 1839/2032/1136 1832/2053/1136 1833/2054/1136 1840/2033/1136 +f 1840/2033/1137 1833/2054/1137 1834/2055/1137 1841/2056/1137 +f 1841/2057/1138 1834/2058/1138 1835/2059/1138 1842/2060/1138 +f 1842/2060/1139 1835/2059/1139 1836/2061/1139 1843/2062/1139 +f 1843/2062/1140 1836/2061/1140 1831/423/1140 1838/422/1140 +f 1802/2063/1141 1795/2042/1141 1797/2043/1141 1804/2064/1141 +f 1804/2064/1142 1797/2043/1142 1798/2044/1142 1805/2065/1142 +f 1805/2065/1143 1798/2044/1143 1799/2066/1143 1806/2067/1143 +f 1806/2068/1144 1799/2069/1144 1800/2070/1144 1807/2071/1144 +f 1807/2071/1145 1800/2070/1145 1801/2072/1145 1808/2073/1145 +f 1808/2073/1146 1801/2072/1146 1796/424/1146 1803/333/1146 +f 1830/401/1147 1823/400/1147 1825/2074/1147 1832/2053/1147 +f 1832/2053/1148 1825/2074/1148 1826/2075/1148 1833/2054/1148 +f 1833/2054/1149 1826/2075/1149 1827/2076/1149 1834/2077/1149 +f 1834/2078/1150 1827/2079/1150 1828/2080/1150 1835/2081/1150 +f 1835/2081/1151 1828/2080/1151 1829/2082/1151 1836/2083/1151 +f 1836/2083/1152 1829/2082/1152 1824/334/1152 1831/423/1152 +f 1760/2084/1153 1802/2063/1153 1804/2064/1153 1762/2085/1153 +f 1762/2085/1154 1804/2064/1154 1805/2065/1154 1763/2086/1154 +f 1763/2086/1155 1805/2065/1155 1806/2087/1155 1764/2088/1155 +f 1764/2089/1156 1806/2090/1156 1807/2091/1156 1765/2092/1156 +f 1765/2092/1157 1807/2091/1157 1808/2093/1157 1766/2094/1157 +f 1766/2094/1158 1808/2093/1158 1803/333/1158 1761/336/1158 +f 1823/400/1159 1809/399/1159 1811/2095/1159 1825/2074/1159 +f 1825/2074/1160 1811/2095/1160 1812/2096/1160 1826/2075/1160 +f 1826/2075/1161 1812/2096/1161 1813/2097/1161 1827/2098/1161 +f 1827/2099/1162 1813/2100/1162 1814/2101/1162 1828/2102/1162 +f 1828/2102/1163 1814/2101/1163 1815/2103/1163 1829/2104/1163 +f 1829/2104/1164 1815/2103/1164 1810/335/1164 1824/334/1164 +f 1537/332/1165 1866/371/1165 1871/2105/1165 1542/2106/1165 +f 1542/2106/1166 1871/2105/1166 1870/2107/1166 1541/2108/1166 +f 1541/2108/1167 1870/2107/1167 1869/2109/1167 1540/2110/1167 +f 1540/2111/1168 1869/2112/1168 1868/1501/1168 1539/1782/1168 +f 1539/1782/1169 1868/1501/1169 1867/1499/1169 1538/1781/1169 +f 1538/1781/1170 1867/1499/1170 1865/1498/1170 1536/1780/1170 +f 1873/344/1171 1754/325/1171 1759/2113/1171 1878/2114/1171 +f 1878/2114/1172 1759/2113/1172 1758/2115/1172 1877/2116/1172 +f 1877/2116/1173 1758/2115/1173 1757/2117/1173 1876/2118/1173 +f 1876/2119/1174 1757/2120/1174 1756/1957/1174 1875/1630/1174 +f 1875/1630/1175 1756/1957/1175 1755/1955/1175 1874/1629/1175 +f 1874/1629/1176 1755/1955/1176 1753/1954/1176 1872/1628/1176 +f 1761/336/1177 1586/367/1177 1591/2121/1177 1766/2122/1177 +f 1766/2122/1178 1591/2121/1178 1590/2123/1178 1765/2124/1178 +f 1765/2124/1179 1590/2123/1179 1589/2125/1179 1764/2126/1179 +f 1764/2127/1180 1589/2128/1180 1588/1805/1180 1763/2086/1180 +f 1763/2086/1181 1588/1805/1181 1587/1803/1181 1762/2085/1181 +f 1762/2085/1182 1587/1803/1182 1585/1802/1182 1760/2084/1182 +f 1593/324/1183 1530/357/1183 1535/2129/1183 1598/2130/1183 +f 1598/2130/1184 1535/2129/1184 1534/2131/1184 1597/2132/1184 +f 1597/2132/1185 1534/2131/1185 1533/2133/1185 1596/2134/1185 +f 1596/2135/1186 1533/2136/1186 1532/1653/1186 1595/1934/1186 +f 1595/1934/1187 1532/1653/1187 1531/1651/1187 1594/1933/1187 +f 1594/1933/1188 1531/1651/1188 1529/1650/1188 1592/1932/1188 +f 1697/383/1189 1928/414/1189 1930/1512/1189 1699/1791/1189 +f 1699/1791/1190 1930/1512/1190 1931/1514/1190 1700/1792/1190 +f 1700/1792/1191 1931/1514/1191 1932/2137/1191 1701/2138/1191 +f 1701/2139/1192 1932/2140/1192 1933/2141/1192 1702/2142/1192 +f 1702/2142/1193 1933/2141/1193 1934/2143/1193 1703/2144/1193 +f 1703/2144/1194 1934/2143/1194 1929/372/1194 1698/331/1194 +f 1641/391/1195 1704/390/1195 1706/1664/1195 1643/1943/1195 +f 1643/1943/1196 1706/1664/1196 1707/1666/1196 1644/1944/1196 +f 1644/1944/1197 1707/1666/1197 1708/2145/1197 1645/2146/1197 +f 1645/2147/1198 1708/2148/1198 1709/2149/1198 1646/2150/1198 +f 1646/2150/1199 1709/2149/1199 1710/2151/1199 1647/2152/1199 +f 1647/2152/1200 1710/2151/1200 1705/358/1200 1642/323/1200 +f 1809/399/1201 1648/398/1201 1650/1816/1201 1811/2095/1201 +f 1811/2095/1202 1650/1816/1202 1651/1818/1202 1812/2096/1202 +f 1812/2096/1203 1651/1818/1203 1652/2153/1203 1813/2154/1203 +f 1813/2155/1204 1652/2156/1204 1653/2157/1204 1814/2158/1204 +f 1814/2158/1205 1653/2157/1205 1654/2159/1205 1815/2160/1205 +f 1815/2160/1206 1654/2159/1206 1649/368/1206 1810/335/1206 +f 1817/326/1207 1922/343/1207 1927/2161/1207 1822/2162/1207 +f 1822/2162/1208 1927/2161/1208 1926/2163/1208 1821/2164/1208 +f 1821/2164/1209 1926/2163/1209 1925/2165/1209 1820/2166/1209 +f 1820/2167/1210 1925/2168/1210 1924/1640/1210 1819/1970/1210 +f 1819/1970/1211 1924/1640/1211 1923/1639/1211 1818/1968/1211 +f 1818/1968/1212 1923/1639/1212 1921/407/1212 1816/406/1212 +f 1865/1498/57 1879/1497/57 1886/1523/57 1893/1544/57 1900/1565/57 1907/1586/57 1914/1607/57 1872/1628/57 1753/1954/57 1767/1953/57 1774/1979/57 1781/2000/57 1788/2021/57 1795/2042/57 1802/2063/57 1760/2084/57 1585/1802/57 1599/1801/57 1606/1827/57 1613/1848/57 1620/1869/57 1627/1890/57 1634/1911/57 1592/1932/57 1529/1650/57 1543/1649/57 1550/1675/57 1557/1696/57 1564/1717/57 1571/1738/57 1578/1759/57 1536/1780/57 +f 683/639/57 671/638/57 899/867/57 +f 899/867/57 887/866/57 875/843/57 +f 683/639/57 899/867/57 863/831/57 +f 707/663/57 695/651/57 683/639/57 +f 731/691/57 719/679/57 755/715/57 +f 755/715/57 743/703/57 731/691/57 +f 779/743/57 767/729/57 755/715/57 +f 803/767/57 791/755/57 755/715/57 +f 827/795/57 815/779/57 851/819/57 +f 851/819/57 839/807/57 827/795/57 +f 875/843/57 863/831/57 899/867/57 +f 1355/1365/57 1469/1378/57 1403/1353/57 +f 851/819/57 815/779/57 803/767/57 +f 791/755/57 779/743/57 755/715/57 +f 755/715/57 719/679/57 707/663/57 +f 707/663/57 683/639/57 863/831/57 +f 887/866/57 1355/1365/57 875/843/57 +f 803/767/57 755/715/57 707/663/57 +f 887/866/57 1469/1378/57 1355/1365/57 +f 1403/1353/57 1469/1378/57 1481/1377/57 +f 803/767/57 707/663/57 851/819/57 +f 707/663/57 863/831/57 851/819/57 +f 1397/1341/57 1403/1353/57 1487/1401/57 +f 1391/1329/57 1397/1341/57 1493/1413/57 +f 1481/1377/57 1487/1401/57 1403/1353/57 +f 1487/1401/57 1493/1413/57 1397/1341/57 +f 1385/1317/57 1391/1329/57 1499/1425/57 +f 1379/1305/57 1385/1317/57 1505/1437/57 +f 1493/1413/57 1499/1425/57 1391/1329/57 +f 1499/1425/57 1505/1437/57 1385/1317/57 +f 1373/1293/57 1379/1305/57 1511/1449/57 +f 1379/1305/57 1505/1437/57 1511/1449/57 +f 1373/1293/57 1511/1449/57 1517/1461/57 +f 1367/1281/57 1373/1293/57 1517/1461/57 +f 1367/1281/57 1517/1461/57 1523/1473/57 +f 1361/1257/57 1367/1281/57 1523/1473/57 +f 1475/1485/57 1097/1162/57 1199/1149/57 +f 1361/1257/57 1523/1473/57 1349/1258/57 +f 1235/1137/57 1199/1149/57 1109/1161/57 +f 1349/1258/57 1523/1473/57 1475/1485/57 +f 1097/1162/57 1109/1161/57 1199/1149/57 +f 1115/1185/57 1121/1197/57 1229/1125/57 +f 1127/1209/57 1133/1221/57 1217/1101/57 +f 1139/1233/57 1103/1245/57 1205/1066/57 +f 1049/517/57 1061/967/57 1055/1054/57 +f 1067/990/57 1073/1002/57 1079/1014/57 +f 1079/1014/57 1085/1026/57 1091/1042/57 +f 1091/1042/57 1055/1054/57 1061/967/57 +f 953/869/57 965/868/57 995/944/57 +f 971/892/57 977/904/57 983/916/57 +f 983/916/57 989/932/57 995/944/57 +f 995/944/57 959/518/57 953/869/57 +f 1193/519/57 1205/1066/57 1103/1245/57 +f 1211/1089/57 1217/1101/57 1133/1221/57 +f 1223/1113/57 1229/1125/57 1121/1197/57 +f 1199/1149/57 1349/1258/57 1475/1485/57 +f 1109/1161/57 1115/1185/57 1235/1137/57 +f 1133/1221/57 1139/1233/57 1211/1089/57 +f 1061/967/57 1067/990/57 1079/1014/57 +f 1079/1014/57 1091/1042/57 1061/967/57 +f 965/868/57 971/892/57 983/916/57 +f 983/916/57 995/944/57 965/868/57 +f 1205/1066/57 1211/1089/57 1139/1233/57 +f 1229/1125/57 1235/1137/57 1115/1185/57 +f 1121/1197/57 1127/1209/57 1223/1113/57 +f 1049/517/57 1055/1054/57 953/869/57 +f 953/869/57 959/518/57 1049/517/57 +f 1217/1101/57 1223/1113/57 1127/1209/57 +f 1103/1245/57 1049/517/57 1193/519/57 +f 665/627/25 677/626/25 893/854/25 +f 689/645/25 701/657/25 713/671/25 +f 713/671/25 725/685/25 737/697/25 +f 737/697/25 749/709/25 785/749/25 +f 761/722/25 773/736/25 785/749/25 +f 785/749/25 797/761/25 809/773/25 +f 809/773/25 821/787/25 785/749/25 +f 833/801/25 845/813/25 857/825/25 +f 857/825/25 869/837/25 893/854/25 +f 833/801/25 857/825/25 893/854/25 +f 785/749/25 821/787/25 833/801/25 +f 749/709/25 761/722/25 785/749/25 +f 689/645/25 713/671/25 785/749/25 +f 893/854/25 677/626/25 689/645/25 +f 1295/1389/25 869/837/25 1409/1371/25 +f 881/855/25 869/837/25 1295/1389/25 +f 713/671/25 737/697/25 785/749/25 +f 785/749/25 833/801/25 893/854/25 +f 869/837/25 881/855/25 893/854/25 +f 893/854/25 689/645/25 785/749/25 +f 1343/1390/25 1295/1389/25 1409/1371/25 +f 1409/1371/25 1421/1359/25 1343/1390/25 +f 1421/1359/25 1427/1347/25 1337/1407/25 +f 1337/1407/25 1343/1390/25 1421/1359/25 +f 1331/1419/25 1337/1407/25 1427/1347/25 +f 1427/1347/25 1433/1335/25 1331/1419/25 +f 1433/1335/25 1439/1323/25 1325/1431/25 +f 1325/1431/25 1331/1419/25 1433/1335/25 +f 1319/1443/25 1325/1431/25 1439/1323/25 +f 1439/1323/25 1445/1311/25 1319/1443/25 +f 1445/1311/25 1451/1299/25 1313/1455/25 +f 1313/1455/25 1319/1443/25 1445/1311/25 +f 1307/1467/25 1313/1455/25 1451/1299/25 +f 1307/1467/25 1451/1299/25 1457/1287/25 +f 1301/1479/25 1307/1467/25 1457/1287/25 +f 1301/1479/25 1457/1287/25 1463/1270/25 +f 1187/1174/25 1151/1173/25 1253/1143/25 +f 1289/1491/25 1301/1479/25 1463/1270/25 +f 1415/1269/25 1151/1173/25 1289/1491/25 +f 1289/1491/25 1463/1270/25 1415/1269/25 +f 1181/1191/25 1187/1174/25 1259/1131/25 +f 1169/1215/25 1175/1203/25 1271/1107/25 +f 1157/1239/25 1283/1078/25 1247/1077/25 +f 1007/978/25 1145/1251/25 905/961/25 +f 1037/996/25 1043/979/25 1025/1020/25 +f 1025/1020/25 1031/1008/25 1037/996/25 +f 1013/1048/25 1019/1034/25 1025/1020/25 +f 911/880/25 1001/1060/25 1007/978/25 +f 941/898/25 947/881/25 929/924/25 +f 929/924/25 935/910/25 941/898/25 +f 917/950/25 923/938/25 929/924/25 +f 1247/1077/25 905/961/25 1145/1251/25 +f 1277/1095/25 1283/1078/25 1163/1227/25 +f 1265/1119/25 1271/1107/25 1175/1203/25 +f 1253/1143/25 1259/1131/25 1187/1174/25 +f 1415/1269/25 1241/1155/25 1151/1173/25 +f 1175/1203/25 1181/1191/25 1265/1119/25 +f 1145/1251/25 1157/1239/25 1247/1077/25 +f 1025/1020/25 1043/979/25 1013/1048/25 +f 1001/1060/25 1043/979/25 1007/978/25 +f 929/924/25 947/881/25 917/950/25 +f 905/961/25 917/950/25 911/880/25 +f 1271/1107/25 1277/1095/25 1169/1215/25 +f 1241/1155/25 1253/1143/25 1151/1173/25 +f 1163/1227/25 1283/1078/25 1157/1239/25 +f 1013/1048/25 1043/979/25 1001/1060/25 +f 917/950/25 947/881/25 911/880/25 +f 1259/1131/25 1265/1119/25 1181/1191/25 +f 911/880/25 1007/978/25 905/961/25 +s 1 +f 356/2169/1213 323/2170/1214 322/2171/1215 355/2172/1216 +f 357/2173/1217 324/2174/1218 323/2170/1214 356/2169/1213 +f 358/2175/1219 325/2176/1220 324/2174/1218 357/2173/1217 +f 359/2177/1221 326/2178/1222 325/2176/1220 358/2175/1219 +f 360/2179/1223 327/2180/1224 326/2178/1222 359/2177/1221 +f 361/2181/1225 328/2182/1226 327/2180/1224 360/2179/1223 +f 362/2183/1227 329/2184/1228 328/2182/1226 361/2181/1225 +f 363/2185/1229 347/2186/1230 329/2184/1228 362/2183/1227 +f 364/2187/1231 330/2188/1232 347/2186/1230 363/2185/1229 +f 365/2189/1233 348/2190/1234 330/2188/1232 364/2187/1231 +f 366/2191/1235 331/2192/1236 348/2190/1234 365/2189/1233 +f 367/2193/1237 332/2194/1238 331/2192/1236 366/2191/1235 +f 368/2195/1239 349/2196/1240 332/2194/1238 367/2193/1237 +f 369/2197/1241 333/2198/1242 349/2196/1240 368/2195/1239 +f 370/2199/1243 334/2200/1244 333/2198/1242 369/2197/1241 +f 371/2201/1245 335/2202/1246 334/2200/1244 370/2199/1243 +f 372/2203/1247 336/2204/1248 335/2205/1246 371/2206/1245 +f 373/2207/1249 337/2208/1250 336/2204/1248 372/2203/1247 +f 374/2209/1251 350/2210/1252 337/2208/1250 373/2207/1249 +f 376/2211/1253 338/2212/1254 350/2210/1252 374/2209/1251 +f 377/2213/1255 340/2214/1256 339/2215/1257 375/2216/1258 +f 375/2216/1258 339/2215/1257 338/2212/1254 376/2211/1253 +f 378/2217/1259 351/2218/1260 340/2214/1256 377/2213/1255 +f 379/2219/1261 341/2220/1262 351/2218/1260 378/2217/1259 +f 380/2221/1263 352/2222/1264 341/2220/1262 379/2219/1261 +f 382/2223/1265 342/2224/1266 352/2222/1264 380/2221/1263 +f 383/2225/1267 344/2226/1268 343/2227/1269 381/2228/1270 +f 381/2228/1270 343/2227/1269 342/2224/1266 382/2223/1265 +f 384/2229/1271 345/2230/1272 344/2226/1268 383/2225/1267 +f 354/2231/1273 346/2232/1274 345/2230/1272 384/2229/1271 +f 30/2233/1275 33/2234/1276 34/2235/1277 1/2236/1278 +f 2/2237/1279 1/2236/1278 34/2235/1277 35/2238/1280 +f 3/2239/1281 2/2237/1279 35/2238/1280 36/2240/1282 +f 4/2241/1283 3/2239/1281 36/2240/1282 37/2242/1284 +f 5/2243/1285 4/2241/1283 37/2242/1284 38/2244/1286 +f 6/2245/1287 5/2243/1285 38/2244/1286 39/2246/1288 +f 6/2245/1287 39/2246/1288 40/2247/1289 7/2248/1290 +f 8/2249/1291 7/2248/1290 40/2247/1289 41/2250/1292 +f 9/2251/1293 8/2249/1291 41/2250/1292 42/2252/1294 +f 10/2253/1295 9/2251/1293 42/2252/1294 43/2254/1296 +f 10/2253/1295 43/2254/1296 44/2255/1297 11/2256/1298 +f 11/2256/1298 44/2255/1297 45/2257/1299 31/2258/1300 +f 12/2259/1301 46/2260/1302 47/2261/1303 13/2262/1304 +f 31/2258/1300 45/2257/1299 46/2260/1302 12/2259/1301 +f 13/2262/1304 47/2261/1303 48/2263/1305 14/2264/1306 +f 15/2265/1307 14/2264/1306 48/2263/1305 49/2266/1308 +f 15/2265/1307 49/2266/1308 50/2267/1309 16/2268/1310 +f 17/2269/1311 16/2268/1310 50/2267/1309 51/2270/1312 +f 17/2271/1311 51/2272/1312 52/2273/1313 18/2274/1314 +f 19/2275/1315 18/2274/1314 52/2273/1313 53/2276/1316 +f 19/2275/1315 53/2276/1316 54/2277/1317 20/2278/1318 +f 20/2278/1318 54/2277/1317 55/2279/1319 22/2280/1320 +f 22/2280/1320 55/2279/1319 56/2281/1321 21/2282/1322 +f 21/2282/1322 56/2281/1321 57/2283/1323 23/2284/1324 +f 23/2284/1324 57/2283/1323 58/2285/1325 24/2286/1326 +f 24/2286/1326 58/2285/1325 59/2287/1327 32/2288/1328 +f 27/2289/1329 25/2290/1330 60/2291/1331 61/2292/1332 +f 25/2290/1330 32/2288/1328 59/2287/1327 60/2291/1331 +f 28/2293/1333 26/2294/1334 62/2295/1335 63/2296/1336 +f 27/2289/1329 61/2292/1332 62/2295/1335 26/2294/1334 +f 29/2297/1337 28/2293/1333 63/2296/1336 64/2298/1338 +f 29/2297/1337 64/2298/1338 33/2234/1276 30/2233/1275 +f 67/2299/1339 44/2255/1297 43/2254/1296 66/2300/1340 +f 70/2301/1341 66/2300/1340 65/2302/1342 71/2303/1343 +f 72/2304/1344 67/2299/1339 66/2300/1340 70/2301/1341 +f 74/2305/1345 68/2306/1346 67/2299/1339 72/2304/1344 +f 69/2307/1347 41/2250/1292 40/2247/1289 75/2308/1348 +f 71/2303/1343 65/2302/1342 69/2307/1347 76/2309/1349 +f 78/2310/1350 73/2311/1351 68/2306/1346 74/2305/1345 +f 80/2312/1352 76/2309/1349 69/2307/1347 75/2308/1348 +f 82/2313/1353 77/2314/1354 73/2311/1351 78/2310/1350 +f 84/2315/1355 80/2312/1352 75/2308/1348 79/2316/1356 +f 388/2317/1228 392/2318/1227 393/2319/1229 385/2320/1230 +f 387/2321/1234 395/2322/1233 396/2323/1235 389/2324/1236 +f 86/2325/1357 81/2326/1358 77/2314/1354 82/2313/1353 +f 391/2327/1226 398/2328/1225 392/2318/1227 388/2317/1228 +f 88/2329/1359 84/2315/1355 79/2316/1356 83/2330/1360 +f 389/2324/1236 396/2323/1235 400/2331/1237 399/2332/1238 +f 90/2333/1361 85/2334/1362 81/2326/1358 86/2325/1357 +f 390/2335/1224 403/2336/1223 398/2328/1225 391/2327/1226 +f 92/2337/1363 88/2329/1359 83/2330/1360 87/2338/1364 +f 397/2339/1222 402/2340/1221 403/2336/1223 390/2335/1224 +f 94/2341/1365 89/2342/1366 85/2334/1362 90/2333/1361 +f 406/2343/1218 411/2344/1217 407/2345/1219 401/2346/1220 +f 96/2347/1367 92/2337/1363 87/2338/1364 91/2348/1368 +f 399/2332/1238 400/2331/1237 405/2349/1239 404/2350/1240 +f 98/2351/1369 93/2352/1370 89/2342/1366 94/2341/1365 +f 410/2353/1214 415/2354/1213 411/2344/1217 406/2343/1218 +f 100/2355/1371 96/2347/1367 91/2348/1368 95/2356/1372 +f 404/2350/1240 405/2349/1239 409/2357/1241 408/2358/1242 +f 102/2359/1373 97/2360/1374 93/2361/1370 98/2362/1369 +f 355/2172/1216 322/2171/1215 321/2363/1375 353/2364/1376 +f 414/2365/1215 420/2366/1216 415/2354/1213 410/2353/1214 +f 36/2240/1282 91/2348/1368 87/2338/1364 37/2242/1284 +f 117/2367/1377 57/2283/1323 56/2281/1321 113/2368/1378 +f 104/2369/1379 100/2355/1371 95/2356/1372 99/2370/1380 +f 408/2358/1242 409/2357/1241 413/2371/1243 412/2372/1244 +f 106/2373/1381 101/2374/1382 97/2360/1374 102/2359/1373 +f 419/2375/1375 424/2376/1376 420/2366/1216 414/2365/1215 +f 108/2377/1383 104/2369/1379 99/2370/1380 103/2378/1384 +f 412/2372/1244 413/2371/1243 418/2379/1245 417/2380/1246 +f 110/2381/1385 105/2382/1386 101/2374/1382 106/2373/1381 +f 423/2383/1274 428/2384/1273 424/2376/1376 419/2375/1375 +f 112/2385/1387 108/2377/1383 103/2378/1384 107/2386/1388 +f 416/2387/1248 422/2388/1247 426/2389/1249 421/2390/1250 +f 110/2381/1385 114/2391/1389 109/2392/1390 105/2382/1386 +f 417/2380/1246 418/2379/1245 422/2393/1247 416/2394/1248 +f 116/2395/1391 112/2385/1387 107/2386/1388 111/2396/1392 +f 421/2390/1250 426/2389/1249 430/2397/1251 425/2398/1252 +f 385/2320/1230 393/2319/1229 394/2399/1231 386/2400/1232 +f 118/2401/1393 113/2368/1378 109/2392/1390 114/2391/1389 +f 427/2402/1272 432/2403/1271 428/2384/1273 423/2383/1274 +f 61/2292/1332 119/2404/1394 115/2405/1395 62/2295/1335 +f 120/2406/1396 116/2395/1391 111/2396/1392 115/2405/1395 +f 425/2398/1252 430/2397/1251 434/2407/1253 429/2408/1254 +f 118/2401/1393 122/2409/1397 117/2367/1377 113/2368/1378 +f 431/2410/1268 436/2411/1267 432/2403/1271 427/2402/1272 +f 124/2412/1398 120/2406/1396 115/2405/1395 119/2404/1394 +f 429/2408/1254 434/2407/1253 439/2413/1258 433/2414/1257 +f 122/2409/1397 126/2415/1399 121/2416/1400 117/2367/1377 +f 435/2417/1269 441/2418/1270 436/2411/1267 431/2410/1268 +f 401/2346/1220 407/2345/1219 402/2340/1221 397/2339/1222 +f 127/2419/1401 124/2412/1398 119/2404/1394 123/2420/1402 +f 433/2414/1257 439/2413/1258 445/2421/1255 438/2422/1256 +f 126/2415/1399 128/2423/1403 125/2424/1404 121/2416/1400 +f 440/2425/1266 437/2426/1265 441/2418/1270 435/2417/1269 +f 128/2423/1403 127/2419/1401 123/2420/1402 125/2424/1404 +f 386/2400/1232 394/2399/1231 395/2322/1233 387/2321/1234 +f 446/2427/1264 443/2428/1263 437/2426/1265 440/2425/1266 +f 438/2422/1256 445/2421/1255 444/2429/1259 447/2430/1260 +f 448/2431/1262 442/2432/1261 443/2428/1263 446/2427/1264 +f 447/2430/1260 444/2429/1259 442/2432/1261 448/2431/1262 +f 129/2433/1405 130/2434/1205 131/2435/1406 132/2436/1407 +f 136/2437/1408 137/2438/1201 130/2434/1205 129/2433/1405 +f 132/2436/1407 131/2435/1406 138/2439/1170 133/2440/1409 +f 133/2440/1409 138/2439/1170 139/2441/1166 134/2442/1410 +f 134/2443/1410 139/2444/1166 140/2445/1411 135/2446/1412 +f 135/2446/1412 140/2445/1411 137/2438/1201 136/2437/1408 +f 141/2447/1413 142/2448/1166 143/2449/1170 144/2450/1414 +f 148/2451/1415 149/2452/1411 142/2448/1166 141/2447/1413 +f 144/2450/1414 143/2449/1170 150/2453/1406 145/2454/1416 +f 145/2454/1416 150/2453/1406 151/2455/1205 146/2456/1417 +f 146/2457/1417 151/2458/1205 152/2459/1201 147/2460/1418 +f 147/2460/1418 152/2459/1201 149/2452/1411 148/2451/1415 +f 153/2461/1419 154/2462/1202 155/2463/1206 156/2464/1420 +f 160/2465/1421 161/2466/1422 154/2462/1202 153/2461/1419 +f 156/2464/1420 155/2463/1206 162/2467/1423 157/2468/1424 +f 157/2468/1424 162/2467/1423 163/2469/1169 158/2470/1425 +f 158/2471/1425 163/2472/1169 164/2473/1165 159/2474/1426 +f 159/2474/1426 164/2473/1165 161/2466/1422 160/2465/1421 +f 165/2475/1427 166/2476/1169 167/2477/1423 168/2478/1428 +f 172/2479/1429 173/2480/1165 166/2476/1169 165/2475/1427 +f 168/2478/1428 167/2477/1423 174/2481/1206 169/2482/1430 +f 169/2482/1430 174/2481/1206 175/2483/1202 170/2484/1431 +f 170/2485/1431 175/2486/1202 176/2487/1422 171/2488/1432 +f 171/2488/1432 176/2487/1422 173/2480/1165 172/2479/1429 +f 177/2489/1433 178/2490/1190 179/2491/1434 180/2492/1435 +f 184/2493/1436 185/2494/1194 178/2490/1190 177/2489/1433 +f 180/2492/1435 179/2491/1434 186/2495/1177 181/2496/1437 +f 181/2496/1437 186/2495/1177 187/2497/1181 182/2498/1438 +f 182/2499/1438 187/2500/1181 188/2501/1439 183/2502/1440 +f 183/2502/1440 188/2501/1439 185/2494/1194 184/2493/1436 +f 189/2503/1441 190/2504/1181 191/2505/1177 192/2506/1442 +f 196/2507/1443 197/2508/1439 190/2504/1181 189/2503/1441 +f 192/2506/1442 191/2505/1177 198/2509/1434 193/2510/1444 +f 193/2510/1444 198/2509/1434 199/2511/1190 194/2512/1445 +f 194/2513/1445 199/2514/1190 200/2515/1194 195/2516/1446 +f 195/2516/1446 200/2515/1194 197/2508/1439 196/2507/1443 +f 201/2517/1447 202/2518/1193 203/2519/1189 204/2520/1448 +f 208/2521/1449 209/2522/1450 202/2518/1193 201/2517/1447 +f 204/2520/1448 203/2519/1189 210/2523/1451 205/2524/1452 +f 205/2524/1452 210/2523/1451 211/2525/1178 206/2526/1453 +f 206/2527/1453 211/2528/1178 212/2529/1182 207/2530/1454 +f 207/2530/1454 212/2529/1182 209/2522/1450 208/2521/1449 +f 213/2531/1455 214/2532/1178 215/2533/1451 216/2534/1456 +f 220/2535/1457 221/2536/1182 214/2532/1178 213/2531/1455 +f 216/2534/1456 215/2533/1451 222/2537/1189 217/2538/1458 +f 217/2538/1458 222/2537/1189 223/2539/1193 218/2540/1459 +f 218/2541/1459 223/2542/1193 224/2543/1450 219/2544/1460 +f 219/2544/1460 224/2543/1450 221/2536/1182 220/2535/1457 +f 225/2545/1410 226/2546/1166 227/2547/1411 228/2548/1412 +f 232/2549/1409 233/2550/1170 226/2546/1166 225/2545/1410 +f 228/2548/1412 227/2547/1411 234/2551/1201 229/2552/1408 +f 229/2552/1408 234/2551/1201 235/2553/1205 230/2554/1405 +f 230/2555/1405 235/2556/1205 236/2557/1406 231/2558/1407 +f 231/2558/1407 236/2557/1406 233/2550/1170 232/2549/1409 +f 237/2559/1417 238/2560/1205 239/2561/1201 240/2562/1418 +f 244/2563/1416 245/2564/1406 238/2560/1205 237/2559/1417 +f 240/2562/1418 239/2561/1201 246/2565/1411 241/2566/1415 +f 241/2566/1415 246/2565/1411 247/2567/1166 242/2568/1413 +f 242/2569/1413 247/2570/1166 248/2571/1170 243/2572/1414 +f 243/2572/1414 248/2571/1170 245/2564/1406 244/2563/1416 +f 249/2573/1425 250/2574/1169 251/2575/1165 252/2576/1426 +f 256/2577/1424 257/2578/1423 250/2574/1169 249/2573/1425 +f 252/2576/1426 251/2575/1165 258/2579/1422 253/2580/1421 +f 253/2580/1421 258/2579/1422 259/2581/1202 254/2582/1419 +f 254/2583/1419 259/2584/1202 260/2585/1206 255/2586/1420 +f 255/2586/1420 260/2585/1206 257/2578/1423 256/2577/1424 +f 261/2587/1431 262/2588/1202 263/2589/1422 264/2590/1432 +f 268/2591/1430 269/2592/1206 262/2588/1202 261/2587/1431 +f 264/2590/1432 263/2589/1422 270/2593/1165 265/2594/1429 +f 265/2594/1429 270/2593/1165 271/2595/1169 266/2596/1427 +f 266/2597/1427 271/2598/1169 272/2599/1423 267/2600/1428 +f 267/2600/1428 272/2599/1423 269/2592/1206 268/2591/1430 +f 273/2601/1438 274/2602/1181 275/2603/1439 276/2604/1440 +f 280/2605/1437 281/2606/1177 274/2602/1181 273/2601/1438 +f 276/2604/1440 275/2603/1439 282/2607/1194 277/2608/1436 +f 277/2608/1436 282/2607/1194 283/2609/1190 278/2610/1433 +f 278/2611/1433 283/2612/1190 284/2613/1434 279/2614/1435 +f 279/2614/1435 284/2613/1434 281/2606/1177 280/2605/1437 +f 285/2615/1445 286/2616/1190 287/2617/1194 288/2618/1446 +f 292/2619/1444 293/2620/1434 286/2616/1190 285/2615/1445 +f 288/2618/1446 287/2617/1194 294/2621/1439 289/2622/1443 +f 289/2622/1443 294/2621/1439 295/2623/1181 290/2624/1441 +f 290/2625/1441 295/2626/1181 296/2627/1177 291/2628/1442 +f 291/2628/1442 296/2627/1177 293/2620/1434 292/2619/1444 +f 297/2629/1453 298/2630/1178 299/2631/1182 300/2632/1454 +f 304/2633/1452 305/2634/1451 298/2630/1178 297/2629/1453 +f 300/2632/1454 299/2631/1182 306/2635/1450 301/2636/1449 +f 301/2636/1449 306/2635/1450 307/2637/1193 302/2638/1447 +f 302/2639/1447 307/2640/1193 308/2641/1189 303/2642/1448 +f 303/2642/1448 308/2641/1189 305/2634/1451 304/2633/1452 +f 309/2643/1459 310/2644/1193 311/2645/1450 312/2646/1460 +f 316/2647/1458 317/2648/1189 310/2644/1193 309/2643/1459 +f 312/2646/1460 311/2645/1450 318/2649/1182 313/2650/1457 +f 313/2650/1457 318/2649/1182 319/2651/1178 314/2652/1455 +f 314/2653/1455 319/2654/1178 320/2655/1451 315/2656/1456 +f 315/2656/1456 320/2655/1451 317/2648/1189 316/2647/1458 +f 54/2277/1317 53/2276/1316 101/2374/1382 105/2382/1386 +f 64/2298/1338 107/2386/1388 103/2378/1384 33/2234/1276 +f 125/2424/1404 59/2287/1327 58/2285/1325 121/2416/1400 +f 65/2302/1342 42/2252/1294 41/2250/1292 69/2307/1347 +f 62/2295/1335 115/2405/1395 111/2396/1392 63/2296/1336 +f 89/2342/1366 93/2352/1370 51/2270/1312 50/2267/1309 +f 38/2244/1286 37/2242/1284 87/2338/1364 83/2330/1360 +f 121/2416/1400 58/2285/1325 57/2283/1323 117/2367/1377 +f 61/2292/1332 60/2291/1331 123/2420/1402 119/2404/1394 +f 64/2298/1338 63/2296/1336 111/2396/1392 107/2386/1388 +f 125/2424/1404 123/2420/1402 60/2291/1331 59/2287/1327 +f 39/2246/1288 79/2316/1356 75/2308/1348 40/2247/1289 +f 35/2238/1280 34/2235/1277 99/2370/1380 95/2356/1372 +f 55/2279/1319 109/2392/1390 113/2368/1378 56/2281/1321 +f 55/2279/1319 54/2277/1317 105/2382/1386 109/2392/1390 +f 49/2266/1308 48/2263/1305 81/2326/1358 85/2334/1362 +f 353/2364/1376 321/2363/1375 346/2232/1274 354/2231/1273 +f 36/2240/1282 35/2238/1280 95/2356/1372 91/2348/1368 +f 43/2254/1296 42/2252/1294 65/2302/1342 66/2300/1340 +f 45/2257/1299 68/2306/1346 73/2311/1351 46/2260/1302 +f 46/2260/1302 73/2311/1351 77/2314/1354 47/2261/1303 +f 44/2255/1297 67/2299/1339 68/2306/1346 45/2257/1299 +f 52/2273/1313 97/2360/1374 101/2374/1382 53/2276/1316 +f 34/2235/1277 33/2234/1276 103/2378/1384 99/2370/1380 +f 89/2342/1366 50/2267/1309 49/2266/1308 85/2334/1362 +f 449/2657/1461 450/2658/291 451/2659/1462 452/2660/1463 +f 456/2661/1464 457/2662/1465 450/2658/291 449/2657/1461 +f 452/2660/1463 451/2659/1462 458/2663/1466 453/2664/1467 +f 453/2664/1467 458/2663/1466 459/2665/266 454/2666/1468 +f 454/2667/1468 459/2668/266 460/2669/1469 455/2670/1470 +f 455/2670/1470 460/2669/1469 457/2662/1465 456/2661/1464 +f 461/2671/1471 462/2672/266 463/2673/1466 464/2674/1472 +f 468/2675/1473 469/2676/1469 462/2672/266 461/2671/1471 +f 464/2674/1472 463/2673/1466 470/2677/1462 465/2678/1474 +f 465/2678/1474 470/2677/1462 471/2679/291 466/2680/1475 +f 466/2681/1475 471/2682/291 472/2683/1465 467/2684/1476 +f 467/2684/1476 472/2683/1465 469/2676/1469 468/2675/1473 +f 473/2685/1477 474/2686/25 475/2687/1478 476/2688/1479 +f 480/2689/1480 481/2690/1481 474/2686/25 473/2685/1477 +f 476/2688/1479 475/2687/1478 482/2691/1482 477/2692/1483 +f 477/2692/1483 482/2691/1482 483/2693/57 478/2694/1484 +f 478/2695/1484 483/2696/57 484/2697/1485 479/2698/1486 +f 479/2698/1486 484/2697/1485 481/2690/1481 480/2689/1480 +f 485/2699/1487 486/2700/57 487/2701/1482 488/2702/1488 +f 492/2703/1489 493/2704/1485 486/2700/57 485/2699/1487 +f 488/2702/1488 487/2701/1482 494/2705/1478 489/2706/1490 +f 489/2706/1490 494/2705/1478 495/2707/25 490/2708/1491 +f 490/2709/1491 495/2710/25 496/2711/1481 491/2712/1492 +f 491/2712/1492 496/2711/1481 493/2704/1485 492/2703/1489 +f 497/2713/1493 498/2714/261 499/2715/1494 500/2716/1495 +f 504/2717/1496 505/2718/1497 498/2714/261 497/2713/1493 +f 500/2716/1495 499/2715/1494 506/2719/1498 501/2720/1499 +f 501/2720/1499 506/2719/1498 507/2721/296 502/2722/1500 +f 502/2723/1500 507/2724/296 508/2725/1501 503/2726/1502 +f 503/2726/1502 508/2725/1501 505/2718/1497 504/2717/1496 +f 509/2727/1503 510/2728/296 511/2729/1498 512/2730/1504 +f 516/2731/1505 517/2732/1501 510/2728/296 509/2727/1503 +f 512/2730/1504 511/2729/1498 518/2733/1494 513/2734/1506 +f 513/2734/1506 518/2733/1494 519/2735/261 514/2736/1507 +f 514/2737/1507 519/2738/261 520/2739/1497 515/2740/1508 +f 515/2740/1508 520/2739/1497 517/2732/1501 516/2731/1505 +f 521/2741/1509 522/2742/19 523/2743/1510 524/2744/1511 +f 528/2745/1512 529/2746/1513 522/2742/19 521/2741/1509 +f 524/2744/1511 523/2743/1510 530/2747/1514 525/2748/1515 +f 525/2748/1515 530/2747/1514 531/2749/20 526/2750/1516 +f 526/2751/1516 531/2752/20 532/2753/1517 527/2754/1518 +f 527/2754/1518 532/2753/1517 529/2746/1513 528/2745/1512 +f 533/2755/1519 534/2756/20 535/2757/1514 536/2758/1520 +f 540/2759/1521 541/2760/1517 534/2756/20 533/2755/1519 +f 536/2758/1520 535/2757/1514 542/2761/1510 537/2762/1522 +f 537/2762/1522 542/2761/1510 543/2763/19 538/2764/1523 +f 538/2765/1523 543/2766/19 544/2767/1513 539/2768/1524 +f 539/2768/1524 544/2767/1513 541/2760/1517 540/2759/1521 +f 545/2769/1468 546/2770/266 547/2771/1469 548/2772/1470 +f 552/2773/1467 553/2774/1466 546/2770/266 545/2769/1468 +f 548/2772/1470 547/2771/1469 554/2775/1465 549/2776/1464 +f 549/2776/1464 554/2775/1465 555/2777/291 550/2778/1461 +f 550/2779/1461 555/2780/291 556/2781/1462 551/2782/1463 +f 551/2782/1463 556/2781/1462 553/2774/1466 552/2773/1467 +f 557/2783/1475 558/2784/291 559/2785/1465 560/2786/1476 +f 564/2787/1474 565/2788/1462 558/2784/291 557/2783/1475 +f 560/2786/1476 559/2785/1465 566/2789/1469 561/2790/1473 +f 561/2790/1473 566/2789/1469 567/2791/266 562/2792/1471 +f 562/2793/1471 567/2794/266 568/2795/1466 563/2796/1472 +f 563/2796/1472 568/2795/1466 565/2788/1462 564/2787/1474 +f 569/2797/1484 570/2798/57 571/2799/1485 572/2800/1486 +f 576/2801/1483 577/2802/1482 570/2798/57 569/2797/1484 +f 572/2800/1486 571/2799/1485 578/2803/1481 573/2804/1480 +f 573/2804/1480 578/2803/1481 579/2805/25 574/2806/1477 +f 574/2807/1477 579/2808/25 580/2809/1478 575/2810/1479 +f 575/2810/1479 580/2809/1478 577/2802/1482 576/2801/1483 +f 581/2811/1491 582/2812/25 583/2813/1481 584/2814/1492 +f 588/2815/1490 589/2816/1478 582/2812/25 581/2811/1491 +f 584/2814/1492 583/2813/1481 590/2817/1485 585/2818/1489 +f 585/2818/1489 590/2817/1485 591/2819/57 586/2820/1487 +f 586/2821/1487 591/2822/57 592/2823/1482 587/2824/1488 +f 587/2824/1488 592/2823/1482 589/2816/1478 588/2815/1490 +f 593/2825/1500 594/2826/296 595/2827/1501 596/2828/1502 +f 600/2829/1499 601/2830/1498 594/2826/296 593/2825/1500 +f 596/2828/1502 595/2827/1501 602/2831/1497 597/2832/1496 +f 597/2832/1496 602/2831/1497 603/2833/261 598/2834/1493 +f 598/2835/1493 603/2836/261 604/2837/1494 599/2838/1495 +f 599/2838/1495 604/2837/1494 601/2830/1498 600/2829/1499 +f 605/2839/1507 606/2840/261 607/2841/1497 608/2842/1508 +f 612/2843/1506 613/2844/1494 606/2840/261 605/2839/1507 +f 608/2842/1508 607/2841/1497 614/2845/1501 609/2846/1505 +f 609/2846/1505 614/2845/1501 615/2847/296 610/2848/1503 +f 610/2849/1503 615/2850/296 616/2851/1498 611/2852/1504 +f 611/2852/1504 616/2851/1498 613/2844/1494 612/2843/1506 +f 617/2853/1516 618/2854/20 619/2855/1517 620/2856/1518 +f 624/2857/1515 625/2858/1514 618/2854/20 617/2853/1516 +f 620/2856/1518 619/2855/1517 626/2859/1513 621/2860/1512 +f 621/2860/1512 626/2859/1513 627/2861/19 622/2862/1509 +f 622/2863/1509 627/2864/19 628/2865/1510 623/2866/1511 +f 623/2866/1511 628/2865/1510 625/2858/1514 624/2857/1515 +f 629/2867/1523 630/2868/19 631/2869/1513 632/2870/1524 +f 636/2871/1522 637/2872/1510 630/2868/19 629/2867/1523 +f 632/2870/1524 631/2869/1513 638/2873/1517 633/2874/1521 +f 633/2874/1521 638/2873/1517 639/2875/20 634/2876/1519 +f 634/2877/1519 639/2878/20 640/2879/1514 635/2880/1520 +f 635/2880/1520 640/2879/1514 637/2872/1510 636/2871/1522 +f 38/2244/1286 83/2330/1360 79/2316/1356 39/2246/1288 +f 81/2326/1358 48/2263/1305 47/2261/1303 77/2314/1354 +f 51/2272/1312 93/2361/1370 97/2360/1374 52/2273/1313 diff --git a/mods/pipeworks/models/pipeworks_valve_on_lowpoly.obj b/mods/pipeworks/models/pipeworks_valve_on_lowpoly.obj new file mode 100755 index 0000000..c6eaf79 --- /dev/null +++ b/mods/pipeworks/models/pipeworks_valve_on_lowpoly.obj @@ -0,0 +1,286 @@ +# Blender v2.78 (sub 0) OBJ File: 'pipe-valve-on.blend' +# www.blender.org +o Cube.003_Cube.003_None +v -0.062500 0.343750 0.312500 +v -0.062500 0.343750 -0.093750 +v -0.062500 0.281250 -0.093750 +v -0.062500 0.281250 0.312500 +v 0.062500 0.343750 -0.093750 +v 0.062500 0.281250 -0.093750 +v 0.062500 0.343750 0.312500 +v 0.062500 0.281250 0.312500 +v 0.031250 0.281250 0.031250 +v -0.031250 0.281250 0.031250 +v -0.031250 0.250000 0.031250 +v 0.031250 0.250000 0.031250 +v -0.031250 0.281250 -0.031250 +v -0.031250 0.250000 -0.031250 +v 0.031250 0.281250 -0.031250 +v 0.031250 0.250000 -0.031250 +v 0.250000 0.250000 0.250000 +v -0.250000 0.250000 0.250000 +v -0.250000 -0.250000 0.250000 +v 0.250000 -0.250000 0.250000 +v -0.250000 0.250000 -0.250000 +v -0.250000 -0.250000 -0.250000 +v 0.250000 0.250000 -0.250000 +v 0.250000 -0.250000 -0.250000 +v -0.156250 -0.064721 0.500000 +v -0.156250 -0.064721 0.468750 +v -0.064721 -0.156250 0.500000 +v -0.064721 -0.156250 0.468750 +v 0.064721 -0.156250 0.500000 +v 0.064721 -0.156250 0.468750 +v 0.156250 -0.064721 0.500000 +v 0.156250 -0.064721 0.468750 +v 0.156250 0.064721 0.500000 +v 0.156250 0.064721 0.468750 +v 0.064721 0.156250 0.500000 +v 0.064721 0.156250 0.468750 +v -0.064721 0.156250 0.500000 +v -0.064721 0.156250 0.468750 +v -0.156250 0.064721 0.500000 +v -0.156250 0.064721 0.468750 +v -0.125000 -0.051777 0.468750 +v -0.125000 -0.051777 -0.468750 +v -0.051777 -0.125000 0.468750 +v -0.051777 -0.125000 -0.468750 +v 0.051777 -0.125000 0.468750 +v 0.051777 -0.125000 -0.468750 +v 0.125000 -0.051777 0.468750 +v 0.125000 -0.051777 -0.468750 +v 0.125000 0.051777 0.468750 +v 0.125000 0.051777 -0.468750 +v 0.051777 0.125000 0.468750 +v 0.051777 0.125000 -0.468750 +v -0.051777 0.125000 0.468750 +v -0.051777 0.125000 -0.468750 +v -0.125000 0.051777 0.468750 +v -0.125000 0.051777 -0.468750 +v -0.156250 -0.064721 -0.468750 +v -0.156250 -0.064721 -0.500000 +v -0.064721 -0.156250 -0.468750 +v -0.064721 -0.156250 -0.500000 +v 0.064721 -0.156250 -0.468750 +v 0.064721 -0.156250 -0.500000 +v 0.156250 -0.064721 -0.468750 +v 0.156250 -0.064721 -0.500000 +v 0.156250 0.064721 -0.468750 +v 0.156250 0.064721 -0.500000 +v 0.064721 0.156250 -0.468750 +v 0.064721 0.156250 -0.500000 +v -0.064721 0.156250 -0.468750 +v -0.064721 0.156250 -0.500000 +v -0.156250 0.064721 -0.468750 +v -0.156250 0.064721 -0.500000 +vt 0.2656 0.2344 +vt 0.4688 0.2344 +vt 0.4688 0.2656 +vt 0.2656 0.2656 +vt 0.2656 0.1875 +vt 0.3281 0.1875 +vt 0.3281 0.2188 +vt 0.2656 0.2188 +vt 0.4688 0.3125 +vt 0.2656 0.3125 +vt 0.2656 0.2812 +vt 0.4688 0.2812 +vt 0.4062 0.2188 +vt 0.3438 0.2188 +vt 0.3438 0.1875 +vt 0.4062 0.1875 +vt 0.4688 0.4688 +vt 0.2656 0.4688 +vt 0.2656 0.4062 +vt 0.4688 0.4062 +vt 0.4688 0.3906 +vt 0.2656 0.3906 +vt 0.2656 0.3281 +vt 0.4688 0.3281 +vt 0.0391 0.2031 +vt 0.0078 0.2031 +vt 0.0078 0.1875 +vt 0.0391 0.1875 +vt 0.0859 0.2031 +vt 0.0547 0.2031 +vt 0.0547 0.1875 +vt 0.0859 0.1875 +vt 0.1484 0.1875 +vt 0.1797 0.1875 +vt 0.1797 0.2031 +vt 0.1484 0.2031 +vt 0.1328 0.2031 +vt 0.1016 0.2031 +vt 0.1016 0.1875 +vt 0.1328 0.1875 +vt 0.5156 0.4844 +vt 0.5156 0.7344 +vt 0.2656 0.7344 +vt 0.2656 0.4844 +vt 0.0000 0.4688 +vt 0.0000 0.2188 +vt 0.2500 0.2188 +vt 0.2500 0.4688 +vt 0.5156 1.0000 +vt 0.2656 1.0000 +vt 0.2656 0.7500 +vt 0.5156 0.7500 +vt 0.2500 0.7344 +vt 0.0000 0.7344 +vt 0.0000 0.4844 +vt 0.2500 0.4844 +vt 0.7812 1.0000 +vt 0.5312 1.0000 +vt 0.5312 0.7500 +vt 0.7812 0.7500 +vt 0.0008 0.7500 +vt 0.2502 0.7500 +vt 0.2502 0.9994 +vt 0.0008 0.9994 +vt 0.8516 0.4453 +vt 0.8047 0.4922 +vt 0.7422 0.4922 +vt 0.6953 0.4453 +vt 0.6953 0.3828 +vt 0.7422 0.3359 +vt 0.8047 0.3359 +vt 0.8516 0.3828 +vt 0.6172 0.4922 +vt 0.6641 0.4453 +vt 0.6641 0.3828 +vt 0.6172 0.3359 +vt 0.5547 0.3359 +vt 0.5078 0.3828 +vt 0.5078 0.4453 +vt 0.5547 0.4922 +vt 0.6641 0.4453 +vt 0.6172 0.4922 +vt 0.5547 0.4922 +vt 0.5078 0.4453 +vt 0.5078 0.3828 +vt 0.5547 0.3359 +vt 0.6172 0.3359 +vt 0.6641 0.3828 +vt 0.8047 0.4922 +vt 0.8516 0.4453 +vt 0.8516 0.3828 +vt 0.8047 0.3359 +vt 0.7422 0.3359 +vt 0.6953 0.3828 +vt 0.6953 0.4453 +vt 0.7422 0.4922 +vt 0.8984 0.2969 +vt 0.8984 0.2812 +vt 0.9297 0.2812 +vt 0.9297 0.2969 +vt 0.9609 0.2812 +vt 0.9609 0.2969 +vt 0.9922 0.2812 +vt 0.9922 0.2969 +vt 0.7422 0.2969 +vt 0.7422 0.2812 +vt 0.7734 0.2812 +vt 0.7734 0.2969 +vt 0.8047 0.2812 +vt 0.8047 0.2969 +vt 0.8359 0.2812 +vt 0.8359 0.2969 +vt 0.8672 0.2812 +vt 0.8672 0.2969 +vt 0.6797 0.2969 +vt 0.6797 0.2812 +vt 0.7109 0.2812 +vt 0.7109 0.2969 +vt 0.6484 0.2969 +vt 0.6484 0.2812 +vt 0.7422 0.2812 +vt 0.7422 0.2969 +vt 0.4922 0.2969 +vt 0.4922 0.2812 +vt 0.5234 0.2812 +vt 0.5234 0.2969 +vt 0.5547 0.2812 +vt 0.5547 0.2969 +vt 0.5859 0.2812 +vt 0.5859 0.2969 +vt 0.6172 0.2812 +vt 0.6172 0.2969 +vt 0.4922 0.1328 +vt 0.4922 0.1016 +vt 0.9922 0.1016 +vt 0.9922 0.1328 +vt 0.4922 0.1953 +vt 0.4922 0.1641 +vt 0.9922 0.1641 +vt 0.9922 0.1953 +vt 0.4922 0.2266 +vt 0.9922 0.2266 +vt 0.9922 0.2578 +vt 0.4922 0.2578 +vt 0.9922 0.0391 +vt 0.9922 0.0703 +vt 0.4922 0.0703 +vt 0.4922 0.0391 +vt 0.9922 0.0078 +vt 0.4922 0.0078 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.0000 -1.0000 +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 -0.9239 -0.3827 -0.0000 +vn -0.3827 -0.9239 0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.9239 -0.3827 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.9239 0.3827 -0.0000 +g Cube.003_Cube.003_None_Cube.003_Cube.003_None_None +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/5/2 5/6/2 6/7/2 3/8/2 +f 5/9/3 7/10/3 8/11/3 6/12/3 +f 7/13/4 1/14/4 4/15/4 8/16/4 +f 4/17/5 3/18/5 6/19/5 8/20/5 +f 7/21/6 5/22/6 2/23/6 1/24/6 +f 9/25/4 10/26/4 11/27/4 12/28/4 +f 10/29/1 13/30/1 14/31/1 11/32/1 +f 13/33/2 15/34/2 16/35/2 14/36/2 +f 15/37/3 9/38/3 12/39/3 16/40/3 +f 17/41/4 18/42/4 19/43/4 20/44/4 +f 18/45/1 21/46/1 22/47/1 19/48/1 +f 21/49/2 23/50/2 24/51/2 22/52/2 +f 23/53/3 17/54/3 20/55/3 24/56/3 +f 20/57/5 19/58/5 22/59/5 24/60/5 +f 23/61/6 21/62/6 18/63/6 17/64/6 +f 28/65/2 26/66/2 40/67/2 38/68/2 36/69/2 34/70/2 32/71/2 30/72/2 +f 25/73/4 27/74/4 29/75/4 31/76/4 33/77/4 35/78/4 37/79/4 39/80/4 +f 60/81/2 58/82/2 72/83/2 70/84/2 68/85/2 66/86/2 64/87/2 62/88/2 +f 57/89/4 59/90/4 61/91/4 63/92/4 65/93/4 67/94/4 69/95/4 71/96/4 +s 1 +f 25/97/7 26/98/7 28/99/8 27/100/8 +f 27/100/8 28/99/8 30/101/9 29/102/9 +f 29/102/9 30/101/9 32/103/10 31/104/10 +f 31/105/10 32/106/10 34/107/11 33/108/11 +f 33/108/11 34/107/11 36/109/12 35/110/12 +f 35/110/12 36/109/12 38/111/13 37/112/13 +f 37/112/13 38/111/13 40/113/14 39/114/14 +f 39/114/14 40/113/14 26/98/7 25/97/7 +f 59/115/8 60/116/8 62/117/9 61/118/9 +f 57/119/7 58/120/7 60/116/8 59/115/8 +f 61/118/9 62/117/9 64/121/10 63/122/10 +f 63/123/10 64/124/10 66/125/11 65/126/11 +f 65/126/11 66/125/11 68/127/12 67/128/12 +f 67/128/12 68/127/12 70/129/13 69/130/13 +f 69/130/13 70/129/13 72/131/14 71/132/14 +f 71/132/14 72/131/14 58/120/7 57/119/7 +f 54/133/13 56/134/14 55/135/14 53/136/13 +f 50/137/11 52/138/12 51/139/12 49/140/11 +f 48/141/10 47/142/10 45/143/9 46/144/9 +f 54/133/13 53/136/13 51/139/12 52/138/12 +f 43/145/8 41/146/7 42/147/7 44/148/8 +f 45/149/9 43/145/8 44/148/8 46/150/9 +f 48/141/10 50/137/11 49/140/11 47/142/10 +f 41/146/7 55/135/14 56/134/14 42/147/7 diff --git a/mods/pipeworks/pipes.lua b/mods/pipeworks/pipes.lua new file mode 100755 index 0000000..82fadb1 --- /dev/null +++ b/mods/pipeworks/pipes.lua @@ -0,0 +1,251 @@ +-- This file supplies the steel pipes + +local REGISTER_COMPATIBILITY = true + +local pipes_empty_nodenames = {} +local pipes_full_nodenames = {} + +local new_flow_logic_register = pipeworks.flowables.register + +local polys = "" +if pipeworks.enable_lowpoly then polys = "_lowpoly" end + +local vti = {4, 3, 2, 1, 6, 5} +local cconnects = {{}, {1}, {1, 2}, {1, 3}, {1, 3, 5}, {1, 2, 3}, {1, 2, 3, 5}, {1, 2, 3, 4}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5, 6}} +for index, connects in ipairs(cconnects) do + local outsel = {} + + local jx = 0 + local jy = 0 + local jz = 0 + for _, v in ipairs(connects) do + if v == 1 or v == 2 then + jx = jx + 1 + elseif v == 3 or v == 4 then + jy = jy + 1 + else + jz = jz + 1 + end + table.insert(outsel, pipeworks.pipe_selectboxes[v]) + end + + if #connects == 1 then + local v = connects[1] + v = v-1 + 2*(v%2) -- Opposite side + end + + local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1} + local pipedesc = "Pipe segement".." "..dump(connects).."... You hacker, you." + + if #connects == 0 then + pgroups = {snappy = 3, tube = 1} + pipedesc = "Pipe segment" + end + + local outimg_e = { "pipeworks_pipe_plain.png" } + local outimg_l = { "pipeworks_pipe_plain.png" } + + if index == 3 then + outimg_e = { "pipeworks_pipe_3_empty.png" } + outimg_l = { "pipeworks_pipe_3_loaded.png" } + end + + local mesh = "pipeworks_pipe_"..index..polys..".obj" + + if index == 1 then + mesh = "pipeworks_pipe_3"..polys..".obj" + end + + minetest.register_node("pipeworks:pipe_"..index.."_empty", { + description = pipedesc, + drawtype = "mesh", + mesh = mesh, + tiles = outimg_e, + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = outsel + }, + collision_box = { + type = "fixed", + fixed = outsel + }, + groups = pgroups, + sounds = default.node_sound_wood_defaults(), + walkable = true, + drop = "pipeworks:pipe_1_empty", + after_place_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_rotate = false + }) + + local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1} + + minetest.register_node("pipeworks:pipe_"..index.."_loaded", { + description = pipedesc, + drawtype = "mesh", + mesh = mesh, + tiles = outimg_l, + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = outsel + }, + collision_box = { + type = "fixed", + fixed = outsel + }, + groups = pgroups, + sounds = default.node_sound_wood_defaults(), + walkable = true, + drop = "pipeworks:pipe_1_empty", + after_place_node = function(pos) + minetest.set_node(pos, { name = "pipeworks:pipe_"..index.."_empty" }) + pipeworks.scan_for_pipe_objects(pos) + end, + after_dig_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_rotate = false + }) + + local emptypipe = "pipeworks:pipe_"..index.."_empty" + local fullpipe = "pipeworks:pipe_"..index.."_loaded" + table.insert(pipes_empty_nodenames, emptypipe) + table.insert(pipes_full_nodenames, fullpipe) + new_flow_logic_register.simple(emptypipe) + new_flow_logic_register.simple(fullpipe) +end + + + +if REGISTER_COMPATIBILITY then + local cempty = "pipeworks:pipe_compatibility_empty" + local cloaded = "pipeworks:pipe_compatibility_loaded" + minetest.register_node(cempty, { + drawtype = "airlike", + sunlight_propagates = true, + paramtype = "light", + description = "Pipe Segment (legacy)", + groups = {not_in_creative_inventory = 1, pipe_to_update = 1}, + drop = "pipeworks:pipe_1_empty", + after_place_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_rotate = false + + }) + minetest.register_node(cloaded, { + drawtype = "airlike", + sunlight_propagates = true, + paramtype = "light", + groups = {not_in_creative_inventory = 1, pipe_to_update = 1}, + drop = "pipeworks:pipe_1_empty", + after_place_node = function(pos) + pipeworks.scan_for_pipe_objects(pos) + end, + on_rotate = false + + }) + for xm = 0, 1 do + for xp = 0, 1 do + for ym = 0, 1 do + for yp = 0, 1 do + for zm = 0, 1 do + for zp = 0, 1 do + local pname = xm..xp..ym..yp..zm..zp + minetest.register_alias("pipeworks:pipe_"..pname.."_empty", cempty) + minetest.register_alias("pipeworks:pipe_"..pname.."_loaded", cloaded) + end + end + end + end + end + end + minetest.register_abm({ + nodenames = {"group:pipe_to_update"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local minp = {x = pos.x-1, y = pos.y-1, z = pos.z-1} + local maxp = {x = pos.x+1, y = pos.y+1, z = pos.z+1} + if table.getn(minetest.find_nodes_in_area(minp, maxp, "ignore")) == 0 then + pipeworks.scan_for_pipe_objects(pos) + end + end + }) +end + +local valve_on = "pipeworks:valve_on_empty" +local valve_off = "pipeworks:valve_off_empty" +local entry_panel_empty = "pipeworks:entry_panel_empty" +local flow_sensor_empty = "pipeworks:flow_sensor_empty" +local sp_empty = "pipeworks:straight_pipe_empty" +-- XXX: why aren't these in devices.lua!? +table.insert(pipes_empty_nodenames, valve_on) +table.insert(pipes_empty_nodenames, valve_off) +table.insert(pipes_empty_nodenames, entry_panel_empty) +table.insert(pipes_empty_nodenames, flow_sensor_empty) +table.insert(pipes_empty_nodenames, sp_empty) + +local valve_on_loaded = "pipeworks:valve_on_loaded" +local entry_panel_loaded = "pipeworks:entry_panel_loaded" +local flow_sensor_loaded = "pipeworks:flow_sensor_loaded" +local sp_loaded = "pipeworks:straight_pipe_loaded" +table.insert(pipes_full_nodenames, valve_on_loaded) +table.insert(pipes_full_nodenames, entry_panel_loaded) +table.insert(pipes_full_nodenames, flow_sensor_loaded) +table.insert(pipes_full_nodenames, sp_loaded) + +pipeworks.pipes_full_nodenames = pipes_full_nodenames +pipeworks.pipes_empty_nodenames = pipes_empty_nodenames + +if pipeworks.toggles.pipe_mode == "classic" then + +minetest.register_abm({ + nodenames = pipes_empty_nodenames, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + pipeworks.check_for_inflows(pos,node) + end +}) + +minetest.register_abm({ + nodenames = pipes_full_nodenames, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + pipeworks.check_sources(pos,node) + end +}) + +minetest.register_abm({ + nodenames = {"pipeworks:spigot","pipeworks:spigot_pouring"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + pipeworks.spigot_check(pos,node) + end +}) + +minetest.register_abm({ + nodenames = {"pipeworks:fountainhead","pipeworks:fountainhead_pouring"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + pipeworks.fountainhead_check(pos,node) + end +}) + + + +end diff --git a/mods/pipeworks/pressure_logic/abm_register.lua b/mods/pipeworks/pressure_logic/abm_register.lua new file mode 100755 index 0000000..4019eef --- /dev/null +++ b/mods/pipeworks/pressure_logic/abm_register.lua @@ -0,0 +1,27 @@ +-- register new flow logic ABMs +-- written 2017 by thetaepsilon + +local register = {} +pipeworks.flowlogic.abmregister = register + +local flowlogic = pipeworks.flowlogic + +-- register node list for the main logic function. +-- see flowlogic.run() in abms.lua. + +local register_flowlogic_abm = function(nodename) + if pipeworks.toggles.pipe_mode == "pressure" then + minetest.register_abm({ + label = "pipeworks new_flow_logic run", + nodenames = { nodename }, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + flowlogic.run(pos, node) + end + }) + else + minetest.log("warning", "pipeworks pressure_logic not enabled but register.flowlogic() requested") + end +end +register.flowlogic = register_flowlogic_abm diff --git a/mods/pipeworks/pressure_logic/abms.lua b/mods/pipeworks/pressure_logic/abms.lua new file mode 100755 index 0000000..083d8c3 --- /dev/null +++ b/mods/pipeworks/pressure_logic/abms.lua @@ -0,0 +1,368 @@ +-- reimplementation of new_flow_logic branch: processing functions +-- written 2017 by thetaepsilon + + + +local flowlogic = {} +flowlogic.helpers = {} +pipeworks.flowlogic = flowlogic + + + +-- borrowed from above: might be useable to replace the above coords tables +local make_coords_offsets = function(pos, include_base) + local coords = { + {x=pos.x,y=pos.y-1,z=pos.z}, + {x=pos.x,y=pos.y+1,z=pos.z}, + {x=pos.x-1,y=pos.y,z=pos.z}, + {x=pos.x+1,y=pos.y,z=pos.z}, + {x=pos.x,y=pos.y,z=pos.z-1}, + {x=pos.x,y=pos.y,z=pos.z+1}, + } + if include_base then table.insert(coords, pos) end + return coords +end + + + +-- local debuglog = function(msg) print("## "..msg) end + + + +local formatvec = function(vec) local sep="," return "("..tostring(vec.x)..sep..tostring(vec.y)..sep..tostring(vec.z)..")" end + + + +-- new version of liquid check +-- accepts a limit parameter to only delete water blocks that the receptacle can accept, +-- and returns it so that the receptacle can update it's pressure values. +local check_for_liquids_v2 = function(pos, limit) + local coords = make_coords_offsets(pos, false) + local total = 0 + for index, tpos in ipairs(coords) do + if total >= limit then break end + local name = minetest.get_node(tpos).name + if name == "default:water_source" then + minetest.remove_node(tpos) + total = total + 1 + end + end + --pipeworks.logger("check_for_liquids_v2@"..formatvec(pos).." total "..total) + return total +end +flowlogic.check_for_liquids_v2 = check_for_liquids_v2 + + + +local label_pressure = "pipeworks.water_pressure" +local get_pressure_access = function(pos) + local metaref = minetest.get_meta(pos) + return { + get = function() + return metaref:get_float(label_pressure) + end, + set = function(v) + metaref:set_float(label_pressure, v) + end + } +end + + +-- logging is unreliable when something is crashing... +local nilexplode = function(caller, label, value) + if value == nil then + error(caller..": "..label.." was nil") + end +end + + + +local finitemode = pipeworks.toggles.finite_water +flowlogic.run = function(pos, node) + local nodename = node.name + -- get the current pressure value. + local nodepressure = get_pressure_access(pos) + local currentpressure = nodepressure.get() + local oldpressure = currentpressure + + -- if node is an input: run intake phase + local inputdef = pipeworks.flowables.inputs.list[nodename] + if inputdef then + currentpressure = flowlogic.run_input(pos, node, currentpressure, inputdef) + --debuglog("post-intake currentpressure is "..currentpressure) + --nilexplode("run()", "currentpressure", currentpressure) + end + + -- balance pressure with neighbours + currentpressure = flowlogic.balance_pressure(pos, node, currentpressure) + + -- if node is an output: run output phase + local outputdef = pipeworks.flowables.outputs.list[nodename] + if outputdef then + currentpressure = flowlogic.run_output( + pos, + node, + currentpressure, + oldpressure, + outputdef, + finitemode) + end + + -- if node has pressure transitions: determine new node + if pipeworks.flowables.transitions.list[nodename] then + local newnode = flowlogic.run_transition(node, currentpressure) + --pipeworks.logger("flowlogic.run()@"..formatvec(pos).." transition, new node name = "..dump(newnode).." pressure "..tostring(currentpressure)) + minetest.swap_node(pos, newnode) + flowlogic.run_transition_post(pos, newnode) + end + + -- set the new pressure + nodepressure.set(currentpressure) +end + + + +local simple_neighbour_offsets = { + {x=0, y=-1,z= 0}, + {x=0, y= 1,z= 0}, + {x=-1,y= 0,z= 0}, + {x= 1,y= 0,z= 0}, + {x= 0,y= 0,z=-1}, + {x= 0,y= 0,z= 1}, +} +local get_neighbour_positions = function(pos, node) + -- local dname = "get_neighbour_positions@"..formatvec(pos).." " + -- get list of node neighbours. + -- if this node is directional and only flows on certain sides, + -- invoke the callback to retrieve the set. + -- for simple flowables this is just an auto-gen'd list of all six possible neighbours. + local candidates = {} + if pipeworks.flowables.list.simple[node.name] then + candidates = simple_neighbour_offsets + else + -- directional flowables: call the callback to get the list + local directional = pipeworks.flowables.list.directional[node.name] + if directional then + --pipeworks.logger(dname.."invoking neighbourfn") + local offsets = directional.neighbourfn(node) + candidates = offsets + end + end + + -- then, check each possible neighbour to see if they can be reached from this node. + local connections = {} + for index, offset in ipairs(candidates) do + local npos = vector.add(pos, offset) + local neighbour = minetest.get_node(npos) + local nodename = neighbour.name + local is_simple = (pipeworks.flowables.list.simple[nodename]) + if is_simple then + local n = get_pressure_access(npos) + table.insert(connections, n) + else + -- if target node is also directional, check if it agrees it can flow in that direction + local directional = pipeworks.flowables.list.directional[nodename] + if directional then + --pipeworks.logger(dname.."directionality test for offset "..formatvec(offset)) + local towards_origin = vector.multiply(offset, -1) + --pipeworks.logger(dname.."vector passed to directionfn: "..formatvec(towards_origin)) + local result = directional.directionfn(neighbour, towards_origin) + --pipeworks.logger(dname.."result: "..tostring(result)) + if result then + local n = get_pressure_access(npos) + table.insert(connections, n) + end + end + end + end + + return connections +end + + + +flowlogic.balance_pressure = function(pos, node, currentpressure) + -- local dname = "flowlogic.balance_pressure()@"..formatvec(pos).." " + -- check the pressure of all nearby flowable nodes, and average it out. + + -- pressure handles to average over + local connections = {} + -- unconditionally include self in nodes to average over. + -- result of averaging will be returned as new pressure for main flow logic callback + local totalv = currentpressure + local totalc = 1 + + local connections = get_neighbour_positions(pos, node) + + -- for each neighbour, add neighbour's pressure to the total to balance out + for _, neighbour in ipairs(connections) do + local n = neighbour.get() + totalv = totalv + n + totalc = totalc + 1 + end + local average = totalv / totalc + for _, target in ipairs(connections) do + target.set(average) + end + + return average +end + + + +flowlogic.run_input = function(pos, node, currentpressure, inputdef) + -- intakefn allows a given input node to define it's own intake logic. + -- this function will calculate the maximum amount of water that can be taken in; + -- the intakefn will be given this and is expected to return the actual absorption amount. + + local maxpressure = inputdef.maxpressure + local intake_limit = maxpressure - currentpressure + if intake_limit <= 0 then return currentpressure end + + local actual_intake = inputdef.intakefn(pos, intake_limit) + --pipeworks.logger("run_input@"..formatvec(pos).." oldpressure "..currentpressure.." intake_limit "..intake_limit.." actual_intake "..actual_intake) + if actual_intake <= 0 then return currentpressure end + + local newpressure = actual_intake + currentpressure + --debuglog("run_input() end, oldpressure "..currentpressure.." intake_limit "..intake_limit.." actual_intake "..actual_intake.." newpressure "..newpressure) + return newpressure +end + + + +-- flowlogic output helper implementation: +-- outputs water by trying to place water nodes nearby in the world. +-- neighbours is a list of node offsets to try placing water in. +-- this is a constructor function, returning another function which satisfies the output helper requirements. +-- note that this does *not* take rotation into account. +flowlogic.helpers.make_neighbour_output_fixed = function(neighbours) + return function(pos, node, currentpressure, finitemode) + local taken = 0 + for _, offset in pairs(neighbours) do + local npos = vector.add(pos, offset) + local name = minetest.get_node(npos).name + if currentpressure < 1 then break end + -- take pressure anyway in non-finite mode, even if node is water source already. + -- in non-finite mode, pressure has to be sustained to keep the sources there. + -- so in non-finite mode, placing water is dependent on the target node; + -- draining pressure is not. + local canplace = (name == "air") or (name == "default:water_flowing") + if canplace then + minetest.swap_node(npos, {name="default:water_source"}) + end + if (not finitemode) or canplace then + taken = taken + 1 + currentpressure = currentpressure - 1 + end + end + return taken + end +end + +-- complementary function to the above when using non-finite mode: +-- removes water sources from neighbor positions when the output is "off" due to lack of pressure. +flowlogic.helpers.make_neighbour_cleanup_fixed = function(neighbours) + return function(pos, node, currentpressure) + --pipeworks.logger("neighbour_cleanup_fixed@"..formatvec(pos)) + for _, offset in pairs(neighbours) do + local npos = vector.add(pos, offset) + local name = minetest.get_node(npos).name + if (name == "default:water_source") then + --pipeworks.logger("neighbour_cleanup_fixed removing "..formatvec(npos)) + minetest.remove_node(npos) + end + end + end +end + + + +flowlogic.run_output = function(pos, node, currentpressure, oldpressure, outputdef, finitemode) + -- processing step for water output devices. + -- takes care of checking a minimum pressure value and updating the resulting pressure level + -- the outputfn is provided the current pressure and returns the pressure "taken". + -- as an example, using this with the above spigot function, + -- the spigot function tries to output a water source if it will fit in the world. + --pipeworks.logger("flowlogic.run_output() pos "..formatvec(pos).." old -> currentpressure "..tostring(oldpressure).." "..tostring(currentpressure).." finitemode "..tostring(finitemode)) + local upper = outputdef.upper + local lower = outputdef.lower + local result = currentpressure + local threshold = nil + if finitemode then threshold = lower else threshold = upper end + if currentpressure > threshold then + local takenpressure = outputdef.outputfn(pos, node, currentpressure, finitemode) + local newpressure = currentpressure - takenpressure + if newpressure < 0 then newpressure = 0 end + result = newpressure + end + if (not finitemode) and (currentpressure < lower) and (oldpressure < lower) then + --pipeworks.logger("flowlogic.run_output() invoking cleanup currentpressure="..tostring(currentpressure)) + outputdef.cleanupfn(pos, node, currentpressure) + end + return result +end + + + +-- determine which node to switch to based on current pressure +flowlogic.run_transition = function(node, currentpressure) + local simplesetdef = pipeworks.flowables.transitions.simple[node.name] + local result = node + local found = false + + -- simple transition sets: assumes all nodes in the set share param values. + if simplesetdef then + -- assumes that the set has been checked to contain at least one element... + local nodename_prev = simplesetdef[1].nodename + local result_nodename = node.name + + for index, element in ipairs(simplesetdef) do + -- find the highest element that is below the current pressure. + local threshold = element.threshold + if threshold > currentpressure then + result_nodename = nodename_prev + found = true + break + end + nodename_prev = element.nodename + end + + -- use last element if no threshold is greater than current pressure + if not found then + result_nodename = nodename_prev + found = true + end + + -- preserve param1/param2 values + result = { name=result_nodename, param1=node.param1, param2=node.param2 } + end + + if not found then + pipeworks.logger("flowlogic.run_transition() BUG no transition definitions found! nodename="..nodename.." currentpressure="..tostring(currentpressure)) + end + + return result +end + +-- post-update hook for run_transition +-- among other things, updates mesecons if present. +-- node here means the new node, returned from run_transition() above +flowlogic.run_transition_post = function(pos, node) + local mesecons_def = minetest.registered_nodes[node.name].mesecons + local mesecons_rules = pipeworks.flowables.transitions.mesecons[node.name] + if minetest.global_exists("mesecon") and (mesecons_def ~= nil) and mesecons_rules then + if type(mesecons_def) ~= "table" then + pipeworks.logger("flowlogic.run_transition_post() BUG mesecons def for "..node.name.."not a table: got "..tostring(mesecons_def)) + else + local receptor = mesecons_def.receptor + if receptor then + local state = receptor.state + if state == mesecon.state.on then + mesecon.receptor_on(pos, mesecons_rules) + elseif state == mesecon.state.off then + mesecon.receptor_off(pos, mesecons_rules) + end + end + end + end +end diff --git a/mods/pipeworks/pressure_logic/flowable_node_registry.lua b/mods/pipeworks/pressure_logic/flowable_node_registry.lua new file mode 100755 index 0000000..6d7bf17 --- /dev/null +++ b/mods/pipeworks/pressure_logic/flowable_node_registry.lua @@ -0,0 +1,53 @@ +-- registry of flowable node behaviours in new flow logic +-- written 2017 by thetaepsilon + +-- the actual registration functions which edit these tables can be found in flowable_node_registry_install.lua +-- this is because the ABM code needs to inspect these tables, +-- but the registration code needs to reference said ABM code. +-- so those functions were split out to resolve a circular dependency. + + + +pipeworks.flowables = {} +pipeworks.flowables.list = {} +pipeworks.flowables.list.all = {} +-- pipeworks.flowables.list.nodenames = {} + +-- simple flowables - balance pressure in any direction +pipeworks.flowables.list.simple = {} +pipeworks.flowables.list.simple_nodenames = {} + +-- directional flowables - can only flow on certain sides +-- format per entry is a table with the following fields: +-- neighbourfn: function(node), +-- called to determine which nodes to consider as neighbours. +-- can be used to e.g. inspect the node's param values for facedir etc. +-- returns: array of vector offsets to look for possible neighbours in +-- directionfn: function(node, vector): +-- can this node flow in this direction? +-- called in the context of another node to check the matching entry returned by neighbourfn. +-- for every offset vector returned by neighbourfn, +-- the node at that absolute position is checked. +-- if that node is also a directional flowable, +-- then that node's vector is passed to that node's directionfn +-- (inverted, so that directionfn sees a vector pointing out from it back to the origin node). +-- if directionfn agrees that the neighbour node can currently flow in that direction, +-- the neighbour is to participate in pressure balancing. +pipeworks.flowables.list.directional = {} + +-- simple intakes - try to absorb any adjacent water nodes +pipeworks.flowables.inputs = {} +pipeworks.flowables.inputs.list = {} +pipeworks.flowables.inputs.nodenames = {} + +-- outputs - takes pressure from pipes and update world to do something with it +pipeworks.flowables.outputs = {} +pipeworks.flowables.outputs.list = {} +-- not currently any nodenames arraylist for this one as it's not currently needed. + +-- nodes with registered node transitions +-- nodes will be switched depending on pressure level +pipeworks.flowables.transitions = {} +pipeworks.flowables.transitions.list = {} -- master list +pipeworks.flowables.transitions.simple = {} -- nodes that change based purely on pressure +pipeworks.flowables.transitions.mesecons = {} -- table of mesecons rules to apply on transition diff --git a/mods/pipeworks/pressure_logic/flowable_node_registry_install.lua b/mods/pipeworks/pressure_logic/flowable_node_registry_install.lua new file mode 100755 index 0000000..0ad00a6 --- /dev/null +++ b/mods/pipeworks/pressure_logic/flowable_node_registry_install.lua @@ -0,0 +1,263 @@ +-- flowable node registry: add entries and install ABMs if new flow logic is enabled +-- written 2017 by thetaepsilon + + + +-- use for hooking up ABMs as nodes are registered +local abmregister = pipeworks.flowlogic.abmregister + +-- registration functions +pipeworks.flowables.register = {} +local register = pipeworks.flowables.register + +-- some sanity checking for passed args, as this could potentially be made an external API eventually +local checkexists = function(nodename) + if type(nodename) ~= "string" then error("pipeworks.flowables nodename must be a string!") end + return pipeworks.flowables.list.all[nodename] +end + +local insertbase = function(nodename) + if checkexists(nodename) then error("pipeworks.flowables duplicate registration!") end + pipeworks.flowables.list.all[nodename] = true + -- table.insert(pipeworks.flowables.list.nodenames, nodename) + if pipeworks.toggles.pipe_mode == "pressure" then + abmregister.flowlogic(nodename) + end +end + +local regwarning = function(kind, nodename) + local tail = "" + if pipeworks.toggles.pipe_mode ~= "pressure" then tail = " but pressure logic not enabled" end + --pipeworks.logger(kind.." flow logic registry requested for "..nodename..tail) +end + +-- Register a node as a simple flowable. +-- Simple flowable nodes have no considerations for direction of flow; +-- A cluster of adjacent simple flowables will happily average out in any direction. +register.simple = function(nodename) + insertbase(nodename) + pipeworks.flowables.list.simple[nodename] = true + table.insert(pipeworks.flowables.list.simple_nodenames, nodename) + regwarning("simple", nodename) +end + +-- Register a node as a directional flowable: +-- has a helper function which determines which nodes to consider valid neighbours. +register.directional = function(nodename, neighbourfn, directionfn) + insertbase(nodename) + pipeworks.flowables.list.directional[nodename] = { + neighbourfn = neighbourfn, + directionfn = directionfn + } + regwarning("directional", nodename) +end + +-- register a node as a directional flowable that can only flow through either the top or bottom side. +-- used for fountainheads (bottom side) and pumps (top side). +-- this is in world terms, not facedir relative! +register.directional_vertical_fixed = function(nodename, topside) + local y + if topside then y = 1 else y = -1 end + local side = { x=0, y=y, z=0 } + local neighbourfn = function(node) return { side } end + local directionfn = function(node, direction) + return vector.equals(direction, side) + end + register.directional(nodename, neighbourfn, directionfn) +end + +-- register a node as a directional flowable whose accepting sides depends upon param2 rotation. +-- used for entry panels, valves, flow sensors and spigots. +-- this is mostly for legacy reasons and SHOULD NOT BE USED IN NEW CODE. +register.directional_horizonal_rotate = function(nodename, doubleended) + local rotations = { + {x= 0,y= 0,z= 1}, + {x= 1,y= 0,z= 0}, + {x= 0,y= 0,z=-1}, + {x=-1,y= 0,z= 0}, + } + local getends = function(node) + --local dname = "horizontal rotate getends() " + local param2 = node.param2 + -- the pipeworks nodes use a fixed value for vertical facing nodes + -- if that is detected, just return that directly. + if param2 == 17 then + return {{x=0,y=1,z=0}, {x=0,y=-1,z=0}} + end + + -- the sole end of the spigot points in the direction the rotation bits suggest + -- also note to self: lua arrays start at one... + local mainend = (param2 % 4) + 1 + -- use modulus wrap-around to find other end for straight-run devices like the valve + local otherend = ((param2 + 2) % 4) + 1 + local mainrot = rotations[mainend] + --pipeworks.logger(dname.."mainrot: "..dump(mainrot)) + local result + if doubleended then + result = { mainrot, rotations[otherend] } + else + result = { mainrot } + end + --pipeworks.logger(dname.."result: "..dump(result)) + return result + end + local neighbourfn = function(node) + return getends(node) + end + local directionfn = function(node, direction) + local result = false + for index, endvec in ipairs(getends(node)) do + if vector.equals(direction, endvec) then result = true end + end + return result + end + register.directional(nodename, neighbourfn, directionfn) +end + + + +local checkbase = function(nodename) + if not checkexists(nodename) then error("pipeworks.flowables node doesn't exist as a flowable!") end +end + +local duplicateerr = function(kind, nodename) error(kind.." duplicate registration for "..nodename) end + + + +-- Registers a node as a fluid intake. +-- intakefn is used to determine the water that can be taken in a node-specific way. +-- Expects node to be registered as a flowable (is present in flowables.list.all), +-- so that water can move out of it. +-- maxpressure is the maximum pipeline pressure that this node can drive; +-- if the input's node exceeds this the callback is not run. +-- possible WISHME here: technic-driven high-pressure pumps +register.intake = function(nodename, maxpressure, intakefn) + -- check for duplicate registration of this node + local list = pipeworks.flowables.inputs.list + checkbase(nodename) + if list[nodename] then duplicateerr("pipeworks.flowables.inputs", nodename) end + list[nodename] = { maxpressure=maxpressure, intakefn=intakefn } + regwarning("intake", nodename) +end + + + +-- Register a node as a simple intake: +-- tries to absorb water source nodes from it's surroundings. +-- may exceed limit slightly due to needing to absorb whole nodes. +register.intake_simple = function(nodename, maxpressure) + register.intake(nodename, maxpressure, pipeworks.flowlogic.check_for_liquids_v2) +end + + + +-- Register a node as an output. +-- Expects node to already be a flowable. +-- upper and lower thresholds have different meanings depending on whether finite liquid mode is in effect. +-- if not (the default unless auto-detected), +-- nodes above their upper threshold have their outputfn invoked (and pressure deducted), +-- nodes between upper and lower are left idle, +-- and nodes below lower have their cleanup fn invoked (to say remove water sources). +-- the upper and lower difference acts as a hysteresis to try and avoid "gaps" in the flow. +-- if finite mode is on, upper is ignored and lower is used to determine whether to run outputfn; +-- cleanupfn is ignored in this mode as finite mode assumes something causes water to move itself. +register.output = function(nodename, upper, lower, outputfn, cleanupfn) + if pipeworks.flowables.outputs.list[nodename] then + error("pipeworks.flowables.outputs duplicate registration!") + end + checkbase(nodename) + pipeworks.flowables.outputs.list[nodename] = { + upper=upper, + lower=lower, + outputfn=outputfn, + cleanupfn=cleanupfn, + } + -- output ABM now part of main flow logic ABM to preserve ordering. + -- note that because outputs have to be a flowable first + -- (and the installation of the flow logic ABM is conditional), + -- registered output nodes for new_flow_logic is also still conditional on the enable flag. + regwarning("output node", nodename) +end + +-- register a simple output: +-- drains pressure by attempting to place water in nearby nodes, +-- which can be set by passing a list of offset vectors. +-- will attempt to drain as many whole nodes as there are positions in the offset list. +-- for meanings of upper and lower, see register.output() above. +-- non-finite mode: +-- above upper pressure: places water sources as appropriate, keeps draining pressure. +-- below lower presssure: removes it's neighbour water sources. +-- finite mode: +-- same as for above pressure in non-finite mode, +-- but only drains pressure when water source nodes are actually placed. +register.output_simple = function(nodename, upper, lower, neighbours) + local outputfn = pipeworks.flowlogic.helpers.make_neighbour_output_fixed(neighbours) + local cleanupfn = pipeworks.flowlogic.helpers.make_neighbour_cleanup_fixed(neighbours) + register.output(nodename, upper, lower, outputfn, cleanupfn) +end + + + +-- common base checking for transition nodes +-- ensures the node has only been registered once as a transition. +local transition_list = pipeworks.flowables.transitions.list +local insert_transition_base = function(nodename) + checkbase(nodename) + if transition_list[nodename] then duplicateerr("base transition", nodename) end + transition_list[nodename] = true +end + + + +-- register a simple transition set. +-- expects a table with nodenames as keys and threshold pressures as values. +-- internally, the table is sorted by value, and when one of these nodes needs to transition, +-- the table is searched starting from the lowest (even if it's value is non-zero), +-- until a value is found which is higher than or equal to the current node pressure. +-- ex. nodeset = { ["mod:level_0"] = 0, ["mod:level_1"] = 1, --[[ ... ]] } +local simpleseterror = function(msg) + error("register.transition_simple_set(): "..msg) +end +local simple_transitions = pipeworks.flowables.transitions.simple + +register.transition_simple_set = function(nodeset, extras) + local set = {} + if extras == nil then extras = {} end + + local length = #nodeset + if length < 2 then simpleseterror("nodeset needs at least two elements!") end + for index, element in ipairs(nodeset) do + if type(element) ~= "table" then simpleseterror("element "..tostring(index).." in nodeset was not table!") end + local nodename = element[1] + local value = element[2] + if type(nodename) ~= "string" then simpleseterror("nodename "..tostring(nodename).."was not a string!") end + if type(value) ~= "number" then simpleseterror("pressure value "..tostring(value).."was not a number!") end + insert_transition_base(nodename) + if simple_transitions[nodename] then duplicateerr("simple transition set", nodename) end + -- assigning set to table is done separately below + + table.insert(set, { nodename=nodename, threshold=value }) + end + + -- sort pressure values, smallest first + local smallest_first = function(a, b) + return a.threshold < b.threshold + end + table.sort(set, smallest_first) + + -- individual registration of each node, all sharing this set, + -- so each node in the set will transition to the correct target node. + for _, element in ipairs(set) do + --pipeworks.logger("register.transition_simple_set() after sort: nodename "..element.nodename.." value "..tostring(element.threshold)) + simple_transitions[element.nodename] = set + end + + -- handle extra options + -- if mesecons rules table was passed, set for each node + if extras.mesecons then + local mesecons_rules = pipeworks.flowables.transitions.mesecons + for _, element in ipairs(set) do + mesecons_rules[element.nodename] = extras.mesecons + end + end +end diff --git a/mods/ITEMS/pipeworks/routing_tubes.lua b/mods/pipeworks/routing_tubes.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/routing_tubes.lua rename to mods/pipeworks/routing_tubes.lua diff --git a/mods/ITEMS/pipeworks/screenshot.png b/mods/pipeworks/screenshot.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/screenshot.png rename to mods/pipeworks/screenshot.png diff --git a/mods/pipeworks/settingtypes.txt b/mods/pipeworks/settingtypes.txt new file mode 100755 index 0000000..cd6efbc --- /dev/null +++ b/mods/pipeworks/settingtypes.txt @@ -0,0 +1,77 @@ +#Enable pipes. +pipeworks_enable_pipes (Enable Pipes) bool true + +#Enable autocrafter. +pipeworks_enable_autocrafter (Enable Autocrafter) bool true + +#Enable deployer. +pipeworks_enable_deployer (Enable Deployer) bool true + +#Enable dispenser. +pipeworks_enable_dispenser (Enable Dispenser) bool true + +#Enable node breaker. +pipeworks_enable_node_breaker (Enable Node Breaker) bool true + +#Enable teleport tube. +pipeworks_enable_teleport_tube (Enable Teleport Tube) bool true + +#Enable pipe devices. +pipeworks_enable_pipe_devices (Enable Pipe Devices) bool true + +#Enable redefines. +pipeworks_enable_redefines (Enable Node Redefines) bool true + +#Enable sorting tube. +pipeworks_enable_mese_tube (Enable Sorting Tube) bool true + +#Enable detector tube. +pipeworks_enable_detector_tube (Enable Detector Tube) bool true + +#Enable digiline detector tube. +pipeworks_enable_digiline_detector_tube (Enable Digiline Detector Tube) bool true + +#Enable mesecon signal conducting tube. +pipeworks_enable_conductor_tube (Enable Conductor Tube) bool true + +#Enable digiline signal conducting tube. +pipeworks_enable_digiline_conductor_tube (Enable Digiline Conductor Tube) bool true + +#Enable accelerator tube. +pipeworks_enable_accelerator_tube (Enable Accelerator Tube) bool true + +#Enable crossing tube. +#It sends all incoming items to the other side, or if there is no other tube, it sends them back. +pipeworks_enable_crossing_tube (Enable Crossing Tube) bool true + +#Enable vacuum tube. +#It picks up all items that lay around next to it. +pipeworks_enable_sand_tube (Enable Vacuum Tube) bool true + +#Enable mese vacuum tube. +#It's like the normal vacuum tube with the +#differance that you can set the radius up to 8 nodes. +pipeworks_enable_mese_sand_tube (Enable Mese Vacuum Tube) bool true + +#Enable one way tube. +#It sends items only in one direction. +#Use it to drop items out of tubes. +pipeworks_enable_one_way_tube (Enable One Way Tube) bool true + +#Enable high priority tube. +#It has a very high priority and so, on crossings, the items will +#always go to it if there are multible ways. +pipeworks_enable_priority_tube (Enable High Priority Tube) bool true + +#Enable lua controlled tube. +#It is comparable with mesecons luacontroller. +pipeworks_enable_lua_tube (Enable Lua controlled Tube) bool true + +#Enable cyclic mode. +pipeworks_enable_cyclic_mode (Enable Cyclic Mode) bool true + +#Drop on routing fail. +pipeworks_drop_on_routing_fail (Drop On Routing Fail) bool false + +#Delete item on clearobject. +pipeworks_delete_item_on_clearobject (Delete Item On Clearobject) bool true diff --git a/mods/pipeworks/signal_tubes.lua b/mods/pipeworks/signal_tubes.lua new file mode 100755 index 0000000..b955a16 --- /dev/null +++ b/mods/pipeworks/signal_tubes.lua @@ -0,0 +1,227 @@ +if pipeworks.enable_detector_tube then + local detector_tube_step = 5 * tonumber(minetest.settings:get("dedicated_server_step")) + pipeworks.register_tube("pipeworks:detector_tube_on", { + description = "Detecting Pneumatic Tube Segment on (you hacker you)", + inventory_image = "pipeworks_detector_tube_inv.png", + plain = { "pipeworks_detector_tube_plain.png" }, + node_def = { + tube = {can_go = function(pos, node, velocity, stack) + local meta = minetest.get_meta(pos) + local name = minetest.get_node(pos).name + local nitems = meta:get_int("nitems")+1 + meta:set_int("nitems", nitems) + local saved_pos = vector.new(pos) + minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos) + return pipeworks.notvel(pipeworks.meseadjlist,velocity) + end}, + groups = {mesecon = 2, not_in_creative_inventory = 1}, + drop = "pipeworks:detector_tube_off_1", + mesecons = {receptor = {state = "on", rules = pipeworks.mesecons_rules}}, + item_exit = function(pos) + local meta = minetest.get_meta(pos) + local nitems = meta:get_int("nitems")-1 + local node = minetest.get_node(pos) + local name = node.name + local fdir = node.param2 + if nitems == 0 then + minetest.set_node(pos, {name = string.gsub(name, "on", "off"), param2 = fdir}) + mesecon.receptor_off(pos, pipeworks.mesecons_rules) + else + meta:set_int("nitems", nitems) + end + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_int("nitems", 1) + local name = minetest.get_node(pos).name + local saved_pos = vector.new(pos) + minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos) + end, + }, + }) + pipeworks.register_tube("pipeworks:detector_tube_off", { + description = "Detecting Pneumatic Tube Segment", + inventory_image = "pipeworks_detector_tube_inv.png", + plain = { "pipeworks_detector_tube_plain.png" }, + node_def = { + tube = {can_go = function(pos, node, velocity, stack) + local node = minetest.get_node(pos) + local name = node.name + local fdir = node.param2 + minetest.set_node(pos,{name = string.gsub(name, "off", "on"), param2 = fdir}) + mesecon.receptor_on(pos, pipeworks.mesecons_rules) + return pipeworks.notvel(pipeworks.meseadjlist, velocity) + end}, + groups = {mesecon = 2}, + mesecons = {receptor = {state = "off", rules = pipeworks.mesecons_rules }}, + }, + }) + + minetest.register_craft( { + output = "pipeworks:detector_tube_off_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "mesecons:mesecon", "mesecons_materials:silicon", "mesecons:mesecon" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, + }) +end + +local digiline_enabled = minetest.get_modpath("digilines") ~= nil +if digiline_enabled and pipeworks.enable_digiline_detector_tube then + pipeworks.register_tube("pipeworks:digiline_detector_tube", { + description = "Digiline Detecting Pneumatic Tube Segment", + inventory_image = "pipeworks_digiline_detector_tube_inv.png", + plain = { "pipeworks_digiline_detector_tube_plain.png" }, + node_def = { + tube = {can_go = function(pos, node, velocity, stack) + local meta = minetest.get_meta(pos) + + local setchan = meta:get_string("channel") + + digiline:receptor_send(pos, digiline.rules.default, setchan, stack:to_string()) + + return pipeworks.notvel(pipeworks.meseadjlist, velocity) + end}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", + "size[8.6,2.2]".. + "field[0.6,0.6;8,1;channel;Channel:;${channel}]".. + "image[0.3,1.3;1,1;pipeworks_digiline_detector_tube_inv.png]".. + "label[1.6,1.2;Digiline Detecting Tube]" + ) + end, + on_receive_fields = function(pos, formname, fields, sender) + if fields.channel then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + end, + groups = {}, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) end + } + }, + }, + }) + + minetest.register_craft( { + output = "pipeworks:digiline_detector_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "digilines:wire_std_00000000", "mesecons_materials:silicon", "digilines:wire_std_00000000" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, + }) +end + +if pipeworks.enable_conductor_tube then + pipeworks.register_tube("pipeworks:conductor_tube_off", { + description = "Conducting Pneumatic Tube Segment", + inventory_image = "pipeworks_conductor_tube_inv.png", + short = "pipeworks_conductor_tube_short.png", + plain = { "pipeworks_conductor_tube_plain.png" }, + noctr = { "pipeworks_conductor_tube_noctr.png" }, + ends = { "pipeworks_conductor_tube_end.png" }, + node_def = { + groups = {mesecon = 2}, + mesecons = {conductor = {state = "off", + rules = pipeworks.mesecons_rules, + onstate = "pipeworks:conductor_tube_on_#id"}} + }, + }) + pipeworks.register_tube("pipeworks:conductor_tube_on", { + description = "Conducting Pneumatic Tube Segment on (you hacker you)", + inventory_image = "pipeworks_conductor_tube_inv.png", + short = "pipeworks_conductor_tube_short.png", + plain = { "pipeworks_conductor_tube_on_plain.png" }, + noctr = { "pipeworks_conductor_tube_on_noctr.png" }, + ends = { "pipeworks_conductor_tube_on_end.png" }, + node_def = { + groups = {mesecon = 2, not_in_creative_inventory = 1}, + drop = "pipeworks:conductor_tube_off_1", + mesecons = {conductor = {state = "on", + rules = pipeworks.mesecons_rules, + offstate = "pipeworks:conductor_tube_off_#id"}} + }, + }) + + minetest.register_craft({ + type = "shapeless", + output = "pipeworks:conductor_tube_off_1", + recipe = {"pipeworks:tube_1", "mesecons:mesecon"} + }) +end + +if digiline_enabled and pipeworks.enable_digiline_conductor_tube then + pipeworks.register_tube("pipeworks:digiline_conductor_tube", { + description = "Digiline Conducting Pneumatic Tube Segment", + inventory_image = "pipeworks_tube_inv.png^pipeworks_digiline_conductor_tube_inv.png", + short = "pipeworks_tube_short.png^pipeworks_digiline_conductor_tube_short.png", + plain = {"pipeworks_tube_plain.png^pipeworks_digiline_conductor_tube_plain.png"}, + noctr = {"pipeworks_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"}, + ends = {"pipeworks_tube_end.png^pipeworks_digiline_conductor_tube_end.png"}, + node_def = {digiline = {wire = {rules = pipeworks.digilines_rules}}}, + }) + minetest.register_craft({ + type = "shapeless", + output = "pipeworks:digiline_conductor_tube_1", + recipe = {"pipeworks:tube_1", "digilines:wire_std_00000000"} + }) +end + +if digiline_enabled and pipeworks.enable_digiline_conductor_tube and + pipeworks.enable_conductor_tube then + pipeworks.register_tube("pipeworks:mesecon_and_digiline_conductor_tube_off", { + description = "Mesecon and Digiline Conducting Pneumatic Tube Segment", + inventory_image = "pipeworks_conductor_tube_inv.png^pipeworks_digiline_conductor_tube_inv.png", + short = "pipeworks_conductor_tube_short.png^pipeworks_digiline_conductor_tube_short.png", + plain = {"pipeworks_conductor_tube_plain.png^pipeworks_digiline_conductor_tube_plain.png"}, + noctr = {"pipeworks_conductor_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"}, + ends = {"pipeworks_conductor_tube_end.png^pipeworks_digiline_conductor_tube_end.png"}, + node_def = { + digiline = {wire = {rules = pipeworks.digilines_rules}}, + groups = {mesecon = 2}, + mesecons = {conductor = { + state = "off", + rules = pipeworks.mesecons_rules, + onstate = "pipeworks:mesecon_and_digiline_conductor_tube_on_#id" + }}, + }, + }) + pipeworks.register_tube("pipeworks:mesecon_and_digiline_conductor_tube_on", { + description = "Mesecon and Digiline Conducting Pneumatic Tube Segment on (you hacker you)", + inventory_image = "pipeworks_conductor_tube_inv.png^pipeworks_digiline_conductor_tube_inv.png", + short = "pipeworks_conductor_tube_short.png^pipeworks_digiline_conductor_tube_short.png", + plain = {"pipeworks_conductor_tube_on_plain.png^pipeworks_digiline_conductor_tube_plain.png"}, + noctr = {"pipeworks_conductor_tube_on_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"}, + ends = {"pipeworks_conductor_tube_on_end.png^pipeworks_digiline_conductor_tube_end.png"}, + node_def = { + digiline = {wire = {rules = pipeworks.digilines_rules}}, + groups = {mesecon = 2, not_in_creative_inventory = 1}, + drop = "pipeworks:mesecon_and_digiline_conductor_tube_off_1", + mesecons = {conductor = { + state = "on", + rules = pipeworks.mesecons_rules, + offstate = "pipeworks:mesecon_and_digiline_conductor_tube_off_#id"} + }, + }, + }) + minetest.register_craft({ + type = "shapeless", + output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1", + recipe = {"pipeworks:tube_1", "mesecons:mesecon", "digilines:wire_std_00000000"} + }) + minetest.register_craft({ + type = "shapeless", + output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1", + recipe = {"pipeworks:conductor_tube_off_1", "digilines:wire_std_00000000"} + }) + minetest.register_craft({ + type = "shapeless", + output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1", + recipe = {"pipeworks:digiline_conductor_tube_1", "mesecons:mesecon"} + }) +end diff --git a/mods/ITEMS/pipeworks/sorting_tubes.lua b/mods/pipeworks/sorting_tubes.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/sorting_tubes.lua rename to mods/pipeworks/sorting_tubes.lua diff --git a/mods/pipeworks/teleport_tube.lua b/mods/pipeworks/teleport_tube.lua new file mode 100755 index 0000000..d707717 --- /dev/null +++ b/mods/pipeworks/teleport_tube.lua @@ -0,0 +1,260 @@ +local filename=minetest.get_worldpath() .. "/teleport_tubes" + +local tp_tube_db = nil -- nil forces a read +local tp_tube_db_version = 2.0 + +local function hash(pos) + return string.format("%.30g", minetest.hash_node_position(pos)) +end + +local function save_tube_db() + local file, err = io.open(filename, "w") + if file then + tp_tube_db.version = tp_tube_db_version + file:write(minetest.serialize(tp_tube_db)) + tp_tube_db.version = nil + io.close(file) + else + error(err) + end +end + +local function migrate_tube_db() + local tmp_db = {} + tp_tube_db.version = nil + for key, val in pairs(tp_tube_db) do + if(val.channel ~= "") then -- skip unconfigured tubes + tmp_db[hash(val)] = val + end + end + tp_tube_db = tmp_db + save_tube_db() +end + +local function read_tube_db() + local file = io.open(filename, "r") + if file ~= nil then + local file_content = file:read("*all") + io.close(file) + + if file_content and file_content ~= "" then + tp_tube_db = minetest.deserialize(file_content) + if(not tp_tube_db.version or tonumber(tp_tube_db.version) < tp_tube_db_version) then + migrate_tube_db() + end + tp_tube_db.version = nil -- we add it back when saving + return tp_tube_db -- we read sucessfully + end + end + tp_tube_db = {} + return tp_tube_db +end + +-- debug formatter for coordinates used below +local fmt = function(pos) + return pos.x..", "..pos.y..", "..pos.z +end + +-- updates or adds a tube +local function set_tube(pos, channel, can_receive) + local tubes = tp_tube_db or read_tube_db() + local hash = hash(pos) + local tube = tubes[hash] + if tube then + tube.channel = channel + tube.cr = can_receive + save_tube_db() + return + end + + -- we haven't found any tp tube to update, so lets add it + -- but sanity check that the hash has not already been inserted. + -- if so, complain very loudly and refuse the update so the player knows something is amiss. + -- to catch regressions of https://github.com/minetest-mods/pipeworks/issues/166 + local existing = tp_tube_db[hash] + if existing ~= nil then + local e = "error" + minetest.log(e, "pipeworks teleport tube update refused due to position hash collision") + minetest.log(e, "collided hash: "..hash) + minetest.log(e, "tried-to-place tube: "..fmt(pos)) + minetest.log(e, "existing tube: "..fmt(existing)) + return + end + + tp_tube_db[hash] = {x=pos.x,y=pos.y,z=pos.z,channel=channel,cr=can_receive} + save_tube_db() +end + +local function remove_tube(pos) + local tubes = tp_tube_db or read_tube_db() + tubes[hash(pos)] = nil + save_tube_db() +end + +local function read_node_with_vm(pos) + local vm = VoxelManip() + local MinEdge, MaxEdge = vm:read_from_map(pos, pos) + local data = vm:get_data() + local area = VoxelArea:new({MinEdge = MinEdge, MaxEdge = MaxEdge}) + return minetest.get_name_from_content_id(data[area:index(pos.x, pos.y, pos.z)]) +end + +local function get_receivers(pos, channel) + local tubes = tp_tube_db or read_tube_db() + local receivers = {} + local dirty = false + for key, val in pairs(tubes) do + -- skip all non-receivers and the tube that it came from as early as possible, as this is called often + if (val.cr == 1 and val.channel == channel and (val.x ~= pos.x or val.y ~= pos.y or val.z ~= pos.z)) then + local is_loaded = (minetest.get_node_or_nil(val) ~= nil) + local node_name = is_loaded and minetest.get_node(pos).name or read_node_with_vm(val) + + if minetest.registered_nodes[node_name] and minetest.registered_nodes[node_name].is_teleport_tube then + table.insert(receivers, val) + else + tp_tube_db[key] = nil + dirty = true + end + end + end + if dirty then + save_tube_db() + end + return receivers +end + +local function update_meta(meta, can_receive) + meta:set_int("can_receive", can_receive and 1 or 0) + local cr_state = can_receive and "on" or "off" + meta:set_string("formspec","size[8.6,2.2]".. + "field[0.6,0.6;7,1;channel;Channel:;${channel}]".. + "label[7.3,0;Receive]".. + "image_button[7.3,0.3;1,0.6;pipeworks_button_" .. cr_state .. ".png;cr" .. (can_receive and 0 or 1) .. ";;;false;pipeworks_button_interm.png]".. + "image[0.3,1.3;1,1;pipeworks_teleport_tube_inv.png]".. + "label[1.6,1.2;channels are public by default]" .. + "label[1.6,1.5;use : for fully private channels]" .. + "label[1.6,1.8;use \\; for private receivers]" .. + default.gui_bg.. + default.gui_bg_img) +end + +pipeworks.register_tube("pipeworks:teleport_tube", { + description = "Teleporting Pneumatic Tube Segment", + inventory_image = "pipeworks_teleport_tube_inv.png", + noctr = { "pipeworks_teleport_tube_noctr.png" }, + plain = { "pipeworks_teleport_tube_plain.png" }, + ends = { "pipeworks_teleport_tube_end.png" }, + short = "pipeworks_teleport_tube_short.png", + node_def = { + is_teleport_tube = true, + tube = { + can_go = function(pos,node,velocity,stack) + velocity.x = 0 + velocity.y = 0 + velocity.z = 0 + + local channel = minetest.get_meta(pos):get_string("channel") + if channel == "" then return {} end + + local target = get_receivers(pos, channel) + if target[1] == nil then return {} end + + local d = math.random(1,#target) + pos.x = target[d].x + pos.y = target[d].y + pos.z = target[d].z + return pipeworks.meseadjlist + end + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + update_meta(meta, true) + meta:set_string("infotext", "unconfigured Teleportation Tube") + end, + on_receive_fields = function(pos,formname,fields,sender) + if not fields.channel -- ignore escaping or clientside manipulation of the form + or not pipeworks.may_configure(pos, sender) then + return + end + local new_channel = tostring(fields.channel):trim() + + local meta = minetest.get_meta(pos) + local can_receive = meta:get_int("can_receive") + + -- check for private channels each time before actually changing anything + -- to not even allow switching between can_receive states of private channels + if new_channel ~= "" then + local sender_name = sender:get_player_name() + local name, mode = new_channel:match("^([^:;]+)([:;])") + if name and mode and name ~= sender_name then + --channels starting with '[name]:' can only be used by the named player + if mode == ":" then + minetest.chat_send_player(sender_name, "Sorry, channel '"..new_channel.."' is reserved for exclusive use by "..name) + return + + --channels starting with '[name];' can be used by other players, but cannot be received from + elseif mode == ";" and (fields.cr1 or (can_receive ~= 0 and not fields.cr0)) then + minetest.chat_send_player(sender_name, "Sorry, receiving from channel '"..new_channel.."' is reserved for "..name) + return + end + end + end + + local dirty = false + + -- was the channel changed? + local channel = meta:get_string("channel") + if new_channel ~= channel then + channel = new_channel + meta:set_string("channel", channel) + dirty = true + end + + -- test if a can_receive button was pressed + if fields.cr0 and can_receive ~= 0 then + can_receive = 0 + update_meta(meta, false) + dirty = true + elseif fields.cr1 and can_receive ~= 1 then + can_receive = 1 + update_meta(meta, true) + dirty = true + end + + -- save if we changed something, handle the empty channel while we're at it + if dirty then + if channel ~= "" then + set_tube(pos, channel, can_receive) + local cr_description = (can_receive == 1) and "sending and receiving" or "sending" + meta:set_string("infotext", string.format("Teleportation Tube %s on '%s'", cr_description, channel)) + else + -- remove empty channel tubes, to not have to search through them + remove_tube(pos) + meta:set_string("infotext", "unconfigured Teleportation Tube") + end + end + end, + on_destruct = function(pos) + remove_tube(pos) + end + }, +}) +minetest.register_craft( { + output = "pipeworks:teleport_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "default:desert_stone", "default:mese", "default:desert_stone" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) + +if minetest.get_modpath("mesecons_mvps") ~= nil then + mesecon.register_on_mvps_move(function(moved_nodes) + for _, n in ipairs(moved_nodes) do + if string.find(n.node.name, "pipeworks:teleport_tube") ~= nil then + local meta = minetest.get_meta(n.pos) + set_tube(n.pos, meta:get_string("channel"), meta:get_int("can_receive")) + end + end + end) +end diff --git a/mods/ITEMS/pipeworks/textures/homedecor_oil_extract.png b/mods/pipeworks/textures/homedecor_oil_extract.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/homedecor_oil_extract.png rename to mods/pipeworks/textures/homedecor_oil_extract.png diff --git a/mods/ITEMS/pipeworks/textures/homedecor_paraffin.png b/mods/pipeworks/textures/homedecor_paraffin.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/homedecor_paraffin.png rename to mods/pipeworks/textures/homedecor_paraffin.png diff --git a/mods/ITEMS/pipeworks/textures/homedecor_plastic_sheeting.png b/mods/pipeworks/textures/homedecor_plastic_sheeting.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/homedecor_plastic_sheeting.png rename to mods/pipeworks/textures/homedecor_plastic_sheeting.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_end.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_end.png rename to mods/pipeworks/textures/pipeworks_accelerator_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_inv.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_inv.png rename to mods/pipeworks/textures/pipeworks_accelerator_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_noctr.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_accelerator_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_plain.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_plain.png rename to mods/pipeworks/textures/pipeworks_accelerator_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_short.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_accelerator_tube_short.png rename to mods/pipeworks/textures/pipeworks_accelerator_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_autocrafter.png b/mods/pipeworks/textures/pipeworks_autocrafter.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_autocrafter.png rename to mods/pipeworks/textures/pipeworks_autocrafter.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_black.png b/mods/pipeworks/textures/pipeworks_black.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_black.png rename to mods/pipeworks/textures/pipeworks_black.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_blue.png b/mods/pipeworks/textures/pipeworks_blue.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_blue.png rename to mods/pipeworks/textures/pipeworks_blue.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_end.png b/mods/pipeworks/textures/pipeworks_broken_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_end.png rename to mods/pipeworks/textures/pipeworks_broken_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_inv.png b/mods/pipeworks/textures/pipeworks_broken_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_inv.png rename to mods/pipeworks/textures/pipeworks_broken_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_noctr.png b/mods/pipeworks/textures/pipeworks_broken_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_broken_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_plain.png b/mods/pipeworks/textures/pipeworks_broken_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_plain.png rename to mods/pipeworks/textures/pipeworks_broken_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_short.png b/mods/pipeworks/textures/pipeworks_broken_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_broken_tube_short.png rename to mods/pipeworks/textures/pipeworks_broken_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_button_interm.png b/mods/pipeworks/textures/pipeworks_button_interm.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_button_interm.png rename to mods/pipeworks/textures/pipeworks_button_interm.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_button_off.png b/mods/pipeworks/textures/pipeworks_button_off.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_button_off.png rename to mods/pipeworks/textures/pipeworks_button_off.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_button_on.png b/mods/pipeworks/textures/pipeworks_button_on.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_button_on.png rename to mods/pipeworks/textures/pipeworks_button_on.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_end.png b/mods/pipeworks/textures/pipeworks_conductor_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_end.png rename to mods/pipeworks/textures/pipeworks_conductor_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_inv.png b/mods/pipeworks/textures/pipeworks_conductor_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_inv.png rename to mods/pipeworks/textures/pipeworks_conductor_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_noctr.png b/mods/pipeworks/textures/pipeworks_conductor_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_conductor_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_on_end.png b/mods/pipeworks/textures/pipeworks_conductor_tube_on_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_on_end.png rename to mods/pipeworks/textures/pipeworks_conductor_tube_on_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_on_noctr.png b/mods/pipeworks/textures/pipeworks_conductor_tube_on_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_on_noctr.png rename to mods/pipeworks/textures/pipeworks_conductor_tube_on_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_on_plain.png b/mods/pipeworks/textures/pipeworks_conductor_tube_on_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_on_plain.png rename to mods/pipeworks/textures/pipeworks_conductor_tube_on_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_plain.png b/mods/pipeworks/textures/pipeworks_conductor_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_plain.png rename to mods/pipeworks/textures/pipeworks_conductor_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_short.png b/mods/pipeworks/textures/pipeworks_conductor_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_conductor_tube_short.png rename to mods/pipeworks/textures/pipeworks_conductor_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_end.png b/mods/pipeworks/textures/pipeworks_crossing_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_end.png rename to mods/pipeworks/textures/pipeworks_crossing_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_inv.png b/mods/pipeworks/textures/pipeworks_crossing_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_inv.png rename to mods/pipeworks/textures/pipeworks_crossing_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_noctr.png b/mods/pipeworks/textures/pipeworks_crossing_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_crossing_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_plain.png b/mods/pipeworks/textures/pipeworks_crossing_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_plain.png rename to mods/pipeworks/textures/pipeworks_crossing_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_short.png b/mods/pipeworks/textures/pipeworks_crossing_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_crossing_tube_short.png rename to mods/pipeworks/textures/pipeworks_crossing_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_deployer_back.png b/mods/pipeworks/textures/pipeworks_deployer_back.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_deployer_back.png rename to mods/pipeworks/textures/pipeworks_deployer_back.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_deployer_bottom.png b/mods/pipeworks/textures/pipeworks_deployer_bottom.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_deployer_bottom.png rename to mods/pipeworks/textures/pipeworks_deployer_bottom.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_deployer_front_off.png b/mods/pipeworks/textures/pipeworks_deployer_front_off.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_deployer_front_off.png rename to mods/pipeworks/textures/pipeworks_deployer_front_off.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_deployer_front_on.png b/mods/pipeworks/textures/pipeworks_deployer_front_on.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_deployer_front_on.png rename to mods/pipeworks/textures/pipeworks_deployer_front_on.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_deployer_side.png b/mods/pipeworks/textures/pipeworks_deployer_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_deployer_side.png rename to mods/pipeworks/textures/pipeworks_deployer_side.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_deployer_side1.png b/mods/pipeworks/textures/pipeworks_deployer_side1.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_deployer_side1.png rename to mods/pipeworks/textures/pipeworks_deployer_side1.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_deployer_side2.png b/mods/pipeworks/textures/pipeworks_deployer_side2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_deployer_side2.png rename to mods/pipeworks/textures/pipeworks_deployer_side2.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_deployer_top.png b/mods/pipeworks/textures/pipeworks_deployer_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_deployer_top.png rename to mods/pipeworks/textures/pipeworks_deployer_top.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_end.png b/mods/pipeworks/textures/pipeworks_detector_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_end.png rename to mods/pipeworks/textures/pipeworks_detector_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_inv.png b/mods/pipeworks/textures/pipeworks_detector_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_inv.png rename to mods/pipeworks/textures/pipeworks_detector_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_noctr.png b/mods/pipeworks/textures/pipeworks_detector_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_detector_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_plain.png b/mods/pipeworks/textures/pipeworks_detector_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_plain.png rename to mods/pipeworks/textures/pipeworks_detector_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_short.png b/mods/pipeworks/textures/pipeworks_detector_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_detector_tube_short.png rename to mods/pipeworks/textures/pipeworks_detector_tube_short.png diff --git a/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_end.png b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_end.png new file mode 100755 index 0000000..e6c2cfc Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_inv.png b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_inv.png new file mode 100755 index 0000000..7f23c8c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_noctr.png b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_noctr.png new file mode 100755 index 0000000..b58a4d3 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_plain.png b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_plain.png new file mode 100755 index 0000000..de31307 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_short.png b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_short.png new file mode 100755 index 0000000..6108485 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_short.png differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_end.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_end.png rename to mods/pipeworks/textures/pipeworks_digiline_detector_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_inv.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_inv.png rename to mods/pipeworks/textures/pipeworks_digiline_detector_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png rename to mods/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_short.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_digiline_detector_tube_short.png rename to mods/pipeworks/textures/pipeworks_digiline_detector_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_filter_input.png b/mods/pipeworks/textures/pipeworks_digiline_filter_input.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_digiline_filter_input.png rename to mods/pipeworks/textures/pipeworks_digiline_filter_input.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_filter_output.png b/mods/pipeworks/textures/pipeworks_digiline_filter_output.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_digiline_filter_output.png rename to mods/pipeworks/textures/pipeworks_digiline_filter_output.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_filter_side.png b/mods/pipeworks/textures/pipeworks_digiline_filter_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_digiline_filter_side.png rename to mods/pipeworks/textures/pipeworks_digiline_filter_side.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_digiline_filter_top.png b/mods/pipeworks/textures/pipeworks_digiline_filter_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_digiline_filter_top.png rename to mods/pipeworks/textures/pipeworks_digiline_filter_top.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_dispenser_back.png b/mods/pipeworks/textures/pipeworks_dispenser_back.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_dispenser_back.png rename to mods/pipeworks/textures/pipeworks_dispenser_back.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_dispenser_bottom.png b/mods/pipeworks/textures/pipeworks_dispenser_bottom.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_dispenser_bottom.png rename to mods/pipeworks/textures/pipeworks_dispenser_bottom.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_dispenser_front_off.png b/mods/pipeworks/textures/pipeworks_dispenser_front_off.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_dispenser_front_off.png rename to mods/pipeworks/textures/pipeworks_dispenser_front_off.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_dispenser_front_on.png b/mods/pipeworks/textures/pipeworks_dispenser_front_on.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_dispenser_front_on.png rename to mods/pipeworks/textures/pipeworks_dispenser_front_on.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_dispenser_side1.png b/mods/pipeworks/textures/pipeworks_dispenser_side1.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_dispenser_side1.png rename to mods/pipeworks/textures/pipeworks_dispenser_side1.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_dispenser_side2.png b/mods/pipeworks/textures/pipeworks_dispenser_side2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_dispenser_side2.png rename to mods/pipeworks/textures/pipeworks_dispenser_side2.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_dispenser_top.png b/mods/pipeworks/textures/pipeworks_dispenser_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_dispenser_top.png rename to mods/pipeworks/textures/pipeworks_dispenser_top.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_entry_panel.png b/mods/pipeworks/textures/pipeworks_entry_panel.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_entry_panel.png rename to mods/pipeworks/textures/pipeworks_entry_panel.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_filter_input.png b/mods/pipeworks/textures/pipeworks_filter_input.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_filter_input.png rename to mods/pipeworks/textures/pipeworks_filter_input.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_filter_output.png b/mods/pipeworks/textures/pipeworks_filter_output.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_filter_output.png rename to mods/pipeworks/textures/pipeworks_filter_output.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_filter_side.png b/mods/pipeworks/textures/pipeworks_filter_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_filter_side.png rename to mods/pipeworks/textures/pipeworks_filter_side.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_filter_top.png b/mods/pipeworks/textures/pipeworks_filter_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_filter_top.png rename to mods/pipeworks/textures/pipeworks_filter_top.png diff --git a/mods/pipeworks/textures/pipeworks_flow_sensor_off.png b/mods/pipeworks/textures/pipeworks_flow_sensor_off.png new file mode 100755 index 0000000..153c3f8 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_flow_sensor_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_flow_sensor_on.png b/mods/pipeworks/textures/pipeworks_flow_sensor_on.png new file mode 100755 index 0000000..43ded0c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_flow_sensor_on.png differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_fountainhead.png b/mods/pipeworks/textures/pipeworks_fountainhead.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_fountainhead.png rename to mods/pipeworks/textures/pipeworks_fountainhead.png diff --git a/mods/pipeworks/textures/pipeworks_gear.png b/mods/pipeworks/textures/pipeworks_gear.png new file mode 100755 index 0000000..584f9a5 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_gear.png differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_grating_sides.png b/mods/pipeworks/textures/pipeworks_grating_sides.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_grating_sides.png rename to mods/pipeworks/textures/pipeworks_grating_sides.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_grating_top.png b/mods/pipeworks/textures/pipeworks_grating_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_grating_top.png rename to mods/pipeworks/textures/pipeworks_grating_top.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_green.png b/mods/pipeworks/textures/pipeworks_green.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_green.png rename to mods/pipeworks/textures/pipeworks_green.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_lua_tube_port_burnt.png b/mods/pipeworks/textures/pipeworks_lua_tube_port_burnt.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_lua_tube_port_burnt.png rename to mods/pipeworks/textures/pipeworks_lua_tube_port_burnt.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_lua_tube_port_off.png b/mods/pipeworks/textures/pipeworks_lua_tube_port_off.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_lua_tube_port_off.png rename to mods/pipeworks/textures/pipeworks_lua_tube_port_off.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_lua_tube_port_on.png b/mods/pipeworks/textures/pipeworks_lua_tube_port_on.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_lua_tube_port_on.png rename to mods/pipeworks/textures/pipeworks_lua_tube_port_on.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_filter_input.png b/mods/pipeworks/textures/pipeworks_mese_filter_input.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_filter_input.png rename to mods/pipeworks/textures/pipeworks_mese_filter_input.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_filter_output.png b/mods/pipeworks/textures/pipeworks_mese_filter_output.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_filter_output.png rename to mods/pipeworks/textures/pipeworks_mese_filter_output.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_filter_side.png b/mods/pipeworks/textures/pipeworks_mese_filter_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_filter_side.png rename to mods/pipeworks/textures/pipeworks_mese_filter_side.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_filter_top.png b/mods/pipeworks/textures/pipeworks_mese_filter_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_filter_top.png rename to mods/pipeworks/textures/pipeworks_mese_filter_top.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_end.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_end.png rename to mods/pipeworks/textures/pipeworks_mese_sand_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_inv.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_inv.png rename to mods/pipeworks/textures/pipeworks_mese_sand_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_noctr.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_mese_sand_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_plain.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_plain.png rename to mods/pipeworks/textures/pipeworks_mese_sand_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_short.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_sand_tube_short.png rename to mods/pipeworks/textures/pipeworks_mese_sand_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_end.png b/mods/pipeworks/textures/pipeworks_mese_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_end.png rename to mods/pipeworks/textures/pipeworks_mese_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_inv.png b/mods/pipeworks/textures/pipeworks_mese_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_inv.png rename to mods/pipeworks/textures/pipeworks_mese_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_1.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_1.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_1.png rename to mods/pipeworks/textures/pipeworks_mese_tube_noctr_1.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_2.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_2.png rename to mods/pipeworks/textures/pipeworks_mese_tube_noctr_2.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_3.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_3.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_3.png rename to mods/pipeworks/textures/pipeworks_mese_tube_noctr_3.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_4.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_4.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_4.png rename to mods/pipeworks/textures/pipeworks_mese_tube_noctr_4.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_5.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_5.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_5.png rename to mods/pipeworks/textures/pipeworks_mese_tube_noctr_5.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_6.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_6.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_noctr_6.png rename to mods/pipeworks/textures/pipeworks_mese_tube_noctr_6.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_1.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_1.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_1.png rename to mods/pipeworks/textures/pipeworks_mese_tube_plain_1.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_2.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_2.png rename to mods/pipeworks/textures/pipeworks_mese_tube_plain_2.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_3.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_3.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_3.png rename to mods/pipeworks/textures/pipeworks_mese_tube_plain_3.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_4.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_4.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_4.png rename to mods/pipeworks/textures/pipeworks_mese_tube_plain_4.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_5.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_5.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_5.png rename to mods/pipeworks/textures/pipeworks_mese_tube_plain_5.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_6.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_6.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_plain_6.png rename to mods/pipeworks/textures/pipeworks_mese_tube_plain_6.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_short.png b/mods/pipeworks/textures/pipeworks_mese_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_mese_tube_short.png rename to mods/pipeworks/textures/pipeworks_mese_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_back.png b/mods/pipeworks/textures/pipeworks_nodebreaker_back.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_back.png rename to mods/pipeworks/textures/pipeworks_nodebreaker_back.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_bottom_off.png b/mods/pipeworks/textures/pipeworks_nodebreaker_bottom_off.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_bottom_off.png rename to mods/pipeworks/textures/pipeworks_nodebreaker_bottom_off.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_bottom_on.png b/mods/pipeworks/textures/pipeworks_nodebreaker_bottom_on.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_bottom_on.png rename to mods/pipeworks/textures/pipeworks_nodebreaker_bottom_on.png diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_front_off.png b/mods/pipeworks/textures/pipeworks_nodebreaker_front_off.png new file mode 100755 index 0000000..07bad92 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_front_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_front_on.png b/mods/pipeworks/textures/pipeworks_nodebreaker_front_on.png new file mode 100755 index 0000000..927ccca Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_front_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_side1_off.png b/mods/pipeworks/textures/pipeworks_nodebreaker_side1_off.png new file mode 100755 index 0000000..259172c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_side1_off.png differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side1_on.png b/mods/pipeworks/textures/pipeworks_nodebreaker_side1_on.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side1_on.png rename to mods/pipeworks/textures/pipeworks_nodebreaker_side1_on.png diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_side2_off.png b/mods/pipeworks/textures/pipeworks_nodebreaker_side2_off.png new file mode 100755 index 0000000..e330ba0 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_side2_off.png differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side2_on.png b/mods/pipeworks/textures/pipeworks_nodebreaker_side2_on.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_side2_on.png rename to mods/pipeworks/textures/pipeworks_nodebreaker_side2_on.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_top_off.png b/mods/pipeworks/textures/pipeworks_nodebreaker_top_off.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_top_off.png rename to mods/pipeworks/textures/pipeworks_nodebreaker_top_off.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_top_on.png b/mods/pipeworks/textures/pipeworks_nodebreaker_top_on.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_nodebreaker_top_on.png rename to mods/pipeworks/textures/pipeworks_nodebreaker_top_on.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_one_way_tube_input.png b/mods/pipeworks/textures/pipeworks_one_way_tube_input.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_one_way_tube_input.png rename to mods/pipeworks/textures/pipeworks_one_way_tube_input.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_one_way_tube_output.png b/mods/pipeworks/textures/pipeworks_one_way_tube_output.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_one_way_tube_output.png rename to mods/pipeworks/textures/pipeworks_one_way_tube_output.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_one_way_tube_side.png b/mods/pipeworks/textures/pipeworks_one_way_tube_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_one_way_tube_side.png rename to mods/pipeworks/textures/pipeworks_one_way_tube_side.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_one_way_tube_top.png b/mods/pipeworks/textures/pipeworks_one_way_tube_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_one_way_tube_top.png rename to mods/pipeworks/textures/pipeworks_one_way_tube_top.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_pane_embedded_tube_ends.png b/mods/pipeworks/textures/pipeworks_pane_embedded_tube_ends.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_pane_embedded_tube_ends.png rename to mods/pipeworks/textures/pipeworks_pane_embedded_tube_ends.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_pane_embedded_tube_sides.png b/mods/pipeworks/textures/pipeworks_pane_embedded_tube_sides.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_pane_embedded_tube_sides.png rename to mods/pipeworks/textures/pipeworks_pane_embedded_tube_sides.png diff --git a/mods/pipeworks/textures/pipeworks_pipe_3_empty.png b/mods/pipeworks/textures/pipeworks_pipe_3_empty.png new file mode 100755 index 0000000..10bed65 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pipe_3_empty.png differ diff --git a/mods/pipeworks/textures/pipeworks_pipe_3_loaded.png b/mods/pipeworks/textures/pipeworks_pipe_3_loaded.png new file mode 100755 index 0000000..2bb9d4a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pipe_3_loaded.png differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_pipe_plain.png b/mods/pipeworks/textures/pipeworks_pipe_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_pipe_plain.png rename to mods/pipeworks/textures/pipeworks_pipe_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_plastic_sheeting.png b/mods/pipeworks/textures/pipeworks_plastic_sheeting.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_plastic_sheeting.png rename to mods/pipeworks/textures/pipeworks_plastic_sheeting.png diff --git a/mods/pipeworks/textures/pipeworks_pressure_gauge.png b/mods/pipeworks/textures/pipeworks_pressure_gauge.png new file mode 100755 index 0000000..08a79f0 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pressure_gauge.png differ diff --git a/mods/pipeworks/textures/pipeworks_pressure_gauge_0.png b/mods/pipeworks/textures/pipeworks_pressure_gauge_0.png new file mode 100755 index 0000000..de9d592 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pressure_gauge_0.png differ diff --git a/mods/pipeworks/textures/pipeworks_pressure_gauge_1.png b/mods/pipeworks/textures/pipeworks_pressure_gauge_1.png new file mode 100755 index 0000000..fe21ea5 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pressure_gauge_1.png differ diff --git a/mods/pipeworks/textures/pipeworks_pressure_gauge_2.png b/mods/pipeworks/textures/pipeworks_pressure_gauge_2.png new file mode 100755 index 0000000..799404c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pressure_gauge_2.png differ diff --git a/mods/pipeworks/textures/pipeworks_pressure_gauge_3.png b/mods/pipeworks/textures/pipeworks_pressure_gauge_3.png new file mode 100755 index 0000000..00a2ca9 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pressure_gauge_3.png differ diff --git a/mods/pipeworks/textures/pipeworks_pressure_gauge_4.png b/mods/pipeworks/textures/pipeworks_pressure_gauge_4.png new file mode 100755 index 0000000..34a1787 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pressure_gauge_4.png differ diff --git a/mods/pipeworks/textures/pipeworks_pressure_gauge_5.png b/mods/pipeworks/textures/pipeworks_pressure_gauge_5.png new file mode 100755 index 0000000..63caacf Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pressure_gauge_5.png differ diff --git a/mods/pipeworks/textures/pipeworks_pressure_gauge_6.png b/mods/pipeworks/textures/pipeworks_pressure_gauge_6.png new file mode 100755 index 0000000..2627860 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pressure_gauge_6.png differ diff --git a/mods/pipeworks/textures/pipeworks_pump_off.png b/mods/pipeworks/textures/pipeworks_pump_off.png new file mode 100755 index 0000000..8c683bc Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pump_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_pump_on.png b/mods/pipeworks/textures/pipeworks_pump_on.png new file mode 100755 index 0000000..fb0539e Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pump_on.png differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_red.png b/mods/pipeworks/textures/pipeworks_red.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_red.png rename to mods/pipeworks/textures/pipeworks_red.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_end.png b/mods/pipeworks/textures/pipeworks_sand_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_end.png rename to mods/pipeworks/textures/pipeworks_sand_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_inv.png b/mods/pipeworks/textures/pipeworks_sand_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_inv.png rename to mods/pipeworks/textures/pipeworks_sand_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_noctr.png b/mods/pipeworks/textures/pipeworks_sand_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_sand_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_plain.png b/mods/pipeworks/textures/pipeworks_sand_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_plain.png rename to mods/pipeworks/textures/pipeworks_sand_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_short.png b/mods/pipeworks/textures/pipeworks_sand_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_sand_tube_short.png rename to mods/pipeworks/textures/pipeworks_sand_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_spigot.png b/mods/pipeworks/textures/pipeworks_spigot.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_spigot.png rename to mods/pipeworks/textures/pipeworks_spigot.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_back.png b/mods/pipeworks/textures/pipeworks_storage_tank_back.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_back.png rename to mods/pipeworks/textures/pipeworks_storage_tank_back.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_fittings.png b/mods/pipeworks/textures/pipeworks_storage_tank_fittings.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_fittings.png rename to mods/pipeworks/textures/pipeworks_storage_tank_fittings.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_0.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_0.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_0.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_0.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_1.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_1.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_1.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_1.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_10.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_10.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_10.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_10.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_2.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_2.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_2.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_3.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_3.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_3.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_3.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_4.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_4.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_4.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_4.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_5.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_5.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_5.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_5.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_6.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_6.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_6.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_6.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_7.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_7.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_7.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_7.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_8.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_8.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_8.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_8.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_9.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_9.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_storage_tank_front_9.png rename to mods/pipeworks/textures/pipeworks_storage_tank_front_9.png diff --git a/mods/pipeworks/textures/pipeworks_straight_pipe_empty.png b/mods/pipeworks/textures/pipeworks_straight_pipe_empty.png new file mode 100755 index 0000000..3b312d0 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_straight_pipe_empty.png differ diff --git a/mods/pipeworks/textures/pipeworks_straight_pipe_loaded.png b/mods/pipeworks/textures/pipeworks_straight_pipe_loaded.png new file mode 100755 index 0000000..96e8e04 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_straight_pipe_loaded.png differ diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_end.png b/mods/pipeworks/textures/pipeworks_teleport_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_end.png rename to mods/pipeworks/textures/pipeworks_teleport_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_inv.png b/mods/pipeworks/textures/pipeworks_teleport_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_inv.png rename to mods/pipeworks/textures/pipeworks_teleport_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_noctr.png b/mods/pipeworks/textures/pipeworks_teleport_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_teleport_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_plain.png b/mods/pipeworks/textures/pipeworks_teleport_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_plain.png rename to mods/pipeworks/textures/pipeworks_teleport_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_short.png b/mods/pipeworks/textures/pipeworks_teleport_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_teleport_tube_short.png rename to mods/pipeworks/textures/pipeworks_teleport_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_testobject.png b/mods/pipeworks/textures/pipeworks_testobject.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_testobject.png rename to mods/pipeworks/textures/pipeworks_testobject.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_trashcan_bottom.png b/mods/pipeworks/textures/pipeworks_trashcan_bottom.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_trashcan_bottom.png rename to mods/pipeworks/textures/pipeworks_trashcan_bottom.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_trashcan_side.png b/mods/pipeworks/textures/pipeworks_trashcan_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_trashcan_side.png rename to mods/pipeworks/textures/pipeworks_trashcan_side.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_tube_connection_metallic.png b/mods/pipeworks/textures/pipeworks_tube_connection_metallic.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_tube_connection_metallic.png rename to mods/pipeworks/textures/pipeworks_tube_connection_metallic.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_tube_connection_stony.png b/mods/pipeworks/textures/pipeworks_tube_connection_stony.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_tube_connection_stony.png rename to mods/pipeworks/textures/pipeworks_tube_connection_stony.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_tube_connection_wooden.png b/mods/pipeworks/textures/pipeworks_tube_connection_wooden.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_tube_connection_wooden.png rename to mods/pipeworks/textures/pipeworks_tube_connection_wooden.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_tube_end.png b/mods/pipeworks/textures/pipeworks_tube_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_tube_end.png rename to mods/pipeworks/textures/pipeworks_tube_end.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_tube_inv.png b/mods/pipeworks/textures/pipeworks_tube_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_tube_inv.png rename to mods/pipeworks/textures/pipeworks_tube_inv.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_tube_noctr.png b/mods/pipeworks/textures/pipeworks_tube_noctr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_tube_noctr.png rename to mods/pipeworks/textures/pipeworks_tube_noctr.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_tube_plain.png b/mods/pipeworks/textures/pipeworks_tube_plain.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_tube_plain.png rename to mods/pipeworks/textures/pipeworks_tube_plain.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_tube_short.png b/mods/pipeworks/textures/pipeworks_tube_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_tube_short.png rename to mods/pipeworks/textures/pipeworks_tube_short.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_tube_transparent.png b/mods/pipeworks/textures/pipeworks_tube_transparent.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_tube_transparent.png rename to mods/pipeworks/textures/pipeworks_tube_transparent.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_valve.png b/mods/pipeworks/textures/pipeworks_valve.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_valve.png rename to mods/pipeworks/textures/pipeworks_valve.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_white.png b/mods/pipeworks/textures/pipeworks_white.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_white.png rename to mods/pipeworks/textures/pipeworks_white.png diff --git a/mods/ITEMS/pipeworks/textures/pipeworks_yellow.png b/mods/pipeworks/textures/pipeworks_yellow.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/textures/pipeworks_yellow.png rename to mods/pipeworks/textures/pipeworks_yellow.png diff --git a/mods/pipeworks/todo/pressure_logic.txt b/mods/pipeworks/todo/pressure_logic.txt new file mode 100755 index 0000000..60884e1 --- /dev/null +++ b/mods/pipeworks/todo/pressure_logic.txt @@ -0,0 +1,33 @@ +-- (may not be possible) stop removing water nodes that were not placed by outputs when off +In non-finite mode, spigots and fountainheads will vanish water sources in their output positions, even if those output nodes did not place them there. +This is annoying though not game-breaking in non-finite mode, where water sources can at least be easily replenished. +Fixing this would require some kind of metadata marker on water nodes placed by spigots and fountains, such that only water sources placed while the device is "on" are removed when it is "off". +It is debateable whether existing water sources should be marked for removal when the device turns on again. + +-- Make spigots and fountainheads deactivate by placing a flowing water node +Currently, in non-finite mode, the spigots and fountainheads react to pressure dropping below threshold by deleting the water source they placed. +VanessaE would like this changed so that these nodes replace the water source with a flowing water source, such that it drains away at the same rate as surrounding water. +This should be a simple case of modifying the cleanup handler that is installed for these nodes by the helper that they use, to place flowing water instead of air in the situations where it would normally do so. + +-- Decorative grating functionality +The decorative grating block currently is just that - purely decorative, it serves no purpose. +VanessaE would like this to function as an output with the following properties: +* While on, tries to randomly place a water source in an adjacent node every ABM interval, preferring to place it downwards first. +* Even with multiple water source nodes placed, only drains 1 unit pressure per ABM interval in non-finite mode. Finite mode will cause it to drain 1 unit per water source node placed and simply stop placing sources when below threshold pressure, like spigots and fountainheads already do. +* When turning off in non-finite mode, for all neighbour nodes, replace the water sources with flowing water as discussed above, but *only* if those neighbouring sources do not have any water source neighbours of their own in turn - this will prevent the block from creating a "hole" in a uniform pool of water sources. + + + +-- Support for other fluids in pipes (Feature request/wish list) +Various sources from IRC and github issues have indicated that the ability to carry amounts of substance other than water through pipes would see uses appear for it if it were implemented (there does not appear to be anything trying to do so right now). +Extending the pressure mechanism to handle new fluids would be simple enough, it would just have to deal with more variables. +However, this feature raises the question of how to handle mixtures of fluids in pipes. + +Two possible solutions appear evident: ++ Don't mix at all. For each flowable registered, either a variant would be created for each supported liquid, or each node would declare which fluid it carries explicitly. Flowable nodes for different fluids would not interact with each other at all. + ++ Equalise "pressure" of multiple fluid variables in a similar manner to how the single water pressure value is currently balanced out, however this raises the issue of how to deal with mixtures - for instance, how is a spigot to function with a mixed liquid? does it simply refuse to function if it doesn't know how to deal with a certain mixture (as it can only output whole nodes)? likewise for certain mixtures in pipes, should it be allowed for lava and water for instance to mix like they don't interact at all? + +This mechanism also hints at a weakness of the pressure logic mechanism as it currently stands - namely that liquids are handled like gases and assumed to be compressible. + + diff --git a/mods/pipeworks/trashcan.lua b/mods/pipeworks/trashcan.lua new file mode 100755 index 0000000..8db9edf --- /dev/null +++ b/mods/pipeworks/trashcan.lua @@ -0,0 +1,50 @@ +minetest.register_node("pipeworks:trashcan", { + description = "Trash Can", + drawtype = "normal", + tiles = { + "pipeworks_trashcan_bottom.png", + "pipeworks_trashcan_bottom.png", + "pipeworks_trashcan_side.png", + "pipeworks_trashcan_side.png", + "pipeworks_trashcan_side.png", + "pipeworks_trashcan_side.png", + }, + groups = {snappy = 3, tubedevice = 1, tubedevice_receiver = 1}, + tube = { + insert_object = function(pos, node, stack, direction) + return ItemStack("") + end, + connect_sides = {left = 1, right = 1, front = 1, back = 1, top = 1, bottom = 1}, + priority = 1, -- Lower than anything else + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", + "size[8,7]".. + "item_image[0,0;1,1;pipeworks:trashcan]".. + "label[1,0;Trash Can]".. + "list[context;trash;3.5,1;1,1;]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + default.get_hotbar_bg(0,3) .. + "list[current_player;main;0,3;8,4;]" .. + "listring[]") + meta:set_string("infotext", "Trash Can") + meta:get_inventory():set_size("trash", 1) + end, + after_place_node = pipeworks.after_place, + after_dig_node = pipeworks.after_dig, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.get_meta(pos):get_inventory():set_stack(listname, index, ItemStack("")) + end, +}) + +minetest.register_craft({ + output = "pipeworks:trashcan", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "default:steel_ingot", "", "default:steel_ingot" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + }, +}) diff --git a/mods/ITEMS/pipeworks/tube_registration.lua b/mods/pipeworks/tube_registration.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/pipeworks/tube_registration.lua rename to mods/pipeworks/tube_registration.lua diff --git a/mods/pipeworks/vacuum_tubes.lua b/mods/pipeworks/vacuum_tubes.lua new file mode 100755 index 0000000..211c3ee --- /dev/null +++ b/mods/pipeworks/vacuum_tubes.lua @@ -0,0 +1,118 @@ +if pipeworks.enable_sand_tube then + pipeworks.register_tube("pipeworks:sand_tube", { + description = "Vacuuming Pneumatic Tube Segment", + inventory_image = "pipeworks_sand_tube_inv.png", + short = "pipeworks_sand_tube_short.png", + noctr = {"pipeworks_sand_tube_noctr.png"}, + plain = {"pipeworks_sand_tube_plain.png"}, + ends = {"pipeworks_sand_tube_end.png"}, + node_def = {groups = {vacuum_tube = 1}}, + }) + + minetest.register_craft( { + output = "pipeworks:sand_tube_1 2", + recipe = { + {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting"}, + {"group:sand", "group:sand", "group:sand"}, + {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting"} + }, + }) + + minetest.register_craft( { + output = "pipeworks:sand_tube_1", + recipe = { + {"group:sand", "pipeworks:tube_1", "group:sand"}, + }, + }) +end + +if pipeworks.enable_mese_sand_tube then + pipeworks.register_tube("pipeworks:mese_sand_tube", { + description = "Adjustable Vacuuming Pneumatic Tube Segment", + inventory_image = "pipeworks_mese_sand_tube_inv.png", + short = "pipeworks_mese_sand_tube_short.png", + noctr = {"pipeworks_mese_sand_tube_noctr.png"}, + plain = {"pipeworks_mese_sand_tube_plain.png"}, + ends = {"pipeworks_mese_sand_tube_end.png"}, + node_def = { + groups = {vacuum_tube = 1}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_int("dist", 0) + meta:set_string("formspec", "size[2.1,0.8]".. + "image[0,0;1,1;pipeworks_mese_sand_tube_inv.png]".. + "field[1.3,0.4;1,1;dist;radius;${dist}]".. + default.gui_bg.. + default.gui_bg_img) + meta:set_string("infotext", "Adjustable Vacuuming Pneumatic Tube Segment") + end, + on_receive_fields = function(pos,formname,fields,sender) + if not pipeworks.may_configure(pos, sender) then return end + local meta = minetest.get_meta(pos) + local dist = tonumber(fields.dist) + if dist then + dist = math.max(0, dist) + dist = math.min(8, dist) + meta:set_int("dist", dist) + meta:set_string("infotext", ("Adjustable Vacuuming Pneumatic Tube Segment (%dm)"):format(dist)) + end + end, + }, + }) + + minetest.register_craft( { + output = "pipeworks:mese_sand_tube_1 2", + recipe = { + {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + {"group:sand", "default:mese_crystal", "group:sand" }, + {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, + }) + + minetest.register_craft( { + type = "shapeless", + output = "pipeworks:mese_sand_tube_1", + recipe = { + "pipeworks:sand_tube_1", + "default:mese_crystal_fragment", + "default:mese_crystal_fragment", + "default:mese_crystal_fragment", + "default:mese_crystal_fragment" + }, + }) +end + +local function vacuum(pos, radius) + radius = radius + 0.5 + for _, object in pairs(minetest.get_objects_inside_radius(pos, math.sqrt(3) * radius)) do + local lua_entity = object:get_luaentity() + if not object:is_player() and lua_entity and lua_entity.name == "__builtin:item" then + local obj_pos = object:getpos() + local minpos = vector.subtract(pos, radius) + local maxpos = vector.add(pos, radius) + if obj_pos.x >= minpos.x and obj_pos.x <= maxpos.x + and obj_pos.y >= minpos.y and obj_pos.y <= maxpos.y + and obj_pos.z >= minpos.z and obj_pos.z <= maxpos.z then + if lua_entity.itemstring ~= "" then + pipeworks.tube_inject_item(pos, pos, vector.new(0, 0, 0), lua_entity.itemstring) + lua_entity.itemstring = "" + end + object:remove() + end + end + end +end + +minetest.register_abm({nodenames = {"group:vacuum_tube"}, + interval = 1, + chance = 1, + label = "Vacuum tubes", + action = function(pos, node, active_object_count, active_object_count_wider) + if node.name:find("pipeworks:sand_tube") then + vacuum(pos, 2) + else + local radius = minetest.get_meta(pos):get_int("dist") + vacuum(pos, radius) + end + end +}) diff --git a/mods/pipeworks/wielder.lua b/mods/pipeworks/wielder.lua new file mode 100755 index 0000000..b92176f --- /dev/null +++ b/mods/pipeworks/wielder.lua @@ -0,0 +1,508 @@ +local assumed_eye_pos = vector.new(0, 1.5, 0) + +local function vector_copy(v) + return { x = v.x, y = v.y, z = v.z } +end + +local function delay(x) + return (function() return x end) +end + +local function set_wielder_formspec(data, meta) + meta:set_string("formspec", + "invsize[8,"..(6+data.wield_inv_height)..";]".. + "item_image[0,0;1,1;"..data.name_base.."_off]".. + "label[1,0;"..minetest.formspec_escape(data.description).."]".. + "list[current_name;"..minetest.formspec_escape(data.wield_inv_name)..";"..((8-data.wield_inv_width)*0.5)..",1;"..data.wield_inv_width..","..data.wield_inv_height..";]".. + "list[current_player;main;0,"..(2+data.wield_inv_height)..";8,4;]" .. + "listring[]") + meta:set_string("infotext", data.description) +end + +local can_tool_dig_node = function(nodename, toolcaps, toolname) + --pipeworks.logger("can_tool_dig_node() STUB nodename="..tostring(nodename).." toolname="..tostring(toolname).." toolcaps: "..dump(toolcaps)) + -- brief documentation of minetest.get_dig_params() as it's not yet documented in lua_api.txt: + -- takes two arguments, a node's block groups and a tool's capabilities, + -- both as they appear in their respective definitions. + -- returns a table with the following fields: + -- diggable: boolean, can this tool dig this node at all + -- time: float, time needed to dig with this tool + -- wear: int, number of wear points to inflict on the item + local nodedef = minetest.registered_nodes[nodename] + -- don't explode due to nil def in event of unknown node! + if (nodedef == nil) then return false end + + local nodegroups = nodedef.groups + local diggable = minetest.get_dig_params(nodegroups, toolcaps).diggable + if not diggable then + -- a pickaxe can't actually dig leaves based on it's groups alone, + -- but a player holding one can - the game seems to fall back to the hand. + -- fall back to checking the hand's properties if the tool isn't the correct one. + local hand_caps = minetest.registered_items[""].tool_capabilities + diggable = minetest.get_dig_params(nodegroups, hand_caps) + end + return diggable +end + +local function wielder_on(data, wielder_pos, wielder_node) + data.fixup_node(wielder_pos, wielder_node) + if wielder_node.name ~= data.name_base.."_off" then return end + wielder_node.name = data.name_base.."_on" + minetest.swap_node(wielder_pos, wielder_node) + minetest.check_for_falling(wielder_pos) + local wielder_meta = minetest.get_meta(wielder_pos) + local inv = wielder_meta:get_inventory() + local wield_inv_name = data.wield_inv_name + local wieldindex, wieldstack + for i, stack in ipairs(inv:get_list(wield_inv_name)) do + if not stack:is_empty() then + wieldindex = i + wieldstack = stack + break + end + end + if not wieldindex then + if not data.ghost_inv_name then return end + wield_inv_name = data.ghost_inv_name + inv:set_stack(wield_inv_name, 1, ItemStack(data.ghost_tool)) + wieldindex = 1 + wieldstack = inv:get_stack(wield_inv_name, 1) + end + local dir = minetest.facedir_to_dir(wielder_node.param2) + -- under/above is currently intentionally left switched + -- even though this causes some problems with deployers and e.g. seeds + -- as there are some issues related to nodebreakers otherwise breaking 2 nodes afar. + -- solidity would have to be checked as well, + -- but would open a whole can of worms related to difference in nodebreaker/deployer behavior + -- and the problems of wielders acting on themselves if below is solid + local under_pos = vector.subtract(wielder_pos, dir) + local above_pos = vector.subtract(under_pos, dir) + local pitch + local yaw + if dir.z < 0 then + yaw = 0 + pitch = 0 + elseif dir.z > 0 then + yaw = math.pi + pitch = 0 + elseif dir.x < 0 then + yaw = 3*math.pi/2 + pitch = 0 + elseif dir.x > 0 then + yaw = math.pi/2 + pitch = 0 + elseif dir.y > 0 then + yaw = 0 + pitch = -math.pi/2 + else + yaw = 0 + pitch = math.pi/2 + end + local virtplayer = { + get_inventory_formspec = delay(wielder_meta:get_string("formspec")), + get_look_dir = delay(vector.multiply(dir, -1)), + get_look_pitch = delay(pitch), + get_look_yaw = delay(yaw), + get_player_control = delay({ jump=false, right=false, left=false, LMB=false, RMB=false, sneak=data.sneak, aux1=false, down=false, up=false }), + get_player_control_bits = delay(data.sneak and 64 or 0), + get_player_name = delay(data.masquerade_as_owner and wielder_meta:get_string("owner") or ":pipeworks:"..minetest.pos_to_string(wielder_pos)), + is_player = delay(true), + is_fake_player = true, + set_inventory_formspec = delay(), + getpos = delay(vector.subtract(wielder_pos, assumed_eye_pos)), + get_hp = delay(20), + get_inventory = delay(inv), + get_wielded_item = delay(wieldstack), + get_wield_index = delay(wieldindex), + get_wield_list = delay(wield_inv_name), + moveto = delay(), + punch = delay(), + remove = delay(), + right_click = delay(), + setpos = delay(), + set_hp = delay(), + set_properties = delay(), + set_wielded_item = function(self, item) + wieldstack = item + inv:set_stack(wield_inv_name, wieldindex, item) + end, + set_animation = delay(), + set_attach = delay(), + set_detach = delay(), + set_bone_position = delay(), + hud_change = delay(), + get_breath = delay(11), + -- TODO "implement" all these + -- set_armor_groups + -- get_armor_groups + -- get_animation + -- get_attach + -- get_bone_position + -- get_properties + -- get_player_velocity + -- set_look_pitch + -- set_look_yaw + -- set_breath + -- set_physics_override + -- get_physics_override + -- hud_add + -- hud_remove + -- hud_get + -- hud_set_flags + -- hud_get_flags + -- hud_set_hotbar_itemcount + -- hud_get_hotbar_itemcount + -- hud_set_hotbar_image + -- hud_get_hotbar_image + -- hud_set_hotbar_selected_image + -- hud_get_hotbar_selected_image + -- hud_replace_builtin + -- set_sky + -- get_sky + -- override_day_night_ratio + -- get_day_night_ratio + -- set_local_animation + } + local pointed_thing = { type="node", under=under_pos, above=above_pos } + data.act(virtplayer, pointed_thing) + if data.eject_drops then + for i, stack in ipairs(inv:get_list("main")) do + if not stack:is_empty() then + pipeworks.tube_inject_item(wielder_pos, wielder_pos, dir, stack) + inv:set_stack("main", i, ItemStack("")) + end + end + end +end + +local function wielder_off(data, pos, node) + if node.name == data.name_base.."_on" then + node.name = data.name_base.."_off" + minetest.swap_node(pos, node) + minetest.check_for_falling(pos) + end +end + +local function register_wielder(data) + data.fixup_node = data.fixup_node or function (pos, node) end + data.fixup_oldmetadata = data.fixup_oldmetadata or function (m) return m end + for _, state in ipairs({ "off", "on" }) do + local groups = { snappy=2, choppy=2, oddly_breakable_by_hand=2, mesecon=2, tubedevice=1, tubedevice_receiver=1 } + if state == "on" then groups.not_in_creative_inventory = 1 end + local tile_images = {} + for _, face in ipairs({ "top", "bottom", "side2", "side1", "back", "front" }) do + table.insert(tile_images, data.texture_base.."_"..face..(data.texture_stateful[face] and "_"..state or "")..".png") + end + minetest.register_node(data.name_base.."_"..state, { + description = data.description, + tiles = tile_images, + mesecons = { + effector = { + rules = pipeworks.rules_all, + action_on = function (pos, node) + wielder_on(data, pos, node) + end, + action_off = function (pos, node) + wielder_off(data, pos, node) + end, + }, + }, + tube = { + can_insert = function(pos, node, stack, tubedir) + if not data.tube_permit_anteroposterior_insert then + local nodedir = minetest.facedir_to_dir(node.param2) + if vector.equals(tubedir, nodedir) or vector.equals(tubedir, vector.multiply(nodedir, -1)) then + return false + end + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:room_for_item(data.wield_inv_name, stack) + end, + insert_object = function(pos, node, stack, tubedir) + if not data.tube_permit_anteroposterior_insert then + local nodedir = minetest.facedir_to_dir(node.param2) + if vector.equals(tubedir, nodedir) or vector.equals(tubedir, vector.multiply(nodedir, -1)) then + return stack + end + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:add_item(data.wield_inv_name, stack) + end, + input_inventory = data.wield_inv_name, + connect_sides = data.tube_connect_sides, + can_remove = function(pos, node, stack, tubedir) + return stack:get_count() + end, + }, + is_ground_content = true, + paramtype2 = "facedir", + tubelike = 1, + groups = groups, + sounds = default.node_sound_stone_defaults(), + drop = data.name_base.."_off", + on_construct = function(pos) + local meta = minetest.get_meta(pos) + set_wielder_formspec(data, meta) + local inv = meta:get_inventory() + inv:set_size(data.wield_inv_name, data.wield_inv_width*data.wield_inv_height) + if data.ghost_inv_name then + inv:set_size(data.ghost_inv_name, 1) + end + if data.eject_drops then + inv:set_size("main", 100) + end + end, + after_place_node = function (pos, placer) + pipeworks.scan_for_tube_objects(pos) + local placer_pos = placer:getpos() + if placer_pos and placer:is_player() then placer_pos = vector.add(placer_pos, assumed_eye_pos) end + if placer_pos then + local dir = vector.subtract(pos, placer_pos) + local node = minetest.get_node(pos) + node.param2 = minetest.dir_to_facedir(dir, true) + minetest.set_node(pos, node) + minetest.log("action", "real (6d) facedir: " .. node.param2) + end + minetest.get_meta(pos):set_string("owner", placer:get_player_name()) + end, + can_dig = (data.can_dig_nonempty_wield_inv and delay(true) or function(pos, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:is_empty(data.wield_inv_name) + end), + after_dig_node = function(pos, oldnode, oldmetadata, digger) + -- The legacy-node fixup is done here in a + -- different form from the standard fixup, + -- rather than relying on a standard fixup + -- in an on_dig callback, because some + -- non-standard diggers (such as technic's + -- mining drill) don't respect on_dig. + oldmetadata = data.fixup_oldmetadata(oldmetadata) + for _, stack in ipairs(oldmetadata.inventory[data.wield_inv_name] or {}) do + if not stack:is_empty() then + minetest.add_item(pos, stack) + end + end + pipeworks.scan_for_tube_objects(pos) + end, + on_punch = data.fixup_node, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end + return stack:get_count() + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if not pipeworks.may_configure(pos, player) then return 0 end + return count + end + }) + end +end + +if pipeworks.enable_node_breaker then + local data + -- see after end of data table for other use of these variables + local name_base = "pipeworks:nodebreaker" + local wield_inv_name = "pick" + data = { + name_base = name_base, + description = "Node Breaker", + texture_base = "pipeworks_nodebreaker", + texture_stateful = { top = true, bottom = true, side2 = true, side1 = true, front = true }, + tube_connect_sides = { top=1, bottom=1, left=1, right=1, back=1 }, + tube_permit_anteroposterior_insert = false, + wield_inv_name = wield_inv_name, + wield_inv_width = 1, + wield_inv_height = 1, + can_dig_nonempty_wield_inv = true, + ghost_inv_name = "ghost_pick", + ghost_tool = ":", -- hand by default + fixup_node = function (pos, node) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + -- Node breakers predating the visible pick slot + -- may have been partially updated. This code + -- fully updates them. Some have been observed + -- to have no pick slot at all; first add one. + if inv:get_size("pick") ~= 1 then + inv:set_size("pick", 1) + end + -- Originally, they had a ghost pick in a "pick" + -- inventory, no other inventory, and no form. + -- The partial update of early with-form node + -- breaker code gives them "ghost_pick" and "main" + -- inventories, but leaves the old ghost pick in + -- the "pick" inventory, and doesn't add a form. + -- First perform that partial update. + if inv:get_size("ghost_pick") ~= 1 then + inv:set_size("ghost_pick", 1) + inv:set_size("main", 100) + end + -- If the node breaker predates the visible pick + -- slot, which we can detect by it not having a + -- form, then the pick slot needs to be cleared + -- of the old ghost pick. + if (meta:get_string("formspec") or "") == "" then + inv:set_stack("pick", 1, ItemStack("")) + end + -- Finally, unconditionally set the formspec + -- and infotext. This not only makes the + -- pick slot visible for node breakers where + -- it wasn't before; it also updates the form + -- for node breakers that had an older version + -- of the form, and sets infotext where it was + -- missing for early with-form node breakers. + set_wielder_formspec(data, meta) + end, + fixup_oldmetadata = function (oldmetadata) + -- Node breakers predating the visible pick slot, + -- with node form, kept their ghost pick in an + -- inventory named "pick", the same name as the + -- later visible pick slot. The pick must be + -- removed to avoid spilling it. + if not oldmetadata.fields.formspec then + return { inventory = { pick = {} }, fields = oldmetadata.fields } + else + return oldmetadata + end + end, + masquerade_as_owner = true, + sneak = false, + act = function(virtplayer, pointed_thing) + --local dname = "nodebreaker.act() " + local wieldstack = virtplayer:get_wielded_item() + local oldwieldstack = ItemStack(wieldstack) + local on_use = (minetest.registered_items[wieldstack:get_name()] or {}).on_use + if on_use then + --pipeworks.logger(dname.."invoking on_use "..tostring(on_use)) + wieldstack = on_use(wieldstack, virtplayer, pointed_thing) or wieldstack + virtplayer:set_wielded_item(wieldstack) + else + local under_node = minetest.get_node(pointed_thing.under) + local on_dig = (minetest.registered_nodes[under_node.name] or {on_dig=minetest.node_dig}).on_dig + -- check that the current tool is capable of destroying the target node. + -- if we can't, don't dig, and leave the wield stack unchanged. + -- note that wieldstack:get_tool_capabilities() returns hand properties if the item has none of it's own. + if can_tool_dig_node(under_node.name, wieldstack:get_tool_capabilities(), wieldstack:get_name()) then + on_dig(pointed_thing.under, under_node, virtplayer) + wieldstack = virtplayer:get_wielded_item() + else + --pipeworks.logger(dname.."couldn't dig node!") + end + end + local wieldname = wieldstack:get_name() + if wieldname == oldwieldstack:get_name() then + -- don't mechanically wear out tool + if wieldstack:get_count() == oldwieldstack:get_count() and + wieldstack:get_metadata() == oldwieldstack:get_metadata() and + ((minetest.registered_items[wieldstack:get_name()] or {}).wear_represents or "mechanical_wear") == "mechanical_wear" then + virtplayer:set_wielded_item(oldwieldstack) + end + elseif wieldname ~= "" then + -- tool got replaced by something else: + -- treat it as a drop + virtplayer:get_inventory():add_item("main", wieldstack) + virtplayer:set_wielded_item(ItemStack("")) + end + end, + eject_drops = true, + } + register_wielder(data) + minetest.register_craft({ + output = "pipeworks:nodebreaker_off", + recipe = { + { "pipeworks:gear", "pipeworks:gear", "pipeworks:gear" }, + { "default:stone", "mesecons:piston", "default:stone" }, + { "group:wood", "mesecons:mesecon", "group:wood" }, + } + }) + -- aliases for when someone had technic installed, but then uninstalled it but not pipeworks + minetest.register_alias("technic:nodebreaker_off", "pipeworks:nodebreaker_off") + minetest.register_alias("technic:nodebreaker_on", "pipeworks:nodebreaker_on") + minetest.register_alias("technic:node_breaker_off", "pipeworks:nodebreaker_off") + minetest.register_alias("technic:node_breaker_on", "pipeworks:nodebreaker_on") + -- turn legacy auto-tree-taps into node breakers + dofile(pipeworks.modpath.."/legacy.lua") + + -- register LBM for transition to cheaper node breakers + local lbm_id = "pipeworks:refund_node_breaker_pick" + minetest.register_lbm({ + name = lbm_id, + label = "Give back mese pick for pre-transition node breakers", + run_at_every_load = false, + nodenames = { name_base.."_on", name_base.."_off" }, + action = function(pos, node) + pipeworks.logger(lbm_id.." entry, nodename="..node.name) + local invref = minetest.get_meta(pos):get_inventory() + invref:add_item(wield_inv_name, ItemStack("default:pick_mese")) + end + }) +end + +if pipeworks.enable_deployer then + register_wielder({ + name_base = "pipeworks:deployer", + description = "Deployer", + texture_base = "pipeworks_deployer", + texture_stateful = { front = true }, + tube_connect_sides = { back=1 }, + tube_permit_anteroposterior_insert = true, + wield_inv_name = "main", + wield_inv_width = 3, + wield_inv_height = 3, + can_dig_nonempty_wield_inv = false, + masquerade_as_owner = true, + sneak = false, + act = function(virtplayer, pointed_thing) + local wieldstack = virtplayer:get_wielded_item() + virtplayer:set_wielded_item((minetest.registered_items[wieldstack:get_name()] or {on_place=minetest.item_place}).on_place(wieldstack, virtplayer, pointed_thing) or wieldstack) + end, + eject_drops = false, + }) + minetest.register_craft({ + output = "pipeworks:deployer_off", + recipe = { + { "group:wood", "default:chest", "group:wood" }, + { "default:stone", "mesecons:piston", "default:stone" }, + { "default:stone", "mesecons:mesecon", "default:stone" }, + } + }) + -- aliases for when someone had technic installed, but then uninstalled it but not pipeworks + minetest.register_alias("technic:deployer_off", "pipeworks:deployer_off") + minetest.register_alias("technic:deployer_on", "pipeworks:deployer_on") +end + +if pipeworks.enable_dispenser then + register_wielder({ + name_base = "pipeworks:dispenser", + description = "Dispenser", + texture_base = "pipeworks_dispenser", + texture_stateful = { front = true }, + tube_connect_sides = { back=1 }, + tube_permit_anteroposterior_insert = true, + wield_inv_name = "main", + wield_inv_width = 3, + wield_inv_height = 3, + can_dig_nonempty_wield_inv = false, + masquerade_as_owner = false, + sneak = true, + act = function(virtplayer, pointed_thing) + local wieldstack = virtplayer:get_wielded_item() + virtplayer:set_wielded_item((minetest.registered_items[wieldstack:get_name()] or {on_drop=minetest.item_drop}).on_drop(wieldstack, virtplayer, virtplayer:getpos()) or wieldstack) + end, + eject_drops = false, + }) + minetest.register_craft({ + output = "pipeworks:dispenser_off", + recipe = { + { "default:desert_sand", "default:chest", "default:desert_sand" }, + { "default:stone", "mesecons:piston", "default:stone" }, + { "default:stone", "mesecons:mesecon", "default:stone" }, + } + }) +end diff --git a/mods/plantlife/LICENSE b/mods/plantlife/LICENSE new file mode 100755 index 0000000..594ea2a --- /dev/null +++ b/mods/plantlife/LICENSE @@ -0,0 +1,336 @@ +Sunflower model and textures by kaeza (CC-BY-SA 3.0). + +For the code, Ironzorg's textures, and everything else: WTFPL + +For Mossmanikin's mods (Ferns, Dryplans, and the components +from the Undergrowth modpack), and all of my own textures: +CC-By-SA 3.0 + +---------- + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + + This license is also known as "WTFPL" + +----------- + +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 + + "Collective Work" means a work, such as a periodical issue, +anthology or encyclopedia, in which the Work in its entirety in +unmodified form, along with one or more other contributions, +constituting separate and independent works in themselves, are +assembled into a collective whole. A work that constitutes a +Collective Work will not be considered a Derivative Work (as +defined below) for the purposes of this License. + "Creative Commons Compatible License" means a license that is +listed at http://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 derivatives of works made available +under that license under this License or either a Creative Commons +unported license or a Creative Commons jurisdiction license with +the same License Elements as this License. + "Derivative Work" means a work based upon the Work or upon the +Work and other pre-existing works, such as a translation, musical +arrangement, dramatization, fictionalization, motion picture +version, sound recording, art reproduction, abridgment, +condensation, or any other form in which the Work may be recast, +transformed, or adapted, except that a work that constitutes a +Collective Work will not be considered a Derivative Work for the +purpose of this License. For the avoidance of doubt, where the +Work is a musical composition or sound recording, the +synchronization of the Work in timed-relation with a moving image +("synching") will be considered a Derivative Work for the purpose +of this License. + "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 offers the Work under the terms of this License. + "Original Author" means the individual, individuals, entity or +entities who created the Work. + "Work" means the copyrightable work of authorship offered +under the terms of this License. + "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. + +2. Fair Use Rights. Nothing in this license is intended to reduce, +limit, or restrict any rights arising from fair use, first sale or +other limitations on the exclusive rights of the copyright owner +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 Collective Works, and to reproduce the Work as incorporated +in the Collective Works; + to create and reproduce Derivative Works provided that any +such Derivative Work, 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 copies or phonorecords of, display publicly, +perform publicly, and perform publicly by means of a digital audio +transmission the Work including as incorporated in Collective +Works; + to distribute copies or phonorecords of, display publicly, +perform publicly, and perform publicly by means of a digital audio +transmission Derivative Works. + + For the avoidance of doubt, where the Work is a musical +composition: + Performance Royalties Under Blanket Licenses. Licensor +waives the exclusive right to collect, whether individually or, in +the event that Licensor is a member of a performance rights +society (e.g. ASCAP, BMI, SESAC), via that society, royalties for +the public performance or public digital performance (e.g. +webcast) of the Work. + Mechanical Rights and Statutory Royalties. Licensor waives +the exclusive right to collect, whether individually or via a +music rights agency or designated agent (e.g. Harry Fox Agency), +royalties for any phonorecord You create from the Work ("cover +version") and distribute, subject to the compulsory license +created by 17 USC Section 115 of the US Copyright Act (or the +equivalent in other jurisdictions). + Webcasting Rights and Statutory Royalties. For the avoidance +of doubt, where the Work is a sound recording, Licensor waives the +exclusive right to collect, whether individually or via a +performance-rights society (e.g. SoundExchange), royalties for the +public digital performance (e.g. webcast) of the Work, subject to +the compulsory license created by 17 USC Section 114 of the US +Copyright Act (or the equivalent in other jurisdictions). + +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. 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, publicly display, publicly perform, or +publicly digitally perform the Work only under the terms of this +License, and You must include a copy of, or the Uniform Resource +Identifier for, this License with every copy or phonorecord of the +Work You distribute, publicly display, publicly perform, or +publicly digitally perform. You may not offer or impose any terms +on the Work that restrict the terms of this License or the ability +of a recipient of the Work to exercise of 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. When You +distribute, publicly display, publicly perform, or publicly +digitally perform the Work, You may not impose any technological +measures on the Work that restrict the ability of a recipient of +the Work from You to exercise of the rights granted to that +recipient under the terms of the License. This Section 4(a) +applies to the Work as incorporated in a Collective Work, but this +does not require the Collective Work apart from the Work itself to +be made subject to the terms of this License. If You create a +Collective Work, upon notice from any Licensor You must, to the +extent practicable, remove from the Collective Work any credit as +required by Section 4(c), as requested. If You create a Derivative +Work, upon notice from any Licensor You must, to the extent +practicable, remove from the Derivative Work any credit as +required by Section 4(c), as requested. + You may distribute, publicly display, publicly perform, or +publicly digitally perform a Derivative Work only under: (i) the +terms of this License; (ii) a later version of this License with +the same License Elements as this License; (iii) either the +Creative Commons (Unported) license or 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 (Unported)); (iv) a Creative Commons +Compatible License. If you license the Derivative Work under one +of the licenses mentioned in (iv), you must comply with the terms +of that license. If you license the Derivative Work 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 with the following provisions: +(I) You must include a copy of, or the Uniform Resource Identifier +for, the Applicable License with every copy or phonorecord of each +Derivative Work You distribute, publicly display, publicly +perform, or publicly digitally perform; (II) You may not offer or +impose any terms on the Derivative Works that restrict the terms +of the Applicable License or the ability of a recipient of the +Work 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; and, (IV) when You distribute, publicly display, +publicly perform, or publicly digitally perform the Work, You may +not impose any technological measures on the Derivative Work that +restrict the ability of a recipient of the Derivative Work from +You to exercise the rights granted to that recipient under the +terms of the Applicable License. This Section 4(b) applies to the +Derivative Work as incorporated in a Collective Work, but this +does not require the Collective Work apart from the Derivative +Work itself to be made subject to the terms of the Applicable +License. + If You distribute, publicly display, publicly perform, or +publicly digitally perform the Work (as defined in Section 1 +above) or any Derivative Works (as defined in Section 1 above) or +Collective Works (as defined in Section 1 above), 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 (ii) 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; the title of the Work if supplied; to the +extent reasonably practicable, the Uniform Resource Identifier, 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, consistent with Section +3(b) in the case of a Derivative Work, a credit identifying the +use of the Work in the Derivative Work (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 Derivative Work or Collective Work, +at a minimum such credit will appear, if a credit for all +contributing authors of the Derivative Work or Collective Work +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. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, +LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY +RIGHTS HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR +MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE +WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT +LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, 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 Derivative Works or +Collective Works 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 digitally perform the +Work (as defined in Section 1 above) or a Collective Work (as +defined in Section 1 above), 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 digitally perform a +Derivative Work, 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. + + 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 this License. + + Creative Commons may be contacted at +http://creativecommons.org/. + diff --git a/mods/plantlife/README b/mods/plantlife/README new file mode 100755 index 0000000..8c62e49 --- /dev/null +++ b/mods/plantlife/README @@ -0,0 +1,72 @@ +README file for Plantlife mod, by Vanessa Ezekowitz +--------------------------------------------------- + +Plantlife is a combined form of my Flowers and Poison Ivy mods and an expanded +version of the old Bushes mod, now called bushes_classic. The entire package +has been significantly rewritten and re-organized. This mod supplies all +three of these components and should be 100% compatible with mods that used +the old versions. + +Its purpose is to add various kinds of flowers, cotton plants, water foliage, +poison ivy, and fruit bushes, obviously. :-) All of these are spawned as +normal nodes and can be collected and used in any recipes that depend on the +old mods. + +Spawning of plants is sensitive to the amount of available light. Flowers, +cotton, and waterlilies only spawn when there at least a signficant amount of +light. Seaweed will grow only in dimly-lit areas. Poison ivy also grows only +in the daytime, but require less light than flowers. + +Growing of poison ivy will only occur for plants that are on the same surface +that is necessary for them to spawn on, so they won't grow if placed on e.g. +cobble or homedecor flower pot, etc. This doesn't affect wall-climbing poison +ivy, since it uses a different growth pattern. + +All plants use multiple controls provided by biome_lib, to keep where they +grow under control - no more random spread of plants! In addition, the density +of the plants in any region they appear in has been fixed and brought under +control. + +Poison ivy is found sparsely among junglegrass, but will not grow near flowers. + +------------------------------------------------------------------------------ + +Important details: + +Configuration: Any of the three components of this mod can be disabled +by just removing their respective directories. + +Dependencies: Just the game's default stuff. + +Recommends: Nothing in particular. + +Conflicts: This mod should not be installed alongside the original, separate +Poison Ivy, or old Bushes mods. If those exist, delete them, as this mod +supplies their functionality. If you still use the old Jungle Grass mod +either as previously supplied with this modpack, or in its standalone form, +you'll want to delete the "junglegrass" directory from this modpack to get rid +of the aliases-to-air that it supplies. + +Software Requirements: This mod requires Minetest 0.4.11 or later. It is +unlikely to work with old versions. + +------------------------------------------------------------------------------ + +Crafting: + +For crafting recipes, please see the forum thread for this modpack: + +https://forum.minetest.net/viewtopic.php?f=11&t=3898 + +------------------------------------------------------------------------------ + +Notes: + +Poison Ivy will spawn on grass and in some cases, on vertical surfaces +including trees and jungle trees where they meet the dirt or grass. Ivy +previously spawned on the ground taller/thicker or start climbing up said +vertical surfaces and trees. + +At present, the poison ivy presents little more than an annoyance - they can +only be cut down and either re-planted or thrown away. No damage is done by +harvesting them, yet. ;-) diff --git a/mods/plantlife/bushes/depends.txt b/mods/plantlife/bushes/depends.txt new file mode 100755 index 0000000..6628c82 --- /dev/null +++ b/mods/plantlife/bushes/depends.txt @@ -0,0 +1,5 @@ +default +biome_lib +plantlife_i18n +stonage? +sumpf? diff --git a/mods/plantlife/bushes/init.lua b/mods/plantlife/bushes/init.lua new file mode 100755 index 0000000..b880bd2 --- /dev/null +++ b/mods/plantlife/bushes/init.lua @@ -0,0 +1,259 @@ +-- Bushes Mod by Mossmanikin, Evergreen, & Neuromancer +-- The initial code for this was taken from Mossmanikin's Grasses Mod, then heavilly modified by Neuromancer for this mod. +-- Mossmanikin also greatly helped with providing samples for coding. +-- bush leaf textures are cc-by-sa 3.0. from VannessaE's moretrees mod. (Leaf texture created by RealBadAngel or VanessaE) +-- Branch textures created by Neuromancer. +-- Licence for Code and Non-Bush leaf code is WTFPL. + +-- support for i18n +local S = plantlife_i18n.gettext + abstract_bushes = {} + + minetest.register_node("bushes:youngtree2_bottom", { + description = S("Young Tree 2 (bottom)"), + drawtype="nodebox", + tiles = {"bushes_youngtree2trunk.png"}, + inventory_image = "bushes_youngtree2trunk_inv.png", + wield_image = "bushes_youngtree2trunk_inv.png", +paramtype = "light", + walkable = false, + is_ground_content = true, +node_box = { + type = "fixed", + fixed = { + --{0.375000,-0.500000,-0.500000,0.500000,0.500000,-0.375000}, --NodeBox 1 + {-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1 + } +}, + groups = {snappy=3,flammable=2}, + sounds = default.node_sound_leaves_defaults(), + drop = 'default:stick' +}) + + local BushBranchCenter = { {1,1}, {3,2} } +for i in pairs(BushBranchCenter) do + local Num = BushBranchCenter[i][1] + local TexNum = BushBranchCenter[i][2] + minetest.register_node("bushes:bushbranches"..Num, { + description = S("Bush Branches @1", Num), + drawtype = "nodebox", + tiles = { + "bushes_leaves_"..TexNum..".png", + "bushes_branches_center_"..TexNum..".png" + }, + node_box = { + type = "fixed", + fixed = { + {0, -1/2, -1/2, -1/4, 1/2, 1/2}, + {0, -1/2, -1/2, 1/4, 1/2, 1/2} + }, + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, 1/2, 1/2}, + }, + inventory_image = "bushes_branches_center_"..TexNum..".png", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + groups = { + -- tree=1, -- MM: disabled because some recipes use group:tree for trunks + snappy=3, + flammable=2, + leaves=1 + }, + sounds = default.node_sound_leaves_defaults(), + drop = 'default:stick 4' + }) +end + +local BushBranchSide = { {2,1}, {4,2} } +for i in pairs(BushBranchSide) do + local Num = BushBranchSide[i][1] + local TexNum = BushBranchSide[i][2] + minetest.register_node("bushes:bushbranches"..Num, { + description = S("Bush Branches @1", Num), + drawtype = "nodebox", + tiles = { +--[[top]] "bushes_leaves_"..TexNum..".png", +--[[bottom]]"bushes_branches_center_"..TexNum..".png", +--[[right]] "bushes_branches_left_"..TexNum..".png", +--[[left]] "bushes_branches_right_"..TexNum..".png", -- MM: We could also mirror the previous here, +--[[back]] "bushes_branches_center_"..TexNum..".png",-- unless U really want 'em 2 B different +--[[front]] "bushes_branches_right_"..TexNum..".png" + }, + node_box = { + type = "fixed", + fixed = { +-- { left , bottom , front, right , top , back } + {0.137748,-0.491944, 0.5 ,-0.125000,-0.179444,-0.007790}, --NodeBox 1 + {0.262748,-0.185995, 0.5 ,-0.237252, 0.126505,-0.260269}, --NodeBox 2 + {0.500000, 0.125000, 0.5 ,-0.500000, 0.500000,-0.500000}, --NodeBox 3 + }, + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, 1/2, 1/2}, + }, + inventory_image = "bushes_branches_right_"..TexNum..".png", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + groups = { + -- tree=1, -- MM: disabled because some recipes use group:tree for trunks + snappy=3, + flammable=2, + leaves=1 + }, + sounds = default.node_sound_leaves_defaults(), + drop = 'default:stick 3' + }) +end + +local BushLeafNode = { {1}, {2}} +for i in pairs(BushLeafNode) do + local Num = BushLeafNode[i][1] + minetest.register_node("bushes:BushLeaves"..Num, { + description = S("Bush Leaves @1", Num), + drawtype = "allfaces_optional", + tiles = {"bushes_leaves_"..Num..".png"}, + paramtype = "light", + groups = { -- MM: Should we add leafdecay? + snappy=3, + flammable=2, + attached_node=1 + }, + sounds = default.node_sound_leaves_defaults(), + }) +end + +abstract_bushes.grow_bush = function(pos) + local leaf_type = math.random(1,2) + local bush_side_height = math.random(0,1) + local chance_of_bush_node_right = math.random(1,10) + if chance_of_bush_node_right> 5 then + local right_pos = {x=pos.x+1, y=pos.y+bush_side_height, z=pos.z} + abstract_bushes.grow_bush_node(right_pos,3,leaf_type) + end + local chance_of_bush_node_left = math.random(1,10) + if chance_of_bush_node_left> 5 then + bush_side_height = math.random(0,1) + local left_pos = {x=pos.x-1, y=pos.y+bush_side_height, z=pos.z} + abstract_bushes.grow_bush_node(left_pos,1,leaf_type) + end + local chance_of_bush_node_front = math.random(1,10) + if chance_of_bush_node_front> 5 then + bush_side_height = math.random(0,1) + local front_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z+1} + abstract_bushes.grow_bush_node(front_pos,2,leaf_type) + end + local chance_of_bush_node_back = math.random(1,10) + if chance_of_bush_node_back> 5 then + bush_side_height = math.random(0,1) + local back_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z-1} + abstract_bushes.grow_bush_node(back_pos,0,leaf_type) + end + +abstract_bushes.grow_bush_node(pos,5,leaf_type) +end + +abstract_bushes.grow_bush_node = function(pos,dir, leaf_type) + + + local right_here = {x=pos.x, y=pos.y+1, z=pos.z} + local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z} + + local bush_branch_type = 2 + + -- MM: I'm not sure if it's slower now than before... + if dir ~= 5 and leaf_type == 1 then + bush_branch_type = 2 + end + if dir ~= 5 and leaf_type == 2 then + bush_branch_type = 4 + end + if dir == 5 and leaf_type == 1 then + bush_branch_type = 1 + dir = 1 + end + if dir == 5 and leaf_type == 2 then + bush_branch_type = 3 + dir = 1 + end + + if minetest.get_node(right_here).name == "air" -- instead of check_air = true, + or minetest.get_node(right_here).name == "default:junglegrass" then + minetest.set_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir}) + --minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")") + minetest.set_node(above_right_here, {name="bushes:BushLeaves"..leaf_type}) + local chance_of_high_leaves = math.random(1,10) + if chance_of_high_leaves> 5 then + local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z} + --minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")") + minetest.set_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type}) + end + end +end + + +biome_lib:register_generate_plant({ + surface = { + "default:dirt_with_grass", + "stoneage:grass_with_silex", + "sumpf:peat", + "sumpf:sumpf" + }, + max_count = 15, --10,15 + rarity = 101 - 4, --3,4 + min_elevation = 1, -- above sea level + plantlife_limit = -0.9, + }, + abstract_bushes.grow_bush +) + + abstract_bushes.grow_youngtree2 = function(pos) + local height = math.random(4,5) + abstract_bushes.grow_youngtree_node2(pos,height) +end + +abstract_bushes.grow_youngtree_node2 = function(pos, height) + + + local right_here = {x=pos.x, y=pos.y+1, z=pos.z} + local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z} + local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z} + local three_above_right_here = {x=pos.x, y=pos.y+4, z=pos.z} + + if minetest.get_node(right_here).name == "air" -- instead of check_air = true, + or minetest.get_node(right_here).name == "default:junglegrass" then + if height == 4 then + local two_above_right_here_south = {x=pos.x, y=pos.y+3, z=pos.z-1} + local three_above_right_here_south = {x=pos.x, y=pos.y+4, z=pos.z-1} + minetest.set_node(right_here, {name="bushes:youngtree2_bottom"}) + minetest.set_node(above_right_here, {name="bushes:youngtree2_bottom"}) + minetest.set_node(two_above_right_here, {name="bushes:bushbranches2" , param2=2}) + minetest.set_node(two_above_right_here_south, {name="bushes:bushbranches2" , param2=0}) + minetest.set_node(three_above_right_here, {name="bushes:BushLeaves1" }) + minetest.set_node(three_above_right_here_south, {name="bushes:BushLeaves1" }) + end + + end +end + + +biome_lib:register_generate_plant({ + surface = { + "default:dirt_with_grass", + "stoneage:grass_with_silex", + "sumpf:peat", + "sumpf:sumpf" + }, + max_count = 55, --10,15 + rarity = 101 - 4, --3,4 + min_elevation = 1, -- above sea level + plantlife_limit = -0.9, + }, + abstract_bushes.grow_youngtree2 +) + + --http://dev.minetest.net/Node_Drawtypes diff --git a/mods/plantlife/bushes/textures/bushes_branches_center_1.png b/mods/plantlife/bushes/textures/bushes_branches_center_1.png new file mode 100755 index 0000000..bac3ee4 Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_branches_center_1.png differ diff --git a/mods/plantlife/bushes/textures/bushes_branches_center_2.png b/mods/plantlife/bushes/textures/bushes_branches_center_2.png new file mode 100755 index 0000000..c21edf6 Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_branches_center_2.png differ diff --git a/mods/plantlife/bushes/textures/bushes_branches_left_1.png b/mods/plantlife/bushes/textures/bushes_branches_left_1.png new file mode 100755 index 0000000..120f100 Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_branches_left_1.png differ diff --git a/mods/plantlife/bushes/textures/bushes_branches_left_2.png b/mods/plantlife/bushes/textures/bushes_branches_left_2.png new file mode 100755 index 0000000..1c17bac Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_branches_left_2.png differ diff --git a/mods/plantlife/bushes/textures/bushes_branches_right_1.png b/mods/plantlife/bushes/textures/bushes_branches_right_1.png new file mode 100755 index 0000000..af5de67 Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_branches_right_1.png differ diff --git a/mods/plantlife/bushes/textures/bushes_branches_right_2.png b/mods/plantlife/bushes/textures/bushes_branches_right_2.png new file mode 100755 index 0000000..8fb8332 Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_branches_right_2.png differ diff --git a/mods/plantlife/bushes/textures/bushes_leaves_1.png b/mods/plantlife/bushes/textures/bushes_leaves_1.png new file mode 100755 index 0000000..594c958 Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_leaves_1.png differ diff --git a/mods/plantlife/bushes/textures/bushes_leaves_2.png b/mods/plantlife/bushes/textures/bushes_leaves_2.png new file mode 100755 index 0000000..e6de482 Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_leaves_2.png differ diff --git a/mods/plantlife/bushes/textures/bushes_youngtree2trunk.png b/mods/plantlife/bushes/textures/bushes_youngtree2trunk.png new file mode 100755 index 0000000..ea685e3 Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_youngtree2trunk.png differ diff --git a/mods/plantlife/bushes/textures/bushes_youngtree2trunk_inv.png b/mods/plantlife/bushes/textures/bushes_youngtree2trunk_inv.png new file mode 100755 index 0000000..7d6728f Binary files /dev/null and b/mods/plantlife/bushes/textures/bushes_youngtree2trunk_inv.png differ diff --git a/mods/plantlife/copyright.txt b/mods/plantlife/copyright.txt new file mode 100755 index 0000000..63d2431 --- /dev/null +++ b/mods/plantlife/copyright.txt @@ -0,0 +1,10 @@ +Ironzorg's Flowers mod served as the basis for the three mods that eventually +went into creating this file. Any code still remaining from that mod is +entirely his work (though I'm pretty sure it's all been phased out). + +Flowers textures by Ironzorg. + +Junglegrass textures are modified copies of the original one from the game's +default set. + +All remaining code, textures, etc. by Vanessa Ezekowitz. diff --git a/mods/plantlife/dryplants/crafting.lua b/mods/plantlife/dryplants/crafting.lua new file mode 100755 index 0000000..0a188e7 --- /dev/null +++ b/mods/plantlife/dryplants/crafting.lua @@ -0,0 +1,360 @@ +----------------------------------------------------------------------------------------------- +-- Dry Plants - Recipes 0.1.0 -- Short Grass -> Dirt +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- License (everything): WTFPL +-- Looked at code from: darkage, default, farming, sickle, stairs +-- Dependencies: default, farming +-- Supports: flint, stoneage, sumpf +----------------------------------------------------------------------------------------------- + +----------------------------------------------------------------------------------------------- +-- Short Grass +----------------------------------------------------------------------------------------------- +minetest.register_craft({ + output = "default:dirt", + recipe = { + {"dryplants:grass_short"}, + } +}) + +----------------------------------------------------------------------------------------------- +-- Cut Grass +----------------------------------------------------------------------------------------------- +-- grass recipes (remove roots) +minetest.register_craft({ + output = "dryplants:grass", + recipe = { + {"default:grass_1"}, + } +}) +minetest.register_craft({ + output = "dryplants:grass", + recipe = { + {"default:junglegrass"}, + } +}) +if minetest.get_modpath("sumpf") ~= nil then + minetest.register_craft({ + output = "dryplants:grass", + recipe = { + {"sumpf:gras"}, + } + }) +end + +----------------------------------------------------------------------------------------------- +-- Sickle +----------------------------------------------------------------------------------------------- +minetest.register_craft({ + output = "dryplants:sickle", + recipe = { + {"group:stone",""}, + {"", "default:stick"}, + {"default:stick",""} + } +}) +if minetest.get_modpath("flint") ~= nil then + minetest.register_craft({ + output = "dryplants:sickle", + recipe = { + {"flint:flintstone",""}, + {"", "default:stick"}, + {"default:stick",""} + } + }) +end +if minetest.get_modpath("stoneage") ~= nil then + minetest.register_craft({ + output = "dryplants:sickle", + recipe = { + {"stoneage:silex",""}, + {"", "default:stick"}, + {"default:stick",""} + } + }) +end + +----------------------------------------------------------------------------------------------- +-- Hay +----------------------------------------------------------------------------------------------- +--cooking +minetest.register_craft({ + type = "cooking", + output = "dryplants:hay", + recipe = "dryplants:grass", + cooktime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "dryplants:hay", + burntime = 1, +}) + +----------------------------------------------------------------------------------------------- +-- Wet Reed +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- papyrus -> wetreed + output = "dryplants:wetreed 2", + recipe = { + {"default:papyrus","default:papyrus"}, + {"default:papyrus","default:papyrus"}, + } +}) +minetest.register_craft({ -- reedmace_sapling -> wetreed + output = "dryplants:wetreed 2", + recipe = { + {"dryplants:reedmace_sapling","dryplants:reedmace_sapling"}, + {"dryplants:reedmace_sapling","dryplants:reedmace_sapling"}, + } +}) +minetest.register_craft({ -- reedmace_top -> wetreed + output = "dryplants:wetreed 2", + recipe = { + {"dryplants:reedmace_top","dryplants:reedmace_top"}, + {"dryplants:reedmace_top","dryplants:reedmace_top"}, + } +}) +minetest.register_craft({ -- reedmace -> wetreed + output = "dryplants:wetreed 2", + recipe = { + {"dryplants:reedmace","dryplants:reedmace"}, + {"dryplants:reedmace","dryplants:reedmace"}, + } +}) +minetest.register_craft({ -- reedmace_bottom -> wetreed + output = "dryplants:wetreed 2", + recipe = { + {"dryplants:reedmace_bottom","dryplants:reedmace_bottom"}, + {"dryplants:reedmace_bottom","dryplants:reedmace_bottom"}, + } +}) + + +local ReeD = { + {"wetreed"}, + {"reed"} +} +for i in pairs(ReeD) do + local reed = "dryplants:"..ReeD[i][1] + local slab = reed.."_slab" + local roof = reed.."_roof" + local corner = roof.."_corner" + local corner_2 = corner.."_2" +----------------------------------------------------------------------------------------------- +-- Block +----------------------------------------------------------------------------------------------- + minetest.register_craft({ -- slab -> block + output = reed, + recipe = { + {slab}, + {slab}, + } + }) + minetest.register_craft({ -- roof -> block + output = reed, + recipe = { + {roof}, + {roof}, + } + }) + minetest.register_craft({ -- corner -> block + type = "shapeless", + output = reed.." 3", + recipe = {corner,corner,corner,corner,corner,corner,corner,corner}, -- 8x + }) + minetest.register_craft({ -- corner_2 -> block + type = "shapeless", + output = reed.." 3", + recipe = {corner_2,corner_2,corner_2,corner_2,corner_2,corner_2,corner_2,corner_2}, -- 8x + }) +----------------------------------------------------------------------------------------------- +-- Slab +----------------------------------------------------------------------------------------------- + minetest.register_craft({ -- block -> slab + output = slab.." 6", + recipe = { + {reed,reed,reed}, + } + }) + minetest.register_craft({ -- roof -> slab + output = slab, + recipe = { + {roof}, + } + }) + minetest.register_craft({ -- corner -> slab + output = slab.." 3", + recipe = { + {corner,corner}, + {corner,corner}, + } + }) + minetest.register_craft({ -- corner_2 -> slab + output = slab.." 3", + recipe = { + {corner_2,corner_2}, + {corner_2,corner_2}, + } + }) +----------------------------------------------------------------------------------------------- +-- Roof +----------------------------------------------------------------------------------------------- + minetest.register_craft({ -- block -> roof + output = roof.." 4", + recipe = { + {reed,""}, + {"",reed}, + } + }) + minetest.register_craft({ -- block -> roof + output = roof.." 4", + recipe = { + {"",reed}, + {reed,""}, + } + }) + minetest.register_craft({ -- slab -> roof + output = roof, + recipe = { + {slab}, + } + }) +----------------------------------------------------------------------------------------------- +-- Roof Corner +----------------------------------------------------------------------------------------------- + minetest.register_craft({ -- block -> corner + output = corner.." 8", + recipe = { + {"",reed,""}, + {reed,"",reed}, + } + }) + minetest.register_craft({ -- corner_2 -> corner + output = corner, + recipe = { + {corner_2}, + } + }) +----------------------------------------------------------------------------------------------- +-- Roof Corner 2 +----------------------------------------------------------------------------------------------- + minetest.register_craft({ -- block -> corner_2 + output = corner_2.." 8", + recipe = { + {reed,"",reed}, + {"",reed,""}, + } + }) + minetest.register_craft({ -- corner -> corner_2 + output = corner_2, + recipe = { + {corner}, + } + }) +end + +----------------------------------------------------------------------------------------------- +-- Reed +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- hay -> reed + output = "dryplants:reed 2", + recipe = { + {"dryplants:hay","dryplants:hay"}, + {"dryplants:hay","dryplants:hay"}, + } +}) +--cooking +minetest.register_craft({ -- wetreed -> reed + type = "cooking", + output = "dryplants:reed", + recipe = "dryplants:wetreed", + cooktime = 2, +}) +--fuel +minetest.register_craft({ + type = "fuel", + recipe = "dryplants:reed", + burntime = 4, +}) +----------------------------------------------------------------------------------------------- +-- Reed Slab +----------------------------------------------------------------------------------------------- +--cooking +minetest.register_craft({ -- wetreed_slab -> reed_slab + type = "cooking", + output = "dryplants:reed_slab", + recipe = "dryplants:wetreed_slab", + cooktime = 1, +}) +--fuel +minetest.register_craft({ + type = "fuel", + recipe = "dryplants:reed_slab", + burntime = 2, +}) +----------------------------------------------------------------------------------------------- +-- Reed Roof +----------------------------------------------------------------------------------------------- +--cooking +minetest.register_craft({ -- wetreed_roof -> reed_roof + type = "cooking", + output = "dryplants:reed_roof", + recipe = "dryplants:wetreed_roof", + cooktime = 1, +}) +--fuel +minetest.register_craft({ + type = "fuel", + recipe = "dryplants:reed_roof", + burntime = 2, +}) +----------------------------------------------------------------------------------------------- +-- Reed Roof Corner +----------------------------------------------------------------------------------------------- +--cooking +minetest.register_craft({ -- wetreed_roof_corner -> reed_roof_corner + type = "cooking", + output = "dryplants:reed_roof_corner", + recipe = "dryplants:wetreed_roof_corner", + cooktime = 1, +}) +--fuel +minetest.register_craft({ + type = "fuel", + recipe = "dryplants:reed_roof_corner", + burntime = 2, +}) +----------------------------------------------------------------------------------------------- +-- Wet Reed Roof Corner 2 +----------------------------------------------------------------------------------------------- +--cooking +minetest.register_craft({ -- wetreed_roof_corner -> reed_roof_corner + type = "cooking", + output = "dryplants:reed_roof_corner_2", + recipe = "dryplants:wetreed_roof_corner_2", + cooktime = 1, +}) +--fuel +minetest.register_craft({ + type = "fuel", + recipe = "dryplants:reed_roof_corner_2", + burntime = 2, +}) +----------------------------------------------------------------------------------------------- +-- Dandelion Leave +----------------------------------------------------------------------------------------------- +--[[minetest.register_craftitem("dryplants:dandelion_leave", { + description = "Dandelion Leave", + inventory_image = "dryplants_dandelion_leave.png", + on_use = minetest.item_eat(1), +}) +minetest.register_craft({ + type = "shapeless", + output = "dryplants:dandelion_leave 4", + recipe = {"flowers:dandelion_yellow"}, + replacements = { + {"flowers:dandelion_yellow", "dye:yellow"} + }, +})]] \ No newline at end of file diff --git a/mods/plantlife/dryplants/depends.txt b/mods/plantlife/dryplants/depends.txt new file mode 100755 index 0000000..39305fb --- /dev/null +++ b/mods/plantlife/dryplants/depends.txt @@ -0,0 +1,4 @@ +default +biome_lib +plantlife_i18n +farming? diff --git a/mods/plantlife/dryplants/init.lua b/mods/plantlife/dryplants/init.lua new file mode 100755 index 0000000..5933949 --- /dev/null +++ b/mods/plantlife/dryplants/init.lua @@ -0,0 +1,202 @@ +----------------------------------------------------------------------------------------------- +local title = "Grasses" -- former "Dry plants" +local version = "0.1.5" +local mname = "dryplants" +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- textures & ideas partly by Neuromancer + +-- License (everything): WTFPL +-- Contains code from: default, farming +-- Looked at code from: darkage, sickle, stairs +-- Dependencies: default, farming, biome_lib +-- Supports: +----------------------------------------------------------------------------------------------- +abstract_dryplants = {} + +-- support for i18n +local S = plantlife_i18n.gettext + +dofile(minetest.get_modpath("dryplants").."/crafting.lua") +dofile(minetest.get_modpath("dryplants").."/settings.txt") +dofile(minetest.get_modpath("dryplants").."/reed.lua") +if REEDMACE_GENERATES == true then +dofile(minetest.get_modpath("dryplants").."/reedmace.lua") +end +if SMALL_JUNCUS_GENERATES == true then +dofile(minetest.get_modpath("dryplants").."/juncus.lua") +end + +----------------------------------------------------------------------------------------------- +-- Sickle +----------------------------------------------------------------------------------------------- +local function sickle_can_break(pos, deff, player) + local def = ItemStack({name=deff.name}):get_definition() + + if not def.diggable or (def.can_dig and not def.can_dig(pos,player)) then + minetest.log("info", player:get_player_name() .. " tried to sickle " + .. def.name .. " which is not diggable " + .. minetest.pos_to_string(pos)) + return + end + + if minetest.is_protected(pos, player:get_player_name()) then + minetest.log("action", player:get_player_name() + .. " tried to sickle " .. def.name + .. " at protected position " + .. minetest.pos_to_string(pos)) + minetest.record_protection_violation(pos, player:get_player_name()) + return + end + + return true +end +-- turns nodes with group flora=1 & flower=0 into cut grass +local function sickle_on_use(itemstack, user, pointed_thing, uses) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return + end + if pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local above_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + local above = minetest.get_node(above_pos) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return + end + if not minetest.registered_nodes[above.name] then + return + end + + if not sickle_can_break(pt.under, under, user) then + return + end + -- check if something that can be cut using fine tools + if minetest.get_item_group(under.name, "snappy") > 0 then + -- check if flora but no flower + if minetest.get_item_group(under.name, "flora") == 1 and minetest.get_item_group(under.name, "flower") == 0 then + -- turn the node into cut grass, wear out item and play sound + minetest.set_node(pt.under, {name="dryplants:grass"}) + else -- otherwise dig the node + if not minetest.node_dig(pt.under, under, user) then + return + end + end + minetest.sound_play("default_dig_crumbly", { + pos = pt.under, + gain = 0.5, + }) + itemstack:add_wear(65535/(uses-1)) + return itemstack + elseif string.find(under.name, "default:dirt_with_grass") then + if minetest.is_protected(above_pos, user:get_player_name()) or above.name ~= "air" then + return + end + minetest.set_node(pt.under, {name="dryplants:grass_short"}) + minetest.set_node(above_pos, {name="dryplants:grass"}) + minetest.sound_play("default_dig_crumbly", { + pos = pt.under, + gain = 0.5, + }) + itemstack:add_wear(65535/(uses-1)) + return itemstack + end +end +-- the tool +minetest.register_tool("dryplants:sickle", { + description = S("Sickle"), + inventory_image = "dryplants_sickle.png", + on_use = function(itemstack, user, pointed_thing) + return sickle_on_use(itemstack, user, pointed_thing, 220) + end, +}) + +----------------------------------------------------------------------------------------------- +-- Cut Grass +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:grass", { + description = S("Cut Grass"), + inventory_image = "dryplants_grass.png", + wield_image = "dryplants_grass.png", + paramtype = "light", + sunlight_propagates = true, + tiles = {"dryplants_grass.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.5 , -0.5 , -0.5 , 0.5 , -0.4375, 0.5 }, + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Cut Grass becomes Hay over time +----------------------------------------------------------------------------------------------- +minetest.register_abm({ + nodenames = {"dryplants:grass"}, + interval = HAY_DRYING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle + chance = 1, + action = function(pos) + minetest.set_node(pos, {name="dryplants:hay"}) + end, +}) + +----------------------------------------------------------------------------------------------- +-- Hay +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:hay", { + description = S("Hay"), + inventory_image = "dryplants_hay.png", + wield_image = "dryplants_hay.png", + paramtype = "light", + sunlight_propagates = true, + tiles = {"dryplants_hay.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.5 , -0.5 , -0.5 , 0.5 , -0.4375, 0.5 }, + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Short Grass +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:grass_short", { + description = S("Short Grass"), + tiles = {"default_grass.png^dryplants_grass_short.png", "default_dirt.png", "default_dirt.png^default_grass_side.png^dryplants_grass_short_side.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1,not_in_creative_inventory=1}, + --drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.4}, + }), +}) + +----------------------------------------------------------------------------------------------- +-- Short Grass becomes Dirt with Grass over time +----------------------------------------------------------------------------------------------- +minetest.register_abm({ + nodenames = {"dryplants:grass_short"}, + interval = GRASS_REGROWING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle + chance = 100/GRASS_REGROWING_CHANCE, + action = function(pos) + -- Only become dirt with grass if no cut grass or hay lies on top + local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) + if above.name ~= "dryplants:grass" and above.name ~= "dryplants:hay" then + minetest.set_node(pos, {name="default:dirt_with_grass"}) + end + end, +}) + +----------------------------------------------------------------------------------------------- +print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") +----------------------------------------------------------------------------------------------- diff --git a/mods/plantlife/dryplants/juncus.lua b/mods/plantlife/dryplants/juncus.lua new file mode 100755 index 0000000..34176ce --- /dev/null +++ b/mods/plantlife/dryplants/juncus.lua @@ -0,0 +1,136 @@ +----------------------------------------------------------------------------------------------- +-- Grasses - Juncus 0.0.5 +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- textures & ideas partly by Neuromancer + +-- License (everything): WTFPL +-- Contains code from: biome_lib +-- Looked at code from: default +----------------------------------------------------------------------------------------------- + +-- support for i18n +local S = plantlife_i18n.gettext + +abstract_dryplants.grow_juncus = function(pos) + local juncus_type = math.random(2,3) + local right_here = {x=pos.x, y=pos.y+1, z=pos.z} + if minetest.get_node(right_here).name == "air" -- instead of check_air = true, + or minetest.get_node(right_here).name == "default:junglegrass" then + if juncus_type == 2 then + minetest.set_node(right_here, {name="dryplants:juncus_02"}) + else + minetest.set_node(right_here, {name="dryplants:juncus"}) + end + end +end + +minetest.register_node("dryplants:juncus", { + description = S("Juncus"), + drawtype = "plantlike", + visual_scale = math.sqrt(8), + paramtype = "light", + tiles = {"dryplants_juncus_03.png"}, + inventory_image = "dryplants_juncus_inv.png", + walkable = false, + buildable_to = true, + groups = { + snappy=3, + flammable=2, + attached_node=1, + flora=1 + --not_in_creative_inventory=1 + }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, + on_place = function(itemstack, placer, pointed_thing) + local playername = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, playername) or + minetest.is_protected(pointed_thing.under, playername) then + minetest.chat_send_player(playername, "Someone else owns that spot.") + return + end + local pos = pointed_thing.under + local juncus_type = math.random(2,3) + local right_here = {x=pos.x, y=pos.y+1, z=pos.z} + if juncus_type == 2 then + minetest.set_node(right_here, {name="dryplants:juncus_02"}) + else + minetest.set_node(right_here, {name="dryplants:juncus"}) + end + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end, +}) +minetest.register_node("dryplants:juncus_02", { + description = S("Juncus"), + drawtype = "plantlike", + visual_scale = math.sqrt(8), + paramtype = "light", + tiles = {"dryplants_juncus_02.png"}, + walkable = false, + buildable_to = true, + groups = { + snappy=3, + flammable=2, + attached_node=1, + flora=1, + not_in_creative_inventory=1 + }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, + drop = "dryplants:juncus", +}) +----------------------------------------------------------------------------------------------- +-- GENERATE SMALL JUNCUS +----------------------------------------------------------------------------------------------- +-- near water or swamp +biome_lib:register_generate_plant({ + surface = { + "default:dirt_with_grass", + --"default:desert_sand", + --"default:sand", + "stoneage:grass_with_silex", + "sumpf:peat", + "sumpf:sumpf" + }, + max_count = JUNCUS_NEAR_WATER_PER_MAPBLOCK, + rarity = 101 - JUNCUS_NEAR_WATER_RARITY, + min_elevation = 1, -- above sea level + near_nodes = {"default:water_source","sumpf:dirtywater_source","sumpf:sumpf"}, + near_nodes_size = 2, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + abstract_dryplants.grow_juncus +) +-- at dunes/beach +biome_lib:register_generate_plant({ + surface = { + --"default:dirt_with_grass", + --"default:desert_sand", + "default:sand", + --"stoneage:grass_with_silex", + --"sumpf:peat", + --"sumpf:sumpf" + }, + max_count = JUNCUS_AT_BEACH_PER_MAPBLOCK, + rarity = 101 - JUNCUS_AT_BEACH_RARITY, + min_elevation = 1, -- above sea level + near_nodes = {"default:dirt_with_grass"}, + near_nodes_size = 2, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + abstract_dryplants.grow_juncus +) diff --git a/mods/ITEMS/dryplants/models/plantlike.obj b/mods/plantlife/dryplants/models/plantlike.obj old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/models/plantlike.obj rename to mods/plantlife/dryplants/models/plantlike.obj diff --git a/mods/plantlife/dryplants/reed.lua b/mods/plantlife/dryplants/reed.lua new file mode 100755 index 0000000..707cafc --- /dev/null +++ b/mods/plantlife/dryplants/reed.lua @@ -0,0 +1,383 @@ +----------------------------------------------------------------------------------------------- +-- Dry Plants - Reed 0.0.5 +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- License (everything): WTFPL +-- Looked at code from: darkage, default, stairs +-- Dependencies: default +----------------------------------------------------------------------------------------------- +-- support for i18n +local S = plantlife_i18n.gettext + +minetest.register_alias("stairs:stair_wetreed", "dryplants:wetreed_roof") +minetest.register_alias("stairs:slab_wetreed", "dryplants:wetreed_slab") +minetest.register_alias("stairs:stair_reed", "dryplants:reed_roof") +minetest.register_alias("stairs:slab_reed", "dryplants:reed_slab") + + +----------------------------------------------------------------------------------------------- +-- Wet Reed +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:wetreed", { + description = S("Wet Reed"), + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed_wet.png"}, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Wet Reed Slab +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:wetreed_slab", { + description = S("Wet Reed Slab"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed_wet.png"}, + node_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Wet Reed Roof +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:wetreed_roof", { + description = S("Wet Reed Roof"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed_wet.png"}, + node_box = { + type = "fixed", +-- { left , bottom , front , right , top , back } + fixed = { + {-1/2, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, -1/2, -1/2, 1/2, 0, 0}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, -1/2, -1/2, 1/2, 0, 0}, + } + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +if AUTO_ROOF_CORNER == true then + + local CoRNeR = { +-- MaTeRiaL + {"wetreed"}, + {"reed"} + } + + for i in pairs(CoRNeR) do + + local MaTeRiaL = CoRNeR[i][1] + local roof = "dryplants:"..MaTeRiaL.."_roof" + local corner = "dryplants:"..MaTeRiaL.."_roof_corner" + local corner_2 = "dryplants:"..MaTeRiaL.."_roof_corner_2" + + minetest.register_abm({ + nodenames = {roof}, + interval = 1, + chance = 1, + action = function(pos) + + local node_east = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z }) + local node_west = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z }) + local node_north = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) + local node_south = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) + -- corner 1 + if ((node_west.name == roof and node_west.param2 == 0) + or (node_west.name == corner and node_west.param2 == 1)) + and ((node_north.name == roof and node_north.param2 == 3) + or (node_north.name == corner and node_north.param2 == 3)) + then + minetest.set_node(pos, {name=corner, param2=0}) + end + + if ((node_north.name == roof and node_north.param2 == 1) + or (node_north.name == corner and node_north.param2 == 2)) + and ((node_east.name == roof and node_east.param2 == 0) + or (node_east.name == corner and node_east.param2 == 0)) + then + minetest.set_node(pos, {name=corner, param2=1}) + end + + if ((node_east.name == roof and node_east.param2 == 2) + or (node_east.name == corner and node_east.param2 == 3)) + and ((node_south.name == roof and node_south.param2 == 1) + or (node_south.name == corner and node_south.param2 == 1)) + then + minetest.set_node(pos, {name=corner, param2=2}) + end + + if ((node_south.name == roof and node_south.param2 == 3) + or (node_south.name == corner and node_south.param2 == 0)) + and ((node_west.name == roof and node_west.param2 == 2) + or (node_west.name == corner and node_west.param2 == 2)) + then + minetest.set_node(pos, {name=corner, param2=3}) + end + -- corner 2 + if ((node_west.name == roof and node_west.param2 == 2) + or (node_west.name == corner_2 and node_west.param2 == 1)) + and ((node_north.name == roof and node_north.param2 == 1) + or (node_north.name == corner_2 and node_north.param2 == 3)) + then + minetest.set_node(pos, {name=corner_2, param2=0}) + end + + if ((node_north.name == roof and node_north.param2 == 3) + or (node_north.name == corner_2 and node_north.param2 == 2)) + and ((node_east.name == roof and node_east.param2 == 2) + or (node_east.name == corner_2 and node_east.param2 == 0)) + then + minetest.set_node(pos, {name=corner_2, param2=1}) + end + + if ((node_east.name == roof and node_east.param2 == 0) + or (node_east.name == corner_2 and node_east.param2 == 3)) + and ((node_south.name == roof and node_south.param2 == 3) + or (node_south.name == corner_2 and node_south.param2 == 1)) + then + minetest.set_node(pos, {name=corner_2, param2=2}) + end + + if ((node_south.name == roof and node_south.param2 == 1) + or (node_south.name == corner_2 and node_south.param2 == 0)) + and ((node_west.name == roof and node_west.param2 == 0) + or (node_west.name == corner_2 and node_west.param2 == 2)) + then + minetest.set_node(pos, {name=corner_2, param2=3}) + end + + end, + }) + end +end + +----------------------------------------------------------------------------------------------- +-- Wet Reed Roof Corner +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:wetreed_roof_corner", { + description = S("Wet Reed Roof Corner"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed_wet.png"}, + node_box = { + type = "fixed", +-- { left , bottom , front , right , top , back } + fixed = { + {-1/2, 0, 0, 0, 1/2, 1/2}, + {0, -1/2, 0, 1/2, 0, 1/2}, + {-1/2, -1/2, -1/2, 0, 0, 0}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, 0, 0, 0, 1/2, 1/2}, + {0, -1/2, 0, 1/2, 0, 1/2}, + {-1/2, -1/2, -1/2, 0, 0, 0}, + } + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Wet Reed Roof Corner 2 +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:wetreed_roof_corner_2", { + description = S("Wet Reed Roof Corner 2"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed_wet.png"}, + node_box = { + type = "fixed", +-- { left , bottom , front , right , top , back } + fixed = { + {-1/2, -1/2, 0, 0, 0, 1/2}, + {0, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, 0, -1/2, 0, 1/2, 0}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 0, 0, 0, 1/2}, + {0, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, 0, -1/2, 0, 1/2, 0}, + } + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Wet Reed becomes (dry) Reed over time +----------------------------------------------------------------------------------------------- +if REED_WILL_DRY == true then + + local DRyiNG = { +-- WeT DRy + {"dryplants:wetreed", "dryplants:reed"}, + {"dryplants:wetreed_slab", "dryplants:reed_slab"}, + {"dryplants:wetreed_roof", "dryplants:reed_roof"}, + {"dryplants:wetreed_roof_corner", "dryplants:reed_roof_corner"}, + {"dryplants:wetreed_roof_corner_2", "dryplants:reed_roof_corner_2"} + } + for i in pairs(DRyiNG) do + + local WeT = DRyiNG[i][1] + local DRy = DRyiNG[i][2] + + minetest.register_abm({ + nodenames = {WeT}, + interval = REED_DRYING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle + chance = 1, + action = function(pos) + local direction = minetest.get_node(pos).param2 + minetest.set_node(pos, {name=DRy, param2=direction}) + end, + }) + end +end + +----------------------------------------------------------------------------------------------- +-- Reed +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reed", { + description = S("Reed"), + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed.png"}, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Reed Slab +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reed_slab", { + description = S("Reed Slab"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed.png"}, + node_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Reed Roof +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reed_roof", { + description = S("Reed Roof"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed.png"}, + node_box = { + type = "fixed", +-- { left , bottom , front , right , top , back } + fixed = { + {-1/2, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, -1/2, -1/2, 1/2, 0, 0}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, -1/2, -1/2, 1/2, 0, 0}, + } + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Reed Roof Corner +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reed_roof_corner", { + description = S("Reed Roof Corner"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed.png"}, + node_box = { + type = "fixed", +-- { left , bottom , front , right , top , back } + fixed = { + {-1/2, 0, 0, 0, 1/2, 1/2}, + {0, -1/2, 0, 1/2, 0, 1/2}, + {-1/2, -1/2, -1/2, 0, 0, 0}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, 0, 0, 0, 1/2, 1/2}, + {0, -1/2, 0, 1/2, 0, 1/2}, + {-1/2, -1/2, -1/2, 0, 0, 0}, + } + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- Reed Roof Corner 2 +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reed_roof_corner_2", { + description = S("Reed Roof Corner 2"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"dryplants_reed.png"}, + node_box = { + type = "fixed", +-- { left , bottom , front , right , top , back } + fixed = { + {-1/2, -1/2, 0, 0, 0, 1/2}, + {0, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, 0, -1/2, 0, 1/2, 0}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 0, 0, 0, 1/2}, + {0, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, 0, -1/2, 0, 1/2, 0}, + } + }, + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults(), +}) diff --git a/mods/plantlife/dryplants/reedmace.lua b/mods/plantlife/dryplants/reedmace.lua new file mode 100755 index 0000000..ec37442 --- /dev/null +++ b/mods/plantlife/dryplants/reedmace.lua @@ -0,0 +1,414 @@ +----------------------------------------------------------------------------------------------- +-- Grasses - Reedmace 0.1.1 +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- textures & ideas partly by Neuromancer + +-- License (everything): WTFPL +-- Contains code from: biome_lib +-- Looked at code from: default, trees +----------------------------------------------------------------------------------------------- + +-- NOTES (from wikipedia, some of this might get implemented) +-- rhizomes are edible +-- outer portion of young plants can be peeled and the heart can be eaten raw or boiled and eaten like asparagus +-- leaf bases can be eaten raw or cooked +-- sheath can be removed from the developing green flower spike, which can then be boiled and eaten like corn on the cob +-- pollen can be collected and used as a flour supplement or thickener +-- Typha stems and leaves can be used to make paper +-- The seed hairs were used by some Native American groups as tinder for starting fires + +-- support for i18n +local S = plantlife_i18n.gettext + +----------------------------------------------------------------------------------------------- +-- REEDMACE SHAPES +----------------------------------------------------------------------------------------------- + +abstract_dryplants.grow_reedmace = function(pos) + local size = math.random(1,3) + local spikes = math.random(1,3) + local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} + local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z} + local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z} + if minetest.get_node(pos_01).name == "air" -- bug fix + or minetest.get_node(pos_01).name == "dryplants:reedmace_sapling" then + if minetest.get_node(pos_02).name ~= "air" then + minetest.set_node(pos_01, {name="dryplants:reedmace_top"}) + elseif minetest.get_node(pos_03).name ~= "air" then + minetest.set_node(pos_01, {name="dryplants:reedmace_height_2"}) + elseif size == 1 then + minetest.set_node(pos_01, {name="dryplants:reedmace_top"}) + elseif size == 2 then + minetest.set_node(pos_01, {name="dryplants:reedmace_height_2"}) + elseif size == 3 then + if spikes == 1 then + minetest.set_node(pos_01, {name="dryplants:reedmace_height_3_spikes"}) + else + minetest.set_node(pos_01, {name="dryplants:reedmace_height_3"}) + end + end + end +end + +abstract_dryplants.grow_reedmace_water = function(pos) + local size = math.random(1,3) + local spikes = math.random(1,3) + local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} + local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z} + local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z} + local pos_04 = {x = pos.x, y = pos.y + 4, z = pos.z} + minetest.add_entity(pos_01, "dryplants:reedmace_water_entity") + if minetest.get_node(pos_02).name == "air" then -- bug fix + if minetest.get_node(pos_03).name ~= "air" then + minetest.set_node(pos_02, {name="dryplants:reedmace_top"}) + elseif minetest.get_node(pos_04).name ~= "air" then + minetest.set_node(pos_02, {name="dryplants:reedmace_height_2"}) + elseif size == 1 then + minetest.set_node(pos_02, {name="dryplants:reedmace_top"}) + elseif size == 2 then + minetest.set_node(pos_02, {name="dryplants:reedmace_height_2"}) + elseif size == 3 then + if spikes == 1 then + minetest.set_node(pos_02, {name="dryplants:reedmace_height_3_spikes"}) + else + minetest.set_node(pos_02, {name="dryplants:reedmace_height_3"}) + end + end + end +end + +----------------------------------------------------------------------------------------------- +-- REEDMACE SPIKES +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reedmace_spikes", { + description = S("Reedmace"), + drawtype = "plantlike", + paramtype = "light", + tiles = {"dryplants_reedmace_spikes.png"}, + inventory_image = "dryplants_reedmace_spikes.png", + walkable = false, + groups = { + snappy=3, + flammable=2, + not_in_creative_inventory=1 + }, + drop = 'dryplants:reedmace_sapling', + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, +}) +----------------------------------------------------------------------------------------------- +-- REEDMACE height: 1 +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reedmace_top", { + description = S("Reedmace, height: 1"), + drawtype = "plantlike", + paramtype = "light", + tiles = {"dryplants_reedmace_top.png"}, + inventory_image = "dryplants_reedmace_top.png", + walkable = false, + groups = { + snappy=3, + flammable=2, + not_in_creative_inventory=1 + }, + drop = 'dryplants:reedmace_sapling', + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, +}) +----------------------------------------------------------------------------------------------- +-- REEDMACE height: 2 +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reedmace_height_2", { + description = S("Reedmace, height: 2"), + drawtype = "plantlike", + visual_scale = math.sqrt(8), + paramtype = "light", + tiles = {"dryplants_reedmace_height_2.png"}, + inventory_image = "dryplants_reedmace_top.png", + walkable = false, + groups = { + snappy=3, + flammable=2--, + --not_in_creative_inventory=1 + }, + drop = 'dryplants:reedmace_sapling', + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, +}) +----------------------------------------------------------------------------------------------- +-- REEDMACE height: 3 +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reedmace_height_3", { + description = S("Reedmace, height: 3"), + drawtype = "plantlike", + visual_scale = math.sqrt(8), + paramtype = "light", + tiles = {"dryplants_reedmace_height_3.png"}, + inventory_image = "dryplants_reedmace_top.png", + walkable = false, + groups = { + snappy=3, + flammable=2--, + --not_in_creative_inventory=1 + }, + drop = 'dryplants:reedmace_sapling', + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, +}) +----------------------------------------------------------------------------------------------- +-- REEDMACE height: 3 & Spikes +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reedmace_height_3_spikes", { + description = S("Reedmace, height: 3 & Spikes"), + drawtype = "plantlike", + visual_scale = math.sqrt(8), + paramtype = "light", + tiles = {"dryplants_reedmace_height_3_spikes.png"}, + inventory_image = "dryplants_reedmace_top.png", + walkable = false, + groups = { + snappy=3, + flammable=2--, + --not_in_creative_inventory=1 + }, + drop = 'dryplants:reedmace_sapling', + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, +}) +----------------------------------------------------------------------------------------------- +-- REEDMACE STEMS +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reedmace", { + description = S("Reedmace"), + drawtype = "plantlike", + paramtype = "light", + tiles = {"dryplants_reedmace.png"}, + inventory_image = "dryplants_reedmace.png", + walkable = false, + groups = { + snappy=3, + flammable=2, + not_in_creative_inventory=1 + }, + drop = 'dryplants:reedmace_sapling', + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + after_destruct = function(pos,oldnode) + local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) + if node.name == "dryplants:reedmace_top" + or node.name == "dryplants:reedmace_spikes" then + minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) + minetest.add_item(pos,"dryplants:reedmace_sapling") + end + end, +}) +----------------------------------------------------------------------------------------------- +-- REEDMACE BOTTOM +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reedmace_bottom", { + description = S("Reedmace"), + drawtype = "plantlike", + paramtype = "light", + tiles = {"dryplants_reedmace_bottom.png"}, + inventory_image = "dryplants_reedmace_bottom.png", + walkable = false, + groups = { + snappy=3, + flammable=2, + not_in_creative_inventory=1 + }, + drop = 'dryplants:reedmace_sapling', + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + after_destruct = function(pos,oldnode) + local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) + if node.name == "dryplants:reedmace" + or node.name == "dryplants:reedmace_top" + or node.name == "dryplants:reedmace_spikes" then + minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) + minetest.add_item(pos,"dryplants:reedmace_sapling") + end + end, +}) +----------------------------------------------------------------------------------------------- +-- REEDMACE "SAPLING" (the drop from the above) +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reedmace_sapling", { + description = S("Reedmace"), + drawtype = "plantlike", + paramtype = "light", + tiles = {"dryplants_reedmace_sapling.png"}, + inventory_image = "dryplants_reedmace_sapling.png", + walkable = false, + groups = { + snappy=3, + flammable=2, + attached_node=1 + }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, +}) +-- abm +minetest.register_abm({ + nodenames = "dryplants:reedmace_sapling", + interval = REEDMACE_GROWING_TIME, + chance = 100/REEDMACE_GROWING_CHANCE, + action = function(pos, node, _, _) + if string.find(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z }).name, "default:water") + or string.find(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}).name, "default:water") + or string.find(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z }).name, "default:water") + or string.find(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}).name, "default:water") then + if minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then + abstract_dryplants.grow_reedmace_water({x = pos.x, y = pos.y - 1, z = pos.z}) + end + minetest.set_node({x=pos.x, y=pos.y, z=pos.z}, {name="default:water_source"}) + else + abstract_dryplants.grow_reedmace({x = pos.x, y = pos.y - 1, z = pos.z}) + end + end +}) +----------------------------------------------------------------------------------------------- +-- REEDMACE WATER (for entity) +----------------------------------------------------------------------------------------------- +minetest.register_node("dryplants:reedmace_water", { + description = S("Reedmace"), + drawtype = "plantlike", + paramtype = "light", + tiles = {"dryplants_reedmace_water.png"}, + inventory_image = "dryplants_reedmace_water.png", + groups = {not_in_creative_inventory=1}, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, +}) +----------------------------------------------------------------------------------------------- +-- REEDMACE WATER ENTITY +----------------------------------------------------------------------------------------------- +minetest.register_entity("dryplants:reedmace_water_entity",{ + visual = "mesh", + mesh = "plantlike.obj", + visual_size = {x=10, y=10}, + textures = {"dryplants_reedmace_water.png"}, + collisionbox = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}, + on_punch = function(self, puncher) + if puncher:is_player() and puncher:get_inventory() then + if not minetest.setting_getbool("creative_mode") then + puncher:get_inventory():add_item("main", "dryplants:reedmace_sapling") + end + self.object:remove() + end + end, +}) +----------------------------------------------------------------------------------------------- +-- SPAWN REEDMACE +----------------------------------------------------------------------------------------------- +--[[biome_lib:spawn_on_surfaces({ + spawn_delay = 1200, + spawn_plants = {"dryplants:reedmace_sapling"}, + spawn_chance = 400, + spawn_surfaces = { + "default:dirt_with_grass", + "default:desert_sand", + "default:sand", + "dryplants:grass_short", + "stoneage:grass_with_silex" + }, + seed_diff = 329, + near_nodes = {"default:water_source"}, + near_nodes_size = 2, + near_nodes_vertical = 1, + near_nodes_count = 1, +})]] +----------------------------------------------------------------------------------------------- +-- GENERATE REEDMACE +----------------------------------------------------------------------------------------------- +-- near water or swamp +biome_lib:register_generate_plant({ + surface = { + "default:dirt_with_grass", + "default:desert_sand", + "stoneage:grass_with_silex", + "sumpf:peat", + "sumpf:sumpf" + }, + max_count = REEDMACE_NEAR_WATER_PER_MAPBLOCK, + rarity = 101 - REEDMACE_NEAR_WATER_RARITY, + --rarity = 60, + min_elevation = 1, -- above sea level + near_nodes = {"default:water_source","sumpf:dirtywater_source","sumpf:sumpf"}, + near_nodes_size = 2, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + abstract_dryplants.grow_reedmace +) +-- in water +biome_lib:register_generate_plant({ + surface = { + "default:dirt", + "default:dirt_with_grass", + --"default:desert_sand", + --"stoneage:grass_with_silex", + "stoneage:sand_with_silex", + "sumpf:peat", + "sumpf:sumpf" + }, + max_count = REEDMACE_IN_WATER_PER_MAPBLOCK, + rarity = 101 - REEDMACE_IN_WATER_RARITY, + --rarity = 35, + min_elevation = 0, -- a bit below sea level + max_elevation = 0, -- "" + near_nodes = {"default:water_source","sumpf:dirtywater_source"}, + near_nodes_size = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + abstract_dryplants.grow_reedmace_water +) +-- for oases & tropical beaches & tropical swamps +biome_lib:register_generate_plant({ + surface = { + "default:sand", + "sumpf:sumpf" + }, + max_count = REEDMACE_FOR_OASES_PER_MAPBLOCK, + rarity = 101 - REEDMACE_FOR_OASES_RARITY, + --rarity = 10, + neighbors = {"default:water_source","sumpf:dirtywater_source","sumpf:sumpf"}, + ncount = 1, + min_elevation = 1, -- above sea level + near_nodes = {"default:desert_sand","sumpf:sumpf"}, + near_nodes_size = 2, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + abstract_dryplants.grow_reedmace +) diff --git a/mods/plantlife/dryplants/settings.txt b/mods/plantlife/dryplants/settings.txt new file mode 100755 index 0000000..b5069da --- /dev/null +++ b/mods/plantlife/dryplants/settings.txt @@ -0,0 +1,45 @@ +-- Here you can enable/disable the different plants +REEDMACE_GENERATES = true +SMALL_JUNCUS_GENERATES = true + + + +-- Amount of Reedmace near water or swamp +REEDMACE_NEAR_WATER_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number) +REEDMACE_NEAR_WATER_RARITY = 40 -- percent + +-- Amount of Reedmace in water +REEDMACE_IN_WATER_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number) +REEDMACE_IN_WATER_RARITY = 65 -- percent + +-- Amount of Reedmace for oases, tropical beaches and tropical swamps +REEDMACE_FOR_OASES_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number) +REEDMACE_FOR_OASES_RARITY = 90 -- percent + +-- growing of reedmace sapling +REEDMACE_GROWING_TIME = 600 -- seconds +REEDMACE_GROWING_CHANCE = 5 -- percent + + + +-- Amount of small Juncus near water or swamp +JUNCUS_NEAR_WATER_PER_MAPBLOCK = 70 -- plants per 80x80x80 nodes (absolute maximum number) +JUNCUS_NEAR_WATER_RARITY = 75 -- percent + +-- Amount of small Juncus at dunes/beach +JUNCUS_AT_BEACH_PER_MAPBLOCK = 70 -- plants per 80x80x80 nodes (absolute maximum number) +JUNCUS_AT_BEACH_RARITY = 75 -- percent + + + +-- short grass becomes dirt with grass again +GRASS_REGROWING_TIME = 1200 -- seconds +GRASS_REGROWING_CHANCE = 5 -- percent + +HAY_DRYING_TIME = 3600 -- seconds + +REED_WILL_DRY = false -- wet reed nodes will become dry reed nodes +REED_DRYING_TIME = 3600 -- seconds + +AUTO_ROOF_CORNER = true + diff --git a/mods/ITEMS/dryplants/textures/dryplants_grass.png b/mods/plantlife/dryplants/textures/dryplants_grass.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_grass.png rename to mods/plantlife/dryplants/textures/dryplants_grass.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_grass_short.png b/mods/plantlife/dryplants/textures/dryplants_grass_short.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_grass_short.png rename to mods/plantlife/dryplants/textures/dryplants_grass_short.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_grass_short_side.png b/mods/plantlife/dryplants/textures/dryplants_grass_short_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_grass_short_side.png rename to mods/plantlife/dryplants/textures/dryplants_grass_short_side.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_hay.png b/mods/plantlife/dryplants/textures/dryplants_hay.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_hay.png rename to mods/plantlife/dryplants/textures/dryplants_hay.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_juncus_02.png b/mods/plantlife/dryplants/textures/dryplants_juncus_02.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_juncus_02.png rename to mods/plantlife/dryplants/textures/dryplants_juncus_02.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_juncus_03.png b/mods/plantlife/dryplants/textures/dryplants_juncus_03.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_juncus_03.png rename to mods/plantlife/dryplants/textures/dryplants_juncus_03.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_juncus_inv.png b/mods/plantlife/dryplants/textures/dryplants_juncus_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_juncus_inv.png rename to mods/plantlife/dryplants/textures/dryplants_juncus_inv.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reed.png b/mods/plantlife/dryplants/textures/dryplants_reed.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reed.png rename to mods/plantlife/dryplants/textures/dryplants_reed.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reed_wet.png b/mods/plantlife/dryplants/textures/dryplants_reed_wet.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reed_wet.png rename to mods/plantlife/dryplants/textures/dryplants_reed_wet.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reedmace.png b/mods/plantlife/dryplants/textures/dryplants_reedmace.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reedmace.png rename to mods/plantlife/dryplants/textures/dryplants_reedmace.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reedmace_bottom.png b/mods/plantlife/dryplants/textures/dryplants_reedmace_bottom.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reedmace_bottom.png rename to mods/plantlife/dryplants/textures/dryplants_reedmace_bottom.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reedmace_height_2.png b/mods/plantlife/dryplants/textures/dryplants_reedmace_height_2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reedmace_height_2.png rename to mods/plantlife/dryplants/textures/dryplants_reedmace_height_2.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reedmace_height_3.png b/mods/plantlife/dryplants/textures/dryplants_reedmace_height_3.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reedmace_height_3.png rename to mods/plantlife/dryplants/textures/dryplants_reedmace_height_3.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reedmace_height_3_spikes.png b/mods/plantlife/dryplants/textures/dryplants_reedmace_height_3_spikes.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reedmace_height_3_spikes.png rename to mods/plantlife/dryplants/textures/dryplants_reedmace_height_3_spikes.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reedmace_sapling.png b/mods/plantlife/dryplants/textures/dryplants_reedmace_sapling.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reedmace_sapling.png rename to mods/plantlife/dryplants/textures/dryplants_reedmace_sapling.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reedmace_spikes.png b/mods/plantlife/dryplants/textures/dryplants_reedmace_spikes.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reedmace_spikes.png rename to mods/plantlife/dryplants/textures/dryplants_reedmace_spikes.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reedmace_top.png b/mods/plantlife/dryplants/textures/dryplants_reedmace_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reedmace_top.png rename to mods/plantlife/dryplants/textures/dryplants_reedmace_top.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_reedmace_water.png b/mods/plantlife/dryplants/textures/dryplants_reedmace_water.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_reedmace_water.png rename to mods/plantlife/dryplants/textures/dryplants_reedmace_water.png diff --git a/mods/ITEMS/dryplants/textures/dryplants_sickle.png b/mods/plantlife/dryplants/textures/dryplants_sickle.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/dryplants/textures/dryplants_sickle.png rename to mods/plantlife/dryplants/textures/dryplants_sickle.png diff --git a/mods/plantlife/ferns/crafting.lua b/mods/plantlife/ferns/crafting.lua new file mode 100755 index 0000000..489b053 --- /dev/null +++ b/mods/plantlife/ferns/crafting.lua @@ -0,0 +1,61 @@ +-- support for i18n +local S = plantlife_i18n.gettext +----------------------------------------------------------------------------------------------- +-- Ferns - Crafting 0.0.5 +----------------------------------------------------------------------------------------------- +-- (by Mossmanikin) +-- License (everything): WTFPL +----------------------------------------------------------------------------------------------- + +minetest.register_craft({ + type = "shapeless", + output = "ferns:fiddlehead 3", + recipe = {"ferns:tree_fern_leaves"}, + replacements = { + {"ferns:tree_fern_leaves", "ferns:sapling_tree_fern"} + }, +}) +----------------------------------------------------------------------------------------------- +-- FIDDLEHEAD +----------------------------------------------------------------------------------------------- +minetest.register_alias("archaeplantae:fiddlehead", "ferns:fiddlehead") + +minetest.register_craftitem("ferns:fiddlehead", { + description = S("Fiddlehead"), + inventory_image = "ferns_fiddlehead.png", + on_use = minetest.item_eat(-1), -- slightly poisonous when raw +}) +minetest.register_craft({ + type = "cooking", + output = "ferns:fiddlehead_roasted", + recipe = "ferns:fiddlehead", + cooktime = 1, +}) +minetest.register_craftitem("ferns:fiddlehead_roasted", { + description = S("Roasted Fiddlehead"), + inventory_image = "ferns_fiddlehead_roasted.png", + on_use = minetest.item_eat(1), -- edible when cooked +}) +----------------------------------------------------------------------------------------------- +-- FERN TUBER +----------------------------------------------------------------------------------------------- +minetest.register_alias("archaeplantae:ferntuber", "ferns:ferntuber") + +minetest.register_craftitem("ferns:ferntuber", { + description = S("Fern Tuber"), + inventory_image = "ferns_ferntuber.png", +}) +minetest.register_craft({ + type = "cooking", + output = "ferns:ferntuber_roasted", + recipe = "ferns:ferntuber", + cooktime = 3, +}) + +minetest.register_alias("archaeplantae:ferntuber_roasted", "ferns:ferntuber_roasted") + +minetest.register_craftitem("ferns:ferntuber_roasted", { + description = S("Roasted Fern Tuber"), + inventory_image = "ferns_ferntuber_roasted.png", + on_use = minetest.item_eat(3), +}) diff --git a/mods/plantlife/ferns/depends.txt b/mods/plantlife/ferns/depends.txt new file mode 100755 index 0000000..6790d9e --- /dev/null +++ b/mods/plantlife/ferns/depends.txt @@ -0,0 +1,3 @@ +default +biome_lib +plantlife_i18n diff --git a/mods/plantlife/ferns/gianttreefern.lua b/mods/plantlife/ferns/gianttreefern.lua new file mode 100755 index 0000000..36070f6 --- /dev/null +++ b/mods/plantlife/ferns/gianttreefern.lua @@ -0,0 +1,340 @@ +----------------------------------------------------------------------------------------------- +-- Ferns - Giant Tree Fern 0.1.1 +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- License (everything): WTFPL +-- Contains code from: biome_lib +-- Looked at code from: 4seasons, default +-- Supports: vines +----------------------------------------------------------------------------------------------- + +-- support for i18n +local S = plantlife_i18n.gettext +-- lot of code, lot to load + +abstract_ferns.grow_giant_tree_fern = function(pos) + local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} + if minetest.get_node(pos_01).name ~= "air" + and minetest.get_node(pos_01).name ~= "ferns:sapling_giant_tree_fern" + and minetest.get_node(pos_01).name ~= "default:junglegrass" then + return + end + + local size = math.random(12,16) -- min of range must be >= 4 + + local leafchecks = { + { + direction = 3, + positions = { + {x = pos.x + 1, y = pos.y + size - 1, z = pos.z }, + {x = pos.x + 2, y = pos.y + size , z = pos.z }, + {x = pos.x + 3, y = pos.y + size - 1, z = pos.z }, + {x = pos.x + 4, y = pos.y + size - 2, z = pos.z } + } + }, + { + direction = 1, + positions = { + {x = pos.x - 1, y = pos.y + size - 1, z = pos.z }, + {x = pos.x - 2, y = pos.y + size, z = pos.z }, + {x = pos.x - 3, y = pos.y + size - 1, z = pos.z }, + {x = pos.x - 4, y = pos.y + size - 2, z = pos.z } + } + }, + { + direction = 2, + positions = { + {x = pos.x , y = pos.y + size - 1, z = pos.z + 1}, + {x = pos.x , y = pos.y + size , z = pos.z + 2}, + {x = pos.x , y = pos.y + size - 1, z = pos.z + 3}, + {x = pos.x , y = pos.y + size - 2, z = pos.z + 4} + } + }, + { + direction = 0, + positions = { + {x = pos.x , y = pos.y + size - 1, z = pos.z - 1}, + {x = pos.x , y = pos.y + size , z = pos.z - 2}, + {x = pos.x , y = pos.y + size - 1, z = pos.z - 3}, + {x = pos.x , y = pos.y + size - 2, z = pos.z - 4} + } + } + } + + local brk = false + for i = 1, size-3 do + if minetest.get_node({x = pos.x, y = pos.y + i, z = pos.z}).name ~= "air" then + brk = true + break + end + minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, {name="ferns:fern_trunk_big"}) + end + if not brk then + minetest.set_node({x = pos.x, y = pos.y + size-2, z = pos.z}, {name="ferns:fern_trunk_big_top"}) + minetest.set_node({x = pos.x, y = pos.y + size-1, z = pos.z}, {name="ferns:tree_fern_leaves_giant"}) + + -- all the checking for air below is to prevent some ugly bugs (incomplete trunks of neighbouring trees), it's a bit slower, but worth the result + + -- assert(#leafchecks == 4) + for i = 1, 4 do + local positions = leafchecks[i].positions + local rot = leafchecks[i].direction + local endpos = 4 -- If the loop below adds all intermediate leaves then the "terminating" leaf will be at positions[4] + -- assert(#positions == 4) + -- add leaves so long as the destination nodes are air + for j = 1, 3 do + if minetest.get_node(positions[j]).name == "air" then + minetest.set_node(positions[j], {name="ferns:tree_fern_leave_big"}) + else + endpos = j + break + end + end + -- add the terminating leaf if required and possible + if endpos == 4 and minetest.get_node(positions[endpos]).name == "air" then + minetest.set_node(positions[endpos], {name="ferns:tree_fern_leave_big_end", param2=rot}) + end + end + end +end + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN LEAVES +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:tree_fern_leaves_giant", { + description = S("Tree Fern Crown (Dicksonia)"), + drawtype = "plantlike", + visual_scale = math.sqrt(11), + wield_scale = {x=0.175, y=0.175, z=0.175}, + paramtype = "light", + tiles = {"ferns_fern_tree_giant.png"}, + inventory_image = "ferns_fern_tree.png", + walkable = false, + groups = { + snappy=3, + flammable=2, + attached_node=1, + not_in_creative_inventory=1 + }, + drop = { + max_items = 2, + items = { + { + -- occasionally, drop a second sapling instead of leaves + -- (extra saplings can also be obtained by replanting and + -- reharvesting leaves) + items = {"ferns:sapling_giant_tree_fern"}, + rarity = 10, + }, + { + items = {"ferns:sapling_giant_tree_fern"}, + }, + { + items = {"ferns:tree_fern_leaves_giant"}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN LEAVE PART +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:tree_fern_leave_big", { + description = S("Giant Tree Fern Leaves"), + drawtype = "raillike", + paramtype = "light", + tiles = { + "ferns_tree_fern_leave_big.png", + }, + walkable = false, + groups = { + snappy=3, + flammable=2, + attached_node=1, + not_in_creative_inventory=1 + }, + drop = "", + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN LEAVE END +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:tree_fern_leave_big_end", { + description = S("Giant Tree Fern Leave End"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = { "ferns_tree_fern_leave_big_end.png" }, + walkable = false, + node_box = { + type = "fixed", +-- {left, bottom, front, right, top, back } + fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2}, + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2}, + }, + groups = { + snappy=3, + flammable=2, + attached_node=1, + not_in_creative_inventory=1 + }, + drop = "", + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN TRUNK TOP +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:fern_trunk_big_top", { + description = S("Giant Fern Trunk"), + drawtype = "nodebox", + paramtype = "light", + tiles = { + "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png", + "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png", + "ferns_fern_trunk_big.png" + }, + node_box = { + type = "fixed", +-- {left, bottom, front, right, top, back } + fixed = { + {-1/2, 33/64, -1/2, 1/2, 33/64, 1/2}, + {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, + } + }, + selection_box = { + type = "fixed", + fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, + }, + groups = { + tree=1, + choppy=2, + oddly_breakable_by_hand=2, + flammable=3, + wood=1, + not_in_creative_inventory=1, + leafdecay=3 -- to support vines + }, + drop = "ferns:fern_trunk_big", + sounds = default.node_sound_wood_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN TRUNK +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:fern_trunk_big", { + description = S("Giant Fern Trunk"), + drawtype = "nodebox", + paramtype = "light", + tiles = { + "ferns_fern_trunk_big_top.png", + "ferns_fern_trunk_big_top.png", + "ferns_fern_trunk_big.png" + }, + node_box = { + type = "fixed", + fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, + }, + selection_box = { + type = "fixed", + fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, + }, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), + after_destruct = function(pos,oldnode) + local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) + if node.name == "ferns:fern_trunk_big" or node.name == "ferns:fern_trunk_big_top" then + minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) + minetest.add_item(pos,"ferns:fern_trunk_big") + end + end, +}) + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN SAPLING +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:sapling_giant_tree_fern", { + description = S("Giant Tree Fern Sapling"), + drawtype = "plantlike", + paramtype = "light", + tiles = {"ferns_sapling_tree_fern_giant.png"}, + inventory_image = "ferns_sapling_tree_fern_giant.png", + walkable = false, + groups = {snappy=3,flammable=2,flora=1,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) + +-- abm +minetest.register_abm({ + nodenames = "ferns:sapling_giant_tree_fern", + interval = 1000, + chance = 4, + action = function(pos, node, _, _) + abstract_ferns.grow_giant_tree_fern({x = pos.x, y = pos.y-1, z = pos.z}) + end +}) + +----------------------------------------------------------------------------------------------- +-- GENERATE GIANT TREE FERN +----------------------------------------------------------------------------------------------- + +-- in jungles +biome_lib:register_generate_plant({ + surface = { + "default:dirt_with_grass", + "default:dirt_with_rainforest_litter", -- minetest >= 0.4.16 + "default:sand", + "default:desert_sand"--, + --"dryplants:grass_short" + }, + max_count = 12,--27, + avoid_nodes = {"group:tree"}, + avoid_radius = 3,--4, + rarity = 85, + seed_diff = 329, + min_elevation = 1, + near_nodes = {"default:jungletree"}, + near_nodes_size = 6, + near_nodes_vertical = 2,--4, + near_nodes_count = 1, + plantlife_limit = -0.9, +}, +abstract_ferns.grow_giant_tree_fern +) + +-- for oases & tropical beaches +biome_lib:register_generate_plant({ + surface = { + "default:sand"--, + --"default:desert_sand" + }, + max_count = 10,--27, + rarity = 90, + seed_diff = 329, + neighbors = {"default:desert_sand"}, + ncount = 1, + min_elevation = 1, + near_nodes = {"default:water_source", "default:river_water_source"}, + near_nodes_size = 2, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + humidity_max = -1.0, + humidity_min = 1.0, + temp_max = -1.0, + temp_min = 1.0, +}, +abstract_ferns.grow_giant_tree_fern +) diff --git a/mods/plantlife/ferns/init.lua b/mods/plantlife/ferns/init.lua new file mode 100755 index 0000000..c2881e8 --- /dev/null +++ b/mods/plantlife/ferns/init.lua @@ -0,0 +1,21 @@ +----------------------------------------------------------------------------------------------- +local title = "Ferns" -- former "Archae Plantae" +local version = "0.2.1" +local mname = "ferns" -- former "archaeplantae" +----------------------------------------------------------------------------------------------- +-- (by Mossmanikin) +-- License (everything): WTFPL +----------------------------------------------------------------------------------------------- + +abstract_ferns = {} + +-- support for i18n +local S = plantlife_i18n.gettext + +dofile(minetest.get_modpath("ferns").."/treefern.lua") +dofile(minetest.get_modpath("ferns").."/gianttreefern.lua") +dofile(minetest.get_modpath("ferns").."/crafting.lua") + +----------------------------------------------------------------------------------------------- +print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") +----------------------------------------------------------------------------------------------- diff --git a/mods/ITEMS/ferns/textures/ferns_5.png b/mods/plantlife/ferns/textures/ferns_5.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_5.png rename to mods/plantlife/ferns/textures/ferns_5.png diff --git a/mods/ITEMS/ferns/textures/ferns_6.png b/mods/plantlife/ferns/textures/ferns_6.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_6.png rename to mods/plantlife/ferns/textures/ferns_6.png diff --git a/mods/ITEMS/ferns/textures/ferns_7.png b/mods/plantlife/ferns/textures/ferns_7.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_7.png rename to mods/plantlife/ferns/textures/ferns_7.png diff --git a/mods/ITEMS/ferns/textures/ferns_8.png b/mods/plantlife/ferns/textures/ferns_8.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_8.png rename to mods/plantlife/ferns/textures/ferns_8.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern.png b/mods/plantlife/ferns/textures/ferns_fern.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern.png rename to mods/plantlife/ferns/textures/ferns_fern.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_big.png b/mods/plantlife/ferns/textures/ferns_fern_big.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_big.png rename to mods/plantlife/ferns/textures/ferns_fern_big.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_mid.png b/mods/plantlife/ferns/textures/ferns_fern_mid.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_mid.png rename to mods/plantlife/ferns/textures/ferns_fern_mid.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_tree.png b/mods/plantlife/ferns/textures/ferns_fern_tree.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_tree.png rename to mods/plantlife/ferns/textures/ferns_fern_tree.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_tree_giant.png b/mods/plantlife/ferns/textures/ferns_fern_tree_giant.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_tree_giant.png rename to mods/plantlife/ferns/textures/ferns_fern_tree_giant.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_tree_inv.png b/mods/plantlife/ferns/textures/ferns_fern_tree_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_tree_inv.png rename to mods/plantlife/ferns/textures/ferns_fern_tree_inv.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_tree_tl.png b/mods/plantlife/ferns/textures/ferns_fern_tree_tl.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_tree_tl.png rename to mods/plantlife/ferns/textures/ferns_fern_tree_tl.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_tree_tr.png b/mods/plantlife/ferns/textures/ferns_fern_tree_tr.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_tree_tr.png rename to mods/plantlife/ferns/textures/ferns_fern_tree_tr.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_trunk.png b/mods/plantlife/ferns/textures/ferns_fern_trunk.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_trunk.png rename to mods/plantlife/ferns/textures/ferns_fern_trunk.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_trunk_big.png b/mods/plantlife/ferns/textures/ferns_fern_trunk_big.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_trunk_big.png rename to mods/plantlife/ferns/textures/ferns_fern_trunk_big.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_trunk_big_top.png b/mods/plantlife/ferns/textures/ferns_fern_trunk_big_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_trunk_big_top.png rename to mods/plantlife/ferns/textures/ferns_fern_trunk_big_top.png diff --git a/mods/ITEMS/ferns/textures/ferns_fern_trunk_top.png b/mods/plantlife/ferns/textures/ferns_fern_trunk_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fern_trunk_top.png rename to mods/plantlife/ferns/textures/ferns_fern_trunk_top.png diff --git a/mods/ITEMS/ferns/textures/ferns_ferntuber.png b/mods/plantlife/ferns/textures/ferns_ferntuber.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_ferntuber.png rename to mods/plantlife/ferns/textures/ferns_ferntuber.png diff --git a/mods/ITEMS/ferns/textures/ferns_ferntuber_roasted.png b/mods/plantlife/ferns/textures/ferns_ferntuber_roasted.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_ferntuber_roasted.png rename to mods/plantlife/ferns/textures/ferns_ferntuber_roasted.png diff --git a/mods/ITEMS/ferns/textures/ferns_fiddlehead.png b/mods/plantlife/ferns/textures/ferns_fiddlehead.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fiddlehead.png rename to mods/plantlife/ferns/textures/ferns_fiddlehead.png diff --git a/mods/ITEMS/ferns/textures/ferns_fiddlehead_roasted.png b/mods/plantlife/ferns/textures/ferns_fiddlehead_roasted.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_fiddlehead_roasted.png rename to mods/plantlife/ferns/textures/ferns_fiddlehead_roasted.png diff --git a/mods/ITEMS/ferns/textures/ferns_horsetail_01.png b/mods/plantlife/ferns/textures/ferns_horsetail_01.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_horsetail_01.png rename to mods/plantlife/ferns/textures/ferns_horsetail_01.png diff --git a/mods/ITEMS/ferns/textures/ferns_horsetail_02.png b/mods/plantlife/ferns/textures/ferns_horsetail_02.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_horsetail_02.png rename to mods/plantlife/ferns/textures/ferns_horsetail_02.png diff --git a/mods/ITEMS/ferns/textures/ferns_horsetail_03.png b/mods/plantlife/ferns/textures/ferns_horsetail_03.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_horsetail_03.png rename to mods/plantlife/ferns/textures/ferns_horsetail_03.png diff --git a/mods/ITEMS/ferns/textures/ferns_horsetail_04.png b/mods/plantlife/ferns/textures/ferns_horsetail_04.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_horsetail_04.png rename to mods/plantlife/ferns/textures/ferns_horsetail_04.png diff --git a/mods/ITEMS/ferns/textures/ferns_sapling_tree_fern.png b/mods/plantlife/ferns/textures/ferns_sapling_tree_fern.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_sapling_tree_fern.png rename to mods/plantlife/ferns/textures/ferns_sapling_tree_fern.png diff --git a/mods/ITEMS/ferns/textures/ferns_sapling_tree_fern_giant.png b/mods/plantlife/ferns/textures/ferns_sapling_tree_fern_giant.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_sapling_tree_fern_giant.png rename to mods/plantlife/ferns/textures/ferns_sapling_tree_fern_giant.png diff --git a/mods/ITEMS/ferns/textures/ferns_tree_fern_leave_big.png b/mods/plantlife/ferns/textures/ferns_tree_fern_leave_big.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_tree_fern_leave_big.png rename to mods/plantlife/ferns/textures/ferns_tree_fern_leave_big.png diff --git a/mods/ITEMS/ferns/textures/ferns_tree_fern_leave_big_cross.png b/mods/plantlife/ferns/textures/ferns_tree_fern_leave_big_cross.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_tree_fern_leave_big_cross.png rename to mods/plantlife/ferns/textures/ferns_tree_fern_leave_big_cross.png diff --git a/mods/ITEMS/ferns/textures/ferns_tree_fern_leave_big_end.png b/mods/plantlife/ferns/textures/ferns_tree_fern_leave_big_end.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/ferns/textures/ferns_tree_fern_leave_big_end.png rename to mods/plantlife/ferns/textures/ferns_tree_fern_leave_big_end.png diff --git a/mods/plantlife/ferns/treefern.lua b/mods/plantlife/ferns/treefern.lua new file mode 100755 index 0000000..5273afb --- /dev/null +++ b/mods/plantlife/ferns/treefern.lua @@ -0,0 +1,229 @@ +----------------------------------------------------------------------------------------------- +-- Ferns - Tree Fern 0.1.1 +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- License (everything): WTFPL +-- Contains code from: biome_lib +-- Looked at code from: default , trees +----------------------------------------------------------------------------------------------- + +-- support for i18n +local S = plantlife_i18n.gettext + +abstract_ferns.grow_tree_fern = function(pos) + + local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} + if minetest.get_node(pos_01).name ~= "air" + and minetest.get_node(pos_01).name ~= "ferns:sapling_tree_fern" + and minetest.get_node(pos_01).name ~= "default:junglegrass" then + return + end + + local size = math.random(1, 4) + math.random(1, 4) + if (size > 5) then + size = 10 - size + end + size = size + 1 + local crown = ({ "ferns:tree_fern_leaves", "ferns:tree_fern_leaves_02" })[math.random(1, 2)] + + local i = 1 + local brk = false + while (i < size) do + if minetest.get_node({x = pos.x, y = pos.y + i, z = pos.z}).name ~= "air" then + brk = true + break + end + minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, { name = "ferns:fern_trunk" }) + i = i + 1 + end + if not brk then + minetest.set_node({x = pos.x, y = pos.y + i - 1, z = pos.z}, { name = crown }) + end +end + +----------------------------------------------------------------------------------------------- +-- TREE FERN LEAVES +----------------------------------------------------------------------------------------------- + +-- TODO: Both of these nodes look the same? + +minetest.register_node("ferns:tree_fern_leaves", { + description = S("Tree Fern Crown (Dicksonia)"), + drawtype = "plantlike", + visual_scale = math.sqrt(8), + paramtype = "light", + paramtype2 = "facedir", + --tiles = {"[combine:32x32:0,0=top_left.png:0,16=bottom_left.png:16,0=top_right.png:16,16=bottom_right.png"}, + tiles = {"ferns_fern_tree.png"}, + inventory_image = "ferns_fern_tree_inv.png", + walkable = false, + groups = {snappy=3,flammable=2,attached_node=1}, + drop = { + max_items = 2, + items = { + { + -- occasionally, drop a second sapling instead of leaves + -- (extra saplings can also be obtained by replanting and + -- reharvesting leaves) + items = {"ferns:sapling_tree_fern"}, + rarity = 10, + }, + { + items = {"ferns:sapling_tree_fern"}, + }, + { + items = {"ferns:tree_fern_leaves"}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) +minetest.register_node("ferns:tree_fern_leaves_02", { + drawtype = "plantlike", + visual_scale = math.sqrt(8), + paramtype = "light", + tiles = {"ferns_fern_big.png"}, + walkable = false, + groups = {snappy=3,flammable=2,attached_node=1,not_in_creative_inventory=1}, + drop = { + max_items = 2, + items = { + { + -- occasionally, drop a second sapling instead of leaves + -- (extra saplings can also be obtained by replanting and + -- reharvesting leaves) + items = {"ferns:sapling_tree_fern"}, + rarity = 10, + }, + { + items = {"ferns:sapling_tree_fern"}, + }, + { + items = {"ferns:tree_fern_leaves"}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) +----------------------------------------------------------------------------------------------- +-- FERN TRUNK +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:fern_trunk", { + description = S("Fern Trunk (Dicksonia)"), + drawtype = "nodebox", + paramtype = "light", + tiles = { + "ferns_fern_trunk_top.png", + "ferns_fern_trunk_top.png", + "ferns_fern_trunk.png" + }, + node_box = { + type = "fixed", + fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}, + }, + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), + after_destruct = function(pos,oldnode) + local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) + if node.name == "ferns:fern_trunk" then + minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) + minetest.add_item(pos,"ferns:fern_trunk") + end + end, +}) + +----------------------------------------------------------------------------------------------- +-- TREE FERN SAPLING +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:sapling_tree_fern", { + description = S("Tree Fern Sapling (Dicksonia)"), + drawtype = "plantlike", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"ferns_sapling_tree_fern.png"}, + inventory_image = "ferns_sapling_tree_fern.png", + walkable = false, + groups = {snappy=3,flammable=2,flora=1,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) +-- abm +minetest.register_abm({ + nodenames = "ferns:sapling_tree_fern", + interval = 1000, + chance = 4, + action = function(pos, node, _, _) + abstract_ferns.grow_tree_fern({x = pos.x, y = pos.y-1, z = pos.z}) + end +}) + +----------------------------------------------------------------------------------------------- +-- GENERATE TREE FERN +----------------------------------------------------------------------------------------------- + +-- in jungles +biome_lib:register_generate_plant({ + surface = { + "default:dirt_with_grass", + "default:dirt_with_rainforest_litter", -- minetest >= 0.4.16 + "default:sand", + "default:desert_sand", + }, + max_count = 35,--27, + avoid_nodes = {"default:tree"}, + avoid_radius = 4, + rarity = 50, + seed_diff = 329, + min_elevation = -10, + near_nodes = {"default:jungletree"}, + near_nodes_size = 6, + near_nodes_vertical = 2,--4, + near_nodes_count = 1, + plantlife_limit = -0.9, + humidity_max = -1.0, + humidity_min = 0.4, + temp_max = -0.5, + temp_min = 0.13, +}, +abstract_ferns.grow_tree_fern +) + +-- for oases & tropical beaches +biome_lib:register_generate_plant({ + surface = { + "default:sand"--, + --"default:desert_sand" + }, + max_count = 35, + rarity = 50, + seed_diff = 329, + neighbors = {"default:desert_sand"}, + ncount = 1, + min_elevation = 1, + near_nodes = {"default:water_source","default:river_water_source"}, + near_nodes_size = 2, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + humidity_max = -1.0, + humidity_min = 1.0, + temp_max = -1.0, + temp_min = 1.0, +}, +abstract_ferns.grow_tree_fern +) diff --git a/mods/plantlife/flowers_plus/depends.txt b/mods/plantlife/flowers_plus/depends.txt new file mode 100755 index 0000000..0c1af97 --- /dev/null +++ b/mods/plantlife/flowers_plus/depends.txt @@ -0,0 +1,4 @@ +biome_lib +plantlife_i18n +farming? +flowers? diff --git a/mods/ITEMS/flowers_plus/flowers-changelog.txt b/mods/plantlife/flowers_plus/flowers-changelog.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers_plus/flowers-changelog.txt rename to mods/plantlife/flowers_plus/flowers-changelog.txt diff --git a/mods/plantlife/flowers_plus/init.lua b/mods/plantlife/flowers_plus/init.lua new file mode 100755 index 0000000..be8a3b4 --- /dev/null +++ b/mods/plantlife/flowers_plus/init.lua @@ -0,0 +1,212 @@ +-- support for i18n +local S = plantlife_i18n.gettext + +-- This file supplies a few additional plants and some related crafts +-- for the plantlife modpack. Last revision: 2013-04-24 + +flowers_plus = {} + +local SPAWN_DELAY = 1000 +local SPAWN_CHANCE = 200 +local flowers_seed_diff = 329 +local seaweed_max_count = 320 +local seaweed_rarity = 33 + +local algae_list = { {nil}, {2}, {3}, {4} } + +for i in ipairs(algae_list) do + local num = "" + local algae_groups = {snappy = 3,flammable=2,flower=1} + + if algae_list[i][1] ~= nil then + num = "_"..algae_list[i][1] + algae_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 } + end + + minetest.register_node(":flowers:seaweed"..num, { + description = S("Seaweed"), + drawtype = "nodebox", + tiles = { + "flowers_seaweed"..num..".png", + "flowers_seaweed"..num..".png^[transformFY" + }, + inventory_image = "flowers_seaweed_2.png", + wield_image = "flowers_seaweed_2.png", + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + groups = algae_groups, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 }, + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 }, + }, + buildable_to = true, + + liquids_pointable = true, + drop = "flowers:seaweed", + on_place = function(itemstack, placer, pointed_thing) + local keys=placer:get_player_control() + local pt = pointed_thing + + local place_pos = nil + local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + local under_node = minetest.get_node(pt.under) + 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 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 + place_pos = top_pos + else + return + end + elseif biome_lib:get_nodedef_field(above_node.name, "buildable_to") then + place_pos = pt.above + end + + if not minetest.is_protected(place_pos, placer:get_player_name()) then + + local nodename = "default:cobble" -- :D + + if not keys["sneak"] then + --local node = minetest.get_node(pt.under) + local seaweed = math.random(1,4) + if seaweed == 1 then + nodename = "flowers:seaweed" + elseif seaweed == 2 then + nodename = "flowers:seaweed_2" + elseif seaweed == 3 then + nodename = "flowers:seaweed_3" + elseif seaweed == 4 then + nodename = "flowers:seaweed_4" + end + minetest.set_node(place_pos, {name = nodename, param2 = math.random(0,3) }) + else + local fdir = minetest.dir_to_facedir(placer:get_look_dir()) + minetest.set_node(place_pos, {name = "flowers:seaweed", param2 = fdir}) + end + + if not biome_lib.expect_infinite_stacks then + itemstack:take_item() + end + return itemstack + end + end, + }) +end + +local box = { + type="fixed", + fixed = { { -0.2, -0.5, -0.2, 0.2, 0.5, 0.2 } }, +} + +-- ongen registrations + +flowers_plus.grow_seaweed = function(pos) + local right_here = {x=pos.x, y=pos.y+1, z=pos.z} + minetest.set_node(right_here, {name="flowers:seaweed_"..math.random(1,4), param2=math.random(1,3)}) +end + +biome_lib:register_generate_plant({ + surface = {"default:water_source"}, + max_count = seaweed_max_count, + rarity = seaweed_rarity, + min_elevation = 1, + max_elevation = 40, + near_nodes = {"default:dirt_with_grass"}, + near_nodes_size = 4, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + flowers_plus.grow_seaweed +) + +-- seaweed at beaches +-- MM: not satisfied with it, but IMHO some beaches should have some algae +biome_lib:register_generate_plant({ + surface = {"default:water_source"}, + max_count = seaweed_max_count, + rarity = seaweed_rarity, + min_elevation = 1, + max_elevation = 40, + near_nodes = {"default:sand"}, + near_nodes_size = 1, + near_nodes_vertical = 0, + near_nodes_count = 3, + plantlife_limit = -0.9, + temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere + temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere + }, + flowers_plus.grow_seaweed +) +biome_lib:register_generate_plant({ + surface = {"default:sand"}, + max_count = seaweed_max_count*2, + rarity = seaweed_rarity/2, + min_elevation = 1, + max_elevation = 40, + near_nodes = {"default:water_source"}, + near_nodes_size = 1, + near_nodes_vertical = 0, + near_nodes_count = 3, + plantlife_limit = -0.9, + temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere + temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere + }, + flowers_plus.grow_seaweed +) + +-- spawn ABM registrations + +biome_lib:spawn_on_surfaces({ + spawn_delay = SPAWN_DELAY*2, + spawn_plants = {"flowers:seaweed"}, + spawn_chance = SPAWN_CHANCE*2, + spawn_surfaces = {"default:water_source"}, + avoid_nodes = {"group:flower", "group:flora"}, + seed_diff = flowers_seed_diff, + light_min = 4, + light_max = 10, + neighbors = {"default:dirt_with_grass"}, + facedir = 1 +}) + +biome_lib:spawn_on_surfaces({ + spawn_delay = SPAWN_DELAY*2, + spawn_plants = {"flowers:seaweed"}, + spawn_chance = SPAWN_CHANCE*2, + spawn_surfaces = {"default:dirt_with_grass"}, + avoid_nodes = {"group:flower", "group:flora" }, + seed_diff = flowers_seed_diff, + light_min = 4, + light_max = 10, + neighbors = {"default:water_source"}, + ncount = 1, + facedir = 1 +}) + +biome_lib:spawn_on_surfaces({ + spawn_delay = SPAWN_DELAY*2, + spawn_plants = {"flowers:seaweed"}, + spawn_chance = SPAWN_CHANCE*2, + spawn_surfaces = {"default:stone"}, + avoid_nodes = {"group:flower", "group:flora" }, + seed_diff = flowers_seed_diff, + light_min = 4, + light_max = 10, + neighbors = {"default:water_source"}, + ncount = 6, + facedir = 1 +}) + +print(S("[Flowers] Loaded.")) diff --git a/mods/ITEMS/flowers_plus/textures/flowers_seaweed.png b/mods/plantlife/flowers_plus/textures/flowers_seaweed.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers_plus/textures/flowers_seaweed.png rename to mods/plantlife/flowers_plus/textures/flowers_seaweed.png diff --git a/mods/ITEMS/flowers_plus/textures/flowers_seaweedLight.png b/mods/plantlife/flowers_plus/textures/flowers_seaweedLight.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers_plus/textures/flowers_seaweedLight.png rename to mods/plantlife/flowers_plus/textures/flowers_seaweedLight.png diff --git a/mods/ITEMS/flowers_plus/textures/flowers_seaweed_2.png b/mods/plantlife/flowers_plus/textures/flowers_seaweed_2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers_plus/textures/flowers_seaweed_2.png rename to mods/plantlife/flowers_plus/textures/flowers_seaweed_2.png diff --git a/mods/ITEMS/flowers_plus/textures/flowers_seaweed_3.png b/mods/plantlife/flowers_plus/textures/flowers_seaweed_3.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers_plus/textures/flowers_seaweed_3.png rename to mods/plantlife/flowers_plus/textures/flowers_seaweed_3.png diff --git a/mods/ITEMS/flowers_plus/textures/flowers_seaweed_4.png b/mods/plantlife/flowers_plus/textures/flowers_seaweed_4.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/flowers_plus/textures/flowers_seaweed_4.png rename to mods/plantlife/flowers_plus/textures/flowers_seaweed_4.png diff --git a/mods/CORE/modpack.txt b/mods/plantlife/modpack.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/CORE/modpack.txt rename to mods/plantlife/modpack.txt diff --git a/mods/plantlife/nature_classic/blossom.lua b/mods/plantlife/nature_classic/blossom.lua new file mode 100755 index 0000000..8bb68e0 --- /dev/null +++ b/mods/plantlife/nature_classic/blossom.lua @@ -0,0 +1,83 @@ +-- support for i18n +local S = plantlife_i18n.gettext +-- Blossoms and such + +local function spawn_apple_under(pos) + local below = { + x = pos.x, + y = pos.y - 1, + z = pos.z, + } + if minetest.get_node(below).name == "air" then + minetest.set_node(below, { name = "default:apple" }) + end +end + +minetest.register_node(":"..nature.blossom_node, { + description = S("Apple blossoms"), + drawtype = "allfaces_optional", + tiles = nature.blossom_textures, + paramtype = "light", + groups = nature.blossom_groups, + sounds = default.node_sound_leaves_defaults(), + waving = 1 +}) + +default.register_leafdecay({ + trunks = { nature.blossom_trunk }, + leaves = { nature.blossom_node, nature.blossom_leaves }, + radius = nature.blossom_decay, +}) + +minetest.register_craft({ + type = "fuel", + recipe = nature.blossom_node, + burntime = 2, +}) + +-- these ABMs can get heavy, so just enqueue the nodes + +-- Adding Blossoms +-- Limit mass changes after block has not been loaded for some time: +-- Run ABM with higher frequency, but don't enqueue all blocks +minetest.register_abm({ + nodenames = { nature.blossom_leaves }, + interval = nature.blossom_delay / nature.leaves_blossom_chance, + chance = nature.leaves_blossom_chance, + + action = function(pos, node, active_object_count, active_object_count_wider) + if math.random(nature.leaves_blossom_chance) == 1 then + nature.enqueue_node(pos, node, nature.blossom_node) + end + end +}) + +-- Removing blossoms +-- Limit mass changes after block has not been loaded for some time: +-- Run ABM with higher frequency, but don't enqueue all blocks +minetest.register_abm({ + nodenames = { nature.blossom_node }, + interval = nature.blossom_delay / nature.blossom_leaves_chance, + chance = nature.blossom_leaves_chance, + + action = function(pos, node, active_object_count, active_object_count_wider) + if math.random(nature.blossom_leaves_chance) == 1 then + nature.enqueue_node(pos, node, nature.blossom_leaves) + end + end +}) + +-- Spawning apples +-- Limit mass changes after block has not been loaded for some time: +-- spawn apples with 25% chance, but with 4 times higher frequency +minetest.register_abm({ + nodenames = { nature.blossom_node }, + interval = nature.apple_delay / 4, + chance = nature.apple_chance, + + action = function(pos, node, active_object_count, active_object_count_wider) + if math.random(4) == 1 and nature.dtime < 0.2 and not minetest.find_node_near(pos, nature.apple_spread, { "default:apple" }) then + spawn_apple_under(pos) + end + end +}) diff --git a/mods/plantlife/nature_classic/config.lua b/mods/plantlife/nature_classic/config.lua new file mode 100755 index 0000000..8f67b1c --- /dev/null +++ b/mods/plantlife/nature_classic/config.lua @@ -0,0 +1,6 @@ +-- Set on which distance from water can the tree still grow. +-- Grows anywhere if set to -1. +nature.distance_from_water = 20 + +-- Minimum light level needed to grow. Default is 8, which means daylight. +nature.minimum_growth_light = 8 diff --git a/mods/plantlife/nature_classic/depends.txt b/mods/plantlife/nature_classic/depends.txt new file mode 100755 index 0000000..ad4030f --- /dev/null +++ b/mods/plantlife/nature_classic/depends.txt @@ -0,0 +1,3 @@ +default +plantlife_i18n +moretrees? diff --git a/mods/plantlife/nature_classic/global_function.lua b/mods/plantlife/nature_classic/global_function.lua new file mode 100755 index 0000000..c6b158a --- /dev/null +++ b/mods/plantlife/nature_classic/global_function.lua @@ -0,0 +1,82 @@ +-- helper functions + +local function process_blossom_queue_item() + local pos = nature.blossomqueue[1][1] + local node = nature.blossomqueue[1][2] + local replace = nature.blossomqueue[1][3] + if (nature.blossomqueue[1][3] == nature.blossom_node and not nature:is_near_water(pos)) then + table.remove(nature.blossomqueue, 1) -- don't grow if it's not near water, pop from queue. + return + end + nature:grow_node(pos, replace) -- now actually grow it. + table.remove(nature.blossomqueue, 1) +end + +minetest.register_globalstep(function(dtime) + nature.dtime = dtime + if #nature.blossomqueue > 0 and dtime < 0.2 then + local i = 1 + if dtime < 0.1 then + i = i + 4 + end + if dtime < 0.05 then + i = i + 10 + end + while #nature.blossomqueue > 0 and i > 0 do + process_blossom_queue_item() + i = i - 1 + end + end +end) + +function nature.enqueue_node(pos, node, replace) + local idx = #nature.blossomqueue + if idx < nature.blossomqueue_max then + local enqueue_prob = 0 + if idx < nature.blossomqueue_max * 0.8 then + enqueue_prob = 1 + else + -- Reduce queue growth as it gets closer to its max. + enqueue_prob = 1 - (idx - nature.blossomqueue_max * 0.8) / (nature.blossomqueue_max * 0.2) + end + if enqueue_prob == 1 or math.random(100) <= 100 * enqueue_prob then + nature.blossomqueue[idx+1] = {} + nature.blossomqueue[idx+1][1] = pos + nature.blossomqueue[idx+1][2] = node + nature.blossomqueue[idx+1][3] = replace + end + end +end + +local function set_young_node(pos) + local meta = minetest.get_meta(pos) + + meta:set_int(nature.meta_blossom_time, minetest.get_gametime()) +end + +local function is_not_young(pos) + local meta = minetest.get_meta(pos) + + local blossom_time = meta:get_int(nature.meta_blossom_time) + return not (blossom_time and minetest.get_gametime() - blossom_time < nature.blossom_duration) +end + +function nature:grow_node(pos, nodename) + if pos ~= nil then + local light_enough = (minetest.get_node_light(pos, nil) or 0) + >= nature.minimum_growth_light + + if is_not_young(pos) and light_enough then + minetest.set_node(pos, { name = nodename }) + set_young_node(pos) + + minetest.log("info", nodename .. " has grown at " .. pos.x .. "," + .. pos.y .. "," .. pos.z) + end + end +end + +function nature:is_near_water(pos) + return nature.distance_from_water == -1 or minetest.find_node_near(pos, nature.distance_from_water, + { "default:water_source" }) ~= nil +end diff --git a/mods/plantlife/nature_classic/init.lua b/mods/plantlife/nature_classic/init.lua new file mode 100755 index 0000000..1135175 --- /dev/null +++ b/mods/plantlife/nature_classic/init.lua @@ -0,0 +1,50 @@ +-- Nature Classic mod +-- Originally by neko259 + +-- Nature is slowly capturing the world! + +local current_mod_name = minetest.get_current_modname() + +nature = {} +-- support for i18n +local S = plantlife_i18n.gettext + +nature.blossomqueue = {} +nature.blossomqueue_max = 1000 + +nature.blossom_decay = 2 +nature.blossom_trunk = "default:tree" +nature.blossom_node = "nature:blossom" +nature.blossom_leaves = "default:leaves" +nature.blossom_textures = { "default_leaves.png^nature_blossom.png" } +nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2 } + +if minetest.get_modpath("moretrees") then + nature.blossom_decay = moretrees.leafdecay_radius + nature.blossom_trunk = "moretrees:apple_tree_trunk" + nature.blossom_node = "moretrees:apple_blossoms" + nature.blossom_leaves = "moretrees:apple_tree_leaves" + nature.blossom_textures = { "moretrees_apple_tree_leaves.png^nature_blossom.png" } + nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2, moretrees_leaves = 1 }, + minetest.register_alias("nature:blossom", "default:leaves") +end + +nature.leaves_blossom_chance = 15 +nature.blossom_leaves_chance = 5 +nature.blossom_delay = 3600 +nature.apple_delay = 3600 +nature.apple_chance = 10 +nature.apple_spread = 2 + +nature.meta_blossom_time = "blossom_time" +nature.blossom_duration = nature.blossom_delay + +function dumppos(pos) + return "("..pos.x..","..pos.y..","..pos.z..")" +end + +dofile(minetest.get_modpath(current_mod_name) .. "/config.lua") +dofile(minetest.get_modpath(current_mod_name) .. "/global_function.lua") +dofile(minetest.get_modpath(current_mod_name) .. "/blossom.lua") + +minetest.log("info", S("[Nature Classic] loaded!")) diff --git a/mods/plantlife/nature_classic/textures/nature_blossom.png b/mods/plantlife/nature_classic/textures/nature_blossom.png new file mode 100755 index 0000000..9d90336 Binary files /dev/null and b/mods/plantlife/nature_classic/textures/nature_blossom.png differ diff --git a/mods/CORE/plantlife_i18n/depends.txt b/mods/plantlife/plantlife_i18n/depends.txt similarity index 100% rename from mods/CORE/plantlife_i18n/depends.txt rename to mods/plantlife/plantlife_i18n/depends.txt diff --git a/mods/CORE/plantlife_i18n/init.lua b/mods/plantlife/plantlife_i18n/init.lua similarity index 100% rename from mods/CORE/plantlife_i18n/init.lua rename to mods/plantlife/plantlife_i18n/init.lua diff --git a/mods/CORE/plantlife_i18n/intllib.lua b/mods/plantlife/plantlife_i18n/intllib.lua similarity index 100% rename from mods/CORE/plantlife_i18n/intllib.lua rename to mods/plantlife/plantlife_i18n/intllib.lua diff --git a/mods/plantlife/plantlife_i18n/locale/de.po b/mods/plantlife/plantlife_i18n/locale/de.po new file mode 100755 index 0000000..e0bbcaf --- /dev/null +++ b/mods/plantlife/plantlife_i18n/locale/de.po @@ -0,0 +1,484 @@ +# 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-08-03 11:09+0200\n" +"PO-Revision-Date: 2017-08-03 11:32+0200\n" +"Last-Translator: Xanthin\n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.12\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../bushes/init.lua +msgid "Young Tree 2 (bottom)" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Branches @1" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Leaves @1" +msgstr "" + +#: ../bushes_classic/cooking.lua +msgid "Sugar" +msgstr "Zucker" + +#: ../bushes_classic/init.lua +msgid "Basket with Strawberry pies" +msgstr "Korb mit Erdbeertorten" + +#: ../bushes_classic/init.lua +msgid "Cooked Strawberry pie" +msgstr "Erdbeertorte" + +#: ../bushes_classic/init.lua +msgid "Raw Strawberry pie" +msgstr "Rohe Erdbeertorte" + +#: ../bushes_classic/init.lua +msgid "Slice of Strawberry pie" +msgstr "Erdbeertortenstueck" + +#: ../bushes_classic/init.lua +msgid "Strawberry" +msgstr "Erdbeere" + +#: ../bushes_classic/init.lua +msgid "Strawberry Bush" +msgstr "Erdbeerbusch" + +#: ../bushes_classic/init.lua +msgid "Basket with Blackberry pies" +msgstr "Korb mit Brombeertorten" + +#: ../bushes_classic/init.lua +msgid "Blackberry" +msgstr "Brombeere" + +#: ../bushes_classic/init.lua +msgid "Blackberry Bush" +msgstr "Brombeerbusch" + +#: ../bushes_classic/init.lua +msgid "Cooked Blackberry pie" +msgstr "Brombeertorte" + +#: ../bushes_classic/init.lua +msgid "Raw Blackberry pie" +msgstr "Rohe Brombeertorte" + +#: ../bushes_classic/init.lua +msgid "Slice of Blackberry pie" +msgstr "Brombeertortenstueck" + +#: ../bushes_classic/init.lua +msgid "Basket with Blueberry pies" +msgstr "Korb mit Blaubeertorten" + +#: ../bushes_classic/init.lua +msgid "Blueberry" +msgstr "Blaubeere" + +#: ../bushes_classic/init.lua +msgid "Blueberry Bush" +msgstr "Blaubeerbusch" + +#: ../bushes_classic/init.lua +msgid "Cooked Blueberry pie" +msgstr "Blaubeertorte" + +#: ../bushes_classic/init.lua +msgid "Raw Blueberry pie" +msgstr "Rohe Blaubeertorte" + +#: ../bushes_classic/init.lua +msgid "Slice of Blueberry pie" +msgstr "Blaubeertortenstueck" + +#: ../bushes_classic/init.lua +msgid "Basket with Raspberry pies" +msgstr "Korb mit Himbeertorten" + +#: ../bushes_classic/init.lua +msgid "Cooked Raspberry pie" +msgstr "Himbeertorte" + +#: ../bushes_classic/init.lua +msgid "Raspberry" +msgstr "Himbeere" + +#: ../bushes_classic/init.lua +msgid "Raspberry Bush" +msgstr "Himbeerbusch" + +#: ../bushes_classic/init.lua +msgid "Raw Raspberry pie" +msgstr "Rohe Himbeertorte" + +#: ../bushes_classic/init.lua +msgid "Slice of Raspberry pie" +msgstr "Himbeertortenstueck" + +#: ../bushes_classic/init.lua +msgid "Basket with Gooseberry pies" +msgstr "Korb mit Stachelbeertorten" + +#: ../bushes_classic/init.lua +msgid "Cooked Gooseberry pie" +msgstr "Stachelbeertorte" + +#: ../bushes_classic/init.lua +msgid "Gooseberry" +msgstr "Stachelbeere" + +#: ../bushes_classic/init.lua +msgid "Gooseberry Bush" +msgstr "Stachelbeerbusch" + +#: ../bushes_classic/init.lua +msgid "Raw Gooseberry pie" +msgstr "Rohe Stachelbeertorte" + +#: ../bushes_classic/init.lua +msgid "Slice of Gooseberry pie" +msgstr "Stachelbeertortenstueck" + +#: ../bushes_classic/init.lua +msgid "Basket with Mixed Berry pies" +msgstr "Korb mit Beerenmixtorten" + +#: ../bushes_classic/init.lua +msgid "Cooked Mixed Berry pie" +msgstr "Beerenmixtorte" + +#: ../bushes_classic/init.lua +#, fuzzy +msgid "Currently fruitless Bush" +msgstr "zur Zeit fruechteloser" + +#: ../bushes_classic/init.lua +msgid "Mixed Berry" +msgstr "Beerenmix" + +#: ../bushes_classic/init.lua +msgid "Raw Mixed Berry pie" +msgstr "Rohe Beerenmixtorte" + +#: ../bushes_classic/init.lua +msgid "Slice of Mixed Berry pie" +msgstr "Beerenmixtortenstueck" + +#: ../bushes_classic/init.lua +msgid "[Bushes] Loaded." +msgstr "[Bushes] Geladen." + +#: ../bushes_classic/nodes.lua +msgid "Basket" +msgstr "Korb" + +#: ../cavestuff/nodes.lua +msgid "Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Desert Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Stalactite" +msgstr "" + +#: ../dryplants/init.lua +msgid "Sickle" +msgstr "" + +#: ../dryplants/init.lua +msgid "Cut Grass" +msgstr "" + +#: ../dryplants/init.lua +msgid "Hay" +msgstr "" + +#: ../dryplants/init.lua +msgid "Short Grass" +msgstr "" + +#: ../dryplants/juncus.lua +msgid "Juncus" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 1" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3 & Spikes" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fern Tuber" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fern Tuber" +msgstr "" + +#: ../ferns/fern.lua +msgid "Lady-fern (Athyrium)" +msgstr "" + +#: ../ferns/gianttreefern.lua ../ferns/treefern.lua +msgid "Tree Fern Crown (Dicksonia)" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leaves" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leave End" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Fern Trunk" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Sapling" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Young Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Fern Trunk (Dicksonia)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Tree Fern Sapling (Dicksonia)" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "Waterlily" +msgstr "Seerose" + +#: ../flowers_plus/init.lua +msgid "Seaweed" +msgstr "Seetang" + +#: ../flowers_plus/init.lua +msgid "Sunflower" +msgstr "Sonnenblume" + +#: ../flowers_plus/init.lua +msgid "[Flowers] Loaded." +msgstr "[Flowers] Geladen." + +#: ../molehills/init.lua +msgid "Mole Hill" +msgstr "" + +#: ../molehills/init.lua +msgid "Loaded..." +msgstr "" + +#: ../nature_classic/blossom.lua +msgid "Apple blossoms" +msgstr "" + +#: ../nature_classic/init.lua +msgid "[Nature Classic] loaded!" +msgstr "" + +#: ../poisonivy/init.lua +msgid "Poison ivy (seedling)" +msgstr "Giftefeu (Saemling)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (sproutling)" +msgstr "Giftefeu (Sproessling)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (climbing plant)" +msgstr "Giftefeu (Kletterpflanze)" + +#: ../poisonivy/init.lua +msgid "[Poison Ivy] Loaded." +msgstr "[Poison Ivy] Geladen." + +#: ../trunks/nodes.lua +msgid "Twig" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss with Fungus" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Block" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Slab" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 1" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 2" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Root" +msgstr "" + +#: ../vines/crafts.lua ../vines/vines.lua +msgid "Vines" +msgstr "" + +#: ../vines/functions.lua +msgid "Matured" +msgstr "" + +#: ../vines/init.lua +msgid "[Vines] Loaded!" +msgstr "" + +#: ../vines/nodes.lua +msgid "Rope" +msgstr "" + +#: ../vines/shear.lua +msgid "Shears" +msgstr "" + +#: ../vines/vines.lua +msgid "Roots" +msgstr "" + +#: ../vines/vines.lua +msgid "Jungle Vines" +msgstr "" + +#: ../vines/vines.lua +msgid "Willow Vines" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 1" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 2" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 3" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 4" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree 2 (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (top)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (bottom)" +msgstr "" diff --git a/mods/plantlife/plantlife_i18n/locale/es.po b/mods/plantlife/plantlife_i18n/locale/es.po new file mode 100755 index 0000000..358a102 --- /dev/null +++ b/mods/plantlife/plantlife_i18n/locale/es.po @@ -0,0 +1,484 @@ +# 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-08-03 11:34+0200\n" +"PO-Revision-Date: 2017-08-03 11:41+0200\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 1.8.12\n" +"Last-Translator: Carlos Barraza \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: es\n" + +#: ../bushes/init.lua +msgid "Young Tree 2 (bottom)" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Branches @1" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Leaves @1" +msgstr "" + +#: ../bushes_classic/cooking.lua +msgid "Sugar" +msgstr "Azúcar" + +#: ../bushes_classic/init.lua +msgid "Basket with Strawberry pies" +msgstr "Cesta con Pasteles de Frutilla" + +#: ../bushes_classic/init.lua +msgid "Cooked Strawberry pie" +msgstr "Pastel de Frutilla Cocido" + +#: ../bushes_classic/init.lua +msgid "Raw Strawberry pie" +msgstr "Pastel de Frutilla Crudo" + +#: ../bushes_classic/init.lua +msgid "Slice of Strawberry pie" +msgstr "Rebanada de Pastel de Frutilla" + +#: ../bushes_classic/init.lua +msgid "Strawberry" +msgstr "Frutilla" + +#: ../bushes_classic/init.lua +msgid "Strawberry Bush" +msgstr "Arbusto de Frutilla" + +#: ../bushes_classic/init.lua +msgid "Basket with Blackberry pies" +msgstr "Cesta con Pasteles de Mora" + +#: ../bushes_classic/init.lua +msgid "Blackberry" +msgstr "Mora" + +#: ../bushes_classic/init.lua +msgid "Blackberry Bush" +msgstr "Arbusto de Mora" + +#: ../bushes_classic/init.lua +msgid "Cooked Blackberry pie" +msgstr "Pastel de Mora Cocido" + +#: ../bushes_classic/init.lua +msgid "Raw Blackberry pie" +msgstr "Pastel de Mora Crudo" + +#: ../bushes_classic/init.lua +msgid "Slice of Blackberry pie" +msgstr "Rebanada de Pastel de Mora" + +#: ../bushes_classic/init.lua +msgid "Basket with Blueberry pies" +msgstr "Cesta con Pasteles de Arándano" + +#: ../bushes_classic/init.lua +msgid "Blueberry" +msgstr "Arándano" + +#: ../bushes_classic/init.lua +msgid "Blueberry Bush" +msgstr "Arbusto de Arándano" + +#: ../bushes_classic/init.lua +msgid "Cooked Blueberry pie" +msgstr "Pastel de Arándano Cocido" + +#: ../bushes_classic/init.lua +msgid "Raw Blueberry pie" +msgstr "Pastel de Arándano Crudo" + +#: ../bushes_classic/init.lua +msgid "Slice of Blueberry pie" +msgstr "Rebanada de Pastel de Arándano" + +#: ../bushes_classic/init.lua +msgid "Basket with Raspberry pies" +msgstr "Cesta con Pasteles de Frambuesa" + +#: ../bushes_classic/init.lua +msgid "Cooked Raspberry pie" +msgstr "Pastel de Frambuesa Cocido" + +#: ../bushes_classic/init.lua +msgid "Raspberry" +msgstr "Frambuesa" + +#: ../bushes_classic/init.lua +msgid "Raspberry Bush" +msgstr "Arbusto de Frambuesa" + +#: ../bushes_classic/init.lua +msgid "Raw Raspberry pie" +msgstr "Pastel de Frambuesa Crudo" + +#: ../bushes_classic/init.lua +msgid "Slice of Raspberry pie" +msgstr "Rebanada de Pastel de Frambuesa" + +#: ../bushes_classic/init.lua +msgid "Basket with Gooseberry pies" +msgstr "Cesta con Pasteles de Grosella" + +#: ../bushes_classic/init.lua +msgid "Cooked Gooseberry pie" +msgstr "Pastel de Grosella Cocido" + +#: ../bushes_classic/init.lua +msgid "Gooseberry" +msgstr "Grosella" + +#: ../bushes_classic/init.lua +msgid "Gooseberry Bush" +msgstr "Arbusto de Grosella" + +#: ../bushes_classic/init.lua +msgid "Raw Gooseberry pie" +msgstr "Pastel de Grosella Crudo" + +#: ../bushes_classic/init.lua +msgid "Slice of Gooseberry pie" +msgstr "Rebanada de Pastel de Grosella" + +#: ../bushes_classic/init.lua +msgid "Basket with Mixed Berry pies" +msgstr "Cesta con Pasteles de Mezcla de Baya" + +#: ../bushes_classic/init.lua +msgid "Cooked Mixed Berry pie" +msgstr "Pastel de Mezcla de Bayas Cocido" + +#: ../bushes_classic/init.lua +#, fuzzy +msgid "Currently fruitless Bush" +msgstr "Arbusto actualmente infructuoso" + +#: ../bushes_classic/init.lua +msgid "Mixed Berry" +msgstr "Mezcla de Baya" + +#: ../bushes_classic/init.lua +msgid "Raw Mixed Berry pie" +msgstr "Pastel de Mezcla de Bayas Cruda" + +#: ../bushes_classic/init.lua +msgid "Slice of Mixed Berry pie" +msgstr "Rebanada de Pastel de Mezcla de Bayas" + +#: ../bushes_classic/init.lua +msgid "[Bushes] Loaded." +msgstr "[Bushes] Cargado." + +#: ../bushes_classic/nodes.lua +msgid "Basket" +msgstr "Cesta" + +#: ../cavestuff/nodes.lua +msgid "Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Desert Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Stalactite" +msgstr "" + +#: ../dryplants/init.lua +msgid "Sickle" +msgstr "" + +#: ../dryplants/init.lua +msgid "Cut Grass" +msgstr "" + +#: ../dryplants/init.lua +msgid "Hay" +msgstr "" + +#: ../dryplants/init.lua +msgid "Short Grass" +msgstr "" + +#: ../dryplants/juncus.lua +msgid "Juncus" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 1" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3 & Spikes" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fern Tuber" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fern Tuber" +msgstr "" + +#: ../ferns/fern.lua +msgid "Lady-fern (Athyrium)" +msgstr "" + +#: ../ferns/gianttreefern.lua ../ferns/treefern.lua +msgid "Tree Fern Crown (Dicksonia)" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leaves" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leave End" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Fern Trunk" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Sapling" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Young Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Fern Trunk (Dicksonia)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Tree Fern Sapling (Dicksonia)" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "Waterlily" +msgstr "Lirio de agua" + +#: ../flowers_plus/init.lua +msgid "Seaweed" +msgstr "Algas marinas" + +#: ../flowers_plus/init.lua +msgid "Sunflower" +msgstr "Girasol" + +#: ../flowers_plus/init.lua +msgid "[Flowers] Loaded." +msgstr "[Flowers] Cargado." + +#: ../molehills/init.lua +msgid "Mole Hill" +msgstr "" + +#: ../molehills/init.lua +msgid "Loaded..." +msgstr "" + +#: ../nature_classic/blossom.lua +msgid "Apple blossoms" +msgstr "" + +#: ../nature_classic/init.lua +msgid "[Nature Classic] loaded!" +msgstr "" + +#: ../poisonivy/init.lua +msgid "Poison ivy (seedling)" +msgstr "Hiedra venenosa (retoño)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (sproutling)" +msgstr "Hiedra venenosa (brotes)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (climbing plant)" +msgstr "Hiedra venenosa (planta trepadora)" + +#: ../poisonivy/init.lua +msgid "[Poison Ivy] Loaded." +msgstr "[Poison Ivy] Cargado." + +#: ../trunks/nodes.lua +msgid "Twig" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss with Fungus" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Block" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Slab" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 1" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 2" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Root" +msgstr "" + +#: ../vines/crafts.lua ../vines/vines.lua +msgid "Vines" +msgstr "" + +#: ../vines/functions.lua +msgid "Matured" +msgstr "" + +#: ../vines/init.lua +msgid "[Vines] Loaded!" +msgstr "" + +#: ../vines/nodes.lua +msgid "Rope" +msgstr "" + +#: ../vines/shear.lua +msgid "Shears" +msgstr "" + +#: ../vines/vines.lua +msgid "Roots" +msgstr "" + +#: ../vines/vines.lua +msgid "Jungle Vines" +msgstr "" + +#: ../vines/vines.lua +msgid "Willow Vines" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 1" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 2" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 3" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 4" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree 2 (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (top)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (bottom)" +msgstr "" diff --git a/mods/plantlife/plantlife_i18n/locale/fr.po b/mods/plantlife/plantlife_i18n/locale/fr.po new file mode 100755 index 0000000..135e30d --- /dev/null +++ b/mods/plantlife/plantlife_i18n/locale/fr.po @@ -0,0 +1,483 @@ +# 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-08-03 11:09+0200\n" +"PO-Revision-Date: 2017-08-03 11:18+0200\n" +"Last-Translator: fat115 \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.12\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: ../bushes/init.lua +msgid "Young Tree 2 (bottom)" +msgstr "Arbuste 2 (bas)" + +#: ../bushes/init.lua +msgid "Bush Branches @1" +msgstr "Branches de buisson @1" + +#: ../bushes/init.lua +msgid "Bush Leaves @1" +msgstr "Feuilles de buisson @1" + +#: ../bushes_classic/cooking.lua +msgid "Sugar" +msgstr "Sucre" + +#: ../bushes_classic/init.lua +msgid "Basket with Strawberry pies" +msgstr "Panier de tartes aux fraises" + +#: ../bushes_classic/init.lua +msgid "Cooked Strawberry pie" +msgstr "Tarte aux fraises (cuite)" + +#: ../bushes_classic/init.lua +msgid "Raw Strawberry pie" +msgstr "Tarte aux fraises (crue)" + +#: ../bushes_classic/init.lua +msgid "Slice of Strawberry pie" +msgstr "Part de tarte aux fraises" + +#: ../bushes_classic/init.lua +msgid "Strawberry" +msgstr "Fraises" + +#: ../bushes_classic/init.lua +msgid "Strawberry Bush" +msgstr "Buisson de fraises" + +#: ../bushes_classic/init.lua +msgid "Basket with Blackberry pies" +msgstr "Panier de tartes aux fraises" + +#: ../bushes_classic/init.lua +msgid "Blackberry" +msgstr "Mûres" + +#: ../bushes_classic/init.lua +msgid "Blackberry Bush" +msgstr "Buisson de mûres" + +#: ../bushes_classic/init.lua +msgid "Cooked Blackberry pie" +msgstr "Tarte aux mûres (cuite)" + +#: ../bushes_classic/init.lua +msgid "Raw Blackberry pie" +msgstr "Tarte aux mûres (crue)" + +#: ../bushes_classic/init.lua +msgid "Slice of Blackberry pie" +msgstr "Part de tarte aux mûres" + +#: ../bushes_classic/init.lua +msgid "Basket with Blueberry pies" +msgstr "Panier de tartes aux mûres" + +#: ../bushes_classic/init.lua +msgid "Blueberry" +msgstr "Myrtilles" + +#: ../bushes_classic/init.lua +msgid "Blueberry Bush" +msgstr "Buisson de myrtilles" + +#: ../bushes_classic/init.lua +msgid "Cooked Blueberry pie" +msgstr "Tarte aux myrtilles (cuite)" + +#: ../bushes_classic/init.lua +msgid "Raw Blueberry pie" +msgstr "Tarte aux myrtilles (crue)" + +#: ../bushes_classic/init.lua +msgid "Slice of Blueberry pie" +msgstr "Part de tarte aux myrtilles" + +#: ../bushes_classic/init.lua +msgid "Basket with Raspberry pies" +msgstr "Panier de tartes aux framboises" + +#: ../bushes_classic/init.lua +msgid "Cooked Raspberry pie" +msgstr "Tarte aux framboises (cuite)" + +#: ../bushes_classic/init.lua +msgid "Raspberry" +msgstr "Framboises" + +#: ../bushes_classic/init.lua +msgid "Raspberry Bush" +msgstr "Buisson de framboises" + +#: ../bushes_classic/init.lua +msgid "Raw Raspberry pie" +msgstr "Tarte aux framboises (crue)" + +#: ../bushes_classic/init.lua +msgid "Slice of Raspberry pie" +msgstr "Part de tarts aux framboises" + +#: ../bushes_classic/init.lua +msgid "Basket with Gooseberry pies" +msgstr "Panier de tartes aux groseilles" + +#: ../bushes_classic/init.lua +msgid "Cooked Gooseberry pie" +msgstr "Tarte aux groseilles (cuite)" + +#: ../bushes_classic/init.lua +msgid "Gooseberry" +msgstr "Groseilles" + +#: ../bushes_classic/init.lua +msgid "Gooseberry Bush" +msgstr "Buisson de groseilles" + +#: ../bushes_classic/init.lua +msgid "Raw Gooseberry pie" +msgstr "Tarte aux groseilles (crue)" + +#: ../bushes_classic/init.lua +msgid "Slice of Gooseberry pie" +msgstr "Part de tarte aux groseilles" + +#: ../bushes_classic/init.lua +msgid "Basket with Mixed Berry pies" +msgstr "Panier de tartes aux fruits rouges" + +#: ../bushes_classic/init.lua +msgid "Cooked Mixed Berry pie" +msgstr "Tarte aux fruits rouges (cuite)" + +#: ../bushes_classic/init.lua +msgid "Currently fruitless Bush" +msgstr "Buisson sans fruits pour l'instant" + +#: ../bushes_classic/init.lua +msgid "Mixed Berry" +msgstr "Fruits rouges" + +#: ../bushes_classic/init.lua +msgid "Raw Mixed Berry pie" +msgstr "Tarte aux fruits rouges (crue)" + +#: ../bushes_classic/init.lua +msgid "Slice of Mixed Berry pie" +msgstr "Part de tarte aux fruits rouges" + +#: ../bushes_classic/init.lua +msgid "[Bushes] Loaded." +msgstr "[Bushes] chargé." + +#: ../bushes_classic/nodes.lua +msgid "Basket" +msgstr "Panier" + +#: ../cavestuff/nodes.lua +msgid "Pebble" +msgstr "Caillou" + +#: ../cavestuff/nodes.lua +msgid "Desert Pebble" +msgstr "Caillou du désert" + +#: ../cavestuff/nodes.lua +msgid "Stalactite" +msgstr "Stalactite" + +#: ../dryplants/init.lua +msgid "Sickle" +msgstr "Faucille" + +#: ../dryplants/init.lua +msgid "Cut Grass" +msgstr "Herbe coupée" + +#: ../dryplants/init.lua +msgid "Hay" +msgstr "Foin" + +#: ../dryplants/init.lua +msgid "Short Grass" +msgstr "Herbes courtes" + +#: ../dryplants/juncus.lua +msgid "Juncus" +msgstr "Joncs" + +#: ../dryplants/reed.lua +msgid "Wet Reed" +msgstr "Bloc de roseau humide" + +#: ../dryplants/reed.lua +msgid "Wet Reed Slab" +msgstr "Dalle en roseau humide" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof" +msgstr "Toit en roseau humide" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner" +msgstr "Angle de toit en roseau humide" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner 2" +msgstr "Angle de toit en roseau humide 2" + +#: ../dryplants/reed.lua +msgid "Reed" +msgstr "Roseau" + +#: ../dryplants/reed.lua +msgid "Reed Slab" +msgstr "Dalle en roseau" + +#: ../dryplants/reed.lua +msgid "Reed Roof" +msgstr "Toit en roseau" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner" +msgstr "Angle de toit en roseau" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner 2" +msgstr "Angle de toit en roseau 2" + +#: ../dryplants/reedmace.lua +msgid "Reedmace" +msgstr "Roseau" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 1" +msgstr "Roseau, 1 de hauteur" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 2" +msgstr "Roseau, 2 de hauteur" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3" +msgstr "Roseau, 3 de hauteur" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3 & Spikes" +msgstr "Roseau, 3 de hauteur avec panicules" + +#: ../ferns/crafting.lua +msgid "Fiddlehead" +msgstr "Crosse de fougère" + +#: ../ferns/crafting.lua +msgid "Roasted Fiddlehead" +msgstr "Crosse de fougère rôtie" + +#: ../ferns/crafting.lua +msgid "Fern Tuber" +msgstr "Tubercule de fougère" + +#: ../ferns/crafting.lua +msgid "Roasted Fern Tuber" +msgstr "Tubercule de fougère rôti" + +#: ../ferns/fern.lua +msgid "Lady-fern (Athyrium)" +msgstr "Fougère (Athyrium)" + +#: ../ferns/gianttreefern.lua ../ferns/treefern.lua +msgid "Tree Fern Crown (Dicksonia)" +msgstr "Fougère en couronne (Dicksonia)" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leaves" +msgstr "Feuilles de fougère géante" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leave End" +msgstr "Feuilles de fougère géante (extrémité)" + +#: ../ferns/gianttreefern.lua +msgid "Giant Fern Trunk" +msgstr "Tronc de fougère géante" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Sapling" +msgstr "Pousse de fougère géante" + +#: ../ferns/horsetail.lua +msgid "Young Horsetail (Equisetum)" +msgstr "Pousse de prêle (Equisetum)" + +#: ../ferns/horsetail.lua +msgid "Horsetail (Equisetum)" +msgstr "Prêle (Equisetum)" + +#: ../ferns/treefern.lua +msgid "Fern Trunk (Dicksonia)" +msgstr "Tronc de fougère en couronne (Dicksonia)" + +#: ../ferns/treefern.lua +msgid "Tree Fern Sapling (Dicksonia)" +msgstr "Pousse de fougère en couronne (Dicksonia)" + +#: ../flowers_plus/init.lua +msgid "Waterlily" +msgstr "Nénuphar" + +#: ../flowers_plus/init.lua +msgid "Seaweed" +msgstr "Algues" + +#: ../flowers_plus/init.lua +msgid "Sunflower" +msgstr "Tournesol" + +#: ../flowers_plus/init.lua +msgid "[Flowers] Loaded." +msgstr "[Flowers] chargé." + +#: ../molehills/init.lua +msgid "Mole Hill" +msgstr "Taupinière" + +#: ../molehills/init.lua +msgid "Loaded..." +msgstr "chargé." + +#: ../nature_classic/blossom.lua +msgid "Apple blossoms" +msgstr "Fleurs de pommier" + +#: ../nature_classic/init.lua +msgid "[Nature Classic] loaded!" +msgstr "[Nature Classic] chargé.!" + +#: ../poisonivy/init.lua +msgid "Poison ivy (seedling)" +msgstr "Sumac vénéneux (semis)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (sproutling)" +msgstr "Sumac vénéneux (pousse)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (climbing plant)" +msgstr "Sumac vénéneux (grimpant)" + +#: ../poisonivy/init.lua +msgid "[Poison Ivy] Loaded." +msgstr "[Poison Ivy] chargé." + +#: ../trunks/nodes.lua +msgid "Twig" +msgstr "Brindille" + +#: ../trunks/nodes.lua +msgid "Moss" +msgstr "Mousse" + +#: ../trunks/nodes.lua +msgid "Moss with Fungus" +msgstr "Mousse et champignons" + +#: ../trunks/nodes.lua +msgid "Twigs Block" +msgstr "Bloc de brindilles" + +#: ../trunks/nodes.lua +msgid "Twigs Slab" +msgstr "Dalle en brindilles" + +#: ../trunks/nodes.lua +msgid "Twigs Roof" +msgstr "Toit de brindilles" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 1" +msgstr "Angle de toit de brindilles 1" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 2" +msgstr "Angle de toit de brindilles 2" + +#: ../trunks/nodes.lua +msgid "Root" +msgstr "(racine)" + +#: ../vines/crafts.lua ../vines/vines.lua +msgid "Vines" +msgstr "Plantes grimpantes" + +#: ../vines/functions.lua +msgid "Matured" +msgstr "Extrémité de" + +#: ../vines/init.lua +msgid "[Vines] Loaded!" +msgstr "[Vines] chargé." + +#: ../vines/nodes.lua +msgid "Rope" +msgstr "Corde" + +#: ../vines/shear.lua +msgid "Shears" +msgstr "Cisailles" + +#: ../vines/vines.lua +msgid "Roots" +msgstr "Racines" + +#: ../vines/vines.lua +msgid "Jungle Vines" +msgstr "Lianes" + +#: ../vines/vines.lua +msgid "Willow Vines" +msgstr "Lianes de saule" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 1" +msgstr "Humus forestier 1" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 2" +msgstr "Humus forestier 2" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 3" +msgstr "Humus forestier 3" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 4" +msgstr "Humus forestier 4" + +#: ../youngtrees/init.lua +msgid "Young Tree 2 (middle)" +msgstr "Arbuste 2 (milieu)" + +#: ../youngtrees/init.lua +msgid "Young Tree (top)" +msgstr "Arbuste (haut)" + +#: ../youngtrees/init.lua +msgid "Young Tree (middle)" +msgstr "Arbuste (milieu)" + +#: ../youngtrees/init.lua +msgid "Young Tree (bottom)" +msgstr "Arbuste (bas)" diff --git a/mods/plantlife/plantlife_i18n/locale/pt.po b/mods/plantlife/plantlife_i18n/locale/pt.po new file mode 100755 index 0000000..eef3983 --- /dev/null +++ b/mods/plantlife/plantlife_i18n/locale/pt.po @@ -0,0 +1,483 @@ +# 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-08-03 14:07+0200\n" +"PO-Revision-Date: 2017-08-03 14:08+0200\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 1.8.12\n" +"Last-Translator: fat115 \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: pt\n" + +#: ../bushes/init.lua +msgid "Young Tree 2 (bottom)" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Branches @1" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Leaves @1" +msgstr "" + +#: ../bushes_classic/cooking.lua +msgid "Sugar" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Strawberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Strawberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Strawberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Strawberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Strawberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Strawberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Blackberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Blackberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Blackberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Blackberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Blackberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Blackberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Blueberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Blueberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Blueberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Blueberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Blueberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Blueberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Raspberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Raspberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raspberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raspberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Raspberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Raspberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Gooseberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Gooseberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Gooseberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Gooseberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Gooseberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Gooseberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Mixed Berry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Mixed Berry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Currently fruitless Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Mixed Berry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Mixed Berry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Mixed Berry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "[Bushes] Loaded." +msgstr "" + +#: ../bushes_classic/nodes.lua +msgid "Basket" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Desert Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Stalactite" +msgstr "" + +#: ../dryplants/init.lua +msgid "Sickle" +msgstr "" + +#: ../dryplants/init.lua +msgid "Cut Grass" +msgstr "" + +#: ../dryplants/init.lua +msgid "Hay" +msgstr "" + +#: ../dryplants/init.lua +msgid "Short Grass" +msgstr "" + +#: ../dryplants/juncus.lua +msgid "Juncus" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 1" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3 & Spikes" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fern Tuber" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fern Tuber" +msgstr "" + +#: ../ferns/fern.lua +msgid "Lady-fern (Athyrium)" +msgstr "" + +#: ../ferns/gianttreefern.lua ../ferns/treefern.lua +msgid "Tree Fern Crown (Dicksonia)" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leaves" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leave End" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Fern Trunk" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Sapling" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Young Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Fern Trunk (Dicksonia)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Tree Fern Sapling (Dicksonia)" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "Waterlily" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "Seaweed" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "Sunflower" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "[Flowers] Loaded." +msgstr "" + +#: ../molehills/init.lua +msgid "Mole Hill" +msgstr "" + +#: ../molehills/init.lua +msgid "Loaded..." +msgstr "" + +#: ../nature_classic/blossom.lua +msgid "Apple blossoms" +msgstr "" + +#: ../nature_classic/init.lua +msgid "[Nature Classic] loaded!" +msgstr "" + +#: ../poisonivy/init.lua +msgid "Poison ivy (seedling)" +msgstr "Hera venenosa (plantilha)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (sproutling)" +msgstr "Hera venenosa (brotando)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (climbing plant)" +msgstr "Hera venenosa (planta trepadeira)" + +#: ../poisonivy/init.lua +msgid "[Poison Ivy] Loaded." +msgstr "[Poison Ivy] Carregado" + +#: ../trunks/nodes.lua +msgid "Twig" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss with Fungus" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Block" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Slab" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 1" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 2" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Root" +msgstr "" + +#: ../vines/crafts.lua ../vines/vines.lua +msgid "Vines" +msgstr "" + +#: ../vines/functions.lua +msgid "Matured" +msgstr "" + +#: ../vines/init.lua +msgid "[Vines] Loaded!" +msgstr "" + +#: ../vines/nodes.lua +msgid "Rope" +msgstr "" + +#: ../vines/shear.lua +msgid "Shears" +msgstr "" + +#: ../vines/vines.lua +msgid "Roots" +msgstr "" + +#: ../vines/vines.lua +msgid "Jungle Vines" +msgstr "" + +#: ../vines/vines.lua +msgid "Willow Vines" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 1" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 2" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 3" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 4" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree 2 (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (top)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (bottom)" +msgstr "" diff --git a/mods/plantlife/plantlife_i18n/locale/template.pot b/mods/plantlife/plantlife_i18n/locale/template.pot new file mode 100755 index 0000000..60191dd --- /dev/null +++ b/mods/plantlife/plantlife_i18n/locale/template.pot @@ -0,0 +1,482 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-03 11:09+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../bushes/init.lua +msgid "Young Tree 2 (bottom)" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Branches @1" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Leaves @1" +msgstr "" + +#: ../bushes_classic/cooking.lua +msgid "Sugar" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Strawberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Strawberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Strawberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Strawberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Strawberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Strawberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Blackberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Blackberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Blackberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Blackberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Blackberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Blackberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Blueberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Blueberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Blueberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Blueberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Blueberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Blueberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Raspberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Raspberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raspberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raspberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Raspberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Raspberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Gooseberry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Gooseberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Gooseberry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Gooseberry Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Gooseberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Gooseberry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Basket with Mixed Berry pies" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Cooked Mixed Berry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Currently fruitless Bush" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Mixed Berry" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Raw Mixed Berry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "Slice of Mixed Berry pie" +msgstr "" + +#: ../bushes_classic/init.lua +msgid "[Bushes] Loaded." +msgstr "" + +#: ../bushes_classic/nodes.lua +msgid "Basket" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Desert Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Stalactite" +msgstr "" + +#: ../dryplants/init.lua +msgid "Sickle" +msgstr "" + +#: ../dryplants/init.lua +msgid "Cut Grass" +msgstr "" + +#: ../dryplants/init.lua +msgid "Hay" +msgstr "" + +#: ../dryplants/init.lua +msgid "Short Grass" +msgstr "" + +#: ../dryplants/juncus.lua +msgid "Juncus" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 1" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3 & Spikes" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fern Tuber" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fern Tuber" +msgstr "" + +#: ../ferns/fern.lua +msgid "Lady-fern (Athyrium)" +msgstr "" + +#: ../ferns/gianttreefern.lua ../ferns/treefern.lua +msgid "Tree Fern Crown (Dicksonia)" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leaves" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leave End" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Fern Trunk" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Sapling" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Young Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Fern Trunk (Dicksonia)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Tree Fern Sapling (Dicksonia)" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "Waterlily" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "Seaweed" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "Sunflower" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "[Flowers] Loaded." +msgstr "" + +#: ../molehills/init.lua +msgid "Mole Hill" +msgstr "" + +#: ../molehills/init.lua +msgid "Loaded..." +msgstr "" + +#: ../nature_classic/blossom.lua +msgid "Apple blossoms" +msgstr "" + +#: ../nature_classic/init.lua +msgid "[Nature Classic] loaded!" +msgstr "" + +#: ../poisonivy/init.lua +msgid "Poison ivy (seedling)" +msgstr "" + +#: ../poisonivy/init.lua +msgid "Poison ivy (sproutling)" +msgstr "" + +#: ../poisonivy/init.lua +msgid "Poison ivy (climbing plant)" +msgstr "" + +#: ../poisonivy/init.lua +msgid "[Poison Ivy] Loaded." +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twig" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss with Fungus" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Block" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Slab" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 1" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 2" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Root" +msgstr "" + +#: ../vines/crafts.lua ../vines/vines.lua +msgid "Vines" +msgstr "" + +#: ../vines/functions.lua +msgid "Matured" +msgstr "" + +#: ../vines/init.lua +msgid "[Vines] Loaded!" +msgstr "" + +#: ../vines/nodes.lua +msgid "Rope" +msgstr "" + +#: ../vines/shear.lua +msgid "Shears" +msgstr "" + +#: ../vines/vines.lua +msgid "Roots" +msgstr "" + +#: ../vines/vines.lua +msgid "Jungle Vines" +msgstr "" + +#: ../vines/vines.lua +msgid "Willow Vines" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 1" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 2" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 3" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 4" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree 2 (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (top)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (bottom)" +msgstr "" diff --git a/mods/plantlife/plantlife_i18n/locale/tr.po b/mods/plantlife/plantlife_i18n/locale/tr.po new file mode 100755 index 0000000..aa0c6bd --- /dev/null +++ b/mods/plantlife/plantlife_i18n/locale/tr.po @@ -0,0 +1,485 @@ +# 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-08-03 11:43+0200\n" +"PO-Revision-Date: 2017-08-03 11:51+0200\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 1.8.12\n" +"Last-Translator: mahmutelmas06@hotmail.com\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: tr\n" + +#: ../bushes/init.lua +msgid "Young Tree 2 (bottom)" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Branches @1" +msgstr "" + +#: ../bushes/init.lua +msgid "Bush Leaves @1" +msgstr "" + +#: ../bushes_classic/cooking.lua +msgid "Sugar" +msgstr "Şeker" + +#: ../bushes_classic/init.lua +msgid "Basket with Strawberry pies" +msgstr "Çilekli pasta sepeti" + +#: ../bushes_classic/init.lua +msgid "Cooked Strawberry pie" +msgstr "Pişmiş çilekli pasta " + +#: ../bushes_classic/init.lua +msgid "Raw Strawberry pie" +msgstr "Çilekli çiğ pasta" + +#: ../bushes_classic/init.lua +msgid "Slice of Strawberry pie" +msgstr "Çilekli pasta dilimi" + +#: ../bushes_classic/init.lua +msgid "Strawberry" +msgstr "Çilek" + +#: ../bushes_classic/init.lua +msgid "Strawberry Bush" +msgstr "Çilek fidanı" + +#: ../bushes_classic/init.lua +msgid "Basket with Blackberry pies" +msgstr "Böğürtlenli pasta sepeti" + +#: ../bushes_classic/init.lua +msgid "Blackberry" +msgstr "Böğürtlen" + +#: ../bushes_classic/init.lua +msgid "Blackberry Bush" +msgstr "Böğürtlen fidanı" + +#: ../bushes_classic/init.lua +msgid "Cooked Blackberry pie" +msgstr "Pişmiş böğürtlenli pasta" + +#: ../bushes_classic/init.lua +msgid "Raw Blackberry pie" +msgstr "Böğürtlenli çiğ pasta" + +#: ../bushes_classic/init.lua +msgid "Slice of Blackberry pie" +msgstr "Böğürtlenli pasta dilimi" + +#: ../bushes_classic/init.lua +msgid "Basket with Blueberry pies" +msgstr "Yaban mersini pastalı sepet" + +#: ../bushes_classic/init.lua +msgid "Blueberry" +msgstr "Yaban mersini" + +#: ../bushes_classic/init.lua +msgid "Blueberry Bush" +msgstr "Yaban mersini fidanı" + +#: ../bushes_classic/init.lua +msgid "Cooked Blueberry pie" +msgstr "Pişmiş yaban mersinli pasta" + +#: ../bushes_classic/init.lua +msgid "Raw Blueberry pie" +msgstr "Yaban mersinli çiğ pasta" + +#: ../bushes_classic/init.lua +msgid "Slice of Blueberry pie" +msgstr "Yaban mersinli pasta dilimi" + +#: ../bushes_classic/init.lua +msgid "Basket with Raspberry pies" +msgstr "Ahududulu pasta sepeti" + +#: ../bushes_classic/init.lua +msgid "Cooked Raspberry pie" +msgstr "Pişmiş ahududulu pasta" + +#: ../bushes_classic/init.lua +msgid "Raspberry" +msgstr "Ahududu" + +#: ../bushes_classic/init.lua +msgid "Raspberry Bush" +msgstr "Ahududu fidanı" + +#: ../bushes_classic/init.lua +msgid "Raw Raspberry pie" +msgstr "Ahududulu çiğ pasta" + +#: ../bushes_classic/init.lua +msgid "Slice of Raspberry pie" +msgstr "Ahududulu pasta dilimi" + +#: ../bushes_classic/init.lua +msgid "Basket with Gooseberry pies" +msgstr "Bektaşi üzümlü pasta sepeti" + +#: ../bushes_classic/init.lua +msgid "Cooked Gooseberry pie" +msgstr "Pişmiş bektaşi üzümlü pasta" + +#: ../bushes_classic/init.lua +msgid "Gooseberry" +msgstr "Bektaşi üzümü" + +#: ../bushes_classic/init.lua +msgid "Gooseberry Bush" +msgstr "Bektaşi üzümü fidanı" + +#: ../bushes_classic/init.lua +msgid "Raw Gooseberry pie" +msgstr "Bektaşi üzümlü çiğ pasta" + +#: ../bushes_classic/init.lua +msgid "Slice of Gooseberry pie" +msgstr "Bektaşi üzümlü pasta dilimi" + +#: ../bushes_classic/init.lua +msgid "Basket with Mixed Berry pies" +msgstr "Dutlu pasta sepeti" + +#: ../bushes_classic/init.lua +msgid "Cooked Mixed Berry pie" +msgstr "Pişmiş dutlu pasta" + +#: ../bushes_classic/init.lua +#, fuzzy +msgid "Currently fruitless Bush" +msgstr "Fidanı şu anda meyvesiz" + +#: ../bushes_classic/init.lua +msgid "Mixed Berry" +msgstr "Dut" + +#: ../bushes_classic/init.lua +msgid "Raw Mixed Berry pie" +msgstr "Dutlu çiğ pasta" + +#: ../bushes_classic/init.lua +msgid "Slice of Mixed Berry pie" +msgstr "Dutlu pasta dilimi" + +#: ../bushes_classic/init.lua +msgid "[Bushes] Loaded." +msgstr "[Bushes] yüklendi." + +#: ../bushes_classic/nodes.lua +msgid "Basket" +msgstr "Sepet" + +#: ../cavestuff/nodes.lua +msgid "Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Desert Pebble" +msgstr "" + +#: ../cavestuff/nodes.lua +msgid "Stalactite" +msgstr "" + +#: ../dryplants/init.lua +msgid "Sickle" +msgstr "" + +#: ../dryplants/init.lua +msgid "Cut Grass" +msgstr "" + +#: ../dryplants/init.lua +msgid "Hay" +msgstr "" + +#: ../dryplants/init.lua +msgid "Short Grass" +msgstr "" + +#: ../dryplants/juncus.lua +msgid "Juncus" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Wet Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Slab" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner" +msgstr "" + +#: ../dryplants/reed.lua +msgid "Reed Roof Corner 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 1" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 2" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3" +msgstr "" + +#: ../dryplants/reedmace.lua +msgid "Reedmace, height: 3 & Spikes" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fiddlehead" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Fern Tuber" +msgstr "" + +#: ../ferns/crafting.lua +msgid "Roasted Fern Tuber" +msgstr "" + +#: ../ferns/fern.lua +msgid "Lady-fern (Athyrium)" +msgstr "" + +#: ../ferns/gianttreefern.lua ../ferns/treefern.lua +msgid "Tree Fern Crown (Dicksonia)" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leaves" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Leave End" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Fern Trunk" +msgstr "" + +#: ../ferns/gianttreefern.lua +msgid "Giant Tree Fern Sapling" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Young Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/horsetail.lua +msgid "Horsetail (Equisetum)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Fern Trunk (Dicksonia)" +msgstr "" + +#: ../ferns/treefern.lua +msgid "Tree Fern Sapling (Dicksonia)" +msgstr "" + +#: ../flowers_plus/init.lua +msgid "Waterlily" +msgstr "Nilüfer" + +#: ../flowers_plus/init.lua +msgid "Seaweed" +msgstr "Deniz yosunu" + +#: ../flowers_plus/init.lua +#, fuzzy +msgid "Sunflower" +msgstr "Ayçiçeği" + +#: ../flowers_plus/init.lua +msgid "[Flowers] Loaded." +msgstr "[Flowers] yüklendi." + +#: ../molehills/init.lua +msgid "Mole Hill" +msgstr "" + +#: ../molehills/init.lua +msgid "Loaded..." +msgstr "" + +#: ../nature_classic/blossom.lua +msgid "Apple blossoms" +msgstr "" + +#: ../nature_classic/init.lua +msgid "[Nature Classic] loaded!" +msgstr "" + +#: ../poisonivy/init.lua +msgid "Poison ivy (seedling)" +msgstr "Sarmaşık (Fidan)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (sproutling)" +msgstr "Sarmaşık (Filiz)" + +#: ../poisonivy/init.lua +msgid "Poison ivy (climbing plant)" +msgstr "Sarmaşık (Dolanan)" + +#: ../poisonivy/init.lua +msgid "[Poison Ivy] Loaded." +msgstr "[Poison Ivy] yüklendi." + +#: ../trunks/nodes.lua +msgid "Twig" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Moss with Fungus" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Block" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Slab" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 1" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Twigs Roof Corner 2" +msgstr "" + +#: ../trunks/nodes.lua +msgid "Root" +msgstr "" + +#: ../vines/crafts.lua ../vines/vines.lua +msgid "Vines" +msgstr "" + +#: ../vines/functions.lua +msgid "Matured" +msgstr "" + +#: ../vines/init.lua +msgid "[Vines] Loaded!" +msgstr "" + +#: ../vines/nodes.lua +msgid "Rope" +msgstr "" + +#: ../vines/shear.lua +msgid "Shears" +msgstr "" + +#: ../vines/vines.lua +msgid "Roots" +msgstr "" + +#: ../vines/vines.lua +msgid "Jungle Vines" +msgstr "" + +#: ../vines/vines.lua +msgid "Willow Vines" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 1" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 2" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 3" +msgstr "" + +#: ../woodsoils/nodes.lua +msgid "Forest Soil 4" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree 2 (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (top)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (middle)" +msgstr "" + +#: ../youngtrees/init.lua +msgid "Young Tree (bottom)" +msgstr "" diff --git a/mods/CORE/plantlife_i18n/tools/updatepo.sh b/mods/plantlife/plantlife_i18n/tools/updatepo.sh similarity index 100% rename from mods/CORE/plantlife_i18n/tools/updatepo.sh rename to mods/plantlife/plantlife_i18n/tools/updatepo.sh diff --git a/mods/plantlife/trunks/crafting.lua b/mods/plantlife/trunks/crafting.lua new file mode 100755 index 0000000..72f39ba --- /dev/null +++ b/mods/plantlife/trunks/crafting.lua @@ -0,0 +1,133 @@ +-- Code by Mossmanikin +----------------------------------------------------------------------------------------------- +-- TWiGS +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- *leaves --> twigs + output = "trunks:twig_1 2", + recipe = {{"group:leafdecay"}} +}) +if minetest.get_modpath("moretrees") ~= nil then +minetest.register_craft({ -- moretrees_leaves --> twigs + output = "trunks:twig_1 2", + recipe = {{"group:moretrees_leaves"}} +}) +minetest.register_craft({ -- except moretrees:palm_leaves + output = "moretrees:palm_leaves", + recipe = {{"moretrees:palm_leaves"}} +}) +end +if minetest.get_modpath("bushes") ~= nil then +minetest.register_craft({ -- BushLeaves --> twigs + output = "trunks:twig_1 2", + recipe = {{"bushes:BushLeaves1"}} +}) +minetest.register_craft({ + output = "trunks:twig_1 2", + recipe = {{"bushes:BushLeaves2"}} +}) +minetest.register_craft({ -- bushbranches --> twigs + output = "trunks:twig_1 4", + recipe = {{"bushes:bushbranches1"}} +}) +minetest.register_craft({ + output = "trunks:twig_1 4", + recipe = {{"bushes:bushbranches2"}} +}) +minetest.register_craft({ + output = "trunks:twig_1 4", + recipe = {{"bushes:bushbranches2"}} +}) +minetest.register_craft({ + output = "trunks:twig_1 4", + recipe = {{"bushes:bushbranches3"}} +}) +end +minetest.register_craft({ -- twigs block --> twigs + output = "trunks:twig_1 8", + recipe = {{"trunks:twigs"}} +}) +minetest.register_craft({ -- twigs_slab --> twigs + output = "trunks:twig_1 4", + recipe = {{"trunks:twigs_slab"}} +}) +minetest.register_craft({ -- twigs_roof --> twigs + output = "trunks:twig_1 4", + recipe = {{"trunks:twigs_roof"}} +}) +minetest.register_craft({ -- twigs_roof_corner --> twigs + output = "trunks:twig_1 3", + recipe = {{"trunks:twigs_roof_corner"}} +}) +minetest.register_craft({ -- twigs_roof_corner_2 --> twigs + output = "trunks:twig_1 3", + recipe = {{"trunks:twigs_roof_corner_2"}} +}) +----------------------------------------------------------------------------------------------- +-- STiCK +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- twig --> stick + output = "default:stick", + recipe = {{"trunks:twig_1"}} +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS BLoCK +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- twigs --> twigs block + output = "trunks:twigs", + recipe = { + {"trunks:twig_1","trunks:twig_1","trunks:twig_1"}, + {"trunks:twig_1", "" ,"trunks:twig_1"}, + {"trunks:twig_1","trunks:twig_1","trunks:twig_1"}, + } +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS SLaBS +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- twigs blocks --> twigs_slabs + output = "trunks:twigs_slab 6", + recipe = { + {"trunks:twigs","trunks:twigs","trunks:twigs"}, + } +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS RooFS +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- twigs blocks --> twigs_roofs + output = "trunks:twigs_roof 4", + recipe = { + {"trunks:twigs",""}, + {"","trunks:twigs"}, + } +}) +minetest.register_craft({ + output = "trunks:twigs_roof 4", + recipe = { + {"","trunks:twigs"}, + {"trunks:twigs",""}, + } +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS RooF CoRNeRS +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- twigs blocks --> twigs_roof_corners + output = "trunks:twigs_roof_corner 8", + recipe = { + { "" ,"trunks:twigs", "" }, + {"trunks:twigs", "" ,"trunks:twigs"}, + } +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS RooF CoRNeRS 2 +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- twigs blocks --> twigs_roof_corner_2's + output = "trunks:twigs_roof_corner_2 8", + recipe = { + {"trunks:twigs", "" ,"trunks:twigs"}, + { "" ,"trunks:twigs", "" }, + } +}) diff --git a/mods/plantlife/trunks/depends.txt b/mods/plantlife/trunks/depends.txt new file mode 100755 index 0000000..dd4373b --- /dev/null +++ b/mods/plantlife/trunks/depends.txt @@ -0,0 +1,7 @@ +default +biome_lib +plantlife_i18n +bushes? +ferns? +moretrees? +trees? diff --git a/mods/plantlife/trunks/generating.lua b/mods/plantlife/trunks/generating.lua new file mode 100755 index 0000000..6595f2b --- /dev/null +++ b/mods/plantlife/trunks/generating.lua @@ -0,0 +1,554 @@ +-- Code by Mossmanikin, Neuromancer, and others + +local function clone_node(name) + local node2 = {} + local node = minetest.registered_nodes[name] + for k,v in pairs(node) do + node2[k]=v + end + return node2 +end + +----------------------------------------------------------------------------------------------- +-- TWiGS +----------------------------------------------------------------------------------------------- + +abstract_trunks.place_twig = function(pos) + 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 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.set_node(right_here, {name="trunks:twig_"..math.random(1,4), param2=math.random(0,3)}) + end +-- big twigs + if Big_Twigs == true then +-- big twig 1 + if twig_size == 17 then + if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z+1}).name].buildable_to + or minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name].buildable_to) then + + if minetest.registered_nodes[node_here.name].buildable_to then + minetest.set_node(right_here, {name="trunks:twig_5"}) + end + if minetest.registered_nodes[node_n_e.name].buildable_to then + minetest.set_node(north_east, {name="trunks:twig_7"}) + end + if minetest.registered_nodes[node_east.name].buildable_to then + minetest.set_node(east, {name="trunks:twig_8"}) + end + end + elseif twig_size == 18 then + if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name].buildable_to + or minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name].buildable_to) then + + if minetest.registered_nodes[node_here.name].buildable_to then + minetest.set_node(right_here, {name="trunks:twig_5", param2=1}) + end + if minetest.registered_nodes[node_s_e.name].buildable_to then + minetest.set_node(south_east, {name="trunks:twig_7", param2=1}) + end + if minetest.registered_nodes[node_south.name].buildable_to then + minetest.set_node(south, {name="trunks:twig_8", param2=1}) + end + end + elseif twig_size == 19 then + if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name].buildable_to + or minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name].buildable_to) then + + if minetest.registered_nodes[node_here.name].buildable_to then + minetest.set_node(right_here, {name="trunks:twig_5", param2=2}) + end + if minetest.registered_nodes[node_s_w.name].buildable_to then + minetest.set_node(south_west, {name="trunks:twig_7", param2=2}) + end + if minetest.registered_nodes[node_west.name].buildable_to then + minetest.set_node(west, {name="trunks:twig_8", param2=2}) + end + end + elseif twig_size == 20 then + if not (minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z+1}).name].buildable_to + or minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name].buildable_to) then + + if minetest.registered_nodes[node_here.name].buildable_to then + minetest.set_node(right_here, {name="trunks:twig_5", param2=3}) + end + if minetest.registered_nodes[node_n_w.name].buildable_to then + minetest.set_node(north_west, {name="trunks:twig_7", param2=3}) + end + if minetest.registered_nodes[node_north.name].buildable_to then + minetest.set_node(north, {name="trunks:twig_8", param2=3}) + end + end +-- big twig 2 + elseif twig_size == 21 then + if not (minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name].buildable_to + or minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z+1}).name].buildable_to) then + + if minetest.registered_nodes[node_here.name].buildable_to then + minetest.set_node(right_here, {name="trunks:twig_9"}) + end + if minetest.registered_nodes[node_north.name].buildable_to then + minetest.set_node(north, {name="trunks:twig_10"}) + end + if minetest.registered_nodes[node_n_e.name].buildable_to then + minetest.set_node(north_east, {name="trunks:twig_11"}) + end + end + elseif twig_size == 22 then + if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name].buildable_to + or minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name].buildable_to) then + + if minetest.registered_nodes[node_here.name].buildable_to then + minetest.set_node(right_here, {name="trunks:twig_9", param2=1}) + end + if minetest.registered_nodes[node_east.name].buildable_to then + minetest.set_node(east, {name="trunks:twig_10", param2=1}) + end + if minetest.registered_nodes[node_s_e.name].buildable_to then + minetest.set_node(south_east, {name="trunks:twig_11", param2=1}) + end + end + elseif twig_size == 23 then + if not (minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name].buildable_to + or minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z-1}).name].buildable_to) then + + if minetest.registered_nodes[node_here.name].buildable_to then + minetest.set_node(right_here, {name="trunks:twig_9", param2=2}) + end + if minetest.registered_nodes[node_south.name].buildable_to then + minetest.set_node(south, {name="trunks:twig_10", param2=2}) + end + if minetest.registered_nodes[node_s_w.name].buildable_to then + minetest.set_node(south_west, {name="trunks:twig_11", param2=2}) + end + end + elseif twig_size == 24 then + if not (minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name].buildable_to + or minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z+1}).name].buildable_to) then + + if minetest.registered_nodes[node_here.name].buildable_to then + minetest.set_node(right_here, {name="trunks:twig_9", param2=3}) + end + if minetest.registered_nodes[node_west.name].buildable_to then + minetest.set_node(west, {name="trunks:twig_10", param2=3}) + end + if minetest.registered_nodes[node_n_w.name].buildable_to then + minetest.set_node(north_west, {name="trunks:twig_11", param2=3}) + end + end + elseif twig_size <= 25 then + minetest.set_node(right_here, {name="trunks:twig_"..math.random(12,13), param2=math.random(0,3)}) + end + end +end + +if Twigs_on_ground == true then +biome_lib:register_generate_plant({ + surface = {"default:dirt_with_grass"}, + max_count = Twigs_on_ground_Max_Count, + rarity = Twigs_on_ground_Rarity, + min_elevation = 1, + max_elevation = 40, + near_nodes = {"group:tree","ferns:fern_03","ferns:fern_02","ferns:fern_01"}, + near_nodes_size = 3, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + abstract_trunks.place_twig +) +end + +if Twigs_on_water == true then +biome_lib:register_generate_plant({ + surface = {"default:water_source"}, + max_count = Twigs_on_water_Max_Count, + rarity = Twigs_on_water_Rarity, + min_elevation = 1, + max_elevation = 40, + near_nodes = {"group:tree"}, + near_nodes_size = 3, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + abstract_trunks.place_twig +) +end + +----------------------------------------------------------------------------------------------- +-- TRuNKS +----------------------------------------------------------------------------------------------- +local TRuNKS = { +-- MoD TRuNK NR + {"default", "tree", 1}, + {"default", "jungletree", 2}, + {"default", "pine_tree", 12}, + + {"trees", "tree_conifer", 3}, + {"trees", "tree_mangrove", 4}, + {"trees", "tree_palm", 5}, + + {"moretrees", "apple_tree_trunk", 6}, + {"moretrees", "beech_trunk", 7}, + {"moretrees", "birch_trunk", 8}, + {"moretrees", "fir_trunk", 9}, + {"moretrees", "oak_trunk", 10}, + {"moretrees", "palm_trunk", 11}, + {"moretrees", "rubber_tree_trunk", 13}, + {"moretrees", "rubber_tree_trunk_empty", 14}, + {"moretrees", "sequoia_trunk", 15}, + {"moretrees", "spruce_trunk", 16}, + {"moretrees", "willow_trunk", 17}, +} + +if Horizontal_Trunks == true then -- see settings.txt +for i in pairs(TRuNKS) do + local MoD = TRuNKS[i][1] + local TRuNK = TRuNKS[i][2] + local NR = TRuNKS[i][3] + local trunkname = MoD..":"..TRuNK + if minetest.get_modpath(MoD) ~= nil + and NR < 6 -- moretrees trunks allready have facedir + and minetest.registered_nodes[trunkname] then -- the node being called exists. + temptrunk = clone_node(trunkname) + temptrunk.paramtype2 = "facedir" + minetest.register_node(":"..trunkname, temptrunk) + end +end +end + +abstract_trunks.place_trunk = function(pos) + + 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 north2 = {x=pos.x, y=pos.y+1, z=pos.z+2} + local south = {x=pos.x, y=pos.y+1, z=pos.z-1} + local south2 = {x=pos.x, y=pos.y+1, z=pos.z-2} + local west = {x=pos.x-1, y=pos.y+1, z=pos.z} + local west2 = {x=pos.x-2, y=pos.y+1, z=pos.z} + local east = {x=pos.x+1, y=pos.y+1, z=pos.z} + local east2 = {x=pos.x+2, y=pos.y+1, z=pos.z} + + local node_here = minetest.get_node(right_here) + local node_north = minetest.get_node(north) + local node_north2 = minetest.get_node(north2) + local node_south = minetest.get_node(south) + local node_south2 = minetest.get_node(south2) + local node_west = minetest.get_node(west) + local node_west2 = minetest.get_node(west2) + local node_east = minetest.get_node(east) + local node_east2 = minetest.get_node(east2) + if minetest.registered_nodes[node_here.name].buildable_to then -- instead of check_air = true, + for i in pairs(TRuNKS) do + local MoD = TRuNKS[i][1] + local TRuNK = TRuNKS[i][2] + local NR = TRuNKS[i][3] + local chance = math.random(1, 17) + local length = math.random(3,5) + if chance == NR then + local trunk_type = math.random(1,3) + if trunk_type == 1 then + if minetest.get_modpath(MoD) ~= nil then + minetest.set_node(right_here, {name=MoD..":"..TRuNK}) + else + minetest.set_node(right_here, {name="default:tree"}) + end + elseif trunk_type == 2 and Horizontal_Trunks == true then + if minetest.get_modpath(MoD) ~= nil then + if minetest.registered_nodes[node_north.name].buildable_to then + minetest.set_node(north, {name=MoD..":"..TRuNK, param2=4}) + end + + if length >= 4 and minetest.registered_nodes[node_north2.name].buildable_to then + minetest.set_node(north2, {name=MoD..":"..TRuNK, param2=4}) + end + + minetest.set_node(right_here, {name=MoD..":"..TRuNK, param2=4}) + if minetest.registered_nodes[node_south.name].buildable_to then + minetest.set_node(south, {name=MoD..":"..TRuNK, param2=4}) + end + if length == 5 and minetest.registered_nodes[node_south2.name].buildable_to then + minetest.set_node(south2, {name=MoD..":"..TRuNK, param2=4}) + end + else + if minetest.registered_nodes[node_north.name].buildable_to then + minetest.set_node(north, {name="default:tree", param2=4}) + end + if length >= 4 and minetest.registered_nodes[node_north2.name].buildable_to then + minetest.set_node(north2, {name="default:tree", param2=4}) + end + minetest.set_node(right_here, {name="default:tree", param2=4}) + if minetest.registered_nodes[node_south.name].buildable_to then + minetest.set_node(south, {name="default:tree", param2=4}) + end + if length == 5 and minetest.registered_nodes[node_south2.name].buildable_to then + minetest.set_node(south2, {name="default:tree", param2=4}) + end + end + elseif trunk_type == 3 and Horizontal_Trunks == true then + if minetest.get_modpath(MoD) ~= nil then + if minetest.registered_nodes[node_west.name].buildable_to then + minetest.set_node(west, {name=MoD..":"..TRuNK, param2=12}) + end + if length >= 4 and minetest.registered_nodes[node_west2.name].buildable_to then + minetest.set_node(west2, {name=MoD..":"..TRuNK, param2=12}) + end + minetest.set_node(right_here, {name=MoD..":"..TRuNK, param2=12}) + if minetest.registered_nodes[node_east.name].buildable_to then + minetest.set_node(east, {name=MoD..":"..TRuNK, param2=12}) + end + if length == 5 and minetest.registered_nodes[node_east2.name].buildable_to then + minetest.set_node(east2, {name=MoD..":"..TRuNK, param2=12}) + end + else + if minetest.registered_nodes[node_west.name].buildable_to then + minetest.set_node(west, {name="default:tree", param2=12}) + end + if length >= 4 and minetest.registered_nodes[node_west2.name].buildable_to then + minetest.set_node(west2, {name="default:tree", param2=12}) + end + minetest.set_node(right_here, {name="default:tree", param2=12}) + if minetest.registered_nodes[node_east.name].buildable_to then + minetest.set_node(east, {name="default:tree", param2=12}) + end + if length == 5 and minetest.registered_nodes[node_east2.name].buildable_to then + minetest.set_node(east2, {name="default:tree", param2=12}) + end + end + end + end + end + end +end + +biome_lib:register_generate_plant({ + surface = {"default:dirt_with_grass"}, + max_count = Trunks_Max_Count, -- 320, + rarity = Trunks_Rarity, -- 99, + min_elevation = 1, + max_elevation = 40, + avoid_nodes = {"group:tree"}, + avoid_radius = 1, + near_nodes = {"group:tree","ferns:fern_03","ferns:fern_02","ferns:fern_01"}, + near_nodes_size = 3, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + abstract_trunks.place_trunk +) + +----------------------------------------------------------------------------------------------- +-- MoSS & FuNGuS -- on ground +----------------------------------------------------------------------------------------------- +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) + + if moss_type == 1 then + minetest.set_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3)}) + else + minetest.set_node(on_ground, {name="trunks:moss", param2=math.random(0,3)}) + end + +end + +biome_lib:register_generate_plant({ + surface = {"default:dirt_with_grass"}, + max_count = Moss_on_ground_Max_Count, + rarity = Moss_on_ground_Rarity, + min_elevation = 1, + max_elevation = 40, + near_nodes = { + "group:tree", + "ferns:fern_03", + "ferns:fern_02", + "ferns:fern_01" + }, + near_nodes_size = 2, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -0.9, + }, + abstract_trunks.grow_moss_on_ground +) +end + +----------------------------------------------------------------------------------------------- +-- MoSS & FuNGuS -- on trunks +----------------------------------------------------------------------------------------------- +if Moss_on_trunk == true then +abstract_trunks.grow_moss_on_trunk = function(pos) + local on_ground = {x=pos.x, y=pos.y+1, z=pos.z} + local at_side_n = {x=pos.x, y=pos.y, z=pos.z+1} + local at_side_e = {x=pos.x+1, y=pos.y, z=pos.z} + local at_side_s = {x=pos.x, y=pos.y, z=pos.z-1} + local at_side_w = {x=pos.x-1, y=pos.y, z=pos.z} + local undrneath = {x=pos.x, y=pos.y-1, z=pos.z} + + local node_here = minetest.get_node(on_ground) + local node_north = minetest.get_node(at_side_n) + local node_east = minetest.get_node(at_side_e) + local node_south = minetest.get_node(at_side_s) + local node_west = minetest.get_node(at_side_w) + 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 moss_type == 1 then + minetest.set_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3) --[[1]]}) + elseif moss_type < 22 then + minetest.set_node(on_ground, {name="trunks:moss", param2=math.random(0,3) --[[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 moss_type == 1 then + minetest.set_node(at_side_n, {name="trunks:moss_fungus", param2=math.random(4,7)}) -- 5,4,6,7 + elseif moss_type < 22 then + minetest.set_node(at_side_n, {name="trunks:moss", param2=math.random(4,7)}) + 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 moss_type == 1 then + minetest.set_node(at_side_e, {name="trunks:moss_fungus", param2=math.random(12,15)}) + elseif moss_type < 22 then + minetest.set_node(at_side_e, {name="trunks:moss", param2=math.random(12,15)}) + 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 moss_type == 1 then + minetest.set_node(at_side_s, {name="trunks:moss_fungus", param2=math.random(8,11)}) + elseif moss_type < 22 then + minetest.set_node(at_side_s, {name="trunks:moss", param2=math.random(8,11)}) + 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 moss_type == 1 then + minetest.set_node(at_side_w, {name="trunks:moss_fungus", param2=math.random(16,19)}) + elseif moss_type < 22 then + minetest.set_node(at_side_w, {name="trunks:moss", param2=math.random(16,19)}) + end + end + --end +end + +biome_lib:register_generate_plant({ + surface = { + "default:tree", + "default:jungletree", + "default:pine_tree", + "trees:tree_conifer", + "trees:tree_mangrove", + --"trees:tree_palm", + "moretrees:apple_tree_trunk", + "moretrees:beech_trunk", + "moretrees:birch_trunk", + "moretrees:fir_trunk", + "moretrees:oak_trunk", + --"moretrees:palm_trunk", + "moretrees:rubber_tree_trunk", + "moretrees:rubber_tree_trunk_empty", + "moretrees:sequoia_trunk", + "moretrees:spruce_trunk", + "moretrees:willow_trunk", + "default:mossycobble" + }, + max_count = Moss_on_trunk_Max_Count, + rarity = Moss_on_trunk_Rarity, + min_elevation = 1, + max_elevation = 40, + plantlife_limit = -0.9, + check_air = false, + }, + "abstract_trunks.grow_moss_on_trunk" +) +end + +----------------------------------------------------------------------------------------------- +-- RooTS +----------------------------------------------------------------------------------------------- +if Roots == true then -- see settings.txt + +abstract_trunks.grow_roots = function(pos) + local twig_size = math.random(1,27) + + local right_here = {x=pos.x , y=pos.y , z=pos.z } + local below = {x=pos.x , y=pos.y-1, z=pos.z } + local north = {x=pos.x , y=pos.y , z=pos.z+1} + local east = {x=pos.x+1, y=pos.y , z=pos.z } + local south = {x=pos.x , y=pos.y , z=pos.z-1} + local west = {x=pos.x-1, y=pos.y , z=pos.z } + + local node_here = minetest.get_node(right_here) + local node_below = minetest.get_node(below) + local node_north = minetest.get_node(north) + local node_east = minetest.get_node(east) + local node_south = minetest.get_node(south) + local node_west = minetest.get_node(west) + + for i in pairs(TRuNKS) do + local MoD = TRuNKS[i][1] + local TRuNK = TRuNKS[i][2] + if minetest.get_modpath(MoD) ~= nil + and node_here.name == MoD..":"..TRuNK + and string.find(node_below.name, "dirt") + and node_here.param2 == 0 then + if minetest.registered_nodes[node_north.name].buildable_to then + minetest.set_node(north, {name="trunks:"..TRuNK.."root", param2=2}) + end + if minetest.registered_nodes[node_east.name].buildable_to then + minetest.set_node(east, {name="trunks:"..TRuNK.."root", param2=3}) + end + if minetest.registered_nodes[node_south.name].buildable_to then + minetest.set_node(south, {name="trunks:"..TRuNK.."root", param2=0}) + end + if minetest.registered_nodes[node_west.name].buildable_to then + minetest.set_node(west, {name="trunks:"..TRuNK.."root", param2=1}) + end + end + end +end + +biome_lib:register_generate_plant({ + surface = {"group:tree"}, + max_count = 1000, + rarity = 1, + min_elevation = 1, + max_elevation = 40, + near_nodes = {"default:dirt_with_grass"}, + near_nodes_size = 1, + near_nodes_vertical = 1, + near_nodes_count = 1, + plantlife_limit = -1, + check_air = false, + }, + "abstract_trunks.grow_roots" +) + +end diff --git a/mods/plantlife/trunks/init.lua b/mods/plantlife/trunks/init.lua new file mode 100755 index 0000000..727e484 --- /dev/null +++ b/mods/plantlife/trunks/init.lua @@ -0,0 +1,20 @@ +----------------------------------------------------------------------------------------------- +local title = "Trunks" +local version = "0.1.4" +local mname = "trunks" +----------------------------------------------------------------------------------------------- +-- Code by Mossmanikin & Neuromancer + +abstract_trunks = {} + +-- support for i18n +local S = plantlife_i18n.gettext + +dofile(minetest.get_modpath("trunks").."/trunks_settings.txt") +dofile(minetest.get_modpath("trunks").."/generating.lua") +dofile(minetest.get_modpath("trunks").."/nodes.lua") +dofile(minetest.get_modpath("trunks").."/crafting.lua") + +----------------------------------------------------------------------------------------------- +print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") +----------------------------------------------------------------------------------------------- diff --git a/mods/plantlife/trunks/nodes.lua b/mods/plantlife/trunks/nodes.lua new file mode 100755 index 0000000..d46d2e5 --- /dev/null +++ b/mods/plantlife/trunks/nodes.lua @@ -0,0 +1,370 @@ +-- Code by Mossmanikin & Neuromancer +-- support for i18n +local S = plantlife_i18n.gettext +----------------------------------------------------------------------------------------------- +-- TWiGS +----------------------------------------------------------------------------------------------- +-- For compatibility with older stuff +minetest.register_alias("trunks:twig", "trunks:twig_1") + +local flat_stick = {-1/2, -1/2, -1/2, 1/2, -7/16, 1/2} +local NoDe = { {1}, {2}, {3}, {4}, {5}, --[[{6},]] {7}, {8}, {9}, {10}, {11}, {12}, {13} } + + +for i in pairs(NoDe) do + local NR = NoDe[i][1] + local iNV = NR - 1 + minetest.register_node("trunks:twig_"..NR, { + description = S("Twig"), + inventory_image = "trunks_twig_"..NR..".png", + wield_image = "trunks_twig_"..NR..".png", + drawtype = "nodebox", + tiles = { + "trunks_twig_"..NR..".png", + "trunks_twig_"..NR..".png^[transformFY", -- mirror + "trunks_twig_6.png" -- empty + }, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + sunlight_propagates = true, + buildable_to = true, + node_box = {type = "fixed", fixed = flat_stick}, + groups = { + choppy=2, + oddly_breakable_by_hand=2, + flammable=3, + attached_node=1, + not_in_creative_inventory=iNV + }, + drop = "trunks:twig_1", + sounds = default.node_sound_leaves_defaults(), + liquids_pointable = true, + on_place = function(itemstack, placer, pointed_thing) + local pt = pointed_thing + local direction = minetest.dir_to_facedir(placer:get_look_dir()) + if minetest.get_node(pt.above).name=="air" then + minetest.set_node(pt.above, {name="trunks:twig_"..math.random(1,4), param2=direction}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end + end, + }) +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(), +}) + +----------------------------------------------------------------------------------------------- +-- 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(), +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS BLoCK +----------------------------------------------------------------------------------------------- +minetest.register_alias("woodstuff:twigs", "trunks:twigs") + +minetest.register_node("trunks:twigs", { + description = S("Twigs Block"), + paramtype2 = "facedir", + tiles = {"trunks_twigs.png"}, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS SLaB +----------------------------------------------------------------------------------------------- +minetest.register_alias("woodstuff:twigs_slab", "trunks:twigs_slab") + +minetest.register_node("trunks:twigs_slab", { + description = S("Twigs Slab"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"trunks_twigs.png"}, + node_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2}, + }, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS RooF +----------------------------------------------------------------------------------------------- +minetest.register_alias("woodstuff:twigs_roof", "trunks:twigs_roof") + +minetest.register_node("trunks:twigs_roof", { + description = S("Twigs Roof"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"trunks_twigs.png"}, + node_box = { + type = "fixed", +-- { left, bottom, front, right, top, back } + fixed = { + {-1/2, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, -1/2, -1/2, 1/2, 0, 0}, + } + }, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS RooF CoRNeR +----------------------------------------------------------------------------------------------- +minetest.register_alias("woodstuff:twigs_roof_corner", "trunks:twigs_roof_corner") + +minetest.register_node("trunks:twigs_roof_corner", { + description = S("Twigs Roof Corner 1"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = { + "trunks_twigs_corner.png", + "trunks_twigs_corner.png", + "trunks_twigs.png" + }, + node_box = { + type = "fixed", +-- { left, bottom, front, right, top, back } + fixed = { + {-1/2, 0, 0, 0, 1/2, 1/2}, + {0, -1/2, 0, 1/2, 0, 1/2}, + {-1/2, -1/2, -1/2, 0, 0, 0}, + } + }, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- TWiGS RooF CoRNeR 2 +----------------------------------------------------------------------------------------------- +minetest.register_alias("woodstuff:twigs_roof_corner_2", "trunks:twigs_roof_corner_2") + +minetest.register_node("trunks:twigs_roof_corner_2", { + description = S("Twigs Roof Corner 2"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = { + "trunks_twigs_corner.png", + "trunks_twigs_corner.png", + "trunks_twigs.png" + }, + node_box = { + type = "fixed", +-- { left, bottom, front, right, top, back } + fixed = { + {-1/2, -1/2, 0, 0, 0, 1/2}, + {0, 0, 0, 1/2, 1/2, 1/2}, + {-1/2, 0, -1/2, 0, 1/2, 0}, + } + }, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), +}) + +if Auto_Roof_Corner == true then + + local roof = "trunks:twigs_roof" + local corner = "trunks:twigs_roof_corner" + local corner_2 = "trunks:twigs_roof_corner_2" + + minetest.register_abm({ + nodenames = {roof}, + interval = 1, + chance = 1, + action = function(pos) + + local node_east = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z }) + local node_west = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z }) + local node_north = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) + local node_south = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) + -- corner 1 + if ((node_west.name == roof and node_west.param2 == 0) + or (node_west.name == corner and node_west.param2 == 1)) + and ((node_north.name == roof and node_north.param2 == 3) + or (node_north.name == corner and node_north.param2 == 3)) + then + minetest.set_node(pos, {name=corner, param2=0}) + end + + if ((node_north.name == roof and node_north.param2 == 1) + or (node_north.name == corner and node_north.param2 == 2)) + and ((node_east.name == roof and node_east.param2 == 0) + or (node_east.name == corner and node_east.param2 == 0)) + then + minetest.set_node(pos, {name=corner, param2=1}) + end + + if ((node_east.name == roof and node_east.param2 == 2) + or (node_east.name == corner and node_east.param2 == 3)) + and ((node_south.name == roof and node_south.param2 == 1) + or (node_south.name == corner and node_south.param2 == 1)) + then + minetest.set_node(pos, {name=corner, param2=2}) + end + + if ((node_south.name == roof and node_south.param2 == 3) + or (node_south.name == corner and node_south.param2 == 0)) + and ((node_west.name == roof and node_west.param2 == 2) + or (node_west.name == corner and node_west.param2 == 2)) + then + minetest.set_node(pos, {name=corner, param2=3}) + end + -- corner 2 + if ((node_west.name == roof and node_west.param2 == 2) + or (node_west.name == corner_2 and node_west.param2 == 1)) + and ((node_north.name == roof and node_north.param2 == 1) + or (node_north.name == corner_2 and node_north.param2 == 3)) + then + minetest.set_node(pos, {name=corner_2, param2=0}) + end + + if ((node_north.name == roof and node_north.param2 == 3) + or (node_north.name == corner_2 and node_north.param2 == 2)) + and ((node_east.name == roof and node_east.param2 == 2) + or (node_east.name == corner_2 and node_east.param2 == 0)) + then + minetest.set_node(pos, {name=corner_2, param2=1}) + end + + if ((node_east.name == roof and node_east.param2 == 0) + or (node_east.name == corner_2 and node_east.param2 == 3)) + and ((node_south.name == roof and node_south.param2 == 3) + or (node_south.name == corner_2 and node_south.param2 == 1)) + then + minetest.set_node(pos, {name=corner_2, param2=2}) + end + + if ((node_south.name == roof and node_south.param2 == 1) + or (node_south.name == corner_2 and node_south.param2 == 0)) + and ((node_west.name == roof and node_west.param2 == 0) + or (node_west.name == corner_2 and node_west.param2 == 2)) + then + minetest.set_node(pos, {name=corner_2, param2=3}) + end + + end, + }) +end + +-- MM: The following stuff is just for testing purposes for now; no generating of roots. +-- I'm not satisfied with this; they should be either bigger or a different drawtype. +----------------------------------------------------------------------------------------------- +-- RooTS +----------------------------------------------------------------------------------------------- +if Roots == true then -- see settings.txt + +local roots_cube = {-2/16, -1/2, -3/16, 2/16, 1/16, 1/2} + +local roots_sheet = {0, -1/2, -1/2, 0, 1/16, 1/2} + +local TRuNKS = { +-- MoD TRuNK + {"default", "tree" }, + {"default", "jungletree" }, + {"default", "pine_tree" }, + + {"trees", "tree_conifer" }, + {"trees", "tree_mangrove" }, + {"trees", "tree_palm" }, + + {"moretrees", "apple_tree_trunk" }, + {"moretrees", "beech_trunk" }, + {"moretrees", "birch_trunk" }, + {"moretrees", "fir_trunk" }, + {"moretrees", "oak_trunk" }, + {"moretrees", "palm_trunk" }, + {"moretrees", "rubber_tree_trunk" }, + {"moretrees", "rubber_tree_trunk_empty" }, + {"moretrees", "sequoia_trunk" }, + {"moretrees", "spruce_trunk" }, + {"moretrees", "willow_trunk" }, +} + +for i in pairs(TRuNKS) do + local MoD = TRuNKS[i][1] + local TRuNK = TRuNKS[i][2] + if minetest.get_modpath(MoD) ~= nil then + + local node = minetest.registered_nodes[MoD..":"..TRuNK] + if node then + local des = node.description + + minetest.register_node("trunks:"..TRuNK.."root", { + description = des.." "..S("Root"), + paramtype = "light", + paramtype2 = "facedir", + tiles = { +--[[top]] MoD.."_"..TRuNK..".png", +--[[bottom]] MoD.."_"..TRuNK..".png", +--[[right]] MoD.."_"..TRuNK..".png^trunks_root_mask.png^[makealpha:0,0,0", +--[[left]] MoD.."_"..TRuNK..".png^trunks_root_mask.png^[transformFX^[makealpha:0,0,0", +--[[back]] MoD.."_"..TRuNK..".png", +--[[front]] MoD.."_"..TRuNK..".png" + }, + drawtype = "nodebox", + selection_box = {type = "fixed", fixed = roots_cube}, + node_box = {type = "fixed", fixed = roots_sheet}, + groups = { + tree=1, + snappy=1, + choppy=2, + oddly_breakable_by_hand=1, + flammable=2--, + --not_in_creative_inventory=1 -- atm in inv for testing + }, + --drop = "trunks:twig_1", -- not sure about this yet + sounds = default.node_sound_wood_defaults(), + }) + + else + minetest.log("error", string.format("[Trunks] warning: tree type '%s:%s' not found", MoD, TRuNK)) + end + end +end +end + +minetest.register_alias("trunks:pine_trunkroot", "trunks:pine_treeroot") diff --git a/mods/ITEMS/trunks/textures/credit_textures.txt b/mods/plantlife/trunks/textures/credit_textures.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/credit_textures.txt rename to mods/plantlife/trunks/textures/credit_textures.txt diff --git a/mods/ITEMS/trunks/textures/trunks_moss.png b/mods/plantlife/trunks/textures/trunks_moss.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_moss.png rename to mods/plantlife/trunks/textures/trunks_moss.png diff --git a/mods/ITEMS/trunks/textures/trunks_moss_fungus.png b/mods/plantlife/trunks/textures/trunks_moss_fungus.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_moss_fungus.png rename to mods/plantlife/trunks/textures/trunks_moss_fungus.png diff --git a/mods/ITEMS/trunks/textures/trunks_root_mask.png b/mods/plantlife/trunks/textures/trunks_root_mask.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_root_mask.png rename to mods/plantlife/trunks/textures/trunks_root_mask.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_1.png b/mods/plantlife/trunks/textures/trunks_twig_1.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_1.png rename to mods/plantlife/trunks/textures/trunks_twig_1.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_10.png b/mods/plantlife/trunks/textures/trunks_twig_10.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_10.png rename to mods/plantlife/trunks/textures/trunks_twig_10.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_11.png b/mods/plantlife/trunks/textures/trunks_twig_11.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_11.png rename to mods/plantlife/trunks/textures/trunks_twig_11.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_12.png b/mods/plantlife/trunks/textures/trunks_twig_12.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_12.png rename to mods/plantlife/trunks/textures/trunks_twig_12.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_13.png b/mods/plantlife/trunks/textures/trunks_twig_13.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_13.png rename to mods/plantlife/trunks/textures/trunks_twig_13.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_2.png b/mods/plantlife/trunks/textures/trunks_twig_2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_2.png rename to mods/plantlife/trunks/textures/trunks_twig_2.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_3.png b/mods/plantlife/trunks/textures/trunks_twig_3.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_3.png rename to mods/plantlife/trunks/textures/trunks_twig_3.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_4.png b/mods/plantlife/trunks/textures/trunks_twig_4.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_4.png rename to mods/plantlife/trunks/textures/trunks_twig_4.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_5.png b/mods/plantlife/trunks/textures/trunks_twig_5.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_5.png rename to mods/plantlife/trunks/textures/trunks_twig_5.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_6.png b/mods/plantlife/trunks/textures/trunks_twig_6.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_6.png rename to mods/plantlife/trunks/textures/trunks_twig_6.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_7.png b/mods/plantlife/trunks/textures/trunks_twig_7.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_7.png rename to mods/plantlife/trunks/textures/trunks_twig_7.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_8.png b/mods/plantlife/trunks/textures/trunks_twig_8.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_8.png rename to mods/plantlife/trunks/textures/trunks_twig_8.png diff --git a/mods/ITEMS/trunks/textures/trunks_twig_9.png b/mods/plantlife/trunks/textures/trunks_twig_9.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twig_9.png rename to mods/plantlife/trunks/textures/trunks_twig_9.png diff --git a/mods/ITEMS/trunks/textures/trunks_twigs.png b/mods/plantlife/trunks/textures/trunks_twigs.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twigs.png rename to mods/plantlife/trunks/textures/trunks_twigs.png diff --git a/mods/ITEMS/trunks/textures/trunks_twigs_corner.png b/mods/plantlife/trunks/textures/trunks_twigs_corner.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twigs_corner.png rename to mods/plantlife/trunks/textures/trunks_twigs_corner.png diff --git a/mods/ITEMS/trunks/textures/trunks_twigs_top.png b/mods/plantlife/trunks/textures/trunks_twigs_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/trunks/textures/trunks_twigs_top.png rename to mods/plantlife/trunks/textures/trunks_twigs_top.png diff --git a/mods/plantlife/trunks/trunks_settings.txt b/mods/plantlife/trunks/trunks_settings.txt new file mode 100755 index 0000000..7fe8822 --- /dev/null +++ b/mods/plantlife/trunks/trunks_settings.txt @@ -0,0 +1,70 @@ +-- Settings for generation of stuff (at map-generation time) + + + + + +Horizontal_Trunks = true + + + +Trunks_Max_Count = 320 -- absolute maximum number in an area of 80x80x80 nodes + + +Trunks_Rarity = 99 -- larger values make trunks more rare (100 means chance of 0 %) + + + + + +Big_Twigs = true -- twigs larger than one node +Twigs_on_ground = true + + + +Twigs_on_ground_Max_Count = 640 -- absolute maximum number in an area of 80x80x80 nodes + +Twigs_on_ground_Rarity = 66 -- larger values make twigs more rare (100 means chance of 0 %) + + + + + +Twigs_on_water = true + + + +Twigs_on_water_Max_Count = 320 -- absolute maximum number in an area of 80x80x80 nodes + + +Twigs_on_water_Rarity = 33 -- larger values make twigs more rare (100 means chance of 0 %) + + + + + +Moss_on_ground = true + + + +Moss_on_ground_Max_Count = 400 -- absolute maximum number in an area of 80x80x80 nodes + +Moss_on_ground_Rarity = 79 -- larger values makes moss more rare (100 means chance of 0 %) + + + + + +Moss_on_trunk = true + + + +Moss_on_trunk_Max_Count = 640 -- absolute maximum number in an area of 80x80x80 nodes + +Moss_on_trunk_Rarity = 24 -- larger values makes moss more rare (100 means chance of 0 %) + + +Auto_Roof_Corner = true -- behavior is similar (not the same!) to the one of minecraft stairs + + +Roots = true \ No newline at end of file diff --git a/mods/plantlife/vines/.luacheckrc b/mods/plantlife/vines/.luacheckrc new file mode 100755 index 0000000..bf99780 --- /dev/null +++ b/mods/plantlife/vines/.luacheckrc @@ -0,0 +1,13 @@ + +unused_args = false + +read_globals = { + "minetest", + "default", + "ItemStack", + "biome_lib", +} + +globals = { + "vines", +} diff --git a/mods/plantlife/vines/LICENSE.md b/mods/plantlife/vines/LICENSE.md new file mode 100755 index 0000000..fb67788 --- /dev/null +++ b/mods/plantlife/vines/LICENSE.md @@ -0,0 +1,4 @@ +License +======= +- Code WTFPL +- Texture CC diff --git a/mods/plantlife/vines/README.md b/mods/plantlife/vines/README.md new file mode 100755 index 0000000..89fdb27 --- /dev/null +++ b/mods/plantlife/vines/README.md @@ -0,0 +1,56 @@ +# Vines + +## Features +- Rope block for spawning rope that slowly drops into the deep. +- Vines are climbable and slowly grow downward. +- Shears that allow the collecting of vines. +- Spawns vines on jungletree leaves. +- Roots on the bottom of dirt and dirt with grass nodes. +- Spawns vines on trees located in swampy area. +- Jungle vines that spawn on the side of jungletrees + +## API +The API is very minimal. It allows the registering of vines and the spawning of +existing vines on nodes of your own. + +If you want vines to spawn on a certain node then you can choose which vine by +adding to the node groups the unique group of that vine. This is determined by +the name of the vine ( see vines.lua ) appended with '_vines'. +An example would be. + +"willow_vines" or "jungle_vines" + +There are two types of vines. One that spawns at the bottom of nodes and uses the +plantlike drawtype, and vines that spawn on the side that use signlike +drawtype. The type is determined by the spawn_on_side property in the biome +table. + +### Example +*taken from mod* + +```lua + + vines.register_vine( name, definitions, biome ) + + --e.g. + + vines.register_vine( 'vine', { + description = "Vines", + average_length = 9 + }, biome ) + +``` + +### definitions +|key| type| description| +|---| ---| ---| +|description| string|The vine's tooltip description| +|average_length|int| The average length of vines| + +For biome definitions please see the [plants_lib API documentation](https://github.com/VanessaE/plantlife_modpack/blob/master/API.txt) + +## Notice +Vines use after_destruct on registered leave nodes to remove vines from which +the leaves are removed. This is done by using the override function. +Malfunctions may occur if other mods override the after_destruct of these nodes +also. diff --git a/mods/plantlife/vines/aliases.lua b/mods/plantlife/vines/aliases.lua new file mode 100755 index 0000000..fce7218 --- /dev/null +++ b/mods/plantlife/vines/aliases.lua @@ -0,0 +1,11 @@ +-- used to remove the old vine nodes. This gives room for the new nodes +minetest.register_alias( 'vines:root', 'air' ) +minetest.register_alias( 'vines:root_rotten', 'air' ) +minetest.register_alias( 'vines:vine', 'air' ) +minetest.register_alias( 'vines:vine_rotten', 'air' ) +minetest.register_alias( 'vines:side', 'air' ) +minetest.register_alias( 'vines:side_rotten', 'air' ) +minetest.register_alias( 'vines:jungle', 'air' ) +minetest.register_alias( 'vines:jungle_rotten', 'air' ) +minetest.register_alias( 'vines:willow', 'air' ) +minetest.register_alias( 'vines:willow_rotten', 'air' ) diff --git a/mods/plantlife/vines/bower.json b/mods/plantlife/vines/bower.json new file mode 100755 index 0000000..108a7c1 --- /dev/null +++ b/mods/plantlife/vines/bower.json @@ -0,0 +1,18 @@ +{ + "name": "vines", + "description": "Vines that spawn on trees and rope", + "keywords": [ + "vines", + "trees", + "rope", + "jungle" + ], + "homepage": "https://github.com/bas080/vines/", + "screenshots": [ + "https://raw.githubusercontent.com/bas080/vines/forum/screenshot.png" + ], + "authors": [ + "bas080" + ], + "license": "WTFPL" +} diff --git a/mods/plantlife/vines/crafts.lua b/mods/plantlife/vines/crafts.lua new file mode 100755 index 0000000..80a6a65 --- /dev/null +++ b/mods/plantlife/vines/crafts.lua @@ -0,0 +1,17 @@ +-- support for i18n +local S = plantlife_i18n.gettext + +minetest.register_craft({ + output = 'vines:rope_block', + recipe = vines.recipes['rope_block'] +}) + +minetest.register_craft({ + output = 'vines:shears', + recipe = vines.recipes['shears'] +}) + +minetest.register_craftitem("vines:vines", { + description = S("Vines"), + inventory_image = "vines_item.png", +}) diff --git a/mods/plantlife/vines/depends.txt b/mods/plantlife/vines/depends.txt new file mode 100755 index 0000000..eef2e6c --- /dev/null +++ b/mods/plantlife/vines/depends.txt @@ -0,0 +1,4 @@ +default +biome_lib +plantlife_i18n +moretrees? diff --git a/mods/plantlife/vines/description.txt b/mods/plantlife/vines/description.txt new file mode 100755 index 0000000..3664f43 --- /dev/null +++ b/mods/plantlife/vines/description.txt @@ -0,0 +1 @@ +Adds climbable vines that are spawned on trees. diff --git a/mods/plantlife/vines/functions.lua b/mods/plantlife/vines/functions.lua new file mode 100755 index 0000000..2d2f529 --- /dev/null +++ b/mods/plantlife/vines/functions.lua @@ -0,0 +1,132 @@ +-- support for i18n +local S = plantlife_i18n.gettext + +vines.register_vine = function( name, defs, biome ) + local groups = { vines=1, snappy=3, flammable=2 } + + local vine_name_end = 'vines:'..name..'_end' + local vine_name_middle = 'vines:'..name..'_middle' + + local vine_image_end = "vines_"..name.."_end.png" + local vine_image_middle = "vines_"..name.."_middle.png" + + local drop_node = vine_name_end + + biome.spawn_plants = { vine_name_end } + + local vine_group = 'group:'..name..'_vines' + biome.spawn_surfaces[ #biome.spawn_surfaces + 1 ] = vine_group + + local selection_box = { type = "wallmounted", } + local drawtype = 'signlike' + if ( not biome.spawn_on_side ) then + --different properties for bottom and side vines. + selection_box = { type = "fixed", fixed = { -0.4, -1/2, -0.4, 0.4, 1/2, 0.4 }, } + drawtype = 'plantlike' + end + + minetest.register_node( vine_name_end, { + description = defs.description, + walkable = false, + climbable = true, + wield_image = vine_image_end, + drop = "", + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "wallmounted", + buildable_to = false, + tiles = { vine_image_end }, + drawtype = drawtype, + inventory_image = vine_image_end, + groups = groups, + sounds = default.node_sound_leaves_defaults(), + selection_box = selection_box, + on_construct = function( pos ) + local timer = minetest.get_node_timer( pos ) + timer:start( math.random(5, 10) ) + end, + on_timer = function( pos ) + local node = minetest.get_node( pos ) + local bottom = {x=pos.x, y=pos.y-1, z=pos.z} + local bottom_node = minetest.get_node( bottom ) + if bottom_node.name == "air" then + if not ( math.random( defs.average_length ) == 1 ) then + minetest.set_node( pos, { name = vine_name_middle, param2 = node.param2 } ) + minetest.set_node( bottom, { name = node.name, param2 = node.param2 } ) + local timer = minetest.get_node_timer( bottom_node ) + timer:start( math.random(5, 10) ) + end + end + end, + after_dig_node = function(pos, node, oldmetadata, user) + vines.dig_vine( pos, drop_node, user ) + end + }) + + minetest.register_node( vine_name_middle, { + description = S("Matured").." "..defs.description, + walkable = false, + climbable = true, + drop = "", + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "wallmounted", + buildable_to = false, + tiles = { vine_image_middle }, + wield_image = vine_image_middle, + drawtype = drawtype, + inventory_image = vine_image_middle, + groups = groups, + sounds = default.node_sound_leaves_defaults(), + selection_box = selection_box, + on_destruct = function( pos ) + local bottom = {x=pos.x, y=pos.y-1, z=pos.z} + local bottom_node = minetest.get_node( bottom ) + if minetest.get_item_group( bottom_node.name, "vines") > 0 then + minetest.after( 0, minetest.remove_node, bottom ) + end + end, + after_dig_node = function( pos, node, oldmetadata, user ) + vines.dig_vine( pos, drop_node, user ) + end + }) + + biome_lib:spawn_on_surfaces( biome ) + + local override_nodes = function( nodes, def ) + local function override( index, registered ) + local node = nodes[ index ] + if index > #nodes then return registered end + if minetest.registered_nodes[node] then + minetest.override_item( node, def ) + registered[#registered+1] = node + end + override( index+1, registered ) + end + override( 1, {} ) + end + + override_nodes( biome.spawn_surfaces,{ + on_destruct = function( pos ) + local pos_min = { x = pos.x -1, y = pos.y - 1, z = pos.z - 1 } + local pos_max = { x = pos.x +1, y = pos.y + 1, z = pos.z + 1 } + local positions = minetest.find_nodes_in_area( pos_min, pos_max, "group:vines" ) + for index, position in pairs(positions) do + minetest.remove_node( position ) + end + end + }) + +end + +vines.dig_vine = function( pos, node_name, user ) + --only dig give the vine if shears are used + if not user then return false end + local wielded = user:get_wielded_item() + if 'vines:shears' == wielded:get_name() then + local inv = user:get_inventory() + if inv then + inv:add_item("main", ItemStack( node_name )) + end + end +end diff --git a/mods/plantlife/vines/init.lua b/mods/plantlife/vines/init.lua new file mode 100755 index 0000000..2abbda0 --- /dev/null +++ b/mods/plantlife/vines/init.lua @@ -0,0 +1,17 @@ +vines = { + name = 'vines', + recipes = {} +} + +-- support for i18n +local S = plantlife_i18n.gettext + +dofile( minetest.get_modpath( vines.name ) .. "/functions.lua" ) +dofile( minetest.get_modpath( vines.name ) .. "/aliases.lua" ) +dofile( minetest.get_modpath( vines.name ) .. "/recipes.lua" ) +dofile( minetest.get_modpath( vines.name ) .. "/crafts.lua" ) +dofile( minetest.get_modpath( vines.name ) .. "/nodes.lua" ) +dofile( minetest.get_modpath( vines.name ) .. "/shear.lua" ) +dofile( minetest.get_modpath( vines.name ) .. "/vines.lua" ) + +print(S("[Vines] Loaded!")) diff --git a/mods/plantlife/vines/mod.conf b/mods/plantlife/vines/mod.conf new file mode 100755 index 0000000..39ea365 --- /dev/null +++ b/mods/plantlife/vines/mod.conf @@ -0,0 +1,2 @@ + +name = vines diff --git a/mods/plantlife/vines/nodes.lua b/mods/plantlife/vines/nodes.lua new file mode 100755 index 0000000..4e4d707 --- /dev/null +++ b/mods/plantlife/vines/nodes.lua @@ -0,0 +1,86 @@ +-- support for i18n +local S = plantlife_i18n.gettext + +minetest.register_node("vines:rope_block", { + description = S("Rope"), + sunlight_propagates = true, + paramtype = "light", + tiles = { + "default_wood.png^vines_rope.png", + "default_wood.png^vines_rope.png", + "default_wood.png", + "default_wood.png", + "default_wood.png^vines_rope.png", + "default_wood.png^vines_rope.png", + }, + groups = { flammable=2, choppy=2, oddly_breakable_by_hand=1 }, + after_place_node = function(pos) + local p = {x=pos.x, y=pos.y-1, z=pos.z} + local n = minetest.get_node(p) + if n.name == "air" then + minetest.add_node(p, {name="vines:rope_end"}) + end + end, + after_dig_node = function(pos, node, digger) + local p = {x=pos.x, y=pos.y-1, z=pos.z} + local n = minetest.get_node(p) + while ( n.name == 'vines:rope' or n.name == 'vines:rope_end' ) do + minetest.remove_node(p) + p = {x=p.x, y=p.y-1, z=p.z} + n = minetest.get_node(p) + end + end +}) + +minetest.register_node("vines:rope", { + description = S("Rope"), + walkable = false, + climbable = true, + sunlight_propagates = true, + paramtype = "light", + drop = "", + tiles = { "vines_rope.png" }, + drawtype = "plantlike", + groups = {flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, +}) + +minetest.register_node("vines:rope_end", { + description = S("Rope"), + walkable = false, + climbable = true, + sunlight_propagates = true, + paramtype = "light", + drop = "", + tiles = { "vines_rope_end.png" }, + drawtype = "plantlike", + groups = {flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), + after_place_node = function(pos) + local yesh = {x = pos.x, y= pos.y-1, z=pos.z} + minetest.add_node(yesh, {name="vines:rope"}) + end, + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, + on_construct = function( pos ) + local timer = minetest.get_node_timer( pos ) + timer:start( 1 ) + end, + on_timer = function( pos, elapsed ) + local p = {x=pos.x, y=pos.y-1, z=pos.z} + local n = minetest.get_node(p) + if n.name == "air" then + minetest.set_node(pos, {name="vines:rope"}) + minetest.add_node(p, {name="vines:rope_end"}) + else + local timer = minetest.get_node_timer( pos ) + timer:start( 1 ) + end + end +}) diff --git a/mods/plantlife/vines/recipes.lua b/mods/plantlife/vines/recipes.lua new file mode 100755 index 0000000..991712b --- /dev/null +++ b/mods/plantlife/vines/recipes.lua @@ -0,0 +1,11 @@ +vines.recipes['rope_block'] = { + {'', 'group:wood', ''}, + {'', 'group:vines', ''}, + {'', 'group:vines', ''} +} + +vines.recipes['shears'] = { + {'', 'default:steel_ingot', ''}, + {'group:stick', 'group:wood', 'default:steel_ingot'}, + {'', '', 'group:stick'} +} diff --git a/mods/plantlife/vines/screenshot.png b/mods/plantlife/vines/screenshot.png new file mode 100755 index 0000000..b386f69 Binary files /dev/null and b/mods/plantlife/vines/screenshot.png differ diff --git a/mods/plantlife/vines/shear.lua b/mods/plantlife/vines/shear.lua new file mode 100755 index 0000000..6ce498e --- /dev/null +++ b/mods/plantlife/vines/shear.lua @@ -0,0 +1,18 @@ +-- support for i18n +local S = plantlife_i18n.gettext + +minetest.register_tool("vines:shears", { + description = S("Shears"), + inventory_image = "vines_shears.png", + wield_image = "vines_shears.png", + stack_max = 1, + max_drop_level=3, + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=0, + groupcaps={ + snappy={times={[3]=0.2}, uses=60, maxlevel=3}, + wool={times={[3]=0.2}, uses=60, maxlevel=3} + } + }, +}) diff --git a/mods/plantlife/vines/textures/vines_item.png b/mods/plantlife/vines/textures/vines_item.png new file mode 100755 index 0000000..c66242e Binary files /dev/null and b/mods/plantlife/vines/textures/vines_item.png differ diff --git a/mods/plantlife/vines/textures/vines_jungle_end.png b/mods/plantlife/vines/textures/vines_jungle_end.png new file mode 100755 index 0000000..6c8d339 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_jungle_end.png differ diff --git a/mods/plantlife/vines/textures/vines_jungle_middle.png b/mods/plantlife/vines/textures/vines_jungle_middle.png new file mode 100755 index 0000000..bf838a5 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_jungle_middle.png differ diff --git a/mods/plantlife/vines/textures/vines_root_end.png b/mods/plantlife/vines/textures/vines_root_end.png new file mode 100755 index 0000000..4fc3f87 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_root_end.png differ diff --git a/mods/plantlife/vines/textures/vines_root_middle.png b/mods/plantlife/vines/textures/vines_root_middle.png new file mode 100755 index 0000000..49f88c0 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_root_middle.png differ diff --git a/mods/plantlife/vines/textures/vines_rope.png b/mods/plantlife/vines/textures/vines_rope.png new file mode 100755 index 0000000..0045c4c Binary files /dev/null and b/mods/plantlife/vines/textures/vines_rope.png differ diff --git a/mods/plantlife/vines/textures/vines_rope_end.png b/mods/plantlife/vines/textures/vines_rope_end.png new file mode 100755 index 0000000..faf2c71 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_rope_end.png differ diff --git a/mods/plantlife/vines/textures/vines_shears.png b/mods/plantlife/vines/textures/vines_shears.png new file mode 100755 index 0000000..c4c39f9 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_shears.png differ diff --git a/mods/plantlife/vines/textures/vines_side_end.png b/mods/plantlife/vines/textures/vines_side_end.png new file mode 100755 index 0000000..5b3b28f Binary files /dev/null and b/mods/plantlife/vines/textures/vines_side_end.png differ diff --git a/mods/plantlife/vines/textures/vines_side_middle.png b/mods/plantlife/vines/textures/vines_side_middle.png new file mode 100755 index 0000000..2576e93 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_side_middle.png differ diff --git a/mods/plantlife/vines/textures/vines_vine_end.png b/mods/plantlife/vines/textures/vines_vine_end.png new file mode 100755 index 0000000..062857b Binary files /dev/null and b/mods/plantlife/vines/textures/vines_vine_end.png differ diff --git a/mods/plantlife/vines/textures/vines_vine_middle.png b/mods/plantlife/vines/textures/vines_vine_middle.png new file mode 100755 index 0000000..8afffe8 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_vine_middle.png differ diff --git a/mods/plantlife/vines/textures/vines_willow_end.png b/mods/plantlife/vines/textures/vines_willow_end.png new file mode 100755 index 0000000..b5b8e59 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_willow_end.png differ diff --git a/mods/plantlife/vines/textures/vines_willow_middle.png b/mods/plantlife/vines/textures/vines_willow_middle.png new file mode 100755 index 0000000..ca0b831 Binary files /dev/null and b/mods/plantlife/vines/textures/vines_willow_middle.png differ diff --git a/mods/plantlife/vines/vines.lua b/mods/plantlife/vines/vines.lua new file mode 100755 index 0000000..1643972 --- /dev/null +++ b/mods/plantlife/vines/vines.lua @@ -0,0 +1,108 @@ +-- support for i18n +local S = plantlife_i18n.gettext + +vines.register_vine( 'root', { + description = S("Roots"), + average_length = 9, +},{ + choose_random_wall = true, + avoid_nodes = {"vines:root_middle"}, + avoid_radius = 5, + spawn_delay = 500, + spawn_chance = 10, + spawn_surfaces = { + "default:dirt_with_grass", + "default:dirt" + }, + spawn_on_bottom = true, + plantlife_limit = -0.6, + humidity_min = 0.4, +}) + +vines.register_vine( 'vine', { + description = S("Vines"), + average_length = 5, +},{ + choose_random_wall = true, + avoid_nodes = {"group:vines"}, + avoid_radius = 5, + spawn_delay = 500, + spawn_chance = 100, + spawn_surfaces = { + "default:leaves", + "default:jungleleaves", + "moretrees:jungletree_leaves_red", + "moretrees:jungletree_leaves_yellow", + "moretrees:jungletree_leaves_green" + }, + spawn_on_bottom = true, + plantlife_limit = -0.9, + humidity_min = 0.7, +}) + +vines.register_vine( 'side', { + description = S("Vines"), + average_length = 6, +},{ + choose_random_wall = true, + avoid_nodes = {"group:vines", "default:apple"}, + avoid_radius = 3, + spawn_delay = 500, + spawn_chance = 100, + spawn_surfaces = { + "default:leaves", + "default:jungleleaves", + "moretrees:jungletree_leaves_red", + "moretrees:jungletree_leaves_yellow", + "moretrees:jungletree_leaves_green" + }, + spawn_on_side = true, + plantlife_limit = -0.9, + humidity_min = 0.4, +}) + +vines.register_vine( "jungle", { + description = S("Jungle Vines"), + average_length = 7, +},{ + choose_random_wall = true, + neighbors = { + "default:jungleleaves", + "moretrees:jungletree_leaves_red", + "moretrees:jungletree_leaves_yellow", + "moretrees:jungletree_leaves_green" + }, + avoid_nodes = { + "vines:jungle_middle", + "vines:jungle_end", + }, + avoid_radius = 5, + spawn_delay = 500, + spawn_chance = 100, + spawn_surfaces = { + "default:jungletree", + "moretrees:jungletree_trunk" + }, + spawn_on_side = true, + plantlife_limit = -0.9, + humidity_min = 0.2, +}) + +vines.register_vine( 'willow', { + description = S("Willow Vines"), + average_length = 9, +},{ + choose_random_wall = true, + avoid_nodes = { "vines:willow_middle" }, + avoid_radius = 5, + near_nodes = { 'default:water_source' }, + near_nodes_size = 1, + near_nodes_count = 1, + near_nodes_vertical = 7, + plantlife_limit = -0.8, + spawn_chance = 10, + spawn_delay = 500, + spawn_on_side = true, + spawn_surfaces = {"moretrees:willow_leaves"}, + humidity_min = 0.5 +}) diff --git a/mods/plantlife/woodsoils/depends.txt b/mods/plantlife/woodsoils/depends.txt new file mode 100755 index 0000000..961719e --- /dev/null +++ b/mods/plantlife/woodsoils/depends.txt @@ -0,0 +1,8 @@ +default +biome_lib +plantlife_i18n +bushes? +ferns? +moretrees? +trees? +trunks? diff --git a/mods/plantlife/woodsoils/generating.lua b/mods/plantlife/woodsoils/generating.lua new file mode 100755 index 0000000..087e03c --- /dev/null +++ b/mods/plantlife/woodsoils/generating.lua @@ -0,0 +1,151 @@ +-- generating of forest soils + +local RaDiuS = { +-- WE1 NS1 WE2 NS2 WE3 NS3 + {-1,-2, -2,-2, -2,-3}, + { 0,-2, -3,-1, -3,-2}, + { 1,-2, -3, 0, -4,-1}, + {-2,-1, -3, 1, -4, 0}, + {-1,-1, -2, 2, -4, 1}, + { 0,-1, -1, 3, -3, 2}, + { 1,-1, 0, 3, -2, 3}, + { 2,-1, 1, 3, -1, 4}, + {-2, 0, 2, 2, 0, 4}, + {-1, 0, 3, 1, 1, 4}, + { 0, 0, 3, 0, 2, 3}, + { 1, 0, 3,-1, 3, 2}, + { 2, 0, 2,-2, 4, 1}, + {-2, 1, 1,-3, 4, 0}, + {-1, 1, 0,-3, 4,-1}, + { 0, 1, -1,-3, 3,-2}, + { 1, 1, 0, 0, 2,-3}, + { 2, 1, 0, 0, 1,-4}, + {-1, 2, 0, 0, 0,-4}, + { 0, 2, 0, 0, -1,-4}, + { 1, 2, 0, 0, 0, 0}, +} +-- e = + , n = + +abstract_woodsoils.place_soil = function(pos) + + if minetest.get_item_group(minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name, "soil") > 0 + or minetest.get_item_group(minetest.get_node({x=pos.x,y=pos.y-2,z=pos.z}).name, "soil") > 0 then + for i in pairs(RaDiuS) do + local WE1 = RaDiuS[i][1] + local NS1 = RaDiuS[i][2] + local WE2 = RaDiuS[i][3] + local NS2 = RaDiuS[i][4] + local WE3 = RaDiuS[i][5] + local NS3 = RaDiuS[i][6] + local radius_1a = {x=pos.x+WE1,y=pos.y-1,z=pos.z+NS1} + local radius_1b = {x=pos.x+WE1,y=pos.y-2,z=pos.z+NS1} + local radius_2a = {x=pos.x+WE2,y=pos.y-1,z=pos.z+NS2} + local radius_2b = {x=pos.x+WE2,y=pos.y-2,z=pos.z+NS2} + local radius_3a = {x=pos.x+WE3,y=pos.y-1,z=pos.z+NS3} + local radius_3b = {x=pos.x+WE3,y=pos.y-2,z=pos.z+NS3} + --local node_1a = minetest.get_node(radius_1a) + --local node_1b = minetest.get_node(radius_1b) + local node_2a = minetest.get_node(radius_2a) + local node_2b = minetest.get_node(radius_2b) + local node_3a = minetest.get_node(radius_3a) + local node_3b = minetest.get_node(radius_3b) + -- Dirt with Leaves 1 + if minetest.get_item_group(minetest.get_node(radius_1a).name, "soil") > 0 then + minetest.set_node(radius_1a, {name="woodsoils:dirt_with_leaves_1"}) + end + if minetest.get_item_group(minetest.get_node(radius_1b).name, "soil") > 0 then + minetest.set_node(radius_1b, {name="woodsoils:dirt_with_leaves_1"}) + end + -- Grass with Leaves 2 + if string.find(node_2a.name, "dirt_with_grass") then + minetest.set_node(radius_2a, {name="woodsoils:grass_with_leaves_2"}) + end + if string.find(node_2b.name, "dirt_with_grass") then + minetest.set_node(radius_2b, {name="woodsoils:grass_with_leaves_2"}) + end + -- Grass with Leaves 1 + if string.find(node_3a.name, "dirt_with_grass") then + minetest.set_node(radius_3a, {name="woodsoils:grass_with_leaves_1"}) + end + if string.find(node_3b.name, "dirt_with_grass") then + minetest.set_node(radius_3b, {name="woodsoils:grass_with_leaves_1"}) + end + end + end +end + +biome_lib:register_generate_plant({ + surface = { + "group:tree", + "ferns:fern_03", + "ferns:fern_02", + "ferns:fern_01" + }, + max_count = 1000, + rarity = 1, + min_elevation = 1, + max_elevation = 40, + near_nodes = {"group:tree","ferns:fern_03","ferns:fern_02","ferns:fern_01"}, + near_nodes_size = 5, + near_nodes_vertical = 1, + near_nodes_count = 4, + plantlife_limit = -1, + check_air = false, + }, + "abstract_woodsoils.place_soil" +) + +biome_lib:register_generate_plant({ + surface = { + "moretrees:apple_tree_sapling_ongen", + "moretrees:beech_sapling_ongen", + "moretrees:birch_sapling_ongen", + "moretrees:fir_sapling_ongen", + "moretrees:jungletree_sapling_ongen", + "moretrees:oak_sapling_ongen", + "moretrees:palm_sapling_ongen", + "moretrees:rubber_tree_sapling_ongen", + "moretrees:sequoia_sapling_ongen", + "moretrees:spruce_sapling_ongen", + "moretrees:willow_sapling_ongen" + }, + max_count = 1000, + rarity = 2, + min_elevation = 1, + max_elevation = 40, + plantlife_limit = -0.9, + check_air = false, + }, + "abstract_woodsoils.place_soil" +) + +minetest.register_abm({ + nodenames = {"default:papyrus"}, + neighbors = { + "woodsoils:dirt_with_leaves_1", + "woodsoils:dirt_with_leaves_2", + "woodsoils:grass_with_leaves_1", + "woodsoils:grass_with_leaves_2" + }, + interval = 50, + chance = 20, + action = function(pos, node) + pos.y = pos.y-1 + local name = minetest.get_node(pos).name + if string.find(name, "_with_leaves_") then + if minetest.find_node_near(pos, 3, {"group:water"}) == nil then + return + end + pos.y = pos.y+1 + local height = 0 + while minetest.get_node(pos).name == "default:papyrus" and height < 4 do + height = height+1 + pos.y = pos.y+1 + end + if height < 4 then + if minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name="default:papyrus"}) + end + end + end + end, +}) diff --git a/mods/plantlife/woodsoils/init.lua b/mods/plantlife/woodsoils/init.lua new file mode 100755 index 0000000..ad30642 --- /dev/null +++ b/mods/plantlife/woodsoils/init.lua @@ -0,0 +1,32 @@ +----------------------------------------------------------------------------------------------- +local title = "Wood Soils" -- former "Forest Soils" +local version = "0.0.9" +local mname = "woodsoils" -- former "forestsoils" +----------------------------------------------------------------------------------------------- + +abstract_woodsoils = {} + +-- support for i18n +local S = plantlife_i18n.gettext + +dofile(minetest.get_modpath("woodsoils").."/nodes.lua") +dofile(minetest.get_modpath("woodsoils").."/generating.lua") + +-- felt like playing a bit :D +--[[print(" _____ __") +print("_/ ____\\___________ ____ _______/ |_") +print("\\ __\\/ _ \\_ __ \\_/ __ \\ / ___/\\ __\\") +print(" | | ( <_> ) | \\/\\ ___/ \\___ \\ | |") +print(" |__| \\____/|__| \\___ >____ > |__|") +print(" \\/ \\/") + +print(" .__.__") +print(" __________ |__| | ______") +print(" / ___/ _ \\| | | / ___/") +print(" \\___ ( <_> ) | |__\\___ \\") +print("/____ >____/|__|____/____ >") +print(" \\/ \\/")]] + +----------------------------------------------------------------------------------------------- +print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") +----------------------------------------------------------------------------------------------- diff --git a/mods/plantlife/woodsoils/nodes.lua b/mods/plantlife/woodsoils/nodes.lua new file mode 100755 index 0000000..b236564 --- /dev/null +++ b/mods/plantlife/woodsoils/nodes.lua @@ -0,0 +1,82 @@ +-- support for i18n +local S = plantlife_i18n.gettext + +-- nodes + +minetest.register_node("woodsoils:dirt_with_leaves_1", { + description = S("Forest Soil 1"), + tiles = { + "default_dirt.png^woodsoils_ground_cover.png", + "default_dirt.png", + "default_dirt.png^woodsoils_ground_cover_side.png"}, + is_ground_content = true, + groups = { + crumbly=3, + soil=1--, + --not_in_creative_inventory=1 + }, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.4}, + }), +}) + +minetest.register_node("woodsoils:dirt_with_leaves_2", { + description = S("Forest Soil 2"), + tiles = { + "woodsoils_ground.png", + "default_dirt.png", + "default_dirt.png^woodsoils_ground_side.png"}, + is_ground_content = true, + groups = { + crumbly=3, + soil=1--, + --not_in_creative_inventory=1 + }, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.4}, + }), +}) + +minetest.register_node("woodsoils:grass_with_leaves_1", { + description = S("Forest Soil 3"), + tiles = { + "default_grass.png^woodsoils_ground_cover2.png", + "default_dirt.png", + "default_dirt.png^default_grass_side.png^woodsoils_ground_cover_side2.png"}, + is_ground_content = true, + groups = { + crumbly=3, + soil=1--, + --not_in_creative_inventory=1 + }, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.4}, + }), +}) + +minetest.register_node("woodsoils:grass_with_leaves_2", { + description = S("Forest Soil 4"), + tiles = { + "default_grass.png^woodsoils_ground_cover.png", + "default_dirt.png", + "default_dirt.png^default_grass_side.png^woodsoils_ground_cover_side.png"}, + is_ground_content = true, + groups = { + crumbly=3, + soil=1--, + --not_in_creative_inventory=1 + }, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.4}, + }), +}) + +-- For compatibility with older stuff +minetest.register_alias("forestsoils:dirt_with_leaves_1", "woodsoils:dirt_with_leaves_1") +minetest.register_alias("forestsoils:dirt_with_leaves_2", "woodsoils:dirt_with_leaves_2") +minetest.register_alias("forestsoils:grass_with_leaves_1", "woodsoils:grass_with_leaves_1") +minetest.register_alias("forestsoils:grass_with_leaves_2", "woodsoils:grass_with_leaves_2") diff --git a/mods/ITEMS/woodsoils/textures/credit_textures.txt b/mods/plantlife/woodsoils/textures/credit_textures.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/woodsoils/textures/credit_textures.txt rename to mods/plantlife/woodsoils/textures/credit_textures.txt diff --git a/mods/ITEMS/woodsoils/textures/woodsoils_ground.png b/mods/plantlife/woodsoils/textures/woodsoils_ground.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/woodsoils/textures/woodsoils_ground.png rename to mods/plantlife/woodsoils/textures/woodsoils_ground.png diff --git a/mods/ITEMS/woodsoils/textures/woodsoils_ground_cover.png b/mods/plantlife/woodsoils/textures/woodsoils_ground_cover.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/woodsoils/textures/woodsoils_ground_cover.png rename to mods/plantlife/woodsoils/textures/woodsoils_ground_cover.png diff --git a/mods/ITEMS/woodsoils/textures/woodsoils_ground_cover2.png b/mods/plantlife/woodsoils/textures/woodsoils_ground_cover2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/woodsoils/textures/woodsoils_ground_cover2.png rename to mods/plantlife/woodsoils/textures/woodsoils_ground_cover2.png diff --git a/mods/ITEMS/woodsoils/textures/woodsoils_ground_cover_side.png b/mods/plantlife/woodsoils/textures/woodsoils_ground_cover_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/woodsoils/textures/woodsoils_ground_cover_side.png rename to mods/plantlife/woodsoils/textures/woodsoils_ground_cover_side.png diff --git a/mods/ITEMS/woodsoils/textures/woodsoils_ground_cover_side2.png b/mods/plantlife/woodsoils/textures/woodsoils_ground_cover_side2.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/woodsoils/textures/woodsoils_ground_cover_side2.png rename to mods/plantlife/woodsoils/textures/woodsoils_ground_cover_side2.png diff --git a/mods/ITEMS/woodsoils/textures/woodsoils_ground_side.png b/mods/plantlife/woodsoils/textures/woodsoils_ground_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/woodsoils/textures/woodsoils_ground_side.png rename to mods/plantlife/woodsoils/textures/woodsoils_ground_side.png diff --git a/mods/plantlife/youngtrees/depends.txt b/mods/plantlife/youngtrees/depends.txt new file mode 100755 index 0000000..d48236a --- /dev/null +++ b/mods/plantlife/youngtrees/depends.txt @@ -0,0 +1,3 @@ +default +biome_lib +plantlife_i18n diff --git a/mods/plantlife/youngtrees/init.lua b/mods/plantlife/youngtrees/init.lua new file mode 100755 index 0000000..b77496a --- /dev/null +++ b/mods/plantlife/youngtrees/init.lua @@ -0,0 +1,129 @@ +-- support for i18n +local S = plantlife_i18n.gettext + +abstract_youngtrees = {} + +minetest.register_node("youngtrees:youngtree2_middle",{ + description = S("Young Tree 2 (middle)"), + drawtype="nodebox", + tiles = {"youngtree2branch.png"}, + inventory_image = "youngtree2branch.png", + wield_image = "youngtree2branch.png", + paramtype = "light", + walkable = false, + is_ground_content = true, + node_box = { + type = "fixed", + fixed = { + {0.125000,-0.500000,-0.500000,0.500000,-0.187500,-0.125000}, --NodeBox 1 + {-0.187500,-0.187500,-0.500000,0.500000,0.125000,0.250000}, --NodeBox 2 + {-0.500000,0.125000,-0.500000,0.500000,0.500000,0.500000}, --NodeBox 3 + } + }, + groups = {snappy=3,flammable=2}, + sounds = default.node_sound_leaves_defaults(), + drop = 'trunks:twig_1' +}) + +minetest.register_node("youngtrees:youngtree_top", { + description = S("Young Tree (top)"), + drawtype = "plantlike", + tiles = {"youngtree16xa.png"}, + inventory_image = "youngtree16xa.png", + wield_image = "youngtree16xa.png", + paramtype = "light", + walkable = false, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + groups = {snappy=3,flammable=2}, + sounds = default.node_sound_leaves_defaults(), + drop = 'trunks:twig_1' +}) + + +minetest.register_node("youngtrees:youngtree_middle", { + description = S("Young Tree (middle)"), + drawtype = "plantlike", + tiles = {"youngtree16xb.png"}, + inventory_image = "youngtree16xb.png", + wield_image = "youngtree16xb.png", + paramtype = "light", + walkable = false, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + groups = {snappy=3,flammable=2}, + sounds = default.node_sound_leaves_defaults(), + drop = 'trunks:twig_1' +}) + + + +minetest.register_node("youngtrees:youngtree_bottom", { + description = S("Young Tree (bottom)"), + drawtype = "plantlike", + tiles = {"youngtree16xc.png"}, + inventory_image = "youngtree16xc.png", + wield_image = "youngtree16xc.png", + paramtype = "light", + walkable = false, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + groups = {snappy=3,flammable=2}, + sounds = default.node_sound_leaves_defaults(), + drop = 'trunks:twig_1' +}) + + + abstract_youngtrees.grow_youngtree = function(pos) + local height = math.random(1,3) + abstract_youngtrees.grow_youngtree_node(pos,height) +end + +abstract_youngtrees.grow_youngtree_node = function(pos, height) + + + local right_here = {x=pos.x, y=pos.y+1, z=pos.z} + local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z} + + if minetest.get_node(right_here).name == "air" -- instead of check_air = true, + or minetest.get_node(right_here).name == "default:junglegrass" then + if height == 1 then + minetest.set_node(right_here, {name="youngtrees:youngtree_top"}) + end + if height == 2 then + minetest.set_node(right_here, {name="youngtrees:youngtree_bottom"}) + minetest.set_node(above_right_here, {name="youngtrees:youngtree_top"}) + end + if height == 3 then + local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z} + minetest.set_node(right_here, {name="youngtrees:youngtree_bottom"}) + minetest.set_node(above_right_here, {name="youngtrees:youngtree_middle"}) + minetest.set_node(two_above_right_here, {name="youngtrees:youngtree_top"}) + end + end +end + + +biome_lib:register_generate_plant({ + surface = { + "default:dirt_with_grass", + "stoneage:grass_with_silex", + "sumpf:peat", + "sumpf:sumpf" + }, + max_count = 55, --10,15 + rarity = 101 - 4, --3,4 + min_elevation = 1, -- above sea level + plantlife_limit = -0.9, + }, + abstract_youngtrees.grow_youngtree +) diff --git a/mods/plantlife/youngtrees/textures/youngtree16xa.png b/mods/plantlife/youngtrees/textures/youngtree16xa.png new file mode 100755 index 0000000..9bba623 Binary files /dev/null and b/mods/plantlife/youngtrees/textures/youngtree16xa.png differ diff --git a/mods/plantlife/youngtrees/textures/youngtree16xb.png b/mods/plantlife/youngtrees/textures/youngtree16xb.png new file mode 100755 index 0000000..d83b7a3 Binary files /dev/null and b/mods/plantlife/youngtrees/textures/youngtree16xb.png differ diff --git a/mods/plantlife/youngtrees/textures/youngtree16xc.png b/mods/plantlife/youngtrees/textures/youngtree16xc.png new file mode 100755 index 0000000..cfe3cf1 Binary files /dev/null and b/mods/plantlife/youngtrees/textures/youngtree16xc.png differ diff --git a/mods/plantlife/youngtrees/textures/youngtree2branch.png b/mods/plantlife/youngtrees/textures/youngtree2branch.png new file mode 100755 index 0000000..89b2f23 Binary files /dev/null and b/mods/plantlife/youngtrees/textures/youngtree2branch.png differ diff --git a/mods/player_api/README.txt b/mods/player_api/README.txt new file mode 100755 index 0000000..cf12468 --- /dev/null +++ b/mods/player_api/README.txt @@ -0,0 +1,20 @@ +Minetest Game mod: player_api +============================= +See license.txt for license information. + +Provides an API to allow multiple mods to set player models and textures. +Also sets the default model, texture, and player flags. + +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) + +Authors of media (textures and models) +-------------------------------------- + +stujones11 (CC BY-SA 3.0): + character.* -- Derived from a model by MirceaKitsune (CC BY-SA 3.0) + +Jordach (CC BY-SA 3.0): + character.png diff --git a/mods/player_api/api.lua b/mods/player_api/api.lua new file mode 100755 index 0000000..e309b08 --- /dev/null +++ b/mods/player_api/api.lua @@ -0,0 +1,139 @@ +-- Minetest 0.4 mod: player +-- See README.txt for licensing and other information. + +player_api = {} + +-- Player animation blending +-- Note: This is currently broken due to a bug in Irrlicht, leave at 0 +local animation_blend = 0 + +player_api.registered_models = { } + +-- Local for speed. +local models = player_api.registered_models + +function player_api.register_model(name, def) + models[name] = def +end + +-- Player stats and animations +local player_model = {} +local player_textures = {} +local player_anim = {} +local player_sneak = {} +player_api.player_attached = {} + +function player_api.get_animation(player) + local name = player:get_player_name() + return { + model = player_model[name], + textures = player_textures[name], + animation = player_anim[name], + } +end + +-- Called when a player's appearance needs to be updated +function player_api.set_model(player, model_name) + local name = player:get_player_name() + local model = models[model_name] + if model then + if player_model[name] == model_name then + return + end + player:set_properties({ + mesh = model_name, + textures = player_textures[name] or model.textures, + visual = "mesh", + visual_size = model.visual_size or {x = 1, y = 1}, + collisionbox = model.collisionbox or {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, + stepheight = model.stepheight or 0.6, + eye_height = model.eye_height or 1.47, + }) + player_api.set_animation(player, "stand") + else + player:set_properties({ + textures = {"player.png", "player_back.png"}, + visual = "upright_sprite", + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.75, 0.3}, + stepheight = 0.6, + eye_height = 1.625, + }) + end + player_model[name] = model_name +end + +function player_api.set_textures(player, textures) + local name = player:get_player_name() + local model = models[player_model[name]] + local model_textures = model and model.textures or nil + player_textures[name] = textures or model_textures + player:set_properties({textures = textures or model_textures,}) +end + +function player_api.set_animation(player, anim_name, speed) + local name = player:get_player_name() + if player_anim[name] == anim_name then + return + end + local model = player_model[name] and models[player_model[name]] + if not (model and model.animations[anim_name]) then + return + end + local anim = model.animations[anim_name] + player_anim[name] = anim_name + player:set_animation(anim, speed or model.animation_speed, animation_blend) +end + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + player_model[name] = nil + player_anim[name] = nil + player_textures[name] = nil +end) + +-- Localize for better performance. +local player_set_animation = player_api.set_animation +local player_attached = player_api.player_attached + +-- Check each player and apply animations +minetest.register_globalstep(function(dtime) + for _, player in pairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local model_name = player_model[name] + local model = model_name and models[model_name] + if model and not player_attached[name] then + local controls = player:get_player_control() + local walking = false + local animation_speed_mod = model.animation_speed or 30 + + -- Determine if the player is walking + if controls.up or controls.down or controls.left or controls.right then + walking = true + end + + -- Determine if the player is sneaking, and reduce animation speed if so + if controls.sneak then + animation_speed_mod = animation_speed_mod / 2 + end + + -- Apply animations based on what the player is doing + if player:get_hp() == 0 then + player_set_animation(player, "lay") + elseif walking then + if player_sneak[name] ~= controls.sneak then + player_anim[name] = nil + player_sneak[name] = controls.sneak + end + if controls.LMB then + player_set_animation(player, "walk_mine", animation_speed_mod) + else + player_set_animation(player, "walk", animation_speed_mod) + end + elseif controls.LMB then + player_set_animation(player, "mine") + else + player_set_animation(player, "stand", animation_speed_mod) + end + end + end +end) diff --git a/mods/player_api/init.lua b/mods/player_api/init.lua new file mode 100755 index 0000000..7a1f353 --- /dev/null +++ b/mods/player_api/init.lua @@ -0,0 +1,34 @@ +dofile(minetest.get_modpath("player_api") .. "/api.lua") + +-- Default player appearance +player_api.register_model("character.b3d", { + animation_speed = 30, + textures = {"character.png", }, + animations = { + -- Standard animations. + stand = {x = 0, y = 79}, + lay = {x = 162, y = 166}, + walk = {x = 168, y = 187}, + mine = {x = 189, y = 198}, + walk_mine = {x = 200, y = 219}, + sit = {x = 81, y = 160}, + }, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, + stepheight = 0.6, + eye_height = 1.47, +}) + +-- Update appearance when the player joins +minetest.register_on_joinplayer(function(player) + player_api.player_attached[player:get_player_name()] = false + player_api.set_model(player, "character.b3d") + player:set_local_animation( + {x = 0, y = 79}, + {x = 168, y = 187}, + {x = 189, y = 198}, + {x = 200, y = 219}, + 30 + ) + player:hud_set_hotbar_image("gui_hotbar.png") + player:hud_set_hotbar_selected_image("gui_hotbar_selected.png") +end) diff --git a/mods/player_api/license.txt b/mods/player_api/license.txt new file mode 100755 index 0000000..4bee6c5 --- /dev/null +++ b/mods/player_api/license.txt @@ -0,0 +1,51 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2017 celeron55, Perttu Ahola +Copyright (C) 2011-2017 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures, models and sounds) +----------------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2017 stujones11 +Copyright (C) 2012-2017 Jordach + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/player_api/models/character.b3d b/mods/player_api/models/character.b3d new file mode 100755 index 0000000..b3b772a Binary files /dev/null and b/mods/player_api/models/character.b3d differ diff --git a/mods/player_api/models/character.blend b/mods/player_api/models/character.blend new file mode 100755 index 0000000..652579c Binary files /dev/null and b/mods/player_api/models/character.blend differ diff --git a/mods/player_api/models/character.png b/mods/player_api/models/character.png new file mode 100755 index 0000000..0502178 Binary files /dev/null and b/mods/player_api/models/character.png differ diff --git a/mods/PLAYER/player_api/sounds/player_damage.ogg b/mods/player_api/sounds/player_damage.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/player_api/sounds/player_damage.ogg rename to mods/player_api/sounds/player_damage.ogg diff --git a/mods/PLAYER/player_api/textures/gui_hotbar.png b/mods/player_api/textures/gui_hotbar.png old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/player_api/textures/gui_hotbar.png rename to mods/player_api/textures/gui_hotbar.png diff --git a/mods/PLAYER/player_api/textures/gui_hotbar_selected.png b/mods/player_api/textures/gui_hotbar_selected.png old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/player_api/textures/gui_hotbar_selected.png rename to mods/player_api/textures/gui_hotbar_selected.png diff --git a/mods/PLAYER/player_api/textures/player.png b/mods/player_api/textures/player.png old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/player_api/textures/player.png rename to mods/player_api/textures/player.png diff --git a/mods/PLAYER/player_api/textures/player_back.png b/mods/player_api/textures/player_back.png old mode 100644 new mode 100755 similarity index 100% rename from mods/PLAYER/player_api/textures/player_back.png rename to mods/player_api/textures/player_back.png diff --git a/mods/ITEMS/screwdriver/README.txt b/mods/screwdriver/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/screwdriver/README.txt rename to mods/screwdriver/README.txt diff --git a/mods/screwdriver/init.lua b/mods/screwdriver/init.lua new file mode 100755 index 0000000..634edf8 --- /dev/null +++ b/mods/screwdriver/init.lua @@ -0,0 +1,171 @@ +screwdriver = {} + +screwdriver.ROTATE_FACE = 1 +screwdriver.ROTATE_AXIS = 2 +screwdriver.disallow = function(pos, node, user, mode, new_param2) + return false +end +screwdriver.rotate_simple = function(pos, node, user, mode, new_param2) + if mode ~= screwdriver.ROTATE_FACE then + return false + end +end + +-- For attached wallmounted nodes: returns true if rotation is valid +-- simplified version of minetest:builtin/game/falling.lua#L148. +local function check_attached_node(pos, rotation) + local d = minetest.wallmounted_to_dir(rotation) + local p2 = vector.add(pos, d) + local n = minetest.get_node(p2).name + local def2 = minetest.registered_nodes[n] + if def2 and not def2.walkable then + return false + end + return true +end + +screwdriver.rotate = {} + +local facedir_tbl = { + [screwdriver.ROTATE_FACE] = { + [0] = 1, [1] = 2, [2] = 3, [3] = 0, + [4] = 5, [5] = 6, [6] = 7, [7] = 4, + [8] = 9, [9] = 10, [10] = 11, [11] = 8, + [12] = 13, [13] = 14, [14] = 15, [15] = 12, + [16] = 17, [17] = 18, [18] = 19, [19] = 16, + [20] = 21, [21] = 22, [22] = 23, [23] = 20, + }, + [screwdriver.ROTATE_AXIS] = { + [0] = 4, [1] = 4, [2] = 4, [3] = 4, + [4] = 8, [5] = 8, [6] = 8, [7] = 8, + [8] = 12, [9] = 12, [10] = 12, [11] = 12, + [12] = 16, [13] = 16, [14] = 16, [15] = 16, + [16] = 20, [17] = 20, [18] = 20, [19] = 20, + [20] = 0, [21] = 0, [22] = 0, [23] = 0, + }, +} + +screwdriver.rotate.facedir = function(pos, node, mode) + local rotation = node.param2 % 32 -- get first 5 bits + local other = node.param2 - rotation + rotation = facedir_tbl[mode][rotation] or 0 + return rotation + other +end + +screwdriver.rotate.colorfacedir = screwdriver.rotate.facedir + +local wallmounted_tbl = { + [screwdriver.ROTATE_FACE] = {[2] = 5, [3] = 4, [4] = 2, [5] = 3, [1] = 0, [0] = 1}, + [screwdriver.ROTATE_AXIS] = {[2] = 5, [3] = 4, [4] = 2, [5] = 1, [1] = 0, [0] = 3} +} + +screwdriver.rotate.wallmounted = function(pos, node, mode) + local rotation = node.param2 % 8 -- get first 3 bits + local other = node.param2 - rotation + rotation = wallmounted_tbl[mode][rotation] or 0 + if minetest.get_item_group(node.name, "attached_node") ~= 0 then + -- find an acceptable orientation + for i = 1, 5 do + if not check_attached_node(pos, rotation) then + rotation = wallmounted_tbl[mode][rotation] or 0 + else + break + end + end + end + return rotation + other +end + +screwdriver.rotate.colorwallmounted = screwdriver.rotate.wallmounted + +-- Handles rotation +screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) + if pointed_thing.type ~= "node" then + return + end + + local pos = pointed_thing.under + local player_name = user and user:get_player_name() or "" + + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + + local node = minetest.get_node(pos) + local ndef = minetest.registered_nodes[node.name] + if not ndef then + return itemstack + end + -- can we rotate this paramtype2? + local fn = screwdriver.rotate[ndef.paramtype2] + if not fn and not ndef.on_rotate then + return itemstack + end + + local should_rotate = true + local new_param2 + if fn then + new_param2 = fn(pos, node, mode) + else + new_param2 = node.param2 + end + + -- Node provides a handler, so let the handler decide instead if the node can be rotated + if ndef.on_rotate then + -- Copy pos and node because callback can modify it + local result = ndef.on_rotate(vector.new(pos), + {name = node.name, param1 = node.param1, param2 = node.param2}, + user, mode, new_param2) + if result == false then -- Disallow rotation + return itemstack + elseif result == true then + should_rotate = false + end + elseif ndef.on_rotate == false then + return itemstack + elseif ndef.can_dig and not ndef.can_dig(pos, user) then + return itemstack + end + + if should_rotate and new_param2 ~= node.param2 then + node.param2 = new_param2 + minetest.swap_node(pos, node) + minetest.check_for_falling(pos) + end + + if not (creative and creative.is_enabled_for and + creative.is_enabled_for(player_name)) then + itemstack:add_wear(65535 / ((uses or 200) - 1)) + end + + return itemstack +end + +-- Screwdriver +minetest.register_tool("screwdriver:screwdriver", { + description = "Screwdriver (left-click rotates face, right-click rotates axis)", + inventory_image = "screwdriver.png", + on_use = function(itemstack, user, pointed_thing) + screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, 200) + return itemstack + end, + on_place = function(itemstack, user, pointed_thing) + screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, 200) + return itemstack + end, +}) + + +minetest.register_craft({ + output = "screwdriver:screwdriver", + recipe = { + {"default:steel_ingot"}, + {"group:stick"} + } +}) + +minetest.register_alias("screwdriver:screwdriver1", "screwdriver:screwdriver") +minetest.register_alias("screwdriver:screwdriver2", "screwdriver:screwdriver") +minetest.register_alias("screwdriver:screwdriver3", "screwdriver:screwdriver") +minetest.register_alias("screwdriver:screwdriver4", "screwdriver:screwdriver") diff --git a/mods/ITEMS/screwdriver/license.txt b/mods/screwdriver/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/screwdriver/license.txt rename to mods/screwdriver/license.txt diff --git a/mods/ITEMS/screwdriver/textures/screwdriver.png b/mods/screwdriver/textures/screwdriver.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/screwdriver/textures/screwdriver.png rename to mods/screwdriver/textures/screwdriver.png diff --git a/mods/sethome/README.txt b/mods/sethome/README.txt new file mode 100755 index 0000000..6f0a282 --- /dev/null +++ b/mods/sethome/README.txt @@ -0,0 +1,7 @@ +Minetest Game mod: sethome +========================== +See license.txt for license information. + +Authors of source code +---------------------- +sfan5 (MIT) diff --git a/mods/sethome/init.lua b/mods/sethome/init.lua new file mode 100755 index 0000000..4563381 --- /dev/null +++ b/mods/sethome/init.lua @@ -0,0 +1,97 @@ + +sethome = {} + +local homes_file = minetest.get_worldpath() .. "/homes" +local homepos = {} + +local function loadhomes() + local input = io.open(homes_file, "r") + if not input then + return -- no longer an error + end + + -- Iterate over all stored positions in the format "x y z player" for each line + for pos, name in input:read("*a"):gmatch("(%S+ %S+ %S+)%s([%w_-]+)[\r\n]") do + homepos[name] = minetest.string_to_pos(pos) + end + input:close() +end + +loadhomes() + +sethome.set = function(name, pos) + local player = minetest.get_player_by_name(name) + if not player or not pos then + return false + end + player:set_attribute("sethome:home", minetest.pos_to_string(pos)) + + -- remove `name` from the old storage file + local data = {} + local output = io.open(homes_file, "w") + if output then + homepos[name] = nil + for i, v in pairs(homepos) do + table.insert(data, string.format("%.1f %.1f %.1f %s\n", v.x, v.y, v.z, i)) + end + output:write(table.concat(data)) + io.close(output) + return true + end + return true -- if the file doesn't exist - don't return an error. +end + +sethome.get = function(name) + local player = minetest.get_player_by_name(name) + local pos = minetest.string_to_pos(player:get_attribute("sethome:home")) + if pos then + return pos + end + + -- fetch old entry from storage table + pos = homepos[name] + if pos then + return vector.new(pos) + else + return nil + end +end + +sethome.go = function(name) + local pos = sethome.get(name) + local player = minetest.get_player_by_name(name) + if player and pos then + player:set_pos(pos) + return true + end + return false +end + +minetest.register_privilege("home", { + description = "Can use /sethome and /home", + give_to_singleplayer = false +}) + +minetest.register_chatcommand("home", { + description = "Teleport you to your home point", + privs = {home = true}, + func = function(name) + if sethome.go(name) then + return true, "Teleported to home!" + end + return false, "Set a home using /sethome" + end, +}) + +minetest.register_chatcommand("sethome", { + description = "Set your home point", + privs = {home = true}, + func = function(name) + name = name or "" -- fallback to blank name if nil + local player = minetest.get_player_by_name(name) + if player and sethome.set(name, player:get_pos()) then + return true, "Home set!" + end + return false, "Player not found!" + end, +}) diff --git a/mods/sethome/license.txt b/mods/sethome/license.txt new file mode 100755 index 0000000..09f03b0 --- /dev/null +++ b/mods/sethome/license.txt @@ -0,0 +1,24 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 sfan5 + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/mods/sfinv/README.md b/mods/sfinv/README.md new file mode 100755 index 0000000..0b152a0 --- /dev/null +++ b/mods/sfinv/README.md @@ -0,0 +1,23 @@ +Simple Fast Inventory +==================== + +![SFINV Screeny](https://cdn.pbrd.co/images/1yQhd1TI.png) + +A cleaner, simpler, solution to having an advanced inventory in Minetest. + +Available for use outside of MTG here: + +Written by rubenwardy. +License: MIT + +See game_api.txt for this mod's API + +License of source code and media files: +--------------------------------------- +Copyright (C) 2016 rubenwardy + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/mods/sfinv/api.lua b/mods/sfinv/api.lua new file mode 100755 index 0000000..b9ddb39 --- /dev/null +++ b/mods/sfinv/api.lua @@ -0,0 +1,178 @@ +sfinv = { + pages = {}, + pages_unordered = {}, + contexts = {}, + enabled = true +} + +function sfinv.register_page(name, def) + assert(name, "Invalid sfinv page. Requires a name") + assert(def, "Invalid sfinv page. Requires a def[inition] table") + assert(def.get, "Invalid sfinv page. Def requires a get function.") + assert(not sfinv.pages[name], "Attempt to register already registered sfinv page " .. dump(name)) + + sfinv.pages[name] = def + def.name = name + table.insert(sfinv.pages_unordered, def) +end + +function sfinv.override_page(name, def) + assert(name, "Invalid sfinv page override. Requires a name") + assert(def, "Invalid sfinv page override. Requires a def[inition] table") + local page = sfinv.pages[name] + assert(page, "Attempt to override sfinv page " .. dump(name) .. " which does not exist.") + for key, value in pairs(def) do + page[key] = value + end +end + +function sfinv.get_nav_fs(player, context, nav, current_idx) + -- Only show tabs if there is more than one page + if #nav > 1 then + return "tabheader[0,0;sfinv_nav_tabs;" .. table.concat(nav, ",") .. + ";" .. current_idx .. ";true;false]" + else + return "" + end +end + +local theme_inv = [[ + list[current_player;main;0,4.7;8,1;] + list[current_player;main;0,5.85;8,3;8] + ]] + +function sfinv.make_formspec(player, context, content, show_inv, size) + local tmp = { + size or "size[8,8.6]", + sfinv.get_nav_fs(player, context, context.nav_titles, context.nav_idx), + content + } + if show_inv then + tmp[#tmp + 1] = theme_inv + end + return table.concat(tmp, "") +end + +function sfinv.get_homepage_name(player) + return "sfinv:crafting" +end + +function sfinv.get_formspec(player, context) + -- Generate navigation tabs + local nav = {} + local nav_ids = {} + local current_idx = 1 + for i, pdef in pairs(sfinv.pages_unordered) do + if not pdef.is_in_nav or pdef:is_in_nav(player, context) then + nav[#nav + 1] = pdef.title + nav_ids[#nav_ids + 1] = pdef.name + if pdef.name == context.page then + current_idx = #nav_ids + end + end + end + context.nav = nav_ids + context.nav_titles = nav + context.nav_idx = current_idx + + -- Generate formspec + local page = sfinv.pages[context.page] or sfinv.pages["404"] + if page then + return page:get(player, context) + else + local old_page = context.page + local home_page = sfinv.get_homepage_name(player) + + if old_page == home_page then + minetest.log("error", "[sfinv] Couldn't find " .. dump(old_page) .. + ", which is also the old page") + + return "" + end + + context.page = home_page + assert(sfinv.pages[context.page], "[sfinv] Invalid homepage") + minetest.log("warning", "[sfinv] Couldn't find " .. dump(old_page) .. + " so switching to homepage") + + return sfinv.get_formspec(player, context) + end +end + +function sfinv.get_or_create_context(player) + local name = player:get_player_name() + local context = sfinv.contexts[name] + if not context then + context = { + page = sfinv.get_homepage_name(player) + } + sfinv.contexts[name] = context + end + return context +end + +function sfinv.set_context(player, context) + sfinv.contexts[player:get_player_name()] = context +end + +function sfinv.set_player_inventory_formspec(player, context) + local fs = sfinv.get_formspec(player, + context or sfinv.get_or_create_context(player)) + player:set_inventory_formspec(fs) +end + +function sfinv.set_page(player, pagename) + local context = sfinv.get_or_create_context(player) + local oldpage = sfinv.pages[context.page] + if oldpage and oldpage.on_leave then + oldpage:on_leave(player, context) + end + context.page = pagename + local page = sfinv.pages[pagename] + if page.on_enter then + page:on_enter(player, context) + end + sfinv.set_player_inventory_formspec(player, context) +end + +minetest.register_on_joinplayer(function(player) + if sfinv.enabled then + sfinv.set_player_inventory_formspec(player) + end +end) + +minetest.register_on_leaveplayer(function(player) + sfinv.contexts[player:get_player_name()] = nil +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "" or not sfinv.enabled then + return false + end + + -- Get Context + local name = player:get_player_name() + local context = sfinv.contexts[name] + if not context then + sfinv.set_player_inventory_formspec(player) + return false + end + + -- Was a tab selected? + if fields.sfinv_nav_tabs and context.nav then + local tid = tonumber(fields.sfinv_nav_tabs) + if tid and tid > 0 then + local id = context.nav[tid] + local page = sfinv.pages[id] + if id and page then + sfinv.set_page(player, id) + end + end + else + -- Pass event to page + local page = sfinv.pages[context.page] + if page and page.on_player_receive_fields then + return page:on_player_receive_fields(player, context, fields) + end + end +end) diff --git a/mods/HUD/sfinv/init.lua b/mods/sfinv/init.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/HUD/sfinv/init.lua rename to mods/sfinv/init.lua diff --git a/mods/spawn/README.txt b/mods/spawn/README.txt new file mode 100644 index 0000000..b579a93 --- /dev/null +++ b/mods/spawn/README.txt @@ -0,0 +1,7 @@ +Minetest Game mod: spawn +======================== +See license.txt for license information. + +Authors of source code +---------------------- +paramat (MIT) \ No newline at end of file diff --git a/mods/spawn/depends.txt b/mods/spawn/depends.txt new file mode 100644 index 0000000..331d858 --- /dev/null +++ b/mods/spawn/depends.txt @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/mods/spawn/init.lua b/mods/spawn/init.lua new file mode 100644 index 0000000..24c40c2 --- /dev/null +++ b/mods/spawn/init.lua @@ -0,0 +1,130 @@ +-- Disable by mapgen, setting or if 'static_spawnpoint' is set +-------------------------------------------------------------- + +local mg_name = minetest.get_mapgen_setting("mg_name") +if mg_name == "v6" or mg_name == "singlenode" or + minetest.settings:get("static_spawnpoint") or + minetest.settings:get_bool("engine_spawn") then + return +end + + +-- Parameters +------------- + +-- Resolution of search grid in nodes. +local res = 64 +-- Number of points checked in the square search grid (edge * edge). +local checks = 128 * 128 +-- Starting point for biome checks. This also sets the y co-ordinate for all +-- points checked, so the suitable biomes must be active at this y. +local pos = {x = 0, y = 8, z = 0} + + +-- Table of suitable biomes + +local biome_ids = { + minetest.get_biome_id("victoria"), + minetest.get_biome_id("tasmania"), +} + +-- End of parameters +-------------------- + + +-- Direction table + +local dirs = { + {x = 0, y = 0, z = 1}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = -1}, + {x = 1, y = 0, z = 0}, +} + + +-- Initial variables + +local edge_len = 1 +local edge_dist = 0 +local dir_step = 0 +local dir_ind = 1 +local searched = false +local success = false +local spawn_pos = {} + + +--Functions +----------- + +-- Get next position on square search spiral + +local function next_pos() + if edge_dist == edge_len then + edge_dist = 0 + dir_ind = dir_ind + 1 + if dir_ind == 5 then + dir_ind = 1 + end + dir_step = dir_step + 1 + edge_len = math.floor(dir_step / 2) + 1 + end + + local dir = dirs[dir_ind] + local move = vector.multiply(dir, res) + + edge_dist = edge_dist + 1 + + return vector.add(pos, move) +end + + +-- Spawn position search + +local function search() + for iter = 1, checks do + local biome_data = minetest.get_biome_data(pos) + -- Sometimes biome_data is nil + local biome = biome_data and biome_data.biome + for id_ind = 1, #biome_ids do + local biome_id = biome_ids[id_ind] + if biome == biome_id then + local spawn_y = minetest.get_spawn_level(pos.x, pos.z) + if spawn_y then + spawn_pos = {x = pos.x, y = spawn_y, z = pos.z} + return true + end + end + end + + pos = next_pos() + end + + return false +end + + +-- On new player spawn and player respawn + +-- Search for spawn position once per server session. If successful, store +-- position and reposition players, otherwise leave them at engine spawn +-- position. + +local function on_spawn(player) + if not searched then + success = search() + searched = true + end + if success then + player:set_pos(spawn_pos) + end +end + +minetest.register_on_newplayer(function(player) + on_spawn(player) +end) + +minetest.register_on_respawnplayer(function(player) + on_spawn(player) + + return true +end) \ No newline at end of file diff --git a/mods/spawn/license.txt b/mods/spawn/license.txt new file mode 100644 index 0000000..3c4292d --- /dev/null +++ b/mods/spawn/license.txt @@ -0,0 +1,24 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2018 paramat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT \ No newline at end of file diff --git a/mods/stairs/README.txt b/mods/stairs/README.txt new file mode 100755 index 0000000..e411c33 --- /dev/null +++ b/mods/stairs/README.txt @@ -0,0 +1,9 @@ +Minetest Game mod: stairs +========================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Kahrl (LGPL 2.1) and +celeron55, Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) diff --git a/mods/ITEMS/screwdriver/depends.txt b/mods/stairs/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/screwdriver/depends.txt rename to mods/stairs/depends.txt diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua new file mode 100755 index 0000000..f651118 --- /dev/null +++ b/mods/stairs/init.lua @@ -0,0 +1,806 @@ +-- Minetest 0.4 mod: stairs +-- See README.txt for licensing and other information. + + +-- Global namespace for functions + +stairs = {} + + +-- Register aliases for new pine node names + +minetest.register_alias("stairs:stair_pinewood", "stairs:stair_pine_wood") +minetest.register_alias("stairs:slab_pinewood", "stairs:slab_pine_wood") + + +-- Get setting for replace ABM + +local replace = minetest.settings:get_bool("enable_stairs_replace_abm") + +local function rotate_and_place(itemstack, placer, pointed_thing) + local p0 = pointed_thing.under + local p1 = pointed_thing.above + local param2 = 0 + + if placer then + local placer_pos = placer:get_pos() + if placer_pos then + param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) + end + + local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) + local fpos = finepos.y % 1 + + if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) + or (fpos < -0.5 and fpos > -0.999999999) then + param2 = param2 + 20 + if param2 == 21 then + param2 = 23 + elseif param2 == 23 then + param2 = 21 + end + end + end + return minetest.item_place(itemstack, placer, pointed_thing, param2) +end + + +-- Register stair +-- Node will be called stairs:stair_ + +function stairs.register_stair(subname, recipeitem, groups, images, description, sounds) + -- Set backface culling and world-aligned textures + local stair_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + stair_images[i] = { + name = image, + backface_culling = true, + align_style = "world", + } + else + stair_images[i] = table.copy(image) + if stair_images[i].backface_culling == nil then + stair_images[i].backface_culling = true + end + if stair_images[i].align_style == nil then + stair_images[i].align_style = "world" + end + end + end + local new_groups = table.copy(groups) + new_groups.stair = 1 + minetest.register_node(":stairs:stair_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = stair_images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = new_groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.5, 0.5, 0.5}, + }, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + return rotate_and_place(itemstack, placer, pointed_thing) + end, + }) + + -- for replace ABM + if replace then + minetest.register_node(":stairs:stair_" .. subname .. "upside_down", { + replace_name = "stairs:stair_" .. subname, + groups = {slabs_replace = 1}, + }) + end + + if recipeitem then + -- Recipe matches appearence in inventory + minetest.register_craft({ + output = 'stairs:stair_' .. subname .. ' 8', + recipe = { + {"", "", recipeitem}, + {"", recipeitem, recipeitem}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Use stairs to craft full blocks again (1:1) + minetest.register_craft({ + output = recipeitem .. ' 3', + recipe = { + {'stairs:stair_' .. subname, 'stairs:stair_' .. subname}, + {'stairs:stair_' .. subname, 'stairs:stair_' .. subname}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = 'stairs:stair_' .. subname, + burntime = math.floor(baseburntime * 0.75), + }) + end + end +end + + +-- Slab facedir to placement 6d matching table +local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} + + +-- Register slab +-- Node will be called stairs:slab_ + +function stairs.register_slab(subname, recipeitem, groups, images, description, sounds) + -- Set world-aligned textures + local slab_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + slab_images[i] = { + name = image, + align_style = "world", + } + else + slab_images[i] = table.copy(image) + if image.align_style == nil then + slab_images[i].align_style = "world" + end + end + end + local new_groups = table.copy(groups) + new_groups.slab = 1 + minetest.register_node(":stairs:slab_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = slab_images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = new_groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + on_place = function(itemstack, placer, pointed_thing) + local under = minetest.get_node(pointed_thing.under) + local wield_item = itemstack:get_name() + local player_name = placer and placer:get_player_name() or "" + local creative_enabled = (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) + + if under and under.name:find("stairs:slab_") then + -- place slab using under node orientation + local dir = minetest.dir_to_facedir(vector.subtract( + pointed_thing.above, pointed_thing.under), true) + + local p2 = under.param2 + + -- combine two slabs if possible + if slab_trans_dir[math.floor(p2 / 4)] == dir + and wield_item == under.name then + + if not recipeitem then + return itemstack + end + if minetest.is_protected(pointed_thing.under, player_name) and not + minetest.check_player_privs(player_name, "protection_bypass") then + minetest.record_protection_violation(pointed_thing.under, + player_name) + return + end + minetest.set_node(pointed_thing.under, {name = recipeitem, param2 = p2}) + if not creative_enabled then + itemstack:take_item() + end + return itemstack + end + + -- Placing a slab on an upside down slab should make it right-side up. + if p2 >= 20 and dir == 8 then + p2 = p2 - 20 + -- same for the opposite case: slab below normal slab + elseif p2 <= 3 and dir == 4 then + p2 = p2 + 20 + end + + -- else attempt to place node with proper param2 + minetest.item_place_node(ItemStack(wield_item), placer, pointed_thing, p2) + if not creative_enabled then + itemstack:take_item() + end + return itemstack + else + return rotate_and_place(itemstack, placer, pointed_thing) + end + end, + }) + + -- for replace ABM + if replace then + minetest.register_node(":stairs:slab_" .. subname .. "upside_down", { + replace_name = "stairs:slab_".. subname, + groups = {slabs_replace = 1}, + }) + end + + if recipeitem then + minetest.register_craft({ + output = 'stairs:slab_' .. subname .. ' 6', + recipe = { + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Use 2 slabs to craft a full block again (1:1) + minetest.register_craft({ + output = recipeitem, + recipe = { + {'stairs:slab_' .. subname}, + {'stairs:slab_' .. subname}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = 'stairs:slab_' .. subname, + burntime = math.floor(baseburntime * 0.5), + }) + end + end +end + + +-- Optionally replace old "upside_down" nodes with new param2 versions. +-- Disabled by default. + +if replace then + minetest.register_abm({ + label = "Slab replace", + nodenames = {"group:slabs_replace"}, + interval = 16, + chance = 1, + action = function(pos, node) + node.name = minetest.registered_nodes[node.name].replace_name + node.param2 = node.param2 + 20 + if node.param2 == 21 then + node.param2 = 23 + elseif node.param2 == 23 then + node.param2 = 21 + end + minetest.set_node(pos, node) + end, + }) +end + + +-- Register inner stair +-- Node will be called stairs:stair_inner_ + +function stairs.register_stair_inner(subname, recipeitem, groups, images, description, sounds) + -- Set backface culling and world-aligned textures + local stair_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + stair_images[i] = { + name = image, + backface_culling = true, + align_style = "world", + } + else + stair_images[i] = table.copy(image) + if stair_images[i].backface_culling == nil then + stair_images[i].backface_culling = true + end + if stair_images[i].align_style == nil then + stair_images[i].align_style = "world" + end + end + end + local new_groups = table.copy(groups) + new_groups.stair = 1 + minetest.register_node(":stairs:stair_inner_" .. subname, { + description = "Inner " .. description, + drawtype = "nodebox", + tiles = stair_images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = new_groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.5, 0.5, 0.5}, + {-0.5, 0.0, -0.5, 0.0, 0.5, 0.0}, + }, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + return rotate_and_place(itemstack, placer, pointed_thing) + end, + }) + + if recipeitem then + minetest.register_craft({ + output = 'stairs:stair_inner_' .. subname .. ' 7', + recipe = { + { "", recipeitem, ""}, + { recipeitem, "", recipeitem}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = 'stairs:stair_inner_' .. subname, + burntime = math.floor(baseburntime * 0.875), + }) + end + end +end + + +-- Register outer stair +-- Node will be called stairs:stair_outer_ + +function stairs.register_stair_outer(subname, recipeitem, groups, images, description, sounds) + -- Set backface culling and world-aligned textures + local stair_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + stair_images[i] = { + name = image, + backface_culling = true, + align_style = "world", + } + else + stair_images[i] = table.copy(image) + if stair_images[i].backface_culling == nil then + stair_images[i].backface_culling = true + end + if stair_images[i].align_style == nil then + stair_images[i].align_style = "world" + end + end + end + local new_groups = table.copy(groups) + new_groups.stair = 1 + minetest.register_node(":stairs:stair_outer_" .. subname, { + description = "Outer " .. description, + drawtype = "nodebox", + tiles = stair_images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = new_groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.0, 0.5, 0.5}, + }, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + return rotate_and_place(itemstack, placer, pointed_thing) + end, + }) + + if recipeitem then + minetest.register_craft({ + output = 'stairs:stair_outer_' .. subname .. ' 6', + recipe = { + { "", "", ""}, + { "", recipeitem, ""}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = 'stairs:stair_outer_' .. subname, + burntime = math.floor(baseburntime * 0.625), + }) + end + end +end + + +-- Stair/slab registration function. +-- Nodes will be called stairs:{stair,slab}_ + +function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds) + stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds) + stairs.register_stair_inner(subname, recipeitem, groups, images, desc_stair, sounds) + stairs.register_stair_outer(subname, recipeitem, groups, images, desc_stair, sounds) + stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds) +end + + +-- Register default stairs and slabs + +stairs.register_stair_and_slab( + "wood", + "default:wood", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"default_wood.png"}, + "Wooden Stair", + "Wooden Slab", + default.node_sound_wood_defaults() +) + +stairs.register_stair_and_slab( + "junglewood", + "default:junglewood", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"default_junglewood.png"}, + "Jungle Wood Stair", + "Jungle Wood Slab", + default.node_sound_wood_defaults() +) + +stairs.register_stair_and_slab( + "pine_wood", + "default:pine_wood", + {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + {"default_pine_wood.png"}, + "Pine Wood Stair", + "Pine Wood Slab", + default.node_sound_wood_defaults() +) + +stairs.register_stair_and_slab( + "acacia_wood", + "default:acacia_wood", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"default_acacia_wood.png"}, + "Acacia Wood Stair", + "Acacia Wood Slab", + default.node_sound_wood_defaults() +) + +stairs.register_stair_and_slab( + "aspen_wood", + "default:aspen_wood", + {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + {"default_aspen_wood.png"}, + "Aspen Wood Stair", + "Aspen Wood Slab", + default.node_sound_wood_defaults() +) + +stairs.register_stair_and_slab( + "stone", + "default:stone", + {cracky = 3}, + {"default_stone.png"}, + "Stone Stair", + "Stone Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "cobble", + "default:cobble", + {cracky = 3}, + {"default_cobble.png"}, + "Cobblestone Stair", + "Cobblestone Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "mossycobble", + "default:mossycobble", + {cracky = 3}, + {"default_mossycobble.png"}, + "Mossy Cobblestone Stair", + "Mossy Cobblestone Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "stonebrick", + "default:stonebrick", + {cracky = 2}, + {"default_stone_brick.png"}, + "Stone Brick Stair", + "Stone Brick Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "stone_block", + "default:stone_block", + {cracky = 2}, + {"default_stone_block.png"}, + "Stone Block Stair", + "Stone Block Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "desert_stone", + "default:desert_stone", + {cracky = 3}, + {"default_desert_stone.png"}, + "Desert Stone Stair", + "Desert Stone Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "desert_cobble", + "default:desert_cobble", + {cracky = 3}, + {"default_desert_cobble.png"}, + "Desert Cobblestone Stair", + "Desert Cobblestone Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "desert_stonebrick", + "default:desert_stonebrick", + {cracky = 2}, + {"default_desert_stone_brick.png"}, + "Desert Stone Brick Stair", + "Desert Stone Brick Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "desert_stone_block", + "default:desert_stone_block", + {cracky = 2}, + {"default_desert_stone_block.png"}, + "Desert Stone Block Stair", + "Desert Stone Block Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "sandstone", + "default:sandstone", + {crumbly = 1, cracky = 3}, + {"default_sandstone.png"}, + "Sandstone Stair", + "Sandstone Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "sandstonebrick", + "default:sandstonebrick", + {cracky = 2}, + {"default_sandstone_brick.png"}, + "Sandstone Brick Stair", + "Sandstone Brick Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "sandstone_block", + "default:sandstone_block", + {cracky = 2}, + {"default_sandstone_block.png"}, + "Sandstone Block Stair", + "Sandstone Block Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "desert_sandstone", + "default:desert_sandstone", + {crumbly = 1, cracky = 3}, + {"default_desert_sandstone.png"}, + "Desert Sandstone Stair", + "Desert Sandstone Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "desert_sandstone_brick", + "default:desert_sandstone_brick", + {cracky = 2}, + {"default_desert_sandstone_brick.png"}, + "Desert Sandstone Brick Stair", + "Desert Sandstone Brick Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "desert_sandstone_block", + "default:desert_sandstone_block", + {cracky = 2}, + {"default_desert_sandstone_block.png"}, + "Desert Sandstone Block Stair", + "Desert Sandstone Block Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "silver_sandstone", + "default:silver_sandstone", + {crumbly = 1, cracky = 3}, + {"default_silver_sandstone.png"}, + "Silver Sandstone Stair", + "Silver Sandstone Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "silver_sandstone_brick", + "default:silver_sandstone_brick", + {cracky = 2}, + {"default_silver_sandstone_brick.png"}, + "Silver Sandstone Brick Stair", + "Silver Sandstone Brick Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "silver_sandstone_block", + "default:silver_sandstone_block", + {cracky = 2}, + {"default_silver_sandstone_block.png"}, + "Silver Sandstone Block Stair", + "Silver Sandstone Block Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "obsidian", + "default:obsidian", + {cracky = 1, level = 2}, + {"default_obsidian.png"}, + "Obsidian Stair", + "Obsidian Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "obsidianbrick", + "default:obsidianbrick", + {cracky = 1, level = 2}, + {"default_obsidian_brick.png"}, + "Obsidian Brick Stair", + "Obsidian Brick Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "obsidian_block", + "default:obsidian_block", + {cracky = 1, level = 2}, + {"default_obsidian_block.png"}, + "Obsidian Block Stair", + "Obsidian Block Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "brick", + "default:brick", + {cracky = 3}, + {"default_brick.png"}, + "Brick Stair", + "Brick Slab", + default.node_sound_stone_defaults() +) + +stairs.register_stair_and_slab( + "steelblock", + "default:steelblock", + {cracky = 1, level = 2}, + {"default_steel_block.png"}, + "Steel Block Stair", + "Steel Block Slab", + default.node_sound_metal_defaults() +) + +stairs.register_stair_and_slab( + "tinblock", + "default:tinblock", + {cracky = 1, level = 2}, + {"default_tin_block.png"}, + "Tin Block Stair", + "Tin Block Slab", + default.node_sound_metal_defaults() +) + +stairs.register_stair_and_slab( + "copperblock", + "default:copperblock", + {cracky = 1, level = 2}, + {"default_copper_block.png"}, + "Copper Block Stair", + "Copper Block Slab", + default.node_sound_metal_defaults() +) + +stairs.register_stair_and_slab( + "bronzeblock", + "default:bronzeblock", + {cracky = 1, level = 2}, + {"default_bronze_block.png"}, + "Bronze Block Stair", + "Bronze Block Slab", + default.node_sound_metal_defaults() +) + +stairs.register_stair_and_slab( + "goldblock", + "default:goldblock", + {cracky = 1}, + {"default_gold_block.png"}, + "Gold Block Stair", + "Gold Block Slab", + default.node_sound_metal_defaults() +) + +stairs.register_stair_and_slab( + "ice", + "default:ice", + {cracky = 3, puts_out_fire = 1, cools_lava = 1, slippery = 3}, + {"default_ice.png"}, + "Ice Stair", + "Ice Slab", + default.node_sound_glass_defaults() +) + +stairs.register_stair_and_slab( + "snowblock", + "default:snowblock", + {crumbly = 3, puts_out_fire = 1, cools_lava = 1, snowy = 1}, + {"default_snow.png"}, + "Snow Block Stair", + "Snow Block Slab", + default.node_sound_snow_defaults() +) diff --git a/mods/stairs/license.txt b/mods/stairs/license.txt new file mode 100755 index 0000000..57bd98c --- /dev/null +++ b/mods/stairs/license.txt @@ -0,0 +1,16 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2017 Kahrl +Copyright (C) 2011-2017 celeron55, Perttu Ahola +Copyright (C) 2012-2017 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html diff --git a/mods/technic/.gitattributes b/mods/technic/.gitattributes new file mode 100755 index 0000000..412eeda --- /dev/null +++ b/mods/technic/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/mods/technic/.gitignore b/mods/technic/.gitignore new file mode 100755 index 0000000..227a256 --- /dev/null +++ b/mods/technic/.gitignore @@ -0,0 +1,166 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +*_i.c +*_p.c +*.ilk +*.meta +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.vspscc +.builds +*.dotCover + +## TODO: If you have NuGet Package Restore enabled, uncomment this +#packages/ + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp + +# ReSharper is a .NET coding add-in +_ReSharper* + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Others +[Bb]in +[Oo]bj +sql +TestResults +*.Cache +ClientBin +stylecop.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + + + +############ +## Windows +############ + +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# Mac crap +.DS_Store + +#gedit backup files +*~ + diff --git a/mods/ITEMS/technic/.mailmap b/mods/technic/.mailmap similarity index 100% rename from mods/ITEMS/technic/.mailmap rename to mods/technic/.mailmap diff --git a/mods/ITEMS/technic/README.md b/mods/technic/README.md similarity index 100% rename from mods/ITEMS/technic/README.md rename to mods/technic/README.md diff --git a/mods/technic/concrete/depends.txt b/mods/technic/concrete/depends.txt new file mode 100755 index 0000000..c48fe0d --- /dev/null +++ b/mods/technic/concrete/depends.txt @@ -0,0 +1,3 @@ +default +intllib? + diff --git a/mods/technic/concrete/init.lua b/mods/technic/concrete/init.lua new file mode 100755 index 0000000..ca04733 --- /dev/null +++ b/mods/technic/concrete/init.lua @@ -0,0 +1,156 @@ +--Minetest 0.4.7 mod: concrete +--(c) 2013 by RealBadAngel + +local technic = rawget(_G, "technic") or {} +technic.concrete_posts = {} + +-- Boilerplate to support localized strings if intllib mod is installed. +local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end + +for i = 0, 31 do + minetest.register_alias("technic:concrete_post"..i, + "technic:concrete_post") +end +for i = 32, 63 do + minetest.register_alias("technic:concrete_post"..i, + "technic:concrete_post_with_platform") +end + +local steel_ingot +if minetest.get_modpath("technic_worldgen") then + steel_ingot = "technic:carbon_steel_ingot" +else + steel_ingot = "default:steel_ingot" +end + +minetest.register_craft({ + output = 'technic:rebar 6', + recipe = { + {'','', steel_ingot}, + {'',steel_ingot,''}, + {steel_ingot, '', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:concrete 5', + recipe = { + {'default:stone','technic:rebar','default:stone'}, + {'technic:rebar','default:stone','technic:rebar'}, + {'default:stone','technic:rebar','default:stone'}, + } +}) + +minetest.register_craft({ + output = 'technic:concrete_post_platform 6', + recipe = { + {'technic:concrete','technic:concrete_post','technic:concrete'}, + } +}) + +minetest.register_craft({ + output = 'technic:concrete_post 12', + recipe = { + {'default:stone','technic:rebar','default:stone'}, + {'default:stone','technic:rebar','default:stone'}, + {'default:stone','technic:rebar','default:stone'}, + } +}) + +minetest.register_craft({ + output = 'technic:blast_resistant_concrete 5', + recipe = { + {'technic:concrete','technic:composite_plate','technic:concrete'}, + {'technic:composite_plate','technic:concrete','technic:composite_plate'}, + {'technic:concrete','technic:composite_plate','technic:concrete'}, + } +}) + +minetest.register_craftitem(":technic:rebar", { + description = S("Rebar"), + inventory_image = "technic_rebar.png", +}) + +minetest.register_node(":technic:concrete", { + description = S("Concrete Block"), + tiles = {"technic_concrete_block.png",}, + groups = {cracky=1, level=2, concrete=1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node(":technic:blast_resistant_concrete", { + description = S("Blast-resistant Concrete Block"), + tiles = {"technic_blast_resistant_concrete_block.png",}, + groups = {cracky=1, level=3, concrete=1}, + sounds = default.node_sound_stone_defaults(), + on_blast = function(pos, intensity) + if intensity > 9 then + minetest.remove_node(pos) + return {"technic:blast_resistant_concrete"} + end + end, +}) + + +local box_platform = {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5} +local box_post = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15} +local box_front = {-0.1, -0.3, -0.5, 0.1, 0.3, 0} +local box_back = {-0.1, -0.3, 0, 0.1, 0.3, 0.5} +local box_left = {-0.5, -0.3, -0.1, 0, 0.3, 0.1} +local box_right = {0, -0.3, -0.1, 0.5, 0.3, 0.1} + +minetest.register_node(":technic:concrete_post_platform", { + description = S("Concrete Post Platform"), + tiles = {"technic_concrete_block.png",}, + groups={cracky=1, level=2}, + sounds = default.node_sound_stone_defaults(), + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {box_platform} + }, + on_place = function (itemstack, placer, pointed_thing) + local node = minetest.get_node(pointed_thing.under) + if node.name ~= "technic:concrete_post" then + return minetest.item_place_node(itemstack, placer, pointed_thing) + end + minetest.set_node(pointed_thing.under, {name="technic:concrete_post_with_platform"}) + itemstack:take_item() + placer:set_wielded_item(itemstack) + return itemstack + end, +}) + +for platform = 0, 1 do + local after_dig_node = nil + if platform == 1 then + after_dig_node = function(pos, old_node) + old_node.name = "technic:concrete_post" + minetest.set_node(pos, old_node) + end + end + + minetest.register_node(":technic:concrete_post"..(platform == 1 and "_with_platform" or ""), { + description = S("Concrete Post"), + tiles = {"technic_concrete_block.png"}, + groups = {cracky=1, level=2, concrete_post=1, not_in_creative_inventory=platform}, + sounds = default.node_sound_stone_defaults(), + drop = (platform == 1 and "technic:concrete_post_platform" or + "technic:concrete_post"), + paramtype = "light", + sunlight_propagates = true, + drawtype = "nodebox", + connects_to = {"group:concrete", "group:concrete_post"}, + node_box = { + type = "connected", + fixed = {box_post, (platform == 1 and box_platform or nil)}, + connect_front = box_front, + connect_back = box_back, + connect_left = box_left, + connect_right = box_right, + }, + after_dig_node = after_dig_node, + }) +end + diff --git a/mods/ITEMS/technic/concrete/locale/de.txt b/mods/technic/concrete/locale/de.txt similarity index 100% rename from mods/ITEMS/technic/concrete/locale/de.txt rename to mods/technic/concrete/locale/de.txt diff --git a/mods/ITEMS/technic/concrete/locale/es.txt b/mods/technic/concrete/locale/es.txt similarity index 100% rename from mods/ITEMS/technic/concrete/locale/es.txt rename to mods/technic/concrete/locale/es.txt diff --git a/mods/ITEMS/technic/concrete/locale/template.txt b/mods/technic/concrete/locale/template.txt similarity index 100% rename from mods/ITEMS/technic/concrete/locale/template.txt rename to mods/technic/concrete/locale/template.txt diff --git a/mods/ITEMS/technic/concrete/locale/tr.txt b/mods/technic/concrete/locale/tr.txt similarity index 100% rename from mods/ITEMS/technic/concrete/locale/tr.txt rename to mods/technic/concrete/locale/tr.txt diff --git a/mods/ITEMS/technic/concrete/textures/technic_blast_resistant_concrete_block.png b/mods/technic/concrete/textures/technic_blast_resistant_concrete_block.png similarity index 100% rename from mods/ITEMS/technic/concrete/textures/technic_blast_resistant_concrete_block.png rename to mods/technic/concrete/textures/technic_blast_resistant_concrete_block.png diff --git a/mods/ITEMS/technic/concrete/textures/technic_concrete_block.png b/mods/technic/concrete/textures/technic_concrete_block.png similarity index 100% rename from mods/ITEMS/technic/concrete/textures/technic_concrete_block.png rename to mods/technic/concrete/textures/technic_concrete_block.png diff --git a/mods/ITEMS/technic/concrete/textures/technic_rebar.png b/mods/technic/concrete/textures/technic_rebar.png similarity index 100% rename from mods/ITEMS/technic/concrete/textures/technic_rebar.png rename to mods/technic/concrete/textures/technic_rebar.png diff --git a/mods/technic/extranodes/depends.txt b/mods/technic/extranodes/depends.txt new file mode 100755 index 0000000..15b9ef5 --- /dev/null +++ b/mods/technic/extranodes/depends.txt @@ -0,0 +1,6 @@ +default +technic_worldgen +concrete +unifieddyes? +intllib? +moreblocks? diff --git a/mods/technic/extranodes/init.lua b/mods/technic/extranodes/init.lua new file mode 100755 index 0000000..eb54067 --- /dev/null +++ b/mods/technic/extranodes/init.lua @@ -0,0 +1,187 @@ +-- Minetest 0.4.6 mod: extranodes +-- namespace: technic +-- Boilerplate to support localized strings if intllib mod is installed. +local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end + +if minetest.get_modpath("moreblocks") then + + -- register stairsplus/circular_saw nodes + -- we skip blast resistant concrete and uranium intentionally + -- chrome seems to be too hard of a metal to be actually sawable + + stairsplus:register_all("technic", "marble", "technic:marble", { + description=S("Marble"), + groups={cracky=3, not_in_creative_inventory=1}, + tiles={"technic_marble.png"}, + }) + + stairsplus:register_all("technic", "marble_bricks", "technic:marble_bricks", { + description=S("Marble Bricks"), + groups={cracky=3, not_in_creative_inventory=1}, + tiles={"technic_marble_bricks.png"}, + }) + + stairsplus:register_all("technic", "granite", "technic:granite", { + description=S("Granite"), + groups={cracky=1, not_in_creative_inventory=1}, + tiles={"technic_granite.png"}, + }) + + stairsplus:register_all("technic", "concrete", "technic:concrete", { + description=S("Concrete"), + groups={cracky=3, not_in_creative_inventory=1}, + tiles={"technic_concrete_block.png"}, + }) + + stairsplus:register_all("technic", "zinc_block", "technic:zinc_block", { + description=S("Zinc Block"), + groups={cracky=1, not_in_creative_inventory=1}, + tiles={"technic_zinc_block.png"}, + }) + + stairsplus:register_all("technic", "cast_iron_block", "technic:cast_iron_block", { + description=S("Cast Iron Block"), + groups={cracky=1, not_in_creative_inventory=1}, + tiles={"technic_cast_iron_block.png"}, + }) + + stairsplus:register_all("technic", "carbon_steel_block", "technic:carbon_steel_block", { + description=S("Carbon Steel Block"), + groups={cracky=1, not_in_creative_inventory=1}, + tiles={"technic_carbon_steel_block.png"}, + }) + + stairsplus:register_all("technic", "stainless_steel_block", "technic:stainless_steel_block", { + description=S("Stainless Steel Block"), + groups={cracky=1, not_in_creative_inventory=1}, + tiles={"technic_stainless_steel_block.png"}, + }) + + stairsplus:register_all("technic", "brass_block", "technic:brass_block", { + description=S("Brass Block"), + groups={cracky=1, not_in_creative_inventory=1}, + tiles={"technic_brass_block.png"}, + }) + + function register_technic_stairs_alias(modname, origname, newmod, newname) + minetest.register_alias(modname .. ":slab_" .. origname, newmod..":slab_" .. newname) + minetest.register_alias(modname .. ":slab_" .. origname .. "_inverted", newmod..":slab_" .. newname .. "_inverted") + minetest.register_alias(modname .. ":slab_" .. origname .. "_wall", newmod..":slab_" .. newname .. "_wall") + minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter", newmod..":slab_" .. newname .. "_quarter") + minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_inverted", newmod..":slab_" .. newname .. "_quarter_inverted") + minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_wall", newmod..":slab_" .. newname .. "_quarter_wall") + minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter", newmod..":slab_" .. newname .. "_three_quarter") + minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_inverted", newmod..":slab_" .. newname .. "_three_quarter_inverted") + minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_wall", newmod..":slab_" .. newname .. "_three_quarter_wall") + minetest.register_alias(modname .. ":stair_" .. origname, newmod..":stair_" .. newname) + minetest.register_alias(modname .. ":stair_" .. origname .. "_inverted", newmod..":stair_" .. newname .. "_inverted") + minetest.register_alias(modname .. ":stair_" .. origname .. "_wall", newmod..":stair_" .. newname .. "_wall") + minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half") + minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted") + minetest.register_alias(modname .. ":stair_" .. origname .. "_half", newmod..":stair_" .. newname .. "_half") + minetest.register_alias(modname .. ":stair_" .. origname .. "_half_inverted", newmod..":stair_" .. newname .. "_half_inverted") + minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half", newmod..":stair_" .. newname .. "_right_half") + minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half_inverted", newmod..":stair_" .. newname .. "_right_half_inverted") + minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", newmod..":stair_" .. newname .. "_wall_half") + minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", newmod..":stair_" .. newname .. "_wall_half_inverted") + minetest.register_alias(modname .. ":stair_" .. origname .. "_inner", newmod..":stair_" .. newname .. "_inner") + minetest.register_alias(modname .. ":stair_" .. origname .. "_inner_inverted", newmod..":stair_" .. newname .. "_inner_inverted") + minetest.register_alias(modname .. ":stair_" .. origname .. "_outer", newmod..":stair_" .. newname .. "_outer") + minetest.register_alias(modname .. ":stair_" .. origname .. "_outer_inverted", newmod..":stair_" .. newname .. "_outer_inverted") + minetest.register_alias(modname .. ":panel_" .. origname .. "_bottom", newmod..":panel_" .. newname .. "_bottom") + minetest.register_alias(modname .. ":panel_" .. origname .. "_top", newmod..":panel_" .. newname .. "_top") + minetest.register_alias(modname .. ":panel_" .. origname .. "_vertical", newmod..":panel_" .. newname .. "_vertical") + minetest.register_alias(modname .. ":micro_" .. origname .. "_bottom", newmod..":micro_" .. newname .. "_bottom") + minetest.register_alias(modname .. ":micro_" .. origname .. "_top", newmod..":micro_" .. newname .. "_top") + end + + register_technic_stairs_alias("stairsplus", "concrete", "technic", "concrete") + register_technic_stairs_alias("stairsplus", "marble", "technic", "marble") + register_technic_stairs_alias("stairsplus", "granite", "technic", "granite") + register_technic_stairs_alias("stairsplus", "marble_bricks", "technic", "marble_bricks") + +end + +local iclip_def = { + description = "Insulator/cable clip", + drawtype = "mesh", + mesh = "technic_insulator_clip.obj", + tiles = {"technic_insulator_clip.png"}, + is_ground_content = false, + groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1 }, + sounds = default.node_sound_stone_defaults(), +} + +local iclipfence_def = { + description = "Insulator/cable clip", + tiles = {"technic_insulator_clip.png"}, + is_ground_content = false, + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = { + { -0.25, 0.75, -0.25, 0.25, 1.25, 0.25 }, -- the clip on top + { -0.125, 0.6875, -0.125, 0.125, 0.75, 0.125 }, + { -0.1875, 0.625, -0.1875, 0.1875, 0.6875, 0.1875 }, + { -0.125, 0.5625, -0.125, 0.125, 0.625, 0.125 }, + { -0.1875, 0.5, -0.1875, 0.1875, 0.5625, 0.1875 }, + { -0.125, 0.4375, -0.125, 0.125, 0.5, 0.125 }, + { -0.1875, 0.375, -0.1875, 0.1875, 0.4375, 0.1875 }, + { -0.125, -0.5, -0.125, 0.125, 0.375, 0.125 }, -- the post, slightly short + }, + -- connect_top = + -- connect_bottom = + connect_front = {{-1/16,3/16,-1/2,1/16,5/16,-1/8}, + {-1/16,-5/16,-1/2,1/16,-3/16,-1/8}}, + connect_left = {{-1/2,3/16,-1/16,-1/8,5/16,1/16}, + {-1/2,-5/16,-1/16,-1/8,-3/16,1/16}}, + connect_back = {{-1/16,3/16,1/8,1/16,5/16,1/2}, + {-1/16,-5/16,1/8,1/16,-3/16,1/2}}, + connect_right = {{1/8,3/16,-1/16,1/2,5/16,1/16}, + {1/8,-5/16,-1/16,1/2,-3/16,1/16}}, + }, + connects_to = {"group:fence", "group:wood", "group:tree"}, + groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1 }, + sounds = default.node_sound_stone_defaults(), +} + +if minetest.get_modpath("unifieddyes") then + iclip_def.paramtype2 = "colorwallmounted" + iclip_def.palette = "unifieddyes_palette_colorwallmounted.png" + iclip_def.after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing) + unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing) + end + iclip_def.after_dig_node = unifieddyes.after_dig_node + iclip_def.groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1} + + iclipfence_def.paramtype2 = "color" + iclipfence_def.palette = "unifieddyes_palette_extended.png" + iclipfence_def.on_construct = unifieddyes.on_construct + iclipfence_def.after_place_node = unifieddyes.recolor_on_place + iclipfence_def.after_dig_node = unifieddyes.after_dig_node + iclipfence_def.groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1} + iclipfence_def.place_param2 = 171 -- medium amber, low saturation, closest color to default:wood +end + +minetest.register_node(":technic:insulator_clip", iclip_def) +minetest.register_node(":technic:insulator_clip_fencepost", iclipfence_def) + +minetest.register_craft({ + output = "technic:insulator_clip", + recipe = { + { "", "dye:white", ""}, + { "", "technic:raw_latex", ""}, + { "technic:raw_latex", "default:stone", "technic:raw_latex"}, + } +}) + +minetest.register_craft({ + output = "technic:insulator_clip_fencepost 2", + recipe = { + { "", "dye:white", ""}, + { "", "technic:raw_latex", ""}, + { "technic:raw_latex", "default:fence_wood", "technic:raw_latex"}, + } +}) diff --git a/mods/ITEMS/technic/extranodes/locale/de.txt b/mods/technic/extranodes/locale/de.txt similarity index 100% rename from mods/ITEMS/technic/extranodes/locale/de.txt rename to mods/technic/extranodes/locale/de.txt diff --git a/mods/ITEMS/technic/extranodes/locale/es.txt b/mods/technic/extranodes/locale/es.txt similarity index 100% rename from mods/ITEMS/technic/extranodes/locale/es.txt rename to mods/technic/extranodes/locale/es.txt diff --git a/mods/ITEMS/technic/extranodes/locale/template.txt b/mods/technic/extranodes/locale/template.txt similarity index 100% rename from mods/ITEMS/technic/extranodes/locale/template.txt rename to mods/technic/extranodes/locale/template.txt diff --git a/mods/ITEMS/technic/extranodes/locale/tr.txt b/mods/technic/extranodes/locale/tr.txt similarity index 100% rename from mods/ITEMS/technic/extranodes/locale/tr.txt rename to mods/technic/extranodes/locale/tr.txt diff --git a/mods/ITEMS/technic/extranodes/models/technic_insulator_clip.obj b/mods/technic/extranodes/models/technic_insulator_clip.obj similarity index 100% rename from mods/ITEMS/technic/extranodes/models/technic_insulator_clip.obj rename to mods/technic/extranodes/models/technic_insulator_clip.obj diff --git a/mods/ITEMS/technic/extranodes/textures/technic_insulator_clip.png b/mods/technic/extranodes/textures/technic_insulator_clip.png similarity index 100% rename from mods/ITEMS/technic/extranodes/textures/technic_insulator_clip.png rename to mods/technic/extranodes/textures/technic_insulator_clip.png diff --git a/mods/ITEMS/technic/manual.md b/mods/technic/manual.md similarity index 100% rename from mods/ITEMS/technic/manual.md rename to mods/technic/manual.md diff --git a/mods/ITEMS/technic/modpack.txt b/mods/technic/modpack.txt similarity index 100% rename from mods/ITEMS/technic/modpack.txt rename to mods/technic/modpack.txt diff --git a/mods/ITEMS/technic/technic/README.md b/mods/technic/technic/README.md similarity index 100% rename from mods/ITEMS/technic/technic/README.md rename to mods/technic/technic/README.md diff --git a/mods/ITEMS/technic/technic/config.lua b/mods/technic/technic/config.lua similarity index 100% rename from mods/ITEMS/technic/technic/config.lua rename to mods/technic/technic/config.lua diff --git a/mods/ITEMS/technic/technic/crafts.lua b/mods/technic/technic/crafts.lua similarity index 100% rename from mods/ITEMS/technic/technic/crafts.lua rename to mods/technic/technic/crafts.lua diff --git a/mods/technic/technic/depends.txt b/mods/technic/technic/depends.txt new file mode 100755 index 0000000..5bf9f9f --- /dev/null +++ b/mods/technic/technic/depends.txt @@ -0,0 +1,12 @@ +default +pipeworks +technic_worldgen +bucket? +screwdriver? +mesecons? +mesecons_mvps? +digilines? +digiline_remote? +intllib? +unified_inventory? +vector_extras? diff --git a/mods/ITEMS/technic/technic/doc/api.md b/mods/technic/technic/doc/api.md similarity index 100% rename from mods/ITEMS/technic/technic/doc/api.md rename to mods/technic/technic/doc/api.md diff --git a/mods/ITEMS/technic/technic/helpers.lua b/mods/technic/technic/helpers.lua similarity index 100% rename from mods/ITEMS/technic/technic/helpers.lua rename to mods/technic/technic/helpers.lua diff --git a/mods/technic/technic/init.lua b/mods/technic/technic/init.lua new file mode 100755 index 0000000..0d97319 --- /dev/null +++ b/mods/technic/technic/init.lua @@ -0,0 +1,53 @@ +-- Minetest 0.4.7 mod: technic +-- namespace: technic +-- (c) 2012-2013 by RealBadAngel + +local load_start = os.clock() + +technic = rawget(_G, "technic") or {} +technic.creative_mode = minetest.settings:get_bool("creative_mode") + + +local modpath = minetest.get_modpath("technic") +technic.modpath = modpath + + +-- Boilerplate to support intllib +if rawget(_G, "intllib") then + technic.getter = intllib.Getter() +else + technic.getter = function(s,a,...)if a==nil then return s end a={a,...}return s:gsub("(@?)@(%(?)(%d+)(%)?)",function(e,o,n,c)if e==""then return a[tonumber(n)]..(o==""and c or"")else return"@"..o..n..c end end) end +end +local S = technic.getter + +-- Read configuration file +dofile(modpath.."/config.lua") + +-- Helper functions +dofile(modpath.."/helpers.lua") + +-- Items +dofile(modpath.."/items.lua") + +-- Craft recipes for items +dofile(modpath.."/crafts.lua") + +-- Register functions +dofile(modpath.."/register.lua") + +-- Radiation +dofile(modpath.."/radiation.lua") + +-- Machines +dofile(modpath.."/machines/init.lua") + +-- Tools +dofile(modpath.."/tools/init.lua") + +-- Aliases for legacy node/item names +dofile(modpath.."/legacy.lua") + +if minetest.settings:get_bool("log_mods") then + print(S("[Technic] Loaded in %f seconds"):format(os.clock() - load_start)) +end + diff --git a/mods/technic/technic/items.lua b/mods/technic/technic/items.lua new file mode 100755 index 0000000..a0edb96 --- /dev/null +++ b/mods/technic/technic/items.lua @@ -0,0 +1,224 @@ + +local S = technic.getter + +minetest.register_craftitem("technic:silicon_wafer", { + description = S("Silicon Wafer"), + inventory_image = "technic_silicon_wafer.png", +}) + +minetest.register_craftitem( "technic:doped_silicon_wafer", { + description = S("Doped Silicon Wafer"), + inventory_image = "technic_doped_silicon_wafer.png", +}) + +minetest.register_craftitem("technic:uranium_fuel", { + description = S("Uranium Fuel"), + inventory_image = "technic_uranium_fuel.png", +}) + +minetest.register_craftitem( "technic:diamond_drill_head", { + description = S("Diamond Drill Head"), + inventory_image = "technic_diamond_drill_head.png", +}) + +minetest.register_tool("technic:blue_energy_crystal", { + description = S("Blue Energy Crystal"), + inventory_image = minetest.inventorycube( + "technic_diamond_block_blue.png", + "technic_diamond_block_blue.png", + "technic_diamond_block_blue.png"), + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + tool_capabilities = { + max_drop_level = 0, + groupcaps = { + fleshy = {times={}, uses=10000, maxlevel=0} + } + } +}) + +minetest.register_tool("technic:green_energy_crystal", { + description = S("Green Energy Crystal"), + inventory_image = minetest.inventorycube( + "technic_diamond_block_green.png", + "technic_diamond_block_green.png", + "technic_diamond_block_green.png"), + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + tool_capabilities = { + max_drop_level = 0, + groupcaps = { + fleshy = {times={}, uses=10000, maxlevel=0} + } + } +}) + +minetest.register_tool("technic:red_energy_crystal", { + description = S("Red Energy Crystal"), + inventory_image = minetest.inventorycube( + "technic_diamond_block_red.png", + "technic_diamond_block_red.png", + "technic_diamond_block_red.png"), + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + tool_capabilities = { + max_drop_level = 0, + groupcaps = { + fleshy = {times={}, uses=10000, maxlevel=0} + } + } +}) + + +minetest.register_craftitem("technic:fine_copper_wire", { + description = S("Fine Copper Wire"), + inventory_image = "technic_fine_copper_wire.png", +}) + +minetest.register_craftitem("technic:fine_gold_wire", { + description = S("Fine Gold Wire"), + inventory_image = "technic_fine_gold_wire.png", +}) + +minetest.register_craftitem("technic:fine_silver_wire", { + description = S("Fine Silver Wire"), + inventory_image = "technic_fine_silver_wire.png", +}) + +minetest.register_craftitem("technic:copper_coil", { + description = S("Copper Coil"), + inventory_image = "technic_copper_coil.png", +}) + +minetest.register_craftitem("technic:motor", { + description = S("Electric Motor"), + inventory_image = "technic_motor.png", +}) + +minetest.register_craftitem("technic:lv_transformer", { + description = S("Low Voltage Transformer"), + inventory_image = "technic_lv_transformer.png", +}) + +minetest.register_craftitem("technic:mv_transformer", { + description = S("Medium Voltage Transformer"), + inventory_image = "technic_mv_transformer.png", +}) + +minetest.register_craftitem( "technic:hv_transformer", { + description = S("High Voltage Transformer"), + inventory_image = "technic_hv_transformer.png", +}) + +minetest.register_craftitem( "technic:control_logic_unit", { + description = S("Control Logic Unit"), + inventory_image = "technic_control_logic_unit.png", +}) + +minetest.register_craftitem("technic:mixed_metal_ingot", { + description = S("Mixed Metal Ingot"), + inventory_image = "technic_mixed_metal_ingot.png", +}) + +minetest.register_craftitem("technic:composite_plate", { + description = S("Composite Plate"), + inventory_image = "technic_composite_plate.png", +}) + +minetest.register_craftitem("technic:copper_plate", { + description = S("Copper Plate"), + inventory_image = "technic_copper_plate.png", +}) + +minetest.register_craftitem("technic:carbon_plate", { + description = S("Carbon Plate"), + inventory_image = "technic_carbon_plate.png", +}) + +minetest.register_craftitem("technic:graphite", { + description = S("Graphite"), + inventory_image = "technic_graphite.png", +}) + +minetest.register_craftitem("technic:carbon_cloth", { + description = S("Carbon Cloth"), + inventory_image = "technic_carbon_cloth.png", +}) + +minetest.register_node("technic:machine_casing", { + description = S("Machine Casing"), + groups = {cracky=2}, + sunlight_propagates = true, + paramtype = "light", + drawtype = "allfaces", + tiles = {"technic_machine_casing.png"}, + sounds = default.node_sound_stone_defaults(), +}) + +for p = 0, 35 do + local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil + local psuffix = p == 7 and "" or p + local ingot = "technic:uranium"..psuffix.."_ingot" + local block = "technic:uranium"..psuffix.."_block" + local ov = p == 7 and minetest.override_item or nil; + (ov or minetest.register_craftitem)(ingot, { + description = string.format(S("%.1f%%-Fissile Uranium Ingot"), p/10), + inventory_image = "technic_uranium_ingot.png", + groups = {uranium_ingot=1, not_in_creative_inventory=nici}, + }); + -- Note on radioactivity of blocks: + -- Source: + -- The baseline radioactivity of an isotope is not especially + -- correlated with whether it's fissile (i.e., suitable as + -- reactor fuel). Natural uranium consists mainly of fissile + -- U-235 and non-fissile U-238, and both U-235 and U-238 are + -- significantly radioactive. U-235's massic activity is + -- about 80.0 MBq/kg, and U-238's is about 12.4 MBq/kg, which + -- superficially suggests that 3.5%-fissile uranium should have + -- only 1.19 times the activity of fully-depleted uranium. + -- But a third isotope affects the result hugely: U-234 has + -- massic activity of 231 GBq/kg. Natural uranium has massic + -- composition of 99.2837% U-238, 0.711% U-235, and 0.0053% U-234, + -- so its activity comes roughly 49% each from U-234 and U-238 + -- and only 2% from U-235. During enrichment via centrifuge, + -- the U-234 fraction is concentrated along with the U-235, with + -- the U-234:U-235 ratio remaining close to its original value. + -- (Actually the U-234 gets separated from U-238 slightly more + -- than the U-235 is, so the U-234:U-235 ratio is slightly + -- higher in enriched uranium.) A typical massic composition + -- for 3.5%-fissile uranium is 96.47116% U-238, 3.5% U-235, and + -- 0.02884% U-234. This gives 3.5%-fissile uranium about 6.55 + -- times the activity of fully-depleted uranium. The values we + -- compute here for the "radioactive" group value are based on + -- linear interpolation of activity along that scale, rooted at + -- a natural (0.7%-fissile) uranium block having the activity of + -- 9 uranium ore blocks (due to 9 ingots per block). The group + -- value is proportional to the square root of the activity, and + -- uranium ore has radioactive=1. This yields radioactive=1.0 + -- for a fully-depleted uranium block and radioactive=2.6 for + -- a 3.5%-fissile uranium block. + local radioactivity = math.floor(math.sqrt((1+5.55*p/35) * 18 / (1+5.55*7/35)) + 0.5); + (ov or minetest.register_node)(block, { + description = string.format(S("%.1f%%-Fissile Uranium Block"), p/10), + tiles = {"technic_uranium_block.png"}, + is_ground_content = true, + groups = {uranium_block=1, not_in_creative_inventory=nici, + cracky=1, level=2, radioactive=radioactivity}, + sounds = default.node_sound_stone_defaults(), + }); + if not ov then + minetest.register_craft({ + output = block, + recipe = { + {ingot, ingot, ingot}, + {ingot, ingot, ingot}, + {ingot, ingot, ingot}, + }, + }) + minetest.register_craft({ + output = ingot.." 9", + recipe = {{block}}, + }) + end +end + diff --git a/mods/ITEMS/technic/technic/legacy.lua b/mods/technic/technic/legacy.lua similarity index 100% rename from mods/ITEMS/technic/technic/legacy.lua rename to mods/technic/technic/legacy.lua diff --git a/mods/ITEMS/technic/technic/locale/de.txt b/mods/technic/technic/locale/de.txt similarity index 100% rename from mods/ITEMS/technic/technic/locale/de.txt rename to mods/technic/technic/locale/de.txt diff --git a/mods/ITEMS/technic/technic/locale/es.txt b/mods/technic/technic/locale/es.txt similarity index 100% rename from mods/ITEMS/technic/technic/locale/es.txt rename to mods/technic/technic/locale/es.txt diff --git a/mods/ITEMS/technic/technic/locale/it.txt b/mods/technic/technic/locale/it.txt similarity index 100% rename from mods/ITEMS/technic/technic/locale/it.txt rename to mods/technic/technic/locale/it.txt diff --git a/mods/ITEMS/technic/technic/locale/template.txt b/mods/technic/technic/locale/template.txt similarity index 100% rename from mods/ITEMS/technic/technic/locale/template.txt rename to mods/technic/technic/locale/template.txt diff --git a/mods/ITEMS/technic/technic/machines/HV/battery_box.lua b/mods/technic/technic/machines/HV/battery_box.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/HV/battery_box.lua rename to mods/technic/technic/machines/HV/battery_box.lua diff --git a/mods/technic/technic/machines/HV/cables.lua b/mods/technic/technic/machines/HV/cables.lua new file mode 100755 index 0000000..0b86a23 --- /dev/null +++ b/mods/technic/technic/machines/HV/cables.lua @@ -0,0 +1,12 @@ + +minetest.register_craft({ + output = 'technic:hv_cable 3', + recipe = { + {'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting'}, + {'technic:mv_cable', 'technic:mv_cable', 'technic:mv_cable'}, + {'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting'}, + } +}) + +technic.register_cable("HV", 3/16) + diff --git a/mods/ITEMS/technic/technic/machines/HV/forcefield.lua b/mods/technic/technic/machines/HV/forcefield.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/HV/forcefield.lua rename to mods/technic/technic/machines/HV/forcefield.lua diff --git a/mods/ITEMS/technic/technic/machines/HV/generator.lua b/mods/technic/technic/machines/HV/generator.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/HV/generator.lua rename to mods/technic/technic/machines/HV/generator.lua diff --git a/mods/ITEMS/technic/technic/machines/HV/init.lua b/mods/technic/technic/machines/HV/init.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/HV/init.lua rename to mods/technic/technic/machines/HV/init.lua diff --git a/mods/technic/technic/machines/HV/nuclear_reactor.lua b/mods/technic/technic/machines/HV/nuclear_reactor.lua new file mode 100755 index 0000000..231b6b3 --- /dev/null +++ b/mods/technic/technic/machines/HV/nuclear_reactor.lua @@ -0,0 +1,484 @@ +--[[ + The enriched uranium rod driven EU generator. +A very large and advanced machine providing vast amounts of power. +Very efficient but also expensive to run as it needs uranium. +Provides 10000 HV EUs for one week (only counted when loaded). + +The nuclear reactor core requires a casing of water and a protective +shield to work. This is checked now and then and if the casing is not +intact the reactor will melt down! +--]] + +local burn_ticks = 7 * 24 * 60 * 60 -- Seconds +local power_supply = 100000 -- EUs +local fuel_type = "technic:uranium_fuel" -- The reactor burns this +local digiline_meltdown = technic.config:get_bool("enable_nuclear_reactor_digiline_selfdestruct") +local digiline_remote_path = minetest.get_modpath("digiline_remote") + +local S = technic.getter + +local reactor_desc = S("@1 Nuclear Reactor Core", S("HV")) +local cable_entry = "^technic_cable_connection_overlay.png" + +-- FIXME: Recipe should make more sense like a rod recepticle, steam chamber, HV generator? +minetest.register_craft({ + output = 'technic:hv_nuclear_reactor_core', + recipe = { + {'technic:carbon_plate', 'default:obsidian_glass', 'technic:carbon_plate'}, + {'technic:composite_plate', 'technic:machine_casing', 'technic:composite_plate'}, + {'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'}, + } +}) + +local function make_reactor_formspec(meta) + local f = "size[8,9]".. + "label[0,0;"..S("Nuclear Reactor Rod Compartment").."]".. + "list[current_name;src;2,1;3,2;]".. + "list[current_player;main;0,5;8,4;]".. + "listring[]".. + "button[5.5,1.5;2,1;start;Start]".. + "checkbox[5.5,2.5;autostart;automatic Start;"..meta:get_string("autostart").."]" + if not digiline_remote_path then + return f + end + local digiline_enabled = meta:get_string("enable_digiline") + f = f.."checkbox[0.5,2.8;enable_digiline;Enable Digiline;"..digiline_enabled.."]" + if digiline_enabled ~= "true" then + return f + end + return f.. + "button_exit[4.6,3.69;2,1;save;Save]".. + "field[1,4;4,1;remote_channel;Digiline Remote Channel;${remote_channel}]" +end + +local SS_OFF = 0 +local SS_DANGER = 1 +local SS_CLEAR = 2 + +local reactor_siren = {} +local function siren_set_state(pos, state) + local hpos = minetest.hash_node_position(pos) + local siren = reactor_siren[hpos] + if not siren then + if state == SS_OFF then return end + siren = {state=SS_OFF} + reactor_siren[hpos] = siren + end + if state == SS_DANGER and siren.state ~= SS_DANGER then + if siren.handle then minetest.sound_stop(siren.handle) end + siren.handle = minetest.sound_play("technic_hv_nuclear_reactor_siren_danger_loop", + {pos=pos, gain=1.5, loop=true, max_hear_distance=48}) + siren.state = SS_DANGER + elseif state == SS_CLEAR then + if siren.handle then minetest.sound_stop(siren.handle) end + local clear_handle = minetest.sound_play("technic_hv_nuclear_reactor_siren_clear", + {pos=pos, gain=1.5, loop=false, max_hear_distance=48}) + siren.handle = clear_handle + siren.state = SS_CLEAR + minetest.after(10, function() + if siren.handle ~= clear_handle then return end + minetest.sound_stop(clear_handle) + if reactor_siren[hpos] == siren then + reactor_siren[hpos] = nil + end + end) + elseif state == SS_OFF and siren.state ~= SS_OFF then + if siren.handle then minetest.sound_stop(siren.handle) end + reactor_siren[hpos] = nil + end +end + +local function siren_danger(pos, meta) + meta:set_int("siren", 1) + siren_set_state(pos, SS_DANGER) +end + +local function siren_clear(pos, meta) + if meta:get_int("siren") ~= 0 then + siren_set_state(pos, SS_CLEAR) + meta:set_int("siren", 0) + end +end + +--[[ +The standard reactor structure consists of a 9x9x9 cube. A cross +section through the middle: + + CCCC CCCC + CBBB BBBC + CBLL LLBC + CBLWWWLBC + CBLW#WLBC + CBLW|WLBC + CBLL|LLBC + CBBB|BBBC + CCCC|CCCC + C = Concrete, B = Blast-resistant concrete, L = Lead, + W = water node, # = reactor core, | = HV cable + +The man-hole is optional (but necessary for refueling). + +For the reactor to operate and not melt down, it insists on the inner +7x7x7 portion (from the core out to the blast-resistant concrete) +being intact. Intactness only depends on the number of nodes of the +right type in each layer. The water layer must have water in all but +at most one node; the steel and blast-resistant concrete layers must +have the right material in all but at most two nodes. The permitted +gaps are meant for the cable and man-hole, but can actually be anywhere +and contain anything. For the reactor to be useful, a cable must +connect to the core, but it can go in any direction. + +The outer concrete layer of the standard structure is not required +for the reactor to operate. It is noted here because it used to +be mandatory, and for historical reasons (that it predates the +implementation of radiation) it needs to continue being adequate +shielding of legacy reactors. If it ever ceases to be adequate +shielding for new reactors, legacy ones should be grandfathered. + +For legacy reasons, if the reactor has a stainless steel layer instead +of a lead layer it will be converted to a lead layer. +--]] +local function reactor_structure_badness(pos) + local vm = VoxelManip() + local pos1 = vector.subtract(pos, 3) + local pos2 = vector.add(pos, 3) + local MinEdge, MaxEdge = vm:read_from_map(pos1, pos2) + local data = vm:get_data() + local area = VoxelArea:new({MinEdge=MinEdge, MaxEdge=MaxEdge}) + + local c_blast_concrete = minetest.get_content_id("technic:blast_resistant_concrete") + local c_lead = minetest.get_content_id("technic:lead_block") + local c_steel = minetest.get_content_id("technic:stainless_steel_block") + local c_water_source = minetest.get_content_id("default:water_source") + local c_water_flowing = minetest.get_content_id("default:water_flowing") + + local blast_layer, steel_layer, lead_layer, water_layer = 0, 0, 0, 0 + + for z = pos1.z, pos2.z do + for y = pos1.y, pos2.y do + for x = pos1.x, pos2.x do + local cid = data[area:index(x, y, z)] + if x == pos1.x or x == pos2.x or + y == pos1.y or y == pos2.y or + z == pos1.z or z == pos2.z then + if cid == c_blast_concrete then + blast_layer = blast_layer + 1 + end + elseif x == pos1.x+1 or x == pos2.x-1 or + y == pos1.y+1 or y == pos2.y-1 or + z == pos1.z+1 or z == pos2.z-1 then + if cid == c_lead then + lead_layer = lead_layer + 1 + elseif cid == c_steel then + steel_layer = steel_layer + 1 + end + elseif x == pos1.x+2 or x == pos2.x-2 or + y == pos1.y+2 or y == pos2.y-2 or + z == pos1.z+2 or z == pos2.z-2 then + if cid == c_water_source or cid == c_water_flowing then + water_layer = water_layer + 1 + end + end + end + end + end + + if steel_layer >= 96 then + for z = pos1.z+1, pos2.z-1 do + for y = pos1.y+1, pos2.y-1 do + for x = pos1.x+1, pos2.x-1 do + local vi = area:index(x, y, z) + if x == pos1.x+1 or x == pos2.x-1 or + y == pos1.y+1 or y == pos2.y-1 or + z == pos1.z+1 or z == pos2.z-1 then + if data[vi] == c_steel then + data[vi] = c_lead + end + end + end + end + end + vm:set_data(data) + vm:write_to_map() + lead_layer = steel_layer + end + + if water_layer > 25 then water_layer = 25 end + if lead_layer > 96 then lead_layer = 96 end + if blast_layer > 216 then blast_layer = 216 end + return (25 - water_layer) + (96 - lead_layer) + (216 - blast_layer) +end + + +local function melt_down_reactor(pos) + minetest.log("action", "A reactor melted down at "..minetest.pos_to_string(pos)) + minetest.set_node(pos, {name = "technic:corium_source"}) +end + + +local function start_reactor(pos, meta) + if minetest.get_node(pos).name ~= "technic:hv_nuclear_reactor_core" then + return false + end + local inv = meta:get_inventory() + if inv:is_empty("src") then + return false + end + local src_list = inv:get_list("src") + local correct_fuel_count = 0 + for _, src_stack in pairs(src_list) do + if src_stack and src_stack:get_name() == fuel_type then + correct_fuel_count = correct_fuel_count + 1 + end + end + -- Check that the reactor is complete and has the correct fuel + if correct_fuel_count ~= 6 or reactor_structure_badness(pos) ~= 0 then + return false + end + meta:set_int("burn_time", 1) + technic.swap_node(pos, "technic:hv_nuclear_reactor_core_active") + meta:set_int("HV_EU_supply", power_supply) + for idx, src_stack in pairs(src_list) do + src_stack:take_item() + inv:set_stack("src", idx, src_stack) + end + return true +end + + +minetest.register_abm({ + label = "Machines: reactor melt-down check", + nodenames = {"technic:hv_nuclear_reactor_core_active"}, + interval = 4, + chance = 1, + action = function (pos, node) + local meta = minetest.get_meta(pos) + local badness = reactor_structure_badness(pos) + local accum_badness = meta:get_int("structure_accumulated_badness") + if badness == 0 then + if accum_badness ~= 0 then + meta:set_int("structure_accumulated_badness", math.max(accum_badness - 4, 0)) + siren_clear(pos, meta) + end + else + siren_danger(pos, meta) + accum_badness = accum_badness + badness + if accum_badness >= 25 then + melt_down_reactor(pos) + else + meta:set_int("structure_accumulated_badness", accum_badness) + end + end + end, +}) + +local function run(pos, node) + local meta = minetest.get_meta(pos) + local burn_time = meta:get_int("burn_time") or 0 + if burn_time >= burn_ticks or burn_time == 0 then + if digiline_remote_path and meta:get_int("HV_EU_supply") == power_supply then + digiline_remote.send_to_node(pos, meta:get_string("remote_channel"), + "fuel used", 6, true) + end + if meta:get_string("autostart") == "true" then + if start_reactor(pos, meta) then + return + end + end + meta:set_int("HV_EU_supply", 0) + meta:set_int("burn_time", 0) + meta:set_string("infotext", S("%s Idle"):format(reactor_desc)) + technic.swap_node(pos, "technic:hv_nuclear_reactor_core") + meta:set_int("structure_accumulated_badness", 0) + siren_clear(pos, meta) + elseif burn_time > 0 then + burn_time = burn_time + 1 + meta:set_int("burn_time", burn_time) + local percent = math.floor(burn_time / burn_ticks * 100) + meta:set_string("infotext", reactor_desc.." ("..percent.."%)") + meta:set_int("HV_EU_supply", power_supply) + end +end + +local nuclear_reactor_receive_fields = function(pos, formname, fields, sender) + local player_name = sender:get_player_name() + if minetest.is_protected(pos, player_name) then + minetest.chat_send_player(player_name, "You are not allowed to edit this!") + minetest.record_protection_violation(pos, player_name) + return + end + local meta = minetest.get_meta(pos) + local update_formspec = false + if fields.remote_channel then + meta:set_string("remote_channel", fields.remote_channel) + end + if fields.start then + local b = start_reactor(pos, meta) + if b then + minetest.chat_send_player(player_name, "Start successful") + else + minetest.chat_send_player(player_name, "Error") + end + end + if fields.autostart then + meta:set_string("autostart", fields.autostart) + update_formspec = true + end + if fields.enable_digiline then + meta:set_string("enable_digiline", fields.enable_digiline) + update_formspec = true + end + if update_formspec then + meta:set_string("formspec", make_reactor_formspec(meta)) + end +end + +local digiline_remote_def = function(pos, channel, msg) + local meta = minetest.get_meta(pos) + if meta:get_string("enable_digiline") ~= "true" or + channel ~= meta:get_string("remote_channel") then + return + end + -- Convert string messages to tables: + local msgt = type(msg) + if msgt == "string" then + local smsg = msg:lower() + msg = {} + if smsg == "get" then + msg.command = "get" + elseif smsg:sub(1, 13) == "self_destruct" then + msg.command = "self_destruct" + msg.timer = tonumber(smsg:sub(15)) or 0 + elseif smsg == "start" then + msg.command = "start" + end + elseif msgt ~= "table" then + return + end + + if msg.command == "get" then + local inv = meta:get_inventory() + local invtable = {} + for i = 1, 6 do + local stack = inv:get_stack("src", i) + if stack:is_empty() then + invtable[i] = 0 + elseif stack:get_name() == fuel_type then + invtable[i] = stack:get_count() + else + invtable[i] = -stack:get_count() + end + end + digiline_remote.send_to_node(pos, channel, { + burn_time = meta:get_int("burn_time"), + enabled = meta:get_int("HV_EU_supply") == power_supply, + siren = meta:get_int("siren") == 1, + structure_accumulated_badness = meta:get_int("structure_accumulated_badness"), + rods = invtable + }, 6, true) + elseif digiline_meltdown and msg.command == "self_destruct" and + minetest.get_node(pos).name == "technic:hv_nuclear_reactor_core_active" then + if msg.timer ~= 0 and type(msg.timer) == "number" then + siren_danger(pos, meta) + minetest.after(msg.timer, melt_down_reactor, pos) + else + melt_down_reactor(pos) + end + elseif msg.command == "start" then + local b = start_reactor(pos, meta) + if b then + digiline_remote.send_to_node(pos, channel, "Start successful", 6, true) + else + digiline_remote.send_to_node(pos, channel, "Error", 6, true) + end + end +end + +minetest.register_node("technic:hv_nuclear_reactor_core", { + description = reactor_desc, + tiles = { + "technic_hv_nuclear_reactor_core.png", + "technic_hv_nuclear_reactor_core.png"..cable_entry + }, + drawtype = "mesh", + mesh = "technic_reactor.obj", + groups = {cracky = 1, technic_machine = 1, technic_hv = 1, digiline_remote_receive = 1}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + paramtype = "light", + paramtype2 = "facedir", + stack_max = 1, + on_receive_fields = nuclear_reactor_receive_fields, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", reactor_desc) + meta:set_string("formspec", make_reactor_formspec(meta)) + if digiline_remote_path then + meta:set_string("remote_channel", + "nucelear_reactor"..minetest.pos_to_string(pos)) + end + local inv = meta:get_inventory() + inv:set_size("src", 6) + end, + _on_digiline_remote_receive = digiline_remote_def, + can_dig = technic.machine_can_dig, + on_destruct = function(pos) siren_set_state(pos, SS_OFF) end, + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + allow_metadata_inventory_move = technic.machine_inventory_move, + technic_run = run, +}) + +minetest.register_node("technic:hv_nuclear_reactor_core_active", { + tiles = { + "technic_hv_nuclear_reactor_core.png", + "technic_hv_nuclear_reactor_core.png"..cable_entry + }, + drawtype = "mesh", + mesh = "technic_reactor.obj", + groups = {cracky = 1, technic_machine = 1, technic_hv = 1, radioactive = 4, + not_in_creative_inventory = 1, digiline_remote_receive = 1}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + drop = "technic:hv_nuclear_reactor_core", + light_source = 14, + paramtype = "light", + paramtype2 = "facedir", + on_receive_fields = nuclear_reactor_receive_fields, + _on_digiline_remote_receive = digiline_remote_def, + can_dig = technic.machine_can_dig, + after_dig_node = melt_down_reactor, + on_destruct = function(pos) siren_set_state(pos, SS_OFF) end, + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + allow_metadata_inventory_move = technic.machine_inventory_move, + technic_run = run, + technic_on_disable = function(pos, node) + local timer = minetest.get_node_timer(pos) + timer:start(1) + end, + on_timer = function(pos, node) + local meta = minetest.get_meta(pos) + + -- Connected back? + if meta:get_int("HV_EU_timeout") > 0 then return false end + + local burn_time = meta:get_int("burn_time") or 0 + + if burn_time >= burn_ticks or burn_time == 0 then + meta:set_int("HV_EU_supply", 0) + meta:set_int("burn_time", 0) + technic.swap_node(pos, "technic:hv_nuclear_reactor_core") + meta:set_int("structure_accumulated_badness", 0) + siren_clear(pos, meta) + return false + end + + meta:set_int("burn_time", burn_time + 1) + return true + end, +}) + +technic.register_machine("HV", "technic:hv_nuclear_reactor_core", technic.producer) +technic.register_machine("HV", "technic:hv_nuclear_reactor_core_active", technic.producer) + diff --git a/mods/technic/technic/machines/HV/quarry.lua b/mods/technic/technic/machines/HV/quarry.lua new file mode 100755 index 0000000..9060b70 --- /dev/null +++ b/mods/technic/technic/machines/HV/quarry.lua @@ -0,0 +1,259 @@ + +local S = technic.getter + +local tube_entry = "^pipeworks_tube_connection_metallic.png" +local cable_entry = "^technic_cable_connection_overlay.png" + +minetest.register_craft({ + recipe = { + {"technic:carbon_plate", "pipeworks:filter", "technic:composite_plate"}, + {"technic:motor", "technic:machine_casing", "technic:diamond_drill_head"}, + {"technic:carbon_steel_block", "technic:hv_cable", "technic:carbon_steel_block"}}, + output = "technic:quarry", +}) + +local quarry_dig_above_nodes = 3 -- How far above the quarry we will dig nodes +local quarry_max_depth = 100 +local quarry_demand = 10000 +local quarry_eject_dir = vector.new(0, 1, 0) + +local function set_quarry_formspec(meta) + local radius = meta:get_int("size") + local formspec = "size[6,4.3]".. + "list[context;cache;0,1;4,3;]".. + "item_image[4.8,0;1,1;technic:quarry]".. + "label[0,0.2;"..S("%s Quarry"):format("HV").."]".. + "field[4.3,3.5;2,1;size;"..S("Radius:")..";"..radius.."]" + if meta:get_int("enabled") == 0 then + formspec = formspec.."button[4,1;2,1;enable;"..S("Disabled").."]" + else + formspec = formspec.."button[4,1;2,1;disable;"..S("Enabled").."]" + end + local diameter = radius*2 + 1 + local nd = meta:get_int("dug") + local rel_y = quarry_dig_above_nodes - math.floor(nd / (diameter*diameter)) + formspec = formspec.."label[0,4;"..minetest.formspec_escape( + nd == 0 and S("Digging not started") or + (rel_y < -quarry_max_depth and S("Digging finished") or + (meta:get_int("purge_on") == 1 and S("Purging cache") or + S("Digging %d m "..(rel_y > 0 and "above" or "below").." machine") + :format(math.abs(rel_y)))) + ).."]" + formspec = formspec.."button[4,2;2,1;restart;"..S("Restart").."]" + meta:set_string("formspec", formspec) +end + +local function set_quarry_demand(meta) + local radius = meta:get_int("size") + local diameter = radius*2 + 1 + local machine_name = S("%s Quarry"):format("HV") + if meta:get_int("enabled") == 0 or meta:get_int("purge_on") == 1 then + meta:set_string("infotext", S(meta:get_int("purge_on") == 1 and "%s purging cache" or "%s Disabled"):format(machine_name)) + meta:set_int("HV_EU_demand", 0) + elseif meta:get_int("dug") == diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) then + meta:set_string("infotext", S("%s Finished"):format(machine_name)) + meta:set_int("HV_EU_demand", 0) + else + meta:set_string("infotext", S(meta:get_int("HV_EU_input") >= quarry_demand and "%s Active" or "%s Unpowered"):format(machine_name)) + meta:set_int("HV_EU_demand", quarry_demand) + end +end + +local function quarry_receive_fields(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + if fields.size and string.find(fields.size, "^[0-9]+$") then + local size = tonumber(fields.size) + if size >= 2 and size <= 8 and size ~= meta:get_int("size") then + meta:set_int("size", size) + meta:set_int("dug", 0) + end + end + if fields.enable then meta:set_int("enabled", 1) end + if fields.disable then meta:set_int("enabled", 0) end + if fields.restart then + meta:set_int("dug", 0) + meta:set_int("purge_on", 1) + end + set_quarry_formspec(meta) + set_quarry_demand(meta) +end + +local function quarry_handle_purge(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local i = 0 + for _,stack in ipairs(inv:get_list("cache")) do + i = i + 1 + if stack then + local item = stack:to_table() + if item then + technic.tube_inject_item(pos, pos, quarry_eject_dir, item) + stack:clear() + inv:set_stack("cache", i, stack) + break + end + end + end + if inv:is_empty("cache") then + meta:set_int("purge_on", 0) + end +end + +local function quarry_run(pos, node) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + -- initialize cache for the case we load an older world + inv:set_size("cache", 12) + -- toss a coin whether we do an automatic purge. Chance 1:200 + local purge_rand = math.random() + if purge_rand <= 0.005 then + meta:set_int("purge_on", 1) + end + + if meta:get_int("enabled") and meta:get_int("HV_EU_input") >= quarry_demand and meta:get_int("purge_on") == 0 then + local pdir = minetest.facedir_to_dir(node.param2) + local qdir = pdir.x == 1 and vector.new(0,0,-1) or + (pdir.z == -1 and vector.new(-1,0,0) or + (pdir.x == -1 and vector.new(0,0,1) or + vector.new(1,0,0))) + local radius = meta:get_int("size") + local diameter = radius*2 + 1 + local startpos = vector.add(vector.add(vector.add(pos, + vector.new(0, quarry_dig_above_nodes, 0)), + pdir), + vector.multiply(qdir, -radius)) + local owner = meta:get_string("owner") + local nd = meta:get_int("dug") + while nd ~= diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) do + local ry = math.floor(nd / (diameter*diameter)) + local ndl = nd % (diameter*diameter) + if ry % 2 == 1 then + ndl = diameter*diameter - 1 - ndl + end + local rq = math.floor(ndl / diameter) + local rp = ndl % diameter + if rq % 2 == 1 then rp = diameter - 1 - rp end + local digpos = vector.add(vector.add(vector.add(startpos, + vector.new(0, -ry, 0)), + vector.multiply(pdir, rp)), + vector.multiply(qdir, rq)) + local can_dig = true + if can_dig and minetest.is_protected and minetest.is_protected(digpos, owner) then + can_dig = false + end + local dignode + if can_dig then + dignode = technic.get_or_load_node(digpos) or minetest.get_node(digpos) + local dignodedef = minetest.registered_nodes[dignode.name] or {diggable=false} + if not dignodedef.diggable or (dignodedef.can_dig and not dignodedef.can_dig(digpos, nil)) then + can_dig = false + end + end + + if can_dig then + for ay = startpos.y, digpos.y+1, -1 do + local checkpos = {x=digpos.x, y=ay, z=digpos.z} + local checknode = technic.get_or_load_node(checkpos) or minetest.get_node(checkpos) + if checknode.name ~= "air" then + can_dig = false + break + end + end + end + nd = nd + 1 + if can_dig then + minetest.remove_node(digpos) + local drops = minetest.get_node_drops(dignode.name, "") + for _, dropped_item in ipairs(drops) do + local left = inv:add_item("cache", dropped_item) + while not left:is_empty() do + meta:set_int("purge_on", 1) + quarry_handle_purge(pos) + left = inv:add_item("cache", left) + end + end + break + end + end + if nd == diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) then + -- if a quarry is finished, we enable purge mode + meta:set_int("purge_on", 1) + end + meta:set_int("dug", nd) + else + -- if a quarry is disabled or has no power, we enable purge mode + meta:set_int("purge_on", 1) + end + -- if something triggered a purge, we handle it + if meta:get_int("purge_on") == 1 then + quarry_handle_purge(pos) + end + set_quarry_formspec(meta) + set_quarry_demand(meta) +end + +local function send_move_error(player) + minetest.chat_send_player(player:get_player_name(), + S("Manually taking/removing from cache by hand is not possible. ".. + "If you can't wait, restart or disable the quarry to start automatic purge.")) + return 0 +end + +minetest.register_node("technic:quarry", { + description = S("%s Quarry"):format("HV"), + tiles = { + "technic_carbon_steel_block.png"..tube_entry, + "technic_carbon_steel_block.png"..cable_entry, + "technic_carbon_steel_block.png"..cable_entry, + "technic_carbon_steel_block.png"..cable_entry, + "technic_carbon_steel_block.png^default_tool_mesepick.png", + "technic_carbon_steel_block.png"..cable_entry + }, + paramtype2 = "facedir", + groups = {cracky=2, tubedevice=1, technic_machine=1, technic_hv=1}, + connect_sides = {"bottom", "front", "left", "right"}, + tube = { + connect_sides = {top = 1}, + -- lower priority than other tubes, so that quarries will prefer any + -- other tube to another quarry, which could lead to server freezes + -- in certain quarry placements (2x2 for example would never eject) + priority = 10, + can_go = function(pos, node, velocity, stack) + -- always eject the same, even if items came in another way + -- this further mitigates loops and generally avoids random sideway movement + -- that can be expected in certain quarry placements + return { quarry_eject_dir } + end + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("%s Quarry"):format("HV")) + meta:set_int("size", 4) + set_quarry_formspec(meta) + set_quarry_demand(meta) + end, + after_place_node = function(pos, placer, itemstack) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name()) + pipeworks.scan_for_tube_objects(pos) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("cache") + end, + after_dig_node = pipeworks.scan_for_tube_objects, + on_receive_fields = quarry_receive_fields, + technic_run = quarry_run, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + return send_move_error(player) + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return send_move_error(player) + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + return send_move_error(player) + end +}) + +technic.register_machine("HV", "technic:quarry", technic.receiver) diff --git a/mods/ITEMS/technic/technic/machines/HV/solar_array.lua b/mods/technic/technic/machines/HV/solar_array.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/HV/solar_array.lua rename to mods/technic/technic/machines/HV/solar_array.lua diff --git a/mods/ITEMS/technic/technic/machines/LV/alloy_furnace.lua b/mods/technic/technic/machines/LV/alloy_furnace.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/alloy_furnace.lua rename to mods/technic/technic/machines/LV/alloy_furnace.lua diff --git a/mods/ITEMS/technic/technic/machines/LV/battery_box.lua b/mods/technic/technic/machines/LV/battery_box.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/battery_box.lua rename to mods/technic/technic/machines/LV/battery_box.lua diff --git a/mods/technic/technic/machines/LV/cables.lua b/mods/technic/technic/machines/LV/cables.lua new file mode 100755 index 0000000..d4ed880 --- /dev/null +++ b/mods/technic/technic/machines/LV/cables.lua @@ -0,0 +1,14 @@ + +minetest.register_alias("lv_cable", "technic:lv_cable") + +minetest.register_craft({ + output = 'technic:lv_cable 6', + recipe = { + {'default:paper', 'default:paper', 'default:paper'}, + {'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'}, + {'default:paper', 'default:paper', 'default:paper'}, + } +}) + +technic.register_cable("LV", 2/16) + diff --git a/mods/ITEMS/technic/technic/machines/LV/cnc.lua b/mods/technic/technic/machines/LV/cnc.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/cnc.lua rename to mods/technic/technic/machines/LV/cnc.lua diff --git a/mods/technic/technic/machines/LV/cnc_api.lua b/mods/technic/technic/machines/LV/cnc_api.lua new file mode 100755 index 0000000..f5aae5c --- /dev/null +++ b/mods/technic/technic/machines/LV/cnc_api.lua @@ -0,0 +1,369 @@ +-- API for the technic CNC machine +-- Again code is adapted from the NonCubic Blocks MOD v1.4 by yves_de_beck + +local S = technic.getter + +technic.cnc = {} + +-- REGISTER NONCUBIC FORMS, CREATE MODELS AND RECIPES: +------------------------------------------------------ + +-- Define slope boxes for the various nodes +------------------------------------------- +technic.cnc.programs = { + { suffix = "technic_cnc_stick", + model = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}, + desc = S("Stick") + }, + + { suffix = "technic_cnc_element_end_double", + model = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5}, + desc = S("Element End Double") + }, + + { suffix = "technic_cnc_element_cross_double", + model = { + {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}, + {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, + {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, + desc = S("Element Cross Double") + }, + + { suffix = "technic_cnc_element_t_double", + model = { + {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, + {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}, + {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}}, + desc = S("Element T Double") + }, + + { suffix = "technic_cnc_element_edge_double", + model = { + {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, + {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, + desc = S("Element Edge Double") + }, + + { suffix = "technic_cnc_element_straight_double", + model = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, + desc = S("Element Straight Double") + }, + + { suffix = "technic_cnc_element_end", + model = {-0.3, -0.5, -0.3, 0.3, 0, 0.5}, + desc = S("Element End") + }, + + { suffix = "technic_cnc_element_cross", + model = { + {0.3, -0.5, -0.3, 0.5, 0, 0.3}, + {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, + {-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, + desc = S("Element Cross") + }, + + { suffix = "technic_cnc_element_t", + model = { + {-0.3, -0.5, -0.5, 0.3, 0, 0.3}, + {-0.5, -0.5, -0.3, -0.3, 0, 0.3}, + {0.3, -0.5, -0.3, 0.5, 0, 0.3}}, + desc = S("Element T") + }, + + { suffix = "technic_cnc_element_edge", + model = { + {-0.3, -0.5, -0.5, 0.3, 0, 0.3}, + {-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, + desc = S("Element Edge") + }, + + { suffix = "technic_cnc_element_straight", + model = {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, + desc = S("Element Straight") + }, + + { suffix = "technic_cnc_oblate_spheroid", + model = "technic_oblate_spheroid.obj", + desc = S("Oblate spheroid"), + cbox = { + type = "fixed", + fixed = { + { -6/16, 4/16, -6/16, 6/16, 8/16, 6/16 }, + { -8/16, -4/16, -8/16, 8/16, 4/16, 8/16 }, + { -6/16, -8/16, -6/16, 6/16, -4/16, 6/16 } + } + } + }, + + { suffix = "technic_cnc_sphere", + model = "technic_sphere.obj", + desc = S("Sphere") + }, + + { suffix = "technic_cnc_cylinder_horizontal", + model = "technic_cylinder_horizontal.obj", + desc = S("Horizontal Cylinder") + }, + + { suffix = "technic_cnc_cylinder", + model = "technic_cylinder.obj", + desc = S("Cylinder") + }, + + { suffix = "technic_cnc_twocurvededge", + model = "technic_two_curved_edge.obj", + desc = S("Two Curved Edge/Corner Block") + }, + + { suffix = "technic_cnc_onecurvededge", + model = "technic_one_curved_edge.obj", + desc = S("One Curved Edge Block") + }, + + { suffix = "technic_cnc_spike", + model = "technic_pyramid_spike.obj", + desc = S("Spike"), + cbox = { + type = "fixed", + fixed = { + { -2/16, 4/16, -2/16, 2/16, 8/16, 2/16 }, + { -4/16, 0, -4/16, 4/16, 4/16, 4/16 }, + { -6/16, -4/16, -6/16, 6/16, 0, 6/16 }, + { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } + } + } + }, + + { suffix = "technic_cnc_pyramid", + model = "technic_pyramid.obj", + desc = S("Pyramid"), + cbox = { + type = "fixed", + fixed = { + { -2/16, -2/16, -2/16, 2/16, 0, 2/16 }, + { -4/16, -4/16, -4/16, 4/16, -2/16, 4/16 }, + { -6/16, -6/16, -6/16, 6/16, -4/16, 6/16 }, + { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 } + } + } + }, + + { suffix = "technic_cnc_slope_inner_edge_upsdown", + model = "technic_innercorner_upsdown.obj", + desc = S("Slope Upside Down Inner Edge/Corner"), + sbox = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + cbox = { + type = "fixed", + fixed = { + { 0.25, -0.25, -0.5, 0.5, -0.5, 0.5 }, + { -0.5, -0.25, 0.25, 0.5, -0.5, 0.5 }, + { 0, 0, -0.5, 0.5, -0.25, 0.5 }, + { -0.5, 0, 0, 0.5, -0.25, 0.5 }, + { -0.25, 0.25, -0.5, 0.5, 0, -0.25 }, + { -0.5, 0.25, -0.25, 0.5, 0, 0.5 }, + { -0.5, 0.5, -0.5, 0.5, 0.25, 0.5 } + } + } + }, + + { suffix = "technic_cnc_slope_edge_upsdown", + model = "technic_outercorner_upsdown.obj", + desc = S("Slope Upside Down Outer Edge/Corner"), + cbox = { + type = "fixed", + fixed = { + { -8/16, 8/16, -8/16, 8/16, 4/16, 8/16 }, + { -4/16, 4/16, -4/16, 8/16, 0, 8/16 }, + { 0, 0, 0, 8/16, -4/16, 8/16 }, + { 4/16, -4/16, 4/16, 8/16, -8/16, 8/16 } + } + } + }, + + { suffix = "technic_cnc_slope_inner_edge", + model = "technic_innercorner.obj", + desc = S("Slope Inner Edge/Corner"), + sbox = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + cbox = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 }, + { -0.5, -0.25, -0.25, 0.5, 0, 0.5 }, + { -0.25, -0.25, -0.5, 0.5, 0, -0.25 }, + { -0.5, 0, 0, 0.5, 0.25, 0.5 }, + { 0, 0, -0.5, 0.5, 0.25, 0.5 }, + { -0.5, 0.25, 0.25, 0.5, 0.5, 0.5 }, + { 0.25, 0.25, -0.5, 0.5, 0.5, 0.5 } + } + } + }, + + { suffix = "technic_cnc_slope_edge", + model = "technic_outercorner.obj", + desc = S("Slope Outer Edge/Corner"), + cbox = { + type = "fixed", + fixed = { + { 4/16, 4/16, 4/16, 8/16, 8/16, 8/16 }, + { 0, 0, 0, 8/16, 4/16, 8/16 }, + { -4/16, -4/16, -4/16, 8/16, 0, 8/16 }, + { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } + } + } + }, + + { suffix = "technic_cnc_slope_upsdown", + model = "technic_slope_upsdown.obj", + desc = S("Slope Upside Down"), + cbox = { + type = "fixed", + fixed = { + { -8/16, 8/16, -8/16, 8/16, 4/16, 8/16 }, + { -8/16, 4/16, -4/16, 8/16, 0, 8/16 }, + { -8/16, 0, 0, 8/16, -4/16, 8/16 }, + { -8/16, -4/16, 4/16, 8/16, -8/16, 8/16 } + } + } + }, + + { suffix = "technic_cnc_slope_lying", + model = "technic_slope_horizontal.obj", + desc = S("Slope Lying"), + cbox = { + type = "fixed", + fixed = { + { 4/16, -8/16, 4/16, 8/16, 8/16, 8/16 }, + { 0, -8/16, 0, 4/16, 8/16, 8/16 }, + { -4/16, -8/16, -4/16, 0, 8/16, 8/16 }, + { -8/16, -8/16, -8/16, -4/16, 8/16, 8/16 } + } + } + }, + + { suffix = "technic_cnc_slope", + model = "technic_slope.obj", + desc = S("Slope"), + cbox = { + type = "fixed", + fixed = { + { -8/16, 4/16, 4/16, 8/16, 8/16, 8/16 }, + { -8/16, 0, 0, 8/16, 4/16, 8/16 }, + { -8/16, -4/16, -4/16, 8/16, 0, 8/16 }, + { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } + } + } + }, + +} + +-- Allow disabling certain programs for some node. Default is allowing all types for all nodes +technic.cnc.programs_disable = { + -- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick + -- ... + ["default:dirt"] = {"technic_cnc_oblate_spheroid", "technic_cnc_slope_upsdown", "technic_cnc_edge", + "technic_cnc_inner_edge", "technic_cnc_slope_edge_upsdown", + "technic_cnc_slope_inner_edge_upsdown", "technic_cnc_stick", + "technic_cnc_cylinder_horizontal"} +} + +-- Generic function for registering all the different node types +function technic.cnc.register_program(recipeitem, suffix, model, groups, images, description, cbox, sbox) + + local dtype + local nodeboxdef + local meshdef + + if type(model) ~= "string" then -- assume a nodebox if it's a table or function call + dtype = "nodebox" + nodeboxdef = { + type = "fixed", + fixed = model + } + else + dtype = "mesh" + meshdef = model + end + + if cbox and not sbox then sbox = cbox end + + minetest.register_node(":"..recipeitem.."_"..suffix, { + description = description, + drawtype = dtype, + node_box = nodeboxdef, + mesh = meshdef, + tiles = images, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + groups = groups, + selection_box = sbox, + collision_box = cbox + }) +end + +-- function to iterate over all the programs the CNC machine knows +function technic.cnc.register_all(recipeitem, groups, images, description) + for _, data in ipairs(technic.cnc.programs) do + -- Disable node creation for disabled node types for some material + local do_register = true + if technic.cnc.programs_disable[recipeitem] ~= nil then + for __, disable in ipairs(technic.cnc.programs_disable[recipeitem]) do + if disable == data.suffix then + do_register = false + end + end + end + -- Create the node if it passes the test + if do_register then + technic.cnc.register_program(recipeitem, data.suffix, data.model, + groups, images, description.." "..data.desc, data.cbox, data.sbox) + end + end +end + + +-- REGISTER NEW TECHNIC_CNC_API's PART 2: technic.cnc..register_element_end(subname, recipeitem, groups, images, desc_element_xyz) +----------------------------------------------------------------------------------------------------------------------- +function technic.cnc.register_slope_edge_etc(recipeitem, groups, images, desc_slope, desc_slope_lying, desc_slope_upsdown, desc_slope_edge, desc_slope_inner_edge, desc_slope_upsdwn_edge, desc_slope_upsdwn_inner_edge, desc_pyramid, desc_spike, desc_onecurvededge, desc_twocurvededge, desc_cylinder, desc_cylinder_horizontal, desc_spheroid, desc_element_straight, desc_element_edge, desc_element_t, desc_element_cross, desc_element_end) + + technic.cnc.register_slope(recipeitem, groups, images, desc_slope) + technic.cnc.register_slope_lying(recipeitem, groups, images, desc_slope_lying) + technic.cnc.register_slope_upsdown(recipeitem, groups, images, desc_slope_upsdown) + technic.cnc.register_slope_edge(recipeitem, groups, images, desc_slope_edge) + technic.cnc.register_slope_inner_edge(recipeitem, groups, images, desc_slope_inner_edge) + technic.cnc.register_slope_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_edge) + technic.cnc.register_slope_inner_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_inner_edge) + technic.cnc.register_pyramid(recipeitem, groups, images, desc_pyramid) + technic.cnc.register_spike(recipeitem, groups, images, desc_spike) + technic.cnc.register_onecurvededge(recipeitem, groups, images, desc_onecurvededge) + technic.cnc.register_twocurvededge(recipeitem, groups, images, desc_twocurvededge) + technic.cnc.register_cylinder(recipeitem, groups, images, desc_cylinder) + technic.cnc.register_cylinder_horizontal(recipeitem, groups, images, desc_cylinder_horizontal) + technic.cnc.register_spheroid(recipeitem, groups, images, desc_spheroid) + technic.cnc.register_element_straight(recipeitem, groups, images, desc_element_straight) + technic.cnc.register_element_edge(recipeitem, groups, images, desc_element_edge) + technic.cnc.register_element_t(recipeitem, groups, images, desc_element_t) + technic.cnc.register_element_cross(recipeitem, groups, images, desc_element_cross) + technic.cnc.register_element_end(recipeitem, groups, images, desc_element_end) +end + +-- REGISTER STICKS: noncubic.register_xyz(recipeitem, groups, images, desc_element_xyz) +------------------------------------------------------------------------------------------------------------ +function technic.cnc.register_stick_etc(recipeitem, groups, images, desc_stick) + technic.cnc.register_stick(recipeitem, groups, images, desc_stick) +end + +function technic.cnc.register_elements(recipeitem, groups, images, desc_element_straight_double, desc_element_edge_double, desc_element_t_double, desc_element_cross_double, desc_element_end_double) + technic.cnc.register_element_straight_double(recipeitem, groups, images, desc_element_straight_double) + technic.cnc.register_element_edge_double(recipeitem, groups, images, desc_element_edge_double) + technic.cnc.register_element_t_double(recipeitem, groups, images, desc_element_t_double) + technic.cnc.register_element_cross_double(recipeitem, groups, images, desc_element_cross_double) + technic.cnc.register_element_end_double(recipeitem, groups, images, desc_element_end_double) +end + diff --git a/mods/ITEMS/technic/technic/machines/LV/cnc_nodes.lua b/mods/technic/technic/machines/LV/cnc_nodes.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/cnc_nodes.lua rename to mods/technic/technic/machines/LV/cnc_nodes.lua diff --git a/mods/ITEMS/technic/technic/machines/LV/compressor.lua b/mods/technic/technic/machines/LV/compressor.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/compressor.lua rename to mods/technic/technic/machines/LV/compressor.lua diff --git a/mods/ITEMS/technic/technic/machines/LV/electric_furnace.lua b/mods/technic/technic/machines/LV/electric_furnace.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/electric_furnace.lua rename to mods/technic/technic/machines/LV/electric_furnace.lua diff --git a/mods/ITEMS/technic/technic/machines/LV/extractor.lua b/mods/technic/technic/machines/LV/extractor.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/extractor.lua rename to mods/technic/technic/machines/LV/extractor.lua diff --git a/mods/technic/technic/machines/LV/generator.lua b/mods/technic/technic/machines/LV/generator.lua new file mode 100755 index 0000000..dc9815f --- /dev/null +++ b/mods/technic/technic/machines/LV/generator.lua @@ -0,0 +1,18 @@ +-- The electric generator. +-- A simple device to get started on the electric machines. +-- Inefficient and expensive in fuel (200EU per tick) +-- Also only allows for LV machinery to run. + +minetest.register_alias("lv_generator", "technic:lv_generator") + +minetest.register_craft({ + output = 'technic:lv_generator', + recipe = { + {'default:stone', 'default:furnace', 'default:stone'}, + {'default:stone', 'technic:machine_casing', 'default:stone'}, + {'default:stone', 'technic:lv_cable', 'default:stone'}, + } +}) + +technic.register_generator({tier="LV", supply=200}) + diff --git a/mods/technic/technic/machines/LV/geothermal.lua b/mods/technic/technic/machines/LV/geothermal.lua new file mode 100755 index 0000000..27f4abc --- /dev/null +++ b/mods/technic/technic/machines/LV/geothermal.lua @@ -0,0 +1,113 @@ +-- A geothermal EU generator +-- Using hot lava and water this device can create energy from steam +-- The machine is only producing LV EUs and can thus not drive more advanced equipment +-- The output is a little more than the coal burning generator (max 300EUs) + +minetest.register_alias("geothermal", "technic:geothermal") + +local S = technic.getter + +minetest.register_craft({ + output = 'technic:geothermal', + recipe = { + {'technic:granite', 'default:diamond', 'technic:granite'}, + {'technic:fine_copper_wire', 'technic:machine_casing', 'technic:fine_copper_wire'}, + {'technic:granite', 'technic:lv_cable', 'technic:granite'}, + } +}) + +minetest.register_craftitem("technic:geothermal", { + description = S("Geothermal %s Generator"):format("LV"), +}) + +local check_node_around = function(pos) + local node = minetest.get_node(pos) + if node.name == "default:water_source" or node.name == "default:water_flowing" then return 1 end + if node.name == "default:lava_source" or node.name == "default:lava_flowing" then return 2 end + return 0 +end + +local run = function(pos, node) + local meta = minetest.get_meta(pos) + local water_nodes = 0 + local lava_nodes = 0 + local production_level = 0 + local eu_supply = 0 + + -- Correct positioning is water on one side and lava on the other. + -- The two cannot be adjacent because the lava the turns into obsidian or rock. + -- To get to 100% production stack the water and lava one extra block down as well: + -- WGL (W=Water, L=Lava, G=the generator, |=an LV cable) + -- W|L + + local positions = { + {x=pos.x+1, y=pos.y, z=pos.z}, + {x=pos.x+1, y=pos.y-1, z=pos.z}, + {x=pos.x-1, y=pos.y, z=pos.z}, + {x=pos.x-1, y=pos.y-1, z=pos.z}, + {x=pos.x, y=pos.y, z=pos.z+1}, + {x=pos.x, y=pos.y-1, z=pos.z+1}, + {x=pos.x, y=pos.y, z=pos.z-1}, + {x=pos.x, y=pos.y-1, z=pos.z-1}, + } + for _, p in pairs(positions) do + local check = check_node_around(p) + if check == 1 then water_nodes = water_nodes + 1 end + if check == 2 then lava_nodes = lava_nodes + 1 end + end + + if water_nodes == 1 and lava_nodes == 1 then production_level = 25; eu_supply = 50 end + if water_nodes == 2 and lava_nodes == 1 then production_level = 50; eu_supply = 100 end + if water_nodes == 1 and lava_nodes == 2 then production_level = 75; eu_supply = 200 end + if water_nodes == 2 and lava_nodes == 2 then production_level = 100; eu_supply = 300 end + + if production_level > 0 then + meta:set_int("LV_EU_supply", eu_supply) + end + + meta:set_string("infotext", + S("Geothermal %s Generator"):format("LV").." ("..production_level.."%)") + + if production_level > 0 and minetest.get_node(pos).name == "technic:geothermal" then + technic.swap_node (pos, "technic:geothermal_active") + return + end + if production_level == 0 then + technic.swap_node(pos, "technic:geothermal") + meta:set_int("LV_EU_supply", 0) + end +end + +minetest.register_node("technic:geothermal", { + description = S("Geothermal %s Generator"):format("LV"), + tiles = {"technic_geothermal_top.png", "technic_machine_bottom.png", "technic_geothermal_side.png", + "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"}, + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + technic_machine=1, technic_lv=1}, + paramtype2 = "facedir", + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Geothermal %s Generator"):format("LV")) + meta:set_int("LV_EU_supply", 0) + end, + technic_run = run, +}) + +minetest.register_node("technic:geothermal_active", { + description = S("Geothermal %s Generator"):format("LV"), + tiles = {"technic_geothermal_top_active.png", "technic_machine_bottom.png", "technic_geothermal_side.png", + "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"}, + paramtype2 = "facedir", + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + technic_machine=1, technic_lv=1, not_in_creative_inventory=1}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + drop = "technic:geothermal", + technic_run = run, +}) + +technic.register_machine("LV", "technic:geothermal", technic.producer) +technic.register_machine("LV", "technic:geothermal_active", technic.producer) + diff --git a/mods/ITEMS/technic/technic/machines/LV/grinder.lua b/mods/technic/technic/machines/LV/grinder.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/grinder.lua rename to mods/technic/technic/machines/LV/grinder.lua diff --git a/mods/ITEMS/technic/technic/machines/LV/init.lua b/mods/technic/technic/machines/LV/init.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/init.lua rename to mods/technic/technic/machines/LV/init.lua diff --git a/mods/ITEMS/technic/technic/machines/LV/music_player.lua b/mods/technic/technic/machines/LV/music_player.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/music_player.lua rename to mods/technic/technic/machines/LV/music_player.lua diff --git a/mods/ITEMS/technic/technic/machines/LV/solar_array.lua b/mods/technic/technic/machines/LV/solar_array.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/solar_array.lua rename to mods/technic/technic/machines/LV/solar_array.lua diff --git a/mods/technic/technic/machines/LV/solar_panel.lua b/mods/technic/technic/machines/LV/solar_panel.lua new file mode 100755 index 0000000..a06ddb8 --- /dev/null +++ b/mods/technic/technic/machines/LV/solar_panel.lua @@ -0,0 +1,71 @@ +-- Solar panels are the building blocks of LV solar arrays +-- They can however also be used separately but with reduced efficiency due to the missing transformer. +-- Individual panels are less efficient than when the panels are combined into full arrays. + +local S = technic.getter + + +minetest.register_craft({ + output = 'technic:solar_panel', + recipe = { + {'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer'}, + {'technic:fine_silver_wire', 'technic:lv_cable', 'mesecons_materials:glue'}, + + } +}) + + +local run = function(pos, node) + -- The action here is to make the solar panel prodice power + -- Power is dependent on the light level and the height above ground + -- There are many ways to cheat by using other light sources like lamps. + -- As there is no way to determine if light is sunlight that is just a shame. + -- To take care of some of it solar panels do not work outside daylight hours or if + -- built below 0m + local pos1 = {x=pos.x, y=pos.y+1, z=pos.z} + local machine_name = S("Small Solar %s Generator"):format("LV") + + local light = minetest.get_node_light(pos1, nil) + local time_of_day = minetest.get_timeofday() + local meta = minetest.get_meta(pos) + if light == nil then light = 0 end + -- turn on panel only during day time and if sufficient light + -- I know this is counter intuitive when cheating by using other light sources underground. + if light >= 12 and time_of_day >= 0.24 and time_of_day <= 0.76 and pos.y > -10 then + local charge_to_give = math.floor((light + pos1.y) * 3) + charge_to_give = math.max(charge_to_give, 0) + charge_to_give = math.min(charge_to_give, 200) + meta:set_string("infotext", S("@1 Active (@2 EU)", machine_name, technic.pretty_num(charge_to_give))) + meta:set_int("LV_EU_supply", charge_to_give) + else + meta:set_string("infotext", S("%s Idle"):format(machine_name)) + meta:set_int("LV_EU_supply", 0) + end +end + +minetest.register_node("technic:solar_panel", { + tiles = {"technic_solar_panel_top.png", "technic_solar_panel_bottom.png", "technic_solar_panel_side.png", + "technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"}, + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + technic_machine=1, technic_lv=1}, + connect_sides = {"bottom"}, + sounds = default.node_sound_wood_defaults(), + description = S("Small Solar %s Generator"):format("LV"), + active = false, + drawtype = "nodebox", + paramtype = "light", + is_ground_content = true, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_int("LV_EU_supply", 0) + meta:set_string("infotext", S("Small Solar %s Generator"):format("LV")) + end, + technic_run = run, +}) + +technic.register_machine("LV", "technic:solar_panel", technic.producer) + diff --git a/mods/ITEMS/technic/technic/machines/LV/water_mill.lua b/mods/technic/technic/machines/LV/water_mill.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/LV/water_mill.lua rename to mods/technic/technic/machines/LV/water_mill.lua diff --git a/mods/ITEMS/technic/technic/machines/MV/alloy_furnace.lua b/mods/technic/technic/machines/MV/alloy_furnace.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/alloy_furnace.lua rename to mods/technic/technic/machines/MV/alloy_furnace.lua diff --git a/mods/ITEMS/technic/technic/machines/MV/battery_box.lua b/mods/technic/technic/machines/MV/battery_box.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/battery_box.lua rename to mods/technic/technic/machines/MV/battery_box.lua diff --git a/mods/technic/technic/machines/MV/cables.lua b/mods/technic/technic/machines/MV/cables.lua new file mode 100755 index 0000000..0c1f457 --- /dev/null +++ b/mods/technic/technic/machines/MV/cables.lua @@ -0,0 +1,14 @@ + +minetest.register_alias("mv_cable", "technic:mv_cable") + +minetest.register_craft({ + output = 'technic:mv_cable 3', + recipe ={ + {'technic:rubber', 'technic:rubber', 'technic:rubber'}, + {'technic:lv_cable', 'technic:lv_cable', 'technic:lv_cable'}, + {'technic:rubber', 'technic:rubber', 'technic:rubber'}, + } +}) + +technic.register_cable("MV", 2.5/16) + diff --git a/mods/ITEMS/technic/technic/machines/MV/centrifuge.lua b/mods/technic/technic/machines/MV/centrifuge.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/centrifuge.lua rename to mods/technic/technic/machines/MV/centrifuge.lua diff --git a/mods/ITEMS/technic/technic/machines/MV/compressor.lua b/mods/technic/technic/machines/MV/compressor.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/compressor.lua rename to mods/technic/technic/machines/MV/compressor.lua diff --git a/mods/ITEMS/technic/technic/machines/MV/electric_furnace.lua b/mods/technic/technic/machines/MV/electric_furnace.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/electric_furnace.lua rename to mods/technic/technic/machines/MV/electric_furnace.lua diff --git a/mods/ITEMS/technic/technic/machines/MV/extractor.lua b/mods/technic/technic/machines/MV/extractor.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/extractor.lua rename to mods/technic/technic/machines/MV/extractor.lua diff --git a/mods/ITEMS/technic/technic/machines/MV/generator.lua b/mods/technic/technic/machines/MV/generator.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/generator.lua rename to mods/technic/technic/machines/MV/generator.lua diff --git a/mods/ITEMS/technic/technic/machines/MV/grinder.lua b/mods/technic/technic/machines/MV/grinder.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/grinder.lua rename to mods/technic/technic/machines/MV/grinder.lua diff --git a/mods/ITEMS/technic/technic/machines/MV/init.lua b/mods/technic/technic/machines/MV/init.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/init.lua rename to mods/technic/technic/machines/MV/init.lua diff --git a/mods/technic/technic/machines/MV/lighting.lua b/mods/technic/technic/machines/MV/lighting.lua new file mode 100755 index 0000000..76fcb20 --- /dev/null +++ b/mods/technic/technic/machines/MV/lighting.lua @@ -0,0 +1,590 @@ +-- NOTE: The code is takes directly from VanessaE's homedecor mod. +-- I just made it the lights into indictive appliances for this mod. + +-- This file supplies electric powered glowlights + +-- Boilerplate to support localized strings if intllib mod is installed. +local S +if (minetest.get_modpath("intllib")) then + dofile(minetest.get_modpath("intllib").."/intllib.lua") + S = intllib.Getter(minetest.get_current_modname()) +else + S = function (s) return s end +end + +function technic_homedecor_node_is_owned(pos, placer) + local ownername = false + if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod + if HasOwner(pos, placer) then + if not IsPlayerNodeOwner(pos, placer:get_player_name()) then + if type(getLastOwner) == "function" then -- ...is an old version + ownername = getLastOwner(pos) + elseif type(GetNodeOwnerName) == "function" then -- ...is a recent version + ownername = GetNodeOwnerName(pos) + else + ownername = S("someone") + end + end + end + + elseif type(isprotect) == "function" then -- glomie's protection mod + if not isprotect(5, pos, placer) then + ownername = S("someone") + end + elseif type(protector) == "table" and type(protector.can_dig) == "function" then -- Zeg9's protection mod + if not protector.can_dig(5, pos, placer) then + ownername = S("someone") + end + end + + if ownername ~= false then + minetest.chat_send_player(placer:get_player_name(), S("Sorry, %s owns that spot."):format(ownername) ) + return true + else + return false + end +end + +local dirs1 = {20, 23, 22, 21} +local dirs2 = {9, 18, 7, 12} + +local technic_homedecor_rotate_and_place = function(itemstack, placer, pointed_thing) + if not technic_homedecor_node_is_owned(pointed_thing.under, placer) + and not technic_homedecor_node_is_owned(pointed_thing.above, placer) then + local node = minetest.get_node(pointed_thing.under) + if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then + + local above = pointed_thing.above + local under = pointed_thing.under + local pitch = placer:get_look_pitch() + local pname = minetest.get_node(under).name + local node = minetest.get_node(above) + local fdir = minetest.dir_to_facedir(placer:get_look_dir()) + local wield_name = itemstack:get_name() + + if not minetest.registered_nodes[pname] + or not minetest.registered_nodes[pname].on_rightclick then + + local iswall = (above.x ~= under.x) or (above.z ~= under.z) + local isceiling = (above.x == under.x) and (above.z == under.z) and (pitch > 0) + local pos1 = above + + if minetest.registered_nodes[pname]["buildable_to"] then + pos1 = under + iswall = false + end + + if not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end + + if iswall then + minetest.add_node(pos1, {name = wield_name, param2 = dirs2[fdir+1] }) -- place wall variant + elseif isceiling then + minetest.add_node(pos1, {name = wield_name, param2 = 20 }) -- place upside down variant + else + minetest.add_node(pos1, {name = wield_name, param2 = 0 }) -- place right side up + end + + if not homedecor_expect_infinite_stacks then + itemstack:take_item() + return itemstack + end + end + else + minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) + end + end +end + +-- Yellow -- Half node +minetest.register_node('technic:homedecor_glowlight_half_yellow', { + description = S("Yellow Glowlight (thick)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_yellow_tb.png', + 'technic_homedecor_glowlight_yellow_tb.png', + 'technic_homedecor_glowlight_thick_yellow_sides.png', + 'technic_homedecor_glowlight_thick_yellow_sides.png', + 'technic_homedecor_glowlight_thick_yellow_sides.png', + 'technic_homedecor_glowlight_thick_yellow_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3 }, + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 100, "Yellow Glowlight (thick)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_off(pos, 100, "technic:homedecor_glowlight_half_yellow_active") + end +}) + +minetest.register_node('technic:homedecor_glowlight_half_yellow_active', { + description = S("Yellow Glowlight (thick)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_yellow_tb.png', + 'technic_homedecor_glowlight_yellow_tb.png', + 'technic_homedecor_glowlight_thick_yellow_sides.png', + 'technic_homedecor_glowlight_thick_yellow_sides.png', + 'technic_homedecor_glowlight_thick_yellow_sides.png', + 'technic_homedecor_glowlight_thick_yellow_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + light_source = LIGHT_MAX, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3, not_in_creative_inventory=1}, + drop="technic:homedecor_glowlight_half_yellow", + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 100, "Yellow Glowlight (thick)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_half_yellow") + end +}) + +-- Yellow -- Quarter node +minetest.register_node('technic:homedecor_glowlight_quarter_yellow', { + description = S("Yellow Glowlight (thin)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_yellow_tb.png', + 'technic_homedecor_glowlight_yellow_tb.png', + 'technic_homedecor_glowlight_thin_yellow_sides.png', + 'technic_homedecor_glowlight_thin_yellow_sides.png', + 'technic_homedecor_glowlight_thin_yellow_sides.png', + 'technic_homedecor_glowlight_thin_yellow_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3 }, + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 100, "Yellow Glowlight (thin)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_off(pos, 100, "technic:homedecor_glowlight_quarter_yellow_active") + end +}) + +minetest.register_node('technic:homedecor_glowlight_quarter_yellow_active', { + description = S("Yellow Glowlight (thin)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_yellow_tb.png', + 'technic_homedecor_glowlight_yellow_tb.png', + 'technic_homedecor_glowlight_thin_yellow_sides.png', + 'technic_homedecor_glowlight_thin_yellow_sides.png', + 'technic_homedecor_glowlight_thin_yellow_sides.png', + 'technic_homedecor_glowlight_thin_yellow_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + light_source = LIGHT_MAX-1, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3, not_in_creative_inventory=1}, + drop="technic:homedecor_glowlight_quarter_yellow", + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 100, "Yellow Glowlight (thin)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_quarter_yellow") + end +}) + + +-- White -- half node +minetest.register_node('technic:homedecor_glowlight_half_white', { + description = S("White Glowlight (thick)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_white_tb.png', + 'technic_homedecor_glowlight_white_tb.png', + 'technic_homedecor_glowlight_thick_white_sides.png', + 'technic_homedecor_glowlight_thick_white_sides.png', + 'technic_homedecor_glowlight_thick_white_sides.png', + 'technic_homedecor_glowlight_thick_white_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3 }, + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 100, "White Glowlight (thick)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_off(pos, 100, "technic:homedecor_glowlight_half_white_active") + end +}) + +minetest.register_node('technic:homedecor_glowlight_half_white_active', { + description = S("White Glowlight (thick)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_white_tb.png', + 'technic_homedecor_glowlight_white_tb.png', + 'technic_homedecor_glowlight_thick_white_sides.png', + 'technic_homedecor_glowlight_thick_white_sides.png', + 'technic_homedecor_glowlight_thick_white_sides.png', + 'technic_homedecor_glowlight_thick_white_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + light_source = LIGHT_MAX, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3, not_in_creative_inventory=1}, + drop="technic:homedecor_glowlight_half_white", + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 100, "White Glowlight (thick)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_half_white") + end +}) + +-- White -- Quarter node +minetest.register_node('technic:homedecor_glowlight_quarter_white', { + description = S("White Glowlight (thin)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_white_tb.png', + 'technic_homedecor_glowlight_white_tb.png', + 'technic_homedecor_glowlight_thin_white_sides.png', + 'technic_homedecor_glowlight_thin_white_sides.png', + 'technic_homedecor_glowlight_thin_white_sides.png', + 'technic_homedecor_glowlight_thin_white_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3 }, + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 100, "White Glowlight (thin)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_off(pos, 100, "technic:homedecor_glowlight_quarter_white_active") + end +}) + +minetest.register_node('technic:homedecor_glowlight_quarter_white_active', { + description = S("White Glowlight (thin)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_white_tb.png', + 'technic_homedecor_glowlight_white_tb.png', + 'technic_homedecor_glowlight_thin_white_sides.png', + 'technic_homedecor_glowlight_thin_white_sides.png', + 'technic_homedecor_glowlight_thin_white_sides.png', + 'technic_homedecor_glowlight_thin_white_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + light_source = LIGHT_MAX-1, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3, not_in_creative_inventory=1}, + drop="technic:homedecor_glowlight_quarter_white", + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 100, "White Glowlight (thin)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_quarter_white") + end +}) + +-- Glowlight "cubes" - yellow +minetest.register_node('technic:homedecor_glowlight_small_cube_yellow', { + description = S("Yellow Glowlight (small cube)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_cube_yellow_tb.png', + 'technic_homedecor_glowlight_cube_yellow_tb.png', + 'technic_homedecor_glowlight_cube_yellow_sides.png', + 'technic_homedecor_glowlight_cube_yellow_sides.png', + 'technic_homedecor_glowlight_cube_yellow_sides.png', + 'technic_homedecor_glowlight_cube_yellow_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } + }, + node_box = { + type = "fixed", + fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3 }, + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 50, "Yellow Glowlight (small cube)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_off(pos, 50, "technic:homedecor_glowlight_small_cube_yellow_active") + end +}) + +minetest.register_node('technic:homedecor_glowlight_small_cube_yellow_active', { + description = S("Yellow Glowlight (small cube)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_cube_yellow_tb.png', + 'technic_homedecor_glowlight_cube_yellow_tb.png', + 'technic_homedecor_glowlight_cube_yellow_sides.png', + 'technic_homedecor_glowlight_cube_yellow_sides.png', + 'technic_homedecor_glowlight_cube_yellow_sides.png', + 'technic_homedecor_glowlight_cube_yellow_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } + }, + node_box = { + type = "fixed", + fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + light_source = LIGHT_MAX-1, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3, not_in_creative_inventory=1}, + drop="technic:homedecor_glowlight_small_cube_yellow", + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 50, "Yellow Glowlight (small cube)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_small_cube_yellow") + end +}) + +-- Glowlight "cubes" - white +minetest.register_node('technic:homedecor_glowlight_small_cube_white', { + description = S("White Glowlight (small cube)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_cube_white_tb.png', + 'technic_homedecor_glowlight_cube_white_tb.png', + 'technic_homedecor_glowlight_cube_white_sides.png', + 'technic_homedecor_glowlight_cube_white_sides.png', + 'technic_homedecor_glowlight_cube_white_sides.png', + 'technic_homedecor_glowlight_cube_white_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } + }, + node_box = { + type = "fixed", + fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3 }, + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 50, "White Glowlight (small cube)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_off(pos, 50, "technic:homedecor_glowlight_small_cube_white_active") + end +}) + +minetest.register_node('technic:homedecor_glowlight_small_cube_white_active', { + description = S("White Glowlight (small cube)"), + drawtype = "nodebox", + tiles = { + 'technic_homedecor_glowlight_cube_white_tb.png', + 'technic_homedecor_glowlight_cube_white_tb.png', + 'technic_homedecor_glowlight_cube_white_sides.png', + 'technic_homedecor_glowlight_cube_white_sides.png', + 'technic_homedecor_glowlight_cube_white_sides.png', + 'technic_homedecor_glowlight_cube_white_sides.png' + }, + selection_box = { + type = "fixed", + fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } + }, + node_box = { + type = "fixed", + fixed = { -0.25, -0.5, -0.25, 0.25, 0, 0.25 } + }, + + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + light_source = LIGHT_MAX-1, + sounds = default.node_sound_wood_defaults(), + + groups = { snappy = 3, not_in_creative_inventory=1}, + drop="technic:homedecor_glowlight_small_cube_white", + on_place = function(itemstack, placer, pointed_thing) + technic_homedecor_rotate_and_place(itemstack, placer, pointed_thing) + return itemstack + end, + on_construct = function(pos) + technic.inductive_on_construct(pos, 50, "White Glowlight (small cube)") + end, + on_punch = function(pos, node, puncher) + technic.inductive_on_punch_on(pos, 0, "technic:homedecor_glowlight_small_cube_white") + end +}) + +technic.register_inductive_machine("technic:homedecor_glowlight_half_yellow") +technic.register_inductive_machine("technic:homedecor_glowlight_half_white") +technic.register_inductive_machine("technic:homedecor_glowlight_quarter_yellow") +technic.register_inductive_machine("technic:homedecor_glowlight_quarter_white") +technic.register_inductive_machine("technic:homedecor_glowlight_small_cube_yellow") +technic.register_inductive_machine("technic:homedecor_glowlight_small_cube_white") diff --git a/mods/ITEMS/technic/technic/machines/MV/power_radiator.lua b/mods/technic/technic/machines/MV/power_radiator.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/power_radiator.lua rename to mods/technic/technic/machines/MV/power_radiator.lua diff --git a/mods/ITEMS/technic/technic/machines/MV/solar_array.lua b/mods/technic/technic/machines/MV/solar_array.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/solar_array.lua rename to mods/technic/technic/machines/MV/solar_array.lua diff --git a/mods/technic/technic/machines/MV/tool_workshop.lua b/mods/technic/technic/machines/MV/tool_workshop.lua new file mode 100755 index 0000000..6679d1d --- /dev/null +++ b/mods/technic/technic/machines/MV/tool_workshop.lua @@ -0,0 +1,127 @@ +-- Tool workshop +-- This machine repairs tools. + +minetest.register_alias("tool_workshop", "technic:tool_workshop") + +local S = technic.getter + +local tube_entry = "^pipeworks_tube_connection_wooden.png" + +minetest.register_craft({ + output = 'technic:tool_workshop', + recipe = { + {'group:wood', 'default:diamond', 'group:wood'}, + {'mesecons_pistons:piston_sticky_off', 'technic:machine_casing', 'technic:carbon_cloth'}, + {'default:obsidian', 'technic:mv_cable', 'default:obsidian'}, + } +}) + +local workshop_demand = {5000, 3500, 2000} + +local workshop_formspec = + "invsize[8,9;]".. + "list[current_name;src;3,1;1,1;]".. + "label[0,0;"..S("%s Tool Workshop"):format("MV").."]".. + "list[current_name;upgrade1;1,3;1,1;]".. + "list[current_name;upgrade2;2,3;1,1;]".. + "label[1,4;"..S("Upgrade Slots").."]".. + "list[current_player;main;0,5;8,4;]".. + "listring[current_player;main]".. + "listring[current_name;src]".. + "listring[current_player;main]".. + "listring[current_name;upgrade1]".. + "listring[current_player;main]".. + "listring[current_name;upgrade2]".. + "listring[current_player;main]" + +local run = function(pos, node) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local eu_input = meta:get_int("MV_EU_input") + local machine_name = S("%s Tool Workshop"):format("MV") + local machine_node = "technic:tool_workshop" + + -- Setup meta data if it does not exist. + if not eu_input then + meta:set_int("MV_EU_demand", workshop_demand[1]) + meta:set_int("MV_EU_input", 0) + return + end + + local EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) + + local repairable = false + local srcstack = inv:get_stack("src", 1) + if not srcstack:is_empty() then + local itemdef = minetest.registered_items[srcstack:get_name()] + if itemdef and + (not itemdef.wear_represents or + itemdef.wear_represents == "mechanical_wear") and + srcstack:get_wear() ~= 0 then + repairable = true + end + end + technic.handle_machine_pipeworks(pos, tube_upgrade, function (pos, x_velocity, z_velocity) + if not repairable then + technic.send_items(pos, x_velocity, z_velocity, "src") + end + end) + if not repairable then + meta:set_string("infotext", S("%s Idle"):format(machine_name)) + meta:set_int("MV_EU_demand", 0) + return + end + + if eu_input < workshop_demand[EU_upgrade+1] then + meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) + elseif eu_input >= workshop_demand[EU_upgrade+1] then + meta:set_string("infotext", S("%s Active"):format(machine_name)) + srcstack:add_wear(-1000) + inv:set_stack("src", 1, srcstack) + end + meta:set_int("MV_EU_demand", workshop_demand[EU_upgrade+1]) +end + +minetest.register_node("technic:tool_workshop", { + description = S("%s Tool Workshop"):format("MV"), + paramtype2 = "facedir", + tiles = { + "technic_workshop_top.png"..tube_entry, + "technic_machine_bottom.png"..tube_entry, + "technic_workshop_side.png"..tube_entry, + "technic_workshop_side.png"..tube_entry, + "technic_workshop_side.png"..tube_entry, + "technic_workshop_side.png" + }, + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + technic_machine=1, technic_mv=1, tubedevice=1, tubedevice_receiver=1}, + connect_sides = {"bottom", "back", "left", "right"}, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("%s Tool Workshop"):format("MV")) + meta:set_string("formspec", workshop_formspec) + local inv = meta:get_inventory() + inv:set_size("src", 1) + inv:set_size("upgrade1", 1) + inv:set_size("upgrade2", 1) + end, + can_dig = technic.machine_can_dig, + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + tube = { + can_insert = function (pos, node, stack, direction) + return minetest.get_meta(pos):get_inventory():room_for_item("src", stack) + end, + insert_object = function (pos, node, stack, direction) + return minetest.get_meta(pos):get_inventory():add_item("src", stack) + end, + connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1}, + }, + technic_run = run, + after_place_node = pipeworks.after_place, + after_dig_node = technic.machine_after_dig_node +}) + +technic.register_machine("MV", "technic:tool_workshop", technic.receiver) + diff --git a/mods/ITEMS/technic/technic/machines/MV/wind_mill.lua b/mods/technic/technic/machines/MV/wind_mill.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/MV/wind_mill.lua rename to mods/technic/technic/machines/MV/wind_mill.lua diff --git a/mods/ITEMS/technic/technic/machines/init.lua b/mods/technic/technic/machines/init.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/init.lua rename to mods/technic/technic/machines/init.lua diff --git a/mods/ITEMS/technic/technic/machines/other/anchor.lua b/mods/technic/technic/machines/other/anchor.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/other/anchor.lua rename to mods/technic/technic/machines/other/anchor.lua diff --git a/mods/technic/technic/machines/other/coal_alloy_furnace.lua b/mods/technic/technic/machines/other/coal_alloy_furnace.lua new file mode 100755 index 0000000..30db8ed --- /dev/null +++ b/mods/technic/technic/machines/other/coal_alloy_furnace.lua @@ -0,0 +1,178 @@ + +-- Fuel driven alloy furnace. This uses no EUs: + +local S = technic.getter + +minetest.register_craft({ + output = 'technic:coal_alloy_furnace', + recipe = { + {'default:brick', 'default:brick', 'default:brick'}, + {'default:brick', '', 'default:brick'}, + {'default:brick', 'default:brick', 'default:brick'}, + } +}) + +local machine_name = S("Fuel-Fired Alloy Furnace") +local formspec = + "size[8,9]".. + "label[0,0;"..machine_name.."]".. + "image[2,2;1,1;default_furnace_fire_bg.png]".. + "list[current_name;fuel;2,3;1,1;]".. + "list[current_name;src;2,1;2,1;]".. + "list[current_name;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]".. + "listring[current_name;dst]".. + "listring[current_player;main]".. + "listring[current_name;src]".. + "listring[current_player;main]".. + "listring[current_name;fuel]".. + "listring[current_player;main]" + +minetest.register_node("technic:coal_alloy_furnace", { + description = machine_name, + tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", + "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", + "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front.png"}, + paramtype2 = "facedir", + groups = {cracky=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_stone_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", formspec) + meta:set_string("infotext", machine_name) + local inv = meta:get_inventory() + inv:set_size("fuel", 1) + inv:set_size("src", 2) + inv:set_size("dst", 4) + end, + can_dig = technic.machine_can_dig, + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + allow_metadata_inventory_move = technic.machine_inventory_move, +}) + +minetest.register_node("technic:coal_alloy_furnace_active", { + description = machine_name, + tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", + "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", + "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front_active.png"}, + paramtype2 = "facedir", + light_source = 8, + drop = "technic:coal_alloy_furnace", + groups = {cracky=2, not_in_creative_inventory=1}, + legacy_facedir_simple = true, + sounds = default.node_sound_stone_defaults(), + can_dig = technic.machine_can_dig, + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + allow_metadata_inventory_move = technic.machine_inventory_move, +}) + +minetest.register_abm({ + label = "Machines: run coal alloy furnace", + nodenames = {"technic:coal_alloy_furnace", "technic:coal_alloy_furnace_active"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + if inv:get_size("src") == 1 then -- Old furnace -> convert it + inv:set_size("src", 2) + inv:set_stack("src", 2, inv:get_stack("src2", 1)) + inv:set_size("src2", 0) + end + + local recipe = nil + + for i, name in pairs({ + "fuel_totaltime", + "fuel_time", + "src_totaltime", + "src_time"}) do + if not meta:get_float(name) then + meta:set_float(name, 0.0) + end + end + + -- Get what to cook if anything + local result = technic.get_recipe("alloy", inv:get_list("src")) + + local was_active = false + + if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then + was_active = true + meta:set_int("fuel_time", meta:get_int("fuel_time") + 1) + if result then + meta:set_int("src_time", meta:get_int("src_time") + 1) + if meta:get_int("src_time") >= result.time then + meta:set_int("src_time", 0) + local result_stack = ItemStack(result.output) + if inv:room_for_item("dst", result_stack) then + inv:set_list("src", result.new_input) + inv:add_item("dst", result_stack) + end + end + else + meta:set_int("src_time", 0) + end + end + + if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then + local percent = math.floor(meta:get_float("fuel_time") / + meta:get_float("fuel_totaltime") * 100) + meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..percent.."%)") + technic.swap_node(pos, "technic:coal_alloy_furnace_active") + meta:set_string("formspec", + "size[8,9]".. + "label[0,0;"..machine_name.."]".. + "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:".. + (100 - percent)..":default_furnace_fire_fg.png]".. + "list[current_name;fuel;2,3;1,1;]".. + "list[current_name;src;2,1;2,1;]".. + "list[current_name;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]".. + "listring[current_name;dst]".. + "listring[current_player;main]".. + "listring[current_name;src]".. + "listring[current_player;main]".. + "listring[current_name;fuel]".. + "listring[current_player;main]") + return + end + + local recipe = technic.get_recipe("alloy", inv:get_list("src")) + + if not recipe then + if was_active then + meta:set_string("infotext", S("%s is empty"):format(machine_name)) + technic.swap_node(pos, "technic:coal_alloy_furnace") + meta:set_string("formspec", formspec) + end + return + end + + -- Next take a hard look at the fuel situation + local fuel = nil + local afterfuel + local fuellist = inv:get_list("fuel") + + if fuellist then + fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) + end + + if fuel.time <= 0 then + meta:set_string("infotext", S("%s Out Of Fuel"):format(machine_name)) + technic.swap_node(pos, "technic:coal_alloy_furnace") + meta:set_string("formspec", formspec) + return + end + + meta:set_string("fuel_totaltime", fuel.time) + meta:set_string("fuel_time", 0) + + inv:set_stack("fuel", 1, afterfuel.items[1]) + end, +}) + diff --git a/mods/technic/technic/machines/other/coal_furnace.lua b/mods/technic/technic/machines/other/coal_furnace.lua new file mode 100755 index 0000000..53a0f8b --- /dev/null +++ b/mods/technic/technic/machines/other/coal_furnace.lua @@ -0,0 +1,5 @@ +local S = technic.getter + +if minetest.registered_nodes["default:furnace"].description == "Furnace" then + minetest.override_item("default:furnace", { description = S("Fuel-Fired Furnace") }) +end diff --git a/mods/ITEMS/technic/technic/machines/other/constructor.lua b/mods/technic/technic/machines/other/constructor.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/other/constructor.lua rename to mods/technic/technic/machines/other/constructor.lua diff --git a/mods/technic/technic/machines/other/frames.lua b/mods/technic/technic/machines/other/frames.lua new file mode 100755 index 0000000..5459289 --- /dev/null +++ b/mods/technic/technic/machines/other/frames.lua @@ -0,0 +1,928 @@ + +local S = technic.getter + +frames = {} + +local infinite_stacks = minetest.settings:get_bool("creative_mode") and minetest.get_modpath("unified_inventory") == nil + +local frames_pos = {} + +-- Helpers + +local function get_face(pos,ppos,pvect) + -- Raytracer to get which face has been clicked + ppos={x=ppos.x-pos.x,y=ppos.y-pos.y+1.5,z=ppos.z-pos.z} + if pvect.x>0 then + local t=(-0.5-ppos.x)/pvect.x + local y_int=ppos.y+t*pvect.y + local z_int=ppos.z+t*pvect.z + if y_int>-0.45 and y_int<0.45 and z_int>-0.45 and z_int<0.45 then return 1 end + elseif pvect.x<0 then + local t=(0.5-ppos.x)/pvect.x + local y_int=ppos.y+t*pvect.y + local z_int=ppos.z+t*pvect.z + if y_int>-0.45 and y_int<0.45 and z_int>-0.45 and z_int<0.45 then return 2 end + end + if pvect.y>0 then + local t=(-0.5-ppos.y)/pvect.y + local x_int=ppos.x+t*pvect.x + local z_int=ppos.z+t*pvect.z + if x_int>-0.45 and x_int<0.45 and z_int>-0.45 and z_int<0.45 then return 3 end + elseif pvect.y<0 then + local t=(0.5-ppos.y)/pvect.y + local x_int=ppos.x+t*pvect.x + local z_int=ppos.z+t*pvect.z + if x_int>-0.45 and x_int<0.45 and z_int>-0.45 and z_int<0.45 then return 4 end + end + if pvect.z>0 then + local t=(-0.5-ppos.z)/pvect.z + local x_int=ppos.x+t*pvect.x + local y_int=ppos.y+t*pvect.y + if x_int>-0.45 and x_int<0.45 and y_int>-0.45 and y_int<0.45 then return 5 end + elseif pvect.z<0 then + local t=(0.5-ppos.z)/pvect.z + local x_int=ppos.x+t*pvect.x + local y_int=ppos.y+t*pvect.y + if x_int>-0.45 and x_int<0.45 and y_int>-0.45 and y_int<0.45 then return 6 end + end +end + +local function lines(str) + local t = {} + local function helper(line) table.insert(t, line) return "" end + helper((str:gsub("(.-)\r?\n", helper))) + return t +end + +local function pos_to_string(pos) + if pos.x == 0 then pos.x = 0 end -- Fix for signed 0 + if pos.y == 0 then pos.y = 0 end -- Fix for signed 0 + if pos.z == 0 then pos.z = 0 end -- Fix for signed 0 + return tostring(pos.x).."\n"..tostring(pos.y).."\n"..tostring(pos.z) +end + +local function pos_from_string(str) + local l = lines(str) + return {x = tonumber(l[1]), y = tonumber(l[2]), z = tonumber(l[3])} +end + +local function pos_in_list(l,pos) + for _,p in ipairs(l) do + if p.x==pos.x and p.y==pos.y and p.z==pos.z then return true end + end + return false +end + +local function table_empty(table) + for _, __ in pairs(table) do + return false + end + return true +end + +local function add_table(table,toadd) + local i = 1 + while true do + o = table[i] + if o == toadd then return end + if o == nil then break end + i = i+1 + end + table[i] = toadd +end + +local function move_nodes_vect(poslist,vect,must_not_move,owner) + if minetest.is_protected then + for _,pos in ipairs(poslist) do + local npos=vector.add(pos,vect) + if minetest.is_protected(pos, owner) or minetest.is_protected(npos, owner) then + return + end + end + end + for _,pos in ipairs(poslist) do + local npos=vector.add(pos,vect) + local name = minetest.get_node(npos).name + if ((name~="air" and minetest.registered_nodes[name].liquidtype=="none") or frames_pos[pos_to_string(npos)]) and not(pos_in_list(poslist,npos)) then + return + end + --[[if pos.x==must_not_move.x and pos.y==must_not_move.y and pos.z==must_not_move.z then + return + end]] + end + local nodelist = {} + for _, pos in ipairs(poslist) do + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos):to_table() + nodelist[#(nodelist)+1] = {oldpos = pos, pos = vector.add(pos, vect), node = node, meta = meta} + end + local objects = {} + for _, pos in ipairs(poslist) do + for _,object in ipairs(minetest.get_objects_inside_radius(pos, 1)) do + local entity = object:get_luaentity() + if not entity or not mesecon.is_mvps_unmov(entity.name) then + add_table(objects, object) + end + end + end + for _, obj in ipairs(objects) do + obj:setpos(vector.add(obj:getpos(), vect)) + end + for _,n in ipairs(nodelist) do + local npos = n.pos + minetest.set_node(npos, n.node) + local meta = minetest.get_meta(npos) + meta:from_table(n.meta) + for __,pos in ipairs(poslist) do + if npos.x == pos.x and npos.y == pos.y and npos.z == pos.z then + table.remove(poslist, __) + break + end + end + end + for __, pos in ipairs(poslist) do + minetest.remove_node(pos) + end + for _, callback in ipairs(mesecon.on_mvps_move) do + callback(nodelist) + end +end + +local function is_supported_node(name) + return ((string.find(name, "tube") ~= nil) and (string.find(name, "pipeworks") ~= nil)) +end + + +-- Frames +for xm=0,1 do +for xp=0,1 do +for ym=0,1 do +for yp=0,1 do +for zm=0,1 do +for zp=0,1 do + +local a=8/16 +local b=7/16 +local nodeboxes= { + { -a, -a, -a, -b, a, -b }, + { -a, -a, b, -b, a, a }, + { b, -a, b, a, a, a }, + { b, -a, -a, a, a, -b }, + + { -b, b, -a, b, a, -b }, + { -b, -a, -a, b, -b, -b }, + + { -b, b, b, b, a, a }, + { -b, -a, b, b, -b, a }, + + { b, b, -b, a, a, b }, + { b, -a, -b, a, -b, b }, + + { -a, b, -b, -b, a, b }, + { -a, -a, -b, -b, -b, b }, + } + + if yp==0 then + table.insert(nodeboxes, {-b,b,-b, b,a,b}) + end + if ym==0 then + table.insert(nodeboxes, {-b,-a,-b, b,-b,b}) + end + if xp==0 then + table.insert(nodeboxes, {b,b,b,a,-b,-b}) + end + if xm==0 then + table.insert(nodeboxes, {-a,-b,-b,-b,b,b}) + end + if zp==0 then + table.insert(nodeboxes, {-b,-b,b, b,b,a}) + end + if zm==0 then + table.insert(nodeboxes, {-b,-b,-a, b,b,-b}) + end + + local nameext=tostring(xm)..tostring(xp)..tostring(ym)..tostring(yp)..tostring(zm)..tostring(zp) + local groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2} + if nameext~="111111" then groups.not_in_creative_inventory=1 end + + + minetest.register_node("technic:frame_"..nameext,{ + description = S("Frame"), + tiles = {"technic_frame.png"}, + groups=groups, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed=nodeboxes, + }, + selection_box = { + type="fixed", + fixed={-0.5,-0.5,-0.5,0.5,0.5,0.5} + }, + paramtype = "light", + frame=1, + drop="technic:frame_111111", + sunlight_propagates = true, + frame_connect_all=function(nodename) + l2={} + l1={{x=-1,y=0,z=0},{x=1,y=0,z=0},{x=0,y=-1,z=0},{x=0,y=1,z=0},{x=0,y=0,z=-1},{x=0,y=0,z=1}} + for i,dir in ipairs(l1) do + if string.sub(nodename,-7+i,-7+i)=="1" then + l2[#(l2)+1]=dir + end + end + return l2 + end, + on_punch=function(pos,node,puncher) + local ppos=puncher:getpos() + local pvect=puncher:get_look_dir() + local pface=get_face(pos,ppos,pvect) + if pface==nil then return end + local nodename=node.name + local newstate=tostring(1-tonumber(string.sub(nodename,-7+pface,-7+pface))) + if pface<=5 then + nodename=string.sub(nodename,1,-7+pface-1)..newstate..string.sub(nodename,-7+pface+1) + else + nodename=string.sub(nodename,1,-2)..newstate + end + node.name=nodename + minetest.set_node(pos,node) + end, + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + if minetest.is_protected(pos, placer:get_player_name()) then + minetest.log("action", placer:get_player_name() + .. " tried to place " .. itemstack:get_name() + .. " at protected position " + .. minetest.pos_to_string(pos)) + minetest.record_protection_violation(pos, placer:get_player_name()) + return itemstack + end + if pos == nil then return end + local node = minetest.get_node(pos) + if node.name ~= "air" then + if is_supported_node(node.name) then + obj = minetest.add_entity(pos, "technic:frame_entity") + obj:get_luaentity():set_node({name=itemstack:get_name()}) + end + else + minetest.set_node(pos, {name = itemstack:get_name()}) + end + if not infinite_stacks then + itemstack:take_item() + end + return itemstack + end, + on_rightclick = function(pos, node, placer, itemstack, pointed_thing) + if is_supported_node(itemstack:get_name()) then + if minetest.is_protected(pos, placer:get_player_name()) then + minetest.log("action", placer:get_player_name() + .. " tried to place " .. itemstack:get_name() + .. " at protected position " + .. minetest.pos_to_string(pos)) + minetest.record_protection_violation(pos, placer:get_player_name()) + return itemstack + end + + minetest.set_node(pos, {name = itemstack:get_name()}) + + local take_item = true + local def = minetest.registered_items[itemstack:get_name()] + -- Run callback + if def.after_place_node then + -- Copy place_to because callback can modify it + local pos_copy = {x=pos.x, y=pos.y, z=pos.z} + if def.after_place_node(pos_copy, placer, itemstack) then + take_item = false + end + end + + -- Run script hook + local _, callback + for _, callback in ipairs(minetest.registered_on_placenodes) do + -- Copy pos and node because callback can modify them + local pos_copy = {x=pos.x, y=pos.y, z=pos.z} + local newnode_copy = {name=def.name, param1=0, param2=0} + local oldnode_copy = {name="air", param1=0, param2=0} + if callback(pos_copy, newnode_copy, placer, oldnode_copy, itemstack) then + take_item = false + end + end + + if take_item then + itemstack:take_item() + end + + obj = minetest.add_entity(pos, "technic:frame_entity") + obj:get_luaentity():set_node({name=node.name}) + + return itemstack + else + --local pointed_thing = {type = "node", under = pos} + if pointed_thing then + return minetest.item_place_node(itemstack, placer, pointed_thing) + end + end + end, + }) + +end +end +end +end +end +end + +minetest.register_entity("technic:frame_entity", { + initial_properties = { + physical = true, + collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, + visual = "wielditem", + textures = {}, + visual_size = {x=0.667, y=0.667}, + }, + + node = {}, + + set_node = function(self, node) + self.node = node + local pos = self.object:getpos() + pos = {x = math.floor(pos.x+0.5), y = math.floor(pos.y+0.5), z = math.floor(pos.z+0.5)} + frames_pos[pos_to_string(pos)] = node.name + local stack = ItemStack(node.name) + local itemtable = stack:to_table() + local itemname = nil + if itemtable then + itemname = stack:to_table().name + end + local item_texture = nil + local item_type = "" + if minetest.registered_items[itemname] then + item_texture = minetest.registered_items[itemname].inventory_image + item_type = minetest.registered_items[itemname].type + end + prop = { + is_visible = true, + textures = {node.name}, + } + self.object:set_properties(prop) + end, + + get_staticdata = function(self) + return self.node.name + end, + + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal=1}) + self:set_node({name=staticdata}) + end, + + dig = function(self) + minetest.handle_node_drops(self.object:getpos(), {ItemStack("technic:frame_111111")}, self.last_puncher) + local pos = self.object:getpos() + pos = {x = math.floor(pos.x+0.5), y = math.floor(pos.y+0.5), z = math.floor(pos.z+0.5)} + frames_pos[pos_to_string(pos)] = nil + self.object:remove() + end, + + on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir) + local pos = self.object:getpos() + if self.damage_object == nil then + self.damage_object = minetest.add_entity(pos, "technic:damage_entity") + self.damage_object:get_luaentity().remaining_time = 0.25 + self.damage_object:get_luaentity().frame_object = self + self.damage_object:get_luaentity().texture_index = 0 + self.damage_object:get_luaentity().texture_change_time = 0.15 + else + self.damage_object:get_luaentity().remaining_time = 0.25 + end + self.last_puncher = puncher + local ppos = puncher:getpos() + local pvect = puncher:get_look_dir() + local pface = get_face(pos,ppos,pvect) + if pface == nil then return end + local nodename = self.node.name + local newstate = tostring(1-tonumber(string.sub(nodename, -7+pface, -7+pface))) + if pface <= 5 then + nodename = string.sub(nodename, 1, -7+pface-1)..newstate..string.sub(nodename, -7+pface+1) + else + nodename = string.sub(nodename, 1, -2)..newstate + end + self.node.name = nodename + self:set_node(self.node) + end, + + on_rightclick = function(self, clicker) + local pos = self.object:getpos() + local ppos = clicker:getpos() + local pvect = clicker:get_look_dir() + local pface = get_face(pos, ppos, pvect) + if pface == nil then return end + local pos_under = {x = math.floor(pos.x+0.5), y = math.floor(pos.y+0.5), z = math.floor(pos.z+0.5)} + local pos_above = {x = pos_under.x, y = pos_under.y, z = pos_under.z} + local index = ({"x", "y", "z"})[math.floor((pface+1)/2)] + pos_above[index] = pos_above[index] + 2*((pface+1)%2) - 1 + local pointed_thing = {type = "node", under = pos_under, above = pos_above} + local itemstack = clicker:get_wielded_item() + local itemdef = minetest.registered_items[itemstack:get_name()] + if itemdef ~= nil then + itemdef.on_place(itemstack, clicker, pointed_thing) + end + end, +}) + +local crack = "crack_anylength.png^[verticalframe:5:0" +minetest.register_entity("technic:damage_entity", { + initial_properties = { + visual = "cube", + visual_size = {x=1.01, y=1.01}, + textures = {crack, crack, crack, crack, crack, crack}, + collisionbox = {0, 0, 0, 0, 0, 0}, + physical = false, + }, + on_step = function(self, dtime) + if self.remaining_time == nil then + self.object:remove() + self.frame_object.damage_object = nil + end + self.remaining_time = self.remaining_time - dtime + if self.remaining_time < 0 then + self.object:remove() + self.frame_object.damage_object = nil + end + self.texture_change_time = self.texture_change_time - dtime + if self.texture_change_time < 0 then + self.texture_change_time = self.texture_change_time + 0.15 + self.texture_index = self.texture_index + 1 + if self.texture_index == 5 then + self.object:remove() + self.frame_object.damage_object = nil + self.frame_object:dig() + end + local ct = "crack_anylength.png^[verticalframe:5:"..self.texture_index + self.object:set_properties({textures = {ct, ct, ct, ct, ct, ct}}) + end + end, +}) + +mesecon.register_mvps_unmov("technic:frame_entity") +mesecon.register_mvps_unmov("technic:damage_entity") +mesecon.register_on_mvps_move(function(moved_nodes) + local to_move = {} + for _, n in ipairs(moved_nodes) do + if frames_pos[pos_to_string(n.oldpos)] ~= nil then + to_move[#to_move+1] = {pos = n.pos, oldpos = n.oldpos, name = frames_pos[pos_to_string(n.oldpos)]} + frames_pos[pos_to_string(n.oldpos)] = nil + end + end + if #to_move > 0 then + for _, t in ipairs(to_move) do + frames_pos[pos_to_string(t.pos)] = t.name + local objects = minetest.get_objects_inside_radius(t.oldpos, 0.1) + for _, obj in ipairs(objects) do + local entity = obj:get_luaentity() + if entity and (entity.name == "technic:frame_entity" or entity.name == "technic:damage_entity") then + obj:setpos(t.pos) + end + end + end + end +end) + +minetest.register_on_dignode(function(pos, node) + if frames_pos[pos_to_string(pos)] ~= nil then + minetest.set_node(pos, {name = frames_pos[pos_to_string(pos)]}) + frames_pos[pos_to_string(pos)] = nil + local objects = minetest.get_objects_inside_radius(pos, 0.1) + for _, obj in ipairs(objects) do + local entity = obj:get_luaentity() + if entity and (entity.name == "technic:frame_entity" or entity.name == "technic:damage_entity") then + obj:remove() + end + end + end +end) + +-- Frame motor +local function connected(pos,c,adj) + for _,vect in ipairs(adj) do + local pos1=vector.add(pos,vect) + local nodename=minetest.get_node(pos1).name + if frames_pos[pos_to_string(pos1)] then + nodename = frames_pos[pos_to_string(pos1)] + end + if not(pos_in_list(c,pos1)) and nodename~="air" and + (minetest.registered_nodes[nodename].frames_can_connect==nil or + minetest.registered_nodes[nodename].frames_can_connect(pos1,vect)) then + c[#(c)+1]=pos1 + if minetest.registered_nodes[nodename].frame==1 then + local adj=minetest.registered_nodes[nodename].frame_connect_all(nodename) + connected(pos1,c,adj) + end + end + end +end + +local function get_connected_nodes(pos) + c={pos} + local nodename=minetest.get_node(pos).name + if frames_pos[pos_to_string(pos)] then + nodename = frames_pos[pos_to_string(pos)] + end + connected(pos,c,minetest.registered_nodes[nodename].frame_connect_all(nodename)) + return c +end + +local function frame_motor_on(pos, node) + local dirs = {{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}} + local nnodepos = vector.add(pos, dirs[math.floor(node.param2/4)+1]) + local dir = minetest.facedir_to_dir(node.param2) + local nnode=minetest.get_node(nnodepos) + if frames_pos[pos_to_string(nnodepos)] then + nnode.name = frames_pos[pos_to_string(nnodepos)] + end + local meta = minetest.get_meta(pos) + if meta:get_int("last_moved") == minetest.get_gametime() then + return + end + local owner = meta:get_string("owner") + if minetest.registered_nodes[nnode.name].frame==1 then + local connected_nodes=get_connected_nodes(nnodepos) + move_nodes_vect(connected_nodes,dir,pos,owner) + end + minetest.get_meta(vector.add(pos, dir)):set_int("last_moved", minetest.get_gametime()) +end + +minetest.register_node("technic:frame_motor",{ + description = S("Frame Motor"), + tiles = {"pipeworks_filter_top.png^[transformR90", "technic_lv_cable.png", "technic_lv_cable.png", + "technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2}, + paramtype2 = "facedir", + mesecons={effector={action_on=frame_motor_on}}, + after_place_node = function(pos, placer, itemstack) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name()) + end, + frames_can_connect=function(pos,dir) + local node = minetest.get_node(pos) + local dir2 = ({{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}})[math.floor(node.param2/4)+1] + return dir2.x~=-dir.x or dir2.y~=-dir.y or dir2.z~=-dir.z + end +}) + + + +-- Templates +local function template_connected(pos,c,connectors) + for _,vect in ipairs({{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}}) do + local pos1=vector.add(pos,vect) + local nodename=minetest.get_node(pos1).name + if not(pos_in_list(c,pos1)) and (nodename=="technic:template" or nodename == "technic:template_connector")then + local meta = minetest.get_meta(pos1) + if meta:get_string("connected") == "" then + c[#(c)+1]=pos1 + template_connected(pos1,c,connectors) + if nodename == "technic:template_connector" then + connectors[#connectors+1] = pos1 + end + end + end + end +end + +local function get_templates(pos) + local c = {pos} + local connectors + if minetest.get_node(pos).name == "technic:template_connector" then + connectors = {pos} + else + connectors = {} + end + template_connected(pos,c,connectors) + return c, connectors +end + +local function swap_template(pos, new) + local meta = minetest.get_meta(pos) + local saved_node = meta:get_string("saved_node") + meta:set_string("saved_node", "") + technic.swap_node(pos, new) + local meta = minetest.get_meta(pos) + meta:set_string("saved_node", saved_node) +end + +local function save_node(pos) + local node = minetest.get_node(pos) + if node.name == "air" then + minetest.set_node(pos, {name="technic:template"}) + return + end + if node.name == "technic:template" then + swap_template(pos, "technic:template_connector") + local meta = minetest.get_meta(pos) + meta:set_string("connected", "") + return + end + local meta = minetest.get_meta(pos) + local meta0 = meta:to_table() + for _, list in pairs(meta0.inventory) do + for key, stack in pairs(list) do + list[key] = stack:to_string() + end + end + node.meta = meta0 + minetest.set_node(pos, {name="technic:template"}) + return node +end + +local function restore_node(pos, node) + minetest.set_node(pos, node) + local meta = minetest.get_meta(pos) + for _, list in pairs(node.meta.inventory) do + for key, stack in pairs(list) do + list[key] = ItemStack(stack) + end + end + meta:from_table(node.meta) +end + +local function expand_template(pos) + local meta = minetest.get_meta(pos) + local c = meta:get_string("connected") + if c == "" then return end + c = minetest.deserialize(c) + for _, vect in ipairs(c) do + local pos1 = vector.add(pos, vect) + local saved_node = save_node(pos1) + local meta1 = minetest.get_meta(pos1) + if saved_node ~= nil then + meta1:set_string("saved_node", minetest.serialize(saved_node)) + else + --meta1:set_string("saved_node", "") + end + end +end + +local function compress_templates(pos) + local templates, connectors = get_templates(pos) + if #connectors == 0 then + connectors = {pos} + end + for _, cn in ipairs(connectors) do + local meta = minetest.get_meta(cn) + local c = {} + for _,p in ipairs(templates) do + local np = vector.subtract(p, cn) + if not pos_in_list(c,np) then + c[#c+1] = np + end + end + local cc = {} + for _,p in ipairs(connectors) do + local np = vector.subtract(p, cn) + if (np.x ~= 0 or np.y ~= 0 or np.z ~= 0) then + cc[pos_to_string(np)] = true + end + end + swap_template(cn, "technic:template") + meta:set_string("connected", minetest.serialize(c)) + meta:set_string("connectors_connected", minetest.serialize(cc)) + end + + for _,p in ipairs(templates) do + if not pos_in_list(connectors, p) then + minetest.set_node(p, {name = "air"}) + end + end +end + +local function template_drops(pos, node, oldmeta, digger) + local c = oldmeta.fields.connected + local cc = oldmeta.fields.connectors_connected + local drops + if c == "" or c == nil then + drops = {"technic:template 1"} + else + if cc == "" or cc == nil then + drops = {"technic:template 1"} + else + local dcc = minetest.deserialize(cc) + if not table_empty(dcc) then + drops = {} + for sp, _ in pairs(dcc) do + local ssp = pos_from_string(sp) + local p = vector.add(ssp, pos) + local meta = minetest.get_meta(p) + local d = minetest.deserialize(meta:get_string("connectors_connected")) + if d ~= nil then + d[pos_to_string({x=-ssp.x, y=-ssp.y, z=-ssp.z})] = nil + meta:set_string("connectors_connected", minetest.serialize(d)) + end + end + else + local stack_max = 99 + local num = #(minetest.deserialize(c)) + drops = {} + while num > stack_max do + drops[#drops+1] = "technic:template "..stack_max + num = num - stack_max + end + drops[#drops+1] = "technic:template "..num + end + end + end + minetest.handle_node_drops(pos, drops, digger) +end + +local function template_on_destruct(pos, node) + local meta = minetest.get_meta(pos) + local saved_node = meta:get_string("saved_node") + if saved_node ~= "" then + local nnode = minetest.deserialize(saved_node) + minetest.after(0, restore_node, pos, nnode) + end +end + +minetest.register_node("technic:template",{ + description = S("Template"), + tiles = {"technic_mv_cable.png"}, + drop = "", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + on_destruct = template_on_destruct, + after_dig_node = template_drops, + on_punch = function(pos,node,puncher) + swap_template(pos, "technic:template_disabled") + end +}) + +minetest.register_node("technic:template_disabled",{ + description = S("Template"), + tiles = {"technic_hv_cable.png"}, + drop = "", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1}, + on_destruct = template_on_destruct, + after_dig_node = template_drops, + on_punch = function(pos,node,puncher) + local meta = minetest.get_meta(pos) + swap_template(pos, "technic:template_connector") + end +}) + +minetest.register_node("technic:template_connector",{ + description = S("Template"), + tiles = {"technic_lv_cable.png"}, + drop = "", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1}, + on_destruct = template_on_destruct, + after_dig_node = template_drops, + on_punch = function(pos,node,puncher) + swap_template(pos, "technic:template") + end +}) + +minetest.register_craftitem("technic:template_replacer",{ + description = S("Template (replacing)"), + inventory_image = "technic_template_replacer.png", + on_place = function(itemstack, placer, pointed_thing) + local p = pointed_thing.under + if minetest.is_protected and minetest.is_protected(p, placer:get_player_name()) then + return nil + end + local node = minetest.get_node(p) + if node.name == "technic:template" then return end + local saved_node = save_node(p) + itemstack:take_item() + if saved_node ~= nil then + local meta = minetest.get_meta(p) + meta:set_string("saved_node", minetest.serialize(saved_node)) + end + return itemstack + end +}) + +minetest.register_tool("technic:template_tool",{ + description = S("Template Tool"), + inventory_image = "technic_template_tool.png", + on_use = function(itemstack, puncher, pointed_thing) + local pos = pointed_thing.under + if pos == nil or (minetest.is_protected and minetest.is_protected(pos, puncher:get_player_name())) then + return nil + end + local node = minetest.get_node(pos) + if node.name ~= "technic:template" and node.name ~= "technic:template_connector" then return end + local meta = minetest.get_meta(pos) + local c2 = meta:get_string("connected") + if c2 ~= "" then + expand_template(pos) + else + compress_templates(pos) + end + + end +}) + + + +-- Template motor +local function get_template_nodes(pos) + local meta = minetest.get_meta(pos) + local connected = meta:get_string("connected") + if connected == "" then return {} end + local adj = minetest.deserialize(connected) + local c = {} + for _,vect in ipairs(adj) do + local pos1=vector.add(pos,vect) + local nodename=minetest.get_node(pos1).name + if not(pos_in_list(c,pos1)) and nodename~="air" then + c[#(c)+1]=pos1 + end + end + return c +end + +local function template_motor_on(pos, node) + local dirs = {{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}} + local nnodepos = vector.add(pos, dirs[math.floor(node.param2/4)+1]) + local dir = minetest.facedir_to_dir(node.param2) + local nnode=minetest.get_node(nnodepos) + local meta = minetest.get_meta(pos) + if meta:get_int("last_moved") == minetest.get_gametime() then + return + end + local owner = meta:get_string("owner") + if nnode.name == "technic:template" then + local connected_nodes=get_template_nodes(nnodepos) + move_nodes_vect(connected_nodes,dir,pos,owner) + end + minetest.get_meta(vector.add(pos, dir)):set_int("last_moved", minetest.get_gametime()) +end + +minetest.register_node("technic:template_motor",{ + description = S("Template Motor"), + tiles = {"pipeworks_filter_top.png^[transformR90", "technic_lv_cable.png", "technic_lv_cable.png", + "technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2}, + paramtype2 = "facedir", + mesecons={effector={action_on=template_motor_on}}, + after_place_node = function(pos, placer, itemstack) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name()) + end, +}) + +-- Crafts +minetest.register_craft({ + output = 'technic:frame_111111', + recipe = { + {'', 'default:stick', ''}, + {'default:stick', 'technic:brass_ingot', 'default:stick'}, + {'', 'default:stick', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:frame_motor', + recipe = { + {'', 'technic:frame_111111', ''}, + {'group:mesecon_conductor_craftable', 'technic:motor', 'group:mesecon_conductor_craftable'}, + {'', 'technic:frame_111111', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:template 10', + recipe = { + {'', 'technic:brass_ingot', ''}, + {'technic:brass_ingot', 'default:mese_crystal', 'technic:brass_ingot'}, + {'', 'technic:brass_ingot', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:template_replacer', + recipe = {{'technic:template'}} +}) + +minetest.register_craft({ + output = 'technic:template', + recipe = {{'technic:template_replacer'}} +}) + +minetest.register_craft({ + output = 'technic:template_motor', + recipe = { + {'', 'technic:template', ''}, + {'group:mesecon_conductor_craftable', 'technic:motor', 'group:mesecon_conductor_craftable'}, + {'', 'technic:template', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:template_tool', + recipe = { + {'', 'technic:template', ''}, + {'default:mese_crystal', 'default:stick', 'default:mese_crystal'}, + {'', 'default:stick', ''}, + } +}) diff --git a/mods/ITEMS/technic/technic/machines/other/init.lua b/mods/technic/technic/machines/other/init.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/other/init.lua rename to mods/technic/technic/machines/other/init.lua diff --git a/mods/technic/technic/machines/other/injector.lua b/mods/technic/technic/machines/other/injector.lua new file mode 100755 index 0000000..b34dd79 --- /dev/null +++ b/mods/technic/technic/machines/other/injector.lua @@ -0,0 +1,151 @@ + +local S = technic.getter + +local fs_helpers = pipeworks.fs_helpers + +local tube_entry = "^pipeworks_tube_connection_metallic.png" + +local function inject_items (pos) + local meta=minetest.get_meta(pos) + local inv = meta:get_inventory() + local mode=meta:get_string("mode") + if mode=="single items" then + local i=0 + for _,stack in ipairs(inv:get_list("main")) do + i=i+1 + if stack then + local item0=stack:to_table() + if item0 then + item0["count"] = "1" + technic.tube_inject_item(pos, pos, vector.new(0, -1, 0), item0) + stack:take_item(1) + inv:set_stack("main", i, stack) + return + end + end + end + end + if mode=="whole stacks" then + local i=0 + for _,stack in ipairs(inv:get_list("main")) do + i=i+1 + if stack then + local item0=stack:to_table() + if item0 then + technic.tube_inject_item(pos, pos, vector.new(0, -1, 0), item0) + stack:clear() + inv:set_stack("main", i, stack) + return + end + end + end + end + +end + +minetest.register_craft({ + output = 'technic:injector 1', + recipe = { + {'', 'technic:control_logic_unit',''}, + {'', 'default:chest',''}, + {'', 'pipeworks:tube_1',''}, + } +}) + +local function set_injector_formspec(meta) + local is_stack = meta:get_string("mode") == "whole stacks" + meta:set_string("formspec", + "invsize[8,9;]".. + "item_image[0,0;1,1;technic:injector]".. + "label[1,0;"..S("Self-Contained Injector").."]".. + (is_stack and + "button[0,1;2,1;mode_item;"..S("Stackwise").."]" or + "button[0,1;2,1;mode_stack;"..S("Itemwise").."]").. + "list[current_name;main;0,2;8,2;]".. + "list[current_player;main;0,5;8,4;]".. + "listring[]".. + fs_helpers.cycling_button( + meta, + pipeworks.button_base, + "splitstacks", + { + pipeworks.button_off, + pipeworks.button_on + } + )..pipeworks.button_label + ) +end + +minetest.register_node("technic:injector", { + description = S("Self-Contained Injector"), + tiles = { + "technic_injector_top.png"..tube_entry, + "technic_injector_bottom.png", + "technic_injector_side.png"..tube_entry, + "technic_injector_side.png"..tube_entry, + "technic_injector_side.png"..tube_entry, + "technic_injector_side.png" + }, + paramtype2 = "facedir", + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice=1, tubedevice_receiver=1}, + tube = { + can_insert = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if meta:get_int("splitstacks") == 1 then + stack = stack:peek_item(1) + end + return meta:get_inventory():room_for_item("main", stack) + end, + insert_object = function(pos, node, stack, direction) + return minetest.get_meta(pos):get_inventory():add_item("main", stack) + end, + connect_sides = {left=1, right=1, back=1, top=1, bottom=1}, + }, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Self-Contained Injector")) + local inv = meta:get_inventory() + inv:set_size("main", 8*2) + meta:set_string("mode","single items") + set_injector_formspec(meta) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_receive_fields = function(pos, formanme, fields, sender) + local meta = minetest.get_meta(pos) + if fields.mode_item then meta:set_string("mode", "single items") end + if fields.mode_stack then meta:set_string("mode", "whole stacks") end + + if fields["fs_helpers_cycling:0:splitstacks"] + or fields["fs_helpers_cycling:1:splitstacks"] then + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + end + set_injector_formspec(meta) + end, + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + allow_metadata_inventory_move = technic.machine_inventory_move, + after_place_node = pipeworks.after_place, + after_dig_node = pipeworks.after_dig +}) + +minetest.register_abm({ + label = "Machines: run injector", + nodenames = {"technic:injector"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local pos1 = vector.add(pos, vector.new(0, -1, 0)) + local node1 = minetest.get_node(pos1) + if minetest.get_item_group(node1.name, "tubedevice") > 0 then + inject_items(pos) + end + end, +}) + diff --git a/mods/ITEMS/technic/technic/machines/power_monitor.lua b/mods/technic/technic/machines/power_monitor.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/power_monitor.lua rename to mods/technic/technic/machines/power_monitor.lua diff --git a/mods/ITEMS/technic/technic/machines/register/alloy_furnace.lua b/mods/technic/technic/machines/register/alloy_furnace.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/alloy_furnace.lua rename to mods/technic/technic/machines/register/alloy_furnace.lua diff --git a/mods/technic/technic/machines/register/alloy_recipes.lua b/mods/technic/technic/machines/register/alloy_recipes.lua new file mode 100755 index 0000000..bd09bd6 --- /dev/null +++ b/mods/technic/technic/machines/register/alloy_recipes.lua @@ -0,0 +1,35 @@ + +local S = technic.getter + +technic.register_recipe_type("alloy", { + description = S("Alloying"), + input_size = 2, +}) + +function technic.register_alloy_recipe(data) + data.time = data.time or 6 + technic.register_recipe("alloy", data) +end + +local recipes = { + {"technic:copper_dust 3", "technic:tin_dust", "technic:bronze_dust 4"}, + {"default:copper_ingot 3", "moreores:tin_ingot", "default:bronze_ingot 4"}, + {"technic:wrought_iron_dust", "technic:coal_dust", "technic:carbon_steel_dust", 3}, + {"technic:wrought_iron_ingot", "technic:coal_dust", "technic:carbon_steel_ingot", 3}, + {"technic:carbon_steel_dust", "technic:coal_dust", "technic:cast_iron_dust", 3}, + {"technic:carbon_steel_ingot", "technic:coal_dust", "technic:cast_iron_ingot", 3}, + {"technic:carbon_steel_dust 3", "technic:chromium_dust", "technic:stainless_steel_dust 4"}, + {"technic:carbon_steel_ingot 3", "technic:chromium_ingot", "technic:stainless_steel_ingot 4"}, + {"technic:copper_dust 2", "technic:zinc_dust", "technic:brass_dust 3"}, + {"default:copper_ingot 2", "technic:zinc_ingot", "technic:brass_ingot 3"}, + {"default:sand 2", "technic:coal_dust 2", "technic:silicon_wafer"}, + {"technic:silicon_wafer", "technic:gold_dust", "technic:doped_silicon_wafer"}, + -- from https://en.wikipedia.org/wiki/Carbon_black + -- The highest volume use of carbon black is as a reinforcing filler in rubber products, especially tires. + -- "[Compounding a] pure gum vulcanizate … with 50% of its weight of carbon black improves its tensile strength and wear resistance …" + {"technic:raw_latex 4", "technic:coal_dust 2", "technic:rubber 6", 2}, +} + +for _, data in pairs(recipes) do + technic.register_alloy_recipe({input = {data[1], data[2]}, output = data[3], time = data[4]}) +end diff --git a/mods/technic/technic/machines/register/battery_box.lua b/mods/technic/technic/machines/register/battery_box.lua new file mode 100755 index 0000000..84e992c --- /dev/null +++ b/mods/technic/technic/machines/register/battery_box.lua @@ -0,0 +1,484 @@ + +local digilines_path = minetest.get_modpath("digilines") + +local S = technic.getter +local tube_entry = "^pipeworks_tube_connection_metallic.png" +local cable_entry = "^technic_cable_connection_overlay.png" + +local fs_helpers = pipeworks.fs_helpers + +technic.register_power_tool("technic:battery", 10000) +technic.register_power_tool("technic:red_energy_crystal", 50000) +technic.register_power_tool("technic:green_energy_crystal", 150000) +technic.register_power_tool("technic:blue_energy_crystal", 450000) + +-- Battery recipes: +-- Tin-copper recipe: +minetest.register_craft({ + output = "technic:battery", + recipe = { + {"group:wood", "default:copper_ingot", "group:wood"}, + {"group:wood", "moreores:tin_ingot", "group:wood"}, + {"group:wood", "default:copper_ingot", "group:wood"}, + } +}) +-- Sulfur-lead-water recipes: +-- With sulfur lumps: +-- With water: +minetest.register_craft({ + output = "technic:battery", + recipe = { + {"group:wood", "technic:sulfur_lump", "group:wood"}, + {"technic:lead_ingot", "bucket:bucket_water", "technic:lead_ingot"}, + {"group:wood", "technic:sulfur_lump", "group:wood"}, + }, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"} + } +}) +-- With oil extract: +minetest.register_craft({ + output = "technic:battery", + recipe = { + {"group:wood", "technic:sulfur_lump", "group:wood"}, + {"technic:lead_ingot", "homedecor:oil_extract", "technic:lead_ingot"}, + {"group:wood", "technic:sulfur_lump", "group:wood"}, + } +}) +-- With sulfur dust: +-- With water: +minetest.register_craft({ + output = "technic:battery", + recipe = { + {"group:wood", "technic:sulfur_dust", "group:wood"}, + {"technic:lead_ingot", "bucket:bucket_water", "technic:lead_ingot"}, + {"group:wood", "technic:sulfur_dust", "group:wood"}, + }, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"} + } +}) +-- With oil extract: +minetest.register_craft({ + output = "technic:battery", + recipe = { + {"group:wood", "technic:sulfur_dust", "group:wood"}, + {"technic:lead_ingot", "homedecor:oil_extract", "technic:lead_ingot"}, + {"group:wood", "technic:sulfur_dust", "group:wood"}, + } +}) + +minetest.register_tool("technic:battery", { + description = S("RE Battery"), + inventory_image = "technic_battery.png", + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + tool_capabilities = { + charge = 0, + max_drop_level = 0, + groupcaps = { + fleshy = {times={}, uses=10000, maxlevel=0} + } + } +}) + +-- x+2 + (z+2)*2 +local dirtab = { + [4] = 2, + [5] = 3, + [7] = 1, + [8] = 0 +} + +local tube = { + insert_object = function(pos, node, stack, direction) + print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2) + if direction.y == 1 + or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then + return stack + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if direction.y == 0 then + return inv:add_item("src", stack) + else + return inv:add_item("dst", stack) + end + end, + can_insert = function(pos, node, stack, direction) + print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2) + if direction.y == 1 + or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then + return false + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if direction.y == 0 then + if meta:get_int("split_src_stacks") == 1 then + stack = stack:peek_item(1) + end + return inv:room_for_item("src", stack) + else + if meta:get_int("split_dst_stacks") == 1 then + stack = stack:peek_item(1) + end + return inv:room_for_item("dst", stack) + end + end, + connect_sides = {left=1, right=1, back=1, top=1}, +} + +local function add_on_off_buttons(meta, ltier, charge_percent) + local formspec = "" + if ltier == "mv" or ltier == "hv" then + formspec = "image[1,1;1,2;technic_power_meter_bg.png" + .."^[lowpart:"..charge_percent + ..":technic_power_meter_fg.png]".. + fs_helpers.cycling_button( + meta, + "image_button[3,2.0;1,0.6", + "split_src_stacks", + { + pipeworks.button_off, + pipeworks.button_on + } + ).."label[3.9,2.01;Allow splitting incoming 'charge' stacks from tubes]".. + fs_helpers.cycling_button( + meta, + "image_button[3,2.5;1,0.6", + "split_dst_stacks", + { + pipeworks.button_off, + pipeworks.button_on + } + ).."label[3.9,2.51;Allow splitting incoming 'discharge' stacks]" + end + return formspec +end + +function technic.register_battery_box(data) + local tier = data.tier + local ltier = string.lower(tier) + + local formspec = + "size[8,9]".. + "image[1,1;1,2;technic_power_meter_bg.png]".. + "list[context;src;3,1;1,1;]".. + "image[4,1;1,1;technic_battery_reload.png]".. + "list[context;dst;5,1;1,1;]".. + "label[0,0;"..S("%s Battery Box"):format(tier).."]".. + "label[3,0;"..S("Charge").."]".. + "label[5,0;"..S("Discharge").."]".. + "label[1,3;"..S("Power level").."]".. + "list[current_player;main;0,5;8,4;]".. + "listring[context;dst]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]" + + if digilines_path then + formspec = formspec.."button[0.6,3.7;2,1;edit_channel;edit Channel]" + end + + if data.upgrade then + formspec = formspec.. + "list[context;upgrade1;3.5,3;1,1;]".. + "list[context;upgrade2;4.5,3;1,1;]".. + "label[3.5,4;"..S("Upgrade Slots").."]".. + "listring[context;upgrade1]".. + "listring[current_player;main]".. + "listring[context;upgrade2]".. + "listring[current_player;main]" + end + + local run = function(pos, node) + local below = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) + local meta = minetest.get_meta(pos) + + if not technic.is_tier_cable(below.name, tier) then + meta:set_string("infotext", S("%s Battery Box Has No Network"):format(tier)) + return + end + + local eu_input = meta:get_int(tier.."_EU_input") + local current_charge = meta:get_int("internal_EU_charge") + + local EU_upgrade, tube_upgrade = 0, 0 + if data.upgrade then + EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) + end + local max_charge = data.max_charge * (1 + EU_upgrade / 10) + + -- Charge/discharge the battery with the input EUs + if eu_input >= 0 then + current_charge = math.min(current_charge + eu_input, max_charge) + else + current_charge = math.max(current_charge + eu_input, 0) + end + + -- Charging/discharging tools here + local tool_full, tool_empty + current_charge, tool_full = technic.charge_tools(meta, + current_charge, data.charge_step) + current_charge, tool_empty = technic.discharge_tools(meta, + current_charge, data.discharge_step, + max_charge) + + if data.tube then + local inv = meta:get_inventory() + technic.handle_machine_pipeworks(pos, tube_upgrade, + function(pos, x_velocity, z_velocity) + if tool_full and not inv:is_empty("src") then + technic.send_items(pos, x_velocity, z_velocity, "src") + elseif tool_empty and not inv:is_empty("dst") then + technic.send_items(pos, x_velocity, z_velocity, "dst") + end + end) + end + + -- We allow batteries to charge on less than the demand + meta:set_int(tier.."_EU_demand", + math.min(data.charge_rate, max_charge - current_charge)) + meta:set_int(tier.."_EU_supply", + math.min(data.discharge_rate, current_charge)) + meta:set_int("internal_EU_charge", current_charge) + + -- Select node textures + local charge_count = math.ceil((current_charge / max_charge) * 8) + charge_count = math.min(charge_count, 8) + charge_count = math.max(charge_count, 0) + local last_count = meta:get_float("last_side_shown") + if charge_count ~= last_count then + technic.swap_node(pos,"technic:"..ltier.."_battery_box"..charge_count) + meta:set_float("last_side_shown", charge_count) + end + + local charge_percent = math.floor(current_charge / max_charge * 100) + meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, charge_percent)) + local infotext = S("@1 Battery Box: @2/@3", tier, + technic.pretty_num(current_charge), technic.pretty_num(max_charge)) + if eu_input == 0 then + infotext = S("%s Idle"):format(infotext) + end + meta:set_string("infotext", infotext) + end + + for i = 0, 8 do + local groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + technic_machine=1, ["technic_"..ltier]=1} + if i ~= 0 then + groups.not_in_creative_inventory = 1 + end + + if data.tube then + groups.tubedevice = 1 + groups.tubedevice_receiver = 1 + end + + local top_tex = "technic_"..ltier.."_battery_box_top.png"..tube_entry + local front_tex = "technic_"..ltier.."_battery_box_front.png^technic_power_meter"..i..".png" + local side_tex = "technic_"..ltier.."_battery_box_side.png"..tube_entry + local bottom_tex = "technic_"..ltier.."_battery_box_bottom.png"..cable_entry + + if ltier == "lv" then + top_tex = "technic_"..ltier.."_battery_box_top.png" + front_tex = "technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png" + side_tex = "technic_"..ltier.."_battery_box_side.png^technic_power_meter"..i..".png" + end + + minetest.register_node("technic:"..ltier.."_battery_box"..i, { + description = S("%s Battery Box"):format(tier), + tiles = { + top_tex, + bottom_tex, + side_tex, + side_tex, + side_tex, + front_tex}, + groups = groups, + connect_sides = {"bottom"}, + tube = data.tube and tube or nil, + paramtype2 = "facedir", + sounds = default.node_sound_wood_defaults(), + drop = "technic:"..ltier.."_battery_box0", + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local EU_upgrade, tube_upgrade = 0, 0 + if data.upgrade then + EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) + end + local max_charge = data.max_charge * (1 + EU_upgrade / 10) + local charge = meta:get_int("internal_EU_charge") + local cpercent = math.floor(charge / max_charge * 100) + local inv = meta:get_inventory() + local node = minetest.get_node(pos) + meta:set_string("infotext", S("%s Battery Box"):format(tier)) + meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, cpercent)) + meta:set_string("channel", ltier.."_battery_box"..minetest.pos_to_string(pos)) + meta:set_int(tier.."_EU_demand", 0) + meta:set_int(tier.."_EU_supply", 0) + meta:set_int(tier.."_EU_input", 0) + meta:set_float("internal_EU_charge", 0) + inv:set_size("src", 1) + inv:set_size("dst", 1) + inv:set_size("upgrade1", 1) + inv:set_size("upgrade2", 1) + end, + can_dig = technic.machine_can_dig, + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + allow_metadata_inventory_move = technic.machine_inventory_move, + technic_run = run, + on_rotate = screwdriver.rotate_simple, + after_place_node = data.tube and pipeworks.after_place, + after_dig_node = technic.machine_after_dig_node, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + local nodename = minetest.get_node(pos).name + if fields.edit_channel then + minetest.show_formspec(sender:get_player_name(), + "technic:battery_box_edit_channel"..minetest.pos_to_string(pos), + "field[channel;Digiline Channel;"..meta:get_string("channel").."]") + elseif fields["fs_helpers_cycling:0:split_src_stacks"] + or fields["fs_helpers_cycling:0:split_dst_stacks"] + or fields["fs_helpers_cycling:1:split_src_stacks"] + or fields["fs_helpers_cycling:1:split_dst_stacks"] then + local meta = minetest.get_meta(pos) + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + local EU_upgrade, tube_upgrade = 0, 0 + if data.upgrade then + EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) + end + local max_charge = data.max_charge * (1 + EU_upgrade / 10) + local charge = meta:get_int("internal_EU_charge") + local cpercent = math.floor(charge / max_charge * 100) + meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, cpercent)) + end + end, + digiline = { + receptor = {action = function() end}, + effector = { + action = function(pos, node, channel, msg) + if msg ~= "GET" and msg ~= "get" then + return + end + local meta = minetest.get_meta(pos) + if channel ~= meta:get_string("channel") then + return + end + local inv = meta:get_inventory() + digilines.receptor_send(pos, digilines.rules.default, channel, { + demand = meta:get_int(tier.."_EU_demand"), + supply = meta:get_int(tier.."_EU_supply"), + input = meta:get_int(tier.."_EU_input"), + charge = meta:get_int("internal_EU_charge"), + max_charge = data.max_charge * (1 + technic.handle_machine_upgrades(meta) / 10), + src = inv:get_stack("src", 1):to_table(), + dst = inv:get_stack("dst", 1):to_table(), + upgrade1 = inv:get_stack("upgrade1", 1):to_table(), + upgrade2 = inv:get_stack("upgrade2", 1):to_table() + }) + end + }, + }, + }) + end + + -- Register as a battery type + -- Battery type machines function as power reservoirs and can both receive and give back power + for i = 0, 8 do + technic.register_machine(tier, "technic:"..ltier.."_battery_box"..i, technic.battery) + end + +end -- End registration + +minetest.register_on_player_receive_fields( + function(player, formname, fields) + if formname:sub(1, 32) ~= "technic:battery_box_edit_channel" or + not fields.channel then + return + end + local pos = minetest.string_to_pos(formname:sub(33)) + local plname = player:get_player_name() + if minetest.is_protected(pos, plname) then + minetest.record_protection_violation(pos, plname) + return + end + local meta = minetest.get_meta(pos) + meta:set_string("channel", fields.channel) + end +) + +function technic.charge_tools(meta, batt_charge, charge_step) + local inv = meta:get_inventory() + if inv:is_empty("src") then + return batt_charge, false + end + local src_stack = inv:get_stack("src", 1) + + local tool_name = src_stack:get_name() + if not technic.power_tools[tool_name] then + return batt_charge, false + end + -- Set meta data for the tool if it didn't do it itself + local src_meta = minetest.deserialize(src_stack:get_metadata()) or {} + if not src_meta.charge then + src_meta.charge = 0 + end + -- Do the charging + local item_max_charge = technic.power_tools[tool_name] + local tool_charge = src_meta.charge + if tool_charge >= item_max_charge then + return batt_charge, true + elseif batt_charge <= 0 then + return batt_charge, false + end + charge_step = math.min(charge_step, batt_charge) + charge_step = math.min(charge_step, item_max_charge - tool_charge) + tool_charge = tool_charge + charge_step + batt_charge = batt_charge - charge_step + technic.set_RE_wear(src_stack, tool_charge, item_max_charge) + src_meta.charge = tool_charge + src_stack:set_metadata(minetest.serialize(src_meta)) + inv:set_stack("src", 1, src_stack) + return batt_charge, (tool_charge == item_max_charge) +end + + +function technic.discharge_tools(meta, batt_charge, charge_step, max_charge) + local inv = meta:get_inventory() + if inv:is_empty("dst") then + return batt_charge, false + end + srcstack = inv:get_stack("dst", 1) + local toolname = srcstack:get_name() + if technic.power_tools[toolname] == nil then + return batt_charge, false + end + -- Set meta data for the tool if it didn't do it itself :-( + local src_meta = minetest.deserialize(srcstack:get_metadata()) + src_meta = src_meta or {} + if not src_meta.charge then + src_meta.charge = 0 + end + + -- Do the discharging + local item_max_charge = technic.power_tools[toolname] + local tool_charge = src_meta.charge + if tool_charge <= 0 then + return batt_charge, true + elseif batt_charge >= max_charge then + return batt_charge, false + end + charge_step = math.min(charge_step, max_charge - batt_charge) + charge_step = math.min(charge_step, tool_charge) + tool_charge = tool_charge - charge_step + batt_charge = batt_charge + charge_step + technic.set_RE_wear(srcstack, tool_charge, item_max_charge) + src_meta.charge = tool_charge + srcstack:set_metadata(minetest.serialize(src_meta)) + inv:set_stack("dst", 1, srcstack) + return batt_charge, (tool_charge == 0) +end + diff --git a/mods/ITEMS/technic/technic/machines/register/cables.lua b/mods/technic/technic/machines/register/cables.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/cables.lua rename to mods/technic/technic/machines/register/cables.lua diff --git a/mods/ITEMS/technic/technic/machines/register/centrifuge.lua b/mods/technic/technic/machines/register/centrifuge.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/centrifuge.lua rename to mods/technic/technic/machines/register/centrifuge.lua diff --git a/mods/ITEMS/technic/technic/machines/register/centrifuge_recipes.lua b/mods/technic/technic/machines/register/centrifuge_recipes.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/centrifuge_recipes.lua rename to mods/technic/technic/machines/register/centrifuge_recipes.lua diff --git a/mods/technic/technic/machines/register/common.lua b/mods/technic/technic/machines/register/common.lua new file mode 100755 index 0000000..dfa2948 --- /dev/null +++ b/mods/technic/technic/machines/register/common.lua @@ -0,0 +1,214 @@ + +local S = technic.getter + +-- handles the machine upgrades every tick +function technic.handle_machine_upgrades(meta) + -- Get the names of the upgrades + local inv = meta:get_inventory() + + local srcstack = inv:get_stack("upgrade1", 1) + local upg_item1 = srcstack and srcstack:get_name() + + srcstack = inv:get_stack("upgrade2", 1) + local upg_item2 = srcstack and srcstack:get_name() + + -- Save some power by installing battery upgrades. + -- Tube loading speed can be upgraded using control logic units. + local EU_upgrade = 0 + local tube_upgrade = 0 + + if upg_item1 == "technic:control_logic_unit" then + tube_upgrade = tube_upgrade + 1 + elseif upg_item1 == "technic:battery" then + EU_upgrade = EU_upgrade + 1 + end + + if upg_item2 == "technic:control_logic_unit" then + tube_upgrade = tube_upgrade + 1 + elseif upg_item2 == "technic:battery" then + EU_upgrade = EU_upgrade + 1 + end + + return EU_upgrade, tube_upgrade +end + +-- handles the machine upgrades when set or removed +local function on_machine_upgrade(meta, stack) + local stack_name = stack:get_name() + if stack_name == "default:chest" then + meta:set_int("public", 1) + return 1 + elseif stack_name ~= "technic:control_logic_unit" + and stack_name ~= "technic:battery" then + return 0 + end + return 1 +end + +-- something is about to be removed +local function on_machine_downgrade(meta, stack, list) + if stack:get_name() == "default:chest" then + local inv = meta:get_inventory() + local upg1, upg2 = inv:get_stack("upgrade1", 1), inv:get_stack("upgrade2", 1) + + -- only set 0 if theres not a nother chest in the other list too + if (not upg1 or not upg2 or upg1:get_name() ~= upg2:get_name()) then + meta:set_int("public", 0) + end + end + return 1 +end + + +function technic.send_items(pos, x_velocity, z_velocity, output_name) + -- Send items on their way in the pipe system. + if output_name == nil then + output_name = "dst" + end + + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local i = 0 + for _, stack in ipairs(inv:get_list(output_name)) do + i = i + 1 + if stack then + local item0 = stack:to_table() + if item0 then + item0["count"] = "1" + technic.tube_inject_item(pos, pos, vector.new(x_velocity, 0, z_velocity), item0) + stack:take_item(1) + inv:set_stack(output_name, i, stack) + return + end + end + end +end + + +function technic.smelt_item(meta, result, speed) + local inv = meta:get_inventory() + meta:set_int("cook_time", meta:get_int("cook_time") + 1) + if meta:get_int("cook_time") < result.time / speed then + return + end + local result + local afterfuel + result, afterfuel = minetest.get_craft_result({method = "cooking", width = 1, items = inv:get_list("src")}) + + if result and result.item then + meta:set_int("cook_time", 0) + -- check if there's room for output in "dst" list + if inv:room_for_item("dst", result.item) then + inv:set_stack("src", 1, afterfuel.items[1]) + inv:add_item("dst", result.item) + end + end +end + +function technic.handle_machine_pipeworks(pos, tube_upgrade, send_function) + if send_function == nil then + send_function = technic.send_items + end + + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local pos1 = vector.new(pos) + local x_velocity = 0 + local z_velocity = 0 + + -- Output is on the left side of the furnace + if node.param2 == 3 then pos1.z = pos1.z - 1 z_velocity = -1 end + if node.param2 == 2 then pos1.x = pos1.x - 1 x_velocity = -1 end + if node.param2 == 1 then pos1.z = pos1.z + 1 z_velocity = 1 end + if node.param2 == 0 then pos1.x = pos1.x + 1 x_velocity = 1 end + + local output_tube_connected = false + local node1 = minetest.get_node(pos1) + if minetest.get_item_group(node1.name, "tubedevice") > 0 then + output_tube_connected = true + end + local tube_time = meta:get_int("tube_time") + tube_upgrade + if tube_time >= 2 then + tube_time = 0 + if output_tube_connected then + send_function(pos, x_velocity, z_velocity) + end + end + meta:set_int("tube_time", tube_time) +end + +function technic.machine_can_dig(pos, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if not inv:is_empty("src") or not inv:is_empty("dst") then + if player then + minetest.chat_send_player(player:get_player_name(), + S("Machine cannot be removed because it is not empty")) + end + return false + end + + return true +end + +function technic.machine_after_dig_node(pos, oldnode, oldmetadata, player) + if oldmetadata.inventory then + if oldmetadata.inventory.upgrade1 and oldmetadata.inventory.upgrade1[1] then + local stack = ItemStack(oldmetadata.inventory.upgrade1[1]) + if not stack:is_empty() then + minetest.add_item(pos, stack) + end + end + if oldmetadata.inventory.upgrade2 and oldmetadata.inventory.upgrade2[1] then + local stack = ItemStack(oldmetadata.inventory.upgrade2[1]) + if not stack:is_empty() then + minetest.add_item(pos, stack) + end + end + end + + if minetest.registered_nodes[oldnode.name].tube then + pipeworks.after_dig(pos, oldnode, oldmetadata, player) + end +end + +local function inv_change(pos, player, count, from_list, to_list, stack) + local playername = player:get_player_name() + local meta = minetest.get_meta(pos); + local public = (meta:get_int("public") == 1) + local to_upgrade = to_list == "upgrade1" or to_list == "upgrade2" + local from_upgrade = from_list == "upgrade1" or from_list == "upgrade2" + + if (not public or to_upgrade or from_upgrade) and minetest.is_protected(pos, playername) then + minetest.chat_send_player(playername, S("Inventory move disallowed due to protection")) + return 0 + end + if to_upgrade then + -- only place a single item into it, if it's empty + local empty = meta:get_inventory():is_empty(to_list) + if empty then + return on_machine_upgrade(meta, stack) + end + return 0 + elseif from_upgrade then + -- only called on take (not move) + on_machine_downgrade(meta, stack, from_list) + end + return count +end + +function technic.machine_inventory_put(pos, listname, index, stack, player) + return inv_change(pos, player, stack:get_count(), nil, listname, stack) +end + +function technic.machine_inventory_take(pos, listname, index, stack, player) + return inv_change(pos, player, stack:get_count(), listname, nil, stack) +end + +function technic.machine_inventory_move(pos, from_list, from_index, + to_list, to_index, count, player) + local stack = minetest.get_meta(pos):get_inventory():get_stack(from_list, from_index) + return inv_change(pos, player, count, from_list, to_list, stack) +end + diff --git a/mods/ITEMS/technic/technic/machines/register/compressor.lua b/mods/technic/technic/machines/register/compressor.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/compressor.lua rename to mods/technic/technic/machines/register/compressor.lua diff --git a/mods/ITEMS/technic/technic/machines/register/compressor_recipes.lua b/mods/technic/technic/machines/register/compressor_recipes.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/compressor_recipes.lua rename to mods/technic/technic/machines/register/compressor_recipes.lua diff --git a/mods/ITEMS/technic/technic/machines/register/electric_furnace.lua b/mods/technic/technic/machines/register/electric_furnace.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/electric_furnace.lua rename to mods/technic/technic/machines/register/electric_furnace.lua diff --git a/mods/ITEMS/technic/technic/machines/register/extractor.lua b/mods/technic/technic/machines/register/extractor.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/extractor.lua rename to mods/technic/technic/machines/register/extractor.lua diff --git a/mods/ITEMS/technic/technic/machines/register/extractor_recipes.lua b/mods/technic/technic/machines/register/extractor_recipes.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/extractor_recipes.lua rename to mods/technic/technic/machines/register/extractor_recipes.lua diff --git a/mods/technic/technic/machines/register/generator.lua b/mods/technic/technic/machines/register/generator.lua new file mode 100755 index 0000000..7805bf0 --- /dev/null +++ b/mods/technic/technic/machines/register/generator.lua @@ -0,0 +1,293 @@ +local S = technic.getter + +local fs_helpers = pipeworks.fs_helpers +local tube_entry = "^pipeworks_tube_connection_metallic.png" + +local tube = { + insert_object = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:add_item("src", stack) + end, + can_insert = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if meta:get_int("splitstacks") == 1 then + stack = stack:peek_item(1) + end + return inv:room_for_item("src", stack) + end, + connect_sides = {left=1, right=1, back=1, top=1, bottom=1}, +} + +function technic.register_generator(data) + + local tier = data.tier + local ltier = string.lower(tier) + + local groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + technic_machine=1, ["technic_"..ltier]=1} + if data.tube then + groups.tubedevice = 1 + groups.tubedevice_receiver = 1 + end + local active_groups = {not_in_creative_inventory = 1} + for k, v in pairs(groups) do active_groups[k] = v end + + local generator_formspec = + "invsize[8,9;]".. + "label[0,0;"..S("Fuel-Fired %s Generator"):format(tier).."]".. + "list[current_name;src;3,1;1,1;]".. + "image[4,1;1,1;default_furnace_fire_bg.png]".. + "list[current_player;main;0,5;8,4;]".. + "listring[]" + + local desc = S("Fuel-Fired %s Generator"):format(tier) + + local run = function(pos, node) + local meta = minetest.get_meta(pos) + local burn_time = meta:get_int("burn_time") + local burn_totaltime = meta:get_int("burn_totaltime") + -- If more to burn and the energy produced was used: produce some more + if burn_time > 0 then + meta:set_int(tier.."_EU_supply", data.supply) + burn_time = burn_time - 1 + meta:set_int("burn_time", burn_time) + end + -- Burn another piece of fuel + if burn_time == 0 then + local inv = meta:get_inventory() + if not inv:is_empty("src") then + local fuellist = inv:get_list("src") + local fuel + local afterfuel + fuel, afterfuel = minetest.get_craft_result( + {method = "fuel", width = 1, + items = fuellist}) + if not fuel or fuel.time == 0 then + meta:set_string("infotext", S("%s Out Of Fuel"):format(desc)) + technic.swap_node(pos, "technic:"..ltier.."_generator") + meta:set_int(tier.."_EU_supply", 0) + return + end + meta:set_int("burn_time", fuel.time) + meta:set_int("burn_totaltime", fuel.time) + inv:set_stack("src", 1, afterfuel.items[1]) + technic.swap_node(pos, "technic:"..ltier.."_generator_active") + meta:set_int(tier.."_EU_supply", data.supply) + else + technic.swap_node(pos, "technic:"..ltier.."_generator") + meta:set_int(tier.."_EU_supply", 0) + end + end + if burn_totaltime == 0 then burn_totaltime = 1 end + local percent = math.floor((burn_time / burn_totaltime) * 100) + meta:set_string("infotext", desc.." ("..percent.."%)") + + local form_buttons = "" + if ltier ~= "lv" then + form_buttons = fs_helpers.cycling_button( + meta, + pipeworks.button_base, + "splitstacks", + { + pipeworks.button_off, + pipeworks.button_on + } + )..pipeworks.button_label + end + meta:set_string("formspec", + "size[8, 9]".. + "label[0, 0;"..minetest.formspec_escape(desc).."]".. + "list[current_name;src;3, 1;1, 1;]".. + "image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:".. + (percent)..":default_furnace_fire_fg.png]".. + "list[current_player;main;0, 5;8, 4;]".. + "listring[]".. + form_buttons + ) + end + + local tentry = tube_entry + if ltier == "lv" then tentry = "" end + + minetest.register_node("technic:"..ltier.."_generator", { + description = desc, + tiles = { + "technic_"..ltier.."_generator_top.png"..tentry, + "technic_machine_bottom.png"..tentry, + "technic_"..ltier.."_generator_side.png"..tentry, + "technic_"..ltier.."_generator_side.png"..tentry, + "technic_"..ltier.."_generator_side.png"..tentry, + "technic_"..ltier.."_generator_front.png" + }, + paramtype2 = "facedir", + groups = groups, + connect_sides = {"bottom", "back", "left", "right"}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + tube = data.tube and tube or nil, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("infotext", desc) + meta:set_int(data.tier.."_EU_supply", 0) + meta:set_int("burn_time", 0) + meta:set_int("tube_time", 0) + local form_buttons = "" + if not string.find(node.name, ":lv_") then + form_buttons = fs_helpers.cycling_button( + meta, + pipeworks.button_base, + "splitstacks", + { + pipeworks.button_off, + pipeworks.button_on + } + )..pipeworks.button_label + end + meta:set_string("formspec", generator_formspec..form_buttons) + local inv = meta:get_inventory() + inv:set_size("src", 1) + end, + can_dig = technic.machine_can_dig, + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + allow_metadata_inventory_move = technic.machine_inventory_move, + technic_run = run, + after_place_node = data.tube and pipeworks.after_place, + after_dig_node = technic.machine_after_dig_node, + on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + local form = generator_formspec + local form_buttons = "" + if not string.find(node.name, ":lv_") then + form_buttons = fs_helpers.cycling_button( + meta, + pipeworks.button_base, + "splitstacks", + { + pipeworks.button_off, + pipeworks.button_on + } + )..pipeworks.button_label + end + meta:set_string("formspec", generator_formspec..form_buttons) + end, + }) + + minetest.register_node("technic:"..ltier.."_generator_active", { + description = desc, + tiles = { + "technic_"..ltier.."_generator_top.png"..tube_entry, + "technic_machine_bottom.png"..tube_entry, + "technic_"..ltier.."_generator_side.png"..tube_entry, + "technic_"..ltier.."_generator_side.png"..tube_entry, + "technic_"..ltier.."_generator_side.png"..tube_entry, + "technic_"..ltier.."_generator_front_active.png" + }, + paramtype2 = "facedir", + groups = active_groups, + connect_sides = {"bottom"}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + tube = data.tube and tube or nil, + drop = "technic:"..ltier.."_generator", + can_dig = technic.machine_can_dig, + after_dig_node = technic.machine_after_dig_node, + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + allow_metadata_inventory_move = technic.machine_inventory_move, + technic_run = run, + technic_on_disable = function(pos, node) + local timer = minetest.get_node_timer(pos) + timer:start(1) + end, + on_timer = function(pos, node) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + + -- Connected back? + if meta:get_int(tier.."_EU_timeout") > 0 then return false end + + local burn_time = meta:get_int("burn_time") or 0 + + if burn_time <= 0 then + meta:set_int(tier.."_EU_supply", 0) + meta:set_int("burn_time", 0) + technic.swap_node(pos, "technic:"..ltier.."_generator") + return false + end + + local burn_totaltime = meta:get_int("burn_totaltime") or 0 + if burn_totaltime == 0 then burn_totaltime = 1 end + burn_time = burn_time - 1 + meta:set_int("burn_time", burn_time) + local percent = math.floor(burn_time / burn_totaltime * 100) + + local form_buttons = "" + if not string.find(node.name, ":lv_") then + form_buttons = fs_helpers.cycling_button( + meta, + pipeworks.button_base, + "splitstacks", + { + pipeworks.button_off, + pipeworks.button_on + } + )..pipeworks.button_label + end + meta:set_string("formspec", + "size[8, 9]".. + "label[0, 0;"..minetest.formspec_escape(desc).."]".. + "list[current_name;src;3, 1;1, 1;]".. + "image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:".. + (percent)..":default_furnace_fire_fg.png]".. + "list[current_player;main;0, 5;8, 4;]".. + "listring[]".. + form_buttons + ) + return true + end, + on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + local form_buttons = "" + if not string.find(node.name, ":lv_") then + form_buttons = fs_helpers.cycling_button( + meta, + pipeworks.button_base, + "splitstacks", + { + pipeworks.button_off, + pipeworks.button_on + } + )..pipeworks.button_label + end + + local burn_totaltime = meta:get_int("burn_totaltime") or 0 + local burn_time = meta:get_int("burn_time") + local percent = math.floor(burn_time / burn_totaltime * 100) + + meta:set_string("formspec", + "size[8, 9]".. + "label[0, 0;"..minetest.formspec_escape(desc).."]".. + "list[current_name;src;3, 1;1, 1;]".. + "image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:".. + (percent)..":default_furnace_fire_fg.png]".. + "list[current_player;main;0, 5;8, 4;]".. + "listring[]".. + form_buttons + ) + end, + }) + + technic.register_machine(tier, "technic:"..ltier.."_generator", technic.producer) + technic.register_machine(tier, "technic:"..ltier.."_generator_active", technic.producer) +end + diff --git a/mods/ITEMS/technic/technic/machines/register/grinder.lua b/mods/technic/technic/machines/register/grinder.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/grinder.lua rename to mods/technic/technic/machines/register/grinder.lua diff --git a/mods/technic/technic/machines/register/grinder_recipes.lua b/mods/technic/technic/machines/register/grinder_recipes.lua new file mode 100755 index 0000000..fa55e7a --- /dev/null +++ b/mods/technic/technic/machines/register/grinder_recipes.lua @@ -0,0 +1,157 @@ + +local S = technic.getter + +technic.register_recipe_type("grinding", { description = S("Grinding") }) + +function technic.register_grinder_recipe(data) + data.time = data.time or 3 + technic.register_recipe("grinding", data) +end + +local recipes = { + -- Dusts + {"default:coal_lump", "technic:coal_dust 2"}, + {"default:copper_lump", "technic:copper_dust 2"}, + {"default:desert_stone", "default:desert_sand"}, + {"default:gold_lump", "technic:gold_dust 2"}, + {"default:iron_lump", "technic:wrought_iron_dust 2"}, + {"technic:chromium_lump", "technic:chromium_dust 2"}, + {"technic:uranium_lump", "technic:uranium_dust 2"}, + {"technic:zinc_lump", "technic:zinc_dust 2"}, + {"technic:lead_lump", "technic:lead_dust 2"}, + {"technic:sulfur_lump", "technic:sulfur_dust 2"}, + {"default:stone", "technic:stone_dust"}, + {"default:sand", "technic:stone_dust"}, + + -- Other + {"default:cobble", "default:gravel"}, + {"default:gravel", "default:sand"}, + {"default:sandstone", "default:sand 2"}, -- reverse recipe can be found in the compressor +} + +-- defuse the sandstone -> 4 sand recipe to avoid infinite sand bugs (also consult the inverse compressor recipe) +minetest.clear_craft({ + recipe = { + {'default:sandstone'} + }, +}) + +if minetest.get_modpath("farming") then + table.insert(recipes, {"farming:seed_wheat", "farming:flour 1"}) +end + +if minetest.get_modpath("moreores") then + table.insert(recipes, {"moreores:mithril_lump", "technic:mithril_dust 2"}) + table.insert(recipes, {"moreores:silver_lump", "technic:silver_dust 2"}) + table.insert(recipes, {"moreores:tin_lump", "technic:tin_dust 2"}) +end + +if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then + table.insert(recipes, {"gloopores:alatro_lump", "technic:alatro_dust 2"}) + table.insert(recipes, {"gloopores:kalite_lump", "technic:kalite_dust 2"}) + table.insert(recipes, {"gloopores:arol_lump", "technic:arol_dust 2"}) + table.insert(recipes, {"gloopores:talinite_lump", "technic:talinite_dust 2"}) + table.insert(recipes, {"gloopores:akalin_lump", "technic:akalin_dust 2"}) +end + +if minetest.get_modpath("homedecor") then + table.insert(recipes, {"home_decor:brass_ingot", "technic:brass_dust 1"}) +end + +for _, data in pairs(recipes) do + technic.register_grinder_recipe({input = {data[1]}, output = data[2]}) +end + +-- dusts +local function register_dust(name, ingot) + local lname = string.lower(name) + lname = string.gsub(lname, ' ', '_') + minetest.register_craftitem("technic:"..lname.."_dust", { + description = S("%s Dust"):format(S(name)), + inventory_image = "technic_"..lname.."_dust.png", + }) + if ingot then + minetest.register_craft({ + type = "cooking", + recipe = "technic:"..lname.."_dust", + output = ingot, + }) + technic.register_grinder_recipe({ input = {ingot}, output = "technic:"..lname.."_dust 1" }) + end +end + +-- Sorted alphibeticaly +register_dust("Brass", "technic:brass_ingot") +register_dust("Bronze", "default:bronze_ingot") +register_dust("Carbon Steel", "technic:carbon_steel_ingot") +register_dust("Cast Iron", "technic:cast_iron_ingot") +register_dust("Chernobylite", "technic:chernobylite_block") +register_dust("Chromium", "technic:chromium_ingot") +register_dust("Coal", nil) +register_dust("Copper", "default:copper_ingot") +register_dust("Lead", "technic:lead_ingot") +register_dust("Gold", "default:gold_ingot") +register_dust("Mithril", "moreores:mithril_ingot") +register_dust("Silver", "moreores:silver_ingot") +register_dust("Stainless Steel", "technic:stainless_steel_ingot") +register_dust("Stone", "default:stone") +register_dust("Sulfur", nil) +register_dust("Tin", "moreores:tin_ingot") +register_dust("Wrought Iron", "technic:wrought_iron_ingot") +register_dust("Zinc", "technic:zinc_ingot") +if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then + register_dust("Akalin", "glooptest:akalin_ingot") + register_dust("Alatro", "glooptest:alatro_ingot") + register_dust("Arol", "glooptest:arol_ingot") + register_dust("Kalite", nil) + register_dust("Talinite", "glooptest:talinite_ingot") +end + +for p = 0, 35 do + local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil + local psuffix = p == 7 and "" or p + local ingot = "technic:uranium"..psuffix.."_ingot" + local dust = "technic:uranium"..psuffix.."_dust" + minetest.register_craftitem(dust, { + description = S("%s Dust"):format(string.format(S("%.1f%%-Fissile Uranium"), p/10)), + inventory_image = "technic_uranium_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + groups = {uranium_dust=1, not_in_creative_inventory=nici}, + }) + minetest.register_craft({ + type = "cooking", + recipe = dust, + output = ingot, + }) + technic.register_grinder_recipe({ input = {ingot}, output = dust }) +end + +local function uranium_dust(p) + return "technic:uranium"..(p == 7 and "" or p).."_dust" +end +for pa = 0, 34 do + for pb = pa+1, 35 do + local pc = (pa+pb)/2 + if pc == math.floor(pc) then + minetest.register_craft({ + type = "shapeless", + recipe = { uranium_dust(pa), uranium_dust(pb) }, + output = uranium_dust(pc).." 2", + }) + end + end +end + +minetest.register_craft({ + type = "fuel", + recipe = "technic:coal_dust", + burntime = 50, +}) + +if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then + minetest.register_craft({ + type = "fuel", + recipe = "technic:kalite_dust", + burntime = 37.5, + }) +end diff --git a/mods/ITEMS/technic/technic/machines/register/grindings.lua b/mods/technic/technic/machines/register/grindings.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/grindings.lua rename to mods/technic/technic/machines/register/grindings.lua diff --git a/mods/ITEMS/technic/technic/machines/register/init.lua b/mods/technic/technic/machines/register/init.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/init.lua rename to mods/technic/technic/machines/register/init.lua diff --git a/mods/ITEMS/technic/technic/machines/register/machine_base.lua b/mods/technic/technic/machines/register/machine_base.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/machine_base.lua rename to mods/technic/technic/machines/register/machine_base.lua diff --git a/mods/technic/technic/machines/register/recipes.lua b/mods/technic/technic/machines/register/recipes.lua new file mode 100755 index 0000000..f9e2458 --- /dev/null +++ b/mods/technic/technic/machines/register/recipes.lua @@ -0,0 +1,107 @@ +local have_ui = minetest.get_modpath("unified_inventory") + +technic.recipes = { cooking = { input_size = 1, output_size = 1 } } +function technic.register_recipe_type(typename, origdata) + local data = {} + for k, v in pairs(origdata) do data[k] = v end + data.input_size = data.input_size or 1 + data.output_size = data.output_size or 1 + if have_ui and unified_inventory.register_craft_type and data.output_size == 1 then + unified_inventory.register_craft_type(typename, { + description = data.description, + width = data.input_size, + height = 1, + }) + end + data.recipes = {} + technic.recipes[typename] = data +end + +local function get_recipe_index(items) + if not items or type(items) ~= "table" then return false end + local l = {} + for i, stack in ipairs(items) do + l[i] = ItemStack(stack):get_name() + end + table.sort(l) + return table.concat(l, "/") +end + +local function register_recipe(typename, data) + -- Handle aliases + for i, stack in ipairs(data.input) do + data.input[i] = ItemStack(stack):to_string() + end + if type(data.output) == "table" then + for i, v in ipairs(data.output) do + data.output[i] = ItemStack(data.output[i]):to_string() + end + else + data.output = ItemStack(data.output):to_string() + end + + local recipe = {time = data.time, input = {}, output = data.output} + local index = get_recipe_index(data.input) + if not index then + print("[Technic] ignored registration of garbage recipe!") + return + end + for _, stack in ipairs(data.input) do + recipe.input[ItemStack(stack):get_name()] = ItemStack(stack):get_count() + end + + technic.recipes[typename].recipes[index] = recipe + if have_ui and technic.recipes[typename].output_size == 1 then + unified_inventory.register_craft({ + type = typename, + output = data.output, + items = data.input, + width = 0, + }) + end +end + +function technic.register_recipe(typename, data) + minetest.after(0.01, register_recipe, typename, data) -- Handle aliases +end + +function technic.get_recipe(typename, items) + if typename == "cooking" then -- Already builtin in Minetest, so use that + local result, new_input = minetest.get_craft_result({ + method = "cooking", + width = 1, + items = items}) + -- Compatibility layer + if not result or result.time == 0 then + return nil + else + return {time = result.time, + new_input = new_input.items, + output = result.item} + end + end + local index = get_recipe_index(items) + if not index then + print("[Technic] ignored registration of garbage recipe!") + return + end + local recipe = technic.recipes[typename].recipes[index] + if recipe then + local new_input = {} + for i, stack in ipairs(items) do + if stack:get_count() < recipe.input[stack:get_name()] then + return nil + else + new_input[i] = ItemStack(stack) + new_input[i]:take_item(recipe.input[stack:get_name()]) + end + end + return {time = recipe.time, + new_input = new_input, + output = recipe.output} + else + return nil + end +end + + diff --git a/mods/ITEMS/technic/technic/machines/register/solar_array.lua b/mods/technic/technic/machines/register/solar_array.lua similarity index 100% rename from mods/ITEMS/technic/technic/machines/register/solar_array.lua rename to mods/technic/technic/machines/register/solar_array.lua diff --git a/mods/technic/technic/machines/supply_converter.lua b/mods/technic/technic/machines/supply_converter.lua new file mode 100755 index 0000000..8527bcf --- /dev/null +++ b/mods/technic/technic/machines/supply_converter.lua @@ -0,0 +1,211 @@ +-- The supply converter is a generic device which can convert from +-- LV to MV and back, and HV to MV and back. +-- The machine is configured by the wiring below and above it. +-- +-- It works like this: +-- The top side is setup as the receiver side, the bottom as the producer side. +-- Once the receiver side is powered it will deliver power to the other side. +-- Unused power is wasted just like any other producer! + +local digilines_path = minetest.get_modpath("digilines") + +local S = technic.getter + +local cable_entry = "^technic_cable_connection_overlay.png" + +local function set_supply_converter_formspec(meta) + local formspec = "size[5,2.25]".. + "field[0.3,0.5;2,1;power;"..S("Input Power")..";"..meta:get_int("power").."]" + if digilines_path then + formspec = formspec.. + "field[2.3,0.5;3,1;channel;Digiline Channel;"..meta:get_string("channel").."]" + end + -- The names for these toggle buttons are explicit about which + -- state they'll switch to, so that multiple presses (arising + -- from the ambiguity between lag and a missed press) only make + -- the single change that the user expects. + if meta:get_int("mesecon_mode") == 0 then + formspec = formspec.."button[0,1;5,1;mesecon_mode_1;"..S("Ignoring Mesecon Signal").."]" + else + formspec = formspec.."button[0,1;5,1;mesecon_mode_0;"..S("Controlled by Mesecon Signal").."]" + end + if meta:get_int("enabled") == 0 then + formspec = formspec.."button[0,1.75;5,1;enable;"..S("%s Disabled"):format(S("Supply Converter")).."]" + else + formspec = formspec.."button[0,1.75;5,1;disable;"..S("%s Enabled"):format(S("Supply Converter")).."]" + end + meta:set_string("formspec", formspec) +end + +local supply_converter_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + local power = nil + if fields.power then + power = tonumber(fields.power) or 0 + power = math.max(power, 0) + power = math.min(power, 10000) + power = 100 * math.floor(power / 100) + if power == meta:get_int("power") then power = nil end + end + if power then meta:set_int("power", power) end + if fields.channel then meta:set_string("channel", fields.channel) end + if fields.enable then meta:set_int("enabled", 1) end + if fields.disable then meta:set_int("enabled", 0) end + if fields.mesecon_mode_0 then meta:set_int("mesecon_mode", 0) end + if fields.mesecon_mode_1 then meta:set_int("mesecon_mode", 1) end + set_supply_converter_formspec(meta) +end + +local mesecons = { + effector = { + action_on = function(pos, node) + minetest.get_meta(pos):set_int("mesecon_effect", 1) + end, + action_off = function(pos, node) + minetest.get_meta(pos):set_int("mesecon_effect", 0) + end + } +} + + +local digiline_def = { + receptor = {action = function() end}, + effector = { + action = function(pos, node, channel, msg) + if type(msg) ~= "string" then + return + end + local meta = minetest.get_meta(pos) + if channel ~= meta:get_string("channel") then + return + end + msg = msg:lower() + if msg == "get" then + digilines.receptor_send(pos, digilines.rules.default, channel, { + enabled = meta:get_int("enabled"), + power = meta:get_int("power"), + mesecon_mode = meta:get_int("mesecon_mode") + }) + return + elseif msg == "off" then + meta:set_int("enabled", 0) + elseif msg == "on" then + meta:set_int("enabled", 1) + elseif msg == "toggle" then + local onn = meta:get_int("enabled") + onn = 1-onn -- Mirror onn with pivot 0.5, so switch between 1 and 0. + meta:set_int("enabled", onn) + elseif msg:sub(1, 5) == "power" then + local power = tonumber(msg:sub(7)) + if not power then + return + end + power = math.max(power, 0) + power = math.min(power, 10000) + power = 100 * math.floor(power / 100) + meta:set_int("power", power) + elseif msg:sub(1, 12) == "mesecon_mode" then + meta:set_int("mesecon_mode", tonumber(msg:sub(14))) + else + return + end + set_supply_converter_formspec(meta) + end + }, +} + +local run = function(pos, node, run_stage) + -- run only in producer stage. + if run_stage == technic.receiver then + return + end + + local remain = 0.9 + -- Machine information + local machine_name = S("Supply Converter") + local meta = minetest.get_meta(pos) + local enabled = meta:get_string("enabled") + if enabled == "" then + -- Backwards compatibility + minetest.registered_nodes["technic:supply_converter"].on_construct(pos) + enabled = true + else + enabled = enabled == "1" + end + enabled = enabled and (meta:get_int("mesecon_mode") == 0 or meta:get_int("mesecon_effect") ~= 0) + local demand = enabled and meta:get_int("power") or 0 + + local pos_up = {x=pos.x, y=pos.y+1, z=pos.z} + local pos_down = {x=pos.x, y=pos.y-1, z=pos.z} + local name_up = minetest.get_node(pos_up).name + local name_down = minetest.get_node(pos_down).name + + local from = technic.get_cable_tier(name_up) + local to = technic.get_cable_tier(name_down) + + if from and to then + local input = meta:get_int(from.."_EU_input") + meta:set_int(from.."_EU_demand", demand) + meta:set_int(from.."_EU_supply", 0) + meta:set_int(to.."_EU_demand", 0) + meta:set_int(to.."_EU_supply", input * remain) + meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name, technic.pretty_num(input), from, technic.pretty_num(input * remain), to)) + else + meta:set_string("infotext", S("%s Has Bad Cabling"):format(machine_name)) + if to then + meta:set_int(to.."_EU_supply", 0) + end + if from then + meta:set_int(from.."_EU_demand", 0) + end + return + end + +end + +minetest.register_node("technic:supply_converter", { + description = S("Supply Converter"), + tiles = { + "technic_supply_converter_tb.png"..cable_entry, + "technic_supply_converter_tb.png"..cable_entry, + "technic_supply_converter_side.png", + "technic_supply_converter_side.png", + "technic_supply_converter_side.png", + "technic_supply_converter_side.png" + }, + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + technic_machine=1, technic_all_tiers=1}, + connect_sides = {"top", "bottom"}, + sounds = default.node_sound_wood_defaults(), + on_receive_fields = supply_converter_receive_fields, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Supply Converter")) + if digilines_path then + meta:set_string("channel", "supply_converter"..minetest.pos_to_string(pos)) + end + meta:set_int("power", 10000) + meta:set_int("enabled", 1) + meta:set_int("mesecon_mode", 0) + meta:set_int("mesecon_effect", 0) + set_supply_converter_formspec(meta) + end, + mesecons = mesecons, + digiline = digiline_def, + technic_run = run, + technic_on_disable = run, +}) + +minetest.register_craft({ + output = 'technic:supply_converter 1', + recipe = { + {'technic:fine_gold_wire', 'technic:rubber', 'technic:doped_silicon_wafer'}, + {'technic:mv_transformer', 'technic:machine_casing', 'technic:lv_transformer'}, + {'technic:mv_cable', 'technic:rubber', 'technic:lv_cable'}, + } +}) + +for tier, machines in pairs(technic.machines) do + technic.register_machine(tier, "technic:supply_converter", technic.producer_receiver) +end + diff --git a/mods/technic/technic/machines/switching_station.lua b/mods/technic/technic/machines/switching_station.lua new file mode 100755 index 0000000..21d394b --- /dev/null +++ b/mods/technic/technic/machines/switching_station.lua @@ -0,0 +1,511 @@ +-- See also technic/doc/api.md + +technic.networks = {} +technic.cables = {} +technic.redundant_warn = {} + +local mesecons_path = minetest.get_modpath("mesecons") +local digilines_path = minetest.get_modpath("digilines") + +local S = technic.getter + +local cable_entry = "^technic_cable_connection_overlay.png" + +minetest.register_craft({ + output = "technic:switching_station", + recipe = { + {"", "technic:lv_transformer", ""}, + {"default:copper_ingot", "technic:machine_casing", "default:copper_ingot"}, + {"technic:lv_cable", "technic:lv_cable", "technic:lv_cable"} + } +}) + +local mesecon_def +if mesecons_path then + mesecon_def = {effector = { + rules = mesecon.rules.default, + }} +end + +minetest.register_node("technic:switching_station",{ + description = S("Switching Station"), + tiles = { + "technic_water_mill_top_active.png", + "technic_water_mill_top_active.png"..cable_entry, + "technic_water_mill_top_active.png", + "technic_water_mill_top_active.png", + "technic_water_mill_top_active.png", + "technic_water_mill_top_active.png"}, + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, technic_all_tiers=1}, + connect_sides = {"bottom"}, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Switching Station")) + meta:set_string("active", 1) + meta:set_string("channel", "switching_station"..minetest.pos_to_string(pos)) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + local poshash = minetest.hash_node_position(pos) + technic.redundant_warn.poshash = nil + end, + after_dig_node = function(pos) + minetest.forceload_free_block(pos) + pos.y = pos.y - 1 + minetest.forceload_free_block(pos) + local poshash = minetest.hash_node_position(pos) + technic.redundant_warn.poshash = nil + end, + on_receive_fields = function(pos, formname, fields, sender) + if not fields.channel then + return + end + local plname = sender:get_player_name() + if minetest.is_protected(pos, plname) then + minetest.record_protection_violation(pos, plname) + return + end + local meta = minetest.get_meta(pos) + meta:set_string("channel", fields.channel) + end, + mesecons = mesecon_def, + digiline = { + receptor = {action = function() end}, + effector = { + action = function(pos, node, channel, msg) + if msg ~= "GET" and msg ~= "get" then + return + end + local meta = minetest.get_meta(pos) + if channel ~= meta:get_string("channel") then + return + end + digilines.receptor_send(pos, digilines.rules.default, channel, { + supply = meta:get_int("supply"), + demand = meta:get_int("demand") + }) + end + }, + }, +}) + +-------------------------------------------------- +-- Functions to traverse the electrical network +-------------------------------------------------- +local function flatten(map) + local list = {} + for key, value in pairs(map) do + list[#list + 1] = value + end + return list +end + +-- Add a wire node to the LV/MV/HV network +local function add_network_node(nodes, pos, network_id) + local node_id = minetest.hash_node_position(pos) + technic.cables[node_id] = network_id + if nodes[node_id] then + return false + end + nodes[node_id] = pos + return true +end + +local function add_cable_node(nodes, pos, network_id, queue) + if add_network_node(nodes, pos, network_id) then + queue[#queue + 1] = pos + end +end + +-- Generic function to add found connected nodes to the right classification array +local check_node_subp = function(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, pos, machines, tier, sw_pos, from_below, network_id, queue) + technic.get_or_load_node(pos) + local meta = minetest.get_meta(pos) + local name = minetest.get_node(pos).name + + if technic.is_tier_cable(name, tier) then + add_cable_node(all_nodes, pos,network_id, queue) + elseif machines[name] then + --dprint(name.." is a "..machines[name]) + meta:set_string(tier.."_network",minetest.pos_to_string(sw_pos)) + if machines[name] == technic.producer then + add_network_node(PR_nodes, pos, network_id) + elseif machines[name] == technic.receiver then + add_network_node(RE_nodes, pos, network_id) + elseif machines[name] == technic.producer_receiver then + add_network_node(PR_nodes, pos, network_id) + add_network_node(RE_nodes, pos, network_id) + elseif machines[name] == "SPECIAL" and + (pos.x ~= sw_pos.x or pos.y ~= sw_pos.y or pos.z ~= sw_pos.z) and + from_below then + -- Another switching station -> disable it + add_network_node(SP_nodes, pos, network_id) + meta:set_int("active", 0) + elseif machines[name] == technic.battery then + add_network_node(BA_nodes, pos, network_id) + end + + meta:set_int(tier.."_EU_timeout", 2) -- Touch node + end +end + +-- Traverse a network given a list of machines and a cable type name +local traverse_network = function(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, pos, machines, tier, sw_pos, network_id, queue) + local positions = { + {x=pos.x+1, y=pos.y, z=pos.z}, + {x=pos.x-1, y=pos.y, z=pos.z}, + {x=pos.x, y=pos.y+1, z=pos.z}, + {x=pos.x, y=pos.y-1, z=pos.z}, + {x=pos.x, y=pos.y, z=pos.z+1}, + {x=pos.x, y=pos.y, z=pos.z-1}} + for i, cur_pos in pairs(positions) do + check_node_subp(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, cur_pos, machines, tier, sw_pos, i == 3, network_id, queue) + end +end + +local touch_nodes = function(list, tier) + for _, pos in ipairs(list) do + local meta = minetest.get_meta(pos) + meta:set_int(tier.."_EU_timeout", 2) -- Touch node + end +end + +local get_network = function(sw_pos, pos1, tier) + local network_id = minetest.hash_node_position(pos1) + local cached = technic.networks[network_id] + if cached and cached.tier == tier then + touch_nodes(cached.PR_nodes, tier) + touch_nodes(cached.BA_nodes, tier) + touch_nodes(cached.RE_nodes, tier) + for _, pos in ipairs(cached.SP_nodes) do + local meta = minetest.get_meta(pos) + meta:set_int("active", 0) + meta:set_string("active_pos", minetest.serialize(sw_pos)) + end + return cached.PR_nodes, cached.BA_nodes, cached.RE_nodes + end + local PR_nodes = {} + local BA_nodes = {} + local RE_nodes = {} + local SP_nodes = {} + local all_nodes = {} + local queue = {} + add_cable_node(all_nodes, pos1, network_id, queue) + while next(queue) do + local to_visit = {} + for _, pos in ipairs(queue) do + traverse_network(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, + pos, technic.machines[tier], tier, sw_pos, network_id, to_visit) + end + queue = to_visit + end + PR_nodes = flatten(PR_nodes) + BA_nodes = flatten(BA_nodes) + RE_nodes = flatten(RE_nodes) + SP_nodes = flatten(SP_nodes) + all_nodes = flatten(all_nodes) + technic.networks[network_id] = {tier = tier, all_nodes = all_nodes, SP_nodes = SP_nodes, + PR_nodes = PR_nodes, RE_nodes = RE_nodes, BA_nodes = BA_nodes} + return PR_nodes, BA_nodes, RE_nodes +end + +----------------------------------------------- +-- The action code for the switching station -- +----------------------------------------------- + +technic.powerctrl_state = true + +minetest.register_chatcommand("powerctrl", { + params = "state", + description = "Enables or disables technic's switching station ABM", + privs = { basic_privs = true }, + func = function(name, state) + if state == "on" then + technic.powerctrl_state = true + else + technic.powerctrl_state = false + end + end +}) + +minetest.register_abm({ + nodenames = {"technic:switching_station"}, + label = "Switching Station", -- allows the mtt profiler to profile this abm individually + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + if not technic.powerctrl_state then return end + local meta = minetest.get_meta(pos) + local meta1 = nil + local pos1 = {} + local PR_EU = 0 -- EUs from PR nodes + local BA_PR_EU = 0 -- EUs from BA nodes (discharching) + local BA_RE_EU = 0 -- EUs to BA nodes (charging) + local RE_EU = 0 -- EUs to RE nodes + + local tier = "" + local PR_nodes + local BA_nodes + local RE_nodes + local machine_name = S("Switching Station") + + -- Which kind of network are we on: + pos1 = {x=pos.x, y=pos.y-1, z=pos.z} + + --Disable if necessary + if meta:get_int("active") ~= 1 then + minetest.forceload_free_block(pos) + minetest.forceload_free_block(pos1) + meta:set_string("infotext",S("%s Already Present"):format(machine_name)) + + local poshash = minetest.hash_node_position(pos) + + if not technic.redundant_warn[poshash] then + technic.redundant_warn[poshash] = true + print("[TECHNIC] Warning: redundant switching station found near "..minetest.pos_to_string(pos)) + end + return + end + + local name = minetest.get_node(pos1).name + local tier = technic.get_cable_tier(name) + if tier then + -- Forceload switching station + minetest.forceload_block(pos) + minetest.forceload_block(pos1) + PR_nodes, BA_nodes, RE_nodes = get_network(pos, pos1, tier) + else + --dprint("Not connected to a network") + meta:set_string("infotext", S("%s Has No Network"):format(machine_name)) + minetest.forceload_free_block(pos) + minetest.forceload_free_block(pos1) + return + end + + -- Run all the nodes + local function run_nodes(list, run_stage) + for _, pos2 in ipairs(list) do + technic.get_or_load_node(pos2) + local node2 = minetest.get_node(pos2) + local nodedef + if node2 and node2.name then + nodedef = minetest.registered_nodes[node2.name] + end + if nodedef and nodedef.technic_run then + nodedef.technic_run(pos2, node2, run_stage) + end + end + end + + run_nodes(PR_nodes, technic.producer) + run_nodes(RE_nodes, technic.receiver) + run_nodes(BA_nodes, technic.battery) + + -- Strings for the meta data + local eu_demand_str = tier.."_EU_demand" + local eu_input_str = tier.."_EU_input" + local eu_supply_str = tier.."_EU_supply" + + -- Distribute charge equally across multiple batteries. + local charge_total = 0 + local battery_count = 0 + + for n, pos1 in pairs(BA_nodes) do + meta1 = minetest.get_meta(pos1) + local charge = meta1:get_int("internal_EU_charge") + + if (meta1:get_int(eu_demand_str) ~= 0) then + charge_total = charge_total + charge + battery_count = battery_count + 1 + end + end + + local charge_distributed = math.floor(charge_total / battery_count) + + for n, pos1 in pairs(BA_nodes) do + meta1 = minetest.get_meta(pos1) + + if (meta1:get_int(eu_demand_str) ~= 0) then + meta1:set_int("internal_EU_charge", charge_distributed) + end + end + + -- Get all the power from the PR nodes + local PR_eu_supply = 0 -- Total power + for _, pos1 in pairs(PR_nodes) do + meta1 = minetest.get_meta(pos1) + PR_eu_supply = PR_eu_supply + meta1:get_int(eu_supply_str) + end + --dprint("Total PR supply:"..PR_eu_supply) + + -- Get all the demand from the RE nodes + local RE_eu_demand = 0 + for _, pos1 in pairs(RE_nodes) do + meta1 = minetest.get_meta(pos1) + RE_eu_demand = RE_eu_demand + meta1:get_int(eu_demand_str) + end + --dprint("Total RE demand:"..RE_eu_demand) + + -- Get all the power from the BA nodes + local BA_eu_supply = 0 + for _, pos1 in pairs(BA_nodes) do + meta1 = minetest.get_meta(pos1) + BA_eu_supply = BA_eu_supply + meta1:get_int(eu_supply_str) + end + --dprint("Total BA supply:"..BA_eu_supply) + + -- Get all the demand from the BA nodes + local BA_eu_demand = 0 + for _, pos1 in pairs(BA_nodes) do + meta1 = minetest.get_meta(pos1) + BA_eu_demand = BA_eu_demand + meta1:get_int(eu_demand_str) + end + --dprint("Total BA demand:"..BA_eu_demand) + + meta:set_string("infotext", + S("@1. Supply: @2 Demand: @3", + machine_name, technic.pretty_num(PR_eu_supply), technic.pretty_num(RE_eu_demand))) + + -- If mesecon signal and power supply or demand changed then + -- send them via digilines. + if mesecons_path and digilines_path and mesecon.is_powered(pos) then + if PR_eu_supply ~= meta:get_int("supply") or + RE_eu_demand ~= meta:get_int("demand") then + local channel = meta:get_string("channel") + digilines.receptor_send(pos, digilines.rules.default, channel, { + supply = PR_eu_supply, + demand = RE_eu_demand + }) + end + end + + -- Data that will be used by the power monitor + meta:set_int("supply",PR_eu_supply) + meta:set_int("demand",RE_eu_demand) + + -- If the PR supply is enough for the RE demand supply them all + if PR_eu_supply >= RE_eu_demand then + --dprint("PR_eu_supply"..PR_eu_supply.." >= RE_eu_demand"..RE_eu_demand) + for _, pos1 in pairs(RE_nodes) do + meta1 = minetest.get_meta(pos1) + local eu_demand = meta1:get_int(eu_demand_str) + meta1:set_int(eu_input_str, eu_demand) + end + -- We have a surplus, so distribute the rest equally to the BA nodes + -- Let's calculate the factor of the demand + PR_eu_supply = PR_eu_supply - RE_eu_demand + local charge_factor = 0 -- Assume all batteries fully charged + if BA_eu_demand > 0 then + charge_factor = PR_eu_supply / BA_eu_demand + end + for n, pos1 in pairs(BA_nodes) do + meta1 = minetest.get_meta(pos1) + local eu_demand = meta1:get_int(eu_demand_str) + meta1:set_int(eu_input_str, math.floor(eu_demand * charge_factor)) + --dprint("Charging battery:"..math.floor(eu_demand*charge_factor)) + end + return + end + + -- If the PR supply is not enough for the RE demand we will discharge the batteries too + if PR_eu_supply + BA_eu_supply >= RE_eu_demand then + --dprint("PR_eu_supply "..PR_eu_supply.."+BA_eu_supply "..BA_eu_supply.." >= RE_eu_demand"..RE_eu_demand) + for _, pos1 in pairs(RE_nodes) do + meta1 = minetest.get_meta(pos1) + local eu_demand = meta1:get_int(eu_demand_str) + meta1:set_int(eu_input_str, eu_demand) + end + -- We have a deficit, so distribute to the BA nodes + -- Let's calculate the factor of the supply + local charge_factor = 0 -- Assume all batteries depleted + if BA_eu_supply > 0 then + charge_factor = (PR_eu_supply - RE_eu_demand) / BA_eu_supply + end + for n,pos1 in pairs(BA_nodes) do + meta1 = minetest.get_meta(pos1) + local eu_supply = meta1:get_int(eu_supply_str) + meta1:set_int(eu_input_str, math.floor(eu_supply * charge_factor)) + --dprint("Discharging battery:"..math.floor(eu_supply*charge_factor)) + end + return + end + + -- If the PR+BA supply is not enough for the RE demand: Power only the batteries + local charge_factor = 0 -- Assume all batteries fully charged + if BA_eu_demand > 0 then + charge_factor = PR_eu_supply / BA_eu_demand + end + for n, pos1 in pairs(BA_nodes) do + meta1 = minetest.get_meta(pos1) + local eu_demand = meta1:get_int(eu_demand_str) + meta1:set_int(eu_input_str, math.floor(eu_demand * charge_factor)) + end + for n, pos1 in pairs(RE_nodes) do + meta1 = minetest.get_meta(pos1) + meta1:set_int(eu_input_str, 0) + end + + end, +}) + +-- Timeout ABM +-- Timeout for a node in case it was disconnected from the network +-- A node must be touched by the station continuously in order to function +local function switching_station_timeout_count(pos, tier) + local meta = minetest.get_meta(pos) + local timeout = meta:get_int(tier.."_EU_timeout") + if timeout <= 0 then + meta:set_int(tier.."_EU_input", 0) -- Not needed anymore <-- actually, it is for supply converter + return true + else + meta:set_int(tier.."_EU_timeout", timeout - 1) + return false + end +end +minetest.register_abm({ + label = "Machines: timeout check", + nodenames = {"group:technic_machine"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.get_meta(pos) + for tier, machines in pairs(technic.machines) do + if machines[node.name] and switching_station_timeout_count(pos, tier) then + local nodedef = minetest.registered_nodes[node.name] + if nodedef and nodedef.technic_disabled_machine_name then + node.name = nodedef.technic_disabled_machine_name + minetest.swap_node(pos, node) + elseif nodedef and nodedef.technic_on_disable then + nodedef.technic_on_disable(pos, node) + end + if nodedef then + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("%s Has No Network"):format(nodedef.description)) + end + end + end + end, +}) + +--Re-enable disabled switching station if necessary, similar to the timeout above +minetest.register_abm({ + label = "Machines: re-enable check", + nodenames = {"technic:switching_station"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.get_meta(pos) + local pos1 = {x=pos.x,y=pos.y-1,z=pos.z} + local tier = technic.get_cable_tier(minetest.get_node(pos1).name) + if not tier then return end + if switching_station_timeout_count(pos, tier) then + local meta = minetest.get_meta(pos) + meta:set_int("active",1) + end + end, +}) + +for tier, machines in pairs(technic.machines) do + -- SPECIAL will not be traversed + technic.register_machine(tier, "technic:switching_station", "SPECIAL") +end + diff --git a/mods/ITEMS/technic/technic/models/technic_cylinder.obj b/mods/technic/technic/models/technic_cylinder.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_cylinder.obj rename to mods/technic/technic/models/technic_cylinder.obj diff --git a/mods/ITEMS/technic/technic/models/technic_cylinder_horizontal.obj b/mods/technic/technic/models/technic_cylinder_horizontal.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_cylinder_horizontal.obj rename to mods/technic/technic/models/technic_cylinder_horizontal.obj diff --git a/mods/ITEMS/technic/technic/models/technic_innercorner.obj b/mods/technic/technic/models/technic_innercorner.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_innercorner.obj rename to mods/technic/technic/models/technic_innercorner.obj diff --git a/mods/ITEMS/technic/technic/models/technic_innercorner_upsdown.obj b/mods/technic/technic/models/technic_innercorner_upsdown.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_innercorner_upsdown.obj rename to mods/technic/technic/models/technic_innercorner_upsdown.obj diff --git a/mods/ITEMS/technic/technic/models/technic_oblate_spheroid.obj b/mods/technic/technic/models/technic_oblate_spheroid.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_oblate_spheroid.obj rename to mods/technic/technic/models/technic_oblate_spheroid.obj diff --git a/mods/ITEMS/technic/technic/models/technic_one_curved_edge.obj b/mods/technic/technic/models/technic_one_curved_edge.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_one_curved_edge.obj rename to mods/technic/technic/models/technic_one_curved_edge.obj diff --git a/mods/ITEMS/technic/technic/models/technic_outercorner.obj b/mods/technic/technic/models/technic_outercorner.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_outercorner.obj rename to mods/technic/technic/models/technic_outercorner.obj diff --git a/mods/ITEMS/technic/technic/models/technic_outercorner_upsdown.obj b/mods/technic/technic/models/technic_outercorner_upsdown.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_outercorner_upsdown.obj rename to mods/technic/technic/models/technic_outercorner_upsdown.obj diff --git a/mods/ITEMS/technic/technic/models/technic_pyramid.obj b/mods/technic/technic/models/technic_pyramid.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_pyramid.obj rename to mods/technic/technic/models/technic_pyramid.obj diff --git a/mods/ITEMS/technic/technic/models/technic_pyramid_spike.obj b/mods/technic/technic/models/technic_pyramid_spike.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_pyramid_spike.obj rename to mods/technic/technic/models/technic_pyramid_spike.obj diff --git a/mods/ITEMS/technic/technic/models/technic_reactor.obj b/mods/technic/technic/models/technic_reactor.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_reactor.obj rename to mods/technic/technic/models/technic_reactor.obj diff --git a/mods/ITEMS/technic/technic/models/technic_slope.obj b/mods/technic/technic/models/technic_slope.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_slope.obj rename to mods/technic/technic/models/technic_slope.obj diff --git a/mods/ITEMS/technic/technic/models/technic_slope_horizontal.obj b/mods/technic/technic/models/technic_slope_horizontal.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_slope_horizontal.obj rename to mods/technic/technic/models/technic_slope_horizontal.obj diff --git a/mods/ITEMS/technic/technic/models/technic_slope_upsdown.obj b/mods/technic/technic/models/technic_slope_upsdown.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_slope_upsdown.obj rename to mods/technic/technic/models/technic_slope_upsdown.obj diff --git a/mods/ITEMS/technic/technic/models/technic_sphere.obj b/mods/technic/technic/models/technic_sphere.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_sphere.obj rename to mods/technic/technic/models/technic_sphere.obj diff --git a/mods/ITEMS/technic/technic/models/technic_two_curved_edge.obj b/mods/technic/technic/models/technic_two_curved_edge.obj similarity index 100% rename from mods/ITEMS/technic/technic/models/technic_two_curved_edge.obj rename to mods/technic/technic/models/technic_two_curved_edge.obj diff --git a/mods/technic/technic/radiation.lua b/mods/technic/technic/radiation.lua new file mode 100755 index 0000000..722b0ac --- /dev/null +++ b/mods/technic/technic/radiation.lua @@ -0,0 +1,516 @@ +--[[ +Radioactivity + +Radiation resistance represents the extent to which a material +attenuates radiation passing through it; i.e., how good a radiation +shield it is. This is identified per node type. For materials that +exist in real life, the radiation resistance value that this system +uses for a node type consisting of a solid cube of that material is the +(approximate) number of halvings of ionising radiation that is achieved +by a meter of the material in real life. This is approximately +proportional to density, which provides a good way to estimate it. +Homogeneous mixtures of materials have radiation resistance computed +by a simple weighted mean. Note that the amount of attenuation that +a material achieves in-game is not required to be (and is not) the +same as the attenuation achieved in real life. + +Radiation resistance for a node type may be specified in the node +definition, under the key "radiation_resistance". As an interim +measure, until node definitions widely include this, this code +knows a bunch of values for particular node types in several mods, +and values for groups of node types. The node definition takes +precedence if it specifies a value. Nodes for which no value at +all is known are taken to provide no radiation resistance at all; +this is appropriate for the majority of node types. Only node types +consisting of a fairly homogeneous mass of material should report +non-zero radiation resistance; anything with non-uniform geometry +or complex internal structure should show no radiation resistance. +Fractional resistance values are permitted. +--]] + +local S = technic.getter + +local rad_resistance_node = { + ["default:brick"] = 13, + ["default:bronzeblock"] = 45, + ["default:clay"] = 15, + ["default:coalblock"] = 9.6, + ["default:cobble"] = 15, + ["default:copperblock"] = 46, + ["default:desert_cobble"] = 15, + ["default:desert_sand"] = 10, + ["default:desert_stone"] = 17, + ["default:desert_stonebrick"] = 17, + ["default:diamondblock"] = 24, + ["default:dirt"] = 8.2, + ["default:dirt_with_grass"] = 8.2, + ["default:dirt_with_grass_footsteps"] = 8.2, + ["default:dirt_with_snow"] = 8.2, + ["default:glass"] = 17, + ["default:goldblock"] = 170, + ["default:gravel"] = 10, + ["default:ice"] = 5.6, + ["default:lava_flowing"] = 8.5, + ["default:lava_source"] = 17, + ["default:mese"] = 21, + ["default:mossycobble"] = 15, + ["pbj_pup:pbj_pup"] = 10000, + ["pbj_pup:pbj_pup_candies"] = 10000, + ["gloopblocks:rainbow_block_diagonal"] = 5000, + ["gloopblocks:rainbow_block_horizontal"] = 10000, + ["default:nyancat"] = 10000, + ["default:nyancat_rainbow"] = 10000, + ["nyancat:nyancat"] = 10000, + ["nyancat:nyancat_rainbow"] = 10000, + ["default:obsidian"] = 18, + ["default:obsidian_glass"] = 18, + ["default:sand"] = 10, + ["default:sandstone"] = 15, + ["default:sandstonebrick"] = 15, + ["default:snowblock"] = 1.7, + ["default:steelblock"] = 40, + ["default:stone"] = 17, + ["default:stone_with_coal"] = 16, + ["default:stone_with_copper"] = 20, + ["default:stone_with_diamond"] = 18, + ["default:stone_with_gold"] = 34, + ["default:stone_with_iron"] = 20, + ["default:stone_with_mese"] = 17, + ["default:stonebrick"] = 17, + ["default:water_flowing"] = 2.8, + ["default:water_source"] = 5.6, + ["farming:desert_sand_soil"] = 10, + ["farming:desert_sand_soil_wet"] = 10, + ["farming:soil"] = 8.2, + ["farming:soil_wet"] = 8.2, + ["glooptest:akalin_crystal_glass"] = 21, + ["glooptest:akalinblock"] = 40, + ["glooptest:alatro_crystal_glass"] = 21, + ["glooptest:alatroblock"] = 40, + ["glooptest:amethystblock"] = 18, + ["glooptest:arol_crystal_glass"] = 21, + ["glooptest:crystal_glass"] = 21, + ["glooptest:emeraldblock"] = 19, + ["glooptest:heavy_crystal_glass"] = 21, + ["glooptest:mineral_akalin"] = 20, + ["glooptest:mineral_alatro"] = 20, + ["glooptest:mineral_amethyst"] = 17, + ["glooptest:mineral_arol"] = 20, + ["glooptest:mineral_desert_coal"] = 16, + ["glooptest:mineral_desert_iron"] = 20, + ["glooptest:mineral_emerald"] = 17, + ["glooptest:mineral_kalite"] = 20, + ["glooptest:mineral_ruby"] = 18, + ["glooptest:mineral_sapphire"] = 18, + ["glooptest:mineral_talinite"] = 20, + ["glooptest:mineral_topaz"] = 18, + ["glooptest:reinforced_crystal_glass"] = 21, + ["glooptest:rubyblock"] = 27, + ["glooptest:sapphireblock"] = 27, + ["glooptest:talinite_crystal_glass"] = 21, + ["glooptest:taliniteblock"] = 40, + ["glooptest:topazblock"] = 24, + ["mesecons_extrawires:mese_powered"] = 21, + ["moreblocks:cactus_brick"] = 13, + ["moreblocks:cactus_checker"] = 8.5, + ["moreblocks:circle_stone_bricks"] = 17, + ["moreblocks:clean_glass"] = 17, + ["moreblocks:coal_checker"] = 9.0, + ["moreblocks:coal_glass"] = 17, + ["moreblocks:coal_stone"] = 17, + ["moreblocks:coal_stone_bricks"] = 17, + ["moreblocks:glow_glass"] = 17, + ["moreblocks:grey_bricks"] = 15, + ["moreblocks:iron_checker"] = 11, + ["moreblocks:iron_glass"] = 17, + ["moreblocks:iron_stone"] = 17, + ["moreblocks:iron_stone_bricks"] = 17, + ["moreblocks:plankstone"] = 9.3, + ["moreblocks:split_stone_tile"] = 15, + ["moreblocks:split_stone_tile_alt"] = 15, + ["moreblocks:stone_tile"] = 15, + ["moreblocks:super_glow_glass"] = 17, + ["moreblocks:tar"] = 7.0, + ["moreblocks:wood_tile"] = 1.7, + ["moreblocks:wood_tile_center"] = 1.7, + ["moreblocks:wood_tile_down"] = 1.7, + ["moreblocks:wood_tile_flipped"] = 1.7, + ["moreblocks:wood_tile_full"] = 1.7, + ["moreblocks:wood_tile_left"] = 1.7, + ["moreblocks:wood_tile_right"] = 1.7, + ["moreblocks:wood_tile_up"] = 1.7, + ["moreores:mineral_mithril"] = 18, + ["moreores:mineral_silver"] = 21, + ["moreores:mineral_tin"] = 19, + ["moreores:mithril_block"] = 26, + ["moreores:silver_block"] = 53, + ["moreores:tin_block"] = 37, + ["snow:snow_brick"] = 2.8, + ["technic:brass_block"] = 43, + ["technic:carbon_steel_block"] = 40, + ["technic:cast_iron_block"] = 40, + ["technic:chernobylite_block"] = 40, + ["technic:chromium_block"] = 37, + ["technic:corium_flowing"] = 40, + ["technic:corium_source"] = 80, + ["technic:granite"] = 18, + ["technic:lead_block"] = 80, + ["technic:marble"] = 18, + ["technic:marble_bricks"] = 18, + ["technic:mineral_chromium"] = 19, + ["technic:mineral_uranium"] = 71, + ["technic:mineral_zinc"] = 19, + ["technic:stainless_steel_block"] = 40, + ["technic:zinc_block"] = 36, + ["tnt:tnt"] = 11, + ["tnt:tnt_burning"] = 11, +} +local rad_resistance_group = { + concrete = 16, + tree = 3.4, + uranium_block = 500, + wood = 1.7, +} +local cache_radiation_resistance = {} +local function node_radiation_resistance(node_name) + local resistance = cache_radiation_resistance[node_name] + if resistance then + return resistance + end + local def = minetest.registered_nodes[node_name] + if not def then + cache_radiation_resistance[node_name] = 0 + return 0 + end + resistance = def.radiation_resistance or + rad_resistance_node[node_name] + if not resistance then + resistance = 0 + for g, v in pairs(def.groups) do + if v > 0 and rad_resistance_group[g] then + resistance = resistance + rad_resistance_group[g] + end + end + end + resistance = math.sqrt(resistance) + cache_radiation_resistance[node_name] = resistance + return resistance +end + + +--[[ +Radioactive nodes cause damage to nearby players. The damage +effect depends on the intrinsic strength of the radiation source, +the distance between the source and the player, and the shielding +effect of the intervening material. These determine a rate of damage; +total damage caused is the integral of this over time. + +In the absence of effective shielding, for a specific source the +damage rate varies realistically in inverse proportion to the square +of the distance. (Distance is measured to the player's abdomen, +not to the nominal player position which corresponds to the foot.) +However, if the player is inside a non-walkable (liquid or gaseous) +radioactive node, the nominal distance could go to zero, yielding +infinite damage. In that case, the player's body is displacing the +radioactive material, so the effective distance should remain non-zero. +We therefore apply a lower distance bound of sqrt(0.75), which is +the maximum distance one can get from the node center within the node. + +A radioactive node is identified by being in the "radioactive" group, +and the group value signifies the strength of the radiation source. +The group value is the distance from a node at which an unshielded +player will be damaged by 1 HP/s. Or, equivalently, it is the square +root of the damage rate in HP/s that an unshielded player one node +away will take. + +Shielding is assessed by adding the shielding values of all nodes +between the source node and the player, ignoring the source node itself. +As in reality, shielding causes exponential attenuation of radiation. +However, the effect is scaled down relative to real life. A node with +radiation resistance value R yields attenuation of sqrt(R) * 0.1 nepers. +(In real life it would be about R * 0.69 nepers, by the definition +of the radiation resistance values.) The sqrt part of this formula +scales down the differences between shielding types, reflecting the +game's simplification of making expensive materials such as gold +readily available in cubes. The multiplicative factor in the +formula scales down the difference between shielded and unshielded +safe distances, avoiding the latter becoming impractically large. + +Damage is processed at rates down to 0.2 HP/s, which in the absence of +shielding is attained at the distance specified by the "radioactive" +group value. Computed damage rates below 0.2 HP/s result in no +damage at all to the player. This gives the player an opportunity +to be safe, and limits the range at which source/player interactions +need to be considered. +--]] +local abdomen_offset = 1 +local cache_scaled_shielding = {} +local rad_dmg_cutoff = 0.2 +local radiated_players = {} + +local armor_enabled = technic.config:get_bool("enable_radiation_protection") +local entity_damage = technic.config:get_bool("enable_entity_radiation_damage") +local longterm_damage = technic.config:get_bool("enable_longterm_radiation_damage") + +local function apply_fractional_damage(o, dmg) + local dmg_int = math.floor(dmg) + -- The closer you are to getting one more damage point, + -- the more likely it will be added. + if math.random() < dmg - dmg_int then + dmg_int = dmg_int + 1 + end + if dmg_int > 0 then + local new_hp = math.max(o:get_hp() - dmg_int, 0) + o:set_hp(new_hp) + return new_hp == 0 + end + return false +end + +local function calculate_base_damage(node_pos, object_pos, strength) + local shielding = 0 + local dist = vector.distance(node_pos, object_pos) + + for ray_pos in technic.trace_node_ray(node_pos, + vector.direction(node_pos, object_pos), dist) do + local shield_name = minetest.get_node(ray_pos).name + shielding = shielding + node_radiation_resistance(shield_name) * 0.025 + end + + local dmg = (strength * strength) / + (math.max(0.75, dist * dist) * math.exp(shielding)) + + if dmg < rad_dmg_cutoff then return end + return dmg +end + +local function calculate_damage_multiplier(object) + local ag = object.get_armor_groups and object:get_armor_groups() + if not ag then + return 0 + end + if ag.immortal then + return 0 + end + if ag.radiation then + return 0.01 * ag.radiation + end + if ag.fleshy then + return math.sqrt(0.01 * ag.fleshy) + end + return 0 +end + +local function calculate_object_center(object) + if object:is_player() then + return {x=0, y=abdomen_offset, z=0} + end + return {x=0, y=0, z=0} +end + +local function dmg_object(pos, object, strength) + local obj_pos = vector.add(object:getpos(), calculate_object_center(object)) + local mul + if armor_enabled or entity_damage then + -- we need to check may the object be damaged even if armor is disabled + mul = calculate_damage_multiplier(object) + if mul == 0 then + return + end + end + local dmg = calculate_base_damage(pos, obj_pos, strength) + if not dmg then + return + end + if armor_enabled then + dmg = dmg * mul + end + apply_fractional_damage(object, dmg) + if longterm_damage and object:is_player() then + local pn = object:get_player_name() + radiated_players[pn] = (radiated_players[pn] or 0) + dmg + end +end + +local rad_dmg_mult_sqrt = math.sqrt(1 / rad_dmg_cutoff) +local function dmg_abm(pos, node) + local strength = minetest.get_item_group(node.name, "radioactive") + local max_dist = strength * rad_dmg_mult_sqrt + for _, o in pairs(minetest.get_objects_inside_radius(pos, + max_dist + abdomen_offset)) do + if entity_damage or o:is_player() then + dmg_object(pos, o, strength) + end + end +end + +if minetest.settings:get_bool("enable_damage") then + minetest.register_abm({ + label = "Radiation damage", + nodenames = {"group:radioactive"}, + interval = 1, + chance = 1, + action = dmg_abm, + }) + + if longterm_damage then + minetest.register_globalstep(function(dtime) + for pn, dmg in pairs(radiated_players) do + dmg = dmg - (dtime / 8) + local player = minetest.get_player_by_name(pn) + local killed + if player and dmg > rad_dmg_cutoff then + killed = apply_fractional_damage(player, (dmg * dtime) / 8) + else + dmg = nil + end + -- on_dieplayer will have already set this if the player died + if not killed then + radiated_players[pn] = dmg + end + end + end) + + minetest.register_on_dieplayer(function(player) + radiated_players[player:get_player_name()] = nil + end) + end +end + +-- Radioactive materials that can result from destroying a reactor +local griefing = technic.config:get_bool("enable_corium_griefing") + +for _, state in pairs({"flowing", "source"}) do + minetest.register_node("technic:corium_"..state, { + description = S(state == "source" and "Corium Source" or "Flowing Corium"), + drawtype = (state == "source" and "liquid" or "flowingliquid"), + tiles = {{ + name = "technic_corium_"..state.."_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }}, + special_tiles = { + { + name = "technic_corium_"..state.."_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }, + { + name = "technic_corium_"..state.."_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }, + }, + paramtype = "light", + paramtype2 = (state == "flowing" and "flowingliquid" or nil), + light_source = (state == "source" and 8 or 5), + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + drowning = 1, + liquidtype = state, + liquid_alternative_flowing = "technic:corium_flowing", + liquid_alternative_source = "technic:corium_source", + liquid_viscosity = LAVA_VISC, + liquid_renewable = false, + damage_per_second = 6, + post_effect_color = {a=192, r=80, g=160, b=80}, + groups = { + liquid = 2, + hot = 3, + igniter = (griefing and 1 or 0), + radioactive = (state == "source" and 12 or 6), + not_in_creative_inventory = (state == "flowing" and 1 or nil), + }, + }) +end + +if rawget(_G, "bucket") and bucket.register_liquid then + bucket.register_liquid( + "technic:corium_source", + "technic:corium_flowing", + "technic:bucket_corium", + "technic_bucket_corium.png", + "Corium Bucket" + ) +end + +minetest.register_node("technic:chernobylite_block", { + description = S("Chernobylite Block"), + tiles = {"technic_chernobylite_block.png"}, + is_ground_content = true, + groups = {cracky=1, radioactive=4, level=2}, + sounds = default.node_sound_stone_defaults(), + light_source = 2, +}) + +minetest.register_abm({ + label = "Corium: boil-off water (sources)", + nodenames = {"group:water"}, + neighbors = {"technic:corium_source"}, + interval = 1, + chance = 1, + action = function(pos, node) + minetest.remove_node(pos) + end, +}) + +minetest.register_abm({ + label = "Corium: boil-off water (flowing)", + nodenames = {"technic:corium_flowing"}, + neighbors = {"group:water"}, + interval = 1, + chance = 1, + action = function(pos, node) + minetest.set_node(pos, {name="technic:chernobylite_block"}) + end, +}) + +minetest.register_abm({ + label = "Corium: become chernobylite", + nodenames = {"technic:corium_flowing"}, + interval = 5, + chance = (griefing and 10 or 1), + action = function(pos, node) + minetest.set_node(pos, {name="technic:chernobylite_block"}) + end, +}) + +if griefing then + minetest.register_abm({ + label = "Corium: griefing", + nodenames = {"technic:corium_source", "technic:corium_flowing"}, + interval = 4, + chance = 4, + action = function(pos, node) + for _, offset in ipairs({ + vector.new(1,0,0), + vector.new(-1,0,0), + vector.new(0,0,1), + vector.new(0,0,-1), + vector.new(0,-1,0), + }) do + if math.random(8) == 1 then + minetest.dig_node(vector.add(pos, offset)) + end + end + end, + }) +end + diff --git a/mods/ITEMS/technic/technic/register.lua b/mods/technic/technic/register.lua similarity index 100% rename from mods/ITEMS/technic/technic/register.lua rename to mods/technic/technic/register.lua diff --git a/mods/ITEMS/technic/technic/sounds/chainsaw.ogg b/mods/technic/technic/sounds/chainsaw.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/chainsaw.ogg rename to mods/technic/technic/sounds/chainsaw.ogg diff --git a/mods/ITEMS/technic/technic/sounds/item_drop_pickup.1.ogg b/mods/technic/technic/sounds/item_drop_pickup.1.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/item_drop_pickup.1.ogg rename to mods/technic/technic/sounds/item_drop_pickup.1.ogg diff --git a/mods/ITEMS/technic/technic/sounds/item_drop_pickup.2.ogg b/mods/technic/technic/sounds/item_drop_pickup.2.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/item_drop_pickup.2.ogg rename to mods/technic/technic/sounds/item_drop_pickup.2.ogg diff --git a/mods/ITEMS/technic/technic/sounds/item_drop_pickup.3.ogg b/mods/technic/technic/sounds/item_drop_pickup.3.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/item_drop_pickup.3.ogg rename to mods/technic/technic/sounds/item_drop_pickup.3.ogg diff --git a/mods/ITEMS/technic/technic/sounds/item_drop_pickup.4.ogg b/mods/technic/technic/sounds/item_drop_pickup.4.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/item_drop_pickup.4.ogg rename to mods/technic/technic/sounds/item_drop_pickup.4.ogg diff --git a/mods/ITEMS/technic/technic/sounds/mining_drill.ogg b/mods/technic/technic/sounds/mining_drill.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/mining_drill.ogg rename to mods/technic/technic/sounds/mining_drill.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_hv_nuclear_reactor_siren_clear.ogg b/mods/technic/technic/sounds/technic_hv_nuclear_reactor_siren_clear.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_hv_nuclear_reactor_siren_clear.ogg rename to mods/technic/technic/sounds/technic_hv_nuclear_reactor_siren_clear.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_hv_nuclear_reactor_siren_danger_loop.ogg b/mods/technic/technic/sounds/technic_hv_nuclear_reactor_siren_danger_loop.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_hv_nuclear_reactor_siren_danger_loop.ogg rename to mods/technic/technic/sounds/technic_hv_nuclear_reactor_siren_danger_loop.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_laser_mk1.0.ogg b/mods/technic/technic/sounds/technic_laser_mk1.0.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_laser_mk1.0.ogg rename to mods/technic/technic/sounds/technic_laser_mk1.0.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_laser_mk1.1.ogg b/mods/technic/technic/sounds/technic_laser_mk1.1.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_laser_mk1.1.ogg rename to mods/technic/technic/sounds/technic_laser_mk1.1.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_laser_mk2.0.ogg b/mods/technic/technic/sounds/technic_laser_mk2.0.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_laser_mk2.0.ogg rename to mods/technic/technic/sounds/technic_laser_mk2.0.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_laser_mk2.1.ogg b/mods/technic/technic/sounds/technic_laser_mk2.1.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_laser_mk2.1.ogg rename to mods/technic/technic/sounds/technic_laser_mk2.1.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_laser_mk2.2.ogg b/mods/technic/technic/sounds/technic_laser_mk2.2.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_laser_mk2.2.ogg rename to mods/technic/technic/sounds/technic_laser_mk2.2.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_laser_mk3.1.ogg b/mods/technic/technic/sounds/technic_laser_mk3.1.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_laser_mk3.1.ogg rename to mods/technic/technic/sounds/technic_laser_mk3.1.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_laser_mk3.2.ogg b/mods/technic/technic/sounds/technic_laser_mk3.2.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_laser_mk3.2.ogg rename to mods/technic/technic/sounds/technic_laser_mk3.2.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_prospector_hit.ogg b/mods/technic/technic/sounds/technic_prospector_hit.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_prospector_hit.ogg rename to mods/technic/technic/sounds/technic_prospector_hit.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_prospector_miss.ogg b/mods/technic/technic/sounds/technic_prospector_miss.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_prospector_miss.ogg rename to mods/technic/technic/sounds/technic_prospector_miss.ogg diff --git a/mods/ITEMS/technic/technic/sounds/technic_sonic_screwdriver.ogg b/mods/technic/technic/sounds/technic_sonic_screwdriver.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/technic_sonic_screwdriver.ogg rename to mods/technic/technic/sounds/technic_sonic_screwdriver.ogg diff --git a/mods/ITEMS/technic/technic/sounds/vacuumcleaner.ogg b/mods/technic/technic/sounds/vacuumcleaner.ogg similarity index 100% rename from mods/ITEMS/technic/technic/sounds/vacuumcleaner.ogg rename to mods/technic/technic/sounds/vacuumcleaner.ogg diff --git a/mods/ITEMS/technic/technic/textures/power_meter.png b/mods/technic/technic/textures/power_meter.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/power_meter.png rename to mods/technic/technic/textures/power_meter.png diff --git a/mods/ITEMS/technic/technic/textures/technic_acacia_grindings.png b/mods/technic/technic/textures/technic_acacia_grindings.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_acacia_grindings.png rename to mods/technic/technic/textures/technic_acacia_grindings.png diff --git a/mods/ITEMS/technic/technic/textures/technic_admin_anchor.png b/mods/technic/technic/textures/technic_admin_anchor.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_admin_anchor.png rename to mods/technic/technic/textures/technic_admin_anchor.png diff --git a/mods/ITEMS/technic/technic/textures/technic_akalin_dust.png b/mods/technic/technic/textures/technic_akalin_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_akalin_dust.png rename to mods/technic/technic/textures/technic_akalin_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_alatro_dust.png b/mods/technic/technic/textures/technic_alatro_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_alatro_dust.png rename to mods/technic/technic/textures/technic_alatro_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_alloy_furnace_front.png b/mods/technic/technic/textures/technic_alloy_furnace_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_alloy_furnace_front.png rename to mods/technic/technic/textures/technic_alloy_furnace_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_alloy_furnace_front_active.png b/mods/technic/technic/textures/technic_alloy_furnace_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_alloy_furnace_front_active.png rename to mods/technic/technic/textures/technic_alloy_furnace_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_alloy_furnace_side.png b/mods/technic/technic/textures/technic_alloy_furnace_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_alloy_furnace_side.png rename to mods/technic/technic/textures/technic_alloy_furnace_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_alloy_furnace_top.png b/mods/technic/technic/textures/technic_alloy_furnace_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_alloy_furnace_top.png rename to mods/technic/technic/textures/technic_alloy_furnace_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_arol_dust.png b/mods/technic/technic/textures/technic_arol_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_arol_dust.png rename to mods/technic/technic/textures/technic_arol_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_battery.png b/mods/technic/technic/textures/technic_battery.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_battery.png rename to mods/technic/technic/textures/technic_battery.png diff --git a/mods/ITEMS/technic/technic/textures/technic_battery_box_bottom.png b/mods/technic/technic/textures/technic_battery_box_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_battery_box_bottom.png rename to mods/technic/technic/textures/technic_battery_box_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_battery_box_side0.png b/mods/technic/technic/textures/technic_battery_box_side0.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_battery_box_side0.png rename to mods/technic/technic/textures/technic_battery_box_side0.png diff --git a/mods/ITEMS/technic/technic/textures/technic_battery_box_top.png b/mods/technic/technic/textures/technic_battery_box_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_battery_box_top.png rename to mods/technic/technic/textures/technic_battery_box_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_battery_meter_fg.png b/mods/technic/technic/textures/technic_battery_meter_fg.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_battery_meter_fg.png rename to mods/technic/technic/textures/technic_battery_meter_fg.png diff --git a/mods/ITEMS/technic/technic/textures/technic_battery_reload.png b/mods/technic/technic/textures/technic_battery_reload.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_battery_reload.png rename to mods/technic/technic/textures/technic_battery_reload.png diff --git a/mods/ITEMS/technic/technic/textures/technic_brass_dust.png b/mods/technic/technic/textures/technic_brass_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_brass_dust.png rename to mods/technic/technic/textures/technic_brass_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_bronze_dust.png b/mods/technic/technic/textures/technic_bronze_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_bronze_dust.png rename to mods/technic/technic/textures/technic_bronze_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_bucket_corium.png b/mods/technic/technic/textures/technic_bucket_corium.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_bucket_corium.png rename to mods/technic/technic/textures/technic_bucket_corium.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cable_connection_overlay.png b/mods/technic/technic/textures/technic_cable_connection_overlay.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cable_connection_overlay.png rename to mods/technic/technic/textures/technic_cable_connection_overlay.png diff --git a/mods/ITEMS/technic/technic/textures/technic_carbon_cloth.png b/mods/technic/technic/textures/technic_carbon_cloth.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_carbon_cloth.png rename to mods/technic/technic/textures/technic_carbon_cloth.png diff --git a/mods/ITEMS/technic/technic/textures/technic_carbon_plate.png b/mods/technic/technic/textures/technic_carbon_plate.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_carbon_plate.png rename to mods/technic/technic/textures/technic_carbon_plate.png diff --git a/mods/ITEMS/technic/technic/textures/technic_carbon_steel_dust.png b/mods/technic/technic/textures/technic_carbon_steel_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_carbon_steel_dust.png rename to mods/technic/technic/textures/technic_carbon_steel_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cast_iron_dust.png b/mods/technic/technic/textures/technic_cast_iron_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cast_iron_dust.png rename to mods/technic/technic/textures/technic_cast_iron_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_chainsaw.png b/mods/technic/technic/textures/technic_chainsaw.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_chainsaw.png rename to mods/technic/technic/textures/technic_chainsaw.png diff --git a/mods/ITEMS/technic/technic/textures/technic_chernobylite_block.png b/mods/technic/technic/textures/technic_chernobylite_block.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_chernobylite_block.png rename to mods/technic/technic/textures/technic_chernobylite_block.png diff --git a/mods/ITEMS/technic/technic/textures/technic_chernobylite_dust.png b/mods/technic/technic/textures/technic_chernobylite_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_chernobylite_dust.png rename to mods/technic/technic/textures/technic_chernobylite_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_chromium_dust.png b/mods/technic/technic/textures/technic_chromium_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_chromium_dust.png rename to mods/technic/technic/textures/technic_chromium_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_bottom.png b/mods/technic/technic/textures/technic_cnc_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_bottom.png rename to mods/technic/technic/textures/technic_cnc_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_cylinder.png b/mods/technic/technic/textures/technic_cnc_cylinder.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_cylinder.png rename to mods/technic/technic/textures/technic_cnc_cylinder.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_cylinder_horizontal.png b/mods/technic/technic/textures/technic_cnc_cylinder_horizontal.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_cylinder_horizontal.png rename to mods/technic/technic/textures/technic_cnc_cylinder_horizontal.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_element_cross.png b/mods/technic/technic/textures/technic_cnc_element_cross.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_element_cross.png rename to mods/technic/technic/textures/technic_cnc_element_cross.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_element_edge.png b/mods/technic/technic/textures/technic_cnc_element_edge.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_element_edge.png rename to mods/technic/technic/textures/technic_cnc_element_edge.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_element_end.png b/mods/technic/technic/textures/technic_cnc_element_end.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_element_end.png rename to mods/technic/technic/textures/technic_cnc_element_end.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_element_straight.png b/mods/technic/technic/textures/technic_cnc_element_straight.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_element_straight.png rename to mods/technic/technic/textures/technic_cnc_element_straight.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_element_t.png b/mods/technic/technic/textures/technic_cnc_element_t.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_element_t.png rename to mods/technic/technic/textures/technic_cnc_element_t.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_front.png b/mods/technic/technic/textures/technic_cnc_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_front.png rename to mods/technic/technic/textures/technic_cnc_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_front_active.png b/mods/technic/technic/textures/technic_cnc_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_front_active.png rename to mods/technic/technic/textures/technic_cnc_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_full.png b/mods/technic/technic/textures/technic_cnc_full.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_full.png rename to mods/technic/technic/textures/technic_cnc_full.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_half.png b/mods/technic/technic/textures/technic_cnc_half.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_half.png rename to mods/technic/technic/textures/technic_cnc_half.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_milling_background.png b/mods/technic/technic/textures/technic_cnc_milling_background.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_milling_background.png rename to mods/technic/technic/textures/technic_cnc_milling_background.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_oblate_spheroid.png b/mods/technic/technic/textures/technic_cnc_oblate_spheroid.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_oblate_spheroid.png rename to mods/technic/technic/textures/technic_cnc_oblate_spheroid.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_onecurvededge.png b/mods/technic/technic/textures/technic_cnc_onecurvededge.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_onecurvededge.png rename to mods/technic/technic/textures/technic_cnc_onecurvededge.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_pyramid.png b/mods/technic/technic/textures/technic_cnc_pyramid.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_pyramid.png rename to mods/technic/technic/textures/technic_cnc_pyramid.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_side.png b/mods/technic/technic/textures/technic_cnc_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_side.png rename to mods/technic/technic/textures/technic_cnc_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_slope.png b/mods/technic/technic/textures/technic_cnc_slope.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_slope.png rename to mods/technic/technic/textures/technic_cnc_slope.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_slope_edge.png b/mods/technic/technic/textures/technic_cnc_slope_edge.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_slope_edge.png rename to mods/technic/technic/textures/technic_cnc_slope_edge.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_slope_edge_upsdwn.png b/mods/technic/technic/textures/technic_cnc_slope_edge_upsdwn.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_slope_edge_upsdwn.png rename to mods/technic/technic/textures/technic_cnc_slope_edge_upsdwn.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_slope_inner_edge.png b/mods/technic/technic/textures/technic_cnc_slope_inner_edge.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_slope_inner_edge.png rename to mods/technic/technic/textures/technic_cnc_slope_inner_edge.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png b/mods/technic/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png rename to mods/technic/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_slope_lying.png b/mods/technic/technic/textures/technic_cnc_slope_lying.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_slope_lying.png rename to mods/technic/technic/textures/technic_cnc_slope_lying.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_slope_upsdwn.png b/mods/technic/technic/textures/technic_cnc_slope_upsdwn.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_slope_upsdwn.png rename to mods/technic/technic/textures/technic_cnc_slope_upsdwn.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_sphere.png b/mods/technic/technic/textures/technic_cnc_sphere.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_sphere.png rename to mods/technic/technic/textures/technic_cnc_sphere.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_spike.png b/mods/technic/technic/textures/technic_cnc_spike.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_spike.png rename to mods/technic/technic/textures/technic_cnc_spike.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_stick.png b/mods/technic/technic/textures/technic_cnc_stick.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_stick.png rename to mods/technic/technic/textures/technic_cnc_stick.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_top.png b/mods/technic/technic/textures/technic_cnc_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_top.png rename to mods/technic/technic/textures/technic_cnc_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_top_active.png b/mods/technic/technic/textures/technic_cnc_top_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_top_active.png rename to mods/technic/technic/textures/technic_cnc_top_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_cnc_twocurvededge.png b/mods/technic/technic/textures/technic_cnc_twocurvededge.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_cnc_twocurvededge.png rename to mods/technic/technic/textures/technic_cnc_twocurvededge.png diff --git a/mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_bottom.png b/mods/technic/technic/textures/technic_coal_alloy_furnace_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_bottom.png rename to mods/technic/technic/textures/technic_coal_alloy_furnace_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_front.png b/mods/technic/technic/textures/technic_coal_alloy_furnace_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_front.png rename to mods/technic/technic/textures/technic_coal_alloy_furnace_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_front_active.png b/mods/technic/technic/textures/technic_coal_alloy_furnace_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_front_active.png rename to mods/technic/technic/textures/technic_coal_alloy_furnace_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_side.png b/mods/technic/technic/textures/technic_coal_alloy_furnace_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_side.png rename to mods/technic/technic/textures/technic_coal_alloy_furnace_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_top.png b/mods/technic/technic/textures/technic_coal_alloy_furnace_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_coal_alloy_furnace_top.png rename to mods/technic/technic/textures/technic_coal_alloy_furnace_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_coal_dust.png b/mods/technic/technic/textures/technic_coal_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_coal_dust.png rename to mods/technic/technic/textures/technic_coal_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_common_tree_grindings.png b/mods/technic/technic/textures/technic_common_tree_grindings.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_common_tree_grindings.png rename to mods/technic/technic/textures/technic_common_tree_grindings.png diff --git a/mods/ITEMS/technic/technic/textures/technic_composite_plate.png b/mods/technic/technic/textures/technic_composite_plate.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_composite_plate.png rename to mods/technic/technic/textures/technic_composite_plate.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_back.png b/mods/technic/technic/textures/technic_constructor_back.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_back.png rename to mods/technic/technic/textures/technic_constructor_back.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_front_off.png b/mods/technic/technic/textures/technic_constructor_front_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_front_off.png rename to mods/technic/technic/textures/technic_constructor_front_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_front_on.png b/mods/technic/technic/textures/technic_constructor_front_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_front_on.png rename to mods/technic/technic/textures/technic_constructor_front_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk1_bottom_off.png b/mods/technic/technic/textures/technic_constructor_mk1_bottom_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk1_bottom_off.png rename to mods/technic/technic/textures/technic_constructor_mk1_bottom_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk1_bottom_on.png b/mods/technic/technic/textures/technic_constructor_mk1_bottom_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk1_bottom_on.png rename to mods/technic/technic/textures/technic_constructor_mk1_bottom_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk1_side1_off.png b/mods/technic/technic/textures/technic_constructor_mk1_side1_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk1_side1_off.png rename to mods/technic/technic/textures/technic_constructor_mk1_side1_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk1_side1_on.png b/mods/technic/technic/textures/technic_constructor_mk1_side1_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk1_side1_on.png rename to mods/technic/technic/textures/technic_constructor_mk1_side1_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk1_side2_off.png b/mods/technic/technic/textures/technic_constructor_mk1_side2_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk1_side2_off.png rename to mods/technic/technic/textures/technic_constructor_mk1_side2_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk1_side2_on.png b/mods/technic/technic/textures/technic_constructor_mk1_side2_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk1_side2_on.png rename to mods/technic/technic/textures/technic_constructor_mk1_side2_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk1_top_off.png b/mods/technic/technic/textures/technic_constructor_mk1_top_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk1_top_off.png rename to mods/technic/technic/textures/technic_constructor_mk1_top_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk1_top_on.png b/mods/technic/technic/textures/technic_constructor_mk1_top_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk1_top_on.png rename to mods/technic/technic/textures/technic_constructor_mk1_top_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk2_bottom_off.png b/mods/technic/technic/textures/technic_constructor_mk2_bottom_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk2_bottom_off.png rename to mods/technic/technic/textures/technic_constructor_mk2_bottom_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk2_bottom_on.png b/mods/technic/technic/textures/technic_constructor_mk2_bottom_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk2_bottom_on.png rename to mods/technic/technic/textures/technic_constructor_mk2_bottom_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk2_side1_off.png b/mods/technic/technic/textures/technic_constructor_mk2_side1_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk2_side1_off.png rename to mods/technic/technic/textures/technic_constructor_mk2_side1_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk2_side1_on.png b/mods/technic/technic/textures/technic_constructor_mk2_side1_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk2_side1_on.png rename to mods/technic/technic/textures/technic_constructor_mk2_side1_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk2_side2_off.png b/mods/technic/technic/textures/technic_constructor_mk2_side2_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk2_side2_off.png rename to mods/technic/technic/textures/technic_constructor_mk2_side2_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk2_side2_on.png b/mods/technic/technic/textures/technic_constructor_mk2_side2_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk2_side2_on.png rename to mods/technic/technic/textures/technic_constructor_mk2_side2_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk2_top_off.png b/mods/technic/technic/textures/technic_constructor_mk2_top_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk2_top_off.png rename to mods/technic/technic/textures/technic_constructor_mk2_top_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk2_top_on.png b/mods/technic/technic/textures/technic_constructor_mk2_top_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk2_top_on.png rename to mods/technic/technic/textures/technic_constructor_mk2_top_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk3_bottom_off.png b/mods/technic/technic/textures/technic_constructor_mk3_bottom_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk3_bottom_off.png rename to mods/technic/technic/textures/technic_constructor_mk3_bottom_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk3_bottom_on.png b/mods/technic/technic/textures/technic_constructor_mk3_bottom_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk3_bottom_on.png rename to mods/technic/technic/textures/technic_constructor_mk3_bottom_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk3_side1_off.png b/mods/technic/technic/textures/technic_constructor_mk3_side1_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk3_side1_off.png rename to mods/technic/technic/textures/technic_constructor_mk3_side1_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk3_side1_on.png b/mods/technic/technic/textures/technic_constructor_mk3_side1_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk3_side1_on.png rename to mods/technic/technic/textures/technic_constructor_mk3_side1_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk3_side2_off.png b/mods/technic/technic/textures/technic_constructor_mk3_side2_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk3_side2_off.png rename to mods/technic/technic/textures/technic_constructor_mk3_side2_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk3_side2_on.png b/mods/technic/technic/textures/technic_constructor_mk3_side2_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk3_side2_on.png rename to mods/technic/technic/textures/technic_constructor_mk3_side2_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk3_top_off.png b/mods/technic/technic/textures/technic_constructor_mk3_top_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk3_top_off.png rename to mods/technic/technic/textures/technic_constructor_mk3_top_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_constructor_mk3_top_on.png b/mods/technic/technic/textures/technic_constructor_mk3_top_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_constructor_mk3_top_on.png rename to mods/technic/technic/textures/technic_constructor_mk3_top_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_control_logic_unit.png b/mods/technic/technic/textures/technic_control_logic_unit.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_control_logic_unit.png rename to mods/technic/technic/textures/technic_control_logic_unit.png diff --git a/mods/ITEMS/technic/technic/textures/technic_copper_coil.png b/mods/technic/technic/textures/technic_copper_coil.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_copper_coil.png rename to mods/technic/technic/textures/technic_copper_coil.png diff --git a/mods/ITEMS/technic/technic/textures/technic_copper_dust.png b/mods/technic/technic/textures/technic_copper_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_copper_dust.png rename to mods/technic/technic/textures/technic_copper_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_copper_plate.png b/mods/technic/technic/textures/technic_copper_plate.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_copper_plate.png rename to mods/technic/technic/textures/technic_copper_plate.png diff --git a/mods/ITEMS/technic/technic/textures/technic_corium_flowing_animated.png b/mods/technic/technic/textures/technic_corium_flowing_animated.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_corium_flowing_animated.png rename to mods/technic/technic/textures/technic_corium_flowing_animated.png diff --git a/mods/ITEMS/technic/technic/textures/technic_corium_source_animated.png b/mods/technic/technic/textures/technic_corium_source_animated.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_corium_source_animated.png rename to mods/technic/technic/textures/technic_corium_source_animated.png diff --git a/mods/ITEMS/technic/technic/textures/technic_deployer_back.png b/mods/technic/technic/textures/technic_deployer_back.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_deployer_back.png rename to mods/technic/technic/textures/technic_deployer_back.png diff --git a/mods/ITEMS/technic/technic/textures/technic_deployer_bottom.png b/mods/technic/technic/textures/technic_deployer_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_deployer_bottom.png rename to mods/technic/technic/textures/technic_deployer_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_deployer_front_off.png b/mods/technic/technic/textures/technic_deployer_front_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_deployer_front_off.png rename to mods/technic/technic/textures/technic_deployer_front_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_deployer_front_on.png b/mods/technic/technic/textures/technic_deployer_front_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_deployer_front_on.png rename to mods/technic/technic/textures/technic_deployer_front_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_deployer_side.png b/mods/technic/technic/textures/technic_deployer_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_deployer_side.png rename to mods/technic/technic/textures/technic_deployer_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_deployer_side1.png b/mods/technic/technic/textures/technic_deployer_side1.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_deployer_side1.png rename to mods/technic/technic/textures/technic_deployer_side1.png diff --git a/mods/ITEMS/technic/technic/textures/technic_deployer_side2.png b/mods/technic/technic/textures/technic_deployer_side2.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_deployer_side2.png rename to mods/technic/technic/textures/technic_deployer_side2.png diff --git a/mods/ITEMS/technic/technic/textures/technic_deployer_top.png b/mods/technic/technic/textures/technic_deployer_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_deployer_top.png rename to mods/technic/technic/textures/technic_deployer_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_diamond_block_blue.png b/mods/technic/technic/textures/technic_diamond_block_blue.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_diamond_block_blue.png rename to mods/technic/technic/textures/technic_diamond_block_blue.png diff --git a/mods/ITEMS/technic/technic/textures/technic_diamond_block_green.png b/mods/technic/technic/textures/technic_diamond_block_green.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_diamond_block_green.png rename to mods/technic/technic/textures/technic_diamond_block_green.png diff --git a/mods/ITEMS/technic/technic/textures/technic_diamond_block_red.png b/mods/technic/technic/textures/technic_diamond_block_red.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_diamond_block_red.png rename to mods/technic/technic/textures/technic_diamond_block_red.png diff --git a/mods/ITEMS/technic/technic/textures/technic_diamond_drill_head.png b/mods/technic/technic/textures/technic_diamond_drill_head.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_diamond_drill_head.png rename to mods/technic/technic/textures/technic_diamond_drill_head.png diff --git a/mods/ITEMS/technic/technic/textures/technic_doped_silicon_wafer.png b/mods/technic/technic/textures/technic_doped_silicon_wafer.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_doped_silicon_wafer.png rename to mods/technic/technic/textures/technic_doped_silicon_wafer.png diff --git a/mods/ITEMS/technic/technic/textures/technic_electric_furnace_bottom.png b/mods/technic/technic/textures/technic_electric_furnace_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_electric_furnace_bottom.png rename to mods/technic/technic/textures/technic_electric_furnace_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_electric_furnace_front.png b/mods/technic/technic/textures/technic_electric_furnace_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_electric_furnace_front.png rename to mods/technic/technic/textures/technic_electric_furnace_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_electric_furnace_front_active.png b/mods/technic/technic/textures/technic_electric_furnace_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_electric_furnace_front_active.png rename to mods/technic/technic/textures/technic_electric_furnace_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_electric_furnace_side.png b/mods/technic/technic/textures/technic_electric_furnace_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_electric_furnace_side.png rename to mods/technic/technic/textures/technic_electric_furnace_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_electric_furnace_top.png b/mods/technic/technic/textures/technic_electric_furnace_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_electric_furnace_top.png rename to mods/technic/technic/textures/technic_electric_furnace_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_fine_copper_wire.png b/mods/technic/technic/textures/technic_fine_copper_wire.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_fine_copper_wire.png rename to mods/technic/technic/textures/technic_fine_copper_wire.png diff --git a/mods/ITEMS/technic/technic/textures/technic_fine_gold_wire.png b/mods/technic/technic/textures/technic_fine_gold_wire.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_fine_gold_wire.png rename to mods/technic/technic/textures/technic_fine_gold_wire.png diff --git a/mods/ITEMS/technic/technic/textures/technic_fine_silver_wire.png b/mods/technic/technic/textures/technic_fine_silver_wire.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_fine_silver_wire.png rename to mods/technic/technic/textures/technic_fine_silver_wire.png diff --git a/mods/ITEMS/technic/technic/textures/technic_flashlight.png b/mods/technic/technic/textures/technic_flashlight.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_flashlight.png rename to mods/technic/technic/textures/technic_flashlight.png diff --git a/mods/ITEMS/technic/technic/textures/technic_forcefield_animated.png b/mods/technic/technic/textures/technic_forcefield_animated.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_forcefield_animated.png rename to mods/technic/technic/textures/technic_forcefield_animated.png diff --git a/mods/ITEMS/technic/technic/textures/technic_forcefield_emitter_off.png b/mods/technic/technic/textures/technic_forcefield_emitter_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_forcefield_emitter_off.png rename to mods/technic/technic/textures/technic_forcefield_emitter_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_forcefield_emitter_on.png b/mods/technic/technic/textures/technic_forcefield_emitter_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_forcefield_emitter_on.png rename to mods/technic/technic/textures/technic_forcefield_emitter_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_frame.png b/mods/technic/technic/textures/technic_frame.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_frame.png rename to mods/technic/technic/textures/technic_frame.png diff --git a/mods/ITEMS/technic/technic/textures/technic_generator_front.png b/mods/technic/technic/textures/technic_generator_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_generator_front.png rename to mods/technic/technic/textures/technic_generator_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_generator_front_active.png b/mods/technic/technic/textures/technic_generator_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_generator_front_active.png rename to mods/technic/technic/textures/technic_generator_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_generator_side.png b/mods/technic/technic/textures/technic_generator_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_generator_side.png rename to mods/technic/technic/textures/technic_generator_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_generator_top.png b/mods/technic/technic/textures/technic_generator_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_generator_top.png rename to mods/technic/technic/textures/technic_generator_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_geothermal_side.png b/mods/technic/technic/textures/technic_geothermal_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_geothermal_side.png rename to mods/technic/technic/textures/technic_geothermal_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_geothermal_top.png b/mods/technic/technic/textures/technic_geothermal_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_geothermal_top.png rename to mods/technic/technic/textures/technic_geothermal_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_geothermal_top_active.png b/mods/technic/technic/textures/technic_geothermal_top_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_geothermal_top_active.png rename to mods/technic/technic/textures/technic_geothermal_top_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_gold_dust.png b/mods/technic/technic/textures/technic_gold_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_gold_dust.png rename to mods/technic/technic/textures/technic_gold_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_graphite.png b/mods/technic/technic/textures/technic_graphite.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_graphite.png rename to mods/technic/technic/textures/technic_graphite.png diff --git a/mods/ITEMS/technic/technic/textures/technic_grinder_front.png b/mods/technic/technic/textures/technic_grinder_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_grinder_front.png rename to mods/technic/technic/textures/technic_grinder_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_grinder_side.png b/mods/technic/technic/textures/technic_grinder_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_grinder_side.png rename to mods/technic/technic/textures/technic_grinder_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_grinder_top.png b/mods/technic/technic/textures/technic_grinder_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_grinder_top.png rename to mods/technic/technic/textures/technic_grinder_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_white_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_cube_white_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_white_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_cube_white_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_white_sides_ceiling.png b/mods/technic/technic/textures/technic_homedecor_glowlight_cube_white_sides_ceiling.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_white_sides_ceiling.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_cube_white_sides_ceiling.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_white_tb.png b/mods/technic/technic/textures/technic_homedecor_glowlight_cube_white_tb.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_white_tb.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_cube_white_tb.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_sides_ceiling.png b/mods/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_sides_ceiling.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_sides_ceiling.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_sides_ceiling.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_tb.png b/mods/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_tb.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_tb.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_cube_yellow_tb.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thick_white_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_thick_white_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thick_white_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_thick_white_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thick_white_wall_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_thick_white_wall_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thick_white_wall_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_thick_white_wall_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thick_yellow_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_thick_yellow_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thick_yellow_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_thick_yellow_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thick_yellow_wall_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_thick_yellow_wall_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thick_yellow_wall_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_thick_yellow_wall_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thin_white_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_thin_white_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thin_white_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_thin_white_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thin_white_wall_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_thin_white_wall_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thin_white_wall_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_thin_white_wall_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thin_yellow_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_thin_yellow_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thin_yellow_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_thin_yellow_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thin_yellow_wall_sides.png b/mods/technic/technic/textures/technic_homedecor_glowlight_thin_yellow_wall_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_thin_yellow_wall_sides.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_thin_yellow_wall_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_white_tb.png b/mods/technic/technic/textures/technic_homedecor_glowlight_white_tb.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_white_tb.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_white_tb.png diff --git a/mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_yellow_tb.png b/mods/technic/technic/textures/technic_homedecor_glowlight_yellow_tb.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_homedecor_glowlight_yellow_tb.png rename to mods/technic/technic/textures/technic_homedecor_glowlight_yellow_tb.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_battery_box_bottom.png b/mods/technic/technic/textures/technic_hv_battery_box_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_battery_box_bottom.png rename to mods/technic/technic/textures/technic_hv_battery_box_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_battery_box_front.png b/mods/technic/technic/textures/technic_hv_battery_box_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_battery_box_front.png rename to mods/technic/technic/textures/technic_hv_battery_box_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_battery_box_side.png b/mods/technic/technic/textures/technic_hv_battery_box_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_battery_box_side.png rename to mods/technic/technic/textures/technic_hv_battery_box_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_battery_box_top.png b/mods/technic/technic/textures/technic_hv_battery_box_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_battery_box_top.png rename to mods/technic/technic/textures/technic_hv_battery_box_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_cable.png b/mods/technic/technic/textures/technic_hv_cable.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_cable.png rename to mods/technic/technic/textures/technic_hv_cable.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_cable_wield.png b/mods/technic/technic/textures/technic_hv_cable_wield.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_cable_wield.png rename to mods/technic/technic/textures/technic_hv_cable_wield.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_down_converter_bottom.png b/mods/technic/technic/textures/technic_hv_down_converter_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_down_converter_bottom.png rename to mods/technic/technic/textures/technic_hv_down_converter_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_down_converter_side.png b/mods/technic/technic/textures/technic_hv_down_converter_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_down_converter_side.png rename to mods/technic/technic/textures/technic_hv_down_converter_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_down_converter_top.png b/mods/technic/technic/textures/technic_hv_down_converter_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_down_converter_top.png rename to mods/technic/technic/textures/technic_hv_down_converter_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_generator_front.png b/mods/technic/technic/textures/technic_hv_generator_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_generator_front.png rename to mods/technic/technic/textures/technic_hv_generator_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_generator_front_active.png b/mods/technic/technic/textures/technic_hv_generator_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_generator_front_active.png rename to mods/technic/technic/textures/technic_hv_generator_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_generator_side.png b/mods/technic/technic/textures/technic_hv_generator_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_generator_side.png rename to mods/technic/technic/textures/technic_hv_generator_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_generator_top.png b/mods/technic/technic/textures/technic_hv_generator_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_generator_top.png rename to mods/technic/technic/textures/technic_hv_generator_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_grinder_bottom.png b/mods/technic/technic/textures/technic_hv_grinder_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_grinder_bottom.png rename to mods/technic/technic/textures/technic_hv_grinder_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_grinder_front.png b/mods/technic/technic/textures/technic_hv_grinder_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_grinder_front.png rename to mods/technic/technic/textures/technic_hv_grinder_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_grinder_front_active.png b/mods/technic/technic/textures/technic_hv_grinder_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_grinder_front_active.png rename to mods/technic/technic/textures/technic_hv_grinder_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_grinder_side.png b/mods/technic/technic/textures/technic_hv_grinder_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_grinder_side.png rename to mods/technic/technic/textures/technic_hv_grinder_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_grinder_side_tube.png b/mods/technic/technic/textures/technic_hv_grinder_side_tube.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_grinder_side_tube.png rename to mods/technic/technic/textures/technic_hv_grinder_side_tube.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_grinder_top.png b/mods/technic/technic/textures/technic_hv_grinder_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_grinder_top.png rename to mods/technic/technic/textures/technic_hv_grinder_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_nuclear_reactor_core.png b/mods/technic/technic/textures/technic_hv_nuclear_reactor_core.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_nuclear_reactor_core.png rename to mods/technic/technic/textures/technic_hv_nuclear_reactor_core.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_solar_array_bottom.png b/mods/technic/technic/textures/technic_hv_solar_array_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_solar_array_bottom.png rename to mods/technic/technic/textures/technic_hv_solar_array_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_solar_array_side.png b/mods/technic/technic/textures/technic_hv_solar_array_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_solar_array_side.png rename to mods/technic/technic/textures/technic_hv_solar_array_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_solar_array_top.png b/mods/technic/technic/textures/technic_hv_solar_array_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_solar_array_top.png rename to mods/technic/technic/textures/technic_hv_solar_array_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_hv_transformer.png b/mods/technic/technic/textures/technic_hv_transformer.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_hv_transformer.png rename to mods/technic/technic/textures/technic_hv_transformer.png diff --git a/mods/ITEMS/technic/technic/textures/technic_injector_bottom.png b/mods/technic/technic/textures/technic_injector_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_injector_bottom.png rename to mods/technic/technic/textures/technic_injector_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_injector_side.png b/mods/technic/technic/textures/technic_injector_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_injector_side.png rename to mods/technic/technic/textures/technic_injector_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_injector_top.png b/mods/technic/technic/textures/technic_injector_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_injector_top.png rename to mods/technic/technic/textures/technic_injector_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_kalite_dust.png b/mods/technic/technic/textures/technic_kalite_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_kalite_dust.png rename to mods/technic/technic/textures/technic_kalite_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_laser_beam.png b/mods/technic/technic/textures/technic_laser_beam.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_laser_beam.png rename to mods/technic/technic/textures/technic_laser_beam.png diff --git a/mods/ITEMS/technic/technic/textures/technic_laser_beam_mk1.png b/mods/technic/technic/textures/technic_laser_beam_mk1.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_laser_beam_mk1.png rename to mods/technic/technic/textures/technic_laser_beam_mk1.png diff --git a/mods/ITEMS/technic/technic/textures/technic_laser_beam_mk2.png b/mods/technic/technic/textures/technic_laser_beam_mk2.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_laser_beam_mk2.png rename to mods/technic/technic/textures/technic_laser_beam_mk2.png diff --git a/mods/ITEMS/technic/technic/textures/technic_laser_beam_mk3.png b/mods/technic/technic/textures/technic_laser_beam_mk3.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_laser_beam_mk3.png rename to mods/technic/technic/textures/technic_laser_beam_mk3.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lava_can.png b/mods/technic/technic/textures/technic_lava_can.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lava_can.png rename to mods/technic/technic/textures/technic_lava_can.png diff --git a/mods/ITEMS/technic/technic/textures/technic_light.png b/mods/technic/technic/textures/technic_light.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_light.png rename to mods/technic/technic/textures/technic_light.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_bottom.png b/mods/technic/technic/textures/technic_lv_alloy_furnace_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_bottom.png rename to mods/technic/technic/textures/technic_lv_alloy_furnace_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_front.png b/mods/technic/technic/textures/technic_lv_alloy_furnace_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_front.png rename to mods/technic/technic/textures/technic_lv_alloy_furnace_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_front_active.png b/mods/technic/technic/textures/technic_lv_alloy_furnace_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_front_active.png rename to mods/technic/technic/textures/technic_lv_alloy_furnace_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_side.png b/mods/technic/technic/textures/technic_lv_alloy_furnace_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_side.png rename to mods/technic/technic/textures/technic_lv_alloy_furnace_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_top.png b/mods/technic/technic/textures/technic_lv_alloy_furnace_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_alloy_furnace_top.png rename to mods/technic/technic/textures/technic_lv_alloy_furnace_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_battery_box_bottom.png b/mods/technic/technic/textures/technic_lv_battery_box_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_battery_box_bottom.png rename to mods/technic/technic/textures/technic_lv_battery_box_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_battery_box_side.png b/mods/technic/technic/textures/technic_lv_battery_box_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_battery_box_side.png rename to mods/technic/technic/textures/technic_lv_battery_box_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_battery_box_top.png b/mods/technic/technic/textures/technic_lv_battery_box_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_battery_box_top.png rename to mods/technic/technic/textures/technic_lv_battery_box_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_cable.png b/mods/technic/technic/textures/technic_lv_cable.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_cable.png rename to mods/technic/technic/textures/technic_lv_cable.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_cable_wield.png b/mods/technic/technic/textures/technic_lv_cable_wield.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_cable_wield.png rename to mods/technic/technic/textures/technic_lv_cable_wield.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_compressor_back.png b/mods/technic/technic/textures/technic_lv_compressor_back.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_compressor_back.png rename to mods/technic/technic/textures/technic_lv_compressor_back.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_compressor_bottom.png b/mods/technic/technic/textures/technic_lv_compressor_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_compressor_bottom.png rename to mods/technic/technic/textures/technic_lv_compressor_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_compressor_front.png b/mods/technic/technic/textures/technic_lv_compressor_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_compressor_front.png rename to mods/technic/technic/textures/technic_lv_compressor_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_compressor_front_active.png b/mods/technic/technic/textures/technic_lv_compressor_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_compressor_front_active.png rename to mods/technic/technic/textures/technic_lv_compressor_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_compressor_side.png b/mods/technic/technic/textures/technic_lv_compressor_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_compressor_side.png rename to mods/technic/technic/textures/technic_lv_compressor_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_compressor_top.png b/mods/technic/technic/textures/technic_lv_compressor_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_compressor_top.png rename to mods/technic/technic/textures/technic_lv_compressor_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_bottom.png b/mods/technic/technic/textures/technic_lv_electric_furnace_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_bottom.png rename to mods/technic/technic/textures/technic_lv_electric_furnace_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_front.png b/mods/technic/technic/textures/technic_lv_electric_furnace_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_front.png rename to mods/technic/technic/textures/technic_lv_electric_furnace_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_front_active.png b/mods/technic/technic/textures/technic_lv_electric_furnace_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_front_active.png rename to mods/technic/technic/textures/technic_lv_electric_furnace_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_side.png b/mods/technic/technic/textures/technic_lv_electric_furnace_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_side.png rename to mods/technic/technic/textures/technic_lv_electric_furnace_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_top.png b/mods/technic/technic/textures/technic_lv_electric_furnace_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_electric_furnace_top.png rename to mods/technic/technic/textures/technic_lv_electric_furnace_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_extractor_bottom.png b/mods/technic/technic/textures/technic_lv_extractor_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_extractor_bottom.png rename to mods/technic/technic/textures/technic_lv_extractor_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_extractor_front.png b/mods/technic/technic/textures/technic_lv_extractor_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_extractor_front.png rename to mods/technic/technic/textures/technic_lv_extractor_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_extractor_front_active.png b/mods/technic/technic/textures/technic_lv_extractor_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_extractor_front_active.png rename to mods/technic/technic/textures/technic_lv_extractor_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_extractor_side.png b/mods/technic/technic/textures/technic_lv_extractor_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_extractor_side.png rename to mods/technic/technic/textures/technic_lv_extractor_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_extractor_top.png b/mods/technic/technic/textures/technic_lv_extractor_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_extractor_top.png rename to mods/technic/technic/textures/technic_lv_extractor_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_generator_front.png b/mods/technic/technic/textures/technic_lv_generator_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_generator_front.png rename to mods/technic/technic/textures/technic_lv_generator_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_generator_front_active.png b/mods/technic/technic/textures/technic_lv_generator_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_generator_front_active.png rename to mods/technic/technic/textures/technic_lv_generator_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_generator_side.png b/mods/technic/technic/textures/technic_lv_generator_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_generator_side.png rename to mods/technic/technic/textures/technic_lv_generator_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_generator_top.png b/mods/technic/technic/textures/technic_lv_generator_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_generator_top.png rename to mods/technic/technic/textures/technic_lv_generator_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_grinder_bottom.png b/mods/technic/technic/textures/technic_lv_grinder_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_grinder_bottom.png rename to mods/technic/technic/textures/technic_lv_grinder_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_grinder_front.png b/mods/technic/technic/textures/technic_lv_grinder_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_grinder_front.png rename to mods/technic/technic/textures/technic_lv_grinder_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_grinder_front_active.png b/mods/technic/technic/textures/technic_lv_grinder_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_grinder_front_active.png rename to mods/technic/technic/textures/technic_lv_grinder_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_grinder_side.png b/mods/technic/technic/textures/technic_lv_grinder_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_grinder_side.png rename to mods/technic/technic/textures/technic_lv_grinder_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_grinder_top.png b/mods/technic/technic/textures/technic_lv_grinder_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_grinder_top.png rename to mods/technic/technic/textures/technic_lv_grinder_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_solar_array_bottom.png b/mods/technic/technic/textures/technic_lv_solar_array_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_solar_array_bottom.png rename to mods/technic/technic/textures/technic_lv_solar_array_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_solar_array_side.png b/mods/technic/technic/textures/technic_lv_solar_array_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_solar_array_side.png rename to mods/technic/technic/textures/technic_lv_solar_array_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_solar_array_top.png b/mods/technic/technic/textures/technic_lv_solar_array_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_solar_array_top.png rename to mods/technic/technic/textures/technic_lv_solar_array_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_lv_transformer.png b/mods/technic/technic/textures/technic_lv_transformer.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_lv_transformer.png rename to mods/technic/technic/textures/technic_lv_transformer.png diff --git a/mods/ITEMS/technic/technic/textures/technic_machine_bottom.png b/mods/technic/technic/textures/technic_machine_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_machine_bottom.png rename to mods/technic/technic/textures/technic_machine_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_machine_casing.png b/mods/technic/technic/textures/technic_machine_casing.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_machine_casing.png rename to mods/technic/technic/textures/technic_machine_casing.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mining_drill.png b/mods/technic/technic/textures/technic_mining_drill.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mining_drill.png rename to mods/technic/technic/textures/technic_mining_drill.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mining_drill_mk2.png b/mods/technic/technic/textures/technic_mining_drill_mk2.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mining_drill_mk2.png rename to mods/technic/technic/textures/technic_mining_drill_mk2.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mining_drill_mk3.png b/mods/technic/technic/textures/technic_mining_drill_mk3.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mining_drill_mk3.png rename to mods/technic/technic/textures/technic_mining_drill_mk3.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mining_laser_mk1.png b/mods/technic/technic/textures/technic_mining_laser_mk1.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mining_laser_mk1.png rename to mods/technic/technic/textures/technic_mining_laser_mk1.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mining_laser_mk2.png b/mods/technic/technic/textures/technic_mining_laser_mk2.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mining_laser_mk2.png rename to mods/technic/technic/textures/technic_mining_laser_mk2.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mining_laser_mk3.png b/mods/technic/technic/textures/technic_mining_laser_mk3.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mining_laser_mk3.png rename to mods/technic/technic/textures/technic_mining_laser_mk3.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mithril_dust.png b/mods/technic/technic/textures/technic_mithril_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mithril_dust.png rename to mods/technic/technic/textures/technic_mithril_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mixed_metal_ingot.png b/mods/technic/technic/textures/technic_mixed_metal_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mixed_metal_ingot.png rename to mods/technic/technic/textures/technic_mixed_metal_ingot.png diff --git a/mods/ITEMS/technic/technic/textures/technic_motor.png b/mods/technic/technic/textures/technic_motor.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_motor.png rename to mods/technic/technic/textures/technic_motor.png diff --git a/mods/ITEMS/technic/technic/textures/technic_music_player_bottom.png b/mods/technic/technic/textures/technic_music_player_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_music_player_bottom.png rename to mods/technic/technic/textures/technic_music_player_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_music_player_side.png b/mods/technic/technic/textures/technic_music_player_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_music_player_side.png rename to mods/technic/technic/textures/technic_music_player_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_music_player_top.png b/mods/technic/technic/textures/technic_music_player_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_music_player_top.png rename to mods/technic/technic/textures/technic_music_player_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_bottom.png b/mods/technic/technic/textures/technic_mv_alloy_furnace_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_bottom.png rename to mods/technic/technic/textures/technic_mv_alloy_furnace_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_front.png b/mods/technic/technic/textures/technic_mv_alloy_furnace_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_front.png rename to mods/technic/technic/textures/technic_mv_alloy_furnace_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_front_active.png b/mods/technic/technic/textures/technic_mv_alloy_furnace_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_front_active.png rename to mods/technic/technic/textures/technic_mv_alloy_furnace_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_side.png b/mods/technic/technic/textures/technic_mv_alloy_furnace_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_side.png rename to mods/technic/technic/textures/technic_mv_alloy_furnace_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_side_tube.png b/mods/technic/technic/textures/technic_mv_alloy_furnace_side_tube.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_side_tube.png rename to mods/technic/technic/textures/technic_mv_alloy_furnace_side_tube.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_top.png b/mods/technic/technic/textures/technic_mv_alloy_furnace_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_alloy_furnace_top.png rename to mods/technic/technic/textures/technic_mv_alloy_furnace_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_battery_box_bottom.png b/mods/technic/technic/textures/technic_mv_battery_box_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_battery_box_bottom.png rename to mods/technic/technic/textures/technic_mv_battery_box_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_battery_box_front.png b/mods/technic/technic/textures/technic_mv_battery_box_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_battery_box_front.png rename to mods/technic/technic/textures/technic_mv_battery_box_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_battery_box_side.png b/mods/technic/technic/textures/technic_mv_battery_box_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_battery_box_side.png rename to mods/technic/technic/textures/technic_mv_battery_box_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_battery_box_side0.png b/mods/technic/technic/textures/technic_mv_battery_box_side0.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_battery_box_side0.png rename to mods/technic/technic/textures/technic_mv_battery_box_side0.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_battery_box_top.png b/mods/technic/technic/textures/technic_mv_battery_box_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_battery_box_top.png rename to mods/technic/technic/textures/technic_mv_battery_box_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_cable.png b/mods/technic/technic/textures/technic_mv_cable.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_cable.png rename to mods/technic/technic/textures/technic_mv_cable.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_cable_wield.png b/mods/technic/technic/textures/technic_mv_cable_wield.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_cable_wield.png rename to mods/technic/technic/textures/technic_mv_cable_wield.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_bottom.png b/mods/technic/technic/textures/technic_mv_centrifuge_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_bottom.png rename to mods/technic/technic/textures/technic_mv_centrifuge_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_front.png b/mods/technic/technic/textures/technic_mv_centrifuge_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_front.png rename to mods/technic/technic/textures/technic_mv_centrifuge_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_front_active.png b/mods/technic/technic/textures/technic_mv_centrifuge_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_front_active.png rename to mods/technic/technic/textures/technic_mv_centrifuge_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_side.png b/mods/technic/technic/textures/technic_mv_centrifuge_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_side.png rename to mods/technic/technic/textures/technic_mv_centrifuge_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_top.png b/mods/technic/technic/textures/technic_mv_centrifuge_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_centrifuge_top.png rename to mods/technic/technic/textures/technic_mv_centrifuge_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_compressor_back.png b/mods/technic/technic/textures/technic_mv_compressor_back.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_compressor_back.png rename to mods/technic/technic/textures/technic_mv_compressor_back.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_compressor_bottom.png b/mods/technic/technic/textures/technic_mv_compressor_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_compressor_bottom.png rename to mods/technic/technic/textures/technic_mv_compressor_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_compressor_front.png b/mods/technic/technic/textures/technic_mv_compressor_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_compressor_front.png rename to mods/technic/technic/textures/technic_mv_compressor_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_compressor_front_active.png b/mods/technic/technic/textures/technic_mv_compressor_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_compressor_front_active.png rename to mods/technic/technic/textures/technic_mv_compressor_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_compressor_side.png b/mods/technic/technic/textures/technic_mv_compressor_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_compressor_side.png rename to mods/technic/technic/textures/technic_mv_compressor_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_compressor_top.png b/mods/technic/technic/textures/technic_mv_compressor_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_compressor_top.png rename to mods/technic/technic/textures/technic_mv_compressor_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_down_converter_bottom.png b/mods/technic/technic/textures/technic_mv_down_converter_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_down_converter_bottom.png rename to mods/technic/technic/textures/technic_mv_down_converter_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_down_converter_side.png b/mods/technic/technic/textures/technic_mv_down_converter_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_down_converter_side.png rename to mods/technic/technic/textures/technic_mv_down_converter_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_down_converter_top.png b/mods/technic/technic/textures/technic_mv_down_converter_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_down_converter_top.png rename to mods/technic/technic/textures/technic_mv_down_converter_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_bottom.png b/mods/technic/technic/textures/technic_mv_electric_furnace_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_bottom.png rename to mods/technic/technic/textures/technic_mv_electric_furnace_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_front.png b/mods/technic/technic/textures/technic_mv_electric_furnace_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_front.png rename to mods/technic/technic/textures/technic_mv_electric_furnace_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_front_active.png b/mods/technic/technic/textures/technic_mv_electric_furnace_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_front_active.png rename to mods/technic/technic/textures/technic_mv_electric_furnace_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_side.png b/mods/technic/technic/textures/technic_mv_electric_furnace_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_side.png rename to mods/technic/technic/textures/technic_mv_electric_furnace_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_side_tube.png b/mods/technic/technic/textures/technic_mv_electric_furnace_side_tube.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_side_tube.png rename to mods/technic/technic/textures/technic_mv_electric_furnace_side_tube.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_top.png b/mods/technic/technic/textures/technic_mv_electric_furnace_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_electric_furnace_top.png rename to mods/technic/technic/textures/technic_mv_electric_furnace_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_extractor_bottom.png b/mods/technic/technic/textures/technic_mv_extractor_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_extractor_bottom.png rename to mods/technic/technic/textures/technic_mv_extractor_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_extractor_front.png b/mods/technic/technic/textures/technic_mv_extractor_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_extractor_front.png rename to mods/technic/technic/textures/technic_mv_extractor_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_extractor_front_active.png b/mods/technic/technic/textures/technic_mv_extractor_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_extractor_front_active.png rename to mods/technic/technic/textures/technic_mv_extractor_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_extractor_side.png b/mods/technic/technic/textures/technic_mv_extractor_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_extractor_side.png rename to mods/technic/technic/textures/technic_mv_extractor_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_extractor_top.png b/mods/technic/technic/textures/technic_mv_extractor_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_extractor_top.png rename to mods/technic/technic/textures/technic_mv_extractor_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_generator_front.png b/mods/technic/technic/textures/technic_mv_generator_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_generator_front.png rename to mods/technic/technic/textures/technic_mv_generator_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_generator_front_active.png b/mods/technic/technic/textures/technic_mv_generator_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_generator_front_active.png rename to mods/technic/technic/textures/technic_mv_generator_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_generator_side.png b/mods/technic/technic/textures/technic_mv_generator_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_generator_side.png rename to mods/technic/technic/textures/technic_mv_generator_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_generator_top.png b/mods/technic/technic/textures/technic_mv_generator_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_generator_top.png rename to mods/technic/technic/textures/technic_mv_generator_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_grinder_bottom.png b/mods/technic/technic/textures/technic_mv_grinder_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_grinder_bottom.png rename to mods/technic/technic/textures/technic_mv_grinder_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_grinder_front.png b/mods/technic/technic/textures/technic_mv_grinder_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_grinder_front.png rename to mods/technic/technic/textures/technic_mv_grinder_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_grinder_front_active.png b/mods/technic/technic/textures/technic_mv_grinder_front_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_grinder_front_active.png rename to mods/technic/technic/textures/technic_mv_grinder_front_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_grinder_side.png b/mods/technic/technic/textures/technic_mv_grinder_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_grinder_side.png rename to mods/technic/technic/textures/technic_mv_grinder_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_grinder_side_tube.png b/mods/technic/technic/textures/technic_mv_grinder_side_tube.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_grinder_side_tube.png rename to mods/technic/technic/textures/technic_mv_grinder_side_tube.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_grinder_top.png b/mods/technic/technic/textures/technic_mv_grinder_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_grinder_top.png rename to mods/technic/technic/textures/technic_mv_grinder_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_solar_array_bottom.png b/mods/technic/technic/textures/technic_mv_solar_array_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_solar_array_bottom.png rename to mods/technic/technic/textures/technic_mv_solar_array_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_solar_array_side.png b/mods/technic/technic/textures/technic_mv_solar_array_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_solar_array_side.png rename to mods/technic/technic/textures/technic_mv_solar_array_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_solar_array_top.png b/mods/technic/technic/textures/technic_mv_solar_array_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_solar_array_top.png rename to mods/technic/technic/textures/technic_mv_solar_array_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_mv_transformer.png b/mods/technic/technic/textures/technic_mv_transformer.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_mv_transformer.png rename to mods/technic/technic/textures/technic_mv_transformer.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_back.png b/mods/technic/technic/textures/technic_nodebreaker_back.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_back.png rename to mods/technic/technic/textures/technic_nodebreaker_back.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_bottom.png b/mods/technic/technic/textures/technic_nodebreaker_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_bottom.png rename to mods/technic/technic/textures/technic_nodebreaker_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_bottom_off.png b/mods/technic/technic/textures/technic_nodebreaker_bottom_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_bottom_off.png rename to mods/technic/technic/textures/technic_nodebreaker_bottom_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_bottom_on.png b/mods/technic/technic/textures/technic_nodebreaker_bottom_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_bottom_on.png rename to mods/technic/technic/textures/technic_nodebreaker_bottom_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_front_off.png b/mods/technic/technic/textures/technic_nodebreaker_front_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_front_off.png rename to mods/technic/technic/textures/technic_nodebreaker_front_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_front_on.png b/mods/technic/technic/textures/technic_nodebreaker_front_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_front_on.png rename to mods/technic/technic/textures/technic_nodebreaker_front_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_side.png b/mods/technic/technic/textures/technic_nodebreaker_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_side.png rename to mods/technic/technic/textures/technic_nodebreaker_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_side1.png b/mods/technic/technic/textures/technic_nodebreaker_side1.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_side1.png rename to mods/technic/technic/textures/technic_nodebreaker_side1.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_side1_off.png b/mods/technic/technic/textures/technic_nodebreaker_side1_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_side1_off.png rename to mods/technic/technic/textures/technic_nodebreaker_side1_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_side1_on.png b/mods/technic/technic/textures/technic_nodebreaker_side1_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_side1_on.png rename to mods/technic/technic/textures/technic_nodebreaker_side1_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_side2.png b/mods/technic/technic/textures/technic_nodebreaker_side2.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_side2.png rename to mods/technic/technic/textures/technic_nodebreaker_side2.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_side2_off.png b/mods/technic/technic/textures/technic_nodebreaker_side2_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_side2_off.png rename to mods/technic/technic/textures/technic_nodebreaker_side2_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_side2_on.png b/mods/technic/technic/textures/technic_nodebreaker_side2_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_side2_on.png rename to mods/technic/technic/textures/technic_nodebreaker_side2_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_top.png b/mods/technic/technic/textures/technic_nodebreaker_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_top.png rename to mods/technic/technic/textures/technic_nodebreaker_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_top_off.png b/mods/technic/technic/textures/technic_nodebreaker_top_off.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_top_off.png rename to mods/technic/technic/textures/technic_nodebreaker_top_off.png diff --git a/mods/ITEMS/technic/technic/textures/technic_nodebreaker_top_on.png b/mods/technic/technic/textures/technic_nodebreaker_top_on.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_nodebreaker_top_on.png rename to mods/technic/technic/textures/technic_nodebreaker_top_on.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter.png b/mods/technic/technic/textures/technic_power_meter.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter.png rename to mods/technic/technic/textures/technic_power_meter.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter0.png b/mods/technic/technic/textures/technic_power_meter0.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter0.png rename to mods/technic/technic/textures/technic_power_meter0.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter1.png b/mods/technic/technic/textures/technic_power_meter1.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter1.png rename to mods/technic/technic/textures/technic_power_meter1.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter2.png b/mods/technic/technic/textures/technic_power_meter2.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter2.png rename to mods/technic/technic/textures/technic_power_meter2.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter3.png b/mods/technic/technic/textures/technic_power_meter3.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter3.png rename to mods/technic/technic/textures/technic_power_meter3.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter4.png b/mods/technic/technic/textures/technic_power_meter4.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter4.png rename to mods/technic/technic/textures/technic_power_meter4.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter5.png b/mods/technic/technic/textures/technic_power_meter5.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter5.png rename to mods/technic/technic/textures/technic_power_meter5.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter6.png b/mods/technic/technic/textures/technic_power_meter6.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter6.png rename to mods/technic/technic/textures/technic_power_meter6.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter7.png b/mods/technic/technic/textures/technic_power_meter7.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter7.png rename to mods/technic/technic/textures/technic_power_meter7.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter8.png b/mods/technic/technic/textures/technic_power_meter8.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter8.png rename to mods/technic/technic/textures/technic_power_meter8.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter_bg.png b/mods/technic/technic/textures/technic_power_meter_bg.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter_bg.png rename to mods/technic/technic/textures/technic_power_meter_bg.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_meter_fg.png b/mods/technic/technic/textures/technic_power_meter_fg.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_meter_fg.png rename to mods/technic/technic/textures/technic_power_meter_fg.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_monitor_front.png b/mods/technic/technic/textures/technic_power_monitor_front.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_monitor_front.png rename to mods/technic/technic/textures/technic_power_monitor_front.png diff --git a/mods/ITEMS/technic/technic/textures/technic_power_monitor_sides.png b/mods/technic/technic/textures/technic_power_monitor_sides.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_power_monitor_sides.png rename to mods/technic/technic/textures/technic_power_monitor_sides.png diff --git a/mods/ITEMS/technic/technic/textures/technic_prospector.png b/mods/technic/technic/textures/technic_prospector.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_prospector.png rename to mods/technic/technic/textures/technic_prospector.png diff --git a/mods/ITEMS/technic/technic/textures/technic_raw_latex.png b/mods/technic/technic/textures/technic_raw_latex.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_raw_latex.png rename to mods/technic/technic/textures/technic_raw_latex.png diff --git a/mods/ITEMS/technic/technic/textures/technic_rubber.png b/mods/technic/technic/textures/technic_rubber.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_rubber.png rename to mods/technic/technic/textures/technic_rubber.png diff --git a/mods/ITEMS/technic/technic/textures/technic_rubber_leaves.png b/mods/technic/technic/textures/technic_rubber_leaves.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_rubber_leaves.png rename to mods/technic/technic/textures/technic_rubber_leaves.png diff --git a/mods/ITEMS/technic/technic/textures/technic_rubber_sapling.png b/mods/technic/technic/textures/technic_rubber_sapling.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_rubber_sapling.png rename to mods/technic/technic/textures/technic_rubber_sapling.png diff --git a/mods/ITEMS/technic/technic/textures/technic_rubber_tree_empty.png b/mods/technic/technic/textures/technic_rubber_tree_empty.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_rubber_tree_empty.png rename to mods/technic/technic/textures/technic_rubber_tree_empty.png diff --git a/mods/ITEMS/technic/technic/textures/technic_rubber_tree_full.png b/mods/technic/technic/textures/technic_rubber_tree_full.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_rubber_tree_full.png rename to mods/technic/technic/textures/technic_rubber_tree_full.png diff --git a/mods/ITEMS/technic/technic/textures/technic_rubber_tree_grindings.png b/mods/technic/technic/textures/technic_rubber_tree_grindings.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_rubber_tree_grindings.png rename to mods/technic/technic/textures/technic_rubber_tree_grindings.png diff --git a/mods/ITEMS/technic/technic/textures/technic_sawdust.png b/mods/technic/technic/textures/technic_sawdust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_sawdust.png rename to mods/technic/technic/textures/technic_sawdust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_screwdriver.png b/mods/technic/technic/textures/technic_screwdriver.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_screwdriver.png rename to mods/technic/technic/textures/technic_screwdriver.png diff --git a/mods/ITEMS/technic/technic/textures/technic_silicon_wafer.png b/mods/technic/technic/textures/technic_silicon_wafer.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_silicon_wafer.png rename to mods/technic/technic/textures/technic_silicon_wafer.png diff --git a/mods/ITEMS/technic/technic/textures/technic_silver_dust.png b/mods/technic/technic/textures/technic_silver_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_silver_dust.png rename to mods/technic/technic/textures/technic_silver_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_solar_panel_bottom.png b/mods/technic/technic/textures/technic_solar_panel_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_solar_panel_bottom.png rename to mods/technic/technic/textures/technic_solar_panel_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_solar_panel_side.png b/mods/technic/technic/textures/technic_solar_panel_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_solar_panel_side.png rename to mods/technic/technic/textures/technic_solar_panel_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_solar_panel_top.png b/mods/technic/technic/textures/technic_solar_panel_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_solar_panel_top.png rename to mods/technic/technic/textures/technic_solar_panel_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_sonic_screwdriver.png b/mods/technic/technic/textures/technic_sonic_screwdriver.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_sonic_screwdriver.png rename to mods/technic/technic/textures/technic_sonic_screwdriver.png diff --git a/mods/ITEMS/technic/technic/textures/technic_stainless_steel_dust.png b/mods/technic/technic/textures/technic_stainless_steel_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_stainless_steel_dust.png rename to mods/technic/technic/textures/technic_stainless_steel_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_stainless_steel_ingot.png b/mods/technic/technic/textures/technic_stainless_steel_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_stainless_steel_ingot.png rename to mods/technic/technic/textures/technic_stainless_steel_ingot.png diff --git a/mods/ITEMS/technic/technic/textures/technic_stone_dust.png b/mods/technic/technic/textures/technic_stone_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_stone_dust.png rename to mods/technic/technic/textures/technic_stone_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_supply_converter_side.png b/mods/technic/technic/textures/technic_supply_converter_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_supply_converter_side.png rename to mods/technic/technic/textures/technic_supply_converter_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_supply_converter_tb.png b/mods/technic/technic/textures/technic_supply_converter_tb.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_supply_converter_tb.png rename to mods/technic/technic/textures/technic_supply_converter_tb.png diff --git a/mods/ITEMS/technic/technic/textures/technic_talinite_dust.png b/mods/technic/technic/textures/technic_talinite_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_talinite_dust.png rename to mods/technic/technic/textures/technic_talinite_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tin_dust.png b/mods/technic/technic/textures/technic_tin_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tin_dust.png rename to mods/technic/technic/textures/technic_tin_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tool_mode1.png b/mods/technic/technic/textures/technic_tool_mode1.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tool_mode1.png rename to mods/technic/technic/textures/technic_tool_mode1.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tool_mode2.png b/mods/technic/technic/textures/technic_tool_mode2.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tool_mode2.png rename to mods/technic/technic/textures/technic_tool_mode2.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tool_mode3.png b/mods/technic/technic/textures/technic_tool_mode3.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tool_mode3.png rename to mods/technic/technic/textures/technic_tool_mode3.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tool_mode4.png b/mods/technic/technic/textures/technic_tool_mode4.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tool_mode4.png rename to mods/technic/technic/textures/technic_tool_mode4.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tool_mode5.png b/mods/technic/technic/textures/technic_tool_mode5.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tool_mode5.png rename to mods/technic/technic/textures/technic_tool_mode5.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tool_mode6.png b/mods/technic/technic/textures/technic_tool_mode6.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tool_mode6.png rename to mods/technic/technic/textures/technic_tool_mode6.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tool_mode7.png b/mods/technic/technic/textures/technic_tool_mode7.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tool_mode7.png rename to mods/technic/technic/textures/technic_tool_mode7.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tool_mode8.png b/mods/technic/technic/textures/technic_tool_mode8.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tool_mode8.png rename to mods/technic/technic/textures/technic_tool_mode8.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tool_mode9.png b/mods/technic/technic/textures/technic_tool_mode9.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tool_mode9.png rename to mods/technic/technic/textures/technic_tool_mode9.png diff --git a/mods/ITEMS/technic/technic/textures/technic_tree_tap.png b/mods/technic/technic/textures/technic_tree_tap.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_tree_tap.png rename to mods/technic/technic/textures/technic_tree_tap.png diff --git a/mods/ITEMS/technic/technic/textures/technic_uranium_dust.png b/mods/technic/technic/textures/technic_uranium_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_uranium_dust.png rename to mods/technic/technic/textures/technic_uranium_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_uranium_fuel.png b/mods/technic/technic/textures/technic_uranium_fuel.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_uranium_fuel.png rename to mods/technic/technic/textures/technic_uranium_fuel.png diff --git a/mods/ITEMS/technic/technic/textures/technic_vacuum.png b/mods/technic/technic/textures/technic_vacuum.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_vacuum.png rename to mods/technic/technic/textures/technic_vacuum.png diff --git a/mods/ITEMS/technic/technic/textures/technic_water_can.png b/mods/technic/technic/textures/technic_water_can.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_water_can.png rename to mods/technic/technic/textures/technic_water_can.png diff --git a/mods/ITEMS/technic/technic/textures/technic_water_mill_side.png b/mods/technic/technic/textures/technic_water_mill_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_water_mill_side.png rename to mods/technic/technic/textures/technic_water_mill_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_water_mill_top.png b/mods/technic/technic/textures/technic_water_mill_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_water_mill_top.png rename to mods/technic/technic/textures/technic_water_mill_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_water_mill_top_active.png b/mods/technic/technic/textures/technic_water_mill_top_active.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_water_mill_top_active.png rename to mods/technic/technic/textures/technic_water_mill_top_active.png diff --git a/mods/ITEMS/technic/technic/textures/technic_workshop_bottom.png b/mods/technic/technic/textures/technic_workshop_bottom.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_workshop_bottom.png rename to mods/technic/technic/textures/technic_workshop_bottom.png diff --git a/mods/ITEMS/technic/technic/textures/technic_workshop_side.png b/mods/technic/technic/textures/technic_workshop_side.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_workshop_side.png rename to mods/technic/technic/textures/technic_workshop_side.png diff --git a/mods/ITEMS/technic/technic/textures/technic_workshop_top.png b/mods/technic/technic/textures/technic_workshop_top.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_workshop_top.png rename to mods/technic/technic/textures/technic_workshop_top.png diff --git a/mods/ITEMS/technic/technic/textures/technic_wrought_iron_dust.png b/mods/technic/technic/textures/technic_wrought_iron_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_wrought_iron_dust.png rename to mods/technic/technic/textures/technic_wrought_iron_dust.png diff --git a/mods/ITEMS/technic/technic/textures/technic_zinc_dust.png b/mods/technic/technic/textures/technic_zinc_dust.png similarity index 100% rename from mods/ITEMS/technic/technic/textures/technic_zinc_dust.png rename to mods/technic/technic/textures/technic_zinc_dust.png diff --git a/mods/ITEMS/technic/technic/tools/cans.lua b/mods/technic/technic/tools/cans.lua similarity index 100% rename from mods/ITEMS/technic/technic/tools/cans.lua rename to mods/technic/technic/tools/cans.lua diff --git a/mods/technic/technic/tools/chainsaw.lua b/mods/technic/technic/tools/chainsaw.lua new file mode 100755 index 0000000..3653d2d --- /dev/null +++ b/mods/technic/technic/tools/chainsaw.lua @@ -0,0 +1,370 @@ +-- Configuration + +local chainsaw_max_charge = 30000 -- Maximum charge of the saw +-- Gives 2500 nodes on a single charge (about 50 complete normal trees) +local chainsaw_charge_per_node = 12 +-- Cut down tree leaves. Leaf decay may cause slowness on large trees +-- if this is disabled. +local chainsaw_leaves = true + +-- The default trees +local timber_nodenames = { + ["default:acacia_tree"] = true, + ["default:aspen_tree"] = true, + ["default:jungletree"] = true, + ["default:papyrus"] = true, + ["default:cactus"] = true, + ["default:tree"] = true, + ["default:apple"] = true, + ["default:pine_tree"] = true, +} + +if chainsaw_leaves then + timber_nodenames["default:acacia_leaves"] = true + timber_nodenames["default:aspen_leaves"] = true + timber_nodenames["default:leaves"] = true + timber_nodenames["default:jungleleaves"] = true + timber_nodenames["default:pine_needles"] = true +end + +-- technic_worldgen defines rubber trees if moretrees isn't installed +if minetest.get_modpath("technic_worldgen") or + minetest.get_modpath("moretrees") then + timber_nodenames["moretrees:rubber_tree_trunk_empty"] = true + timber_nodenames["moretrees:rubber_tree_trunk"] = true + if chainsaw_leaves then + timber_nodenames["moretrees:rubber_tree_leaves"] = true + end +end + +-- Support moretrees if it is there +if minetest.get_modpath("moretrees") then + timber_nodenames["moretrees:acacia_trunk"] = true + timber_nodenames["moretrees:apple_tree_trunk"] = true + timber_nodenames["moretrees:beech_trunk"] = true + timber_nodenames["moretrees:birch_trunk"] = true + timber_nodenames["moretrees:fir_trunk"] = true + timber_nodenames["moretrees:oak_trunk"] = true + timber_nodenames["moretrees:palm_trunk"] = true + timber_nodenames["moretrees:pine_trunk"] = true + timber_nodenames["moretrees:sequoia_trunk"] = true + timber_nodenames["moretrees:spruce_trunk"] = true + timber_nodenames["moretrees:willow_trunk"] = true + timber_nodenames["moretrees:jungletree_trunk"] = true + + if chainsaw_leaves then + timber_nodenames["moretrees:acacia_leaves"] = true + timber_nodenames["moretrees:apple_tree_leaves"] = true + timber_nodenames["moretrees:oak_leaves"] = true + timber_nodenames["moretrees:fir_leaves"] = true + timber_nodenames["moretrees:fir_leaves_bright"] = true + timber_nodenames["moretrees:sequoia_leaves"] = true + timber_nodenames["moretrees:birch_leaves"] = true + timber_nodenames["moretrees:birch_leaves"] = true + timber_nodenames["moretrees:palm_leaves"] = true + timber_nodenames["moretrees:spruce_leaves"] = true + timber_nodenames["moretrees:spruce_leaves"] = true + timber_nodenames["moretrees:pine_leaves"] = true + timber_nodenames["moretrees:willow_leaves"] = true + timber_nodenames["moretrees:jungletree_leaves_green"] = true + timber_nodenames["moretrees:jungletree_leaves_yellow"] = true + timber_nodenames["moretrees:jungletree_leaves_red"] = true + timber_nodenames["moretrees:acorn"] = true + timber_nodenames["moretrees:coconut"] = true + timber_nodenames["moretrees:spruce_cone"] = true + timber_nodenames["moretrees:pine_cone"] = true + timber_nodenames["moretrees:fir_cone"] = true + timber_nodenames["moretrees:apple_blossoms"] = true + end +end + +-- Support growing_trees +if minetest.get_modpath("growing_trees") then + timber_nodenames["growing_trees:trunk"] = true + timber_nodenames["growing_trees:medium_trunk"] = true + timber_nodenames["growing_trees:big_trunk"] = true + timber_nodenames["growing_trees:trunk_top"] = true + timber_nodenames["growing_trees:trunk_sprout"] = true + timber_nodenames["growing_trees:branch_sprout"] = true + timber_nodenames["growing_trees:branch"] = true + timber_nodenames["growing_trees:branch_xmzm"] = true + timber_nodenames["growing_trees:branch_xpzm"] = true + timber_nodenames["growing_trees:branch_xmzp"] = true + timber_nodenames["growing_trees:branch_xpzp"] = true + timber_nodenames["growing_trees:branch_zz"] = true + timber_nodenames["growing_trees:branch_xx"] = true + + if chainsaw_leaves then + timber_nodenames["growing_trees:leaves"] = true + end +end + +-- Support growing_cactus +if minetest.get_modpath("growing_cactus") then + timber_nodenames["growing_cactus:sprout"] = true + timber_nodenames["growing_cactus:branch_sprout_vertical"] = true + timber_nodenames["growing_cactus:branch_sprout_vertical_fixed"] = true + timber_nodenames["growing_cactus:branch_sprout_xp"] = true + timber_nodenames["growing_cactus:branch_sprout_xm"] = true + timber_nodenames["growing_cactus:branch_sprout_zp"] = true + timber_nodenames["growing_cactus:branch_sprout_zm"] = true + timber_nodenames["growing_cactus:trunk"] = true + timber_nodenames["growing_cactus:branch_trunk"] = true + timber_nodenames["growing_cactus:branch"] = true + timber_nodenames["growing_cactus:branch_xp"] = true + timber_nodenames["growing_cactus:branch_xm"] = true + timber_nodenames["growing_cactus:branch_zp"] = true + timber_nodenames["growing_cactus:branch_zm"] = true + timber_nodenames["growing_cactus:branch_zz"] = true + timber_nodenames["growing_cactus:branch_xx"] = true +end + +-- Support farming_plus +if minetest.get_modpath("farming_plus") then + if chainsaw_leaves then + timber_nodenames["farming_plus:banana_leaves"] = true + timber_nodenames["farming_plus:banana"] = true + timber_nodenames["farming_plus:cocoa_leaves"] = true + timber_nodenames["farming_plus:cocoa"] = true + end +end + +-- Support nature +if minetest.get_modpath("nature") then + if chainsaw_leaves then + timber_nodenames["nature:blossom"] = true + end +end + +-- Support snow +if minetest.get_modpath("snow") then + if chainsaw_leaves then + timber_nodenames["snow:needles"] = true + timber_nodenames["snow:needles_decorated"] = true + timber_nodenames["snow:star"] = true + end +end + +-- Support vines (also generated by moretrees if available) +if minetest.get_modpath("vines") then + if chainsaw_leaves then + timber_nodenames["vines:vines"] = true + end +end + +if minetest.get_modpath("trunks") then + if chainsaw_leaves then + timber_nodenames["trunks:moss"] = true + timber_nodenames["trunks:moss_fungus"] = true + timber_nodenames["trunks:treeroot"] = true + end +end + +local S = technic.getter + +technic.register_power_tool("technic:chainsaw", chainsaw_max_charge) + +-- Table for saving what was sawed down +local produced = {} + +-- Save the items sawed down so that we can drop them in a nice single stack +local function handle_drops(drops) + for _, item in ipairs(drops) do + local stack = ItemStack(item) + local name = stack:get_name() + local p = produced[name] + if not p then + produced[name] = stack + else + p:set_count(p:get_count() + stack:get_count()) + end + end +end + +--- Iterator over positions to try to saw around a sawed node. +-- This returns positions in a 3x1x3 area around the position, plus the +-- position above it. This does not return the bottom position to prevent +-- the chainsaw from cutting down nodes below the cutting position. +-- @param pos Sawing position. +local function iterSawTries(pos) + -- Copy position to prevent mangling it + local pos = vector.new(pos) + local i = 0 + + return function() + i = i + 1 + -- Given a (top view) area like so (where 5 is the starting position): + -- X --> + -- Z 123 + -- | 456 + -- V 789 + -- This will return positions 1, 4, 7, 2, 8 (skip 5), 3, 6, 9, + -- and the position above 5. + if i == 1 then + -- Move to starting position + pos.x = pos.x - 1 + pos.z = pos.z - 1 + elseif i == 4 or i == 7 then + -- Move to next X and back to start of Z when we reach + -- the end of a Z line. + pos.x = pos.x + 1 + pos.z = pos.z - 2 + elseif i == 5 then + -- Skip the middle position (we've already run on it) + -- and double-increment the counter. + pos.z = pos.z + 2 + i = i + 1 + elseif i <= 9 then + -- Go to next Z. + pos.z = pos.z + 1 + elseif i == 10 then + -- Move back to center and up. + -- The Y+ position must be last so that we don't dig + -- straight upward and not come down (since the Y- + -- position isn't checked). + pos.x = pos.x - 1 + pos.z = pos.z - 1 + pos.y = pos.y + 1 + else + return nil + end + return pos + end +end + +-- This function does all the hard work. Recursively we dig the node at hand +-- if it is in the table and then search the surroundings for more stuff to dig. +local function recursive_dig(pos, remaining_charge) + if remaining_charge < chainsaw_charge_per_node then + return remaining_charge + end + local node = minetest.get_node(pos) + + if not timber_nodenames[node.name] then + return remaining_charge + end + + -- Wood found - cut it + handle_drops(minetest.get_node_drops(node.name, "")) + minetest.remove_node(pos) + remaining_charge = remaining_charge - chainsaw_charge_per_node + + -- Check surroundings and run recursively if any charge left + for npos in iterSawTries(pos) do + if remaining_charge < chainsaw_charge_per_node then + break + end + if timber_nodenames[minetest.get_node(npos).name] then + remaining_charge = recursive_dig(npos, remaining_charge) + end + end + return remaining_charge +end + +-- Function to randomize positions for new node drops +local function get_drop_pos(pos) + local drop_pos = {} + + for i = 0, 8 do + -- Randomize position for a new drop + drop_pos.x = pos.x + math.random(-3, 3) + drop_pos.y = pos.y - 1 + drop_pos.z = pos.z + math.random(-3, 3) + + -- Move the randomized position upwards until + -- the node is air or unloaded. + for y = drop_pos.y, drop_pos.y + 5 do + drop_pos.y = y + local node = minetest.get_node_or_nil(drop_pos) + + if not node then + -- If the node is not loaded yet simply drop + -- the item at the original digging position. + return pos + elseif node.name == "air" then + -- Add variation to the entity drop position, + -- but don't let drops get too close to the edge + drop_pos.x = drop_pos.x + (math.random() * 0.8) - 0.5 + drop_pos.z = drop_pos.z + (math.random() * 0.8) - 0.5 + return drop_pos + end + end + end + + -- Return the original position if this takes too long + return pos +end + +-- Chainsaw entry point +local function chainsaw_dig(pos, current_charge) + -- Start sawing things down + local remaining_charge = recursive_dig(pos, current_charge) + minetest.sound_play("chainsaw", {pos = pos, gain = 1.0, + max_hear_distance = 10}) + + -- Now drop items for the player + for name, stack in pairs(produced) do + -- Drop stacks of stack max or less + local count, max = stack:get_count(), stack:get_stack_max() + stack:set_count(max) + while count > max do + minetest.add_item(get_drop_pos(pos), stack) + count = count - max + end + stack:set_count(count) + minetest.add_item(get_drop_pos(pos), stack) + end + + -- Clean up + produced = {} + + return remaining_charge +end + + +minetest.register_tool("technic:chainsaw", { + description = S("Chainsaw"), + inventory_image = "technic_chainsaw.png", + stack_max = 1, + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.charge or + meta.charge < chainsaw_charge_per_node then + return + end + + local name = user:get_player_name() + if minetest.is_protected(pointed_thing.under, name) then + minetest.record_protection_violation(pointed_thing.under, name) + return + end + + -- Send current charge to digging function so that the + -- chainsaw will stop after digging a number of nodes + meta.charge = chainsaw_dig(pointed_thing.under, meta.charge) + if not technic.creative_mode then + technic.set_RE_wear(itemstack, meta.charge, chainsaw_max_charge) + itemstack:set_metadata(minetest.serialize(meta)) + end + return itemstack + end, +}) + +local mesecons_button = minetest.get_modpath("mesecons_button") +local trigger = mesecons_button and "mesecons_button:button_off" or "default:mese_crystal_fragment" + +minetest.register_craft({ + output = "technic:chainsaw", + recipe = { + {"technic:stainless_steel_ingot", trigger, "technic:battery"}, + {"technic:fine_copper_wire", "technic:motor", "technic:battery"}, + {"", "", "technic:stainless_steel_ingot"}, + } +}) + diff --git a/mods/technic/technic/tools/flashlight.lua b/mods/technic/technic/tools/flashlight.lua new file mode 100755 index 0000000..252dc8c --- /dev/null +++ b/mods/technic/technic/tools/flashlight.lua @@ -0,0 +1,123 @@ +-- Original code comes from walkin_light mod by Echo +-- http://minetest.net/forum/viewtopic.php?id=2621 + +local flashlight_max_charge = 30000 + +local S = technic.getter + +technic.register_power_tool("technic:flashlight", flashlight_max_charge) + +minetest.register_alias("technic:light_off", "air") + +minetest.register_tool("technic:flashlight", { + description = S("Flashlight"), + inventory_image = "technic_flashlight.png", + stack_max = 1, + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, +}) + +minetest.register_craft({ + output = "technic:flashlight", + recipe = { + {"technic:rubber", "default:glass", "technic:rubber"}, + {"technic:stainless_steel_ingot", "technic:battery", "technic:stainless_steel_ingot"}, + {"", "technic:battery", ""} + } +}) + + +local player_positions = {} +local was_wielding = {} + +local function check_for_flashlight(player) + if player == nil then + return false + end + local inv = player:get_inventory() + local hotbar = inv:get_list("main") + for i = 1, 8 do + if hotbar[i]:get_name() == "technic:flashlight" then + local meta = minetest.deserialize(hotbar[i]:get_metadata()) + if meta and meta.charge and meta.charge >= 2 then + if not technic.creative_mode then + meta.charge = meta.charge - 2; + technic.set_RE_wear(hotbar[i], meta.charge, flashlight_max_charge) + hotbar[i]:set_metadata(minetest.serialize(meta)) + inv:set_stack("main", i, hotbar[i]) + end + return true + end + end + end + return false +end + +minetest.register_on_joinplayer(function(player) + local player_name = player:get_player_name() + local pos = player:getpos() + local rounded_pos = vector.round(pos) + rounded_pos.y = rounded_pos.y + 1 + player_positions[player_name] = rounded_pos + was_wielding[player_name] = true +end) + + +minetest.register_on_leaveplayer(function(player) + local player_name = player:get_player_name() + local pos = player_positions[player_name] + local nodename = minetest.get_node(pos).name + if nodename == "technic:light" then + minetest.remove_node(pos) + end + player_positions[player_name] = nil +end) + +minetest.register_globalstep(function(dtime) + for i, player in pairs(minetest.get_connected_players()) do + local player_name = player:get_player_name() + local flashlight_weared = check_for_flashlight(player) + local pos = player:getpos() + local rounded_pos = vector.round(pos) + rounded_pos.y = rounded_pos.y + 1 + local old_pos = player_positions[player_name] + local player_moved = old_pos and not vector.equals(old_pos, rounded_pos) + if not old_pos then + old_pos = rounded_pos + player_moved = true + end + + -- Remove light, flashlight weared out or was removed from hotbar + if was_wielding[player_name] and not flashlight_weared then + was_wielding[player_name] = false + local node = minetest.get_node_or_nil(old_pos) + if node and node.name == "technic:light" then + minetest.remove_node(old_pos) + end + elseif (player_moved or not was_wielding[player_name]) and flashlight_weared then + local node = minetest.get_node_or_nil(rounded_pos) + if node and node.name == "air" then + minetest.set_node(rounded_pos, {name="technic:light"}) + end + local node = minetest.get_node_or_nil(old_pos) + if node and node.name == "technic:light" then + minetest.remove_node(old_pos) + end + player_positions[player_name] = rounded_pos + was_wielding[player_name] = true + end + end +end) + +minetest.register_node("technic:light", { + drawtype = "glasslike", + tiles = {"technic_light.png"}, + paramtype = "light", + groups = {not_in_creative_inventory=1}, + drop = "", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + light_source = LIGHT_MAX, + pointable = false, +}) diff --git a/mods/ITEMS/technic/technic/tools/init.lua b/mods/technic/technic/tools/init.lua similarity index 100% rename from mods/ITEMS/technic/technic/tools/init.lua rename to mods/technic/technic/tools/init.lua diff --git a/mods/technic/technic/tools/mining_drill.lua b/mods/technic/technic/tools/mining_drill.lua new file mode 100755 index 0000000..bc426e7 --- /dev/null +++ b/mods/technic/technic/tools/mining_drill.lua @@ -0,0 +1,419 @@ +local max_charge = {50000, 200000, 650000} +local power_usage_per_node = {200, 500, 800} + +local S = technic.getter + +minetest.register_craft({ + output = 'technic:mining_drill', + recipe = { + {'moreores:tin_ingot', 'technic:diamond_drill_head', 'moreores:tin_ingot'}, + {'technic:stainless_steel_ingot', 'technic:motor', 'technic:stainless_steel_ingot'}, + {'', 'technic:red_energy_crystal', 'default:copper_ingot'}, + } +}) +minetest.register_craft({ + output = 'technic:mining_drill_mk2', + recipe = { + {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'}, + {'technic:stainless_steel_ingot', 'technic:mining_drill', 'technic:stainless_steel_ingot'}, + {'', 'technic:green_energy_crystal', ''}, + } +}) +minetest.register_craft({ + output = 'technic:mining_drill_mk3', + recipe = { + {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'}, + {'technic:stainless_steel_ingot', 'technic:mining_drill_mk2', 'technic:stainless_steel_ingot'}, + {'', 'technic:blue_energy_crystal', ''}, + } +}) +for i = 1, 4 do + minetest.register_craft({ + output = 'technic:mining_drill_mk3', + recipe = { + {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'}, + {'technic:stainless_steel_ingot', 'technic:mining_drill_mk2_'..i, 'technic:stainless_steel_ingot'}, + {'', 'technic:blue_energy_crystal', ''}, + } + }) +end + +local mining_drill_mode_text = { + {S("Single node.")}, + {S("3 nodes deep.")}, + {S("3 nodes wide.")}, + {S("3 nodes tall.")}, + {S("3x3 nodes.")}, +} + +local function drill_dig_it0 (pos,player) + if minetest.is_protected(pos, player:get_player_name()) then + minetest.record_protection_violation(pos, player:get_player_name()) + return + end + local node=minetest.get_node(pos) + if node.name == "air" or node.name == "ignore" then return end + if node.name == "default:lava_source" then return end + if node.name == "default:lava_flowing" then return end + if node.name == "default:water_source" then minetest.remove_node(pos) return end + if node.name == "default:water_flowing" then minetest.remove_node(pos) return end + minetest.node_dig(pos,node,player) +end + +local function drill_dig_it1 (player) + local dir=player:get_look_dir() + if math.abs(dir.x)>math.abs(dir.z) then + if dir.x>0 then return 0 end + return 1 + end + if dir.z>0 then return 2 end + return 3 +end + +local function drill_dig_it2 (pos,player) + pos.y=pos.y+1 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z-2 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + pos.y=pos.y-1 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z-2 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + pos.y=pos.y-1 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z-2 + drill_dig_it0 (pos,player) +end + +local function drill_dig_it3 (pos,player) + pos.y=pos.y+1 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + pos.y=pos.y-1 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + pos.y=pos.y-1 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) +end + +local function drill_dig_it4 (pos,player) + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + pos.z=pos.z-2 + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) +end + +local function cost_to_use(drill_type, mode) + local mult + if mode == 1 then + mult = 1 + elseif mode <= 4 then + mult = 3 + else + mult = 9 + end + return power_usage_per_node[drill_type] * mult +end + +local function drill_dig_it(pos, player, mode) + if mode == 1 then + drill_dig_it0(pos, player) + end + + if mode == 2 then -- 3 deep + dir = drill_dig_it1(player) + if dir == 0 then -- x+ + drill_dig_it0(pos, player) + pos.x = pos.x + 1 + drill_dig_it0(pos, player) + pos.x = pos.x + 1 + drill_dig_it0(pos, player) + end + if dir == 1 then -- x- + drill_dig_it0(pos, player) + pos.x=pos.x-1 + drill_dig_it0 (pos,player) + pos.x=pos.x-1 + drill_dig_it0 (pos,player) + end + if dir==2 then -- z+ + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + end + if dir==3 then -- z- + drill_dig_it0 (pos,player) + pos.z=pos.z-1 + drill_dig_it0 (pos,player) + pos.z=pos.z-1 + drill_dig_it0 (pos,player) + end + end + + if mode==3 then -- 3 wide + dir=drill_dig_it1(player) + if dir==0 or dir==1 then -- x + drill_dig_it0 (pos,player) + pos.z=pos.z+1 + drill_dig_it0 (pos,player) + pos.z=pos.z-2 + drill_dig_it0 (pos,player) + end + if dir==2 or dir==3 then -- z + drill_dig_it0 (pos,player) + pos.x=pos.x+1 + drill_dig_it0 (pos,player) + pos.x=pos.x-2 + drill_dig_it0 (pos,player) + end + end + + if mode==4 then -- 3 tall, selected in the middle + drill_dig_it0 (pos,player) + pos.y=pos.y-1 + drill_dig_it0 (pos,player) + pos.y=pos.y-1 + drill_dig_it0 (pos,player) + end + + if mode==5 then -- 3 x 3 + local dir=player:get_look_dir() + if math.abs(dir.y)<0.5 then + dir=drill_dig_it1(player) + if dir==0 or dir==1 then -- x + drill_dig_it2(pos,player) + end + if dir==2 or dir==3 then -- z + drill_dig_it3(pos,player) + end + else + drill_dig_it4(pos,player) + end + end + + minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,}) +end + +local function pos_is_pointable(pos) + local node = minetest.get_node(pos) + local nodedef = minetest.registered_nodes[node.name] + return nodedef and nodedef.pointable +end + +local function mining_drill_mk2_setmode(user,itemstack) + local player_name=user:get_player_name() + local item=itemstack:to_table() + local meta=minetest.deserialize(item["metadata"]) + if meta==nil then + meta={} + mode=0 + end + if meta["mode"]==nil then + minetest.chat_send_player(player_name, S("Use while sneaking to change Mining Drill Mk%d modes."):format(2)) + meta["mode"]=0 + mode=0 + end + mode=(meta["mode"]) + mode=mode+1 + if mode>=5 then mode=1 end + minetest.chat_send_player(player_name, S("Mining Drill Mk%d Mode %d"):format(2, mode)..": "..mining_drill_mode_text[mode][1]) + itemstack:set_name("technic:mining_drill_mk2_"..mode); + meta["mode"]=mode + itemstack:set_metadata(minetest.serialize(meta)) + return itemstack +end + +local function mining_drill_mk3_setmode(user,itemstack) + local player_name=user:get_player_name() + local item=itemstack:to_table() + local meta=minetest.deserialize(item["metadata"]) + if meta==nil then + meta={} + mode=0 + end + if meta["mode"]==nil then + minetest.chat_send_player(player_name, S("Use while sneaking to change Mining Drill Mk%d modes."):format(3)) + meta["mode"]=0 + mode=0 + end + mode=(meta["mode"]) + mode=mode+1 + if mode>=6 then mode=1 end + minetest.chat_send_player(player_name, S("Mining Drill Mk%d Mode %d"):format(3, mode)..": "..mining_drill_mode_text[mode][1]) + itemstack:set_name("technic:mining_drill_mk3_"..mode); + meta["mode"]=mode + itemstack:set_metadata(minetest.serialize(meta)) + return itemstack +end + + +local function mining_drill_mk2_handler(itemstack, user, pointed_thing) + local keys = user:get_player_control() + local player_name = user:get_player_name() + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.mode or keys.sneak then + return mining_drill_mk2_setmode(user, itemstack) + end + if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) or not meta.charge then + return + end + local charge_to_take = cost_to_use(2, meta.mode) + if meta.charge >= charge_to_take then + local pos = minetest.get_pointed_thing_position(pointed_thing, false) + drill_dig_it(pos, user, meta.mode) + if not technic.creative_mode then + meta.charge = meta.charge - charge_to_take + itemstack:set_metadata(minetest.serialize(meta)) + technic.set_RE_wear(itemstack, meta.charge, max_charge[2]) + end + end + return itemstack +end + +local function mining_drill_mk3_handler(itemstack, user, pointed_thing) + local keys = user:get_player_control() + local player_name = user:get_player_name() + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.mode or keys.sneak then + return mining_drill_mk3_setmode(user, itemstack) + end + if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) or not meta.charge then + return + end + local charge_to_take = cost_to_use(3, meta.mode) + if meta.charge >= charge_to_take then + local pos = minetest.get_pointed_thing_position(pointed_thing, false) + drill_dig_it(pos, user, meta.mode) + if not technic.creative_mode then + meta.charge = meta.charge - charge_to_take + itemstack:set_metadata(minetest.serialize(meta)) + technic.set_RE_wear(itemstack, meta.charge, max_charge[3]) + end + end + return itemstack +end + +technic.register_power_tool("technic:mining_drill", max_charge[1]) + +minetest.register_tool("technic:mining_drill", { + description = S("Mining Drill Mk%d"):format(1), + inventory_image = "technic_mining_drill.png", + stack_max = 1, + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) then + return itemstack + end + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.charge then + return + end + local charge_to_take = cost_to_use(1, 1) + if meta.charge >= charge_to_take then + local pos = minetest.get_pointed_thing_position(pointed_thing, false) + drill_dig_it(pos, user, 1) + if not technic.creative_mode then + meta.charge = meta.charge - charge_to_take + itemstack:set_metadata(minetest.serialize(meta)) + technic.set_RE_wear(itemstack, meta.charge, max_charge[1]) + end + end + return itemstack + end, +}) + +minetest.register_tool("technic:mining_drill_mk2", { + description = S("Mining Drill Mk%d"):format(2), + inventory_image = "technic_mining_drill_mk2.png", + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + on_use = function(itemstack, user, pointed_thing) + mining_drill_mk2_handler(itemstack, user, pointed_thing) + return itemstack + end, +}) + +technic.register_power_tool("technic:mining_drill_mk2", max_charge[2]) + +for i = 1, 4 do + technic.register_power_tool("technic:mining_drill_mk2_"..i, max_charge[2]) + minetest.register_tool("technic:mining_drill_mk2_"..i, { + description = S("Mining Drill Mk%d Mode %d"):format(2, i), + inventory_image = "technic_mining_drill_mk2.png^technic_tool_mode"..i..".png", + wield_image = "technic_mining_drill_mk2.png", + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + mining_drill_mk2_handler(itemstack, user, pointed_thing) + return itemstack + end, + }) +end + +minetest.register_tool("technic:mining_drill_mk3", { + description = S("Mining Drill Mk%d"):format(3), + inventory_image = "technic_mining_drill_mk3.png", + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + on_use = function(itemstack, user, pointed_thing) + mining_drill_mk3_handler(itemstack,user,pointed_thing) + return itemstack + end, +}) + +technic.register_power_tool("technic:mining_drill_mk3", max_charge[3]) + +for i=1,5,1 do + technic.register_power_tool("technic:mining_drill_mk3_"..i, max_charge[3]) + minetest.register_tool("technic:mining_drill_mk3_"..i, { + description = S("Mining Drill Mk%d Mode %d"):format(3, i), + inventory_image = "technic_mining_drill_mk3.png^technic_tool_mode"..i..".png", + wield_image = "technic_mining_drill_mk3.png", + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + mining_drill_mk3_handler(itemstack,user,pointed_thing) + return itemstack + end, + }) +end diff --git a/mods/ITEMS/technic/technic/tools/mining_lasers.lua b/mods/technic/technic/tools/mining_lasers.lua similarity index 100% rename from mods/ITEMS/technic/technic/tools/mining_lasers.lua rename to mods/technic/technic/tools/mining_lasers.lua diff --git a/mods/technic/technic/tools/prospector.lua b/mods/technic/technic/tools/prospector.lua new file mode 100755 index 0000000..b28f1d8 --- /dev/null +++ b/mods/technic/technic/tools/prospector.lua @@ -0,0 +1,128 @@ +local S = technic.getter + +technic.register_power_tool("technic:prospector", 300000) + +local function get_metadata(toolstack) + local m = minetest.deserialize(toolstack:get_metadata()) + if not m then m = {} end + if not m.charge then m.charge = 0 end + if not m.target then m.target = "" end + if not m.look_depth then m.look_depth = 7 end + if not m.look_radius then m.look_radius = 1 end + return m +end + +minetest.register_tool("technic:prospector", { + description = S("Prospector"), + inventory_image = "technic_prospector.png", + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + on_use = function(toolstack, user, pointed_thing) + if not user or not user:is_player() or user.is_fake_player then return end + if pointed_thing.type ~= "node" then return end + local toolmeta = get_metadata(toolstack) + local look_diameter = toolmeta.look_radius * 2 + 1 + local charge_to_take = toolmeta.look_depth * (toolmeta.look_depth + 1) * look_diameter * look_diameter + if toolmeta.charge < charge_to_take then return end + if toolmeta.target == "" then + minetest.chat_send_player(user:get_player_name(), "Right-click to set target block type") + return + end + if not technic.creative_mode then + toolmeta.charge = toolmeta.charge - charge_to_take + toolstack:set_metadata(minetest.serialize(toolmeta)) + technic.set_RE_wear(toolstack, toolmeta.charge, technic.power_tools[toolstack:get_name()]) + end + local start_pos = pointed_thing.under + local forward = minetest.facedir_to_dir(minetest.dir_to_facedir(user:get_look_dir(), true)) + local right = forward.x ~= 0 and { x=0, y=1, z=0 } or (forward.y ~= 0 and { x=0, y=0, z=1 } or { x=1, y=0, z=0 }) + local up = forward.x ~= 0 and { x=0, y=0, z=1 } or (forward.y ~= 0 and { x=1, y=0, z=0 } or { x=0, y=1, z=0 }) + local base_pos = vector.add(start_pos, vector.multiply(vector.add(right, up), - toolmeta.look_radius)) + local found = false + for f = 0, toolmeta.look_depth-1 do + for r = 0, look_diameter-1 do + for u = 0, look_diameter-1 do + if minetest.get_node(vector.add(vector.add(vector.add(base_pos, vector.multiply(forward, f)), vector.multiply(right, r)), vector.multiply(up, u))).name == toolmeta.target then found = true end + end + end + end + if math.random() < 0.02 then found = not found end + minetest.chat_send_player(user:get_player_name(), minetest.registered_nodes[toolmeta.target].description.." is "..(found and "present" or "absent").." in "..look_diameter.."x"..look_diameter.."x"..toolmeta.look_depth.." region") + minetest.sound_play("technic_prospector_"..(found and "hit" or "miss"), { pos = vector.add(user:getpos(), { x = 0, y = 1, z = 0 }), gain = 1.0, max_hear_distance = 10 }) + return toolstack + end, + on_place = function(toolstack, user, pointed_thing) + if not user or not user:is_player() or user.is_fake_player then return end + local toolmeta = get_metadata(toolstack) + local pointed + if pointed_thing.type == "node" then + local pname = minetest.get_node(pointed_thing.under).name + local pdef = minetest.registered_nodes[pname] + if pdef and (pdef.groups.not_in_creative_inventory or 0) == 0 and pname ~= toolmeta.target then + pointed = pname + end + end + local look_diameter = toolmeta.look_radius * 2 + 1 + minetest.show_formspec(user:get_player_name(), "technic:prospector_control", + "size[7,8.5]".. + "item_image[0,0;1,1;"..toolstack:get_name().."]".. + "label[1,0;"..minetest.formspec_escape(toolstack:get_definition().description).."]".. + (toolmeta.target ~= "" and + "label[0,1.5;Current target:]".. + "label[0,2;"..minetest.formspec_escape(minetest.registered_nodes[toolmeta.target].description).."]".. + "item_image[0,2.5;1,1;"..toolmeta.target.."]" or + "label[0,1.5;No target set]").. + (pointed and + "label[3.5,1.5;May set new target:]".. + "label[3.5,2;"..minetest.formspec_escape(minetest.registered_nodes[pointed].description).."]".. + "item_image[3.5,2.5;1,1;"..pointed.."]".. + "button_exit[3.5,3.65;2,0.5;target_"..pointed..";Set target]" or + "label[3.5,1.5;No new target available]").. + "label[0,4.5;Region cross section:]".. + "label[0,5;"..look_diameter.."x"..look_diameter.."]".. + "label[3.5,4.5;Set region cross section:]".. + "button_exit[3.5,5.15;1,0.5;look_radius_0;1x1]".. + "button_exit[4.5,5.15;1,0.5;look_radius_1;3x3]".. + "button_exit[5.5,5.15;1,0.5;look_radius_3;7x7]".. + "label[0,6;Region depth:]".. + "label[0,6.5;"..toolmeta.look_depth.."]".. + "label[3.5,6;Set region depth:]".. + "button_exit[3.5,6.65;1,0.5;look_depth_7;7]".. + "button_exit[4.5,6.65;1,0.5;look_depth_14;14]".. + "button_exit[5.5,6.65;1,0.5;look_depth_21;21]".. + "label[0,7.5;Accuracy:]".. + "label[0,8;98%]") + return + end, +}) + +minetest.register_on_player_receive_fields(function(user, formname, fields) + if formname ~= "technic:prospector_control" then return false end + if not user or not user:is_player() or user.is_fake_player then return end + local toolstack = user:get_wielded_item() + if toolstack:get_name() ~= "technic:prospector" then return true end + local toolmeta = get_metadata(toolstack) + for field, value in pairs(fields) do + if field:sub(1, 7) == "target_" then + toolmeta.target = field:sub(8) + end + if field:sub(1, 12) == "look_radius_" then + toolmeta.look_radius = field:sub(13) + end + if field:sub(1, 11) == "look_depth_" then + toolmeta.look_depth = field:sub(12) + end + end + toolstack:set_metadata(minetest.serialize(toolmeta)) + user:set_wielded_item(toolstack) + return true +end) + +minetest.register_craft({ + output = "technic:prospector", + recipe = { + {"moreores:pick_silver", "moreores:mithril_block", "pipeworks:teleport_tube_1"}, + {"technic:brass_ingot", "technic:control_logic_unit", "technic:brass_ingot"}, + {"", "technic:blue_energy_crystal", ""}, + } +}) diff --git a/mods/technic/technic/tools/sonic_screwdriver.lua b/mods/technic/technic/tools/sonic_screwdriver.lua new file mode 100755 index 0000000..300d363 --- /dev/null +++ b/mods/technic/technic/tools/sonic_screwdriver.lua @@ -0,0 +1,98 @@ +local sonic_screwdriver_max_charge = 15000 + +local S = technic.getter + +technic.register_power_tool("technic:sonic_screwdriver", sonic_screwdriver_max_charge) + +-- screwdriver handler code reused from minetest/minetest_game screwdriver @a9ac480 +local ROTATE_FACE = 1 +local ROTATE_AXIS = 2 + +local function nextrange(x, max) + x = x + 1 + if x > max then + x = 0 + end + return x +end + +-- Handles rotation +local function screwdriver_handler(itemstack, user, pointed_thing, mode) + if pointed_thing.type ~= "node" then + return + end + + local pos = pointed_thing.under + + if minetest.is_protected(pos, user:get_player_name()) then + minetest.record_protection_violation(pos, user:get_player_name()) + return + end + + local node = minetest.get_node(pos) + local ndef = minetest.registered_nodes[node.name] + if not ndef or not ndef.paramtype2 == "facedir" or + (ndef.drawtype == "nodebox" and + not ndef.node_box.type == "fixed") or + node.param2 == nil then + return + end + + -- contrary to the default screwdriver, do not check for can_dig, to allow rotating machines with CLU's in them + -- this is consistent with the previous sonic screwdriver + + local meta1 = minetest.deserialize(itemstack:get_metadata()) + if not meta1 or not meta1.charge or meta1.charge < 100 then + return + end + + minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.3, max_hear_distance = 10}) + + -- Set param2 + local rotationPart = node.param2 % 32 -- get first 4 bits + local preservePart = node.param2 - rotationPart + + local axisdir = math.floor(rotationPart / 4) + local rotation = rotationPart - axisdir * 4 + if mode == ROTATE_FACE then + rotationPart = axisdir * 4 + nextrange(rotation, 3) + elseif mode == ROTATE_AXIS then + rotationPart = nextrange(axisdir, 5) * 4 + end + + node.param2 = preservePart + rotationPart + minetest.swap_node(pos, node) + + if not technic.creative_mode then + meta1.charge = meta1.charge - 100 + itemstack:set_metadata(minetest.serialize(meta1)) + technic.set_RE_wear(itemstack, meta1.charge, sonic_screwdriver_max_charge) + end + + return itemstack +end + +minetest.register_tool("technic:sonic_screwdriver", { + description = S("Sonic Screwdriver (left-click rotates face, right-click rotates axis)"), + inventory_image = "technic_sonic_screwdriver.png", + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + on_use = function(itemstack, user, pointed_thing) + screwdriver_handler(itemstack, user, pointed_thing, ROTATE_FACE) + return itemstack + end, + on_place = function(itemstack, user, pointed_thing) + screwdriver_handler(itemstack, user, pointed_thing, ROTATE_AXIS) + return itemstack + end, +}) + +minetest.register_craft({ + output = "technic:sonic_screwdriver", + recipe = { + {"", "default:diamond", ""}, + {"mesecons_materials:fiber", "technic:battery", "mesecons_materials:fiber"}, + {"mesecons_materials:fiber", "moreores:mithril_ingot", "mesecons_materials:fiber"} + } +}) + diff --git a/mods/ITEMS/technic/technic/tools/tree_tap.lua b/mods/technic/technic/tools/tree_tap.lua similarity index 100% rename from mods/ITEMS/technic/technic/tools/tree_tap.lua rename to mods/technic/technic/tools/tree_tap.lua diff --git a/mods/technic/technic/tools/vacuum.lua b/mods/technic/technic/tools/vacuum.lua new file mode 100755 index 0000000..037f3bb --- /dev/null +++ b/mods/technic/technic/tools/vacuum.lua @@ -0,0 +1,61 @@ +-- Configuration +local vacuum_max_charge = 10000 -- 10000 - Maximum charge of the vacuum cleaner +local vacuum_charge_per_object = 100 -- 100 - Capable of picking up 50 objects +local vacuum_range = 8 -- 8 - Area in which to pick up objects + +local S = technic.getter + +technic.register_power_tool("technic:vacuum", vacuum_max_charge) + +minetest.register_tool("technic:vacuum", { + description = S("Vacuum Cleaner"), + inventory_image = "technic_vacuum.png", + stack_max = 1, + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + on_use = function(itemstack, user, pointed_thing) + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.charge then + return + end + if meta.charge > vacuum_charge_per_object then + minetest.sound_play("vacuumcleaner", { + to_player = user:get_player_name(), + gain = 0.4, + }) + end + local pos = user:getpos() + local inv = user:get_inventory() + for _, object in ipairs(minetest.get_objects_inside_radius(pos, vacuum_range)) do + local luaentity = object:get_luaentity() + if not object:is_player() and luaentity and luaentity.name == "__builtin:item" and luaentity.itemstring ~= "" then + if inv and inv:room_for_item("main", ItemStack(luaentity.itemstring)) then + meta.charge = meta.charge - vacuum_charge_per_object + if meta.charge < vacuum_charge_per_object then + return + end + inv:add_item("main", ItemStack(luaentity.itemstring)) + minetest.sound_play("item_drop_pickup", { + to_player = user:get_player_name(), + gain = 0.4, + }) + luaentity.itemstring = "" + object:remove() + end + end + end + + technic.set_RE_wear(itemstack, meta.charge, vacuum_max_charge) + itemstack:set_metadata(minetest.serialize(meta)) + return itemstack + end, +}) + +minetest.register_craft({ + output = 'technic:vacuum', + recipe = { + {'pipeworks:tube_1', 'pipeworks:filter', 'technic:battery'}, + {'pipeworks:tube_1', 'technic:motor', 'technic:battery'}, + {'technic:stainless_steel_ingot', '', ''}, + } +}) diff --git a/mods/ITEMS/technic/technic_chests/README.md b/mods/technic/technic_chests/README.md similarity index 100% rename from mods/ITEMS/technic/technic_chests/README.md rename to mods/technic/technic_chests/README.md diff --git a/mods/ITEMS/technic/technic_chests/common.lua b/mods/technic/technic_chests/common.lua similarity index 100% rename from mods/ITEMS/technic/technic_chests/common.lua rename to mods/technic/technic_chests/common.lua diff --git a/mods/ITEMS/technic/technic_chests/copper_chest.lua b/mods/technic/technic_chests/copper_chest.lua similarity index 100% rename from mods/ITEMS/technic/technic_chests/copper_chest.lua rename to mods/technic/technic_chests/copper_chest.lua diff --git a/mods/technic/technic_chests/depends.txt b/mods/technic/technic_chests/depends.txt new file mode 100755 index 0000000..b9ca665 --- /dev/null +++ b/mods/technic/technic_chests/depends.txt @@ -0,0 +1,4 @@ +default +moreores? +pipeworks? +intllib? diff --git a/mods/ITEMS/technic/technic_chests/gold_chest.lua b/mods/technic/technic_chests/gold_chest.lua similarity index 100% rename from mods/ITEMS/technic/technic_chests/gold_chest.lua rename to mods/technic/technic_chests/gold_chest.lua diff --git a/mods/ITEMS/technic/technic_chests/init.lua b/mods/technic/technic_chests/init.lua similarity index 100% rename from mods/ITEMS/technic/technic_chests/init.lua rename to mods/technic/technic_chests/init.lua diff --git a/mods/technic/technic_chests/iron_chest.lua b/mods/technic/technic_chests/iron_chest.lua new file mode 100755 index 0000000..90434bb --- /dev/null +++ b/mods/technic/technic_chests/iron_chest.lua @@ -0,0 +1,53 @@ +local cast_iron_ingot +if minetest.get_modpath("technic_worldgen") then + cast_iron_ingot = "technic:cast_iron_ingot" +else + cast_iron_ingot = "default:steel_ingot" +end + +minetest.register_craft({ + output = 'technic:iron_chest 1', + recipe = { + {cast_iron_ingot,cast_iron_ingot,cast_iron_ingot}, + {cast_iron_ingot,'default:chest',cast_iron_ingot}, + {cast_iron_ingot,cast_iron_ingot,cast_iron_ingot}, + } +}) + +minetest.register_craft({ + output = 'technic:iron_locked_chest 1', + recipe = { + {cast_iron_ingot,cast_iron_ingot,cast_iron_ingot}, + {cast_iron_ingot,'default:chest_locked',cast_iron_ingot}, + {cast_iron_ingot,cast_iron_ingot,cast_iron_ingot}, + } +}) + +minetest.register_craft({ + output = 'technic:iron_locked_chest 1', + recipe = { + {'default:steel_ingot'}, + {'technic:iron_chest'}, + } +}) + +technic.chests:register("Iron", { + width = 9, + height = 5, + sort = true, + autosort = false, + infotext = false, + color = false, + locked = false, +}) + +technic.chests:register("Iron", { + width = 9, + height = 5, + sort = true, + autosort = false, + infotext = false, + color = false, + locked = true, +}) + diff --git a/mods/ITEMS/technic/technic_chests/locale/de.txt b/mods/technic/technic_chests/locale/de.txt similarity index 100% rename from mods/ITEMS/technic/technic_chests/locale/de.txt rename to mods/technic/technic_chests/locale/de.txt diff --git a/mods/ITEMS/technic/technic_chests/locale/es.txt b/mods/technic/technic_chests/locale/es.txt similarity index 100% rename from mods/ITEMS/technic/technic_chests/locale/es.txt rename to mods/technic/technic_chests/locale/es.txt diff --git a/mods/ITEMS/technic/technic_chests/locale/template.txt b/mods/technic/technic_chests/locale/template.txt similarity index 100% rename from mods/ITEMS/technic/technic_chests/locale/template.txt rename to mods/technic/technic_chests/locale/template.txt diff --git a/mods/ITEMS/technic/technic_chests/locale/tr.txt b/mods/technic/technic_chests/locale/tr.txt similarity index 100% rename from mods/ITEMS/technic/technic_chests/locale/tr.txt rename to mods/technic/technic_chests/locale/tr.txt diff --git a/mods/ITEMS/technic/technic_chests/mithril_chest.lua b/mods/technic/technic_chests/mithril_chest.lua similarity index 100% rename from mods/ITEMS/technic/technic_chests/mithril_chest.lua rename to mods/technic/technic_chests/mithril_chest.lua diff --git a/mods/technic/technic_chests/register.lua b/mods/technic/technic_chests/register.lua new file mode 100755 index 0000000..61d49d3 --- /dev/null +++ b/mods/technic/technic_chests/register.lua @@ -0,0 +1,360 @@ +local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end + +local pipeworks = rawget(_G, "pipeworks") +local fs_helpers = rawget(_G, "fs_helpers") + +local allow_label = "" +local tube_entry = "" +local shift_edit_field = 0 + +if not minetest.get_modpath("pipeworks") then + -- Pipeworks is not installed. Simulate using a dummy table... + pipeworks = {} + fs_helpers = {} + local pipeworks_meta = {} + setmetatable(pipeworks, pipeworks_meta) + local dummy = function() + end + pipeworks_meta.__index = function(table, key) + print("[technic_chests] WARNING: variable or method '"..key.."' not present in dummy pipeworks table - assuming it is a method...") + pipeworks[key] = dummy + return dummy + end + pipeworks.after_place = dummy + pipeworks.after_dig = dummy + fs_helpers.cycling_button = function() return "" end +else + fs_helpers = pipeworks.fs_helpers + allow_label = "label[0.9,0.36;Allow splitting incoming stacks from tubes]" + shift_edit_field = 3 + tube_entry = "^pipeworks_tube_connection_metallic.png" +end + +local chest_mark_colors = { + {"black", S("Black")}, + {"blue", S("Blue")}, + {"brown", S("Brown")}, + {"cyan", S("Cyan")}, + {"dark_green", S("Dark Green")}, + {"dark_grey", S("Dark Grey")}, + {"green", S("Green")}, + {"grey", S("Grey")}, + {"magenta", S("Magenta")}, + {"orange", S("Orange")}, + {"pink", S("Pink")}, + {"red", S("Red")}, + {"violet", S("Violet")}, + {"white", S("White")}, + {"yellow", S("Yellow")}, +} + + +local function colorid_to_postfix(id) + return chest_mark_colors[id] and "_"..chest_mark_colors[id][1] or "" +end + + +local function get_color_buttons(coleft, lotop) + local buttons_string = "" + for y = 0, 3 do + for x = 0, 3 do + local file_name = "technic_colorbutton"..(y * 4 + x)..".png" + buttons_string = buttons_string.."image_button[" + ..(coleft + 0.1 + x * 0.7)..","..(lotop + 0.1 + y * 0.7) + ..";0.8,0.8;"..file_name..";color_button" + ..(y * 4 + x + 1)..";]" + end + end + return buttons_string +end + + +local function check_color_buttons(pos, meta, chest_name, fields) + for i = 1, 16 do + if fields["color_button"..i] then + local node = minetest.get_node(pos) + node.name = chest_name..colorid_to_postfix(i) + minetest.swap_node(pos, node) + meta:set_string("color", i) + return + end + end +end + +local function set_formspec(pos, data, page) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + local formspec = data.base_formspec + formspec = formspec..fs_helpers.cycling_button( + meta, + "image_button[0,0.35;1,0.6", + "splitstacks", + { + pipeworks.button_off, + pipeworks.button_on + } + )..allow_label + + if data.autosort then + local status = meta:get_int("autosort") + formspec = formspec.."button["..(data.hileft+2)..","..(data.height+1.1)..";3,0.8;autosort_to_"..(1-status)..";"..S("Auto-sort is %s"):format(status == 1 and S("On") or S("Off")).."]" + end + if data.infotext then + local formspec_infotext = minetest.formspec_escape(meta:get_string("infotext")) + if page == "main" then + formspec = formspec.."image_button["..(shift_edit_field+data.hileft+2.1)..",0.1;0.8,0.8;" + .."technic_pencil_icon.png;edit_infotext;]" + .."label["..(shift_edit_field+data.hileft+3)..",0;"..formspec_infotext.."]" + elseif page == "edit_infotext" then + formspec = formspec.."image_button["..(shift_edit_field+data.hileft+2.1)..",0.1;0.8,0.8;" + .."technic_checkmark_icon.png;save_infotext;]" + .."field["..(shift_edit_field+data.hileft+3.3)..",0.2;4.8,1;" + .."infotext_box;"..S("Edit chest description:")..";" + ..formspec_infotext.."]" + end + end + if data.color then + local colorID = meta:get_int("color") + local colorName + if chest_mark_colors[colorID] then + colorName = chest_mark_colors[colorID][2] + else + colorName = S("None") + end + formspec = formspec.."label["..(data.coleft+0.2)..","..(data.lotop+3)..";"..S("Color Filter: %s"):format(colorName).."]" + end + meta:set_string("formspec", formspec) +end + +local function sort_inventory(inv) + local inlist = inv:get_list("main") + local typecnt = {} + local typekeys = {} + for _, st in ipairs(inlist) do + if not st:is_empty() then + local n = st:get_name() + local w = st:get_wear() + local m = st:get_metadata() + local k = string.format("%s %05d %s", n, w, m) + if not typecnt[k] then + typecnt[k] = {st} + table.insert(typekeys, k) + else + table.insert(typecnt[k], st) + end + end + end + table.sort(typekeys) + inv:set_list("main", {}) + for _, k in ipairs(typekeys) do + for _, item in ipairs(typecnt[k]) do + inv:add_item("main", item) + end + end +end + +local function get_receive_fields(name, data) + local lname = name:lower() + return function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + local page = "main" + if fields.sort or (data.autosort and fields.quit and meta:get_int("autosort") == 1) then + sort_inventory(meta:get_inventory()) + end + if fields.edit_infotext then + page = "edit_infotext" + end + if fields.autosort_to_1 then meta:set_int("autosort", 1) end + if fields.autosort_to_0 then meta:set_int("autosort", 0) end + if fields.infotext_box then + meta:set_string("infotext", fields.infotext_box) + end + if data.color then + -- This sets the node + local nn = "technic:"..lname..(data.locked and "_locked" or "").."_chest" + check_color_buttons(pos, meta, nn, fields) + end + if fields["fs_helpers_cycling:0:splitstacks"] + or fields["fs_helpers_cycling:1:splitstacks"] then + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + end + + meta:get_inventory():set_size("main", data.width * data.height) + set_formspec(pos, data, page) + end +end + +function technic.chests:definition(name, data) + local lname = name:lower() + name = S(name) + local d = {} + for k, v in pairs(data) do d[k] = v end + data = d + + data.lowidth = 8 + data.ovwidth = math.max(data.lowidth, data.width) + data.hileft = (data.ovwidth - data.width) / 2 + data.loleft = (data.ovwidth - data.lowidth) / 2 + if data.color then + if data.lowidth + 3 <= data.ovwidth then + data.coleft = data.ovwidth - 3 + if data.loleft + data.lowidth > data.coleft then + data.loleft = data.coleft - data.lowidth + end + else + data.loleft = 0 + data.coleft = data.lowidth + data.ovwidth = data.lowidth + 3 + end + end + data.lotop = data.height + 2 + data.ovheight = data.lotop + 4 + + local locked_after_place = nil + local front = {"technic_"..lname.."_chest_front.png"} + data.base_formspec = "size["..data.ovwidth..","..data.ovheight.."]".. + "label[0,0;"..S("%s Chest"):format(name).."]".. + "list[context;main;"..data.hileft..",1;"..data.width..","..data.height..";]".. + "list[current_player;main;"..data.loleft..","..data.lotop..";8,4;]".. + "background[-0.19,-0.25;"..(data.ovwidth+0.4)..","..(data.ovheight+0.75)..";technic_chest_form_bg.png]".. + "background["..data.hileft..",1;"..data.width..","..data.height..";technic_"..lname.."_chest_inventory.png]".. + "background["..data.loleft..","..data.lotop..";8,4;technic_main_inventory.png]".. + "listring[]" + + if data.sort then + data.base_formspec = data.base_formspec.."button["..data.hileft..","..(data.height+1.1)..";1,0.8;sort;"..S("Sort").."]" + end + if data.color then + data.base_formspec = data.base_formspec..get_color_buttons(data.coleft, data.lotop) + end + + if data.locked then + locked_after_place = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", + S("%s Locked Chest (owned by %s)") + :format(name, meta:get_string("owner"))) + pipeworks.after_place(pos) + end + table.insert(front, "technic_"..lname.."_chest_lock_overlay.png") + else + locked_after_place = pipeworks.after_place + end + + local desc + if data.locked then + desc = S("%s Locked Chest"):format(name) + else + desc = S("%s Chest"):format(name) + end + + local tentry = tube_entry + if tube_entry ~= "" then + if lname == "wooden" then + tentry = "^pipeworks_tube_connection_wooden.png" + elseif lname == "mithril" then + tentry = "^pipeworks_tube_connection_stony.png" + end + end + local def = { + description = desc, + tiles = { + "technic_"..lname.."_chest_top.png"..tentry, + "technic_"..lname.."_chest_top.png"..tentry, + "technic_"..lname.."_chest_side.png"..tentry, + "technic_"..lname.."_chest_side.png"..tentry, + "technic_"..lname.."_chest_side.png"..tentry, + table.concat(front, "^") + }, + paramtype2 = "facedir", + groups = self.groups, + tube = self.tube, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + after_place_node = locked_after_place, + after_dig_node = pipeworks.after_dig, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("%s Chest"):format(name)) + set_formspec(pos, data, "main") + local inv = meta:get_inventory() + inv:set_size("main", data.width * data.height) + end, + can_dig = self.can_dig, + on_receive_fields = get_receive_fields(name, data), + on_metadata_inventory_move = self.on_inv_move, + on_metadata_inventory_put = self.on_inv_put, + on_metadata_inventory_take = self.on_inv_take, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "main", drops) + drops[#drops+1] = "technic:"..name:lower()..(data.locked and "_locked" or "").."_chest" + minetest.remove_node(pos) + return drops + end, + } + if data.locked then + def.allow_metadata_inventory_move = self.inv_move + def.allow_metadata_inventory_put = self.inv_put + def.allow_metadata_inventory_take = self.inv_take + def.on_blast = function() end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and default.can_interact_with_node(player, pos) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local name = player:get_player_name() + + -- verify placer is owner of lockable chest + if owner ~= name then + minetest.record_protection_violation(pos, name) + minetest.chat_send_player(name, "You do not own this chest.") + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, "a locked chest", owner + end + end + return def +end + +function technic.chests:register(name, data) + local def = technic.chests:definition(name, data) + + local nn = "technic:"..name:lower()..(data.locked and "_locked" or "").."_chest" + minetest.register_node(":"..nn, def) + + if data.color then + local mk_front + if string.find(def.tiles[6], "%^") then + mk_front = function (overlay) return def.tiles[6]:gsub("%^", "^"..overlay.."^") end + else + mk_front = function (overlay) return def.tiles[6].."^"..overlay end + end + for i = 1, 15 do + local postfix = colorid_to_postfix(i) + local colordef = {} + for k, v in pairs(def) do + colordef[k] = v + end + colordef.drop = nn + colordef.groups = self.groups_noinv + colordef.tiles = { def.tiles[1], def.tiles[2], def.tiles[3], def.tiles[4], def.tiles[5], mk_front("technic_chest_overlay"..postfix..".png") } + minetest.register_node(":"..nn..postfix, colordef) + end + end + +end + diff --git a/mods/technic/technic_chests/silver_chest.lua b/mods/technic/technic_chests/silver_chest.lua new file mode 100755 index 0000000..c615304 --- /dev/null +++ b/mods/technic/technic_chests/silver_chest.lua @@ -0,0 +1,48 @@ +if minetest.get_modpath("moreores") then + minetest.register_craft({ + output = 'technic:silver_chest', + recipe = { + {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'}, + {'moreores:silver_ingot','technic:copper_chest','moreores:silver_ingot'}, + {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'}, + } + }) + + minetest.register_craft({ + output = 'technic:silver_locked_chest', + recipe = { + {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'}, + {'moreores:silver_ingot','technic:copper_locked_chest','moreores:silver_ingot'}, + {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'}, + } + }) +end + +minetest.register_craft({ + output = 'technic:silver_locked_chest', + recipe = { + {'default:steel_ingot'}, + {'technic:silver_chest'}, + } +}) + +technic.chests:register("Silver", { + width = 12, + height = 6, + sort = true, + autosort = true, + infotext = true, + color = false, + locked = false, +}) + +technic.chests:register("Silver", { + width = 12, + height = 6, + sort = true, + autosort = true, + infotext = true, + color = false, + locked = true, +}) + diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_checkmark_icon.png b/mods/technic/technic_chests/textures/technic_checkmark_icon.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_checkmark_icon.png rename to mods/technic/technic_chests/textures/technic_checkmark_icon.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_form_bg.png b/mods/technic/technic_chests/textures/technic_chest_form_bg.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_form_bg.png rename to mods/technic/technic_chests/textures/technic_chest_form_bg.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_black.png b/mods/technic/technic_chests/textures/technic_chest_overlay_black.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_black.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_black.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_blue.png b/mods/technic/technic_chests/textures/technic_chest_overlay_blue.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_blue.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_blue.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_brown.png b/mods/technic/technic_chests/textures/technic_chest_overlay_brown.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_brown.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_brown.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_cyan.png b/mods/technic/technic_chests/textures/technic_chest_overlay_cyan.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_cyan.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_cyan.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_dark_green.png b/mods/technic/technic_chests/textures/technic_chest_overlay_dark_green.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_dark_green.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_dark_green.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_dark_grey.png b/mods/technic/technic_chests/textures/technic_chest_overlay_dark_grey.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_dark_grey.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_dark_grey.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_green.png b/mods/technic/technic_chests/textures/technic_chest_overlay_green.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_green.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_green.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_grey.png b/mods/technic/technic_chests/textures/technic_chest_overlay_grey.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_grey.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_grey.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_magenta.png b/mods/technic/technic_chests/textures/technic_chest_overlay_magenta.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_magenta.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_magenta.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_orange.png b/mods/technic/technic_chests/textures/technic_chest_overlay_orange.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_orange.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_orange.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_pink.png b/mods/technic/technic_chests/textures/technic_chest_overlay_pink.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_pink.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_pink.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_red.png b/mods/technic/technic_chests/textures/technic_chest_overlay_red.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_red.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_red.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_violet.png b/mods/technic/technic_chests/textures/technic_chest_overlay_violet.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_violet.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_violet.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_white.png b/mods/technic/technic_chests/textures/technic_chest_overlay_white.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_white.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_white.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_yellow.png b/mods/technic/technic_chests/textures/technic_chest_overlay_yellow.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_chest_overlay_yellow.png rename to mods/technic/technic_chests/textures/technic_chest_overlay_yellow.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton0.png b/mods/technic/technic_chests/textures/technic_colorbutton0.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton0.png rename to mods/technic/technic_chests/textures/technic_colorbutton0.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton1.png b/mods/technic/technic_chests/textures/technic_colorbutton1.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton1.png rename to mods/technic/technic_chests/textures/technic_colorbutton1.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton10.png b/mods/technic/technic_chests/textures/technic_colorbutton10.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton10.png rename to mods/technic/technic_chests/textures/technic_colorbutton10.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton11.png b/mods/technic/technic_chests/textures/technic_colorbutton11.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton11.png rename to mods/technic/technic_chests/textures/technic_colorbutton11.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton12.png b/mods/technic/technic_chests/textures/technic_colorbutton12.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton12.png rename to mods/technic/technic_chests/textures/technic_colorbutton12.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton13.png b/mods/technic/technic_chests/textures/technic_colorbutton13.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton13.png rename to mods/technic/technic_chests/textures/technic_colorbutton13.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton14.png b/mods/technic/technic_chests/textures/technic_colorbutton14.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton14.png rename to mods/technic/technic_chests/textures/technic_colorbutton14.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton15.png b/mods/technic/technic_chests/textures/technic_colorbutton15.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton15.png rename to mods/technic/technic_chests/textures/technic_colorbutton15.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton2.png b/mods/technic/technic_chests/textures/technic_colorbutton2.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton2.png rename to mods/technic/technic_chests/textures/technic_colorbutton2.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton3.png b/mods/technic/technic_chests/textures/technic_colorbutton3.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton3.png rename to mods/technic/technic_chests/textures/technic_colorbutton3.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton4.png b/mods/technic/technic_chests/textures/technic_colorbutton4.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton4.png rename to mods/technic/technic_chests/textures/technic_colorbutton4.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton5.png b/mods/technic/technic_chests/textures/technic_colorbutton5.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton5.png rename to mods/technic/technic_chests/textures/technic_colorbutton5.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton6.png b/mods/technic/technic_chests/textures/technic_colorbutton6.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton6.png rename to mods/technic/technic_chests/textures/technic_colorbutton6.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton7.png b/mods/technic/technic_chests/textures/technic_colorbutton7.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton7.png rename to mods/technic/technic_chests/textures/technic_colorbutton7.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton8.png b/mods/technic/technic_chests/textures/technic_colorbutton8.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton8.png rename to mods/technic/technic_chests/textures/technic_colorbutton8.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_colorbutton9.png b/mods/technic/technic_chests/textures/technic_colorbutton9.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_colorbutton9.png rename to mods/technic/technic_chests/textures/technic_colorbutton9.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_front.png b/mods/technic/technic_chests/textures/technic_copper_chest_front.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_front.png rename to mods/technic/technic_chests/textures/technic_copper_chest_front.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_inventory.png b/mods/technic/technic_chests/textures/technic_copper_chest_inventory.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_inventory.png rename to mods/technic/technic_chests/textures/technic_copper_chest_inventory.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_lock_overlay.png b/mods/technic/technic_chests/textures/technic_copper_chest_lock_overlay.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_lock_overlay.png rename to mods/technic/technic_chests/textures/technic_copper_chest_lock_overlay.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_side.png b/mods/technic/technic_chests/textures/technic_copper_chest_side.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_side.png rename to mods/technic/technic_chests/textures/technic_copper_chest_side.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_top.png b/mods/technic/technic_chests/textures/technic_copper_chest_top.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_copper_chest_top.png rename to mods/technic/technic_chests/textures/technic_copper_chest_top.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_form_bg.png b/mods/technic/technic_chests/textures/technic_form_bg.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_form_bg.png rename to mods/technic/technic_chests/textures/technic_form_bg.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_front.png b/mods/technic/technic_chests/textures/technic_gold_chest_front.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_front.png rename to mods/technic/technic_chests/textures/technic_gold_chest_front.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_inventory.png b/mods/technic/technic_chests/textures/technic_gold_chest_inventory.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_inventory.png rename to mods/technic/technic_chests/textures/technic_gold_chest_inventory.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_lock_overlay.png b/mods/technic/technic_chests/textures/technic_gold_chest_lock_overlay.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_lock_overlay.png rename to mods/technic/technic_chests/textures/technic_gold_chest_lock_overlay.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_side.png b/mods/technic/technic_chests/textures/technic_gold_chest_side.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_side.png rename to mods/technic/technic_chests/textures/technic_gold_chest_side.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_top.png b/mods/technic/technic_chests/textures/technic_gold_chest_top.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_gold_chest_top.png rename to mods/technic/technic_chests/textures/technic_gold_chest_top.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_front.png b/mods/technic/technic_chests/textures/technic_iron_chest_front.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_front.png rename to mods/technic/technic_chests/textures/technic_iron_chest_front.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_inventory.png b/mods/technic/technic_chests/textures/technic_iron_chest_inventory.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_inventory.png rename to mods/technic/technic_chests/textures/technic_iron_chest_inventory.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_lock_overlay.png b/mods/technic/technic_chests/textures/technic_iron_chest_lock_overlay.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_lock_overlay.png rename to mods/technic/technic_chests/textures/technic_iron_chest_lock_overlay.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_side.png b/mods/technic/technic_chests/textures/technic_iron_chest_side.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_side.png rename to mods/technic/technic_chests/textures/technic_iron_chest_side.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_top.png b/mods/technic/technic_chests/textures/technic_iron_chest_top.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_iron_chest_top.png rename to mods/technic/technic_chests/textures/technic_iron_chest_top.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_main_inventory.png b/mods/technic/technic_chests/textures/technic_main_inventory.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_main_inventory.png rename to mods/technic/technic_chests/textures/technic_main_inventory.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_front.png b/mods/technic/technic_chests/textures/technic_mithril_chest_front.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_front.png rename to mods/technic/technic_chests/textures/technic_mithril_chest_front.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_inventory.png b/mods/technic/technic_chests/textures/technic_mithril_chest_inventory.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_inventory.png rename to mods/technic/technic_chests/textures/technic_mithril_chest_inventory.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_lock_overlay.png b/mods/technic/technic_chests/textures/technic_mithril_chest_lock_overlay.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_lock_overlay.png rename to mods/technic/technic_chests/textures/technic_mithril_chest_lock_overlay.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_side.png b/mods/technic/technic_chests/textures/technic_mithril_chest_side.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_side.png rename to mods/technic/technic_chests/textures/technic_mithril_chest_side.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_top.png b/mods/technic/technic_chests/textures/technic_mithril_chest_top.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_mithril_chest_top.png rename to mods/technic/technic_chests/textures/technic_mithril_chest_top.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_pencil_icon.png b/mods/technic/technic_chests/textures/technic_pencil_icon.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_pencil_icon.png rename to mods/technic/technic_chests/textures/technic_pencil_icon.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_front.png b/mods/technic/technic_chests/textures/technic_silver_chest_front.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_front.png rename to mods/technic/technic_chests/textures/technic_silver_chest_front.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_inventory.png b/mods/technic/technic_chests/textures/technic_silver_chest_inventory.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_inventory.png rename to mods/technic/technic_chests/textures/technic_silver_chest_inventory.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_lock_overlay.png b/mods/technic/technic_chests/textures/technic_silver_chest_lock_overlay.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_lock_overlay.png rename to mods/technic/technic_chests/textures/technic_silver_chest_lock_overlay.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_side.png b/mods/technic/technic_chests/textures/technic_silver_chest_side.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_side.png rename to mods/technic/technic_chests/textures/technic_silver_chest_side.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_top.png b/mods/technic/technic_chests/textures/technic_silver_chest_top.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_silver_chest_top.png rename to mods/technic/technic_chests/textures/technic_silver_chest_top.png diff --git a/mods/ITEMS/technic/technic_chests/textures/technic_wooden_chest_inventory.png b/mods/technic/technic_chests/textures/technic_wooden_chest_inventory.png similarity index 100% rename from mods/ITEMS/technic/technic_chests/textures/technic_wooden_chest_inventory.png rename to mods/technic/technic_chests/textures/technic_wooden_chest_inventory.png diff --git a/mods/technic/technic_worldgen/crafts.lua b/mods/technic/technic_worldgen/crafts.lua new file mode 100755 index 0000000..fba9df9 --- /dev/null +++ b/mods/technic/technic_worldgen/crafts.lua @@ -0,0 +1,198 @@ + +local S = technic.worldgen.gettext + +minetest.register_craftitem(":technic:uranium_lump", { + description = S("Uranium Lump"), + inventory_image = "technic_uranium_lump.png", +}) +minetest.register_alias("technic:uranium", "technic:uranium_lump") + +minetest.register_craftitem(":technic:uranium_ingot", { + description = S("Uranium Ingot"), + inventory_image = "technic_uranium_ingot.png", + groups = {uranium_ingot=1}, +}) + +minetest.register_craftitem(":technic:chromium_lump", { + description = S("Chromium Lump"), + inventory_image = "technic_chromium_lump.png", +}) + +minetest.register_craftitem(":technic:chromium_ingot", { + description = S("Chromium Ingot"), + inventory_image = "technic_chromium_ingot.png", +}) + +minetest.register_craftitem(":technic:zinc_lump", { + description = S("Zinc Lump"), + inventory_image = "technic_zinc_lump.png", +}) + +minetest.register_craftitem(":technic:zinc_ingot", { + description = S("Zinc Ingot"), + inventory_image = "technic_zinc_ingot.png", +}) + +minetest.register_craftitem(":technic:lead_lump", { + description = S("Lead Lump"), + inventory_image = "technic_lead_lump.png", +}) + +minetest.register_craftitem(":technic:lead_ingot", { + description = S("Lead Ingot"), + inventory_image = "technic_lead_ingot.png", +}) + +minetest.register_craftitem(":technic:sulfur_lump", { + description = S("Sulfur Lump"), + inventory_image = "technic_sulfur_lump.png", +}) + +minetest.register_craftitem(":technic:brass_ingot", { + description = S("Brass Ingot"), + inventory_image = "technic_brass_ingot.png", +}) + +minetest.register_alias("technic:wrought_iron_ingot", "default:steel_ingot") + +minetest.override_item("default:steel_ingot", { + description = S("Wrought Iron Ingot"), + inventory_image = "technic_wrought_iron_ingot.png", +}) + +minetest.register_craftitem(":technic:cast_iron_ingot", { + description = S("Cast Iron Ingot"), + inventory_image = "technic_cast_iron_ingot.png", +}) + +minetest.register_craftitem(":technic:carbon_steel_ingot", { + description = S("Carbon Steel Ingot"), + inventory_image = "technic_carbon_steel_ingot.png", +}) + +minetest.register_craftitem(":technic:stainless_steel_ingot", { + description = S("Stainless Steel Ingot"), + inventory_image = "technic_stainless_steel_ingot.png", +}) + +local function register_block(block, ingot) + minetest.register_craft({ + output = block, + recipe = { + {ingot, ingot, ingot}, + {ingot, ingot, ingot}, + {ingot, ingot, ingot}, + } + }) + + minetest.register_craft({ + output = ingot.." 9", + recipe = { + {block} + } + }) +end + +register_block("technic:uranium_block", "technic:uranium_ingot") +register_block("technic:chromium_block", "technic:chromium_ingot") +register_block("technic:zinc_block", "technic:zinc_ingot") +register_block("technic:lead_block", "technic:lead_ingot") +register_block("technic:brass_block", "technic:brass_ingot") +register_block("technic:cast_iron_block", "technic:cast_iron_ingot") +register_block("technic:carbon_steel_block", "technic:carbon_steel_ingot") +register_block("technic:stainless_steel_block", "technic:stainless_steel_ingot") + +minetest.register_craft({ + type = 'cooking', + recipe = "technic:zinc_lump", + output = "technic:zinc_ingot", +}) + +minetest.register_craft({ + type = 'cooking', + recipe = "technic:chromium_lump", + output = "technic:chromium_ingot", +}) + +minetest.register_craft({ + type = 'cooking', + recipe = "technic:uranium_lump", + output = "technic:uranium_ingot", +}) + +minetest.register_craft({ + type = 'cooking', + recipe = "technic:lead_lump", + output = "technic:lead_ingot", +}) + + +minetest.register_craft({ + type = 'cooking', + recipe = minetest.registered_aliases["technic:wrought_iron_ingot"], + output = "technic:cast_iron_ingot", +}) + +minetest.register_craft({ + type = 'cooking', + recipe = "technic:cast_iron_ingot", + cooktime = 2, + output = "technic:wrought_iron_ingot", +}) + +minetest.register_craft({ + type = 'cooking', + recipe = "technic:carbon_steel_ingot", + cooktime = 2, + output = "technic:wrought_iron_ingot", +}) + +local function for_each_registered_item(action) + local already_reg = {} + for k, _ in pairs(minetest.registered_items) do + table.insert(already_reg, k) + end + local really_register_craftitem = minetest.register_craftitem + minetest.register_craftitem = function(name, def) + really_register_craftitem(name, def) + action(string.gsub(name, "^:", "")) + end + local really_register_tool = minetest.register_tool + minetest.register_tool = function(name, def) + really_register_tool(name, def) + action(string.gsub(name, "^:", "")) + end + local really_register_node = minetest.register_node + minetest.register_node = function(name, def) + really_register_node(name, def) + action(string.gsub(name, "^:", "")) + end + for _, name in ipairs(already_reg) do + action(name) + end +end + +local steel_to_iron = {} +for _, i in ipairs({ + "default:axe_steel", + "default:pick_steel", + "default:shovel_steel", + "default:sword_steel", + "doors:door_steel", + "farming:hoe_steel", + "glooptest:hammer_steel", + "glooptest:handsaw_steel", + "glooptest:reinforced_crystal_glass", + "mesecons_doors:op_door_steel", + "mesecons_doors:sig_door_steel", + "vessels:steel_bottle", +}) do + steel_to_iron[i] = true +end + +for_each_registered_item(function(item_name) + local item_def = minetest.registered_items[item_name] + if steel_to_iron[item_name] and string.find(item_def.description, "Steel") then + minetest.override_item(item_name, { description = string.gsub(item_def.description, "Steel", S("Iron")) }) + end +end) diff --git a/mods/technic/technic_worldgen/depends.txt b/mods/technic/technic_worldgen/depends.txt new file mode 100755 index 0000000..ac858d0 --- /dev/null +++ b/mods/technic/technic_worldgen/depends.txt @@ -0,0 +1,3 @@ +default +intllib? +mg? diff --git a/mods/technic/technic_worldgen/init.lua b/mods/technic/technic_worldgen/init.lua new file mode 100755 index 0000000..4e490f7 --- /dev/null +++ b/mods/technic/technic_worldgen/init.lua @@ -0,0 +1,19 @@ +local modpath = minetest.get_modpath("technic_worldgen") + +technic = rawget(_G, "technic") or {} +technic.worldgen = { + gettext = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end, +} + +dofile(modpath.."/nodes.lua") +dofile(modpath.."/oregen.lua") +dofile(modpath.."/crafts.lua") + +-- Rubber trees, moretrees also supplies these +if not minetest.get_modpath("moretrees") then + dofile(modpath.."/rubber.lua") +else + -- older versions of technic provided rubber trees regardless + minetest.register_alias("technic:rubber_sapling", "moretrees:rubber_tree_sapling") + minetest.register_alias("technic:rubber_tree_empty", "moretrees:rubber_tree_trunk_empty") +end diff --git a/mods/ITEMS/technic/technic_worldgen/locale/de.txt b/mods/technic/technic_worldgen/locale/de.txt similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/locale/de.txt rename to mods/technic/technic_worldgen/locale/de.txt diff --git a/mods/ITEMS/technic/technic_worldgen/locale/es.txt b/mods/technic/technic_worldgen/locale/es.txt similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/locale/es.txt rename to mods/technic/technic_worldgen/locale/es.txt diff --git a/mods/ITEMS/technic/technic_worldgen/locale/template.txt b/mods/technic/technic_worldgen/locale/template.txt similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/locale/template.txt rename to mods/technic/technic_worldgen/locale/template.txt diff --git a/mods/ITEMS/technic/technic_worldgen/locale/tr.txt b/mods/technic/technic_worldgen/locale/tr.txt similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/locale/tr.txt rename to mods/technic/technic_worldgen/locale/tr.txt diff --git a/mods/technic/technic_worldgen/nodes.lua b/mods/technic/technic_worldgen/nodes.lua new file mode 100755 index 0000000..13961cf --- /dev/null +++ b/mods/technic/technic_worldgen/nodes.lua @@ -0,0 +1,229 @@ + +local S = technic.worldgen.gettext + +minetest.register_node( ":technic:mineral_uranium", { + description = S("Uranium Ore"), + tiles = { "default_stone.png^technic_mineral_uranium.png" }, + is_ground_content = true, + groups = {cracky=3, radioactive=1}, + sounds = default.node_sound_stone_defaults(), + drop = "technic:uranium_lump", +}) + +minetest.register_node( ":technic:granite_mineral_uranium", { + description = S("Uranium Ore"), + tiles = { "technic_granite.png^technic_mineral_uranium.png" }, + is_ground_content = true, + groups = {cracky=3, radioactive=1}, + sounds = default.node_sound_stone_defaults(), + drop = "technic:uranium_lump", +}) + +minetest.register_node( ":technic:mineral_chromium", { + description = S("Chromium Ore"), + tiles = { "default_stone.png^technic_mineral_chromium.png" }, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), + drop = "technic:chromium_lump", +}) + +minetest.register_node( ":technic:granite_mineral_chromium", { + description = S("Chromium Ore"), + tiles = { "technic_granite.png^technic_mineral_chromium.png" }, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), + drop = "technic:chromium_lump", +}) + +minetest.register_node( ":technic:mineral_zinc", { + description = S("Zinc Ore"), + tiles = { "default_stone.png^technic_mineral_zinc.png" }, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), + drop = "technic:zinc_lump", +}) + +minetest.register_node( ":technic:mineral_lead", { + description = S("Lead Ore"), + tiles = { "default_stone.png^technic_mineral_lead.png" }, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), + drop = "technic:lead_lump", +}) + +minetest.register_node( ":technic:mineral_sulfur", { + description = S("Sulfur Ore"), + tiles = { "default_stone.png^technic_mineral_sulfur.png" }, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), + drop = "technic:sulfur_lump", +}) + +minetest.register_node( ":technic:granite", { + description = S("Granite"), + tiles = { "technic_granite.png" }, + is_ground_content = true, + groups = {cracky=2, stone=1}, + drop = 'technic:granite_cobble', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node( ":technic:granite_cobble", { + description = S("Granite Cobble"), + tiles = {"technic_granite_cobble.png"}, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node( ":technic:granite_brick", { + description = S("Granite Brick"), + tiles = {"technic_granite_brick.png"}, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node( ":technic:marble", { + description = S("Marble"), + tiles = { "technic_marble.png" }, + is_ground_content = true, + groups = {cracky=3, marble=1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node( ":technic:marble_bricks", { + description = S("Marble Bricks"), + tiles = { "technic_marble_bricks.png" }, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node(":technic:uranium_block", { + description = S("Uranium Block"), + tiles = { "technic_uranium_block.png" }, + is_ground_content = true, + groups = {uranium_block=1, cracky=1, level=2, radioactive=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node(":technic:chromium_block", { + description = S("Chromium Block"), + tiles = { "technic_chromium_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node(":technic:zinc_block", { + description = S("Zinc Block"), + tiles = { "technic_zinc_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node(":technic:lead_block", { + description = S("Lead Block"), + tiles = { "technic_lead_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_alias("technic:wrought_iron_block", "default:steelblock") + +minetest.override_item("default:steelblock", { + description = S("Wrought Iron Block"), + tiles = { "technic_wrought_iron_block.png" }, +}) + +minetest.register_node(":technic:cast_iron_block", { + description = S("Cast Iron Block"), + tiles = { "technic_cast_iron_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node(":technic:carbon_steel_block", { + description = S("Carbon Steel Block"), + tiles = { "technic_carbon_steel_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node(":technic:stainless_steel_block", { + description = S("Stainless Steel Block"), + tiles = { "technic_stainless_steel_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node(":technic:brass_block", { + description = S("Brass Block"), + tiles = { "technic_brass_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_craft({ + output = 'technic:marble_bricks 4', + recipe = { + {'technic:marble','technic:marble'}, + {'technic:marble','technic:marble'} + } +}) + +minetest.register_alias("technic:diamond_block", "default:diamondblock") +minetest.register_alias("technic:diamond", "default:diamond") +minetest.register_alias("technic:mineral_diamond", "default:stone_with_diamond") + +local function for_each_registered_node(action) + local really_register_node = minetest.register_node + minetest.register_node = function(name, def) + really_register_node(name, def) + action(name:gsub("^:", ""), def) + end + for name, def in pairs(minetest.registered_nodes) do + action(name, def) + end +end + +for_each_registered_node(function(node_name, node_def) + if node_name ~= "default:steelblock" and + node_name:find("steelblock", 1, true) and + node_def.description:find("Steel", 1, true) then + minetest.override_item(node_name, { + description = node_def.description:gsub("Steel", S("Wrought Iron")), + }) + end + local tiles = node_def.tiles or node_def.tile_images + if tiles then + local new_tiles = {} + local do_override = false + if type(tiles) == "string" then + tiles = {tiles} + end + for i, t in ipairs(tiles) do + if type(t) == "string" and t == "default_steel_block.png" then + do_override = true + t = "technic_wrought_iron_block.png" + end + table.insert(new_tiles, t) + end + if do_override then + minetest.override_item(node_name, { + tiles = new_tiles + }) + end + end +end) + diff --git a/mods/technic/technic_worldgen/oregen.lua b/mods/technic/technic_worldgen/oregen.lua new file mode 100755 index 0000000..3db0848 --- /dev/null +++ b/mods/technic/technic_worldgen/oregen.lua @@ -0,0 +1,43 @@ +-- Sulfur +local sulfur_buf = {} +local sulfur_noise= nil + +minetest.register_on_generated(function(minp, maxp, seed) + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local a = VoxelArea:new{ + MinEdge = {x = emin.x, y = emin.y, z = emin.z}, + MaxEdge = {x = emax.x, y = emax.y, z = emax.z}, + } + local data = vm:get_data(sulfur_buf) + local pr = PseudoRandom(17 * minp.x + 42 * minp.y + 101 * minp.z) + sulfur_noise = sulfur_noise or minetest.get_perlin(9876, 3, 0.5, 100) + + local c_lava = minetest.get_content_id("default:lava_source") + local c_lava_flowing = minetest.get_content_id("default:lava_flowing") + local c_stone = minetest.get_content_id("default:stone") + local c_sulfur = minetest.get_content_id("technic:mineral_sulfur") + + local grid_size = 5 + for x = minp.x + math.floor(grid_size / 2), maxp.x, grid_size do + for y = minp.y + math.floor(grid_size / 2), maxp.y, grid_size do + for z = minp.z + math.floor(grid_size / 2), maxp.z, grid_size do + local c = data[a:index(x, y, z)] + if (c == c_lava or c == c_lava_flowing) and sulfur_noise:get3d({x = x, y = z, z = z}) >= 0.4 then + for xx = math.max(minp.x, x - grid_size), math.min(maxp.x, x + grid_size) do + for yy = math.max(minp.y, y - grid_size), math.min(maxp.y, y + grid_size) do + for zz = math.max(minp.z, z - grid_size), math.min(maxp.z, z + grid_size) do + local i = a:index(xx, yy, zz) + if data[i] == c_stone and pr:next(1, 10) <= 7 then + data[i] = c_sulfur + end + end + end + end + end + end + end + end + + vm:set_data(data) + vm:write_to_map(data) +end) diff --git a/mods/technic/technic_worldgen/rubber.lua b/mods/technic/technic_worldgen/rubber.lua new file mode 100755 index 0000000..9e2a8b2 --- /dev/null +++ b/mods/technic/technic_worldgen/rubber.lua @@ -0,0 +1,83 @@ +-- Code of rubber tree by PilzAdam + +local S = technic.worldgen.gettext + +minetest.register_node(":moretrees:rubber_tree_sapling", { + description = S("Rubber Tree Sapling"), + drawtype = "plantlike", + tiles = {"technic_rubber_sapling.png"}, + inventory_image = "technic_rubber_sapling.png", + wield_image = "technic_rubber_sapling.png", + paramtype = "light", + walkable = false, + groups = {dig_immediate=3, flammable=2, sapling=1}, + sounds = default.node_sound_defaults(), +}) + +minetest.register_craft({ + type = "fuel", + recipe = "moretrees:rubber_tree_sapling", + burntime = 10 +}) + +minetest.register_node(":moretrees:rubber_tree_trunk", { + description = S("Rubber Tree"), + tiles = {"default_tree_top.png", "default_tree_top.png", + "technic_rubber_tree_full.png"}, + groups = {tree=1, snappy=1, choppy=2, oddly_breakable_by_hand=1, + flammable=2}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node(":moretrees:rubber_tree_trunk_empty", { + description = S("Rubber Tree"), + tiles = {"default_tree_top.png", "default_tree_top.png", + "technic_rubber_tree_empty.png"}, + groups = {tree=1, snappy=1, choppy=2, oddly_breakable_by_hand=1, + flammable=2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node(":moretrees:rubber_tree_leaves", { + drawtype = "allfaces_optional", + description = S("Rubber Tree Leaves"), + tiles = {"technic_rubber_leaves.png"}, + paramtype = "light", + groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, + drop = { + max_items = 1, + items = {{ + items = {"moretrees:rubber_tree_sapling"}, + rarity = 20, + }, + { + items = {"moretrees:rubber_tree_leaves"}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), +}) + +technic.rubber_tree_model={ + axiom = "FFFFA", + rules_a = "[&FFBFA]////[&BFFFA]////[&FBFFA]", + rules_b = "[&FFA]////[&FFA]////[&FFA]", + trunk = "moretrees:rubber_tree_trunk", + leaves = "moretrees:rubber_tree_leaves", + angle = 35, + iterations = 3, + random_level = 1, + trunk_type = "double", + thin_branches = true +} + +minetest.register_abm({ + nodenames = {"moretrees:rubber_tree_sapling"}, + label = "Worldgen: grow rubber tree sapling", + interval = 60, + chance = 20, + action = function(pos, node) + minetest.remove_node(pos) + minetest.spawn_tree(pos, technic.rubber_tree_model) + end +}) diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_brass_block.png b/mods/technic/technic_worldgen/textures/technic_brass_block.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_brass_block.png rename to mods/technic/technic_worldgen/textures/technic_brass_block.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_brass_dust.png b/mods/technic/technic_worldgen/textures/technic_brass_dust.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_brass_dust.png rename to mods/technic/technic_worldgen/textures/technic_brass_dust.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_brass_ingot.png b/mods/technic/technic_worldgen/textures/technic_brass_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_brass_ingot.png rename to mods/technic/technic_worldgen/textures/technic_brass_ingot.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_carbon_steel_block.png b/mods/technic/technic_worldgen/textures/technic_carbon_steel_block.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_carbon_steel_block.png rename to mods/technic/technic_worldgen/textures/technic_carbon_steel_block.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_carbon_steel_ingot.png b/mods/technic/technic_worldgen/textures/technic_carbon_steel_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_carbon_steel_ingot.png rename to mods/technic/technic_worldgen/textures/technic_carbon_steel_ingot.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_cast_iron_block.png b/mods/technic/technic_worldgen/textures/technic_cast_iron_block.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_cast_iron_block.png rename to mods/technic/technic_worldgen/textures/technic_cast_iron_block.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_cast_iron_ingot.png b/mods/technic/technic_worldgen/textures/technic_cast_iron_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_cast_iron_ingot.png rename to mods/technic/technic_worldgen/textures/technic_cast_iron_ingot.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_chromium_block.png b/mods/technic/technic_worldgen/textures/technic_chromium_block.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_chromium_block.png rename to mods/technic/technic_worldgen/textures/technic_chromium_block.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_chromium_ingot.png b/mods/technic/technic_worldgen/textures/technic_chromium_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_chromium_ingot.png rename to mods/technic/technic_worldgen/textures/technic_chromium_ingot.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_chromium_lump.png b/mods/technic/technic_worldgen/textures/technic_chromium_lump.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_chromium_lump.png rename to mods/technic/technic_worldgen/textures/technic_chromium_lump.png diff --git a/mods/technic/technic_worldgen/textures/technic_granite.png b/mods/technic/technic_worldgen/textures/technic_granite.png new file mode 100644 index 0000000..3dc55d1 Binary files /dev/null and b/mods/technic/technic_worldgen/textures/technic_granite.png differ diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_granite_brick.png b/mods/technic/technic_worldgen/textures/technic_granite_brick.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_granite_brick.png rename to mods/technic/technic_worldgen/textures/technic_granite_brick.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_granite_cobble.png b/mods/technic/technic_worldgen/textures/technic_granite_cobble.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_granite_cobble.png rename to mods/technic/technic_worldgen/textures/technic_granite_cobble.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_lead_block.png b/mods/technic/technic_worldgen/textures/technic_lead_block.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_lead_block.png rename to mods/technic/technic_worldgen/textures/technic_lead_block.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_lead_dust.png b/mods/technic/technic_worldgen/textures/technic_lead_dust.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_lead_dust.png rename to mods/technic/technic_worldgen/textures/technic_lead_dust.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_lead_ingot.png b/mods/technic/technic_worldgen/textures/technic_lead_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_lead_ingot.png rename to mods/technic/technic_worldgen/textures/technic_lead_ingot.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_lead_lump.png b/mods/technic/technic_worldgen/textures/technic_lead_lump.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_lead_lump.png rename to mods/technic/technic_worldgen/textures/technic_lead_lump.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_marble.png b/mods/technic/technic_worldgen/textures/technic_marble.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_marble.png rename to mods/technic/technic_worldgen/textures/technic_marble.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_marble_bricks.png b/mods/technic/technic_worldgen/textures/technic_marble_bricks.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_marble_bricks.png rename to mods/technic/technic_worldgen/textures/technic_marble_bricks.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_chromium.png b/mods/technic/technic_worldgen/textures/technic_mineral_chromium.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_chromium.png rename to mods/technic/technic_worldgen/textures/technic_mineral_chromium.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_lead.png b/mods/technic/technic_worldgen/textures/technic_mineral_lead.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_lead.png rename to mods/technic/technic_worldgen/textures/technic_mineral_lead.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_sulfur.png b/mods/technic/technic_worldgen/textures/technic_mineral_sulfur.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_sulfur.png rename to mods/technic/technic_worldgen/textures/technic_mineral_sulfur.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_uranium.png b/mods/technic/technic_worldgen/textures/technic_mineral_uranium.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_uranium.png rename to mods/technic/technic_worldgen/textures/technic_mineral_uranium.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_zinc.png b/mods/technic/technic_worldgen/textures/technic_mineral_zinc.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_mineral_zinc.png rename to mods/technic/technic_worldgen/textures/technic_mineral_zinc.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_rubber.png b/mods/technic/technic_worldgen/textures/technic_rubber.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_rubber.png rename to mods/technic/technic_worldgen/textures/technic_rubber.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_leaves.png b/mods/technic/technic_worldgen/textures/technic_rubber_leaves.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_leaves.png rename to mods/technic/technic_worldgen/textures/technic_rubber_leaves.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_sapling.png b/mods/technic/technic_worldgen/textures/technic_rubber_sapling.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_sapling.png rename to mods/technic/technic_worldgen/textures/technic_rubber_sapling.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_tree_empty.png b/mods/technic/technic_worldgen/textures/technic_rubber_tree_empty.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_tree_empty.png rename to mods/technic/technic_worldgen/textures/technic_rubber_tree_empty.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_tree_full.png b/mods/technic/technic_worldgen/textures/technic_rubber_tree_full.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_tree_full.png rename to mods/technic/technic_worldgen/textures/technic_rubber_tree_full.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_tree_grindings.png b/mods/technic/technic_worldgen/textures/technic_rubber_tree_grindings.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_rubber_tree_grindings.png rename to mods/technic/technic_worldgen/textures/technic_rubber_tree_grindings.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_stainless_steel_block.png b/mods/technic/technic_worldgen/textures/technic_stainless_steel_block.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_stainless_steel_block.png rename to mods/technic/technic_worldgen/textures/technic_stainless_steel_block.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_stainless_steel_ingot.png b/mods/technic/technic_worldgen/textures/technic_stainless_steel_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_stainless_steel_ingot.png rename to mods/technic/technic_worldgen/textures/technic_stainless_steel_ingot.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_sulfur_dust.png b/mods/technic/technic_worldgen/textures/technic_sulfur_dust.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_sulfur_dust.png rename to mods/technic/technic_worldgen/textures/technic_sulfur_dust.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_sulfur_lump.png b/mods/technic/technic_worldgen/textures/technic_sulfur_lump.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_sulfur_lump.png rename to mods/technic/technic_worldgen/textures/technic_sulfur_lump.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_uranium.png b/mods/technic/technic_worldgen/textures/technic_uranium.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_uranium.png rename to mods/technic/technic_worldgen/textures/technic_uranium.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_uranium_block.png b/mods/technic/technic_worldgen/textures/technic_uranium_block.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_uranium_block.png rename to mods/technic/technic_worldgen/textures/technic_uranium_block.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_uranium_ingot.png b/mods/technic/technic_worldgen/textures/technic_uranium_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_uranium_ingot.png rename to mods/technic/technic_worldgen/textures/technic_uranium_ingot.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_uranium_lump.png b/mods/technic/technic_worldgen/textures/technic_uranium_lump.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_uranium_lump.png rename to mods/technic/technic_worldgen/textures/technic_uranium_lump.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_wrought_iron_block.png b/mods/technic/technic_worldgen/textures/technic_wrought_iron_block.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_wrought_iron_block.png rename to mods/technic/technic_worldgen/textures/technic_wrought_iron_block.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_wrought_iron_ingot.png b/mods/technic/technic_worldgen/textures/technic_wrought_iron_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_wrought_iron_ingot.png rename to mods/technic/technic_worldgen/textures/technic_wrought_iron_ingot.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_zinc_block.png b/mods/technic/technic_worldgen/textures/technic_zinc_block.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_zinc_block.png rename to mods/technic/technic_worldgen/textures/technic_zinc_block.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_zinc_ingot.png b/mods/technic/technic_worldgen/textures/technic_zinc_ingot.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_zinc_ingot.png rename to mods/technic/technic_worldgen/textures/technic_zinc_ingot.png diff --git a/mods/ITEMS/technic/technic_worldgen/textures/technic_zinc_lump.png b/mods/technic/technic_worldgen/textures/technic_zinc_lump.png similarity index 100% rename from mods/ITEMS/technic/technic_worldgen/textures/technic_zinc_lump.png rename to mods/technic/technic_worldgen/textures/technic_zinc_lump.png diff --git a/mods/technic/wrench/depends.txt b/mods/technic/wrench/depends.txt new file mode 100755 index 0000000..a681af3 --- /dev/null +++ b/mods/technic/wrench/depends.txt @@ -0,0 +1,6 @@ +default +technic? +technic_chests? +technic_worldgen? +intllib? + diff --git a/mods/ITEMS/technic/wrench/init.lua b/mods/technic/wrench/init.lua similarity index 100% rename from mods/ITEMS/technic/wrench/init.lua rename to mods/technic/wrench/init.lua diff --git a/mods/ITEMS/technic/wrench/locale/de.txt b/mods/technic/wrench/locale/de.txt similarity index 100% rename from mods/ITEMS/technic/wrench/locale/de.txt rename to mods/technic/wrench/locale/de.txt diff --git a/mods/ITEMS/technic/wrench/locale/es.txt b/mods/technic/wrench/locale/es.txt similarity index 100% rename from mods/ITEMS/technic/wrench/locale/es.txt rename to mods/technic/wrench/locale/es.txt diff --git a/mods/ITEMS/technic/wrench/locale/template.txt b/mods/technic/wrench/locale/template.txt similarity index 100% rename from mods/ITEMS/technic/wrench/locale/template.txt rename to mods/technic/wrench/locale/template.txt diff --git a/mods/ITEMS/technic/wrench/locale/tr.txt b/mods/technic/wrench/locale/tr.txt similarity index 100% rename from mods/ITEMS/technic/wrench/locale/tr.txt rename to mods/technic/wrench/locale/tr.txt diff --git a/mods/technic/wrench/support.lua b/mods/technic/wrench/support.lua new file mode 100755 index 0000000..1d21811 --- /dev/null +++ b/mods/technic/wrench/support.lua @@ -0,0 +1,73 @@ +--[[ +supported_nodes +This table stores all nodes that are compatible with the wrench mod. +Syntax: + [] = { + lists = {""}, + metas = {[""] = STRING, + [""] = INT, + [""] = FLOAT}, + owned = true, + store_meta_always = true, + } + owned - nodes that are protected by owner requirements (Ex. locked chests) + store_meta_always - when nodes are broken this ensures metadata and + inventory is always stored (Ex. active state for machines) +--]] + +wrench.META_TYPE_INT = 0 +wrench.META_TYPE_FLOAT = 1 +wrench.META_TYPE_STRING = 2 + +local INT, STRING, FLOAT = + wrench.META_TYPE_INT, + wrench.META_TYPE_STRING, + wrench.META_TYPE_FLOAT + +wrench.registered_nodes = { + ["default:chest"] = { + lists = {"main"}, + }, + ["default:chest_locked"] = { + lists = {"main"}, + metas = {owner = STRING, + infotext = STRING}, + owned = true, + }, + ["default:furnace"] = { + lists = {"fuel", "src", "dst"}, + metas = {infotext = STRING, + fuel_totaltime = FLOAT, + fuel_time = FLOAT, + src_totaltime = FLOAT, + src_time = FLOAT}, + }, + ["default:furnace_active"] = { + lists = {"fuel", "src", "dst"}, + metas = {infotext = STRING, + fuel_totaltime = FLOAT, + fuel_time = FLOAT, + src_totaltime = FLOAT, + src_time = FLOAT}, + store_meta_always = true, + }, + ["default:sign_wall"] = { + metas = {infotext = STRING, + text = STRING}, + }, +} + +function wrench:original_name(name) + for key, value in pairs(self.registered_nodes) do + if name == value.name then + return key + end + end +end + +function wrench:register_node(name, def) + if minetest.registered_nodes[name] then + self.registered_nodes[name] = def + end +end + diff --git a/mods/technic/wrench/technic.lua b/mods/technic/wrench/technic.lua new file mode 100755 index 0000000..c404180 --- /dev/null +++ b/mods/technic/wrench/technic.lua @@ -0,0 +1,343 @@ + +local INT, STRING, FLOAT = + wrench.META_TYPE_INT, + wrench.META_TYPE_STRING, + wrench.META_TYPE_FLOAT + +wrench:register_node("technic:iron_chest", { + lists = {"main"}, +}) +wrench:register_node("technic:iron_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING}, + owned = true, +}) +wrench:register_node("technic:copper_chest", { + lists = {"main"}, +}) +wrench:register_node("technic:copper_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING}, + owned = true, +}) +wrench:register_node("technic:silver_chest", { + lists = {"main"}, + metas = {infotext = STRING, + formspec = STRING}, +}) +wrench:register_node("technic:silver_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING, + formspec = STRING}, + owned = true, +}) +wrench:register_node("technic:gold_chest", { + lists = {"main"}, + metas = {infotext = STRING, + formspec = STRING}, +}) +wrench:register_node("technic:gold_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING, + formspec = STRING}, + owned = true, +}) +wrench:register_node("technic:mithril_chest", { + lists = {"main"}, + metas = {infotext = STRING, + formspec = STRING}, +}) +wrench:register_node("technic:mithril_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING, + formspec = STRING}, + owned = true, +}) +wrench:register_node("technic:lv_electric_furnace", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:lv_electric_furnace_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_electric_furnace", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_electric_furnace_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:coal_alloy_furnace", { + lists = {"fuel", "src", "dst"}, + metas = {infotext = STRING, + fuel_totaltime = FLOAT, + fuel_time = FLOAT, + src_totaltime = FLOAT, + src_time = FLOAT}, +}) +wrench:register_node("technic:coal_alloy_furnace_active", { + lists = {"fuel", "src", "dst"}, + metas = {infotext = STRING, + fuel_totaltime = FLOAT, + fuel_time = FLOAT, + src_totaltime = FLOAT, + src_time = FLOAT}, +}) +wrench:register_node("technic:alloy_furnace", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:alloy_furnace_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_alloy_furnace", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_alloy_furnace_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:tool_workshop", { + lists = {"src", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT}, +}) +wrench:register_node("technic:grinder", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:grinder_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_grinder", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_grinder_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:extractor", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:extractor_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_extractor", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_extractor_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:compressor", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:compressor_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_compressor", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_compressor_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:cnc", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT, + cnc_product = STRING}, +}) +wrench:register_node("technic:cnc_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT, + cnc_product = STRING}, +}) +wrench:register_node("technic:mv_centrifuge", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_centrifuge_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) + + +local chest_mark_colors = { + '_black', + '_blue', + '_brown', + '_cyan', + '_dark_green', + '_dark_grey', + '_green', + '_grey', + '_magenta', + '_orange', + '_pink', + '_red', + '_violet', + '_white', + '_yellow', + '', +} + +for i = 1, 15 do + wrench:register_node("technic:gold_chest"..chest_mark_colors[i], { + lists = {"main"}, + metas = {infotext = STRING,formspec = STRING}, + }) + wrench:register_node("technic:gold_locked_chest"..chest_mark_colors[i], { + lists = {"main"}, + metas = {infotext = STRING,owner = STRING,formspec = STRING}, + owned = true, + }) +end + +if minetest.get_modpath("technic") then + for tier, _ in pairs(technic.machines) do + local ltier = tier:lower() + for i = 0, 8 do + wrench:register_node("technic:"..ltier.."_battery_box"..i, { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + [tier.."_EU_demand"] = INT, + [tier.."_EU_supply"] = INT, + [tier.."_EU_input"] = INT, + internal_EU_charge = INT, + last_side_shown = INT}, + }) + end + end +end + diff --git a/mods/ITEMS/technic/wrench/textures/technic_wrench.png b/mods/technic/wrench/textures/technic_wrench.png similarity index 100% rename from mods/ITEMS/technic/wrench/textures/technic_wrench.png rename to mods/technic/wrench/textures/technic_wrench.png diff --git a/mods/tnt/README.txt b/mods/tnt/README.txt new file mode 100755 index 0000000..b8f8f09 --- /dev/null +++ b/mods/tnt/README.txt @@ -0,0 +1,57 @@ +Minetest Game mod: tnt +====================== +See license.txt for license information. + +Authors of source code +---------------------- +PilzAdam (MIT) +ShadowNinja (MIT) +sofar (sofar@foo-projects.org) (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +BlockMen (CC BY-SA 3.0): +All textures not mentioned below. + +ShadowNinja (CC BY-SA 3.0): +tnt_smoke.png + +Wuzzy (CC BY-SA 3.0): +All gunpowder textures except tnt_gunpowder_inventory.png. + +sofar (sofar@foo-projects.org) (CC BY-SA 3.0): +tnt_blast.png + +paramat (CC BY-SA 3.0) +tnt_tnt_stick.png - Derived from a texture by benrob0329. + +Introduction +------------ +This mod adds TNT to Minetest. TNT is a tool to help the player +in mining. + +How to use the mod: + +Craft gunpowder by placing coal and gravel in the crafting area. +The gunpowder can be used to craft TNT sticks or as a fuse trail for TNT. + +To craft 2 TNT sticks: +G_G +GPG +G_G +G = gunpowder +P = paper +The sticks are not usable as an explosive. + +Craft TNT from 9 TNT sticks. + +There are different ways to ignite TNT: + 1. Hit it with a torch. + 2. Hit a gunpowder fuse trail that leads to TNT with a torch or + flint-and-steel. + 3. Activate it with mesecons (fastest way). + +For 1 TNT: +Node destruction radius is 3 nodes. +Player and object damage radius is 6 nodes. \ No newline at end of file diff --git a/mods/tnt/depends.txt b/mods/tnt/depends.txt new file mode 100755 index 0000000..5ff216f --- /dev/null +++ b/mods/tnt/depends.txt @@ -0,0 +1,3 @@ +default +fire + diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua new file mode 100755 index 0000000..56bf8a8 --- /dev/null +++ b/mods/tnt/init.lua @@ -0,0 +1,680 @@ +tnt = {} + +-- Default to enabled when in singleplayer +local enable_tnt = minetest.settings:get_bool("enable_tnt") +if enable_tnt == nil then + enable_tnt = minetest.is_singleplayer() +end + +-- loss probabilities array (one in X will be lost) +local loss_prob = {} + +loss_prob["default:cobble"] = 3 +loss_prob["default:dirt"] = 4 + +local tnt_radius = tonumber(minetest.settings:get("tnt_radius") or 3) + +-- Fill a list with data for content IDs, after all nodes are registered +local cid_data = {} +minetest.after(0, function() + for name, def in pairs(minetest.registered_nodes) do + cid_data[minetest.get_content_id(name)] = { + name = name, + drops = def.drops, + flammable = def.groups.flammable, + on_blast = def.on_blast, + } + end +end) + +local function rand_pos(center, pos, radius) + local def + local reg_nodes = minetest.registered_nodes + local i = 0 + repeat + -- Give up and use the center if this takes too long + if i > 4 then + pos.x, pos.z = center.x, center.z + break + end + pos.x = center.x + math.random(-radius, radius) + pos.z = center.z + math.random(-radius, radius) + def = reg_nodes[minetest.get_node(pos).name] + i = i + 1 + until def and not def.walkable +end + +local function eject_drops(drops, pos, radius) + local drop_pos = vector.new(pos) + for _, item in pairs(drops) do + local count = math.min(item:get_count(), item:get_stack_max()) + while count > 0 do + local take = math.max(1,math.min(radius * radius, + count, + item:get_stack_max())) + rand_pos(pos, drop_pos, radius) + local dropitem = ItemStack(item) + dropitem:set_count(take) + local obj = minetest.add_item(drop_pos, dropitem) + if obj then + obj:get_luaentity().collect = true + obj:set_acceleration({x = 0, y = -10, z = 0}) + obj:set_velocity({x = math.random(-3, 3), + y = math.random(0, 10), + z = math.random(-3, 3)}) + end + count = count - take + end + end +end + +local function add_drop(drops, item) + item = ItemStack(item) + local name = item:get_name() + if loss_prob[name] ~= nil and math.random(1, loss_prob[name]) == 1 then + return + end + + local drop = drops[name] + if drop == nil then + drops[name] = item + else + drop:set_count(drop:get_count() + item:get_count()) + end +end + +local basic_flame_on_construct -- cached value +local function destroy(drops, npos, cid, c_air, c_fire, + on_blast_queue, on_construct_queue, + ignore_protection, ignore_on_blast, owner) + if not ignore_protection and minetest.is_protected(npos, owner) then + return cid + end + + local def = cid_data[cid] + + if not def then + return c_air + elseif not ignore_on_blast and def.on_blast then + on_blast_queue[#on_blast_queue + 1] = { + pos = vector.new(npos), + on_blast = def.on_blast + } + return cid + elseif def.flammable then + on_construct_queue[#on_construct_queue + 1] = { + fn = basic_flame_on_construct, + pos = vector.new(npos) + } + return c_fire + else + local node_drops = minetest.get_node_drops(def.name, "") + for _, item in pairs(node_drops) do + add_drop(drops, item) + end + return c_air + end +end + +local function calc_velocity(pos1, pos2, old_vel, power) + -- Avoid errors caused by a vector of zero length + if vector.equals(pos1, pos2) then + return old_vel + end + + local vel = vector.direction(pos1, pos2) + vel = vector.normalize(vel) + vel = vector.multiply(vel, power) + + -- Divide by distance + local dist = vector.distance(pos1, pos2) + dist = math.max(dist, 1) + vel = vector.divide(vel, dist) + + -- Add old velocity + vel = vector.add(vel, old_vel) + + -- randomize it a bit + vel = vector.add(vel, { + x = math.random() - 0.5, + y = math.random() - 0.5, + z = math.random() - 0.5, + }) + + -- Limit to terminal velocity + dist = vector.length(vel) + if dist > 250 then + vel = vector.divide(vel, dist / 250) + end + return vel +end + +local function entity_physics(pos, radius, drops) + local objs = minetest.get_objects_inside_radius(pos, radius) + for _, obj in pairs(objs) do + local obj_pos = obj:get_pos() + local dist = math.max(1, vector.distance(pos, obj_pos)) + + local damage = (4 / dist) * radius + if obj:is_player() then + -- currently the engine has no method to set + -- player velocity. See #2960 + -- instead, we knock the player back 1.0 node, and slightly upwards + local dir = vector.normalize(vector.subtract(obj_pos, pos)) + local moveoff = vector.multiply(dir, dist + 1.0) + local newpos = vector.add(pos, moveoff) + newpos = vector.add(newpos, {x = 0, y = 0.2, z = 0}) + obj:set_pos(newpos) + + obj:set_hp(obj:get_hp() - damage) + else + local do_damage = true + local do_knockback = true + local entity_drops = {} + local luaobj = obj:get_luaentity() + local objdef = minetest.registered_entities[luaobj.name] + + if objdef and objdef.on_blast then + do_damage, do_knockback, entity_drops = objdef.on_blast(luaobj, damage) + end + + if do_knockback then + local obj_vel = obj:get_velocity() + obj:set_velocity(calc_velocity(pos, obj_pos, + obj_vel, radius * 10)) + end + if do_damage then + if not obj:get_armor_groups().immortal then + obj:punch(obj, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = damage}, + }, nil) + end + end + for _, item in pairs(entity_drops) do + add_drop(drops, item) + end + end + end +end + +local function add_effects(pos, radius, drops) + minetest.add_particle({ + pos = pos, + velocity = vector.new(), + acceleration = vector.new(), + expirationtime = 0.4, + size = radius * 10, + collisiondetection = false, + vertical = false, + texture = "tnt_boom.png", + glow = 15, + }) + minetest.add_particlespawner({ + amount = 64, + time = 0.5, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x = -10, y = -10, z = -10}, + maxvel = {x = 10, y = 10, z = 10}, + minacc = vector.new(), + maxacc = vector.new(), + minexptime = 1, + maxexptime = 2.5, + minsize = radius * 3, + maxsize = radius * 5, + texture = "tnt_smoke.png", + }) + + -- we just dropped some items. Look at the items entities and pick + -- one of them to use as texture + local texture = "tnt_blast.png" --fallback texture + local most = 0 + for name, stack in pairs(drops) do + local count = stack:get_count() + if count > most then + most = count + local def = minetest.registered_nodes[name] + if def and def.tiles and def.tiles[1] then + texture = def.tiles[1] + end + end + end + + minetest.add_particlespawner({ + amount = 64, + time = 0.1, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x = -3, y = 0, z = -3}, + maxvel = {x = 3, y = 5, z = 3}, + minacc = {x = 0, y = -10, z = 0}, + maxacc = {x = 0, y = -10, z = 0}, + minexptime = 0.8, + maxexptime = 2.0, + minsize = radius * 0.66, + maxsize = radius * 2, + texture = texture, + collisiondetection = true, + }) +end + +function tnt.burn(pos, nodename) + local name = nodename or minetest.get_node(pos).name + local def = minetest.registered_nodes[name] + if not def then + return + elseif def.on_ignite then + def.on_ignite(pos) + elseif minetest.get_item_group(name, "tnt") > 0 then + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.sound_play("tnt_ignite", {pos = pos}) + minetest.get_node_timer(pos):start(1) + end +end + +local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owner, explode_center) + pos = vector.round(pos) + -- scan for adjacent TNT nodes first, and enlarge the explosion + local vm1 = VoxelManip() + local p1 = vector.subtract(pos, 2) + local p2 = vector.add(pos, 2) + local minp, maxp = vm1:read_from_map(p1, p2) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm1:get_data() + local count = 0 + local c_tnt = minetest.get_content_id("tnt:tnt") + local c_tnt_burning = minetest.get_content_id("tnt:tnt_burning") + local c_tnt_boom = minetest.get_content_id("tnt:boom") + local c_air = minetest.get_content_id("air") + -- make sure we still have explosion even when centre node isnt tnt related + if explode_center then + count = 1 + end + + for z = pos.z - 2, pos.z + 2 do + for y = pos.y - 2, pos.y + 2 do + local vi = a:index(pos.x - 2, y, z) + for x = pos.x - 2, pos.x + 2 do + local cid = data[vi] + if cid == c_tnt or cid == c_tnt_boom or cid == c_tnt_burning then + count = count + 1 + data[vi] = c_air + end + vi = vi + 1 + end + end + end + + vm1:set_data(data) + vm1:write_to_map() + + -- recalculate new radius + radius = math.floor(radius * math.pow(count, 1/3)) + + -- perform the explosion + local vm = VoxelManip() + local pr = PseudoRandom(os.time()) + p1 = vector.subtract(pos, radius) + p2 = vector.add(pos, radius) + minp, maxp = vm:read_from_map(p1, p2) + a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + data = vm:get_data() + + local drops = {} + local on_blast_queue = {} + local on_construct_queue = {} + basic_flame_on_construct = minetest.registered_nodes["fire:basic_flame"].on_construct + + local c_fire = minetest.get_content_id("fire:basic_flame") + for z = -radius, radius do + for y = -radius, radius do + local vi = a:index(pos.x + (-radius), pos.y + y, pos.z + z) + for x = -radius, radius do + local r = vector.length(vector.new(x, y, z)) + if (radius * radius) / (r * r) >= (pr:next(80, 125) / 100) then + local cid = data[vi] + local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z} + if cid ~= c_air then + data[vi] = destroy(drops, p, cid, c_air, c_fire, + on_blast_queue, on_construct_queue, + ignore_protection, ignore_on_blast, owner) + end + end + vi = vi + 1 + end + end + end + + vm:set_data(data) + vm:write_to_map() + vm:update_map() + vm:update_liquids() + + -- call check_single_for_falling for everything within 1.5x blast radius + for y = -radius * 1.5, radius * 1.5 do + for z = -radius * 1.5, radius * 1.5 do + for x = -radius * 1.5, radius * 1.5 do + local rad = {x = x, y = y, z = z} + local s = vector.add(pos, rad) + local r = vector.length(rad) + if r / radius < 1.4 then + minetest.check_single_for_falling(s) + end + end + end + end + + for _, queued_data in pairs(on_blast_queue) do + local dist = math.max(1, vector.distance(queued_data.pos, pos)) + local intensity = (radius * radius) / (dist * dist) + local node_drops = queued_data.on_blast(queued_data.pos, intensity) + if node_drops then + for _, item in pairs(node_drops) do + add_drop(drops, item) + end + end + end + + for _, queued_data in pairs(on_construct_queue) do + queued_data.fn(queued_data.pos) + end + + minetest.log("action", "TNT owned by " .. owner .. " detonated at " .. + minetest.pos_to_string(pos) .. " with radius " .. radius) + + return drops, radius +end + +function tnt.boom(pos, def) + def = def or {} + def.radius = def.radius or 1 + def.damage_radius = def.damage_radius or def.radius * 2 + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if not def.explode_center then + minetest.set_node(pos, {name = "tnt:boom"}) + end + local sound = def.sound or "tnt_explode" + minetest.sound_play(sound, {pos = pos, gain = 1.5, + max_hear_distance = math.min(def.radius * 20, 128)}) + local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, + def.ignore_on_blast, owner, def.explode_center) + -- append entity drops + local damage_radius = (radius / math.max(1, def.radius)) * def.damage_radius + entity_physics(pos, damage_radius, drops) + if not def.disable_drops then + eject_drops(drops, pos, radius) + end + add_effects(pos, radius, drops) + minetest.log("action", "A TNT explosion occurred at " .. minetest.pos_to_string(pos) .. + " with radius " .. radius) +end + +minetest.register_node("tnt:boom", { + drawtype = "airlike", + light_source = default.LIGHT_MAX, + walkable = false, + drop = "", + groups = {dig_immediate = 3}, + -- unaffected by explosions + on_blast = function() end, +}) + +minetest.register_node("tnt:gunpowder", { + description = "Gun Powder", + drawtype = "raillike", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + tiles = { + "tnt_gunpowder_straight.png", + "tnt_gunpowder_curved.png", + "tnt_gunpowder_t_junction.png", + "tnt_gunpowder_crossing.png" + }, + inventory_image = "tnt_gunpowder_inventory.png", + wield_image = "tnt_gunpowder_inventory.png", + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + groups = {dig_immediate = 2, attached_node = 1, flammable = 5, + connect_to_raillike = minetest.raillike_group("gunpowder")}, + sounds = default.node_sound_leaves_defaults(), + + on_punch = function(pos, node, puncher) + if puncher:get_wielded_item():get_name() == "default:torch" then + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + minetest.log("action", puncher:get_player_name() .. + " ignites tnt:gunpowder at " .. + minetest.pos_to_string(pos)) + end + end, + on_blast = function(pos, intensity) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end, + on_burn = function(pos) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end, + on_ignite = function(pos, igniter) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end, +}) + +minetest.register_node("tnt:gunpowder_burning", { + drawtype = "raillike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + light_source = 5, + tiles = {{ + name = "tnt_gunpowder_burning_straight_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + { + name = "tnt_gunpowder_burning_curved_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + { + name = "tnt_gunpowder_burning_t_junction_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + { + name = "tnt_gunpowder_burning_crossing_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }}, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + drop = "", + groups = { + dig_immediate = 2, + attached_node = 1, + connect_to_raillike = minetest.raillike_group("gunpowder") + }, + sounds = default.node_sound_leaves_defaults(), + on_timer = function(pos, elapsed) + for dx = -1, 1 do + for dz = -1, 1 do + if math.abs(dx) + math.abs(dz) == 1 then + for dy = -1, 1 do + tnt.burn({ + x = pos.x + dx, + y = pos.y + dy, + z = pos.z + dz, + }) + end + end + end + end + minetest.remove_node(pos) + end, + -- unaffected by explosions + on_blast = function() end, + on_construct = function(pos) + minetest.sound_play("tnt_gunpowder_burning", {pos = pos, gain = 2}) + minetest.get_node_timer(pos):start(1) + end, +}) + +minetest.register_craft({ + output = "tnt:gunpowder 5", + type = "shapeless", + recipe = {"default:coal_lump", "default:gravel"} +}) + +minetest.register_craftitem("tnt:tnt_stick", { + description = "TNT Stick", + inventory_image = "tnt_tnt_stick.png", + groups = {flammable = 5}, +}) + +if enable_tnt then + minetest.register_craft({ + output = "tnt:tnt_stick 2", + recipe = { + {"tnt:gunpowder", "", "tnt:gunpowder"}, + {"tnt:gunpowder", "default:paper", "tnt:gunpowder"}, + {"tnt:gunpowder", "", "tnt:gunpowder"}, + } + }) + + minetest.register_craft({ + output = "tnt:tnt", + recipe = { + {"tnt:tnt_stick", "tnt:tnt_stick", "tnt:tnt_stick"}, + {"tnt:tnt_stick", "tnt:tnt_stick", "tnt:tnt_stick"}, + {"tnt:tnt_stick", "tnt:tnt_stick", "tnt:tnt_stick"} + } + }) + + minetest.register_abm({ + label = "TNT ignition", + nodenames = {"group:tnt", "tnt:gunpowder"}, + neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing"}, + interval = 4, + chance = 1, + action = function(pos, node) + tnt.burn(pos, node.name) + end, + }) +end + +function tnt.register_tnt(def) + local name + if not def.name:find(':') then + name = "tnt:" .. def.name + else + name = def.name + def.name = def.name:match(":([%w_]+)") + end + if not def.tiles then def.tiles = {} end + local tnt_top = def.tiles.top or def.name .. "_top.png" + local tnt_bottom = def.tiles.bottom or def.name .. "_bottom.png" + local tnt_side = def.tiles.side or def.name .. "_side.png" + local tnt_burning = def.tiles.burning or def.name .. "_top_burning_animated.png" + if not def.damage_radius then def.damage_radius = def.radius * 2 end + + if enable_tnt then + minetest.register_node(":" .. name, { + description = def.description, + tiles = {tnt_top, tnt_bottom, tnt_side}, + is_ground_content = false, + groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + if placer:is_player() then + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name()) + end + end, + on_punch = function(pos, node, puncher) + if puncher:get_wielded_item():get_name() == "default:torch" then + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.registered_nodes[name .. "_burning"].on_construct(pos) + minetest.log("action", puncher:get_player_name() .. + " ignites " .. node.name .. " at " .. + minetest.pos_to_string(pos)) + end + end, + on_blast = function(pos, intensity) + minetest.after(0.1, function() + tnt.boom(pos, def) + end) + end, + mesecons = {effector = + {action_on = + function(pos) + tnt.boom(pos, def) + end + } + }, + on_burn = function(pos) + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.registered_nodes[name .. "_burning"].on_construct(pos) + end, + on_ignite = function(pos, igniter) + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.registered_nodes[name .. "_burning"].on_construct(pos) + end, + }) + end + + minetest.register_node(":" .. name .. "_burning", { + tiles = { + { + name = tnt_burning, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + tnt_bottom, tnt_side + }, + light_source = 5, + drop = "", + sounds = default.node_sound_wood_defaults(), + groups = {falling_node = 1}, + on_timer = function(pos, elapsed) + tnt.boom(pos, def) + end, + -- unaffected by explosions + on_blast = function() end, + on_construct = function(pos) + minetest.sound_play("tnt_ignite", {pos = pos}) + minetest.get_node_timer(pos):start(4) + minetest.check_for_falling(pos) + end, + }) +end + +tnt.register_tnt({ + name = "tnt:tnt", + description = "TNT", + radius = tnt_radius, +}) \ No newline at end of file diff --git a/mods/tnt/license.txt b/mods/tnt/license.txt new file mode 100755 index 0000000..221b7ea --- /dev/null +++ b/mods/tnt/license.txt @@ -0,0 +1,66 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 PilzAdam +Copyright (C) 2014-2016 ShadowNinja +Copyright (C) 2016 sofar (sofar@foo-projects.org) +Copyright (C) 2014-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2014-2016 ShadowNinja +Copyright (C) 2015-2016 Wuzzy +Copyright (C) 2016 sofar (sofar@foo-projects.org) +Copyright (C) 2018 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ \ No newline at end of file diff --git a/mods/ITEMS/tnt/sounds/tnt_explode.ogg b/mods/tnt/sounds/tnt_explode.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/sounds/tnt_explode.ogg rename to mods/tnt/sounds/tnt_explode.ogg diff --git a/mods/ITEMS/tnt/sounds/tnt_gunpowder_burning.ogg b/mods/tnt/sounds/tnt_gunpowder_burning.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/sounds/tnt_gunpowder_burning.ogg rename to mods/tnt/sounds/tnt_gunpowder_burning.ogg diff --git a/mods/ITEMS/tnt/sounds/tnt_ignite.ogg b/mods/tnt/sounds/tnt_ignite.ogg old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/sounds/tnt_ignite.ogg rename to mods/tnt/sounds/tnt_ignite.ogg diff --git a/mods/ITEMS/tnt/textures/tnt_blast.png b/mods/tnt/textures/tnt_blast.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_blast.png rename to mods/tnt/textures/tnt_blast.png diff --git a/mods/ITEMS/tnt/textures/tnt_boom.png b/mods/tnt/textures/tnt_boom.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_boom.png rename to mods/tnt/textures/tnt_boom.png diff --git a/mods/ITEMS/tnt/textures/tnt_bottom.png b/mods/tnt/textures/tnt_bottom.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_bottom.png rename to mods/tnt/textures/tnt_bottom.png diff --git a/mods/ITEMS/tnt/textures/tnt_gunpowder_burning_crossing_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_gunpowder_burning_crossing_animated.png rename to mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png diff --git a/mods/ITEMS/tnt/textures/tnt_gunpowder_burning_curved_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_gunpowder_burning_curved_animated.png rename to mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png diff --git a/mods/ITEMS/tnt/textures/tnt_gunpowder_burning_straight_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_gunpowder_burning_straight_animated.png rename to mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png diff --git a/mods/ITEMS/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png rename to mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png diff --git a/mods/ITEMS/tnt/textures/tnt_gunpowder_crossing.png b/mods/tnt/textures/tnt_gunpowder_crossing.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_gunpowder_crossing.png rename to mods/tnt/textures/tnt_gunpowder_crossing.png diff --git a/mods/ITEMS/tnt/textures/tnt_gunpowder_curved.png b/mods/tnt/textures/tnt_gunpowder_curved.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_gunpowder_curved.png rename to mods/tnt/textures/tnt_gunpowder_curved.png diff --git a/mods/ITEMS/tnt/textures/tnt_gunpowder_inventory.png b/mods/tnt/textures/tnt_gunpowder_inventory.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_gunpowder_inventory.png rename to mods/tnt/textures/tnt_gunpowder_inventory.png diff --git a/mods/ITEMS/tnt/textures/tnt_gunpowder_straight.png b/mods/tnt/textures/tnt_gunpowder_straight.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_gunpowder_straight.png rename to mods/tnt/textures/tnt_gunpowder_straight.png diff --git a/mods/ITEMS/tnt/textures/tnt_gunpowder_t_junction.png b/mods/tnt/textures/tnt_gunpowder_t_junction.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_gunpowder_t_junction.png rename to mods/tnt/textures/tnt_gunpowder_t_junction.png diff --git a/mods/ITEMS/tnt/textures/tnt_side.png b/mods/tnt/textures/tnt_side.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_side.png rename to mods/tnt/textures/tnt_side.png diff --git a/mods/ENTITIES/mobs/textures/tnt_smoke.png b/mods/tnt/textures/tnt_smoke.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ENTITIES/mobs/textures/tnt_smoke.png rename to mods/tnt/textures/tnt_smoke.png diff --git a/mods/tnt/textures/tnt_tnt_stick.png b/mods/tnt/textures/tnt_tnt_stick.png new file mode 100644 index 0000000..bc47a29 Binary files /dev/null and b/mods/tnt/textures/tnt_tnt_stick.png differ diff --git a/mods/ITEMS/tnt/textures/tnt_top.png b/mods/tnt/textures/tnt_top.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_top.png rename to mods/tnt/textures/tnt_top.png diff --git a/mods/ITEMS/tnt/textures/tnt_top_burning.png b/mods/tnt/textures/tnt_top_burning.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_top_burning.png rename to mods/tnt/textures/tnt_top_burning.png diff --git a/mods/ITEMS/tnt/textures/tnt_top_burning_animated.png b/mods/tnt/textures/tnt_top_burning_animated.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tnt/textures/tnt_top_burning_animated.png rename to mods/tnt/textures/tnt_top_burning_animated.png diff --git a/mods/ITEMS/vessels/README.txt b/mods/vessels/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/vessels/README.txt rename to mods/vessels/README.txt diff --git a/mods/ITEMS/signs/depends.txt b/mods/vessels/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/signs/depends.txt rename to mods/vessels/depends.txt diff --git a/mods/vessels/init.lua b/mods/vessels/init.lua new file mode 100755 index 0000000..43d8092 --- /dev/null +++ b/mods/vessels/init.lua @@ -0,0 +1,216 @@ +-- Minetest 0.4 mod: vessels +-- See README.txt for licensing and other information. + +local vessels_shelf_formspec = + "size[8,7;]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[context;vessels;0,0.3;8,2;]" .. + "list[current_player;main;0,2.85;8,1;]" .. + "list[current_player;main;0,4.08;8,3;8]" .. + "listring[context;vessels]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0, 2.85) + +local function get_vessels_shelf_formspec(inv) + local formspec = vessels_shelf_formspec + local invlist = inv and inv:get_list("vessels") + -- Inventory slots overlay + local vx, vy = 0, 0.3 + for i = 1, 16 do + if i == 9 then + vx = 0 + vy = vy + 1 + end + if not invlist or invlist[i]:is_empty() then + formspec = formspec .. + "image[" .. vx .. "," .. vy .. ";1,1;vessels_shelf_slot.png]" + end + vx = vx + 1 + end + return formspec +end + +minetest.register_node("vessels:shelf", { + description = "Vessels Shelf", + tiles = {"default_wood.png", "default_wood.png", "default_wood.png", + "default_wood.png", "vessels_shelf.png", "vessels_shelf.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_vessels_shelf_formspec(nil)) + local inv = meta:get_inventory() + inv:set_size("vessels", 8 * 2) + end, + can_dig = function(pos,player) + local inv = minetest.get_meta(pos):get_inventory() + return inv:is_empty("vessels") + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if minetest.get_item_group(stack:get_name(), "vessel") ~= 0 then + return stack:get_count() + end + return 0 + 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 vessels shelf at ".. minetest.pos_to_string(pos)) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory())) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " moves stuff to vessels shelf at ".. minetest.pos_to_string(pos)) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory())) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " takes stuff from vessels shelf at ".. minetest.pos_to_string(pos)) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory())) + end, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "vessels", drops) + drops[#drops + 1] = "vessels:shelf" + minetest.remove_node(pos) + return drops + end, +}) + +minetest.register_craft({ + output = "vessels:shelf", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:vessel", "group:vessel", "group:vessel"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_node("vessels:glass_bottle", { + description = "Empty Glass Bottle", + drawtype = "plantlike", + tiles = {"vessels_glass_bottle.png"}, + inventory_image = "vessels_glass_bottle.png", + wield_image = "vessels_glass_bottle.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "vessels:glass_bottle 10", + recipe = { + {"default:glass", "", "default:glass"}, + {"default:glass", "", "default:glass"}, + {"", "default:glass", ""} + } +}) + +minetest.register_node("vessels:drinking_glass", { + description = "Empty Drinking Glass", + drawtype = "plantlike", + tiles = {"vessels_drinking_glass.png"}, + inventory_image = "vessels_drinking_glass_inv.png", + wield_image = "vessels_drinking_glass.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "vessels:drinking_glass 14", + recipe = { + {"default:glass", "", "default:glass"}, + {"default:glass", "", "default:glass"}, + {"default:glass", "default:glass", "default:glass"} + } +}) + +minetest.register_node("vessels:steel_bottle", { + description = "Empty Heavy Steel Bottle", + drawtype = "plantlike", + tiles = {"vessels_steel_bottle.png"}, + inventory_image = "vessels_steel_bottle.png", + wield_image = "vessels_steel_bottle.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_defaults(), +}) + +minetest.register_craft( { + output = "vessels:steel_bottle 5", + recipe = { + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + {"", "default:steel_ingot", ""} + } +}) + + +-- Glass and steel recycling + +minetest.register_craftitem("vessels:glass_fragments", { + description = "Glass Fragments", + inventory_image = "vessels_glass_fragments.png", +}) + +minetest.register_craft( { + type = "shapeless", + output = "vessels:glass_fragments", + recipe = { + "vessels:glass_bottle", + "vessels:glass_bottle", + }, +}) + +minetest.register_craft( { + type = "shapeless", + output = "vessels:glass_fragments", + recipe = { + "vessels:drinking_glass", + "vessels:drinking_glass", + }, +}) + +minetest.register_craft({ + type = "cooking", + output = "default:glass", + recipe = "vessels:glass_fragments", +}) + +minetest.register_craft( { + type = "cooking", + output = "default:steel_ingot", + recipe = "vessels:steel_bottle", +}) + +minetest.register_craft({ + type = "fuel", + recipe = "vessels:shelf", + burntime = 30, +}) diff --git a/mods/ITEMS/vessels/license.txt b/mods/vessels/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/vessels/license.txt rename to mods/vessels/license.txt diff --git a/mods/ITEMS/vessels/textures/vessels_drinking_glass.png b/mods/vessels/textures/vessels_drinking_glass.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/vessels/textures/vessels_drinking_glass.png rename to mods/vessels/textures/vessels_drinking_glass.png diff --git a/mods/ITEMS/vessels/textures/vessels_drinking_glass_inv.png b/mods/vessels/textures/vessels_drinking_glass_inv.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/vessels/textures/vessels_drinking_glass_inv.png rename to mods/vessels/textures/vessels_drinking_glass_inv.png diff --git a/mods/ITEMS/vessels/textures/vessels_glass_bottle.png b/mods/vessels/textures/vessels_glass_bottle.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/vessels/textures/vessels_glass_bottle.png rename to mods/vessels/textures/vessels_glass_bottle.png diff --git a/mods/ITEMS/vessels/textures/vessels_glass_fragments.png b/mods/vessels/textures/vessels_glass_fragments.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/vessels/textures/vessels_glass_fragments.png rename to mods/vessels/textures/vessels_glass_fragments.png diff --git a/mods/ITEMS/vessels/textures/vessels_shelf.png b/mods/vessels/textures/vessels_shelf.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/vessels/textures/vessels_shelf.png rename to mods/vessels/textures/vessels_shelf.png diff --git a/mods/ITEMS/vessels/textures/vessels_shelf_slot.png b/mods/vessels/textures/vessels_shelf_slot.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/vessels/textures/vessels_shelf_slot.png rename to mods/vessels/textures/vessels_shelf_slot.png diff --git a/mods/ITEMS/vessels/textures/vessels_steel_bottle.png b/mods/vessels/textures/vessels_steel_bottle.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/vessels/textures/vessels_steel_bottle.png rename to mods/vessels/textures/vessels_steel_bottle.png diff --git a/mods/ITEMS/walls/README.txt b/mods/walls/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/walls/README.txt rename to mods/walls/README.txt diff --git a/mods/ITEMS/tools/depends.txt b/mods/walls/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/tools/depends.txt rename to mods/walls/depends.txt diff --git a/mods/walls/init.lua b/mods/walls/init.lua new file mode 100755 index 0000000..564d6df --- /dev/null +++ b/mods/walls/init.lua @@ -0,0 +1,46 @@ +walls = {} + +walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sounds) + -- inventory node, and pole-type wall start item + minetest.register_node(wall_name, { + description = wall_desc, + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = {{-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}}, + -- connect_bottom = + connect_front = {{-3/16, -1/2, -1/2, 3/16, 3/8, -1/4}}, + connect_left = {{-1/2, -1/2, -3/16, -1/4, 3/8, 3/16}}, + connect_back = {{-3/16, -1/2, 1/4, 3/16, 3/8, 1/2}}, + connect_right = {{ 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}}, + }, + connects_to = { "group:wall", "group:stone", "group:fence" }, + paramtype = "light", + is_ground_content = false, + tiles = { wall_texture, }, + walkable = true, + groups = { cracky = 3, wall = 1, stone = 2 }, + sounds = wall_sounds, + }) + + -- crafting recipe + minetest.register_craft({ + output = wall_name .. " 6", + recipe = { + { '', '', '' }, + { wall_mat, wall_mat, wall_mat}, + { wall_mat, wall_mat, wall_mat}, + } + }) + +end + +walls.register("walls:cobble", "Cobblestone Wall", "default_cobble.png", + "default:cobble", default.node_sound_stone_defaults()) + +walls.register("walls:mossycobble", "Mossy Cobblestone Wall", "default_mossycobble.png", + "default:mossycobble", default.node_sound_stone_defaults()) + +walls.register("walls:desertcobble", "Desert Cobblestone Wall", "default_desert_cobble.png", + "default:desert_cobble", default.node_sound_stone_defaults()) + diff --git a/mods/ITEMS/walls/license.txt b/mods/walls/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/walls/license.txt rename to mods/walls/license.txt diff --git a/mods/ITEMS/wool/README.txt b/mods/wool/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/README.txt rename to mods/wool/README.txt diff --git a/mods/ITEMS/torches/depends.txt b/mods/wool/depends.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/torches/depends.txt rename to mods/wool/depends.txt diff --git a/mods/ITEMS/wool/init.lua b/mods/wool/init.lua old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/init.lua rename to mods/wool/init.lua diff --git a/mods/ITEMS/wool/license.txt b/mods/wool/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/license.txt rename to mods/wool/license.txt diff --git a/mods/ITEMS/wool/textures/wool_black.png b/mods/wool/textures/wool_black.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_black.png rename to mods/wool/textures/wool_black.png diff --git a/mods/ITEMS/wool/textures/wool_blue.png b/mods/wool/textures/wool_blue.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_blue.png rename to mods/wool/textures/wool_blue.png diff --git a/mods/ITEMS/wool/textures/wool_brown.png b/mods/wool/textures/wool_brown.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_brown.png rename to mods/wool/textures/wool_brown.png diff --git a/mods/ITEMS/wool/textures/wool_cyan.png b/mods/wool/textures/wool_cyan.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_cyan.png rename to mods/wool/textures/wool_cyan.png diff --git a/mods/ITEMS/wool/textures/wool_dark_green.png b/mods/wool/textures/wool_dark_green.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_dark_green.png rename to mods/wool/textures/wool_dark_green.png diff --git a/mods/ITEMS/wool/textures/wool_dark_grey.png b/mods/wool/textures/wool_dark_grey.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_dark_grey.png rename to mods/wool/textures/wool_dark_grey.png diff --git a/mods/ITEMS/wool/textures/wool_green.png b/mods/wool/textures/wool_green.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_green.png rename to mods/wool/textures/wool_green.png diff --git a/mods/ITEMS/wool/textures/wool_grey.png b/mods/wool/textures/wool_grey.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_grey.png rename to mods/wool/textures/wool_grey.png diff --git a/mods/ITEMS/wool/textures/wool_magenta.png b/mods/wool/textures/wool_magenta.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_magenta.png rename to mods/wool/textures/wool_magenta.png diff --git a/mods/ITEMS/wool/textures/wool_orange.png b/mods/wool/textures/wool_orange.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_orange.png rename to mods/wool/textures/wool_orange.png diff --git a/mods/ITEMS/wool/textures/wool_pink.png b/mods/wool/textures/wool_pink.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_pink.png rename to mods/wool/textures/wool_pink.png diff --git a/mods/ITEMS/wool/textures/wool_red.png b/mods/wool/textures/wool_red.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_red.png rename to mods/wool/textures/wool_red.png diff --git a/mods/ITEMS/wool/textures/wool_violet.png b/mods/wool/textures/wool_violet.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_violet.png rename to mods/wool/textures/wool_violet.png diff --git a/mods/ITEMS/wool/textures/wool_white.png b/mods/wool/textures/wool_white.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_white.png rename to mods/wool/textures/wool_white.png diff --git a/mods/ITEMS/wool/textures/wool_yellow.png b/mods/wool/textures/wool_yellow.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/wool/textures/wool_yellow.png rename to mods/wool/textures/wool_yellow.png diff --git a/mods/ITEMS/xpanes/README.txt b/mods/xpanes/README.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/xpanes/README.txt rename to mods/xpanes/README.txt diff --git a/mods/xpanes/depends.txt b/mods/xpanes/depends.txt new file mode 100755 index 0000000..331d858 --- /dev/null +++ b/mods/xpanes/depends.txt @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/mods/xpanes/init.lua b/mods/xpanes/init.lua new file mode 100755 index 0000000..653c8cd --- /dev/null +++ b/mods/xpanes/init.lua @@ -0,0 +1,199 @@ + +local function is_pane(pos) + return minetest.get_item_group(minetest.get_node(pos).name, "pane") > 0 +end + +local function connects_dir(pos, name, dir) + local aside = vector.add(pos, minetest.facedir_to_dir(dir)) + if is_pane(aside) then + return true + end + + local connects_to = minetest.registered_nodes[name].connects_to + if not connects_to then + return false + end + local list = minetest.find_nodes_in_area(aside, aside, connects_to) + + if #list > 0 then + return true + end + + return false +end + +local function swap(pos, node, name, param2) + if node.name == name and node.param2 == param2 then + return + end + + minetest.set_node(pos, {name = name, param2 = param2}) +end + +local function update_pane(pos) + if not is_pane(pos) then + return + end + local node = minetest.get_node(pos) + local name = node.name + if name:sub(-5) == "_flat" then + name = name:sub(1, -6) + end + + local any = node.param2 + local c = {} + local count = 0 + for dir = 0, 3 do + c[dir] = connects_dir(pos, name, dir) + if c[dir] then + any = dir + count = count + 1 + end + end + + if count == 0 then + swap(pos, node, name .. "_flat", any) + elseif count == 1 then + swap(pos, node, name .. "_flat", (any + 1) % 4) + elseif count == 2 then + if (c[0] and c[2]) or (c[1] and c[3]) then + swap(pos, node, name .. "_flat", (any + 1) % 4) + else + swap(pos, node, name, 0) + end + else + swap(pos, node, name, 0) + end +end + +minetest.register_on_placenode(function(pos, node) + if minetest.get_item_group(node, "pane") then + update_pane(pos) + end + for i = 0, 3 do + local dir = minetest.facedir_to_dir(i) + update_pane(vector.add(pos, dir)) + end +end) + +minetest.register_on_dignode(function(pos) + for i = 0, 3 do + local dir = minetest.facedir_to_dir(i) + update_pane(vector.add(pos, dir)) + end +end) + +xpanes = {} +function xpanes.register_pane(name, def) + for i = 1, 15 do + minetest.register_alias("xpanes:" .. name .. "_" .. i, "xpanes:" .. name .. "_flat") + end + + local flatgroups = table.copy(def.groups) + flatgroups.pane = 1 + minetest.register_node(":xpanes:" .. name .. "_flat", { + description = def.description, + drawtype = "nodebox", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + inventory_image = def.inventory_image, + wield_image = def.wield_image, + paramtype2 = "facedir", + tiles = {def.textures[3], def.textures[3], def.textures[1]}, + groups = flatgroups, + drop = "xpanes:" .. name .. "_flat", + sounds = def.sounds, + use_texture_alpha = def.use_texture_alpha or false, + node_box = { + type = "fixed", + fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, + }, + selection_box = { + type = "fixed", + fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, + }, + connect_sides = { "left", "right" }, + }) + + local groups = table.copy(def.groups) + groups.pane = 1 + groups.not_in_creative_inventory = 1 + minetest.register_node(":xpanes:" .. name, { + drawtype = "nodebox", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + description = def.description, + tiles = {def.textures[3], def.textures[3], def.textures[1]}, + groups = groups, + drop = "xpanes:" .. name .. "_flat", + sounds = def.sounds, + use_texture_alpha = def.use_texture_alpha or false, + node_box = { + type = "connected", + fixed = {{-1/32, -1/2, -1/32, 1/32, 1/2, 1/32}}, + connect_front = {{-1/32, -1/2, -1/2, 1/32, 1/2, -1/32}}, + connect_left = {{-1/2, -1/2, -1/32, -1/32, 1/2, 1/32}}, + connect_back = {{-1/32, -1/2, 1/32, 1/32, 1/2, 1/2}}, + connect_right = {{1/32, -1/2, -1/32, 1/2, 1/2, 1/32}}, + }, + connects_to = {"group:pane", "group:stone", "group:glass", "group:wood", "group:tree"}, + }) + + minetest.register_craft({ + output = "xpanes:" .. name .. "_flat 16", + recipe = def.recipe + }) +end + +xpanes.register_pane("pane", { + description = "Glass Pane", + textures = {"default_glass.png","xpanes_pane_half.png","xpanes_edge.png"}, + inventory_image = "default_glass.png", + wield_image = "default_glass.png", + sounds = default.node_sound_glass_defaults(), + groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3}, + recipe = { + {"default:glass", "default:glass", "default:glass"}, + {"default:glass", "default:glass", "default:glass"} + } +}) + +xpanes.register_pane("obsidian_pane", { + description = "Obsidian Glass Pane", + textures = {"default_obsidian_glass.png","xpanes_pane_half.png","xpanes_edge_obsidian.png"}, + inventory_image = "default_obsidian_glass.png", + wield_image = "default_obsidian_glass.png", + sounds = default.node_sound_glass_defaults(), + groups = {snappy=2, cracky=3}, + recipe = { + {"default:obsidian_glass", "default:obsidian_glass", "default:obsidian_glass"}, + {"default:obsidian_glass", "default:obsidian_glass", "default:obsidian_glass"} + } +}) + +xpanes.register_pane("bar", { + description = "Steel Bars", + textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_bar_top.png"}, + inventory_image = "xpanes_bar.png", + wield_image = "xpanes_bar.png", + groups = {cracky=2}, + sounds = default.node_sound_metal_defaults(), + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"} + } +}) + +minetest.register_lbm({ + name = "xpanes:gen2", + nodenames = {"group:pane"}, + action = function(pos, node) + update_pane(pos) + for i = 0, 3 do + local dir = minetest.facedir_to_dir(i) + update_pane(vector.add(pos, dir)) + end + end +}) diff --git a/mods/ITEMS/xpanes/license.txt b/mods/xpanes/license.txt old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/xpanes/license.txt rename to mods/xpanes/license.txt diff --git a/mods/ITEMS/xpanes/textures/xpanes_bar.png b/mods/xpanes/textures/xpanes_bar.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/xpanes/textures/xpanes_bar.png rename to mods/xpanes/textures/xpanes_bar.png diff --git a/mods/xpanes/textures/xpanes_bar_top.png b/mods/xpanes/textures/xpanes_bar_top.png new file mode 100755 index 0000000..7b74508 Binary files /dev/null and b/mods/xpanes/textures/xpanes_bar_top.png differ diff --git a/mods/xpanes/textures/xpanes_edge.png b/mods/xpanes/textures/xpanes_edge.png new file mode 100755 index 0000000..92f78a1 Binary files /dev/null and b/mods/xpanes/textures/xpanes_edge.png differ diff --git a/mods/xpanes/textures/xpanes_edge_obsidian.png b/mods/xpanes/textures/xpanes_edge_obsidian.png new file mode 100755 index 0000000..abdd14e Binary files /dev/null and b/mods/xpanes/textures/xpanes_edge_obsidian.png differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_pane_half.png b/mods/xpanes/textures/xpanes_pane_half.png old mode 100644 new mode 100755 similarity index 100% rename from mods/ITEMS/xpanes/textures/xpanes_pane_half.png rename to mods/xpanes/textures/xpanes_pane_half.png diff --git a/mods/xpanes/textures/xpanes_space.png b/mods/xpanes/textures/xpanes_space.png new file mode 100755 index 0000000..331e365 Binary files /dev/null and b/mods/xpanes/textures/xpanes_space.png differ diff --git a/settingtypes.txt b/settingtypes.txt new file mode 100755 index 0000000..5eb7cbb --- /dev/null +++ b/settingtypes.txt @@ -0,0 +1,62 @@ +# This file contains settings of minetest_game that can be changed in +# minetest.conf + +# In creative mode players are able to dig all kind of blocks nearly +# instantly, and have access to unlimited resources. +# Some of the functionality is only available if this setting is present +# at startup. +creative_mode (Creative mode) bool false + +# Flammable nodes will be ignited by nearby igniters. Spreading fire may +# cause severe destruction. +# Spreading fire nodes will disappear when fire is disabled, but +# 'permanent_flame' nodes are unaffected. +enable_fire (Fire) bool true + +# Enable flame sound. +flame_sound (Flame sound) bool true + +# Enable lavacooling. +enable_lavacooling (Lavacooling) bool true + +# If enabled, steel tools, torches and cobblestone will be given to new +# players. +give_initial_stuff (Give initial items) bool false + +# If enabled, players respawn at the bed they last lay on instead of normal +# spawn. +# This setting is only read at startup. +enable_bed_respawn (Respawn at bed) bool true + +# If enabled, the night can be skipped if more than half of the players are +# in beds. +enable_bed_night_skip (Skip night when sleeping) bool true + +# When TNT explodes, it destroys nearby nodes and damages nearby players. +# This setting is disabled by default on servers. +enable_tnt (TNT) bool true + +# The radius in which nodes will be destroyed by a TNT explosion. +tnt_radius (TNT radius) int 3 0 + +# Sets the behaviour of the inventory items when a player dies. +# bones: Store items in a bone node but drop items if inside protected area. +# drop: Drop items on the ground. +# keep: Player keeps items. +bones_mode (Bones mode) enum bones bones,drop,keep + +# The time in seconds after which the bones of a dead player can be looted +# by everyone. +# Setting this to 0 will disable sharing of bones completely. +share_bones_time (Bones share time) int 1200 0 + +# How much earlier the bones of a dead player can be looted by +# everyone if the player dies in a protected area they don't own. +# 0 to disable. By default it is "share_bones_time" divide by four. +share_bones_time_early (Earlier bones share time) int 300 0 + +# Inform player of condition and location of new bones. +bones_position_message (Inform player about bones) bool false + +# Replaces old stairs with new ones. Only required for older worlds. +enable_stairs_replace_abm (Replace old stairs) bool false